Camp.php 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. <?php
  2. namespace app\sys\controller;
  3. use think\facade\View;
  4. use think\facade\Request;
  5. use think\facade\Db;
  6. use app\model\Employee;
  7. use app\model\Customer;
  8. use app\model\Org;
  9. use app\model\Permission;
  10. use app\model\Camp as CampModel;
  11. use app\model\ExamEmpResult;
  12. use app\model\TrainDoneLog;
  13. use app\model\CampPlan;
  14. use app\model\CampEmployee;
  15. use app\model\TrainClass;
  16. use app\model\ExamPaper;
  17. class Camp
  18. {
  19. /**
  20. * 新增训练计划列表
  21. */
  22. public function index()
  23. {
  24. $token = request()->employee;
  25. $w[] = ['del','=',0];
  26. $w[] = ['root_id','=',$token['root_id']];
  27. // var_dump($res);die;
  28. $data['plan_count'] = $data['person_time'] = $data['passed_count'] = $data['no_passed_count'] = $data['reviewed'] = 0;
  29. $data['plan_count'] = CampModel::where($w)->count();
  30. $wp[] = ['root_id','=',$token['root_id']];
  31. // $wp[] = ['now','=',1];
  32. $data['person_time'] = CampEmployee::where($wp)->count();
  33. $pw[] = ['root_id','=',$token['root_id']];
  34. $pw[] = ['state','in',['转正']];
  35. // $pw[] = ['now','=',1];
  36. $data['passed_count'] = CampEmployee::where($pw)->count();
  37. // $pcw[] = ['root_id','=',$token['root_id']];
  38. // $pcw[] = ['state','in',['考核未通过']];
  39. // $pcw[] = ['now','=',1];
  40. // $data['no_passed_count'] = CampEmployee::where($pcw)->count();
  41. $data['no_passed_count'] = $data['person_time']-$data['passed_count'];
  42. $pcww[] = ['root_id','=',$token['root_id']];
  43. $pcww[] = ['approve','=',1];
  44. $pcww[] = ['now','=',1];
  45. $data['reviewed'] = CampEmployee::where($pcww)->count();
  46. view::assign('data',$data);
  47. return View::fetch();
  48. }
  49. /**
  50. * 列表
  51. * 训练中,已通过,未通过,待审核,转正/离职
  52. */
  53. public function list()
  54. {
  55. $token = request()->employee;
  56. $param = Request::only(['page', 'limit', 'keyword','pattern','camp_id'=>0,'type'=>0]);
  57. $w[] = ['root_id','=',$token['root_id']];
  58. $w[] = ['del','=',0];
  59. if (isset($param['pattern']) && $param['pattern']!=='') {
  60. $w[] = ['pattern','=',$param['pattern']];
  61. }
  62. $w[] = ['id','<>',$param['camp_id']];
  63. if(!empty($param['keyword'])) $w[] = ['title','like','%'.$param['keyword'].'%'];
  64. //排除没有计划的训练营
  65. if ($param['type']==1) {
  66. $tw = [];
  67. $tw[] = ['root_id','=',$token['root_id']];
  68. $tw[] = ['del','=',0];
  69. $camp_id = CampPlan::where($tw)->group('camp_id')->column('camp_id');
  70. $w[] = ['id','in',$camp_id];
  71. }
  72. $list = CampModel::with(['campEmployee'=>function($query){
  73. $query->where('now',1)->visible(['state']);
  74. },'campPlan'=>function($query){
  75. $query->where([['del','=',0]]);
  76. }])->where($w)->page($param['page'],$param['limit'])->order('id desc')->select();
  77. $count = CampModel::where($w)->count();
  78. foreach ($list as $k => $v) {
  79. $arr = array_column($v['campEmployee']->toArray(),'state');
  80. $list[$k]['employee_count'] = count($arr);
  81. // $arr = (array)$v['campEmployee'];
  82. $arr = array_count_values($arr);
  83. // //训练中人数
  84. $x = isset($arr['训练中']) ? $arr['训练中'] : 0;
  85. $list[$k]['complete_count'] = $list[$k]['employee_count']-$x;
  86. $list[$k]['fail_count'] = isset($arr['未通过']) ? $arr['未通过'] : 0;
  87. }
  88. return json(['code' => 0, 'data' => $list, 'count' => $count, 'msg' => '获取成功']);
  89. }
  90. /**
  91. * 判断训练营是否能完成
  92. * 1能完成 0完不成
  93. */
  94. public function check($id = 0)
  95. {
  96. $token = request()->employee;
  97. $info = CampModel::where([['root_id','=',$token['root_id']],['id','=',$id],['pattern','=',0]])->findOrEmpty();
  98. if($info->isEmpty()) return json(['code' => 0, 'data' => 1, 'msg' => '']);
  99. $day = (strtotime($info->end_date) - strtotime($info->start_date))/86400;
  100. $day = $day+1;
  101. $count = CampPlan::where([['camp_id','=',$id],['root_id','=',$token['root_id']],['plan_id','=',0],['del','=',0]])->count();
  102. $days = $info->day==1 ? ($info->day * $count) : ($info->day * $count-1);
  103. $res = $days<=$day ? 1 : 0;
  104. return json(['code' => 0, 'data' => $res, 'msg' => '']);
  105. }
  106. /**
  107. * 训练营人员列表
  108. */
  109. public function personnel()
  110. {
  111. $token = request()->employee;
  112. $orgs = Org::where([['path', 'like', $token['root_id'] . '-%']])->column('name,id');
  113. view::assign('org',$orgs);
  114. $w[] = ['del','=',0];
  115. $w[] = ['root_id','=',$token['root_id']];
  116. // var_dump($res);die;
  117. $data['plan_count'] = $data['person_time'] = $data['passed_count'] = $data['no_passed_count'] = $data['reviewed'] = 0;
  118. $data['plan_count'] = CampModel::where($w)->count();
  119. $wp[] = ['root_id','=',$token['root_id']];
  120. // $wp[] = ['now','=',1];
  121. $data['person_time'] = CampEmployee::where($wp)->count();
  122. $pw[] = ['root_id','=',$token['root_id']];
  123. $pw[] = ['state','in',['转正']];
  124. // $pw[] = ['now','=',1];
  125. $data['passed_count'] = CampEmployee::where($pw)->count();
  126. // $pcw[] = ['root_id','=',$token['root_id']];
  127. // $pcw[] = ['state','in',['考核未通过']];
  128. // $pcw[] = ['now','=',1];
  129. // $data['no_passed_count'] = CampEmployee::where($pcw)->count();
  130. $data['no_passed_count'] = $data['person_time']-$data['passed_count'];
  131. $pcww[] = ['root_id','=',$token['root_id']];
  132. $pcww[] = ['approve','=',1];
  133. $pcww[] = ['now','=',1];
  134. $data['reviewed'] = CampEmployee::where($pcww)->count();
  135. view::assign('data',$data);
  136. return View::fetch();
  137. }
  138. /**
  139. * 转正审核列表
  140. */
  141. public function verify()
  142. {
  143. $token = request()->employee;
  144. $w[] = ['del','=',0];
  145. $w[] = ['root_id','=',$token['root_id']];
  146. // var_dump($res);die;
  147. $data['plan_count'] = $data['person_time'] = $data['passed_count'] = $data['no_passed_count'] = $data['reviewed'] = 0;
  148. $data['plan_count'] = CampModel::where($w)->count();
  149. $wp[] = ['root_id','=',$token['root_id']];
  150. // $wp[] = ['now','=',1];
  151. $data['person_time'] = CampEmployee::where($wp)->count();
  152. $pw[] = ['root_id','=',$token['root_id']];
  153. $pw[] = ['state','in',['转正']];
  154. // $pw[] = ['now','=',1];
  155. $data['passed_count'] = CampEmployee::where($pw)->count();
  156. // $pcw[] = ['root_id','=',$token['root_id']];
  157. // $pcw[] = ['state','in',['考核未通过']];
  158. // $pcw[] = ['now','=',1];
  159. // $data['no_passed_count'] = CampEmployee::where($pcw)->count();
  160. $data['no_passed_count'] = $data['person_time']-$data['passed_count'];
  161. $pcww[] = ['root_id','=',$token['root_id']];
  162. $pcww[] = ['approve','=',1];
  163. $pcww[] = ['now','=',1];
  164. $data['reviewed'] = CampEmployee::where($pcww)->count();
  165. view::assign('data',$data);
  166. $orgs = Org::where([['path', 'like', $token['root_id'] . '-%']])->column('name,id');
  167. view::assign('org',$orgs);
  168. return View::fetch();
  169. }
  170. /**
  171. * 已完成人员
  172. */
  173. public function complete()
  174. {
  175. return View::fetch();
  176. }
  177. /**
  178. * 未通过人员
  179. */
  180. public function nopass()
  181. {
  182. return View::fetch();
  183. }
  184. /**
  185. * 数据统计
  186. */
  187. public function datastatistics()
  188. {
  189. $camp_id = input('id',0);
  190. $token = request()->employee;
  191. $w[] = ['camp_id','=',$camp_id];
  192. // $w[] = ['now','=',1];
  193. $employees = CampEmployee::where($w)->column('*');
  194. $eids = $employees ? array_column($employees,'employee_id') : [];
  195. $data['count'] = $data['passed_count'] = $data['zhuanzheng_count'] = 0;
  196. $data['count'] = count($employees);
  197. foreach ($employees as $v) {
  198. if ($v['state']=='转正') {
  199. $data['zhuanzheng_count']+=1;
  200. }
  201. }
  202. $pw = [];
  203. $pw[] = ['root_id','=',$token['root_id']];
  204. $pw[] = ['camp_id','=',$camp_id];
  205. $pw[] = ['con_id','>',0];
  206. $pw[] = ['plan_id','>',0];
  207. $pw[] = ['del','=',0];
  208. $plan = CampPlan::where($pw)->order('id asc')->select()->toArray();
  209. $w0 = $w1 = [];//0课程,1试卷
  210. foreach ($plan as $k2 => $v2) {
  211. $v2['type']==0 ? $w0[]=$v2['con_id'] : $w1[]=$v2['con_id'];
  212. }
  213. $tw[] = ['class_id','in',$w0];
  214. $tw[] = ['root_id','=',$token['root_id']];
  215. $tw[] = ['from','=',1];
  216. $tw[] = ['employee_id','in',$eids];
  217. $train = TrainDoneLog::where($tw)->count();
  218. $ew[] = ['paper_id','in',$w1];
  219. $ew[] = ['root_id','=',$token['root_id']];
  220. $ew[] = ['from','=',1];
  221. $ew[] = ['employee_id','in',$eids];
  222. $paper = ExamEmpResult::where($ew)->count();
  223. $data['passed_count'] = $train+$paper;
  224. $data['gathw'] = $data['count']==0 ? '0%' : round($data['zhuanzheng_count']/$data['count']*100,2).'%';
  225. view::assign('data',$data);
  226. view::assign('camp_id',$camp_id);
  227. $where = [
  228. ['path', 'like', $token['root_id'] . '-%'],
  229. ['status', '=', 1]
  230. ];
  231. //已经指派的部门
  232. $eids = CampEmployee::where([['camp_id','=',$camp_id]])->group('employee_id')->column('employee_id');
  233. $org_ids = Employee::where([['id','in',$eids]])->column('org_id');
  234. $org = Org::where($where)->where([['id','in',$org_ids]])->order('level asc, id asc')->column("id,name");
  235. view::assign('org',$org);
  236. return View::fetch();
  237. }
  238. /**
  239. * 数据统计页面列表
  240. */
  241. public function datastatistics_list()
  242. {
  243. $camp_id = input('id',0);
  244. $param = Request()->only(['page', 'limit','org_id'=>0,'keyword'=>'']);
  245. $token = request()->employee;
  246. $w[] = ['camp_id','=',$camp_id];
  247. // $w[] = ['now','=',1];
  248. if ($param['org_id'] || $param['keyword']) {
  249. if($param['org_id']) $ws[] = ['org_id','=',$param['org_id']];
  250. if($param['keyword']) $ws[] = ['name','like','%'.$param['keyword'].'%'];
  251. $eids = Employee::where($ws)->column('id');
  252. $w[] = ['employee_id','in',$eids];
  253. }
  254. $employees = CampEmployee::with(['employee'=>function($query){
  255. $query->bind(['name','org_id']);
  256. }])->where($w)->page($param['page'],$param['limit'])->field('id,employee_id,addtime')->select()->toArray();
  257. $count = CampEmployee::where($w)->count();
  258. $orgs = Org::where([['id','in',array_column($employees,'org_id')]])->column('name','id');
  259. foreach ($employees as $k => $v) {
  260. unset($employees[$k]['employee']);
  261. $employees[$k]['org_name'] = isset($orgs[$v['org_id']]) ? $orgs[$v['org_id']] : '';
  262. $pw = [];
  263. $pw[] = ['root_id','=',$token['root_id']];
  264. $pw[] = ['camp_id','=',$camp_id];
  265. $pw[] = ['con_id','>',0];
  266. $pw[] = ['plan_id','>',0];
  267. $pw[] = ['del','=',0];
  268. $plan = CampPlan::where($pw)->order('id asc')->select()->toArray();
  269. $w0 = $w1 = [];//0课程,1试卷
  270. foreach ($plan as $k2 => $v2) {
  271. $v2['type']==0 ? $w0[]=$v2['con_id'] : $w1[]=$v2['con_id'];
  272. }
  273. $tw[] = ['class_id','in',$w0];
  274. $tw[] = ['root_id','=',$token['root_id']];
  275. $tw[] = ['from','=',1];
  276. $tw[] = ['employee_id','=',$v['employee_id']];
  277. $train = TrainDoneLog::where($tw)->count();
  278. $ew[] = ['paper_id','in',$w1];
  279. $ew[] = ['root_id','=',$token['root_id']];
  280. $ew[] = ['from','=',1];
  281. $ew[] = ['employee_id','=',$v['employee_id']];
  282. $paper = ExamEmpResult::where($ew)->count();
  283. $passed_count = $train+$paper;
  284. $employees[$k]['speed'] = count($plan)==0 ? '0%' : round($passed_count/count($plan)*100,2).'%';
  285. }
  286. return json(['code' => 0,'data'=>$employees,'count'=>$count,'msg' => '']);
  287. }
  288. /**
  289. * 创建训练营
  290. */
  291. public function createtrainingcamp()
  292. {
  293. return View::fetch();
  294. }
  295. /**
  296. * 创建训练营
  297. */
  298. public function createtrainingcamp_add()
  299. {
  300. $token = request()->employee;
  301. $param = Request()->only(['title', 'start_date','end_date','day','time','pattern']);
  302. $param['root_id'] = $token['root_id'];
  303. CampModel::insertGetId($param);
  304. return json(['code' => 0,'data'=>'添加成功','msg' => '添加成功']);
  305. }
  306. /**
  307. * 编辑训练营
  308. */
  309. public function edittrainingcamp()
  310. {
  311. $param = Request()->only(['id']);
  312. $token = request()->employee;
  313. $w[] = ['id','=',$param['id']];
  314. $w[] = ['root_id','=',$token['root_id']];
  315. $info = CampModel::where($w)->find()->toArray();
  316. view::assign('data',$info);
  317. return View::fetch();
  318. }
  319. /**
  320. * 编辑训练营
  321. */
  322. public function edittrainingcamp_edit()
  323. {
  324. $id = input('id',0);
  325. $param = Request()->only(['title', 'start_date','end_date','day','time','pattern']);
  326. $token = request()->employee;
  327. $w[] = ['id','=',$id];
  328. $w[] = ['root_id','=',$token['root_id']];
  329. $info = CampModel::where($w)->update($param);
  330. return json(['code' => 0,'data'=>'修改成功','msg' => '修改成功']);
  331. }
  332. /**
  333. * 设置训练营
  334. */
  335. public function settrainingcamp()
  336. {
  337. $id = input('id');
  338. view::assign('id',$id);
  339. return View::fetch();
  340. }
  341. /**
  342. * 选择课件列表
  343. */
  344. public function class_choice_course()
  345. {
  346. $id = input('camp_id',0);
  347. view::assign('camp_id',$id);
  348. $taskIds = input('taskIds','');
  349. view::assign('taskIds',$taskIds);
  350. return View::fetch();
  351. }
  352. /**
  353. * 选择试卷列表
  354. */
  355. public function choice_test_paper()
  356. {
  357. $id = input('camp_id',0);
  358. view::assign('camp_id',$id);
  359. $taskIds = input('taskIds','');
  360. view::assign('taskIds',$taskIds);
  361. return View::fetch();
  362. }
  363. /**
  364. * 训练对象
  365. */
  366. public function training_object()
  367. {
  368. if (!Request::isAjax()) {
  369. $id = Request::param('id');
  370. View::assign('id',$id);
  371. return View::fetch();
  372. }
  373. $id = Request::param('id');//计划id
  374. $pid = Request::param('pid');//多选框选中id
  375. $type = Request::param('type');//选中类型,人/部门
  376. $res = Request::param('res',1);//选择结果 1选中,0取消
  377. $data = [];
  378. $dw[] = ['root_id','=',request()->employee->root_id];
  379. $dw[] = ['now','=',1];//最新状态
  380. $info = CampEmployee::where($dw)->column('employee_id');
  381. $a = 0;
  382. if ($type=='per' && $pid) {
  383. $ids = explode(',',$pid);
  384. foreach($ids as $i){
  385. $data[] = 'per_'.$i;
  386. }
  387. $pid = $ids;
  388. //$data[] = 'per_'.$pid;
  389. //$pid = [$pid];
  390. $a = 1;
  391. }elseif ($type=='org' && $pid) {
  392. $data[] = 'org_'.$pid;
  393. $org = Org::where([['id','=',$pid]])->value('path');
  394. $orgs = Org::where([['path','like',$org.'%']])->column('id');
  395. $pid = Employee::where(['root_id'=>request()->employee->root_id,'org_id'=>$orgs,'state'=>'在职'])->order('is_manager desc,id desc')->column('id');
  396. $a = 1;
  397. foreach ($pid as $v) {
  398. $data[] = 'per_'.$v;
  399. }
  400. foreach ($orgs as $v2) {
  401. $data[] = 'org_'.$v2;
  402. }
  403. }
  404. if ($a && $pid) {
  405. if($res){
  406. $cw[] = ['root_id','=',request()->employee->root_id];
  407. $cw[] = ['employee_id','in',$pid];
  408. CampEmployee::where($cw)->update(['now'=>0]);
  409. foreach ($pid as $v) {
  410. $save = [];
  411. $save['root_id'] = request()->employee->root_id;
  412. $save['camp_id'] = $id;
  413. $save['employee_id'] = $v;
  414. $save['now'] = 1;
  415. $check = CampEmployee::where($save)->find();
  416. $save['state'] = '训练中';
  417. if ($check) {
  418. CampEmployee::where('id',$check->id)->update($save);
  419. }else{
  420. CampEmployee::insert($save);
  421. }
  422. }
  423. }else{
  424. CampEmployee::where([['camp_id','=',$id],['root_id','=',request()->employee->root_id],['employee_id','in',$pid],['approve','=',0]])->delete();
  425. }
  426. // //指派后历史答卷作废
  427. // //历史学习的课程和考试修改
  428. // $token = request()->employee;
  429. // $info = CampModel::with('campPlan')->where('id',$id)->find();
  430. // $w0 = $w1 = [];//0课程,1试卷
  431. // foreach ($info->campPlan->toArray() as $k4 => $v4) {
  432. // $v4['type']==0 ? $w0[]=$v4['con_id'] : $w1[]=$v4['con_id'];
  433. // }
  434. // $tw = $ew = [];
  435. // // $tw[] = ['class_id','in',$w0];
  436. // $tw[] = ['root_id','=',$token['root_id']];
  437. // $tw[] = ['from','=',1];
  438. // $tw[] = ['employee_id','in',$pid];
  439. // $train = TrainDoneLog::where($tw)->update(['from'=>2]);
  440. // // $ew[] = ['paper_id','in',$w1];
  441. // $ew[] = ['root_id','=',$token['root_id']];
  442. // $ew[] = ['from','=',1];
  443. // $ew[] = ['employee_id','in',$pid];
  444. // $paper = ExamEmpResult::where($ew)->update(['from'=>2]);
  445. }
  446. return json(['code' => 0, 'data' => $data]);
  447. }
  448. /**
  449. * 确认指派人员
  450. */
  451. public function confirm_assigns()
  452. {
  453. $id = Request::param('id');//计划id
  454. $empids = Request::param('empids');//多选框选中id
  455. $root_id = request()->employee->root_id;
  456. $dw[] = ['root_id','=',$root_id];
  457. $dw[] = ['id','=',$id];//最新状态
  458. $info = CampModel::where($dw)->count();
  459. if(empty($info)) return json(['code'=>1,'msg'=>'数据不存在']);
  460. if(!empty($empids)){
  461. $empids = explode(',',$empids);
  462. $check = CampEmployee::where([['camp_id','=',$id],['root_id','=',request()->employee->root_id],['employee_id','in',$empids],['state','<>','转正']])->count();
  463. if($check != count($empids)) return json(['code'=>1,'msg'=>'确认人员失败']);
  464. $tw[] = ['root_id','=',$root_id];
  465. $tw[] = ['from','=',1];
  466. $tw[] = ['employee_id','in',$empids];
  467. TrainDoneLog::where($tw)->update(['from'=>2]);
  468. ExamEmpResult::where($tw)->update(['from'=>2]);
  469. }
  470. return json(['code' => 0, 'msg' => '确认训练对象成功']);
  471. }
  472. /*
  473. * 课程指派展示列表
  474. */
  475. public function class_assigns_list()
  476. {
  477. $id = Request::param('id');
  478. $page = Request::param('page') ?: 1;
  479. $limit = Request::param('limit') ?: 10;
  480. $keyword = Request::param('keyword') ?: '';
  481. if ($keyword) {
  482. $w[] = ['name','like','%'.$keyword.'%'];
  483. }
  484. $arr = CampEmployee::where(['root_id'=>request()->employee->root_id , 'camp_id'=>$id,'now'=>1])->column('employee_id');
  485. $w[] = ['id','in',$arr];
  486. $data = Employee::with('orgName')->where($w)->visible(['name','org_name','id','is_manager'])->select()->toArray();
  487. $count = count($arr);
  488. $arr = array_flip($arr);
  489. foreach ($data as $k => $v) {
  490. $data[$k]['order'] = $arr[$v['id']];
  491. }
  492. array_multisort(array_column($data, 'order'), SORT_ASC, $data);
  493. foreach ($data as $k => $v) {
  494. $data[$k]['xh'] = $k+1;
  495. }
  496. $data = array_slice($data,($page-1)*$limit,$limit);
  497. return json(['code' => 0, 'data' => $data, 'count' => $count]);
  498. }
  499. //部门人员树
  500. public function tree($data,$pid = 0, $persons)
  501. {
  502. $new_arr = [];
  503. foreach($data as $k => $v){
  504. if($v['pid'] == $pid) {
  505. $persions = isset($persons[$v['id']])?$persons[$v['id']]:[];
  506. $children = $this->tree($data, $v['id'], $persons);
  507. $v['children'] = array_merge_recursive($children,$persions);
  508. if (empty($v['children'])) $v['disabled']=true;
  509. $new_arr[] =$v;
  510. }
  511. }
  512. return $new_arr;
  513. }
  514. /*
  515. * 培训人员
  516. */
  517. public function get_person($id)
  518. {
  519. $root_id = request()->employee->root_id;
  520. $keyword = input('keyword','');
  521. //所有员工
  522. $w1[] = ['root_id','=',$root_id];
  523. $w1[] = ['state','=','在职'];
  524. $w1[] = ['org_id','>',0];
  525. if ($keyword) {
  526. $w1[] = ['name','like','%'.$keyword.'%'];
  527. }
  528. $e = Employee::with(['org'=>function($query){
  529. $query->bind(['pid','level']);
  530. }])->where($w1)->field("id,name title,org_id,is_manager,concat('org_',org_id) org_class,concat('per_',id) per_class,concat('per') type")->order('is_manager desc,id desc')->select()->toArray();
  531. $count = $person = [];
  532. foreach ($e as $k3 => &$v3) {
  533. $v3['title'] = $v3['is_manager'] ? $v3['title'].'(负责人)' : $v3['title'];
  534. $count[$v3['org_id']] = isset($count[$v3['org_id']]) ? $count[$v3['org_id']]+=1 : 1;
  535. $v3['children'] = [];
  536. unset($e[$k3]['org']);
  537. $v3['count'] = 0;
  538. $person[$v3['org_id']][] = $e[$k3];
  539. }
  540. $where = [
  541. ['path', 'like', $root_id . '-%'],
  542. ['status', '=', 1]
  543. ];
  544. $org = Org::where($where)->field("id,pid,name title,level,org_type,info,path,concat('org_',id) org_class,concat('per_org_',id) per_class,concat('org') type,id org_id,concat(2) is_manager")->order('level asc, id asc')->select()->toArray();
  545. foreach ($org as $k => $v) {
  546. $org[$k]['count'] = isset($count[$v['id']]) ? $count[$v['id']] : 0;//本部门人数
  547. $org[$k]['all_count'] = 0;//包含子部门总数
  548. foreach ($org as $k2 => $v2) {
  549. if (strpos($v2['path'],$v['path']) !== false) {
  550. $org[$k]['all_count'] = isset($count[$v2['id']]) ? $count[$v2['id']]+$org[$k]['all_count'] : $org[$k]['all_count'];
  551. }
  552. }
  553. $org[$k]['title'] = $org[$k]['title'].' ('.$org[$k]['all_count'].')';
  554. }
  555. // $data = array_merge($e,$org);
  556. $data = $this->tree($org,0,$person);
  557. $cew[] = ['root_id','=',request()->employee->root_id];
  558. // $cew[] = ['camp_id','=',$id];
  559. $cew[] = ['now','=',1];
  560. $cew[] = ['state','<>','转正'];
  561. $camps = CampModel::where([['root_id','=',$root_id],['del','=',0]])->column('id');
  562. $cew[] = ['camp_id','in',$camps];
  563. $eids = CampEmployee::where($cew)->column('employee_id');
  564. $ow = $eids;
  565. $ew[] = ['id','in',$ow];
  566. $ew[] = ['root_id','=',request()->employee->root_id];
  567. $orgs = Employee::where($ew)->group('org_id')->column('count(*) count','org_id');
  568. return json(['code' => 0, 'data' => $data, 'checkOrg' =>implode(',',$eids),'orgs'=>$orgs]);
  569. }
  570. /*
  571. * 课程指派展示列表
  572. */
  573. public function del_assign()
  574. {
  575. $id = Request::param('id');
  576. $eid = Request::param('eid');
  577. if ($id && $eid) {
  578. if ($eid == -1) {
  579. CampModel::where(['root_id'=>request()->employee->root_id , 'id'=>$id])->update(['employee_ids'=>'']);
  580. }else{
  581. $arr = CampModel::where(['root_id'=>request()->employee->root_id , 'id'=>$id])->value('employee_ids');
  582. $arr = array_filter(array_diff(explode(',',$arr),[$eid]));
  583. CampModel::where(['root_id'=>request()->employee->root_id , 'id'=>$id])->update(['employee_ids'=>implode(',',$arr)]);
  584. }
  585. }
  586. return json(['code' => 0, 'data' => '取消成功', 'msg' => '取消成功']);
  587. }
  588. /**
  589. * 删除
  590. */
  591. public function camp_del()
  592. {
  593. $id = input('id',0);
  594. $root_id = request()->employee->root_id;
  595. $w[]= ['id','=',$id];
  596. $w[] = ['root_id','=',$root_id];
  597. CampModel::where($w)->update(['del'=>1]);
  598. $w = [];
  599. $w[] = ['camp_id','=',$id];
  600. CampEmployee::where($w)->update(['now'=>0]);
  601. return json(['code' => 0, 'data' => '删除成功', 'msg' => '删除成功']);
  602. }
  603. /**
  604. * 重选训练对象
  605. */
  606. public function reselect_train_plan()
  607. {
  608. $camp_id = input('camp_id',0);
  609. view::assign('camp_id',$camp_id);
  610. return View::fetch();
  611. }
  612. /**
  613. * 详情
  614. */
  615. public function read()
  616. {
  617. $id = input('id');
  618. $root_id = request()->employee->root_id;
  619. $w[]= ['camp_id','=',$id];
  620. $w[] = ['root_id','=',$root_id];
  621. $w[] = ['del','=',0];
  622. $info = CampPlan::where($w)->order('id asc')->select()->toArray();
  623. $data = [];
  624. foreach ($info as $k => $v) {
  625. if ($v['plan_id']==0) {
  626. $row = $v;
  627. $row['plan'] = [];
  628. foreach ($info as $k2 => $v2) {
  629. if ($v2['plan_id']==$v['id']) {
  630. $row['plan'][] = $v2;
  631. }
  632. }
  633. $data[] = $row;
  634. }
  635. }
  636. return json(['code' => 0, 'data' =>$data, 'msg' => '']);
  637. }
  638. /**
  639. * 新增计划
  640. */
  641. public function add()
  642. {
  643. $param = Request()->only(['camp_id', 'plan_name']);
  644. $token = request()->employee;
  645. $w[] = ['title','=',$param['plan_name']];
  646. $w[] = ['root_id','=',$token['root_id']];
  647. $w[] = ['camp_id','=',$param['camp_id']];
  648. $w[] = ['del','=',0];
  649. $info = CampPlan::where($w)->find();
  650. if ($info) {
  651. return json(['code' => 1, 'data' =>'计划已存在', 'msg' => '计划已存在']);
  652. }
  653. $save['title'] = $param['plan_name'];
  654. $save['root_id'] = $token['root_id'];
  655. $save['camp_id'] = $param['camp_id'];
  656. $info = CampPlan::insertGetId($save);
  657. return json(['code' => 0, 'data' =>'添加成功', 'msg' => '添加成功']);
  658. }
  659. /**
  660. * 编辑计划
  661. */
  662. public function edit()
  663. {
  664. $param = Request()->only(['camp_id', 'plan_name','id']);
  665. $token = request()->employee;
  666. $w[] = ['id','=',$param['id']];
  667. $w[] = ['root_id','=',$token['root_id']];
  668. $w[] = ['camp_id','=',$param['camp_id']];
  669. $w[] = ['plan_id','=',0];
  670. $w[] = ['del','=',0];
  671. $info = campPlan::where($w)->find();
  672. if (!$info) {
  673. return json(['code' => 1, 'data' =>'计划不存在', 'msg' => '计划不存在']);
  674. }
  675. $s = $w;
  676. $w = [];
  677. $w[] = ['id','<>',$param['id']];
  678. $w[] = ['root_id','=',$token['root_id']];
  679. $w[] = ['camp_id','=',$param['camp_id']];
  680. $w[] = ['plan_id','=',0];
  681. $w[] = ['del','=',0];
  682. $w[] = ['title','=',$param['plan_name']];
  683. $info = campPlan::where($w)->find();
  684. if ($info) {
  685. return json(['code' => 1, 'data' =>'名称重复', 'msg' => '名称重复']);
  686. }
  687. CampPlan::where($s)->update(['title'=>$param['plan_name']]);
  688. return json(['code' => 0, 'data' =>'编辑成功', 'msg' => '编辑成功']);
  689. }
  690. /**
  691. * 获取课程
  692. */
  693. public function train_class()
  694. {
  695. $param = Request()->only(['category','type','keyword','page','limit','camp_id','taskIds'=>'']);
  696. $token = request()->employee;
  697. $where[] = ['root_id','=',$token['root_id']];
  698. $where[] = ['publish','=',1];
  699. if (!empty($param['keyword'])) {
  700. $where[] = ['title','like','%'.$param['keyword'].'%'];
  701. }
  702. if (!empty($param['category'])) {
  703. $where[] = ['category','=',$param['category']];
  704. }
  705. if (!empty($param['type'])) {
  706. $where[] = ['type','=',$param['type']];
  707. }
  708. //
  709. $t[] = ['camp_id','=',$param['camp_id']];
  710. $t[] = ['root_id','=',$token['root_id']];
  711. $t[] = ['type','=',0];
  712. $t[] = ['del','=',0];
  713. $ids = CampPlan::where($t)->column('con_id');
  714. $ids = $param['taskIds'] ? array_merge($ids,explode(',',$param['taskIds'])) : $ids;
  715. $where[] = ['id','not in',$ids];
  716. $data = trainClass::where($where)->field('id,title,des')->page($param['page'],$param['limit'])->select()->toArray();
  717. $count = trainClass::where($where)->count();
  718. return json(['code' => 0, 'data' =>$data,'count'=>$count, 'msg' => '']);
  719. }
  720. /**
  721. * 获取试卷
  722. */
  723. public function exam_list()
  724. {
  725. $param = Request()->only(['checkway','page','limit','camp_id','taskIds'=>'']);
  726. $token = request()->employee;
  727. $where[] = ['root_id','=',$token['root_id']];
  728. $where[] = ['state','=',1];
  729. if (!empty($param['keyword'])) {
  730. $where[] = ['name','like','%'.$param['keyword'].'%'];
  731. }
  732. if (!empty($param['checkway'])) {
  733. $where[] = ['checkway','=',$param['checkway']];
  734. }
  735. $t[] = ['camp_id','=',$param['camp_id']];
  736. $t[] = ['root_id','=',$token['root_id']];
  737. $t[] = ['type','=',1];
  738. $t[] = ['del','=',0];
  739. $ids = CampPlan::where($t)->column('con_id');
  740. $ids = $param['taskIds'] ? array_merge($ids,explode(',',$param['taskIds'])) : $ids;
  741. $where[] = ['id','not in',$ids];
  742. $data = examPaper::where($where)->field('id,name,desc,duringtime,total_score,base_score')->page($param['page'],$param['limit'])->select()->toArray();
  743. $count = examPaper::where($where)->count();
  744. return json(['code' => 0, 'data' =>$data,'count'=>$count, 'msg' => '']);
  745. }
  746. /**
  747. * 增加计划内容
  748. */
  749. public function add_plan()
  750. {
  751. $param = Request()->only(['camp_id','type','plan_id','con_name','con_id']);
  752. $token = request()->employee;
  753. $w[] = ['root_id','=',$token['root_id']];
  754. $w[] = ['camp_id','=',$param['camp_id']];
  755. $w[] = ['type','=',$param['type']];
  756. $w[] = ['plan_id','=',$param['plan_id']];
  757. $w[] = ['con_id','=',$param['con_id']];
  758. $w[] = ['del','=',0];
  759. $info = CampPlan::where($w)->find();
  760. if ($info) {
  761. return json(['code' => 1, 'data' =>'培训已存在', 'msg' => '培训已存在']);
  762. }
  763. $save['root_id'] = $token['root_id'];
  764. $save['camp_id'] = $param['camp_id'];
  765. $save['type'] = $param['type'];
  766. $save['plan_id'] = $param['plan_id'];
  767. $save['title'] = $param['con_name'];
  768. $save['con_id'] = $param['con_id'];
  769. CampPlan::insertGetId($save);
  770. return json(['code' => 0, 'data' =>'保存成功', 'msg' => '保存成功']);
  771. }
  772. /**
  773. * 增加计划内容
  774. */
  775. public function edit_plan()
  776. {
  777. $param = Request()->only(['id','plan_id','type','con_name','con_id']);
  778. $token = request()->employee;
  779. $w[] = ['root_id','=',$token['root_id']];
  780. $w[] = ['id','=',$param['id']];
  781. $w[] = ['plan_id','=',$param['plan_id']];
  782. $w[] = ['del','=',0];
  783. $info = CampPlan::where($w)->find();
  784. $id = $info->id;
  785. if (!$info) {
  786. return json(['code' => 1, 'data' =>'数据不存在', 'msg' => '数据不存在']);
  787. }
  788. $w = [];
  789. $w[] = ['root_id','=',$token['root_id']];
  790. $w[] = ['id','<>',$param['id']];
  791. // $w[] = ['plan_id','=',$param['plan_id']];
  792. $w[] = ['camp_id','=',$info->camp_id];
  793. $w[] = ['del','=',0];
  794. $w[] = ['con_id','=',$param['con_id']];
  795. $w[] = ['type','=',$param['type']];
  796. $info = CampPlan::where($w)->find();
  797. if ($info) {
  798. return json(['code' => 1, 'data' =>'重复选择', 'msg' => '重复选择']);
  799. }
  800. $u['title'] = $param['con_name'];
  801. $u['con_id'] = $param['con_id'];
  802. $u['type'] = $param['type'];
  803. CampPlan::where('id',$id)->update($u);
  804. return json(['code' => 0, 'data' =>'保存成功', 'msg' => '保存成功']);
  805. }
  806. /**
  807. * 训练营人员列表
  808. */
  809. public function employee()
  810. {
  811. $param = Request()->only(['id','page','limit','org_id'=>0,'approve'=>0]);
  812. $token = request()->employee;
  813. $w[] = ['root_id','=',$token['root_id']];
  814. $w[] = ['now','=',1];
  815. if ($param['org_id']) {
  816. $eids = Employee::where('org_id',$param['org_id'])->column('id');
  817. $w[] = ['employee_id','in',$eids];
  818. }
  819. if ($param['approve']) {
  820. $w[] = ['approve','=',1];
  821. }
  822. $w[] = ['state','<>','转正'];
  823. $camps = CampModel::where([['root_id','=',$token['root_id']],['del','=',0]])->column('id');
  824. $w[] = ['camp_id','in',$camps];
  825. $res = CampEmployee::with(['employee'=>function($query){
  826. $query->bind(['name','org_id']);
  827. },'camp'=>function($query){
  828. $query->bind(['title']);
  829. }])
  830. ->where($w)
  831. ->field('id,camp_id,approve,state,employee_id,addtime,speed,approve_time')
  832. // ->fetchsql()
  833. ->select()->toArray();
  834. $orgs = Org::where([['path', 'like', $token['root_id'] . '-%']])->column('name','id');
  835. foreach ($res as $k => $v) {
  836. $res[$k]['org_name'] = isset($orgs[$v['org_id']]) ? $orgs[$v['org_id']] : '';
  837. unset($res[$k]['employee']);unset($res[$k]['camp']);
  838. }
  839. $countc = count($res);
  840. $data = array_slice($res,($param['page']-1)*$param['limit'],$param['limit']);
  841. foreach ($data as $k2 => $v2) {
  842. $pw = [];
  843. $pw[] = ['root_id','=',$token['root_id']];
  844. $pw[] = ['camp_id','=',$v2['camp_id']];
  845. $pw[] = ['con_id','>',0];
  846. $pw[] = ['plan_id','>',0];
  847. $pw[] = ['del','=',0];
  848. $plan = CampPlan::where($pw)->order('id asc')->select()->toArray();
  849. $count = count($plan);//总节数
  850. $w0 = $w1 = [];//0课程,1试卷
  851. foreach ($plan as $k3 => $v3) {
  852. $v3['type']==0 ? $w0[]=$v3['con_id'] : $w1[]=$v3['con_id'];
  853. }
  854. $tw = [];
  855. $tw[] = ['class_id','in',$w0];
  856. $tw[] = ['root_id','=',$token['root_id']];
  857. $tw[] = ['from','=',1];
  858. $tw[] = ['employee_id','=',$v2['employee_id']];
  859. $tw[] = ['done_percent','=',100];
  860. $train = TrainDoneLog::where($tw)->count();
  861. $ew = [];
  862. $ew[] = ['paper_id','in',$w1];
  863. $ew[] = ['root_id','=',$token['root_id']];
  864. $ew[] = ['from','=',1];
  865. $ew[] = ['employee_id','=',$v2['employee_id']];
  866. // $paper = ExamEmpResult::where($ew)->count();
  867. $paper = ExamEmpResult::with('paper')->where($ew)->select()->toArray();
  868. $i = 0;
  869. foreach ($paper as $k6 => $v6) {
  870. if ($v6['base_score'] <= $v6['final_score']) {
  871. $i+=1;
  872. }
  873. }
  874. $passed_count = $train+$i;
  875. $data[$k2]['speed'] = $count ? round(($passed_count/$count)*100,2).'%' : '0%';
  876. }
  877. return json(['code' => 0, 'data' =>$data,'count'=>$countc, 'msg' => '保存成功']);
  878. }
  879. /**
  880. * 重新指派
  881. */
  882. public function assign()
  883. {
  884. $param = Request()->only(['id','camp_id']);
  885. $token = request()->employee;
  886. $w[] = ['root_id','=',$token['root_id']];
  887. $w[] = ['id','=',$param['id']];
  888. $check = CampEmployee::where($w)->order('now desc')->findOrEmpty();
  889. if ($check->isEmpty()) {
  890. return json(['code' => 1, 'data' =>'数据不存在','msg' => '数据不存在']);
  891. }
  892. $check->now = 0;
  893. $check->save();
  894. //历史学习的课程和考试修改
  895. $info = CampModel::with('campPlan')->where('id',$check->camp_id)->find();
  896. $w0 = $w1 = [];//0课程,1试卷
  897. foreach ($info->campPlan->toArray() as $k4 => $v4) {
  898. $v4['type']==0 ? $w0[]=$v4['con_id'] : $w1[]=$v4['con_id'];
  899. }
  900. $tw = $ew = [];
  901. // $tw[] = ['class_id','in',$w0];
  902. $tw[] = ['root_id','=',$token['root_id']];
  903. $tw[] = ['from','=',1];
  904. $tw[] = ['employee_id','=',$check->employee_id];
  905. $train = TrainDoneLog::where($tw)->update(['from'=>2]);
  906. // $ew[] = ['paper_id','in',$w1];
  907. $ew[] = ['root_id','=',$token['root_id']];
  908. $ew[] = ['from','=',1];
  909. $ew[] = ['employee_id','=',$check->employee_id];
  910. // var_dump($ew);die;
  911. $paper = ExamEmpResult::where($ew)->update(['from'=>2]);
  912. $u['state'] = '训练中';
  913. $u['now'] = 1;
  914. $u['speed'] = '';
  915. $u['camp_id'] = $param['camp_id'];
  916. $u['employee_id'] = $check->employee_id;
  917. $u['root_id'] = $check->root_id;
  918. CampEmployee::insertGetId($u);
  919. return json(['code' => 0, 'data' =>'指派成功','msg' => '保存成功']);
  920. }
  921. /**
  922. * 转正 0转正 ,1通过 ,3重新考核
  923. */
  924. public function worker()
  925. {
  926. $param = Request()->only(['id','type'=>0]);
  927. $token = request()->employee;
  928. $w[] = ['root_id','=',$token['root_id']];
  929. $w[] = ['id','=',$param['id']];
  930. $w[] = ['now','=',1];
  931. $check = CampEmployee::where($w)->order('now desc')->find();
  932. if (!$check) {
  933. return json(['code' => 1, 'data' =>'数据不存在','msg' => '数据不存在']);
  934. }
  935. $u['state'] = '转正';
  936. $u['now'] = 1;
  937. // $u['speed'] = '100%';
  938. // $u['camp_id'] = $param['camp_id'];
  939. $u['approve'] = $param['type']==0 ? 4 : 2;
  940. $u['approve_time'] = date('Y-m-d H:i:s');
  941. if ($param['type']==3) {
  942. $u['state'] = '训练中';
  943. $u['speed'] = '';
  944. $u['approve'] = 0;
  945. $tw = $ew = [];
  946. // $tw[] = ['class_id','in',$w0];
  947. $tw[] = ['root_id','=',$token['root_id']];
  948. $tw[] = ['from','=',1];
  949. $tw[] = ['employee_id','=',$check->employee_id];
  950. $train = TrainDoneLog::where($tw)->update(['from'=>2]);
  951. // $ew[] = ['paper_id','in',$w1];
  952. $ew[] = ['root_id','=',$token['root_id']];
  953. $ew[] = ['from','=',1];
  954. $ew[] = ['employee_id','=',$check->employee_id];
  955. // var_dump($ew);die;
  956. $paper = ExamEmpResult::where($ew)->update(['from'=>2]);
  957. }else{
  958. $u['now'] = 0;
  959. }
  960. CampEmployee::where($w)->update($u);
  961. return json(['code' => 0, 'data' =>'操作成功','msg' => '操作成功']);
  962. }
  963. /**
  964. * 删除计划
  965. */
  966. public function del_plan()
  967. {
  968. $param = Request()->only(['id']);
  969. $token = request()->employee;
  970. $w[] = ['root_id','=',$token['root_id']];
  971. $w[] = ['id|plan_id','=',$param['id']];
  972. CampPlan::where($w)->update(['del'=>1]);
  973. return json(['code' => 0, 'data' =>'操作成功','msg' => '操作成功']);
  974. }
  975. /**
  976. * 保存内容
  977. */
  978. public function save()
  979. {
  980. $token = request()->employee;
  981. $arr = input('arr/a',[]);
  982. $camp_id = input('camp_id',0);
  983. // $camp_id = 23;
  984. // $a['planName'] = 12;
  985. // $b['type'] = 0;
  986. // $b['id'] = 1;
  987. // $b['title'] = 233;
  988. // $a['plan'][] = $b;
  989. // $c[] = $a;
  990. // $arr = $c;
  991. // $token['root_id'] = 33;
  992. foreach ($arr as $v) {
  993. $w1 = [];
  994. $w1[] = ['title','=',$v['title']];
  995. $w1[] = ['root_id','=',$token['root_id']];
  996. $w1[] = ['del','=',0];
  997. $w1[] = ['plan_id','=',0];
  998. $w1[] = ['con_id','=',0];
  999. $w1[] = ['camp_id','=',$camp_id];
  1000. $info = CampPlan::where($w1)->find();
  1001. if (!$info) {
  1002. $save = [];
  1003. $save['title'] = $v['title'];
  1004. $save['root_id'] = $token['root_id'];
  1005. $save['plan_id'] = 0;
  1006. $save['con_id'] = 0;
  1007. $save['del'] = 0;
  1008. $save['camp_id'] = $camp_id;
  1009. $plan_id = CampPlan::insertGetId($save);
  1010. } else {
  1011. $plan_id = $info->id;
  1012. }
  1013. foreach ($v['plan'] as $v2) {
  1014. $w1 = [];
  1015. $w1[] = ['root_id','=',$token['root_id']];
  1016. $w1[] = ['type','=',$v2['type']];
  1017. $w1[] = ['con_id','=',$v2['id']];
  1018. $w1[] = ['del','=',0];
  1019. $w1[] = ['plan_id','=',$plan_id];
  1020. $w1[] = ['camp_id','=',$camp_id];
  1021. $info = CampPlan::where($w1)->find();
  1022. if (!$info) {
  1023. $save = [];
  1024. $save['root_id'] = $token['root_id'];
  1025. $save['type'] = $v2['type'];
  1026. $save['plan_id'] = $plan_id;
  1027. $save['title'] = $v2['title'];
  1028. $save['con_id'] = $v2['id'];
  1029. $save['camp_id'] = $camp_id;
  1030. CampPlan::insertGetId($save);
  1031. }
  1032. }
  1033. }
  1034. return json(['code' => 0, 'data' =>'保存成功','msg' => '保存成功']);
  1035. }
  1036. }