assign('breadcrumb1', '用户管理'); $this->assign('breadcrumb2', '企微客户'); } /** * 列表页 * * */ public function index(Model $Model, Custom $Custom, WorkTags $WorkTags){ // 接受参数 $id = request('id', ''); $status = request('status'); $name = request('name'); $phone = request('phone'); $remark = request('remark'); $startTime = request('start_time', ''); // 查询条件 $map = []; // 编码ID if ($id) $map[] = ['work_external.external_userid', '=', $id]; if ($name) $map[] = ['work_external.name', '=', $name]; if ($phone) $map[] = ['work_user.remark_mobiles', 'LIKE', '%' . $phone . '%']; if ($remark) $map[] = ['work_user.remark', '=', $remark]; if ($startTime) $map[] = ['work_external.insert_time', '>=', Carbon::createFromFormat('Y-m-d', $startTime)->startOfDay()->getTimestamp()]; if ($startTime) $map[] = ['work_external.insert_time', '<=', Carbon::createFromFormat('Y-m-d', $startTime)->endOfDay()->getTimestamp()]; if (!is_null($status)) $map[] = ['work_external.status', '=', $status]; // 查询数据 $list = $Model->query()->join('work_user', 'work_user.external_userid', '=', 'work_external.external_userid')->where($map)->groupBy('work_external.external_userid')->orderByDesc('id')->paginate(config('page_num', 10), ['work_external.*', 'work_user.work_userid', 'work_user.remark', 'work_user.remark_company', 'work_user.remark_mobiles'])->appends(request()->all()); // 循环处理数据 foreach ($list as $key => $value) { // 如果有手机号,但是没有客户ID if ($value['remark_mobiles'] && !$value['custom_uid']) { // 获取手机号 $phone = explode(',', $value['remark_mobiles']); // 通过手机号查询 $custom = $Custom->getOneByPhone($phone); // 如果已经注册 $value['custom_uid'] = $custom ? $Custom->edit($custom['uid'], ['username' => $value['name'], 'userpic' => $value['avatar'], 'sex' => $value['gender'], 'external_userid' => $value['external_userid']]) : $Custom->add(['phone' => $phone, 'username' => $value['name'], 'userpic' => $value['avatar'], 'sex' => $value['gender'], 'external_userid' => $value['external_userid']]); // 如果有系统用户 if ($value['custom_uid']) $Model->edit($value['id'], ['custom_uid' => $value['custom_uid']]); } // id转编号 $value['custom_code'] = $value['custom_uid'] ? $Custom->idToCode($value['custom_uid']) : ''; // 获取标签 $value['tags_list'] = $WorkTags->getListByExtUserId($value['external_userid']); // 重组 $list[$key] = $value; } // 获取部门数据 $partUserList = WorkUser::getListDepart(); // 获取标签数据 $corpTagList = WorkTag::getList(); // 分配数据 $this->assign('empty', '~~暂无数据'); $this->assign('list', $list); $this->assign('partUserList', $partUserList); $this->assign('corpTagList', $corpTagList); // 加载模板 return $this->fetch(); } /** * 打标签 * */ public function mark_tags(Model $Model, WorkTags $WorkTags){ // 接受参数 $extUserid = request('external_userid', ''); $userid = request('work_userid', ''); // 查询条件 $map = []; // 编码ID if ($extUserid) $map[] = ['work_external.external_userid', '=', $extUserid]; if ($userid) $map[] = ['work_user.work_userid', '=', $userid]; // 查询数据 $oldData = $Model->query()->join('work_user', 'work_user.external_userid', '=', 'work_external.external_userid')->where($map)->first(['work_external.*', 'work_user.work_userid', 'work_user.remark', 'work_user.remark_company', 'work_user.remark_mobiles']); // 修改 if( request()->isMethod('post') ){ // 如果数据不存在 if( !$oldData ) return json_send(['code'=>'error','msg'=>'查无该客户信息']); // 数据处理 $oldData = $oldData->toArray(); // 组合数据 $tags = request('tags',[]); // 获取客户的原来标签 $oldData = $WorkTags->getListByExtUserId($oldData['external_userid']); // 原标签对比新标签多出来的,移除 $rmTags = array_diff($oldData,$tags); // 新标签对比原标签多出来的,新增 $addTags = array_diff($tags,$oldData); // 获取标签数据 $corpTagList = WorkTag::getList(); // 事务 DB::beginTransaction(); // 尝试执行代码 try { // 删除结果 $tagList = []; // 循环标签 foreach ($corpTagList as $group){ foreach ($group['tag'] as $tag){ if( in_array($tag['id'],$tags)) $tagList[] = ['group_name'=>$group['group_name'],'tag_name'=>$tag['name'],'tag_id'=>$tag['id'],'type'=>1]; } } // 修改标签 $result = $WorkTags->upsertTags($userid,$extUserid,$tagList); // 修改结果 if( !$result ) { // 回滚 DB::rollBack(); // 提示 return json_send(['code'=>'error','msg'=>'客户标签更新失败']); } // 企微打标签 $result = WorkTag::markTags($userid,$extUserid,$addTags,$rmTags); // 修改结果 if( !$result ) { // 回滚 DB::rollBack(); // 提示 return json_send(['code'=>'error','msg'=>'客户标签同步失败']); } // 提交 DB::commit(); // 告知结果 return json_send(['code'=>'success','msg'=>'客户标签成功','action'=>'add']); } catch (\Throwable $th) { // 回滚 DB::rollBack(); // 修改结果 return json_send(['code'=>'error','msg'=>'客户标签标记失败','data'=>['error'=>$th->getMessage()]]); } } // 如果数据不存在 if( !$oldData ) return $this->error('查无该客户信息'); // 数据处理 $oldData = $oldData->toArray(); // 获取标签 $oldData['tags'] = $WorkTags->getPulckByExtUserId($oldData['external_userid'],$oldData['work_userid']); // 获取部门数据 $partUserList = WorkUser::getListDepart(); // 获取标签数据 $corpTagList = WorkTag::getList(); // 分配数据 $this->assign('crumbs','客户标签'); $this->assign('oldData', $oldData); $this->assign('partUserList', $partUserList); $this->assign('corpTagList', $corpTagList); // 加载模板 return $this->fetch(); } }