orderRule($data, $user, false); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = Order::where('id',$data['id'])->first(); $model->order_number = $data['order_number'] ?? ''; $model->customer_id = $data['customer_id'] ?? 0; $model->supply_id = $data['supply_id'] ?? 0; $model->order_time = $data['order_time'] ?? 0; $model->quantity = $data['quantity'] ?? 0; $model->save(); $time = time(); OrderDetails::where('del_time',0) ->where('order_id', $model->id) ->update(['del_time' => $time]); $this->saveDetail($model->id, $time, $data); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } public function orderAdd($data,$user){ list($status,$msg) = $this->orderRule($data, $user); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = new Order(); $model->order_number = $data['order_number'] ?? ''; $model->customer_id = $data['customer_id'] ?? 0; $model->supply_id = $data['supply_id'] ?? 0; $model->order_time = $data['order_time'] ?? 0; $model->quantity = $data['quantity'] ?? 0; $model->crt_id = $user['id']; $model->save(); $this->saveDetail($model->id, time(), $data); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } private function saveDetail($id, $time, $data){ if(! empty($data['details'])){ $unit = []; foreach ($data['details'] as $value){ $unit[] = [ 'order_id' => $id, 'code' => $value['code'], 'title' => $value['title'], 'size' => $value['size'] ?? "", 'unit' => $value['unit'] ?? "", 'quantity' => $value['quantity'], 'crt_time' => $time, ]; } if(! empty($unit)) OrderDetails::insert($unit); } } private function getDetail($id){ $data = OrderDetails::where('del_time',0) ->where('order_id', $id) ->get()->toArray(); $unit = []; foreach ($data as $value){ $unit[] = [ 'code' => $value['code'], 'title' => $value['title'], 'size' => $value['size'], 'unit' => $value['unit'], 'quantity' => $value['quantity'], ]; } $detail = [ 'details' => $unit, ]; foreach ($detail as $key => $value) { if (empty($value)) { $detail[$key] = (object)[]; // 转成 stdClass 对象 } } return $detail; } public function orderDel($data){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; try { DB::beginTransaction(); $time = time(); Order::where('del_time',0) ->whereIn('id',$data['id']) ->update(['del_time' => $time]); OrderDetails::where('del_time',0) ->where('order_id', $data['id']) ->update(['del_time' => $time]); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } public function orderDetail($data, $user){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; $customer = Order::where('del_time',0) ->where('id',$data['id']) ->first(); if(empty($customer)) return [false,'订单不存在或已被删除']; $customer = $customer->toArray(); $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name'); $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): ''; $details = $this->getDetail($data['id']); $customer = array_merge($customer, $details); return [true, $customer]; } public function orderCommon($data,$user, $field = []){ if(empty($field)) $field = Order::$field; $model = Order::Clear($user,$data); $model = $model->where('del_time',0) ->select($field) ->orderby('id', 'desc'); if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%'); if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%'); if(! empty($data['id'])) $model->whereIn('id', $data['id']); if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) { $return = $this->changeDateToTimeStampAboutRange($data['crt_time']); $model->where('crt_time','>=',$return[0]); $model->where('crt_time','<=',$return[1]); } if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) { $return = $this->changeDateToTimeStampAboutRange($data['order_time']); $model->where('order_time','>=',$return[0]); $model->where('order_time','<=',$return[1]); } return $model; } public function orderList($data,$user){ $model = $this->orderCommon($data, $user); $list = $this->limit($model,'',$data); $list = $this->fillData($list,$user,$data); $list['count'] = $this->countTotal($list['data'], $user['header_default']); return [true, $list]; } public function orderRule(&$data, $user, $is_add = true){ if(empty($data['order_number'])) return [false, '订单号不能为空']; if(empty($data['order_time'])) return [false, '订单日期不能为空']; $data['order_time'] = $this->changeDateToDate($data['order_time']); if(empty($data['details'])) return [false, '物料不能为空']; $total = 0; foreach ($data['details'] as $value){ if(empty($value['code'])) return [false, '物料编码不能为空']; if(empty($value['title'])) return [false, '物料名称不能为空']; $res = $this->checkNumber($data['quantity'],2,'positive'); if(! $res['valid']) return [false,'物料数量:' . $res['error']]; $total = bcadd($total, $value['quantity'],2); } $data['quantity'] = $total; list($status, $msg) = $this->checkArrayRepeat($data['details'],'code','物料编码'); if(! $status) return [false, $msg]; if($is_add){ $bool = Order::where('order_number',$data['order_number']) ->where('crt_id', $user['id']) ->where('del_time',0) ->exists(); }else{ if(empty($data['id'])) return [false,'ID不能为空']; $bool = Order::where('order_number',$data['order_number']) ->where('crt_id', $user['id']) ->where('id','<>',$data['id']) ->where('del_time',0) ->exists(); } if($bool) return [false, '订单号已存在']; return [true, $data]; } public function fillData($data, $user, $search){ if(empty($data['data'])) return $data; $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'id'))); $emp_2 = (new CustomerSupplyService())->getEmployeeMap(array_unique(array_merge_recursive(array_column($data['data'],'customer_id'), array_column($data['data'],'supply_id')))); foreach ($data['data'] as $key => $value){ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : ''; $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : ''; $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? ''; $data['data'][$key]['customer_title'] = $emp_2[$value['customer_id']] ?? ''; $data['data'][$key]['supply_title'] = $emp_2[$value['supply_id']] ?? ''; } return $data; } //催单管理--------------------------------------------- public function reminderEdit($data,$user){ list($status,$msg) = $this->reminderRule($data, $user, false); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = Reminder::where('id',$data['id'])->first(); $model->order_id = $data['order_id'] ?? 0; $model->order_no = $data['order_no'] ?? ''; $model->product_code = $data['product_code'] ?? ''; $model->product_size = $data['product_size'] ?? ''; $model->product_unit = $data['product_unit'] ?? ''; $model->product_title = $data['product_title'] ?? ''; $model->quantity = $data['quantity'] ?? 0; $model->order_time = $data['order_time'] ?? 0; $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0; $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0; $model->tl_quantity = $data['tl_quantity'] ?? 0; $model->df_type = $data['df_type'] ?? 0; $model->save(); $time = time(); ReminderDetails::where('del_time',0) ->where('reminder_id', $model->id) ->update(['del_time' => $time]); $this->saveDetail1($model->id, $time, $data); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } public function reminderAdd($data,$user){ list($status,$msg) = $this->reminderRule($data, $user); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = new Reminder(); $model->order_number = $this->createOrderNumber(); $model->order_id = $data['order_id'] ?? 0; $model->order_no = $data['order_no'] ?? ''; $model->product_code = $data['product_code'] ?? ''; $model->product_size = $data['product_size'] ?? ''; $model->product_unit = $data['product_unit'] ?? ''; $model->product_title = $data['product_title'] ?? ''; $model->quantity = $data['quantity'] ?? 0; $model->order_time = $data['order_time'] ?? 0; $model->lt_arrived_time = $data['lt_arrived_time'] ?? 0; $model->tl_arrived_time = $data['tl_arrived_time'] ?? 0; $model->tl_quantity = $data['tl_quantity'] ?? 0; $model->df_type = $data['df_type'] ?? 0; $model->crt_id = $user['id']; $model->save(); $this->saveDetail1($model->id, time(), $data); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } private function saveDetail1($id, $time, $data){ if(! empty($data['details'])){ $unit = []; foreach ($data['details'] as $value){ $unit[] = [ 'reminder_id' => $id, 'customer_supply_id' => $value['customer_supply_id'], 'is_main' => $value['is_main'], 'quantity' => $value['quantity'], 'crt_time' => $time, ]; } if(! empty($unit)) ReminderDetails::insert($unit); } } private function getDetail1($id){ $data = ReminderDetails::from('reminder_details as a') ->leftJoin('customer_supply as b','b.id','a.customer_supply_id') ->where('a.del_time',0) ->where('a.reminder_id', $id) ->select('a.customer_supply_id','a.is_main','b.title') ->get()->toArray(); $unit = []; foreach ($data as $value){ $unit[] = [ 'customer_supply_id' => $value['customer_supply_id'], 'is_main' => $value['is_main'], ]; } $detail = [ 'details' => $unit, ]; foreach ($detail as $key => $value) { if (empty($value)) { $detail[$key] = (object)[]; // 转成 stdClass 对象 } } return $detail; } public function reminderDel($data){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; $bool = Reminder::where('del_time',0) ->whereIn('id',$data['id']) ->where('status','>',Reminder::status_zero) ->exists(); if($bool) return [false, '催单状态已变更,删除失败']; try { DB::beginTransaction(); $time = time(); Reminder::where('del_time',0) ->whereIn('id',$data['id']) ->update(['del_time' => $time]); ReminderDetails::where('del_time',0) ->where('reminder_id', $data['id']) ->update(['del_time' => $time]); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true, '']; } public function reminderDetail($data, $user){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; $customer = Reminder::where('del_time',0) ->where('id',$data['id']) ->first(); if(empty($customer)) return [false,'催单不存在或已被删除']; $customer = $customer->toArray(); $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name'); $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): ''; $customer['order_time'] = $customer['order_time'] ? date("Y-m-d",$customer['order_time']): ''; $customer['lt_arrived_time'] = $customer['lt_arrived_time'] ? date("Y-m-d",$customer['lt_arrived_time']): ''; $customer['tl_arrived_time'] = $customer['tl_arrived_time'] ? date("Y-m-d",$customer['tl_arrived_time']): ''; $customer['df_type_title'] = Reminder::$df_type_name[$customer['df_type']] ?? ""; $customer['rule_title'] = Reminder::$rule_name[$customer['rule']] ?? ""; $customer['status_title'] = Reminder::$status_name[$customer['status']] ?? ""; $details = $this->getDetail1($data['id']); $customer = array_merge($customer, $details); return [true, $customer]; } public function reminderCommon($data,$user, $field = []){ if(empty($field)) $field = Order::$field; $model = Reminder::Clear($user,$data); $model = $model->where('del_time',0) ->select($field) ->orderby('id', 'desc'); if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%'); if(! empty($data['order_no'])) $model->where('order_no', 'LIKE', '%'.$data['order_no'].'%'); if(! empty($data['product_title'])) $model->where('product_title', 'LIKE', '%'.$data['product_title'].'%'); if(! empty($data['product_code'])) $model->where('product_code', 'LIKE', '%'.$data['product_code'].'%'); if(! empty($data['id'])) $model->whereIn('id', $data['id']); if(isset($data['status'])) $model->where('status', $data['status']); if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) { $return = $this->changeDateToTimeStampAboutRange($data['crt_time']); $model->where('crt_time','>=',$return[0]); $model->where('crt_time','<=',$return[1]); } if(! empty($data['order_time'][0]) && ! empty($data['order_time'][1])) { $return = $this->changeDateToTimeStampAboutRange($data['order_time']); $model->where('order_time','>=',$return[0]); $model->where('order_time','<=',$return[1]); } return $model; } public function reminderList($data,$user){ $model = $this->reminderCommon($data, $user); $list = $this->limit($model,'',$data); $list = $this->fillReminderData($list,$user,$data); $list['count'] = $this->countTotal($list['data'], $user['header_default']); return [true, $list]; } public function reminderRule(&$data, $user, $is_add = true){ if(empty($data['order_id'])) return [false, '订单ID不能为空']; if(empty($data['order_no'])) return [false, '订单号不能为空']; if(empty($data['order_time'])) return [false, '订单日期不能为空']; $data['order_time'] = strtotime($data['order_time']); if(empty($data['product_code'])) return [false, '物料编码不能为空']; if(empty($data['product_title'])) return [false, '物料名称不能为空']; if(empty($data['quantity'])) return [false, '物料数量不能为空']; if(empty($data['lt_arrived_time'])) return [false, 'LT要求到货日期不能为空']; $data['lt_arrived_time'] = $this->changeDateToDate($data['lt_arrived_time']); if(empty($data['tl_arrived_time'])) return [false, '提拉到货日期不能为空']; $data['tl_arrived_time'] = $this->changeDateToDate($data['tl_arrived_time']); $res = $this->checkNumber($data['tl_quantity'],2,'positive'); if(! $res['valid']) return [false,'提拉到货数量:' . $res['error']]; if(empty($data['df_type'])) return [false, '要求答复时间不能为空']; if(! isset(Reminder::$df_type_name[$data['df_type']])) return [false, '要求答复时间错误']; if(empty($data['rule'])) return [false, '主要人员关系规则不能为空']; if(! isset(Reminder::$rule_name[$data['rule']])) return [false, '主要人员关系规则不存在']; if(empty($data['details'])) return [false, '催单提醒人员不能为空']; $is_bool = false; $main_ids = []; $sub_ids = []; foreach ($data['details'] as $value) { if (empty($value['customer_supply_id'])) return [false, '人员id不能为空']; if (empty($value['is_main'])) return [false, 'is_main不能为空']; $customer_id = $value['customer_supply_id']; $is_main_val = $value['is_main']; if ($is_main_val == ReminderDetails::is_main_one) { // 检查主要人员重复 if (in_array($customer_id, $main_ids)) { return [false, "主要成员不能重复"]; } $main_ids[] = $customer_id; $is_bool = true; } elseif ($is_main_val == ReminderDetails::is_main_two) { // 检查次要人员重复 if (in_array($customer_id, $sub_ids)) { return [false, "次要成员不能重复"]; } $sub_ids[] = $customer_id; } } // 检查主要成员至少一个 if (!$is_bool) return [false, '主要成员必须选择']; // 检查主要与次要是否有重复 $intersect = array_intersect($main_ids, $sub_ids); if (!empty($intersect)) return [false, "主要成员与次要成员不能重复"]; if($is_add){ }else{ if(empty($data['id'])) return [false,'ID不能为空']; $order = Order::where('id',$data['id']) ->where('del_time',0) ->fist(); if(empty($order)) return [false, '催单不存在或已被删除']; $order = $order->toArray(); if($order['status'] > Reminder::status_zero) return [false, '催单状态已变更,编辑失败']; } return [true, $data]; } public function fillReminderData($data, $user, $search){ if(empty($data['data'])) return $data; $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'id'))); foreach ($data['data'] as $key => $value){ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : ''; $data['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : ''; $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? ''; $data['data'][$key]['lt_arrived_time'] = $value['lt_arrived_time'] ? date("Y-m-d",$value['lt_arrived_time']): ''; $data['data'][$key]['tl_arrived_time'] = $value['tl_arrived_time'] ? date("Y-m-d",$value['tl_arrived_time']): ''; $data['data'][$key]['df_type_title'] = Reminder::$df_type_name[$value['df_type']] ?? ""; $data['data'][$key]['rule_title'] = Reminder::$rule_name[$value['rule']] ?? ""; $data['data'][$key]['status_title'] = Reminder::$status_name[$value['status']] ?? ""; } return $data; } public function createOrderNumber(){ return date('YmdHis',time()) . rand(1000,9999); } }