OrderService.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Employee;
  4. use App\Model\Order;
  5. use App\Model\OrderDetails;
  6. use App\Model\Reminder;
  7. use App\Model\ReminderDetails;
  8. use App\Model\TodoList;
  9. use Illuminate\Support\Facades\DB;
  10. class OrderService extends Service
  11. {
  12. public function orderEdit($data,$user){
  13. list($status,$msg) = $this->orderRule($data, $user, false);
  14. if(!$status) return [$status,$msg];
  15. try {
  16. DB::beginTransaction();
  17. $model = Order::where('id',$data['id'])->first();
  18. $model->order_number = $data['order_number'] ?? '';
  19. $model->customer_id = $data['customer_id'] ?? 0;
  20. $model->supply_id = $data['supply_id'] ?? 0;
  21. $model->order_time = $data['order_time'] ?? 0;
  22. $model->quantity = $data['quantity'] ?? 0;
  23. $model->save();
  24. $time = time();
  25. OrderDetails::where('del_time',0)
  26. ->where('order_id', $model->id)
  27. ->update(['del_time' => $time]);
  28. $this->saveDetail($model->id, $time, $data);
  29. DB::commit();
  30. }catch (\Exception $exception){
  31. DB::rollBack();
  32. return [false,$exception->getMessage()];
  33. }
  34. return [true, ''];
  35. }
  36. public function orderAdd($data,$user){
  37. list($status,$msg) = $this->orderRule($data, $user);
  38. if(!$status) return [$status,$msg];
  39. try {
  40. DB::beginTransaction();
  41. $model = new Order();
  42. $model->order_number = $data['order_number'] ?? '';
  43. $model->customer_id = $data['customer_id'] ?? 0;
  44. $model->supply_id = $data['supply_id'] ?? 0;
  45. $model->order_time = $data['order_time'] ?? 0;
  46. $model->quantity = $data['quantity'] ?? 0;
  47. $model->crt_id = $user['id'];
  48. $model->save();
  49. $this->saveDetail($model->id, time(), $data);
  50. DB::commit();
  51. }catch (\Exception $exception){
  52. DB::rollBack();
  53. return [false,$exception->getMessage()];
  54. }
  55. return [true, ''];
  56. }
  57. private function saveDetail($id, $time, $data){
  58. if(! empty($data['details'])){
  59. $unit = [];
  60. foreach ($data['details'] as $value){
  61. $unit[] = [
  62. 'order_id' => $id,
  63. 'code' => $value['code'],
  64. 'title' => $value['title'],
  65. 'size' => $value['size'] ?? "",
  66. 'unit' => $value['unit'] ?? "",
  67. 'quantity' => $value['quantity'],
  68. 'crt_time' => $time,
  69. ];
  70. }
  71. if(! empty($unit)) OrderDetails::insert($unit);
  72. }
  73. }
  74. private function getDetail($id){
  75. $data = OrderDetails::where('del_time',0)
  76. ->where('order_id', $id)
  77. ->get()->toArray();
  78. $unit = [];
  79. foreach ($data as $value){
  80. $unit[] = [
  81. 'code' => $value['code'],
  82. 'title' => $value['title'],
  83. 'size' => $value['size'],
  84. 'unit' => $value['unit'],
  85. 'quantity' => $value['quantity'],
  86. ];
  87. }
  88. $detail = [
  89. 'details' => $unit,
  90. ];
  91. foreach ($detail as $key => $value) {
  92. if (empty($value)) {
  93. $detail[$key] = (object)[]; // 转成 stdClass 对象
  94. }
  95. }
  96. return $detail;
  97. }
  98. public function orderDel($data){
  99. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  100. try {
  101. DB::beginTransaction();
  102. $time = time();
  103. Order::where('del_time',0)
  104. ->whereIn('id',$data['id'])
  105. ->update(['del_time' => $time]);
  106. OrderDetails::where('del_time',0)
  107. ->where('order_id', $data['id'])
  108. ->update(['del_time' => $time]);
  109. DB::commit();
  110. }catch (\Exception $exception){
  111. DB::rollBack();
  112. return [false,$exception->getMessage()];
  113. }
  114. return [true, ''];
  115. }
  116. public function orderDetail($data, $user){
  117. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  118. $customer = Order::where('del_time',0)
  119. ->where('id',$data['id'])
  120. ->first();
  121. if(empty($customer)) return [false,'订单不存在或已被删除'];
  122. $customer = $customer->toArray();
  123. $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
  124. $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
  125. $details = $this->getDetail($data['id']);
  126. $customer = array_merge($customer, $details);
  127. return [true, $customer];
  128. }
  129. public function orderCommon($data,$user, $field = []){
  130. if(empty($field)) $field = Order::$field;
  131. $model = Order::Clear($user,$data);
  132. $model = $model->where('del_time',0)
  133. ->select($field)
  134. ->orderby('id', 'desc');
  135. if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
  136. if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
  137. if(! empty($data['id'])) $model->whereIn('id', $data['id']);
  138. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
  139. $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
  140. $model->where('crt_time','>=',$return[0]);
  141. $model->where('crt_time','<=',$return[1]);
  142. }
  143. if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) {
  144. $return = $this->changeDateToTimeStampAboutRange($data['order_time']);
  145. $model->where('order_time','>=',$return[0]);
  146. $model->where('order_time','<=',$return[1]);
  147. }
  148. return $model;
  149. }
  150. public function orderList($data,$user){
  151. $model = $this->orderCommon($data, $user);
  152. $list = $this->limit($model,'',$data);
  153. $list = $this->fillData($list,$user,$data);
  154. $list['count'] = $this->countTotal($list['data'], $user['header_default']);
  155. return [true, $list];
  156. }
  157. public function orderRule(&$data, $user, $is_add = true){
  158. if(empty($data['order_number'])) return [false, '订单号不能为空'];
  159. if(empty($data['order_time'])) return [false, '订单日期不能为空'];
  160. $data['order_time'] = $this->changeDateToDate($data['order_time']);
  161. if(empty($data['details'])) return [false, '物料不能为空'];
  162. $total = 0;
  163. foreach ($data['details'] as $value){
  164. if(empty($value['code'])) return [false, '物料编码不能为空'];
  165. if(empty($value['title'])) return [false, '物料名称不能为空'];
  166. $res = $this->checkNumber($data['quantity'],2,'positive');
  167. if(! $res['valid']) return [false,'物料数量:' . $res['error']];
  168. $total = bcadd($total, $value['quantity'],2);
  169. }
  170. $data['quantity'] = $total;
  171. list($status, $msg) = $this->checkArrayRepeat($data['details'],'code','物料编码');
  172. if(! $status) return [false, $msg];
  173. if($is_add){
  174. $bool = Order::where('order_number',$data['order_number'])
  175. ->where('crt_id', $user['id'])
  176. ->where('del_time',0)
  177. ->exists();
  178. }else{
  179. if(empty($data['id'])) return [false,'ID不能为空'];
  180. $bool = Order::where('order_number',$data['order_number'])
  181. ->where('crt_id', $user['id'])
  182. ->where('id','<>',$data['id'])
  183. ->where('del_time',0)
  184. ->exists();
  185. }
  186. if($bool) return [false, '订单号已存在'];
  187. return [true, $data];
  188. }
  189. public function fillData($data, $user, $search){
  190. if(empty($data['data'])) return $data;
  191. $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'id')));
  192. $emp_2 = (new CustomerSupplyService())->getEmployeeMap(array_unique(array_merge_recursive(array_column($data['data'],'customer_id'), array_column($data['data'],'supply_id'))));
  193. foreach ($data['data'] as $key => $value){
  194. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  195. $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
  196. $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
  197. $data['data'][$key]['customer_title'] = $emp_2[$value['customer_id']] ?? '';
  198. $data['data'][$key]['supply_title'] = $emp_2[$value['supply_id']] ?? '';
  199. }
  200. return $data;
  201. }
  202. //催单管理---------------------------------------------
  203. public function reminderEdit($data,$user){
  204. list($status,$msg) = $this->reminderRule($data, $user, false);
  205. if(!$status) return [$status,$msg];
  206. try {
  207. DB::beginTransaction();
  208. $model = Reminder::where('id',$data['id'])->first();
  209. $model->order_id = $data['order_id'] ?? 0;
  210. $model->order_no = $data['order_no'] ?? '';
  211. $model->product_code = $data['product_code'] ?? '';
  212. $model->product_size = $data['product_size'] ?? '';
  213. $model->product_unit = $data['product_unit'] ?? '';
  214. $model->product_title = $data['product_title'] ?? '';
  215. $model->quantity = $data['quantity'] ?? 0;
  216. $model->order_time = $data['order_time'] ?? 0;
  217. $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0;
  218. $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0;
  219. $model->tl_quantity = $data['tl_quantity'] ?? 0;
  220. $model->df_type = $data['df_type'] ?? 0;
  221. $model->save();
  222. $time = time();
  223. ReminderDetails::where('del_time',0)
  224. ->where('reminder_id', $model->id)
  225. ->update(['del_time' => $time]);
  226. $this->saveDetail1($model->id, $time, $data);
  227. DB::commit();
  228. }catch (\Exception $exception){
  229. DB::rollBack();
  230. return [false,$exception->getMessage()];
  231. }
  232. return [true, ''];
  233. }
  234. public function reminderAdd($data,$user){
  235. list($status,$msg) = $this->reminderRule($data, $user);
  236. if(!$status) return [$status,$msg];
  237. try {
  238. DB::beginTransaction();
  239. $model = new Reminder();
  240. $model->order_number = $this->createOrderNumber();
  241. $model->order_id = $data['order_id'] ?? 0;
  242. $model->order_no = $data['order_no'] ?? '';
  243. $model->product_code = $data['product_code'] ?? '';
  244. $model->product_size = $data['product_size'] ?? '';
  245. $model->product_unit = $data['product_unit'] ?? '';
  246. $model->product_title = $data['product_title'] ?? '';
  247. $model->quantity = $data['quantity'] ?? 0;
  248. $model->order_time = $data['order_time'] ?? 0;
  249. $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0;
  250. $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0;
  251. $model->tl_quantity = $data['tl_quantity'] ?? 0;
  252. $model->df_type = $data['df_type'] ?? 0;
  253. $model->crt_id = $user['id'];
  254. $model->save();
  255. $this->saveDetail1($model->id, time(), $data);
  256. DB::commit();
  257. }catch (\Exception $exception){
  258. DB::rollBack();
  259. return [false,$exception->getMessage()];
  260. }
  261. return [true, ''];
  262. }
  263. private function saveDetail1($id, $time, $data){
  264. if(! empty($data['details'])){
  265. $unit = [];
  266. foreach ($data['details'] as $value){
  267. $unit[] = [
  268. 'reminder_id' => $id,
  269. 'customer_supply_id' => $value['customer_supply_id'],
  270. 'is_main' => $value['is_main'],
  271. 'quantity' => $value['quantity'],
  272. 'crt_time' => $time,
  273. ];
  274. }
  275. if(! empty($unit)) ReminderDetails::insert($unit);
  276. }
  277. }
  278. private function getDetail1($id){
  279. $data = ReminderDetails::from('reminder_details as a')
  280. ->leftJoin('customer_supply as b','b.id','a.customer_supply_id')
  281. ->where('a.del_time',0)
  282. ->where('a.reminder_id', $id)
  283. ->select('a.customer_supply_id','a.is_main','b.title')
  284. ->get()->toArray();
  285. $unit = [];
  286. foreach ($data as $value){
  287. $unit[] = [
  288. 'customer_supply_id' => $value['customer_supply_id'],
  289. 'is_main' => $value['is_main'],
  290. ];
  291. }
  292. $detail = [
  293. 'details' => $unit,
  294. ];
  295. foreach ($detail as $key => $value) {
  296. if (empty($value)) {
  297. $detail[$key] = (object)[]; // 转成 stdClass 对象
  298. }
  299. }
  300. return $detail;
  301. }
  302. public function reminderDel($data){
  303. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  304. $bool = Reminder::where('del_time',0)
  305. ->whereIn('id',$data['id'])
  306. ->where('status','>',Reminder::status_zero)
  307. ->exists();
  308. if($bool) return [false, '催单状态已变更,删除失败'];
  309. try {
  310. DB::beginTransaction();
  311. $time = time();
  312. Reminder::where('del_time',0)
  313. ->whereIn('id',$data['id'])
  314. ->update(['del_time' => $time]);
  315. ReminderDetails::where('del_time',0)
  316. ->where('reminder_id', $data['id'])
  317. ->update(['del_time' => $time]);
  318. DB::commit();
  319. }catch (\Exception $exception){
  320. DB::rollBack();
  321. return [false,$exception->getMessage()];
  322. }
  323. return [true, ''];
  324. }
  325. public function reminderDetail($data, $user){
  326. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  327. $customer = Reminder::where('del_time',0)
  328. ->where('id',$data['id'])
  329. ->first();
  330. if(empty($customer)) return [false,'催单不存在或已被删除'];
  331. $customer = $customer->toArray();
  332. $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
  333. $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
  334. $customer['order_time'] = $customer['order_time'] ? date("Y-m-d",$customer['order_time']): '';
  335. $customer['lt_arrived_time'] = $customer['lt_arrived_time'] ? date("Y-m-d",$customer['lt_arrived_time']): '';
  336. $customer['tl_arrived_time'] = $customer['tl_arrived_time'] ? date("Y-m-d",$customer['tl_arrived_time']): '';
  337. $customer['df_type_title'] = Reminder::$df_type_name[$customer['df_type']] ?? "";
  338. $customer['rule_title'] = Reminder::$rule_name[$customer['rule']] ?? "";
  339. $customer['status_title'] = Reminder::$status_name[$customer['status']] ?? "";
  340. $details = $this->getDetail1($data['id']);
  341. $customer = array_merge($customer, $details);
  342. return [true, $customer];
  343. }
  344. public function reminderCommon($data,$user, $field = []){
  345. if(empty($field)) $field = Order::$field;
  346. $model = Reminder::Clear($user,$data);
  347. $model = $model->where('del_time',0)
  348. ->select($field)
  349. ->orderby('id', 'desc');
  350. if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
  351. if(! empty($data['order_no'])) $model->where('order_no', 'LIKE', '%'.$data['order_no'].'%');
  352. if(! empty($data['product_title'])) $model->where('product_title', 'LIKE', '%'.$data['product_title'].'%');
  353. if(! empty($data['product_code'])) $model->where('product_code', 'LIKE', '%'.$data['product_code'].'%');
  354. if(! empty($data['id'])) $model->whereIn('id', $data['id']);
  355. if(isset($data['status'])) $model->where('status', $data['status']);
  356. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
  357. $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
  358. $model->where('crt_time','>=',$return[0]);
  359. $model->where('crt_time','<=',$return[1]);
  360. }
  361. if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) {
  362. $return = $this->changeDateToTimeStampAboutRange($data['order_time']);
  363. $model->where('order_time','>=',$return[0]);
  364. $model->where('order_time','<=',$return[1]);
  365. }
  366. return $model;
  367. }
  368. public function reminderList($data,$user){
  369. $model = $this->reminderCommon($data, $user);
  370. $list = $this->limit($model,'',$data);
  371. $list = $this->fillReminderData($list,$user,$data);
  372. $list['count'] = $this->countTotal($list['data'], $user['header_default']);
  373. return [true, $list];
  374. }
  375. public function reminderRule(&$data, $user, $is_add = true){
  376. if(empty($data['order_id'])) return [false, '订单ID不能为空'];
  377. if(empty($data['order_no'])) return [false, '订单号不能为空'];
  378. if(empty($data['order_time'])) return [false, '订单日期不能为空'];
  379. $data['order_time'] = strtotime($data['order_time']);
  380. if(empty($data['product_code'])) return [false, '物料编码不能为空'];
  381. if(empty($data['product_title'])) return [false, '物料名称不能为空'];
  382. if(empty($data['quantity'])) return [false, '物料数量不能为空'];
  383. if(empty($data['lt_arrived_time'])) return [false, 'LT要求到货日期不能为空'];
  384. $data['lt_arrived_time'] = $this->changeDateToDate($data['lt_arrived_time']);
  385. if(empty($data['tl_arrived_time'])) return [false, '提拉到货日期不能为空'];
  386. $data['tl_arrived_time'] = $this->changeDateToDate($data['tl_arrived_time']);
  387. $res = $this->checkNumber($data['tl_quantity'],2,'positive');
  388. if(! $res['valid']) return [false,'提拉到货数量:' . $res['error']];
  389. if(empty($data['df_type'])) return [false, '要求答复时间不能为空'];
  390. if(! isset(Reminder::$df_type_name[$data['df_type']])) return [false, '要求答复时间错误'];
  391. if(empty($data['rule'])) return [false, '主要人员关系规则不能为空'];
  392. if(! isset(Reminder::$rule_name[$data['rule']])) return [false, '主要人员关系规则不存在'];
  393. if(empty($data['details'])) return [false, '催单提醒人员不能为空'];
  394. $is_bool = false;
  395. $main_ids = [];
  396. $sub_ids = [];
  397. foreach ($data['details'] as $value) {
  398. if (empty($value['customer_supply_id'])) return [false, '人员id不能为空'];
  399. if (empty($value['is_main'])) return [false, 'is_main不能为空'];
  400. $customer_id = $value['customer_supply_id'];
  401. $is_main_val = $value['is_main'];
  402. if ($is_main_val == ReminderDetails::is_main_one) {
  403. // 检查主要人员重复
  404. if (in_array($customer_id, $main_ids)) {
  405. return [false, "主要成员不能重复"];
  406. }
  407. $main_ids[] = $customer_id;
  408. $is_bool = true;
  409. } elseif ($is_main_val == ReminderDetails::is_main_two) {
  410. // 检查次要人员重复
  411. if (in_array($customer_id, $sub_ids)) {
  412. return [false, "次要成员不能重复"];
  413. }
  414. $sub_ids[] = $customer_id;
  415. }
  416. }
  417. // 检查主要成员至少一个
  418. if (!$is_bool) return [false, '主要成员必须选择'];
  419. // 检查主要与次要是否有重复
  420. $intersect = array_intersect($main_ids, $sub_ids);
  421. if (!empty($intersect)) return [false, "主要成员与次要成员不能重复"];
  422. if($is_add){
  423. }else{
  424. if(empty($data['id'])) return [false,'ID不能为空'];
  425. $order = Order::where('id',$data['id'])
  426. ->where('del_time',0)
  427. ->fist();
  428. if(empty($order)) return [false, '催单不存在或已被删除'];
  429. $order = $order->toArray();
  430. if($order['status'] > Reminder::status_zero) return [false, '催单状态已变更,编辑失败'];
  431. }
  432. return [true, $data];
  433. }
  434. public function fillReminderData($data, $user, $search){
  435. if(empty($data['data'])) return $data;
  436. $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'id')));
  437. foreach ($data['data'] as $key => $value){
  438. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  439. $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
  440. $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
  441. $data['data'][$key]['lt_arrived_time'] = $value['lt_arrived_time'] ? date("Y-m-d",$value['lt_arrived_time']): '';
  442. $data['data'][$key]['tl_arrived_time'] = $value['tl_arrived_time'] ? date("Y-m-d",$value['tl_arrived_time']): '';
  443. $data['data'][$key]['df_type_title'] = Reminder::$df_type_name[$value['df_type']] ?? "";
  444. $data['data'][$key]['rule_title'] = Reminder::$rule_name[$value['rule']] ?? "";
  445. $data['data'][$key]['status_title'] = Reminder::$status_name[$value['status']] ?? "";
  446. }
  447. return $data;
  448. }
  449. public function createOrderNumber(){
  450. return date('YmdHis',time()) . rand(1000,9999);
  451. }
  452. //催单管理---------------------------------------------
  453. //待办管理---------------------------------------------
  454. public function toDoEdit($data,$user){
  455. list($status,$msg) = $this->toDoRule($data, $user, false);
  456. if(!$status) return [$status,$msg];
  457. try {
  458. DB::beginTransaction();
  459. $model = TodoList::where('id',$data['id'])->first();
  460. $model->title = $data['title'] ?? "";
  461. $model->type = $data['type'] ?? '';
  462. $model->remind_start = $data['remind_start'] ?? '';
  463. $model->remind_interval = $data['remind_interval'] ?? 0;
  464. $model->last_remind_time = $data['last_remind_time'] ?? 0;
  465. $model->man_type = $data['man_type'] ?? '';
  466. $model->organization_name = $data['organization_name'] ?? '';
  467. $model->contact = $data['contact'] ?? '';
  468. $model->address = $data['address'] ?? '';
  469. $model->content = $data['content'] ?? '';
  470. $model->save();
  471. DB::commit();
  472. }catch (\Exception $exception){
  473. DB::rollBack();
  474. return [false,$exception->getMessage()];
  475. }
  476. return [true, ''];
  477. }
  478. public function toDoAdd($data,$user){
  479. list($status,$msg) = $this->toDoRule($data, $user);
  480. if(!$status) return [$status,$msg];
  481. try {
  482. DB::beginTransaction();
  483. $model = new Reminder();
  484. $model->title = $data['title'] ?? "";
  485. $model->type = $data['type'] ?? '';
  486. $model->remind_start = $data['remind_start'] ?? '';
  487. $model->remind_interval = $data['remind_interval'] ?? 0;
  488. $model->last_remind_time = $data['last_remind_time'] ?? 0;
  489. $model->man_type = $data['man_type'] ?? '';
  490. $model->organization_name = $data['organization_name'] ?? '';
  491. $model->contact = $data['contact'] ?? '';
  492. $model->address = $data['address'] ?? '';
  493. $model->content = $data['content'] ?? '';
  494. $model->crt_id = $user['id'];
  495. $model->save();
  496. DB::commit();
  497. }catch (\Exception $exception){
  498. DB::rollBack();
  499. return [false,$exception->getMessage()];
  500. }
  501. return [true, ''];
  502. }
  503. public function toDoDel($data){
  504. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  505. // $bool = TodoList::where('del_time',0)
  506. // ->whereIn('id',$data['id'])
  507. // ->where('status','>',TodoList::status_zero)
  508. // ->exists();
  509. // if($bool) return [false, '待办状态已变更,删除失败'];
  510. try {
  511. DB::beginTransaction();
  512. $time = time();
  513. TodoList::where('del_time',0)
  514. ->whereIn('id',$data['id'])
  515. ->update(['del_time' => $time]);
  516. DB::commit();
  517. }catch (\Exception $exception){
  518. DB::rollBack();
  519. return [false,$exception->getMessage()];
  520. }
  521. return [true, ''];
  522. }
  523. public function toDoDetail($data, $user){
  524. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  525. $customer = TodoList::where('del_time',0)
  526. ->where('id',$data['id'])
  527. ->first();
  528. if(empty($customer)) return [false,'催单不存在或已被删除'];
  529. $customer = $customer->toArray();
  530. $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
  531. $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
  532. $customer['remind_start'] = $customer['remind_start'] ? date("Y-m-d H:i",$customer['remind_start']): '';
  533. $customer['type_title'] = TodoList::$type_name[$customer['df_type']] ?? "";
  534. $customer['status_title'] = TodoList::$status_name[$customer['status']] ?? "";
  535. return [true, $customer];
  536. }
  537. public function toDoCommon($data,$user, $field = []){
  538. if(empty($field)) $field = TodoList::$field;
  539. $model = TodoList::Clear($user,$data);
  540. $model = $model->where('del_time',0)
  541. ->select($field)
  542. ->orderby('id', 'desc');
  543. if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
  544. if(! empty($data['id'])) $model->whereIn('id', $data['id']);
  545. if(isset($data['status'])) $model->where('status', $data['status']);
  546. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
  547. $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
  548. $model->where('crt_time','>=',$return[0]);
  549. $model->where('crt_time','<=',$return[1]);
  550. }
  551. if(! empty($data['remind_start'][0]) && ! empty($data['remind_start'][1])) {
  552. $return = $this->changeDateToTimeStampAboutRange($data['remind_start']);
  553. $model->where('remind_start','>=',$return[0]);
  554. $model->where('remind_start','<=',$return[1]);
  555. }
  556. return $model;
  557. }
  558. public function toDoList($data,$user){
  559. $model = $this->toDoCommon($data, $user);
  560. $list = $this->limit($model,'',$data);
  561. $list = $this->fillToDoData($list,$user,$data);
  562. return [true, $list];
  563. }
  564. public function toDoRule(&$data, $user, $is_add = true){
  565. if(empty($data['title'])) return [false, '待办标题不能为空'];
  566. if(empty($data['type'])) return [false, '间隔时长不能为空'];
  567. if(! isset(TodoList::$type_value[$data['type']])) return [false, '间隔时长错误'];
  568. $data['remind_interval'] = TodoList::$type_value[$data['type']];
  569. if(empty($data['remind_start'])) return [false, '提醒开始时间不能为空'];
  570. $data['remind_start'] = $this->changeDateToDateMin($data['remind_start']);
  571. $now = strtotime(date("Y-m-d H:i"));
  572. if ($data['remind_start'] - $now < 300) return [false, '提醒开始时间必须至少比当前时间晚5分钟'];
  573. // if(empty($data['man_type'])) return [false, '拜访人员类型不能为空'];
  574. // if(empty($data['organization_name'])) return [false, '组织名称不能为空'];
  575. // if(empty($data['contact'])) return [false, '联系人不能为空'];
  576. // if(empty($data['address'])) return [false, '地点不能为空'];
  577. if(empty($data['content'])) return [false, '内容不能为空'];
  578. if($is_add){
  579. }else{
  580. if(empty($data['id'])) return [false,'ID不能为空'];
  581. $order = TodoList::where('id',$data['id'])
  582. ->where('del_time',0)
  583. ->first();
  584. if(empty($order)) return [false, '待办事项不存在或已被删除'];
  585. $order = $order->toArray();
  586. if($order['status'] > TodoList::status_zero) return [false, '待办事项状态已变更,编辑失败'];
  587. if ($order->remind_start != $data['remind_start'] || $order->remind_interval != $data['remind_interval']) {
  588. $data['last_remind_time'] = 0;
  589. }
  590. }
  591. return [true, $data];
  592. }
  593. public function fillToDoData($data, $user, $search){
  594. if(empty($data['data'])) return $data;
  595. $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'id')));
  596. foreach ($data['data'] as $key => $value){
  597. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  598. $data['data'][$key]['remind_start'] = $value['remind_start'] ? date('Y-m-d H:i',$value['remind_start']) : '';
  599. $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
  600. $data['data'][$key]['type_title'] = TodoList::$type_name[$value['df_type']] ?? "";
  601. $data['data'][$key]['status_title'] = TodoList::$status_name[$value['status']] ?? "";
  602. }
  603. return $data;
  604. }
  605. }