constructionRule($data,false); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = Construction::where('id', $data['id'])->first(); $model->model_type = $data['model_type']; $model->order_number = $data['order_number']; $model->title = $data['title'] ?? ''; $model->customer_id = $data['customer_id'] ?? 0; $model->install_method = $data['install_method'] ?? 0; $model->install_position = $data['install_position'] ?? ''; $model->sales_order_id = $data['sales_order_id'] ?? 0; $model->construction_fee = $data['construction_fee'] ?? 0; $model->construction_time = $data['construction_time'] ?? 0; $model->handover_time = $data['handover_time'] ?? 0; $model->urgency = $data['urgency'] ?? 0; $model->mark = $data['mark'] ?? ''; $model->address1 = $data['address1'] ?? ''; $model->address2 = $data['address2'] ?? ''; $model->introduction = $data['introduction'] ?? ''; $model->save(); $time = time(); ConstructionInfo::where('del_time',0) ->where('construction_id',$data['id']) ->update(['del_time' => $time]); ConstructionProductInfo::where('del_time',0) ->where('construction_id',$data['id']) ->update(['del_time' => $time]); if(! empty($data['construction_contact'])){ $insert = []; foreach ($data['construction_contact'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'contact_type' => $value['id'], 'contact_info' => $value['info'], 'type' => ConstructionInfo::type_one, 'crt_time' => $time, ]; } SalesOrderInfo::insert($insert); } if(! empty($data['employee_one'])){ $insert = []; foreach ($data['employee_one'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'employee_id' => $value, 'type' => ConstructionInfo::type_two, 'crt_time' => $time, ]; } ConstructionInfo::insert($insert); } if(! empty($data['product'])){ $insert = []; foreach ($data['product'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'product_id' => $value['product_id'], 'price' => $value['price'], 'number' => $value['number'], 'mark' => $value['mark'], 'crt_time' => $time, ]; } ConstructionProductInfo::insert($insert); } DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'']; } public function constructionAdd($data,$user){ list($status,$msg) = $this->constructionRule($data); if(!$status) return [$status,$msg]; try { DB::beginTransaction(); $model = new SalesOrder(); $model->model_type = $data['model_type']; $model->order_number = $data['order_number']; $model->title = $data['title'] ?? ''; $model->customer_id = $data['customer_id'] ?? 0; $model->install_method = $data['install_method'] ?? 0; $model->install_position = $data['install_position'] ?? ''; $model->sales_order_id = $data['sales_order_id'] ?? 0; $model->construction_fee = $data['construction_fee'] ?? 0; $model->construction_time = $data['construction_time'] ?? 0; $model->handover_time = $data['handover_time'] ?? 0; $model->urgency = $data['urgency'] ?? 0; $model->mark = $data['mark'] ?? ''; $model->address1 = $data['address1'] ?? ''; $model->address2 = $data['address2'] ?? ''; $model->introduction = $data['introduction'] ?? ''; $model->crt_id = $user['id']; $model->save(); $time = time(); if(! empty($data['construction_contact'])){ $insert = []; foreach ($data['construction_contact'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'contact_type' => $value['id'], 'contact_info' => $value['info'], 'type' => ConstructionInfo::type_one, 'crt_time' => $time, ]; } SalesOrderInfo::insert($insert); } if(! empty($data['employee_one'])){ $insert = []; foreach ($data['employee_one'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'employee_id' => $value, 'type' => ConstructionInfo::type_two, 'crt_time' => $time, ]; } ConstructionInfo::insert($insert); } if(! empty($data['product'])){ $insert = []; foreach ($data['product'] as $value){ $insert[] = [ 'construction_id' => $model->id, 'product_id' => $value['product_id'], 'price' => $value['price'], 'number' => $value['number'], 'mark' => $value['mark'], 'crt_time' => $time, ]; } ConstructionProductInfo::insert($insert); } DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'']; } public function constructionDel($data){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; try { DB::beginTransaction(); Construction::whereIn('id',$data['id'])->update([ 'del_time'=> time() ]); ConstructionInfo::where('del_time',0) ->where('construction_id',$data['id']) ->update(['del_time' => time()]); ConstructionProductInfo::where('del_time',0) ->where('construction_id',$data['id']) ->update(['del_time' => time()]); DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'']; } public function constructionDetail($data){ if($this->isEmpty($data,'id')) return [false,'请选择数据!']; $construction = Construction::where('del_time',0) ->where('id',$data['id']) ->first(); if(empty($construction)) return [false,'施工订单不存在或已被删除']; $construction = $construction->toArray(); $construction['employee_one'] = $construction['construction_contact'] = $construction['product'] = []; $array = [ $construction['install_method'], $construction['urgency'], ]; $basic_map = BasicType::whereIn('id',$array) ->pluck('title','id') ->toArray(); $construction = [$construction]; foreach ($construction as $key => $value){ $construction[$key]['install_method_title'] = $basic_map[$value['install_method']] ?? ''; $construction[$key]['urgency_title'] = $basic_map[$value['urgency']] ?? ''; } $construction = $construction[0]; $construction_info = ConstructionInfo::where('del_time',0) ->where('construction_id',$construction['id']) ->select('id','construction_id','employee_id','type','contact_type','contact_info') ->get()->toArray(); $emp_map = Employee::whereIn('id',array_unique(array_merge_recursive([$construction['crt_id']],array_column($construction_info,'employee_id')))) ->pluck('emp_name','id') ->toArray(); $basic_map2 = BasicType::whereIn('id',array_unique(array_column($construction_info,'contact_type'))) ->pluck('title','id') ->toArray(); foreach ($construction_info as $value){ if($value['type'] == ConstructionInfo::type_one){ $tmp = [ 'id' => $value['contact_type'], 'title' => $basic_map2[$value['contact_type']] ?? '', 'info' => $value['contact_info'] ]; $construction['customer_contact'][] = $tmp; }elseif ($value['type'] == ConstructionInfo::type_two){ $tmp = [ 'id' => $value['employee_id'], 'name' => $emp_map[$value['employee_id']], ]; $construction['employee_one'][] = $tmp; } } $p_info = ConstructionProductInfo::where('del_time',0) ->where('construction_id',$construction['id']) ->select('id','construction_id','product_id','mark','price','number') ->get()->toArray(); foreach ($p_info as $value){ $construction['product'][] = [ 'product_id' => $value['product_id'], 'mark' => $value['mark'], 'price' => $value['price'], 'number' => $value['number'], ]; } $construction['crt_name'] = $emp_map[$construction['crt_id']] ?? ''; $construction['crt_time'] = $construction['crt_time'] ? date("Y-m-d H:i:s",$construction['crt_time']): ''; return [true, $construction]; } public function constructionList($data,$user){ $model = Construction::where('del_time',0) ->select('title','id','model_type','order_number','customer_id','install_method','install_position','sales_order_id','construction_fee','construction_time','handover_time','urgency','crt_id','crt_time','mark','state','address1','address2','introduction') ->orderby('id', 'desc') ->where('model_type',$data['model_type']); if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%'); $list = $this->limit($model,'',$data); $list = $this->fillData($list); return [true, $list]; } public function constructionRule(&$data, $is_add = true){ if(empty($data['model_type'])) return [false,'工单模板类型不能为空']; if(! in_array($data['model_type'],Construction::$model_type)) return [false,'工单模板类型错误']; if(empty($data['order_number'])) return [false,'工单编号不能为空']; if(empty($data['construction_time'])) return [false,'实施日期不能为空']; $data['construction_time'] = $this->changeDateToDateMin($data['construction_time']); if(empty($data['product'])) return [false,'请选择产品']; foreach ($data['product'] as $value){ if(empty($value['number'])) return [false,'产品数量不能为空']; $res = $this->checkNumber($value['number']); if(! $res) return [false,'请输入正确的产品数量']; if(empty($value['price'])) return [false,'产品单价不能为空']; $res = $this->checkNumber($value['price']); if(! $res) return [false,'产品单价请输入不超过两位小数的数值']; } if(empty($data['construction_contact'])) return [false,'联系方式不能为空']; if(! empty($data['construction_fee'])){ $res = $this->checkNumber($data['construction_fee']); if(! $res) return [false,'施工费用请输入不超过两位小数的数值']; } if($data['model_type'] == Construction::Model_type_one){ if(empty($data['install_method'])) return [false,'安装方式不能为空']; if(empty($data['install_position'])) return [false,'安装地点不能为空']; }else{ if(empty($data['address1']) || empty($data['address2'])) return [false,'地址不能为空']; } if($is_add){ $bool = Construction::where('del_time',0)->where('order_number',$data['order_number'])->exists(); if($bool) return [false,'工单编号已存在,请重新获取']; }else{ if(empty($data['id'])) return [false,'ID不能为空']; } return [true, $data]; } public function fillData($data){ if(empty($data['data'])) return $data; $array = array_unique(array_merge_recursive(array_column($data['data'],'install_method'),array_column($data['data'],'urgency'))); $basic_map = BasicType::whereIn('id',$array) ->pluck('title','id') ->toArray(); $emp = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id'))) ->pluck('emp_name','id') ->toArray(); $customer = Customer::whereIn('id',array_unique(array_column($data['data'],'customer_id'))) ->pluck('title','id') ->toArray(); foreach ($data['data'] as $key => $value){ $data['data'][$key]['install_method_title'] = $basic_map[$value['install_method']] ?? ''; $data['data'][$key]['urgency_title'] = $basic_map[$value['urgency']] ?? ''; $data['data'][$key]['customer_title'] = $customer[$value['customer_id']] ?? ''; $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : ''; $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? ''; } return $data; } public function constructionGet($data){ if(empty($data['model_type'])) return [false,'工单模板类型不能为空']; if(! isset(Construction::$prefix[$data['model_type']])) return [false,'工单模板类型错误']; $prefix = Construction::$prefix[$data['model_type']]; $order_number = OrderNoService::createConstructionOrderNumber($prefix); if(! $order_number) return [false,'工单编号生成失败!']; return [false,$order_number]; } }