123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- <?php namespace App\Http\Controllers\Admin;
- use App\Facades\Servers\WeiBan\OpenApi;
- use App\Models\Custom;
- use App\Models\WeiBan\External as Model;
- use App\Models\WeiBan\Tags as WeiBanTags;
- use App\Models\WeiBan\Taglist as Taglist;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\DB;
- /**
- * 客户管理
- *
- * @author 刘相欣
- *
- */
- class WeibanExternal extends Auth{
- protected function _initialize(){
- parent::_initialize();
- $this->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', '<tr><td colspan="20">~~暂无数据</td></tr>');
- $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();
- }
- }
|