DailyTasks.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. namespace app\api\controller;
  3. use think\facade\Request;
  4. use app\model\DailyTasks as DailyTasksModel;
  5. use app\model\Org;
  6. use app\model\Employee;
  7. use app\model\User;
  8. use app\model\MaterialCase;
  9. use app\model\MaterialEvidence;
  10. use app\model\Article;
  11. use app\model\Video;
  12. use app\model\DailyWechatArticle;
  13. class DailyTasks extends Base
  14. {
  15. //日常任务列表
  16. public function index(){
  17. $token = $this->request->token;
  18. $employee_id = $token['employee_id'];
  19. $org_id = $token['org_id'];
  20. $date = date('Y-m-d H:i:s');
  21. $param = Request::only(['type'=>'','page'=>1,'limit'=>6]);
  22. $w[] = ['root_id','=',$token['root_org']];
  23. $w[] = ['del','=',0];
  24. $w[] = ['end_date','>=',$date];
  25. if ($param['type']) {
  26. $param['type'] = $param['type']=='materialEvidence' ? 'evidencelist' : $param['type'];
  27. $param['type'] = $param['type']=='materialCase' ? 'material_case' : $param['type'];
  28. $w[] = ['type','=',$param['type']];
  29. }
  30. $list = DailyTasksModel::with(['content'])->whereRaw("(!FIND_IN_SET($employee_id,employee_ids) or employee_ids is null or employee_ids = '')")->whereRaw("FIND_IN_SET($org_id,org_ids)")->where($w)->page($param['page'],$param['limit'])->order('id desc')->select()->toArray();
  31. // $type_arr = ['material_case'=>'MaterialCase','evidencelist'=>'MaterialEvidence','video'=>'Video','article'=>'Article','wxshowlist'=>'abc'];
  32. $type_name = ['material_case'=>'装修案例','evidencelist'=>'客户见证','video'=>'视频素材','article'=>'图文素材','wxshowlist'=>'朋友圈'];
  33. $data = [];
  34. foreach ($list as $k => $v) {
  35. $save = [];
  36. $save['title'] = $save['con'] = $save['img'] = '';
  37. $save['end_date'] = $v['end_date'];
  38. $save['org_ids'] = $v['org_ids'];
  39. if ($v['type']=='material_case') {
  40. $save['title'] = $v['content']['title'];
  41. $save['con'] = strip_tags($v['content']['desc']);
  42. $save['img'] = $v['content']['cover_img'] ? [$v['content']['cover_img']] : [];
  43. }elseif ($v['type']=='evidencelist') {
  44. $save['title'] = $v['content']['title'];
  45. $save['con'] = strip_tags($v['content']['desc']);
  46. $save['img'] = $v['content']['pics'] ? $v['content']['pics'] : [];
  47. }elseif ($v['type']=='video') {
  48. $save['title'] = $v['content']['title'];
  49. $save['con'] = strip_tags($v['content']['description']);
  50. $save['img'] = $v['content']['video_url'] ? [$v['content']['video_url'].'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast'] : [];
  51. }elseif ($v['type']=='article') {
  52. $save['title'] = $v['content']['title'];
  53. $save['con'] = strip_tags($v['content']['content']);
  54. $save['img'] = $v['content']['cover_img'] ? [$v['content']['cover_img']] : [];
  55. }elseif ($v['type']=='wxshowlist') {
  56. // $save['title'] = $v['content']['title'];//朋友圈没有标题
  57. $save['con'] = strip_tags($v['content']['content']);
  58. // 视频
  59. if ($v['content']['type']==1) {
  60. $img = $v['content']['picture'] ?: [];
  61. foreach ($img as $k2 => $v2) {
  62. $img[$k2] = $v2.'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast';
  63. }
  64. $save['img'] = $img;
  65. }elseif ($v['content']['type']==2) {//图片
  66. $save['img'] = $v['content']['picture'] ? $v['content']['picture'] : [];
  67. }elseif ($v['content']['type']==3) {
  68. }
  69. }
  70. $save['id'] = $v['id'];
  71. if ($v['end_date'].' 23:59:59'>date('Y-m-d H:i:s')) {
  72. $save['state'] = '进行中';
  73. }else{
  74. $save['state'] = '已结束';
  75. }
  76. $unix = strtotime($v['end_date'])-time();
  77. $day = $this->date_switch($unix,$v['end_date']);
  78. $save['end_date'] = $day[0];
  79. $save['color'] = $day[1];
  80. //
  81. $save['type_name'] = $type_name[$v['type']];
  82. $orgids = $v['org_ids'] ? explode(',',$v['org_ids']) : [];
  83. $w1 = [];
  84. $w1[] = ['org_id','in',$orgids];
  85. $w1[] = ['root_id','=',$token['root_org']];
  86. $w1[] = ['state','=','在职'];
  87. $w1[] = ['uid','>',0];
  88. $eids = Employee::where($w1)->column('id');
  89. $save['all_count'] = count($eids);
  90. $w2 = [];
  91. $eids = $v['employee_ids'] ? explode(',',$v['employee_ids']) : [];
  92. $w2[] = ['root_id','=',$token['root_org']];
  93. $w2[] = ['id','in',$eids];
  94. $w2[] = ['state','=','在职'];
  95. $w2[] = ['uid','>',0];
  96. $save['count'] = Employee::where($w2)->count();
  97. $data[] = $save;
  98. }
  99. $count = DailyTasksModel::where($w)->whereRaw("(!FIND_IN_SET($employee_id,employee_ids) or employee_ids is null or employee_ids = '')")->whereRaw("FIND_IN_SET($org_id,org_ids)")->count();
  100. $w3[] = ['root_id','=',$token['root_org']];
  101. $w3[] = ['del','=',0];
  102. $W3[] = ['end_date','<',$date];
  103. //逾期
  104. $overdue = DailyTasksModel::where($w3)->whereRaw("(!FIND_IN_SET($employee_id,employee_ids) or employee_ids is null or employee_ids = '')")->whereRaw("FIND_IN_SET($org_id,org_ids)")->count();
  105. //已完成
  106. $w4[] = ['root_id','=',$token['root_org']];
  107. $w4[] = ['del','=',0];
  108. $complete = DailyTasksModel::where($w4)->whereRaw("(FIND_IN_SET($employee_id,employee_ids))")->count();
  109. return json(['code' => 0, 'data' => $data, 'count' =>$count,'overdue'=>$overdue,'complete'=>$complete]);
  110. }
  111. private function date_switch($time,$date)
  112. {
  113. $dur = $time;
  114. $date = date('Y-m-d',strtotime($date));
  115. if($dur <= 0){
  116. return ['',''];
  117. }elseif($dur < 60){
  118. $s = $dur.'秒内';
  119. return [$s,'red'];
  120. }elseif($dur < 3600){
  121. $s = floor($dur/60).'分钟内';
  122. return [$s,'red'];
  123. }elseif($dur < 86400){
  124. $s = floor($dur/3600).'小时内';
  125. return [$s,'red'];
  126. }elseif($dur < 2678400){
  127. $day = floor($dur/86400);
  128. if ($day==1) {
  129. $s = floor($dur/86400).'天内';
  130. return [$s,'red'];
  131. } elseif($day<=3) {
  132. $s = floor($dur/86400).'天内';
  133. return [$s,'grey'];
  134. }else{
  135. $s = floor($dur/86400).'天内';
  136. return [$date,'grey'];
  137. }
  138. // return floor($dur/86400).'天内';
  139. }elseif($dur < 2678400*12){
  140. $s = floor($dur/2678400).'月内';
  141. return [$date,'grey'];
  142. }else{
  143. $s = floor($dur/2678400/12).'年内';
  144. return [$date,'grey'];
  145. }
  146. }
  147. //id 详情
  148. public function read()
  149. {
  150. $id = input('id',0);
  151. $token = $this->request->token;
  152. $w[] = ['root_id','=',$token['root_org']];
  153. $w[] = ['id','=',$id];
  154. $row = DailyTasksModel::where($w)->findOrEmpty();
  155. $wid = 0;
  156. if ($row->isEmpty()) return json(['code' => 1, 'data' => '数据不存在', 'msg' => '数据不存在']);
  157. if ($row->type == 'material_case') {
  158. $info = MaterialCase::where('id',$row->con_id)->field('id,title,cover_img,desc')->find();
  159. $info->img = $info->cover_img;
  160. }elseif ($row->type == 'evidencelist') {
  161. $info = MaterialEvidence::where('id',$row->con_id)->field('id,title,pics,desc')->find();
  162. $info->img = $info->pics;
  163. }elseif ($row->type == 'article') {
  164. $info = Article::where('id',$row->con_id)->field('id,title,cover_img,content')->find();
  165. $info->img = $info->cover_img;
  166. $info->desc = $info->content;
  167. }elseif ($row->type=='video') {
  168. $info = Video::where('id',$row->con_id)->field('id,title,cover,description')->find();
  169. $info->img = $info->cover;
  170. $info->desc = $info->description;
  171. }elseif ($row->type=='wxshowlist') {
  172. $info = DailyWechatArticle::where('id',$row->con_id)->field('id,content,picture,type')->find();
  173. $info->desc = $info->content;
  174. $img = $info->picture ?: [];
  175. if ($info->type==1) {
  176. foreach ($img as $k2 => $v2) {
  177. $img[$k2] = $v2.'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast';
  178. }
  179. $info->img = $img;
  180. }elseif ($info->type==2) {
  181. $info->img = $img;
  182. }else{
  183. $info->img = $img;
  184. }
  185. $wid = $info->id;
  186. }
  187. $row->img = is_array($info->img) ? $info->img : ($info->img ? [$info->img] : []);
  188. $row->con = $info->title;
  189. $row->desc = strip_tags(str_replace("&lt;br&gt;","",$info->desc));
  190. $row->wid = $wid;
  191. $org_ids = $row->employee_ids ? explode(',',$row->employee_ids) : [];
  192. $w1[] = ['id','in',$org_ids];
  193. $w1[] = ['state','=','在职'];
  194. $w1[] = ['uid','>',0];
  195. $row->employee = Employee::with(['userImg'=>function($query){
  196. $query->visible(['headimgurl']);
  197. }])->where($w1)->field('id,name,org_id,uid')->select()->toArray();
  198. $row->type = $row->type=='evidencelist' ? 'materialEvidence' : $row->type;
  199. $row->type = $row->type=='material_case' ? 'materialCase' : $row->type;
  200. $row->employee_count = count($row->employee);
  201. return json(['code' => 0, 'data' => $row]);
  202. }
  203. //完成任务
  204. public function sign(){
  205. $id = input('id',0);
  206. $token = $this->request->token;
  207. // $token['root_org'] = 23;
  208. // $token['employee_id'] = 25;
  209. $w[] = ['root_id','=',$token['root_org']];
  210. $w[] = ['id','=',$id];
  211. $row = DailyTasksModel::where($w)->findOrEmpty();
  212. if ($row->isEmpty()) return json(['code' => 1, 'data' => '任务不存在', 'msg' => '任务不存在']);
  213. $org_ids = $row->org_ids ? explode(',',$row->org_ids) : [];
  214. $w1[] = ['org_id','in',$org_ids];
  215. $w1[] = ['state','=','在职'];
  216. $w1[] = ['uid','>',0];
  217. $eids = Employee::where($w1)->column('id');
  218. $o_eids = $row->employee_ids ? explode(',',$row->employee_ids) : [];
  219. if(!in_array($token['employee_id'],$eids)) return json(['code' => 1, 'data' => '任务未指派', 'msg' => '任务未指派']);
  220. if(in_array($token['employee_id'],$o_eids)) return json(['code' => 1, 'data' => '任务已完成', 'msg' => '任务已完成']);
  221. $o_eids[] = $token['employee_id'];
  222. $o_eids = array_filter(array_unique($o_eids));
  223. $grawth = round(count($o_eids)/count($eids)*100,2);
  224. $row->employee_ids = implode(',',$o_eids);
  225. $row->grawth = $grawth;
  226. $row->save();
  227. return json(['code' => 1, 'data' => '任务完成', 'msg' => '任务完成']);
  228. }
  229. }