StoreOrderDao.php 29 KB

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