StoreOrderDao.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. <?php
  2. namespace app\common\dao\store\order;
  3. use app\common\dao\BaseDao;
  4. use app\common\model\BaseModel;
  5. use app\common\model\store\order\StoreOrder;
  6. use app\common\model\store\order\StoreOrderProduct;
  7. use app\common\model\store\order\StoreOrderStatus;
  8. use app\common\model\user\User;
  9. use app\common\repositories\store\order\StoreImportDeliveryRepository;
  10. use app\common\repositories\store\order\StoreImportRepository;
  11. use app\common\repositories\store\order\StoreOrderStatusRepository;
  12. use app\common\repositories\store\product\ProductAssistSetRepository;
  13. use app\common\repositories\store\product\ProductGroupBuyingRepository;
  14. use app\common\repositories\store\product\ProductGroupRepository;
  15. use app\common\repositories\system\merchant\MerchantRepository;
  16. use ln\services\SpreadsheetExcelService;
  17. use think\db\BaseQuery;
  18. use think\db\exception\DataNotFoundException;
  19. use think\db\exception\DbException;
  20. use think\db\exception\ModelNotFoundException;
  21. use think\facade\Db;
  22. use think\Model;
  23. /**
  24. * Class StoreOrderDao
  25. * @package app\common\dao\store\order
  26. * @author xaboy
  27. * @day 2020/6/8
  28. */
  29. class StoreOrderDao extends BaseDao
  30. {
  31. /**
  32. * @return string
  33. * @author xaboy
  34. * @day 2020/6/8
  35. */
  36. protected function getModel(): string
  37. {
  38. return StoreOrder::class;
  39. }
  40. /**
  41. * @param array $where
  42. * @param int $sysDel
  43. * @return BaseQuery
  44. * @author xaboyCRMEB
  45. * @day 2020/6/16
  46. */
  47. public function search(array $where, $sysDel = 0)
  48. {
  49. $query = StoreOrder::hasWhere('merchant', function ($query) use ($where) {
  50. if (isset($where['is_trader']) && $where['is_trader'] !== '') {
  51. $query->where('is_trader', $where['is_trader']);
  52. }
  53. $query->where('is_del',0);
  54. });
  55. $query->when(($sysDel !== null), function ($query) use ($sysDel) {
  56. $query->where('is_system_del', $sysDel);
  57. })
  58. ->when(isset($where['order_type']) && $where['order_type'] >= 0 && $where['order_type'] !== '', function ($query) use ($where) {
  59. $query->where('order_type', $where['order_type']);
  60. })
  61. ->when(isset($where['activity_type']) && $where['activity_type'] != '', function ($query) use ($where) {
  62. $query->where('activity_type', $where['activity_type']);
  63. })
  64. ->when(isset($where['status']) && $where['status'] !== '', function ($query) use ($where) {
  65. if ($where['status'] == -2)
  66. $query->where('paid', 1)->whereNotIn('StoreOrder.status', [10, 11]);
  67. else if ($where['status'] == 0)
  68. $query->whereIn('StoreOrder.status', [0, 9]);
  69. else if ($where['status'] == 10)
  70. $query->whereIn('StoreOrder.status', [10, 11]);
  71. else
  72. $query->where('StoreOrder.status', $where['status']);
  73. })
  74. ->when(isset($where['uid']) && $where['uid'] !== '', function ($query) use ($where) {
  75. $query->where('uid', $where['uid']);
  76. })
  77. ->when(isset($where['pay_type']) && $where['pay_type'] !== '', function ($query) use ($where) {
  78. $query->where('StoreOrder.pay_type', $where['pay_type']);
  79. })
  80. ->when(isset($where['order_ids']) && $where['order_ids'] !== '', function ($query) use ($where) {
  81. $query->whereIn('order_id', $where['order_ids']);
  82. })
  83. ->when(isset($where['order_id']) && $where['order_id'] !== '', function ($query) use ($where) {
  84. $query->where('order_id', $where['order_id']);
  85. })
  86. ->when(isset($where['take_order']) && $where['take_order'] != '', function ($query) use ($where) {
  87. $query->where('order_type', 1)->whereNotNull('verify_time');
  88. })
  89. ->when(isset($where['mer_id']) && $where['mer_id'] !== '', function ($query) use ($where) {
  90. $query->where('StoreOrder.mer_id', $where['mer_id']);
  91. })
  92. ->when(isset($where['date']) && $where['date'] !== '', function ($query) use ($where) {
  93. getModelTime($query, $where['date'], 'StoreOrder.create_time');
  94. })
  95. ->when(isset($where['verify_date']) && $where['verify_date'] !== '', function ($query) use ($where) {
  96. getModelTime($query, $where['verify_date'], 'verify_time');
  97. })
  98. ->when(isset($where['order_sn']) && $where['order_sn'] !== '', function ($query) use ($where) {
  99. $query->where('order_sn', 'like', '%' . $where['order_sn'] . '%');
  100. })
  101. ->when(isset($where['paid']) && $where['paid'] !== '', function ($query) use ($where) {
  102. $query->where('StoreOrder.paid', $where['paid']);
  103. })
  104. ->when(isset($where['is_del']) && $where['is_del'] !== '', function ($query) use ($where) {
  105. $query->where('StoreOrder.is_del', $where['is_del']);
  106. })
  107. ->when(isset($where['service_id']) && $where['service_id'] !== '', function ($query) use ($where) {
  108. $query->where('service_id', $where['service_id']);
  109. })
  110. ->when(isset($where['username']) && $where['username'] !== '', function ($query) use ($where) {
  111. $query->join('User U','StoreOrder.uid = U.uid')->where('nickname', 'like', "%{$where['username']}%")
  112. ->whereOr('phone', 'like', "%{$where['username']}%");
  113. })
  114. ->when(isset($where['keywords']) && $where['keywords'] !== '', function ($query) use ($where) {
  115. $query->where(function ($query) use ($where) {
  116. $query->whereLike('StoreOrder.real_name|StoreOrder.user_phone|order_sn', "%" . $where['keywords'] . "%");
  117. });
  118. })
  119. ->when(isset($where['reconciliation_type']) && $where['reconciliation_type'] !== '', function ($query) use ($where) {
  120. $query->when($where['reconciliation_type'], function ($query) use ($where) {
  121. $query->where('reconciliation_id', '<>', 0);
  122. }, function ($query) use ($where) {
  123. $query->where('reconciliation_id', 0);
  124. });
  125. })->order('StoreOrder.create_time DESC');
  126. return $query;
  127. }
  128. public function groupBuyingStatus(array $orderIds, $status)
  129. {
  130. if (!count($orderIds)) return 0;
  131. $make = app()->make(StoreOrderStatusRepository::class);
  132. foreach ($orderIds as $id){
  133. $make->status($id,'group_success','拼团成功');
  134. }
  135. return StoreOrder::getDB()->whereIn('order_id', $orderIds)->update(compact('status'));
  136. }
  137. /**
  138. * @param $id
  139. * @param $uid
  140. * @return array|Model|null
  141. * @throws DataNotFoundException
  142. * @throws DbException
  143. * @throws ModelNotFoundException
  144. * @author xaboy
  145. * @day 2020/6/11
  146. */
  147. public function userOrder($id, $uid)
  148. {
  149. return StoreOrder::getDB()->where('order_id', $id)->where('uid', $uid)->where('is_del', 0)->where('paid', 1)->where('is_system_del', 0)->find();
  150. }
  151. /**
  152. * @param array $where
  153. * @param $ids
  154. * @return BaseQuery
  155. * @author xaboy
  156. * @day 2020/6/26
  157. */
  158. public function usersOrderQuery(array $where, $ids, $uid)
  159. {
  160. return StoreOrder::getDB()->where(function ($query) use ($uid, $ids) {
  161. $query->whereIn('uid', $ids)->whereOr(function ($query) use ($uid) {
  162. if ($uid) {
  163. $query->where('uid', $uid)->where('is_selfbuy', 1);
  164. }
  165. });
  166. })->when(isset($where['date']) && $where['date'] !== '', function ($query) use ($where) {
  167. getModelTime($query, $where['date'], 'pay_time');
  168. })->when(isset($where['keyword']) && $where['keyword'] !== '', function ($query) use ($where) {
  169. $query->whereLike('order_id|order_sn', "%{$where['keyword']}%");
  170. })->where('paid', 1)->order('pay_time DESC');
  171. }
  172. /**
  173. * @param $field
  174. * @param $value
  175. * @param int|null $except
  176. * @return bool
  177. * @author xaboy
  178. * @day 2020/6/11
  179. */
  180. public function fieldExists($field, $value, ?int $except = null): bool
  181. {
  182. return ($this->getModel()::getDB())->when($except, function ($query) use ($field, $except) {
  183. $query->where($field, '<>', $except);
  184. })->where($field, $value)->count() > 0;
  185. }
  186. /**
  187. * @param $id
  188. * @return mixed
  189. * @author xaboy
  190. * @day 2020/6/12
  191. */
  192. public function getMerId($id)
  193. {
  194. return StoreOrder::getDB()->where('order_id', $id)->value('mer_id');
  195. }
  196. /**
  197. * @param array $where
  198. * @return bool
  199. * @author Qinii
  200. * @day 2020-06-12
  201. */
  202. public function merFieldExists(array $where)
  203. {
  204. return ($this->getModel()::getDB())->where($where)->count() > 0;
  205. }
  206. /**
  207. * TODO
  208. * @param $reconciliation_id
  209. * @return mixed
  210. * @author Qinii
  211. * @day 2020-06-15
  212. */
  213. public function reconciliationUpdate($reconciliation_id)
  214. {
  215. return ($this->getModel()::getDB())->whereIn('reconciliation_id', $reconciliation_id)->update(['reconciliation_id' => 0]);
  216. }
  217. public function dayOrderNum($day, $merId = null)
  218. {
  219. return StoreOrder::getDB()->where('paid', 1)->when($merId, function ($query, $merId) {
  220. $query->where('mer_id', $merId);
  221. })->when($day, function ($query, $day) {
  222. getModelTime($query, $day, 'pay_time');
  223. })->count();
  224. }
  225. public function dayOrderPrice($day, $merId = null)
  226. {
  227. return getModelTime(StoreOrder::getDB()->where('paid', 1)->when($merId, function ($query, $merId) {
  228. $query->where('mer_id', $merId);
  229. }), $day, 'pay_time')->sum('pay_price');
  230. }
  231. public function dateOrderPrice($date, $merId = null)
  232. {
  233. return StoreOrder::getDB()->where('paid', 1)->when($merId, function ($query, $merId) {
  234. $query->where('mer_id', $merId);
  235. })->when($date, function ($query, $date) {
  236. getModelTime($query, $date, 'pay_time');
  237. })->sum('pay_price');
  238. }
  239. public function dateOrderNum($date, $merId = null)
  240. {
  241. return StoreOrder::getDB()->where('paid', 1)->when($merId, function ($query, $merId) {
  242. $query->where('mer_id', $merId);
  243. })->when($date, function ($query, $date) {
  244. getModelTime($query, $date, 'pay_time');
  245. })->count();
  246. }
  247. public function dayOrderUserNum($day, $merId = null)
  248. {
  249. return StoreOrder::getDB()->where('paid', 1)->when($merId, function ($query, $merId) {
  250. $query->where('mer_id', $merId);
  251. })->when($day, function ($query, $day) {
  252. getModelTime($query, $day, 'pay_time');
  253. })->group('uid')->count();
  254. }
  255. public function orderUserNum($date, $paid = null, $merId = null)
  256. {
  257. return StoreOrder::getDB()->when($paid, function ($query, $paid) {
  258. $query->where('paid', $paid);
  259. })->when($merId, function ($query, $merId) {
  260. $query->where('mer_id', $merId);
  261. })->when($date, function ($query, $date) use ($paid) {
  262. if (!$paid) {
  263. getModelTime($query, $date);
  264. // $query->where(function ($query) use ($date) {
  265. // $query->where(function ($query) use ($date) {
  266. // $query->where('paid', 1);
  267. // getModelTime($query, $date, 'pay_time');
  268. // })->whereOr(function ($query) use ($date) {
  269. // $query->where('paid', 0);
  270. // getModelTime($query, $date);
  271. // });
  272. // });
  273. } else
  274. getModelTime($query, $date, 'pay_time');
  275. })->group('uid')->count();
  276. }
  277. public function orderUserGroup($date, $paid = null, $merId = null)
  278. {
  279. return StoreOrder::getDB()->when($paid, function ($query, $paid) {
  280. $query->where('paid', $paid);
  281. })->when($merId, function ($query, $merId) {
  282. $query->where('mer_id', $merId);
  283. })->when($date, function ($query, $date) {
  284. getModelTime($query, $date, 'pay_time');
  285. })->group('uid')->field(Db::raw('uid,sum(pay_price) as pay_price,count(order_id) as total'))->select();
  286. }
  287. public function oldUserNum(array $ids, $merId = null)
  288. {
  289. return StoreOrder::getDB()->when($merId, function ($query, $merId) {
  290. $query->where('mer_id', $merId);
  291. })->whereIn('uid', $ids)->where('paid', 1)->group('uid')->count();
  292. }
  293. public function oldUserIds(array $ids, $merId = null)
  294. {
  295. return StoreOrder::getDB()->when($merId, function ($query, $merId) {
  296. $query->where('mer_id', $merId);
  297. })->whereIn('uid', $ids)->where('paid', 1)->group('uid')->column('uid');
  298. }
  299. public function orderPrice($date, $paid = null, $merId = null)
  300. {
  301. return StoreOrder::getDB()->when($paid, function ($query, $paid) {
  302. $query->where('paid', $paid);
  303. })->when($merId, function ($query, $merId) {
  304. $query->where('mer_id', $merId);
  305. })->when($date, function ($query, $date) use ($paid) {
  306. if (!$paid) {
  307. $query->where(function ($query) use ($date) {
  308. $query->where(function ($query) use ($date) {
  309. $query->where('paid', 1);
  310. getModelTime($query, $date, 'pay_time');
  311. })->whereOr(function ($query) use ($date) {
  312. $query->where('paid', 0);
  313. getModelTime($query, $date);
  314. });
  315. });
  316. } else
  317. getModelTime($query, $date, 'pay_time');
  318. })->sum('pay_price');
  319. }
  320. public function orderGroupNum($date, $merId = null)
  321. {
  322. return StoreOrder::getDB()->field(Db::raw('sum(pay_price) as pay_price,count(*) as total,count(distinct uid) as user,from_unixtime(unix_timestamp(pay_time),\'%m-%d\') as `day`'))
  323. ->where('paid', 1)->when($date, function ($query, $date) {
  324. getModelTime($query, $date, 'pay_time');
  325. })->when($merId, function ($query, $merId) {
  326. $query->where('mer_id', $merId);
  327. })->order('day ASC')->group('day')->select();
  328. }
  329. public function orderGroupNumPage($where, $page, $limit, $merId = null)
  330. {
  331. return StoreOrder::getDB()->when(isset($where['dateRange']), function ($query) use ($where) {
  332. getModelTime($query, date('Y/m/d 00:00:00', $where['dateRange']['start']) . '-' . date('Y/m/d 00:00:00', $where['dateRange']['stop']), 'pay_time');
  333. })->field(Db::raw('sum(pay_price) as pay_price,count(*) as total,count(distinct uid) as user,from_unixtime(unix_timestamp(pay_time),\'%m-%d\') as `day`'))
  334. ->where('paid', 1)->when($merId, function ($query, $merId) {
  335. $query->where('mer_id', $merId);
  336. })->order('day DESC')->page($page, $limit)->group('day')->select();
  337. }
  338. public function dayOrderPriceGroup($date, $merId = null)
  339. {
  340. return StoreOrder::getDB()->field(Db::raw('sum(pay_price) as price, from_unixtime(unix_timestamp(pay_time),\'%H:%i\') as time'))
  341. ->where('paid', 1)->when($date, function ($query, $date) {
  342. getModelTime($query, $date, 'pay_time');
  343. })->when($merId, function ($query, $merId) {
  344. $query->where('mer_id', $merId);
  345. })->group('time')->select();
  346. }
  347. public function dayOrderNumGroup($date, $merId = null)
  348. {
  349. return StoreOrder::getDB()->field(Db::raw('count(*) as total, from_unixtime(unix_timestamp(pay_time),\'%H:%i\') as time'))
  350. ->where('paid', 1)->when($date, function ($query, $date) {
  351. getModelTime($query, $date, 'pay_time');
  352. })->when($merId, function ($query, $merId) {
  353. $query->where('mer_id', $merId);
  354. })->group('time')->select();
  355. }
  356. public function dayOrderUserGroup($date, $merId = null)
  357. {
  358. return StoreOrder::getDB()->field(Db::raw('count(DISTINCT uid) as total, from_unixtime(unix_timestamp(pay_time),\'%H:%i\') as time'))
  359. ->where('paid', 1)->when($date, function ($query, $date) {
  360. getModelTime($query, $date, 'pay_time');
  361. })->when($merId, function ($query, $merId) {
  362. $query->where('mer_id', $merId);
  363. })->group('time')->select();
  364. }
  365. /**
  366. * 获取当前时间到指定时间的支付金额 管理员
  367. * @param string $start 开始时间
  368. * @param string $stop 结束时间
  369. * @return mixed
  370. */
  371. public function chartTimePrice($start, $stop, $merId = null)
  372. {
  373. return StoreOrder::getDB()->where('paid', 1)
  374. ->where('pay_time', '>=', $start)
  375. ->where('pay_time', '<', $stop)
  376. ->when($merId, function ($query, $merId) {
  377. $query->where('mer_id', $merId);
  378. })
  379. ->field('sum(pay_price) as num,FROM_UNIXTIME(unix_timestamp(pay_time), \'%Y-%m-%d\') as time')
  380. ->group('time')
  381. ->order('pay_time ASC')->select()->toArray();
  382. }
  383. /**
  384. * @param $date
  385. * @param null $merId
  386. * @return mixed
  387. */
  388. public function chartTimeNum($date, $merId = null)
  389. {
  390. return StoreOrder::getDB()->where('paid', 1)->when($date, function ($query) use ($date) {
  391. getModelTime($query, $date, 'pay_time');
  392. })->when($merId, function ($query, $merId) {
  393. $query->where('mer_id', $merId);
  394. })->field('count(order_id) as num,FROM_UNIXTIME(unix_timestamp(pay_time), \'%Y-%m-%d\') as time')
  395. ->group('time')
  396. ->order('pay_time ASC')->select()->toArray();
  397. }
  398. /**
  399. * @param $end
  400. * @return mixed
  401. * @author xaboy
  402. * @day 2020/9/16
  403. */
  404. public function getFinishTimeoutIds($end)
  405. {
  406. return StoreOrderStatus::getDB()->alias('A')->leftJoin('StoreOrder B', 'A.order_id = B.order_id')
  407. ->where('A.change_type', 'take')
  408. ->where('A.change_time', '<', $end)->where('B.paid', 1)->where('B.status', 2)
  409. ->column('A.order_id');
  410. }
  411. /**
  412. * TODO 参与人数
  413. * @param array $data
  414. * @param int|null $uid
  415. * @return BaseQuery
  416. * @author Qinii
  417. * @day 2020-11-11
  418. */
  419. public function getTattendCount(array $data,?int $uid)
  420. {
  421. $query = StoreOrder::hasWhere('orderProduct',function($query)use($data,$uid){
  422. $query->when(isset($data['activity_id']),function ($query)use($data){
  423. $query->where('activity_id',$data['activity_id']);
  424. })
  425. ->when(isset($data['product_sku']),function ($query)use($data){
  426. $query->where('product_sku',$data['product_sku']);
  427. })
  428. ->when(isset($data['product_id']),function ($query)use($data){
  429. $query->where('product_id',$data['product_id']);
  430. })
  431. ->when(isset($data['exsits_id']),function ($query)use ($data){
  432. switch ($data['product_type']){
  433. case 3:
  434. $make = app()->make(ProductAssistSetRepository::class);
  435. $id = 'product_assist_id';
  436. break;
  437. case 4:
  438. $make = app()->make(ProductGroupBuyingRepository::class);
  439. $id = 'product_group_id';
  440. break;
  441. }
  442. $where = [$id => $data['exsits_id']];
  443. $activity_id = $make->getSearch($where)->column($make->getPk());
  444. if($activity_id) {
  445. $id = array_unique($activity_id);
  446. $query->where('activity_id','in',$id);
  447. }else{
  448. $query->where('activity_id','<',0);
  449. }
  450. })
  451. ->where('product_type',$data['product_type']);
  452. if($uid) $query->where('uid',$uid);
  453. });
  454. $query->where('activity_type',$data['product_type']);
  455. switch($data['product_type'])
  456. {
  457. case 0:
  458. $query->where(function($query){
  459. $query->where('paid',1);
  460. })->whereOr(function($query){
  461. $query->where('paid',0)->where('is_del',0);
  462. });
  463. break;
  464. case 1: //秒杀
  465. $query->where(function($query){
  466. $query->where(function($query){
  467. $query->where('paid',1);
  468. })->whereOr(function($query){
  469. $query->where('paid',0)->where('is_del',0);
  470. });
  471. })->when(isset($data['day']), function ($query) use ($data) {
  472. $query->whereDay('StoreOrder.create_time', $data['day']);
  473. });
  474. break;
  475. case 2: //预售
  476. /**
  477. * 第一阶段参与人数:所有人
  478. * 第二阶段参与人数:支付了第一阶段
  479. */
  480. //第二阶段
  481. if($data['type'] == 1){
  482. $query->where(function($query){
  483. $query->where('paid',1)->whereOr(function($query){
  484. $query->where('paid',0)->where('is_del',0);
  485. });
  486. });
  487. }
  488. if($data['type'] == 2) $query->where('paid',1)->where('status','in',[0,1,2,3,-1]);
  489. break;
  490. case 3: //助力
  491. $query->where(function($query){
  492. $query->where('paid',1)->whereOr(function($query){
  493. $query->where('paid',0)->where('is_del',0);
  494. });
  495. });
  496. break;
  497. case 4: //
  498. $query->where(function($query){
  499. $query->where('paid',1)->whereOr(function($query){
  500. $query->where('paid',0)->where('is_del',0);
  501. })
  502. ->where('status','>',-1);
  503. });
  504. break;
  505. }
  506. return $query;
  507. }
  508. /**
  509. * 未使用
  510. * TODO 成功支付人数
  511. * @param int $productType
  512. * @param int $activityId
  513. * @param int|null $uid
  514. * @param int|null $status
  515. * @author Qinii
  516. * @day 2020-10-30
  517. */
  518. public function getTattendSuccessCount($data,?int $uid)
  519. {
  520. $query = StoreOrder::hasWhere('orderProduct',function($query)use($data,$uid){
  521. $query->when(isset($data['activity_id']),function ($query)use($data){
  522. $query->where('activity_id',$data['activity_id']);
  523. })
  524. ->when(isset($data['product_sku']),function ($query)use($data){
  525. $query->where('product_sku',$data['product_sku']);
  526. })
  527. ->when(isset($data['product_id']),function ($query)use($data){
  528. $query->where('product_id',$data['product_id']);
  529. })
  530. ->when(isset($data['exsits_id']),function ($query)use ($data){
  531. switch ($data['product_type']){
  532. case 3:
  533. $make = app()->make(ProductAssistSetRepository::class);
  534. $id = 'product_assist_id';
  535. break;
  536. case 4:
  537. $make = app()->make(ProductGroupBuyingRepository::class);
  538. $id = 'product_group_id';
  539. break;
  540. }
  541. $where = [$id => $data['exsits_id']];
  542. $activity_id = $make->getSearch($where)->column($make->getPk());
  543. if($activity_id) {
  544. $id = array_unique($activity_id);
  545. $query->where('activity_id','in',$id);
  546. }else{
  547. $query->where('activity_id','<',0);
  548. }
  549. })
  550. ->where('product_type',$data['product_type']);
  551. if($uid) $query->where('uid',$uid);
  552. });
  553. $query->where('activity_type',$data['product_type'])->where('paid',1);
  554. switch($data['product_type'])
  555. {
  556. case 1: //秒杀
  557. $query->where(function($query){
  558. $query->where(function($query){
  559. $query->where('paid',1);
  560. });
  561. })->when(isset($data['day']), function ($query) use ($data) {
  562. $query->whereDay('StoreOrder.create_time', $data['day']);
  563. });
  564. break;
  565. case 2: //预售
  566. if($data['type'] == 1){ //第一阶段
  567. $query->where('status','in',[0,1,2,3,10]);
  568. } else { //第二阶段
  569. $query->where('status','in',[0,1,2,3]);
  570. }
  571. break;
  572. case 3: //助力
  573. break;
  574. case 4:
  575. break;
  576. }
  577. return $query;
  578. }
  579. /**
  580. * TODO 获取退款单数量
  581. * @param $where
  582. * @return mixed
  583. * @author Qinii
  584. * @day 1/4/21
  585. */
  586. public function getSeckillRefundCount($where,$type = 1)
  587. {
  588. $query = StoreOrderProduct::getDB()->alias('P')->join('StoreRefundOrder R','P.order_id = R.order_id');
  589. $query->join('StoreOrder O','O.order_id = P.order_id');
  590. $query
  591. ->when(isset($where['activity_id']),function ($query)use($where){
  592. $query->where('P.activity_id',$where['activity_id']);
  593. })
  594. ->when(isset($where['product_sku']),function ($query)use($where){
  595. $query->where('P.product_sku',$where['product_sku']);
  596. })
  597. ->when(isset($where['day']), function ($query) use ($where) {
  598. $query->whereDay('P.create_time', $where['day']);
  599. })
  600. ->when($type == 1, function ($query) use ($where) {
  601. $query->where('O.verify_time',null)->where('O.delivery_type',null);
  602. },function ($query){
  603. $query ->where('R.refund_type',2);
  604. })
  605. ->where('P.product_type',1)->where('R.status',3);
  606. return $query->count();
  607. }
  608. }