OrderService.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace app\admin\service\order;
  3. use app\model\Order;
  4. use app\model\OrderSheet;
  5. use app\model\SysDept;
  6. use support\Db;
  7. use support\Redis;
  8. class OrderService
  9. {
  10. /**
  11. * @Desc 自动确认收货
  12. * @Author Gorden
  13. * @Date 2024/4/11 16:09
  14. *
  15. * @return void
  16. */
  17. public static function AutomaticReceipt()
  18. {
  19. try {
  20. Db::beginTransaction();
  21. $timeUnix = strtotime("-7 days");
  22. $orders = Order::where('order_status_system', 'SIGNED')
  23. ->where('order_addtimes', '<', $timeUnix)
  24. ->get();
  25. foreach ($orders as $order) {
  26. // 订单主表
  27. Order::where('order_id', $order->order_id)->update([
  28. 'order_is_complete' => 'Y',
  29. 'order_status_system' => 'CONFIRM',
  30. 'order_status_storage'=> 'DONE'
  31. ]);
  32. // 订单详情表
  33. OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'DONE']);
  34. // 7天后自动完成 order_is_complete=Y
  35. // $redis = Redis::connection();
  36. // $key = Order::AUTOMATIC_COMPLETE_PREFIX . date('Ymd', strtotime("+7 days"));
  37. // $redis->sadd($key, $order->order_id);
  38. }
  39. Db::commit();
  40. } catch (\Exception $e) {
  41. Db::rollBack();
  42. }
  43. }
  44. /**
  45. * @Desc 自动完成订单
  46. * @Author Gorden
  47. * @Date 2024/7/16 9:37
  48. *
  49. * @return void
  50. */
  51. public static function AutomaticComplete()
  52. {
  53. Db::beginTransaction();
  54. try {
  55. $redis = Redis::connection();
  56. $key = Order::AUTOMATIC_COMPLETE_PREFIX . date('Ymd');
  57. $orderIds = $redis->smembers($key);
  58. foreach ($orderIds as $orderId){
  59. $order = Order::where('order_id',$orderId)
  60. ->select('order_is_complete','order_category','order_status_system')
  61. ->first();
  62. if ($order && $order->order_is_complete != 'Y' && $order->order_category != 'RETURN' && in_array($order->order_status_system,['RECVING','SIGNED','CONFIRM'])){
  63. // 更新主表
  64. Order::where('order_id',$orderId)->update(['order_is_complete'=>'Y','order_status_system'=>'CONFIRM','order_status_storage'=>'DONE']);
  65. // sheet表
  66. OrderSheet::where('join_sheet_order_id',$orderId)->update(['order_sheet_status'=>'DONE']);
  67. }
  68. }
  69. $redis->del($key);
  70. Db::commit();
  71. } catch (\Exception $e) {
  72. dump($e->getMessage());
  73. Db::rollBack();
  74. }
  75. }
  76. public static function checkPayingOrder()
  77. {
  78. try {
  79. Db::beginTransaction();
  80. $timeUnix = strtotime("-30 minutes");
  81. $orders = Order::where('order_status_system', 'PAYING')
  82. ->where('order_addtimes', '<', $timeUnix)
  83. ->get();
  84. foreach ($orders as $order) {
  85. // 订单主表
  86. Order::where('order_id', $order->order_id)->update([
  87. 'order_category' => 'CANCEL',
  88. 'order_status_system' => 'CANCEL',
  89. 'order_status_payment' => 'CANCEL'
  90. ]);
  91. // 订单详情表
  92. OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'CANCEL']);
  93. }
  94. Db::commit();
  95. } catch (\Exception $e) {
  96. Db::rollBack();
  97. }
  98. }
  99. public static function generateWriteOffData($params)
  100. {
  101. return [
  102. 'charge' => [
  103. 'charge_amount' => 1,
  104. 'charge_content' => $params['order_remark'] ?? '',
  105. 'charge_user_id' => $params['write_off_member_id'],
  106. 'charge_premises' => $params['dept_premises_id'],
  107. ],
  108. 'member_id' => $params['join_order_member_id']
  109. ];
  110. }
  111. }