diff --git a/app/manager/controller/SetUser.php b/app/manager/controller/SetUser.php new file mode 100644 index 0000000..f69cc00 --- /dev/null +++ b/app/manager/controller/SetUser.php @@ -0,0 +1,231 @@ +getAllList(); + \result($list, '', 30000); + } + /** + * @description: 给客户经理自动分配用户 + * @param {*} + * @return {*} + */ + public function autoSet() + { + $manager_list = json_decode(file_get_contents("php://input"), true)['manager_list']; + if (empty($manager_list)) { + die; + } + $manager_model = new Manager; + $cost_user_id = []; + $manager_list = $manager_model->getAllList(['id' => ['in', $manager_list]]); + $product_order_model = new ProductOrder; + $user_model = new User; + $userid = []; + //获取到上个月今天为止所有消费客户 + $user_cost = $product_order_model->getCost(); + $count = count($user_cost); + $manager_count = count($manager_list); + for ($i = 0; $i < ($count / 2); $i++) { + //根据管理员人数来进行等量分配,第一个用户和最后一个用户相互搭配、依次分给客户经理 + $jingli_key = $manager_list[$i % $manager_count]['id']; + $userid[$jingli_key][] = $user_cost[$i]['UserId']; + $userid[$jingli_key][] = $user_cost[($count - $i - 1)]['UserId']; + $cost_user_id[] = $user_cost[$i]['UserId']; + $cost_user_id[] = $user_cost[($count - $i - 1)]['UserId']; + } + //获取所有为处理的用户 然后再进行随机分配 + $user_not_cost = $user_model->getList(['Id' => ['NOT IN', $cost_user_id]], 'Id'); + $user_not_cost_id = []; + for ($i = 0; $i < count($user_not_cost); $i++) { + //根据管理员人数来进行等量分配,依次分给客户经理 + $jingli_key = $manager_list[$i % $manager_count]['id']; + $user_not_cost_id[$jingli_key][] = $user_not_cost[$i]['Id']; + } + //处理消费过的用户 + foreach ($manager_list as $manager) { + $user_model->updateOne(['id' => ['in', $userid[$manager['id']]]], ['ManagerId' => $manager['id'], 'ManagerName' => $manager['RealName']]); + $user_model->updateOne(['id' => ['in', $user_not_cost_id[$manager['id']]]], ['ManagerId' => $manager['id'], 'ManagerName' => $manager['RealName']]); + } + + \result(); + } + + /** + * @description: 获取客户经理拥有的用户 + * @param {*} + * @return {*} + */ + public function getManagerUser() + { + if (!isset($_GET['manager_id'])) { + die; + } + + $page = 0; + $search_info = ''; + $last_month = date("Y-m-d H:i:s", strtotime("-1 month")); + $new_month = date("Y-m-d H:i:s", time()); + $manager_id = $_GET['manager_id']; + $where = []; + + if (isset($_GET['page'])) { + $page = ($_GET['page'] - 1) * 50; + } + if (!empty($_GET['search_info'])) { + $search_info = $_GET['search_info']; + $where['LoginCode'] = $search_info; + } + + $where['ManagerId'] = $manager_id; + + $user_model = new User; + $product_order_model = new ProductOrder; + + $manager_user = $user_model->getListPage($where, 'Id,LoginCode,CreateTime,ManagerName', 'id desc', "$page,50"); + $user_id_list = []; + $manager_user_list = []; + foreach ($manager_user as $key => $val) { + $user_id_list[] = $val['Id']; + $val['cost'] = 0; + $manager_user_list[$val['Id']] = $val; + } + + $user_cost = $product_order_model->getMonthCost($user_id_list); + foreach ($user_cost as $k => $v) { + $manager_user_list[$v['UserId']]['cost'] = $v['money']; + } + + $data = [ + 'list' => array_merge($manager_user_list), + 'count' => $user_model->getCount(['ManagerId' => $manager_id])['count'], + ]; + \result($data); + } + + /** + * @description: 获取所有管理员有多少用户 + * @param {*} + * @return {*} + */ + public function getAllManagerUserCount() + { + $screen = []; + $user_model = new User; + $screen_result = []; + if (isset($_GET['screen'])) { + $screen = $_GET['screen']; + $product_order_model = new ProductOrder; + //获取所有符合条件的数据 + $order_list = $product_order_model->getScreenMonthCost($screen); + $user_id_list = []; + foreach($order_list as $k=>$v){ + $user_id_list[] = $v['UserId']; + } + $where = [ + 'follow_status' => $screen['follow_status'], + 'id' => ['in',$user_id_list] + ]; + //获取结果 + $screen_result = $user_model->getScreenUserCount($where); + } + + $data = []; + $list = $user_model->getAllManagerUserCount(); + + $result_list = []; + $manager_jingli_list = []; + //将managerid作为key 方便后边判断赋值 + foreach($list as $info){ + $info['screen_num'] = 0; + $result_list[$info['ManagerId']] = $info; + $temp['value'] = $info['ManagerId']; + $temp['label'] = $info['ManagerName']; + $manager_jingli_list[] = $temp; + } + if(!empty($screen_result)){ + //为筛选结果赋值 + foreach($screen_result as $info){ + if(isset($result_list[$info['ManagerId']])){ + $result_list[$info['ManagerId']]['screen_num'] = $info['count_num']; + } + } + } + + $follow_status = UserEnum::getFormatList(UserEnum::$FollowStatus); + $data = [ + 'list' => array_merge($result_list), + 'follow_status' => $follow_status, + 'manager_jingli_list' => $manager_jingli_list + ]; + \result($data); + } + + /** + * @description: 执行外分 将指定客户经理的部分用户分配出去 + * @param {*} + * @return {*} + */ + public function waifen() + { + $screen = []; + if (isset($_GET['screen'])) { + $user_model = new User; + $manager_model = new Manager; + $screen = $_GET['screen']; + $manager_id = $screen['jingli_id']; + $manager_main = $_GET['manager_id']; + $manager_name = $manager_model->getOne(['id'=>$manager_id])['RealName']; + $num = $_GET['num']; + $product_order_model = new ProductOrder; + //获取所有符合条件的数据 + $order_list = $product_order_model->getScreenMonthCost($screen); + $user_id_list = []; + foreach($order_list as $k=>$v){ + $user_id_list[] = $v['UserId']; + } + $where = [ + 'follow_status' => $screen['follow_status'], + 'Id' => ['in',$user_id_list], + 'ManagerId' => $manager_main + ]; + $data = [ + 'ManagerId' => $manager_id, + 'ManagerName' => $manager_name + ]; + // dump($where); + // dump($data); + //获取结果 + $result = $user_model->setManager($where,$data,$num); + if($result){ + \result(); + } else { + die; + } + } + } +} diff --git a/app/manager/model/Manager.php b/app/manager/model/Manager.php new file mode 100644 index 0000000..14b5c5f --- /dev/null +++ b/app/manager/model/Manager.php @@ -0,0 +1,22 @@ +field('id,RealName')->where($where)->where(['IsRoot'=>0,'RoleId'=>100])->fetchAll(); + } +} diff --git a/app/manager/model/ProductOrder.php b/app/manager/model/ProductOrder.php new file mode 100644 index 0000000..8156eba --- /dev/null +++ b/app/manager/model/ProductOrder.php @@ -0,0 +1,64 @@ +field('UserId,sum(PaymentAmount) as money') + ->where(['OrderState'=>['in',ProductOrderEnum::$PayComplete]]) + ->group(['UserId']) + ->order('money') + ->fetchAll(); + } + + /** + * @description: 获取所有支付成功用户近一个月的支付总金额 + * @param {*} + * @return {*} + */ + public function getMonthCost($user_id){ + $last_month = date("Y-m-d H:i:s", strtotime("-1 month")); + $new_month = date("Y-m-d H:i:s", time()); + return $this->field('UserId,sum(PaymentAmount) as money') + ->where(['OrderState'=>['in',ProductOrderEnum::$PayComplete],'UpdateTime' => ['<', $new_month]]) + ->where(['UpdateTime' => ['>', $last_month]]) + ->where(['UserId' => ['in',$user_id]]) + ->group(['UserId']) + ->order('money') + ->fetchAll(); + } + + /** + * @description: 获取所有支付成功用户近一个月在筛选范围的支付总金额 + * @param {*} + * @return {*} + */ + public function getScreenMonthCost($screen){ + $last_month = date("Y-m-01", strtotime("-1 month")); + $new_month = date("Y-m-t", strtotime("-1 month")); + return $this->field('UserId,sum(PaymentAmount) as money') + ->where(['OrderState'=>['in',ProductOrderEnum::$PayComplete],'UpdateTime' => ['<', $new_month]]) + ->where(['UpdateTime' => ['>', $last_month]]) + ->group(['UserId'],'having money>'.$screen['money1'].' and money<'.$screen['money2']) + ->fetchAll(); + } +} diff --git a/app/manager/model/User.php b/app/manager/model/User.php new file mode 100644 index 0000000..098cd68 --- /dev/null +++ b/app/manager/model/User.php @@ -0,0 +1,43 @@ +field('ManagerId,ManagerName,count(1) as count_num')->group(['ManagerId'])->fetchAll(); + } + + /** + * @description: 查询符合筛选条件的所有用户数量 + * @param {*} + * @return {*} + */ + public function getScreenUserCount($where) + { + return $this->field('ManagerId,ManagerName,count(1) as count_num')->where($where)->group(['ManagerId'])->fetchAll(); + } + + public function setManager($where,$data,$limit){ + return $this->where($where)->limit($limit)->update($data); + } + +}