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