OrderRefund.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\console\service;
  4. use app\common\model\order\RefundHis as RefundHisModel;
  5. use app\console\model\OrderRefund as OrderRefundModel;
  6. use app\console\model\OrderGoods as OrderGoodsModel;
  7. use app\common\service\BaseService;
  8. use app\common\library\helper;
  9. use app\console\library\Tools;
  10. /**
  11. * 服务类:售后订单模块
  12. * Class OrderRefund
  13. * @package app\console\service
  14. */
  15. class OrderRefund extends BaseService
  16. {
  17. /**
  18. * 已超时未退货售后单自动关闭
  19. * @param int $storeId
  20. * @param int $deliveryDays 期限天数
  21. * @throws \think\db\exception\DataNotFoundException
  22. * @throws \think\db\exception\DbException
  23. * @throws \think\db\exception\ModelNotFoundException
  24. */
  25. public function deliveryEvent(int $storeId, int $deliveryDays)
  26. {
  27. // 截止时间
  28. $deadlineTime = time() - ((int)$deliveryDays * 86400);
  29. if(env('SERVE_ENV')=='test'){
  30. $deadlineTime = time() - 300;//测试超时退款5分钟
  31. }
  32. // 查询截止时间超时未退货的售后单ID集
  33. $model = new OrderRefundModel;
  34. $list = $model->getOrderListByDelivery($storeId, $deadlineTime);
  35. // 售后单ID集
  36. $orderRefundIds = helper::getArrayColumn($list, 'order_refund_id');
  37. // 批量更新售后单状态
  38. if (!empty($orderRefundIds)) {
  39. $model->onUpdateDelivery($orderRefundIds);
  40. foreach($orderRefundIds as $orderRefundId){
  41. $json_str = json_encode(["买家超时未退货,退款已关闭"]);
  42. (new RefundHisModel())->add($orderRefundId,'系统',7,$json_str,'','系统','用户超时未退货,系统自动关闭售后单');
  43. }
  44. }
  45. // 订单商品ID集
  46. $orderGoodsIds = helper::getArrayColumn($list, 'order_goods_id');
  47. // 批量解冻订单商品冻结状态
  48. if (!empty($orderGoodsIds)) {
  49. (new OrderGoodsModel)->onUpdateFrozen($orderGoodsIds);
  50. }
  51. // 记录日志
  52. Tools::taskLogs('OrderRefund', 'deliveryEvent', [
  53. 'storeId' => $storeId,
  54. 'deliveryDays' => $deliveryDays,
  55. 'deadlineTime' => $deadlineTime,
  56. 'orderIds' => helper::jsonEncode($orderRefundIds),
  57. ]);
  58. }
  59. /**
  60. * 合计订单退款金额 (实付金额+米卡抵扣)*退款数量/购买总数量
  61. * @param $orderGoodsId
  62. * @return mixed
  63. */
  64. public static function sumRefundPriceNew($orderGoodsId){
  65. $lists = OrderRefundModel::alias('order_refund')
  66. ->join('order_goods','order_refund.order_goods_id=order_goods.order_goods_id','left')
  67. ->whereIn('order_refund.order_goods_id',$orderGoodsId)
  68. ->where('finance_refund',10)
  69. ->field('order_refund.order_goods_id,order_refund.goods_num,order_goods.goods_price,status,type,audit_status,audit_status_zg,is_user_send,order_goods.total_pay_price,order_goods.rice_card_money,order_goods.total_num')
  70. ->select();
  71. $sum = 0;
  72. if (count($lists)){
  73. foreach ($lists as $list){
  74. $a = helper::bcadd($list->total_pay_price ,$list->rice_card_money,4);
  75. $b = helper::bcmul($a,$list->goods_num,4);
  76. $c = helper::bcdiv($b,$list->total_num,4);
  77. $sum = helper::bcadd($sum,$c);
  78. }
  79. }
  80. return $sum;
  81. }
  82. }