model = new Customer(); $this->validate = true; $this->validateClass = new IndexValidate(); } public function selectList(Request $request) { $keywords = $request->get('keywords'); if (!$keywords) { return json_fail("查询错误"); } $res = Db::table('customer') ->select('id','name','mobile') ->where(function ($query) use ($keywords) { $query->where('name', 'like', '%' . $keywords . '%') ->orWhere("mobile", 'like', '%' . $keywords . '%'); })->get(); $data = []; foreach ($res as $item) { $data[] = [ 'key' => $item->id, 'value' => $item->name, ]; } return json_success('', $data); } public function select(Request $request): Response { $userId = JwtToken::getCurrentId(); $user = SysUser::find($userId); if (empty($user->join_user_role_id)) { return json_fail("请先关联角色"); } $type = $request->get('type',''); $role = SysRole::find($user->join_user_role_id); $selfAndChildIds = SysRole::where('role_path', 'like', $role->role_path . "%") ->where('role_id', '<>', $role->role_id) ->pluck('role_id'); $userIds = SysUser::whereIn('join_user_role_id', $selfAndChildIds)->pluck('user_id')->toArray(); array_unshift($userIds, $userId); [$where, $format, $limit, $field, $order] = $this->selectInput($request); $order = $request->get('order', 'desc'); $field = $field ?? 'created_at'; $where['creator'] = ['in', $userIds]; if(!empty($type)){ $where['created_at'] = [ strtotime(date('Y-m-d').' 00:00:00'), strtotime(date('Y-m-d').' 23:59:59') ]; } $query = $this->doSelect($where, $field, $order); return $this->doFormat($query, $format, $limit); } protected function doSelect(array $where, string $field = null, string $order = 'desc') { $model = $this->model->with('user'); foreach ($where as $column => $value) { if (is_array($value)) { if ($value[0] === 'like' || $value[0] === 'not like') { $model = $model->where($column, $value[0], "%$value[1]%"); } elseif (in_array($value[0], ['>', '=', '<', '<>'])) { $model = $model->where($column, $value[0], $value[1]); } elseif ($value[0] == 'in' && !empty($value[1])) { $valArr = $value[1]; if (is_string($value[1])) { $valArr = explode(",", trim($value[1])); } $model = $model->whereIn($column, $valArr); } elseif ($value[0] == 'not in' && !empty($value[1])) { $valArr = $value[1]; if (is_string($value[1])) { $valArr = explode(",", trim($value[1])); } $model = $model->whereNotIn($column, $valArr); } elseif ($value[0] == 'null') { $model = $model->whereNull($column); } elseif ($value[0] == 'not null') { $model = $model->whereNotNull($column); } elseif ($value[0] !== '' || $value[1] !== '') { $model = $model->whereBetween($column, $value); } } else { $model = $model->where($column, $value); } } if ($field) { $model = $model->orderBy($field, $order); } return $model; } protected function afterQuery($items) { foreach ($items as &$item) { $item->city = explode(',', $item->city); } return $items; } protected function insertInput(Request $request): array { $data = $this->inputFilter($request->post()); $data['creator'] = JwtToken::getCurrentId(); if (!empty($data['birth'])) { $data['birth'] = date('Y-m-d', strtotime($data['birth'])); } return $data; } protected function updateInput(Request $request): array { $primary_key = $this->model->getKeyName(); $id = $request->post($primary_key); $data = $this->inputFilter($request->post()); if (!empty($data['birth'])) { $data['birth'] = date('Y-m-d', strtotime($data['birth'])); } $model = $this->model->find($id); if (!$model) { throw new BusinessException('记录不存在', 2); } unset($data[$primary_key]); return [$id, $data]; } public function conversion(Request $request) { $id = $request->post('id'); $customer = Customer::where('id', $id)->first(); if (!$customer) { return json_fail('客户不存在'); } Db::beginTransaction(); try { $memberId = "ME" . date("ymdH") . random_string(6, 'up'); $member = [ 'member_id' => $memberId, 'member_is_owner' => 'N', 'member_classify' => 'MEMBER', 'member_status' => 'ACTIVED', 'member_mobile' => $customer->mobile ?? '', // 'member_from' => 'CUSTOMER', 'member_addtimes' => time() ]; $member['member_extend_json'] = json_encode(['come_from'=>'CUSTOMER']); // 归属门店 $user = SysUser::where('user_id',$customer->creator)->first(); $belong = [ 'user_id'=>$customer->creator, 'premises' => $user->join_user_dept_id ?? '', ]; $member['member_extend_json'] = json_encode(['belong'=>$belong]); Member::insert($member); // cert $cert = [ 'join_cert_member_id' => $memberId, 'member_cert_name' => $customer->name, 'member_cert_nbr' => $customer->card_id ?? '', 'member_cert_birth' => $customer->birth ?? '', 'member_cert_gender' => $customer->gender ?? '', 'member_cert_province' => $customer->city ?? '', 'member_cert_addr' => $customer->address ?? '' ]; MemberCert::insert($cert); // info $info = [ 'join_info_member_id' => $memberId, 'member_info_nickname' => $customer->name ]; MemberInfo::insert($info); $customer->status = '正式用户'; $customer->save(); // 账户表 $accountData = [ 'join_account_member_id' => $memberId, 'member_account_classify' => 'POINTS', 'member_account_status' => 'ACTIVED', 'member_account_category' => 'NORMAL', 'member_account_nbr' => $memberId . '-POINTS', 'member_account_name' => '积分账户', 'member_account_addtimes' => time() ]; // 积分账户 MemberAccount::insert($accountData); $accountData['member_account_classify'] = 'CASH'; $accountData['member_account_nbr'] = $memberId . '-CASH'; $accountData['member_account_name'] = '余额账户'; // 现金/余额账户 MemberAccount::insert($accountData); Db::commit(); return json_success("转正式用户成功"); } catch (\Exception $e) { dump($e->getMessage()); Db::rollBack(); return json_fail('转正式用户失败'); } } }