链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
4.5 KiB

5 years ago
  1. <?php
  2. namespace App\Admin\Actions\Exporter;
  3. use App\Models\LanzuCsInfo;
  4. use App\Models\LanzuMarket;
  5. use Dcat\Admin\Grid\Exporters\AbstractExporter;
  6. use Illuminate\Database\Eloquent\Collection;
  7. use Illuminate\Support\Facades\DB;
  8. use Maatwebsite\Excel\Concerns\FromArray;
  9. use Maatwebsite\Excel\Concerns\FromCollection;
  10. use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
  11. use Maatwebsite\Excel\Facades\Excel;
  12. use App\Admin\Common\Order;
  13. use App\Models\LanzuUserRelationBind;
  14. use Illuminate\Console\Command;
  15. use \App\Models\v3\CsInfo as modelCsInfo;
  16. class SalesMan implements FromArray, WithStrictNullComparison
  17. {
  18. protected $_name;
  19. protected $_option;
  20. public function __construct($option,$name)
  21. {
  22. $this->_name = $name;
  23. $this->_option = $option;
  24. }
  25. public function array(): array
  26. {
  27. $result[] = [
  28. '懒ID',
  29. '拓展员',
  30. '服务站点',
  31. '站点地址',
  32. '绑定用户数',
  33. $this->_name.'下单人数',
  34. $this->_name.'订单数',
  35. $this->_name.'订单金额',
  36. ];
  37. $res = $this->getSaleMan(-30);
  38. foreach ($res as $value){
  39. $item =[];
  40. $item[] = $value['person_id'];
  41. $item[] = $value['nick_name'];
  42. $item[] = $value['name'];
  43. $item[] = $value['address'];
  44. $item[] = $value['user_num']??0;
  45. $item[] = $value['order_user_num']??0;
  46. $item[] = $value['order_num']??0;
  47. $item[] = $value['order_amount']??0;
  48. $result[] = $item;
  49. }
  50. return $result;
  51. }
  52. /**
  53. * 获取拓展员
  54. */
  55. public function getSaleMan($option)
  56. {
  57. $data = LanzuCsInfo::select(
  58. DB::raw('count("lanzu_cs_info.person_id") as total'),
  59. DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'),
  60. DB::raw('group_concat(rb.user_id) as user_id'),
  61. 'lanzu_cs_info.person_id', 'lanzu_user.nick_name')
  62. ->groupBy('lanzu_cs_info.person_id')
  63. ->leftJoin('lanzu_user', 'lanzu_user.id', 'lanzu_cs_info.person_id')
  64. ->leftJoin('lanzu_user_relation_bind as rb', 'rb.source_id', 'lanzu_cs_info.admin_user_id')
  65. ->where('lanzu_cs_info.person_id', '>', 0)->get()->toArray();
  66. $result = [];
  67. foreach ($data as $key => $value) {
  68. $value['admin_user_id'] = array_unique(explode(',', $value['admin_user_id']));
  69. $result = $this->csDetail($value['admin_user_id'], $this->_option, $value['nick_name'], $result);
  70. }
  71. return $result;
  72. }
  73. /**
  74. * 获取站点详情
  75. */
  76. public function csDetail($adminUid, $option, $nickName, $result)
  77. {
  78. $data = modelCsInfo::whereIn('admin_user_id', $adminUid)
  79. ->get()->toArray();
  80. foreach ($data as &$value) {
  81. //>>1.获取绑定后下过单的用户
  82. $value['user_num'] = LanzuUserRelationBind::where('source_id', $value['admin_user_id'])->count();
  83. $uid = Order::getUserOrder($value['admin_user_id']);
  84. //>>2.获取订单数据
  85. $value['order_user_num'] = Order::getOrderData([
  86. 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型
  87. 'data_type' => 'count_user',//取什么数据 data_type 数据类型
  88. 'market_id' => '',//取哪个市场数据
  89. 'condition' => 1,//取数据维度 condition
  90. 'user_ids' => $uid ? $uid : null
  91. ], $option);//下单人数
  92. $value['order_num'] = Order::getOrderData([
  93. 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型
  94. 'data_type' => 'number',//取什么数据 data_type 数据类型
  95. 'market_id' => '',//取哪个市场数据
  96. 'condition' => 1,//取数据维度 condition
  97. 'user_ids' => $uid ? $uid : null
  98. ], $option);//订单数
  99. $value['order_amount'] = Order::getOrderData([
  100. 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型
  101. 'data_type' => 'amount',//取什么数据 data_type 数据类型
  102. 'market_id' => '',//取哪个市场数据
  103. 'condition' => 1,//取数据维度 condition
  104. 'user_ids' => $uid ? $uid : null
  105. ], $option);//订单金额
  106. $value['nick_name'] = $nickName;
  107. $result[] = $value;
  108. }
  109. return $result;
  110. }
  111. }