123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Models\Custom;
- use App\Models\Work\External as Model;
- use App\Models\Work\Tag as WorkTags;
- use App\Facades\Servers\WechatWork\User as WorkUser;
- use App\Facades\Servers\WechatWork\CorpTag as WorkTag;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\DB;
- /**
- * 客户管理
- *
- * @author 刘相欣
- *
- */
- class WorkExternal extends Auth
- {
- protected function _initialize()
- {
- parent::_initialize();
- $this->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', '<tr><td colspan="20">~~暂无数据</td></tr>');
- $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();
- }
- }
|