MasterWorkerServiceOrderLists.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace app\adminapi\lists\master_worker;
  3. use app\adminapi\lists\BaseAdminDataLists;
  4. use app\common\lists\ListsSearchInterface;
  5. use app\common\model\master_worker\MasterWorker;
  6. use think\facade\Db;
  7. use think\facade\Log;
  8. /**
  9. * MasterWorkerServiceOrder列表
  10. * Class MasterWorkerServiceOrderLists
  11. * @package app\adminapi\lists
  12. */
  13. class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsSearchInterface
  14. {
  15. public $sqlJoin = '';
  16. /**
  17. * @notes 设置搜索条件
  18. * @return \string[][]
  19. * @author likeadmin
  20. * @date 2024/11/15 17:21
  21. */
  22. public function setSearch(): array
  23. {
  24. return [];
  25. }
  26. public function queryWhere()
  27. {
  28. $where = [];
  29. if (isset($this->params['real_name']) && !empty($this->params['real_name'])) {
  30. $where[] = ['a.real_name','like' ,"%".$this->params['real_name']."%"];
  31. }
  32. if (isset($this->params['worker_number']) && !empty($this->params['worker_number'])) {
  33. $where[] = ['a.worker_number','like' ,"%".$this->params['worker_number']."%"];
  34. }
  35. if (isset($this->params['recruiting_behalf']) && !empty($this->params['recruiting_behalf'])) {
  36. $where[] = ['a.recruiting_behalf','like' ,"%".$this->params['recruiting_behalf']."%"];
  37. }
  38. if (isset($this->params['is_recruiting_behalf']) && !empty($this->params['is_recruiting_behalf'])) {
  39. if ($this->params['is_recruiting_behalf'] == 1)
  40. $where[] = ['a.recruiting_behalf','<>' ,""];
  41. else
  42. $where[] = ['a.recruiting_behalf','=' ,""];
  43. }
  44. if(isset($this->params['category_ids']) && !empty($this->params['category_ids'])){
  45. $sqls = [];
  46. $category_ids =[];
  47. foreach ($this->params['category_ids'] as $val){
  48. ($val = json_decode($val,true))?($category_ids[] = end($val)):($category_ids[] = $val);
  49. }
  50. foreach ($category_ids as $item) {
  51. $sqls[] = "FIND_IN_SET({$item}, category_ids) > 0";
  52. }
  53. $query_sql = implode(' OR ', $sqls);
  54. Log::write('query_sql:'.$query_sql);
  55. $period_ids = MasterWorker::where('category_ids','<>', '')->whereRaw($query_sql)->column('id');
  56. $where[] = [ 'a.id','IN',$period_ids?:[0]];
  57. }
  58. if (isset($this->params['mobile']) && !empty($this->params['mobile'])) {
  59. $where[] = ['a.mobile','=' ,$this->params['mobile']];
  60. }
  61. if (isset($this->params['cooperation']) && !empty($this->params['cooperation'])) {
  62. $where[] = ['a.cooperation','=' ,$this->params['cooperation']];
  63. }
  64. if (!empty($this->params['start_time'])) {
  65. $this->sqlJoin .= ' AND b.update_time >= '.strtotime($this->params['start_time']);
  66. }
  67. if (!empty($this->params['end_time'])) {
  68. $this->sqlJoin .= ' AND b.update_time < '.strtotime($this->params['end_time'])+86400;
  69. }
  70. return $where;
  71. }
  72. /**
  73. * @notes 获取列表
  74. * @return array
  75. * @throws \think\db\exception\DataNotFoundException
  76. * @throws \think\db\exception\DbException
  77. * @throws \think\db\exception\ModelNotFoundException
  78. * @author likeadmin
  79. * @date 2024/11/15 17:21
  80. */
  81. public function lists(): array
  82. {
  83. $queryWhere = $this->queryWhere();
  84. return Db::name('master_worker')->alias('a')->field([
  85. 'a.id','a.real_name','a.nickname','a.worker_number','a.recruiting_behalf','a.mobile','a.cooperation',
  86. Db::raw("SUM(CASE WHEN b.service_status = 3 THEN 1 ELSE 0 END) AS success_count"),
  87. Db::raw("SUM(CASE WHEN b.service_status = 4 OR b.service_status = 5 THEN 1 ELSE 0 END) AS fail_count"),
  88. Db::raw("SUM(b.work_total) work_total"),
  89. Db::raw("SUM(b.worker_price) worker_price"),
  90. ])
  91. ->leftJoin('service_work b', 'a.id = b.master_worker_id'.$this->sqlJoin)
  92. ->where($queryWhere)
  93. ->group('a.id')
  94. ->order('a.id desc')
  95. ->limit($this->limitOffset, $this->limitLength)
  96. ->select()->toArray();
  97. }
  98. /**
  99. * @notes 获取数量
  100. * @return int
  101. * @author likeadmin
  102. * @date 2024/11/15 17:21
  103. */
  104. public function count(): int
  105. {
  106. $queryWhere = $this->queryWhere();
  107. return Db::name('master_worker')->alias('a')->field([
  108. 'a.id','a.real_name','a.nickname','a.worker_number','a.recruiting_behalf',
  109. Db::raw("SUM(CASE WHEN b.service_status = 3 THEN 1 ELSE 0 END) AS success_count"),
  110. Db::raw("SUM(CASE WHEN b.service_status = 4 OR b.service_status = 5 THEN 1 ELSE 0 END) AS fail_count"),
  111. Db::raw("SUM(b.work_total) work_total"),
  112. Db::raw("SUM(b.worker_price) worker_price"),
  113. ])
  114. ->leftJoin('service_work b', 'a.id = b.master_worker_id'.$this->sqlJoin)
  115. ->where($queryWhere)
  116. ->group('a.id')
  117. ->count();
  118. }
  119. }