DailyWork.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. namespace app\api\controller;
  3. use think\Controller;
  4. use think\facade\Request;
  5. use think\facade\Db;
  6. use app\model\DailyWork as DailyWorkModel;
  7. use app\model\DailyWorkComment;
  8. use app\model\Employee;
  9. use app\model\Org;
  10. class DailyWork extends Base
  11. {
  12. /*
  13. * 发送日报抄送上级
  14. * 默认@抄送我的上级管理员
  15. */
  16. public function reporting_object($keyword)
  17. {
  18. $uid = $this->request->token['uid'];
  19. $Employee = Employee::with(['org'])->where(['uid'=>$uid])->find();
  20. if(!$Employee) return json(['code'=>1 , 'msg'=>'获取信息失败']);
  21. $where = [
  22. 'org_id' => $Employee['is_manager'] == 0 ? $Employee['org_id'] : $Employee['org']['pid'],
  23. 'is_manager' => 1
  24. ];
  25. $lastId = Employee::where($where)->column('id');
  26. if(!empty($keyword))
  27. {
  28. $condition[] = ['name','like','%'.$keyword.'%'];
  29. }
  30. if($Employee['org']['pid'] == 0){
  31. $condition[] = ['org_id' , '=' , $Employee['org']['id']];
  32. }else{
  33. $orgId = orgParentIds($Employee['org_id']);
  34. $condition[] = ['org_id','in',$orgId];
  35. }
  36. $condition[] = ['is_manager', '=', 1];
  37. $condition[] = ['state', '=', '在职'];
  38. $condition[] = ['grant_id', '=', '0'];
  39. $list = Employee::with(['user' => function ($query) {
  40. $query->field('id,headimgurl');
  41. }])->where('uid','<>',$uid)
  42. ->where($condition)
  43. ->group('id')
  44. ->field('id,name,uid')
  45. ->select()->toArray();
  46. $SortArray = [];
  47. foreach($list as $rs)
  48. {
  49. if ($rs['name']) {
  50. $letter = strtoupper(hanziInitials($rs['name']));
  51. $data = [
  52. 'id'=>$rs['id'],
  53. 'name'=>$rs['name'],
  54. 'uid'=>$rs['uid'],
  55. 'headimgurl'=>$rs['user']['headimgurl'],
  56. 'checked'=>in_array($rs['id'] , $lastId) ? true : false
  57. ];
  58. $SortArray[$letter][] = $data;
  59. }
  60. }
  61. //首字母排序
  62. ksort($SortArray);
  63. // 上次选择的审核人
  64. $last_where['uid'] = $uid;
  65. $last = (new DailyWorkModel())->where($last_where)->order('addtime desc')->findOrEmpty();
  66. if (!$last->isEmpty()) {
  67. $last_user = explode(',', $last['reporting_object']);
  68. } else {
  69. $last_user = [];
  70. }
  71. return json(['code'=>0 , 'msg'=>'抄送人员列表' , 'data'=>$SortArray, 'last'=> $last_user]);
  72. }
  73. /*
  74. * 提交日报
  75. * type: day每天 , week周 , month月
  76. */
  77. public function submit_daily()
  78. {
  79. $data = Request::only(['type' , 'current_work' , 'next_plan' , 'other_matters' , 'enclosure_file' , 'reporting_object','weixin_media'=>'','media_id'=>'']);
  80. $data['uid'] = $this->request->token['uid'];
  81. DailyWorkModel::insert($data);
  82. return json(['code'=>0 , 'msg'=>'汇报成功']);
  83. }
  84. /*
  85. * 我发送、收到的列表
  86. * option : sendout 发送 , received 收到
  87. */
  88. public function send_record($page , $option)
  89. {
  90. $uid = $this->request->token['uid'];
  91. $list = DailyWorkModel::with(['user' => function ($query) {
  92. $query->field('id,headimgurl');
  93. },'employee']);
  94. $option == 'received' ? $list->whereRaw("FIND_IN_SET($uid , reporting_object) and del=0") : $list->where(['uid'=>$uid , 'del'=>0]);
  95. $data = $list->field('id,uid,current_work,next_plan,addtime,unread_comments,type,reporting_object_view')->order('addtime','desc')->page($page , 20)->select()->toArray();
  96. $dateArray = [];
  97. foreach($data as &$rs)
  98. {
  99. //我收到的日报记录是否已经阅读
  100. $rs['view'] = in_array($uid , explode(',',$rs['reporting_object_view'])) ? true : false;
  101. $rs['date'] = date('Y-m-d',strtotime($rs['addtime']));
  102. $rs['time'] = date('H:i',strtotime($rs['addtime']));
  103. if($rs['date'] == date('Y-m-d')){
  104. $dateArray['今天'][] = $rs;
  105. }elseif($rs['date'] == date("Y-m-d",strtotime("-1 day"))){
  106. $dateArray['昨天'][] = $rs;
  107. }else{
  108. $dateArray[$rs['date']][] = $rs;
  109. }
  110. }
  111. return json(['code'=>0 , 'msg'=>'发送列表' , 'data'=>$dateArray]);
  112. }
  113. /*
  114. * 日报内容详情
  115. */
  116. public function details($id)
  117. {
  118. $uid = $this->request->token['uid'];
  119. $data = DailyWorkModel::with(['user' => function ($query) {
  120. $query->field('id,headimgurl');
  121. },'employee'])
  122. ->where(['id'=>$id , 'del'=>0])
  123. ->field('id,uid,type,current_work,next_plan,other_matters,enclosure_file,reporting_object,addtime,unread_comments,reporting_object_view')
  124. ->find();
  125. $reporting_object = Employee::with(['user' => function ($query) {
  126. $query->field('id,headimgurl');
  127. }])->where('uid','in',$data['reporting_object'])->field('name,uid')->select();
  128. //自己查看详情评论阅读数清零
  129. if($data['uid'] == $uid && $data['unread_comments'] > 0)
  130. {
  131. $data->unread_comments = 0;
  132. $data->save();
  133. }
  134. //抄送人查看详情浏览记录
  135. $rs = array_values(explode(',',$data['reporting_object']));
  136. $rsview = array_values(explode(',',$data['reporting_object_view']));
  137. if(in_array($uid , $rs) && !in_array($uid , $rsview))
  138. {
  139. $data->reporting_object_view = empty($data['reporting_object_view']) ? $uid : $data['reporting_object_view'].','.$uid;
  140. $data->save();
  141. }
  142. //汇报对象展示
  143. $data['reporting_object'] = $reporting_object;
  144. return json(['code'=>0 , 'msg'=>'详情' , 'data'=>$data]);
  145. }
  146. /*
  147. * 评论列表
  148. */
  149. public function comment_list()
  150. {
  151. $param = Request::only(['id','page']);
  152. $list = DailyWorkComment::with(['employee','joinemployee','user'])->where(['join_id'=>$param['id']])->field('id,uid,comment,pid,parent_uid,addtime')->page($param['page'] , 20)->order('addtime')->select();
  153. return json(['code'=>0 , 'msg'=>'评论列表' , 'data'=>$list]);
  154. }
  155. /*
  156. * 发送评论
  157. */
  158. public function send_comments()
  159. {
  160. $param = Request::only(['daily_work_id','parent_id','parent_uid','comment']);
  161. $work = DailyWorkModel::where(['id'=>$param['daily_work_id'] , 'del'=>0])->field('id,unread_comments')->find();
  162. if(!$work) return json(['code'=>1 , 'msg'=>'日报内容不存在']);
  163. if(empty($param['comment'])) return json(['code'=>1 , 'msg'=>'请输入评论内容']);
  164. $data = [
  165. 'uid' => $this->request->token['uid'],
  166. 'comment' => $param['comment'],
  167. 'join_id' => $param['daily_work_id'],
  168. 'pid' => $param['parent_id'],
  169. 'parent_uid' => $param['parent_uid']
  170. ];
  171. DailyWorkComment::insert($data);
  172. //评论时日报评论数增加
  173. $work->unread_comments += 1;
  174. $work->save();
  175. return json(['code'=>0 , 'msg'=>'评论成功']);
  176. }
  177. }
  178. ?>