fmtRequest( $request ); $map = $request['map'] ? : []; if (isset($map['search'])) { //普通筛选 $map['name'] = ['like', '%'.$map['search'].'%']; unset($map['search']); } else { // 高级筛选 $map = advancedQuery($map, 'crm', 'receivables_plan', 'index'); } if ($map['receivables_plan.owner_user_id']) { $map['contract.owner_user_id'] = $map['receivables_plan.owner_user_id']; unset($map['receivables_plan.owner_user_id']); } $whereData = []; if ($check_status) { unset($map['receivables_plan.check_status']); if ($check_status == 2) { $map['receivables.check_status'] = $check_status; } else { unset($map['receivables_plan.receivables_id']); $data = []; $data['check_status'] = $check_status; $whereData = function($query) use ($data){ $query->where(['receivables_plan.receivables_id'=> ['eq',0]]) ->whereOr(['receivables.check_status' => $data['check_status']]); }; } } // @ymob 2019-12-11 17:51:54 // 修改回款时,回款计划选项列表应该包含该回款对应的回款计划 不能过滤 // 将types改为status,status:可用的回款计划 fanqi if (empty($dealt)) { # 不是待办事项 if ($request['map']['receivables_id']) { if (!empty($request['map']['contract_id'])) { $map = " (`receivables_plan`.`contract_id` = {$request['map']['contract_id']} AND `receivables_plan`.`receivables_id` = {$request['map']['receivables_id']}) OR (`receivables_plan`.`contract_id` = {$request['map']['contract_id']} AND `receivables_plan`.`receivables_id` = 0) "; } else { $map = " (`receivables_plan`.`receivables_id` = 0 )"; } } elseif ($status == 0) { $map['receivables_plan.receivables_id'] = 0; } } $dataCount = db('crm_receivables_plan') ->alias('receivables_plan') ->join('__CRM_CONTRACT__ contract','receivables_plan.contract_id = contract.contract_id','LEFT') ->join('__CRM_CUSTOMER__ customer','receivables_plan.customer_id = customer.customer_id','LEFT') ->join('__CRM_RECEIVABLES__ receivables','receivables_plan.plan_id = receivables.plan_id','LEFT') ->where($map) ->where($whereData) ->count('receivables_plan.plan_id'); if (!empty($getCount) && $getCount == 1) { $data['dataCount'] = !empty($dataCount) ? $dataCount : 0; return $data; } $list = db('crm_receivables_plan') ->alias('receivables_plan') ->join('__CRM_CONTRACT__ contract','receivables_plan.contract_id = contract.contract_id','LEFT') ->join('__CRM_CUSTOMER__ customer','receivables_plan.customer_id = customer.customer_id','LEFT') ->join('__CRM_RECEIVABLES__ receivables','receivables_plan.plan_id = receivables.plan_id','LEFT') ->limit($request['offset'], $request['length']) ->field('receivables_plan.*,customer.name as customer_name,contract.num as contract_name,receivables.receivables_id,receivables.check_status') ->where($map) ->where($whereData) ->select(); foreach ($list as $k=>$v) { $list[$k]['create_user_id_info'] = $userModel->getUserById($v['create_user_id']); $list[$k]['contract_id_info']['name'] = $v['contract_name'] ? : ''; $list[$k]['contract_id_info']['contract_id'] = $v['contract_id'] ? : ''; $list[$k]['customer_id_info']['name'] = $v['customer_name'] ? : ''; $list[$k]['customer_id_info']['customer_id'] = $v['customer_id'] ? : ''; } $data = []; $data['list'] = $list; $data['dataCount'] = $dataCount ? : 0; return $data ? : []; } /** * 创建回款计划信息 * @author Michael_xu * @param * @return */ public function createData($param) { $userId = $param['user_id']; unset($param['user_id']); if (!$param['contract_id']) { $this->error = '请先选择合同'; return false; } else { $res = ContractModel::where(['contract_id' => $param['contract_id']])->value('check_status'); if (6 == $res) { $this->error = '合同已作废'; return false; } if (!in_array($res,['2'])) { $this->error = '当前合同未审核通过,不能添加回款'; return false; } } if ($param['remind'] > 90) { $this->error = '提前提醒最大时间为 90 天'; return false; } // // 自动验证 // $validate = validate($this->name); // if (!$validate->check($param)) { // $this->error = $validate->getError(); // return false; // } // 数据验证 $validateResult = $this->fieldDataValidate($param, 'crm_receivables_plan', $userId); if (!empty($validateResult)) { $this->error = $validateResult; return false; } if ($param['file_ids']) $param['file'] = arrayToString($param['file_ids']); //附件 //期数规则(1,2,3..) $maxNum = db('crm_receivables_plan')->where(['contract_id' => $param['contract_id']])->max('num'); $param['num'] = $maxNum ? $maxNum+1 : 1; //提醒日期 $param['remind_date'] = $param['remind'] ? date('Y-m-d',strtotime($param['return_date'])-86400*$param['remind']) : $param['return_date']; $fieldModel = new \app\admin\model\Field(); // 处理部门、员工、附件、多选类型字段 $arrFieldAtt = $fieldModel->getArrayField('crm_receivables_plan'); foreach ($arrFieldAtt AS $key => $value) { $param[$value] = !empty($param[$value]) ? arrayToString($param[$value]) : ''; } // 处理日期(date)类型 $dateField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'date'); foreach ($dateField AS $key => $value) { $param[$value] = !empty($param[$value]) ? $param[$value] : null; } // 处理手写签名类型 $handwritingField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'handwriting_sign'); foreach ($handwritingField AS $key => $value) { $param[$value] = !empty($param[$value]['file_id']) ? $param[$value]['file_id'] : ''; } // 处理地址、定位、日期区间、明细表格类型字段 $receivablesPlanData = []; $positionField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'position'); $locationField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'location'); $dateIntervalField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'date_interval'); $detailTableField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'detail_table'); foreach ($param AS $key => $value) { // 处理地址类型字段数据 if (in_array($key, $positionField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $positionNames = array_column($value, 'name'); $param[$key] = implode(',', $positionNames); } else { $param[$key] = ''; } } // 处理定位类型字段数据 if (in_array($key, $locationField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = $value['address']; } else { $param[$key] = ''; } } // 处理日期区间类型字段数据 if (in_array($key, $dateIntervalField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = implode('_', $value); } else { $param[$key] = ''; } } // 处理明细表格类型字段数据 if (in_array($key, $detailTableField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = $key; } else { $param[$key] = ''; } } } if ($this->data($param)->allowField(true)->save()) { $data = []; $data['plan_id'] = $this->plan_id; // 添加回款计划扩展数据 array_walk($receivablesPlanData, function (&$val) use ($data) { $val['plan_id'] = $data['plan_id']; }); db('crm_receivables_plan_data')->insertAll($receivablesPlanData); return $data; } else { $this->error = '添加失败'; return false; } } /** * 编辑回款计划 * @author Michael_xu * @param * @return */ public function updateDataById($param, $plan_id = '') { $userId = $param['user_id']; unset($param['user_id']); $dataInfo = $this->getDataById($plan_id); if (!$dataInfo) { $this->error = '数据不存在或已删除'; return false; } $param['plan_id'] = $plan_id; //过滤不能修改的字段 $unUpdateField = ['num','create_user_id','is_deleted','delete_time','delete_user_id']; foreach ($unUpdateField as $v) { unset($param[$v]); } // // 自动验证 // $validate = validate($this->name); // if (!$validate->check($param)) { // $this->error = $validate->getError(); // return false; // } // 数据验证 $validateResult = $this->fieldDataValidate($param, 'crm_receivables_plan', $userId, $plan_id); if (!empty($validateResult)) { $this->error = $validateResult; return false; } if ($param['file_ids']) $param['file'] = arrayToString($param['file_ids']); //附件 //提醒日期 $param['remind_date'] = $param['remind'] ? date('Y-m-d',strtotime($param['return_date'])-86400*$param['remind']) : $param['return_date']; $fieldModel = new \app\admin\model\Field(); // 处理部门、员工、附件、多选类型字段 $arrFieldAtt = $fieldModel->getArrayField('crm_receivables_plan'); foreach ($arrFieldAtt AS $key => $value) { $param[$value] = !empty($param[$value]) ? arrayToString($param[$value]) : ''; } // 处理日期(date)类型 $dateField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'date'); foreach ($dateField AS $key => $value) { $param[$value] = !empty($param[$value]) ? $param[$value] : null; } // 处理手写签名类型 $handwritingField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'handwriting_sign'); foreach ($handwritingField AS $key => $value) { $param[$value] = !empty($param[$value]['file_id']) ? $param[$value]['file_id'] : ''; } // 处理地址、定位、日期区间、明细表格类型字段 $receivablesPlanData = []; $positionField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'position'); $locationField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'location'); $dateIntervalField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'date_interval'); $detailTableField = $fieldModel->getFieldByFormType('crm_receivables_plan', 'detail_table'); foreach ($param AS $key => $value) { // 处理地址类型字段数据 if (in_array($key, $positionField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $positionNames = array_column($value, 'name'); $param[$key] = implode(',', $positionNames); } else { $param[$key] = ''; } } // 处理定位类型字段数据 if (in_array($key, $locationField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = $value['address']; } else { $param[$key] = ''; } } // 处理日期区间类型字段数据 if (in_array($key, $dateIntervalField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = implode('_', $value); } else { $param[$key] = ''; } } // 处理明细表格类型字段数据 if (in_array($key, $detailTableField)) { if (!empty($value)) { $receivablesPlanData[] = [ 'field' => $key, 'content' => json_encode($value, JSON_NUMERIC_CHECK), 'create_time' => time() ]; $param[$key] = $key; } else { $param[$key] = ''; } } } if ($this->allowField(true)->save($param, ['plan_id' => $plan_id])) { $data = []; $data['plan_id'] = $plan_id; // 添加回款计划扩展数据 db('crm_receivables_plan_data')->where('plan_id', $data['plan_id'])->delete(); array_walk($receivablesPlanData, function (&$val) use ($data) { $val['plan_id'] = $data['plan_id']; }); db('crm_receivables_plan_data')->insertAll($receivablesPlanData); return $data; } else { $this->error = '编辑失败'; return false; } } /** * 回款计划数据 * @param $id 回款计划ID * @return */ public function getDataById($id = '') { $map['plan_id'] = $id; $dataInfo = $this->where($map)->find(); if (!$dataInfo) { $this->error = '暂无此数据'; return false; } $userModel = new \app\admin\model\User(); $dataInfo['create_user_info'] = $userModel->getUserById($dataInfo['create_user_id']); $dataInfo['plan_id'] = $id; return $dataInfo; } //模拟自定义字段返回 public function getField() { $field_arr = [ '0' => [ 'field' => 'customer_id', 'name' => '客户名称', 'form_type' => 'customer', 'setting' => [] ], '1' => [ 'field' => 'contract_id', 'name' => '合同名称', 'form_type' => 'contract', 'setting' => [] ], '2' => [ 'field' => 'money', 'name' => '计划回款金额', 'form_type' => 'floatnumber', 'setting' => [] ], '3' => [ 'field' => 'return_date', 'name' => '计划回款日期', 'form_type' => 'date', 'setting' => [] ], '4' => [ 'field' => 'return_type', 'name' => '计划回款方式', 'form_type' => 'select', 'setting' => '支付宝\n微信\n转账' ], '5' => [ 'field' => 'remind', 'name' => '提前几日提醒', 'form_type' => 'number', 'setting' => [] ], '6' => [ 'field' => 'remark', 'name' => '备注', 'form_type' => 'textarea', 'setting' => [] ], '7' => [ 'field' => 'file', 'name' => '附件', 'form_type' => 'file', 'setting' => [] ] ]; return $field_arr; } }