123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
- namespace app\wechat\service;
- use app\model\MarketCustomer;
- use app\model\MarketCustomerFollow;
- use support\Db;
- use support\exception\BusinessException;
- use Tinywan\Jwt\JwtToken;
- class FollowService
- {
- /**
- * Notes: 添加跟进记录
- * User: yb
- * Date: 2024/8/13
- * Time: 11:26
- * @param $params
- */
- public static function add($params)
- {
- $consultantId = JwtToken::getCurrentId();
- //查询客户是否存在
- $where = [
- // ['consultant_id', '=', $consultantId],
- ['id', '=', $params['market_customer_id']],
- [function($query){
- $diffNums = CustomService::DIFF_TIME;
- $query->orWhereRaw("check_status IN (-1, 1)")
- ->orWhereRaw("check_status = 2 AND current_status IN (-1,3,4)")
- ->orWhereRaw("((visit_time + {$diffNums}) - UNIX_TIMESTAMP() > 0 AND current_status = 2 AND check_status = 2)");
- }],
- ];
- $customInfo = MarketCustomer::where($where)->first();
- if (empty($customInfo)) {
- return json_fail('客户不存在');
- }
- $currentStatus = $customInfo->current_status;
- if ($currentStatus == -1 || $customInfo->check_status == -1) {
- return json_fail('报备失败客户,无法跟进');
- }
- $insertData = [
- 'market_customer_id' => $params['market_customer_id'],
- 'consultant_id' => $consultantId,
- 'visit_type' => $params['visit_type'],
- 'intention_type' => $params['intention_type'],
- 'follow_time' => strtotime($params['follow_time']),
- 'follow_way' => $params['follow_way'],
- 'follow_content' => $params['follow_content'],
- 'created_at' => time()
- ];
- $result = false;
- Db::beginTransaction();
- try {
- $customInfo->follow_num = $customInfo->follow_num + 1;
- $customInfo->level = $insertData['intention_type'];
- $customInfo->visit_time = $insertData['follow_time'];
- $customInfo->save();
- $result = MarketCustomerFollow::insert($insertData);
- Db::commit();
- }catch (BusinessException|\Exception $e) {
- Db::rollBack();
- return json_fail($e->getMessage());
- }
- if ($result) {
- return json_success('跟进成功');
- } else {
- return json_fail('跟进失败');
- }
- }
- /**
- * Notes: 跟进列表
- * User: yb
- * Date: 2024/8/13
- * Time: 15:56
- * @param $params
- */
- public static function index($params)
- {
- $page = $params['page'] ?? 1;
- $size = $params['size'] ?? 10;
- $ids = UserService::getIds();
- //查询顾问下的客户信息
- $customIds = [];
- if (!empty($ids)) {
- $customIds = MarketCustomer::where(function ($query) use ($ids) {
- $query->orWhereIn('consultant_id', $ids)->orWhereIn('report_consultant_id', $ids);
- })->pluck('id')->toArray();
- }
- $where = [
- [function($query) use ($customIds) {
- $query->whereIn('market_customer_id',$customIds);
- }]
- ];
- $whereCustom = [];
- $whereConsultant = [];
- if (!empty($params['market_customer_id'])) {
- $where[] = ['market_customer_id', '=', $params['market_customer_id']];
- }
- if (!empty($params['consultant_id'])) {
- $where[] = ['consultant_id', '=', $params['consultant_id']];
- }
- if (!empty($params['follow_way'])) {
- $where[] = ['follow_way', '=', $params['follow_way']];
- }
- if (!empty($params['follow_time'])) {
- $date = $params['follow_time'];
- $start = strtotime($date['start'].' 00:00:00');
- $end = strtotime($date['end'].' 23:59:59');
- $where[] = [function($query) use ($start, $end) {
- $query->whereBetween('follow_time', [$start, $end]);
- }];
- }
- if (!empty($params['custom'])) {
- $custom = $params['custom'];
- $whereCustom[] = [function($query) use ($custom) {
- $query->orWhere('name', 'like', "%{$custom}%")->orWhere('mobile', 'like', "%{$custom}%");
- }];
- }
- if (!empty($params['consultant'])) {
- $consultant = $params['consultant'];
- $whereConsultant[] = [function($query) use ($consultant) {
- $query->orWhere('name', 'like', "%{$consultant}%")->orWhere('mobile', 'like', "%{$consultant}%");
- }];
- }
- if (!empty($params['created_at'])) {
- $createdAt = $params['created_at'];
- if (is_array($createdAt)) {
- $createdAtStart = strtotime($createdAt[0]);
- $createdAtEnd = strtotime($createdAt[1]);
- } else {
- //本月开始和结束
- $createdAtStart = strtotime(date('Y-m-01 00:00:00'));
- $createdAtEnd = strtotime(date('Y-m-t 23:59:59'));
- }
- $where[] = [function($query) use ($createdAtStart,$createdAtEnd) {
- $query->whereBetween('created_at', [$createdAtStart, $createdAtEnd]);
- }];
- }
- $paginator = MarketCustomerFollow::with(['custom', 'consultant'])->whereHas('custom', function($query) use ($whereCustom){
- $query->where($whereCustom);
- })->whereHas('consultant', function($query) use ($whereConsultant) {
- $query->where($whereConsultant);
- })->where($where)->orderBy('follow_time', 'desc')->paginate($size, '*', 'page', $page);
- $total = $paginator->total();
- $items = $paginator->items();
- $data = [
- 'total' => $total,
- 'rows' => $items
- ];
- return json_success('success', $data);
- }
- /**
- * Notes: 跟进详情
- * User: yb
- * Date: 2024/8/13
- * Time: 16:50
- * @param $params
- */
- public static function info($id)
- {
- $info = MarketCustomerFollow::with(['custom', 'consultant'])->where('id', $id)->first();
- if (empty($info)) {
- return json_fail('跟进记录不存在');
- }
- if (!empty($info->custom->mobile)) {
- $mobile = $info->custom->mobile;
- $info->custom->mask_mobile = CustomService::handlePhone($mobile);
- }
- return json_success('请求成功', $info);
- }
- }
|