DailyTasks.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. <?php
  2. namespace app\sys\controller;
  3. use think\facade\View;
  4. use think\facade\Request;
  5. use app\model\Employee;
  6. use app\model\Org;
  7. use app\model\DailyTasks as DailyTasksModel;
  8. use think\facade\Db;
  9. use app\model\ShareLog;
  10. //
  11. class DailyTasks extends Base
  12. {
  13. /*
  14. * 任务列表
  15. */
  16. public function index()
  17. {
  18. $date = date('Y-m-d H:i:s');
  19. $data['count'] = $data['ing_count'] = $data['pass_count'] = $data['no_count'] = $data['grawth'] = 0;
  20. $w[] = ['root_id','=',request()->employee->root_id];
  21. $w[] = ['del','=',0];
  22. $data['count'] = DailyTasksModel::where($w)->count();
  23. $w[] = ['end_date','>=',$date];
  24. $data['ing_count'] = DailyTasksModel::where($w)->where('grawth is null or grawth <> 100')->count();
  25. $w1[] = ['root_id','=',request()->employee->root_id];
  26. $w1[] = ['del','=',0];
  27. $w1[] = ['grawth','=',100];
  28. $data['pass_count'] = DailyTasksModel::where($w1)->count();
  29. $w2[] = ['root_id','=',request()->employee->root_id];
  30. $w2[] = ['del','=',0];
  31. // $w2[] = ['grawth','<',100];
  32. $w2[] = ['end_date','<',$date];
  33. $data['no_count'] = DailyTasksModel::where($w2)->where('(grawth is null or grawth < 100)')->count();
  34. $data['grawth'] = $data['count']==0 ? '0%' : round($data['pass_count']/$data['count']*100,2).'%';
  35. View::assign('data',$data);
  36. return View::fetch();
  37. }
  38. /*
  39. * 任务列表
  40. */
  41. public function list()
  42. {
  43. $param = Request::only(['type'=>'','page'=>1,'limit'=>6]);
  44. $w[] = ['root_id','=',request()->employee->root_id];
  45. $w[] = ['del','=',0];
  46. if ($param['type']) {
  47. $w[] = ['type','=',$param['type']];
  48. }
  49. // return json(['code' => 0, 'data' => $list, 'count' =>$count]);
  50. //
  51. $list = DailyTasksModel::with(['content'])->where($w)->page($param['page'],$param['limit'])->order('id desc')->select()->toArray();
  52. //每日发圈不能分享
  53. $type_arr = ['material_case'=>'MaterialCase','evidencelist'=>'MaterialEvidence','video'=>'Video','article'=>'Article','wxshowlist'=>'abc'];
  54. $type_name = ['material_case'=>'装修案例','evidencelist'=>'客户见证','video'=>'视频素材','article'=>'图文素材','wxshowlist'=>'朋友圈'];
  55. $data = [];
  56. foreach ($list as $k => $v) {
  57. $save = [];
  58. $save['title'] = $save['con'] = $save['img'] = '';
  59. $save['end_date'] = $v['end_date'];
  60. $save['org_ids'] = $v['org_ids'];
  61. if ($v['type']=='material_case') {
  62. $save['title'] = $v['content']['title'];
  63. $save['con'] = strip_tags($v['content']['desc']);
  64. $save['img'] = $v['content']['cover_img'] ? [$v['content']['cover_img']] : [];
  65. }elseif ($v['type']=='evidencelist') {
  66. $save['title'] = $v['content']['title'];
  67. $save['con'] = strip_tags($v['content']['desc']);
  68. $save['img'] = $v['content']['pics'] ? $v['content']['pics'] : [];
  69. }elseif ($v['type']=='video') {
  70. $save['title'] = $v['content']['title'];
  71. $save['con'] = strip_tags($v['content']['description']);
  72. $save['img'] = $v['content']['video_url'] ? [$v['content']['video_url'].'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast'] : [];
  73. }elseif ($v['type']=='article') {
  74. $save['title'] = $v['content']['title'];
  75. $save['con'] = strip_tags($v['content']['content']);
  76. $save['img'] = $v['content']['cover_img'] ? [$v['content']['cover_img']] : [];
  77. }elseif ($v['type']=='wxshowlist') {
  78. // $save['title'] = $v['content']['title'];//朋友圈没有标题
  79. $save['con'] = strip_tags($v['content']['content']);
  80. // 视频
  81. if ($v['content']['type']==1) {
  82. $img = $v['content']['picture'] ?: [];
  83. foreach ($img as $k2 => $v2) {
  84. $img[$k2] = $v2.'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast';
  85. }
  86. $save['img'] = $img;
  87. }elseif ($v['content']['type']==2) {//图片
  88. $save['img'] = $v['content']['picture'] ? $v['content']['picture'] : [];
  89. }elseif ($v['content']['type']==3) {
  90. $save['img'] = $img;
  91. }
  92. }
  93. $save['id'] = $v['id'];
  94. if ($v['end_date'].' 23:59:59'>date('Y-m-d H:i:s')) {
  95. $save['state'] = '进行中';
  96. }else{
  97. $save['state'] = '已结束';
  98. }
  99. $save['end_date'] = $v['end_date'] ?: '未设置 ';
  100. //
  101. $save['type_name'] = $type_name[$v['type']];
  102. $orgids = $v['org_ids'] ? explode(',',$v['org_ids']) : [];
  103. $w1 = [];
  104. $w1[] = ['org_id','in',$orgids];
  105. $w1[] = ['root_id','=',request()->employee->root_id];
  106. $w1[] = ['state','=','在职'];
  107. $w1[] = ['uid','>',0];
  108. $eids = Employee::where($w1)->column('id');
  109. $save['all_count'] = count($eids);
  110. $w2 = [];
  111. $eids = $v['employee_ids'] ? explode(',',$v['employee_ids']) : [];
  112. $w2[] = ['root_id','=',request()->employee->root_id];
  113. $w2[] = ['id','in',$eids];
  114. $w2[] = ['state','=','在职'];
  115. $w2[] = ['uid','>',0];
  116. $save['count'] = Employee::where($w2)->count();
  117. $data[] = $save;
  118. }
  119. $count = DailyTasksModel::where($w)->count();
  120. return json(['code' => 0, 'data' => $data, 'count' =>$count]);
  121. }
  122. //完成情况
  123. public function person(){
  124. $id = input('id',0);
  125. View::assign('id',$id);
  126. return View::fetch();
  127. }
  128. //完成情况
  129. public function person_list(){
  130. $id = input('id',0);
  131. $type = input('type');
  132. $page = input('page',1);
  133. $limit = input('limit',10);
  134. $w[] = ['id','=',$id];
  135. $w[] = ['root_id','=',request()->employee->root_id];
  136. $row = DailyTasksModel::where($w)->findOrEmpty();
  137. if ($row->isEmpty()) {
  138. return json(['code' => 1, 'data' =>'任务不存在', 'msg' =>'任务不存在']);
  139. }
  140. $type_arr = ['material_case'=>'MaterialCase','evidencelist'=>'MaterialEvidence','video'=>'Video','article'=>'Article','wxshowlist'=>'abc'];
  141. $row->type = $type_arr[$row->type];
  142. $orgids = $row->org_ids ? explode(',',$row->org_ids) : [];
  143. $eids = $row->employee_ids ? explode(',',$row->employee_ids) : [];
  144. $w1 = [];
  145. $w1[] = ['org_id','in',$orgids];
  146. $w1[] = ['root_id','=',request()->employee->root_id];
  147. $w1[] = ['state','=','在职'];
  148. $w1[] = ['uid','>',0];
  149. $list = Employee::with(['oneOrg'=>function($query){
  150. $query->visible(['name','id'])->bind(['org_name'=>'name']);
  151. }])->where($w1)->field(['org_id','name','id'])->page($page,$limit)->select()->toArray();
  152. foreach ($list as $k => $v) {
  153. $list[$k]['state'] = in_array($v['id'],$eids) ? '已执行' : '未执行';
  154. }
  155. $count = Employee::where($w1)->count();
  156. return json(['code' => 0, 'data' => $list, 'count' =>$count]);
  157. }
  158. //指派弹框
  159. public function assign_org(){
  160. $id = input('id',0);
  161. $type = input('type','');
  162. View::assign('id',$id);
  163. View::assign('type',$type);
  164. //获取任务
  165. $w[] = ['root_id','=',request()->employee->root_id];
  166. $w[] = ['con_id','=',$id];
  167. $w[] = ['type','=',$type];
  168. // $w[] = ['del','=',0];
  169. $list = DailyTasksModel::where($w)->order('id desc')->select()->toArray();
  170. foreach ($list as $k => $v) {
  171. $list[$k]['count'] = $v['org_ids'] ? count(array_filter(explode(',',$v['org_ids']))) : 0;
  172. $list[$k]['edit'] = $v['end_date'].' 23:59:59'>date('Y-m-d H:i:s') ? 0 : 1;
  173. }
  174. $count = count($list);
  175. View::assign('data',$list);
  176. View::assign('count',$count);
  177. return View::fetch();
  178. }
  179. //指派
  180. public function assign_org_edit(){
  181. $id = input('id',0);
  182. $cate = input('cate','');
  183. $type = 'org';//org组织
  184. $select_id = input('select_id',0);
  185. $org = Org::where('id',$select_id)->value('path');
  186. $org_ids = Org::where([['path','like',$org.'%']])->column('id');
  187. $w[] = ['root_id','=',request()->employee->root_id];
  188. $w[] = ['type','=',$cate];
  189. $w[] = ['con_id','=',$id];
  190. $w[] = ['addtime','=',date('Y-m-d H:i:s',input('time'))];
  191. $row = DailyTasksModel::where($w)->findOrEmpty();
  192. $ids = $row->isEmpty() ? [] : explode(',',$row->org_ids);
  193. $save['root_id'] = request()->employee->root_id;
  194. $save['con_id'] = $id;
  195. $save['type'] = $cate;
  196. $save['addtime'] = date('Y-m-d H:i:s',input('time'));
  197. if ($row->isEmpty()) {
  198. $save['end_date'] = date('Y-m-d',strtotime('+1 day')).' 23:59:59';
  199. }elseif(!$row->end_date){
  200. $save['end_date'] = date('Y-m-d',strtotime('+1 day')).' 23:59:59';
  201. }
  202. // $save['org_ids'] = implode(',',$org_ids);
  203. $res = input('res',0);
  204. $arr = $ids ? array_diff($ids,$org_ids) : [];
  205. $save['org_ids'] = $res ? array_merge($org_ids,$arr) : $arr;
  206. $save['org_ids'] = implode(',',$save['org_ids']);
  207. $save['del'] = 1;
  208. if ($row->isEmpty()) {
  209. $id = DailyTasksModel::insertGetId($save);
  210. }else{
  211. DailyTasksModel::where($w)->update($save);
  212. $id = $row->id;
  213. }
  214. return json(['code' => 0, 'data' => $org_ids, 'checkOrg' =>'']);
  215. }
  216. //获取指派部门
  217. public function get_orgs(){
  218. $id = input('id',0);
  219. $cate = input('cate','');
  220. $page = input('page',1);
  221. $limit = input('limit',10);
  222. $root_id = request()->employee->root_id;
  223. $w[] = ['root_id','=',request()->employee->root_id];
  224. $w[] = ['type','=',$cate];
  225. $w[] = ['con_id','=',$id];
  226. $w[] = ['addtime','=',date('Y-m-d H:i:s',input('time'))];
  227. $row = DailyTasksModel::where($w)->findOrEmpty();
  228. if ($row->isEmpty() || !$row->org_ids) {
  229. return json(['code' => 0, 'data' =>[], 'checkOrg' =>'']);
  230. }
  231. $keyword = input('keyword','');
  232. if ($keyword) {
  233. $w1[] = ['name','like','%'.trim($keyword).'%'];
  234. }
  235. $w1[] = ['id','in',explode(',',$row->org_ids)];
  236. $list = Org::withCount(['employee'=>function($query) use ($root_id){
  237. $query->where([['root_id','=',$root_id],['state','=','在职'],['uid','>',0]]);
  238. }])->where($w1)->field(['name','id'])->page($page,$limit)->select()->toArray();
  239. $count = Org::where($w1)->count();
  240. return json(['code' => 0, 'data' => $list, 'count' =>$count]);
  241. }
  242. /*
  243. * 取消指派
  244. */
  245. public function del_assign()
  246. {
  247. $id = input('id',0);
  248. $cate = input('cate','');
  249. $w[] = ['root_id','=',request()->employee->root_id];
  250. $w[] = ['type','=',$cate];
  251. $w[] = ['con_id','=',$id];
  252. $w[] = ['addtime','=',date('Y-m-d H:i:s',input('time'))];
  253. $row = DailyTasksModel::where($w)->findOrEmpty();
  254. $eid = input('eid',0);
  255. if ($row->isEmpty()) {
  256. return json(['code' => 1, 'data' => '取消失败', 'msg' => '取消失败']);
  257. }
  258. if ($id && $eid) {
  259. if ($eid == -1) {
  260. DailyTasksModel::where($w)->update(['org_ids'=>'']);
  261. }else{
  262. $arr = $row->org_ids;
  263. $arr = array_filter(array_diff(explode(',',$arr),[$eid]));
  264. DailyTasksModel::where($w)->update(['org_ids'=>implode(',',$arr)]);
  265. }
  266. }
  267. return json(['code' => 0, 'data' => '取消成功', 'msg' => '取消成功']);
  268. }
  269. /*
  270. * 指派组织
  271. */
  272. public function get_person()
  273. {
  274. $root_id = request()->employee->root_id;
  275. $keyword = input('keyword','');
  276. $where = [
  277. ['path', 'like', $root_id . '-%'],
  278. ['status', '=', 1]
  279. ];
  280. if ($keyword) {
  281. // $where[] = ['name','like','%'.trim($keyword).'%'];
  282. }
  283. $count = Employee::where([['root_id','=',$root_id],['state','like','%在职%'],['uid','>',0]])->group('org_id')->column('count(*) count','org_id');
  284. $allnodes = Org::where($where)->field('id,pid,name title,level,org_type,info,path')->order('level asc, id asc')->select()->toArray();
  285. foreach ($allnodes as $k => $v) {
  286. $allnodes[$k]['count'] = isset($count[$v['id']]) ? $count[$v['id']] : 0;//本部门人数
  287. $allnodes[$k]['all_count'] = 0;//包含子部门总数
  288. $allnodes[$k]['org_class'] = 'org_'.$v['id'];
  289. $allnodes[$k]['per_class'] = 'per_org_'.$v['id'];
  290. $allnodes[$k]['type'] = 'org';
  291. foreach ($allnodes as $k2 => $v2) {
  292. if (strpos($v2['path'],$v['path']) !== false) {
  293. $allnodes[$k]['all_count'] = isset($count[$v2['id']]) ? $count[$v2['id']]+$allnodes[$k]['all_count'] : $allnodes[$k]['all_count'];
  294. }
  295. }
  296. $allnodes[$k]['title'] = $allnodes[$k]['title'].' ('.$allnodes[$k]['all_count'].')';
  297. }
  298. $tree = $this->tree($allnodes,0);
  299. // $info = TrainClass::where(['root_id'=>request()->employee->root_id , 'id'=>$id])->value('train_employee');
  300. return json(['code' => 0, 'data' => $tree, 'checkOrg' =>'']);
  301. }
  302. public function tree($data,$pid = 0)
  303. {
  304. $new_arr = [];
  305. foreach($data as $k => $v){
  306. if($v['pid'] == $pid) {
  307. $children = $this->tree($data, $v['id']);
  308. $v['children'] = $children;
  309. if (empty($v['children'])) $v['disabled']=true;
  310. $new_arr[] =$v;
  311. }
  312. }
  313. return $new_arr;
  314. }
  315. /*
  316. * 保存最后完成日期
  317. */
  318. public function save_date()
  319. {
  320. $id = input('id',0);
  321. $cate = input('cate','');
  322. $date = input('date');
  323. $w[] = ['root_id','=',request()->employee->root_id];
  324. $w[] = ['type','=',$cate];
  325. $w[] = ['con_id','=',$id];
  326. $w[] = ['addtime','=',date('Y-m-d H:i:s',input('time'))];
  327. $row = DailyTasksModel::where($w)->findOrEmpty();
  328. if ($row->isEmpty()) {
  329. return json(['code' =>1, 'data' =>'请选择指派部门','msg' =>'请选择指派部门']);
  330. }
  331. if ($date.' 23:59:59' < $row->addtime) {
  332. return json(['code' =>1, 'data' =>'最迟完成时间要大于当前时间','msg' =>'最迟完成时间要大于当前时间']);
  333. }
  334. $row->end_date = $date.' 23:59:59';
  335. $row->del = 0;
  336. $row->save();
  337. return json(['code' =>0, 'data' =>'设置成功','msg' =>'设置成功']);
  338. }
  339. /*
  340. * 取消任务
  341. */
  342. public function del_task()
  343. {
  344. $id = input('id',0);
  345. $cate = input('cate','');
  346. $eid = input('eid');
  347. $w[] = ['root_id','=',request()->employee->root_id];
  348. $w[] = ['id','=',$eid];
  349. $w[] = ['del','=',0];
  350. $row = DailyTasksModel::where($w)->findOrEmpty();
  351. if ($row->isEmpty()) {
  352. return json(['code' =>1, 'data' =>'任务不存在','msg' =>'任务不存在']);
  353. }
  354. $row->del = 1;
  355. $row->save();
  356. return json(['code' =>0, 'data' =>'取消成功','msg' =>'取消成功']);
  357. }
  358. }