assign('breadcrumb1','用户管理'); $this->assign('breadcrumb2','微伴客户'); } /** * 列表页 * * */ public function index(Model $Model,Custom $Custom,WeiBanTags $WeiBanTags ){ // 接受参数 $id = request('id',''); $status = request('status'); $name = request('name'); $phone = request('phone'); $remark = request('remark'); $startTime = request('start_time',''); // 查询条件 $map = []; // 编码ID if( $id ) $map[] = ['weiban_external.id','=',$id]; if( $name ) $map[] = ['weiban_external.name','=',$name]; if( $phone ) $map[] = ['weiban_follow.phone_number','=',$phone]; if( $remark ) $map[] = ['weiban_follow.remark','=',$remark]; if( $startTime ) $map[] = ['weiban_external.insert_time','>=',Carbon::createFromFormat('Y-m-d',$startTime)->startOfDay()->getTimestamp()]; if( $startTime ) $map[] = ['weiban_external.insert_time','<=',Carbon::createFromFormat('Y-m-d',$startTime)->endOfDay()->getTimestamp()]; if( !is_null($status) ) $map[] = ['weiban_external.status','=',$status]; // 查询数据 $list = $Model->query()->join('weiban_follow','weiban_follow.weiban_extid','=','weiban_external.id')->where($map)->groupBy('weiban_external.id')->orderByDesc('insert_time')->paginate(config('page_num',10),['weiban_external.*','weiban_follow.staff_id','weiban_follow.staff_name','weiban_follow.remark','weiban_follow.remark_corp_name','weiban_follow.phone_number'])->appends(request()->all()); // 循环处理数据 foreach ($list as $key => $value) { // 如果有手机号,但是没有客户ID if( $value['phone_number'] && !$value['custom_uid'] ) { // 通过手机号查询 $custom = $Custom->getOneByPhone($value['phone_number']); // 如果已经注册 $value['custom_uid'] = $custom ? $Custom->edit($custom['uid'],['username'=>$value['name'],'userpic'=>$value['avatar'],'sex'=>$value['gender'],'weiban_extid'=>$value['id']]) : $Custom->add(['phone'=>$phone,'username'=>$value['name'],'userpic'=>$value['avatar'],'sex'=>$value['gender'],'weiban_extid'=>$value['id']]); // 如果有系统用户 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'] = $WeiBanTags->getListByWeibanExtid($value['id']); // 重组 $list[$key] = $value; } // 分配数据 $this->assign('empty', '~~暂无数据'); $this->assign('list',$list); // 加载模板 return $this->fetch(); } /** * 打标签 * */ public function mark_tags(Model $Model,WeiBanTags $WeiBanTags, Taglist $Taglist){ // 接受参数 $extUserid = request('weiban_extid', ''); $staffId = request('staff_id', ''); // 查询条件 $map = []; // 编码ID if ($extUserid) $map[] = ['weiban_external.id', '=', $extUserid]; if ($staffId) $map[] = ['weiban_follow.staff_id', '=', $staffId]; // 查询数据 $oldData = $Model->query()->join('weiban_follow','weiban_follow.weiban_extid','=','weiban_external.id')->where($map)->first(['weiban_external.*','weiban_follow.staff_id','weiban_follow.staff_name','weiban_follow.remark','weiban_follow.remark_corp_name','weiban_follow.phone_number']); // 修改 if( request()->isMethod('post') ){ // 如果数据不存在 if( !$oldData ) return json_send(['code'=>'error','msg'=>'查无该客户信息']); // 数据处理 $oldData = $oldData->toArray(); // 组合数据 $tags = request('tags',[]); // 获取客户的原来标签 $oldData = $WeiBanTags->getListByWeibanExtid($oldData['id']); // 获取标签数据 $oldTags = array_column($oldData,'name'); // 原标签对比新标签多出来的,移除 $rmTags = array_diff($oldTags,$tags); // 新标签对比原标签多出来的,新增 $addTags = array_diff($tags,$oldTags); // 获取标签数据 $tagList = $Taglist->getListByItem(); // 循环需要移除的标签,获取对应的tagid $markTag['add_tag_id_list'] = []; $markTag['remove_tag_id_list'] = []; // 循环处理 foreach ( $tagList as $tag ) { // 新增的 if( in_array($tag['tag_name'],$addTags) ) $markTag['add_tag_id_list'][] = $tag['tag_id']; // 移除的 if( in_array($tag['tag_name'],$rmTags) ) $markTag['remove_tag_id_list'][] = $tag['tag_id']; } // 提示 if( !$markTag['add_tag_id_list'] && !$markTag['remove_tag_id_list'] ){ // 提示 return json_send(['code'=>'error','msg'=>'标签未改变']); } // 微伴ID $markTag['external_user_id']= $extUserid; $markTag['staff_id'] = $staffId; // 修改数据 foreach ($addTags as $key => $value) { // 循环处理 foreach ( $tagList as $tag ) { // 如果数据匹配 if( $tag['tag_name'] == $value ) { // 重组添加数据 $value = ['weiban_extid'=>$extUserid,'staff_id'=>$staffId,'name'=>$tag['tag_name'],'group'=>$tag['tag_group_name'],'update_time'=>time()]; // 重组添加数据 $addTags[$key] = $value; // 跳出循环 break; } } } // 事务 DB::beginTransaction(); // 尝试执行代码 try { // 添加标签 $result = $markTag['add_tag_id_list'] ? $WeiBanTags->query()->insert($addTags) : true; // 修改结果 if( !$result ) { // 回滚 DB::rollBack(); // 提示 return json_send(['code'=>'error','msg'=>'客户标签添加失败']); } // 删除标签 $result = $markTag['remove_tag_id_list'] ? $WeiBanTags->query()->whereIn('name',$rmTags)->where([['weiban_extid','=',$extUserid],['staff_id','=',$staffId]])->delete() : true; // 修改结果 if( !$result ) { // 回滚 DB::rollBack(); // 提示 return json_send(['code'=>'error','msg'=>'客户标签移除失败']); } // 企微打标签 $result = OpenApi::markTags($extUserid,$markTag['add_tag_id_list'],$markTag['remove_tag_id_list'],$staffId); // 修改结果 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'] = $WeiBanTags->getListByWeibanExtid($oldData['id']); // 获取标签数据 $oldData['tags'] = array_column($oldData['tags'],'name'); // 获取标签数据 $tagList = $Taglist->getList(); // 分配数据 $this->assign('crumbs','客户标签'); $this->assign('oldData', $oldData); $this->assign('tagList', $tagList); // 加载模板 return $this->fetch(); } }