DailyWork.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?php
  2. namespace app\sys\controller;
  3. use app\logics\OrgLogic;
  4. use app\model\User;
  5. use think\facade\View;
  6. use think\facade\Request;
  7. use app\logics\EmployeeLogic;
  8. use app\model\Employee;
  9. use app\model\Org;
  10. use app\model\DailyWork as DailyWorkModel;
  11. use app\model\DailyWorkComment;
  12. class DailyWork
  13. {
  14. /**
  15. * 选择日报进入
  16. */
  17. public function work()
  18. {
  19. // 部门
  20. $org = OrgLogic::struc(request()->employee->root_id);
  21. View::assign('org', $org);
  22. $orgids = orgSubIds(request()->employee->root_id);
  23. View::assign('orgids', json_encode($orgids));
  24. return View::fetch();
  25. }
  26. /**
  27. * 发送日报列表视图
  28. */
  29. public function sent()
  30. {
  31. return View::fetch();
  32. }
  33. /**
  34. * 抄送给我的日报列表视图
  35. */
  36. public function received()
  37. {
  38. return View::fetch();
  39. }
  40. /*
  41. * 列表数据
  42. */
  43. public function list()
  44. {
  45. $page = Request::param('page',1, 'intval');
  46. $limit = Request::param('limit', 10, 'intval');
  47. $type = Request::param('type', '', 'trim');
  48. $org = Request::param('org', '', 'intval');
  49. $emp_id = Request::param('emp_id', '', 'intval');
  50. $employee = request()->employee;
  51. $uid = $employee['uid'];
  52. $root_id = $employee['root_id'];
  53. $u_where[] = ['root_id', '=', $root_id];
  54. if ($org) {
  55. $u_where[] = ['org_id', '=', $org];
  56. }
  57. if ($emp_id) {
  58. $u_where[] = ['id', '=', $emp_id];
  59. }
  60. $uids = Employee::where($u_where)->column('uid');
  61. $uids = array_values(array_filter(array_unique($uids)));
  62. $uids_arr = implode(',', $uids);
  63. $list = DailyWorkModel::with(['user' => function ($query) {
  64. $query->field('id,headimgurl');
  65. },'employee']);
  66. $where[] = ['uid', 'in', $uids_arr];
  67. $where[] = ['del', '=', 0];
  68. if ($type) {
  69. $where[] = ['type', '=', $type];
  70. }
  71. $list->where($where);
  72. $data = $list->field('id,uid,current_work,next_plan,addtime,unread_comments,type,reporting_object,reporting_object_view')->order('addtime','desc')->page($page , $limit)->select()->toArray();
  73. $count = $list->count();
  74. $dailyWork = [];
  75. foreach($data as &$rs)
  76. {
  77. $rs['org_name'] = Org::where('id', $rs['org_id'])->value('name');
  78. //我收到的日报记录是否已经阅读
  79. $rs['view'] = in_array($uid , explode(',',$rs['reporting_object_view'])) ? true : false;
  80. $rs['date'] = date('Y-m-d',strtotime($rs['addtime']));
  81. $rs['time'] = date('H:i',strtotime($rs['addtime']));
  82. $reporting_object = explode(',', $rs['reporting_object']);
  83. $rs['reporting_object'] = (new Employee())->where('uid', 'in', $reporting_object)->field('id,name,headimgurl')->select();
  84. /*if($rs['date'] == date('Y-m-d')){
  85. $dailyWork['今天'][] = $rs;
  86. }elseif($rs['date'] == date("Y-m-d",strtotime("-1 day"))){
  87. $dailyWork['昨天'][] = $rs;
  88. }else{
  89. $dailyWork[$rs['date']][] = $rs;
  90. }*/
  91. }
  92. return json(['code'=>0 , 'msg'=>'查询成功' , 'data'=> $data , 'page'=>ceil($count/10), 'count'=> $count]);
  93. }
  94. /*
  95. * 发送日报视图
  96. */
  97. public function submit_work($type)
  98. {
  99. View::assign('type',$type);
  100. $employee = request()->employee;
  101. $Employee = Employee::with(['org' => function ($query) {
  102. $query->field('id,pid');
  103. }])->where(['uid'=>$employee['uid']])->field('is_manager,org_id')->find()->toArray();
  104. $where = [
  105. 'org_id' => $Employee['is_manager'] == 0 ? $Employee['org_id'] : $Employee['org']['pid'],
  106. 'is_manager' => 1
  107. ];
  108. $last = Employee::with(['user' => function ($query) {
  109. $query->field('id,headimgurl');
  110. }])->where($where)->field('id,uid,name')->select()->toArray();
  111. $defaultCheckUid = array_column($last, 'id');
  112. $defaultCheckUid = implode(',',$defaultCheckUid);
  113. View::assign('defaultCheckUid',$defaultCheckUid);
  114. View::assign('user',$last);
  115. return View::fetch();
  116. }
  117. /*
  118. * 发送日报提交报名
  119. */
  120. public function add_submit_work()
  121. {
  122. $param = Request::only(['current_work', 'next_plan', 'other_matters','enclosure_file','objct_id','type']);
  123. $employee = request()->employee;
  124. $data = [
  125. 'current_work' => $param['current_work'],
  126. 'next_plan' => $param['next_plan'],
  127. 'other_matters' => $param['other_matters'],
  128. 'enclosure_file' => isset($param['enclosure_file']) ? implode(',',$param['enclosure_file']) : '',
  129. 'uid' => $employee['uid'],
  130. 'type' => $param['type']
  131. ];
  132. $uid = Employee::where('id','in',$param['objct_id'])->column('uid');
  133. $data['reporting_object'] = implode(',',$uid);
  134. DailyWorkModel::create($data);
  135. return json(['code'=>0 , 'msg'=>'发送成功']);
  136. }
  137. /*
  138. *抄送人列表
  139. */
  140. public function report_object()
  141. {
  142. if (!Request::isAjax()) {
  143. return View::fetch();
  144. }
  145. $keyword = Request::param('keyword');
  146. $objct_id = Request::param('objct_id');
  147. $employee = request()->employee;
  148. $uid = $employee['uid'];
  149. $Employee = Employee::with(['org'])->where(['uid'=>$uid])->find();
  150. $where = [
  151. 'org_id' => $Employee['is_manager'] == 0 ? $Employee['org_id'] : $Employee['org']['pid'],
  152. 'is_manager' => 1
  153. ];
  154. $lastId = !empty($objct_id) ? explode(',',$objct_id) : Employee::where($where)->column('id');
  155. if(!empty($keyword))
  156. {
  157. $condition[] = ['name','like','%'.$keyword.'%'];
  158. }
  159. if($Employee['org']['pid'] == 0){
  160. $condition[] = ['org_id' , '=' , $Employee['org']['id']];
  161. }else{
  162. $path = explode('-',$Employee['org']['path']);
  163. $orgId = Org::whereLike('path' , '%'.$path[0].'-'.$path[1].'-'.'%')->column('id');
  164. $zero_org = Org::where([['pid', '=', 0], ['path', 'like', '%'.$path[0].'-'.'%']])->select();
  165. // 可能出现匹配不准确的情况 如 pid=0 path=23- pid=0 path=123-
  166. foreach ($zero_org as $v){
  167. $path_zero = explode(',', $v['path']);
  168. if ($path_zero[0] == $path[0].'-'){
  169. $orgId[] = $v['id'];
  170. }
  171. }
  172. $condition[] = ['org_id','in',$orgId];
  173. }
  174. $list = Employee::with(['user' => function ($query) {
  175. $query->field('id,headimgurl');
  176. }])->where('uid','<>',$uid)
  177. ->where($condition)
  178. ->field('id,name,uid')
  179. ->select()->toArray();
  180. $SortArray = [];
  181. foreach($list as $rs)
  182. {
  183. $letter = strtoupper(hanziInitials($rs['name']));
  184. $data = [
  185. 'id'=>$rs['id'],
  186. 'name'=>$rs['name'],
  187. 'uid'=>$rs['uid'],
  188. 'headimgurl'=>$rs['user']['headimgurl'],
  189. 'checked'=>in_array($rs['id'] , $lastId) ? true : false
  190. ];
  191. $SortArray[$letter][] = $data;
  192. }
  193. //首字母排序
  194. ksort($SortArray);
  195. return json(['code'=>0 , 'msg'=>'抄送人员列表' , 'data'=>$SortArray]);
  196. }
  197. /*
  198. * 日报详情
  199. * category : sent发送 , received收到
  200. */
  201. public function details($id , $category)
  202. {
  203. $employee = request()->employee;
  204. $uid = $employee['uid'];
  205. $data = DailyWorkModel::with(['user' => function ($query) {
  206. $query->field('id,headimgurl');
  207. },'employee'])
  208. ->where(['id'=>$id , 'del'=>0])
  209. ->field('id,uid,type,current_work,next_plan,other_matters,enclosure_file,reporting_object,addtime,unread_comments,reporting_object_view')
  210. ->find();
  211. $reporting_object = Employee::with(['user' => function ($query) {
  212. $query->field('id,headimgurl');
  213. }])->where('uid','in',$data['reporting_object'])->field('uid,name')->select();
  214. //自己查看详情评论阅读数清零
  215. if($data['uid'] == $uid && $data['unread_comments'] > 0)
  216. {
  217. $data->unread_comments = 0;
  218. $data->save();
  219. }
  220. //抄送人查看详情浏览记录
  221. $rs = array_values(explode(',',$data['reporting_object']));
  222. $rsview = array_values(explode(',',$data['reporting_object_view']));
  223. if(in_array($uid , $rs) && !in_array($uid , $rsview))
  224. {
  225. $data->reporting_object_view = empty($data['reporting_object_view']) ? $uid : $data['reporting_object_view'].','.$uid;
  226. $data->save();
  227. }
  228. //汇报对象展示
  229. $data['reporting_object'] = $reporting_object;
  230. View::assign('data',$data);
  231. View::assign('category',$category);
  232. return View::fetch();
  233. }
  234. /*
  235. * 评论列表
  236. */
  237. public function comment_list()
  238. {
  239. $param = Request::only(['id','page']);
  240. $list = DailyWorkComment::with(['employee','joinemployee','user'])->where(['join_id'=>$param['id']])->field('id,uid,comment,pid,parent_uid,addtime')->page($param['page'] , 10)->order('addtime')->select();
  241. $count = DailyWorkComment::where(['join_id'=>$param['id']])->count();
  242. return json(['code'=>0 , 'msg'=>'评论列表' , 'data'=>$list , 'page'=>ceil($count/10)]);
  243. }
  244. /*
  245. * 发送评论
  246. */
  247. public function send_comments()
  248. {
  249. $param = Request::only(['daily_work_id','parent_id','parent_uid','comment']);
  250. $work = DailyWorkModel::where(['id'=>$param['daily_work_id'] , 'del'=>0])->field('id,unread_comments')->find();
  251. if(!$work) return json(['code'=>1 , 'msg'=>'日报内容不存在']);
  252. if(empty($param['comment'])) return json(['code'=>1 , 'msg'=>'请输入评论内容']);
  253. $employee = request()->employee;
  254. $uid = $employee['uid'];
  255. $data = [
  256. 'uid' => $uid,
  257. 'comment' => $param['comment'],
  258. 'join_id' => $param['daily_work_id'],
  259. 'pid' => $param['parent_id'],
  260. 'parent_uid' => $param['parent_uid']
  261. ];
  262. DailyWorkComment::insert($data);
  263. //评论时日报评论数增加
  264. $work->unread_comments += 1;
  265. $work->save();
  266. return json(['code'=>0 , 'msg'=>'评论成功']);
  267. }
  268. }