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();
}
}