12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- declare (strict_types=1);
- namespace app\console\service;
- use app\common\model\order\RefundHis as RefundHisModel;
- use app\console\model\OrderRefund as OrderRefundModel;
- use app\console\model\OrderGoods as OrderGoodsModel;
- use app\common\service\BaseService;
- use app\common\library\helper;
- use app\console\library\Tools;
- /**
- * 服务类:售后订单模块
- * Class OrderRefund
- * @package app\console\service
- */
- class OrderRefund extends BaseService
- {
- /**
- * 已超时未退货售后单自动关闭
- * @param int $storeId
- * @param int $deliveryDays 期限天数
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function deliveryEvent(int $storeId, int $deliveryDays)
- {
- // 截止时间
- $deadlineTime = time() - ((int)$deliveryDays * 86400);
- if(env('SERVE_ENV')=='test'){
- $deadlineTime = time() - 300;//测试超时退款5分钟
- }
- // 查询截止时间超时未退货的售后单ID集
- $model = new OrderRefundModel;
- $list = $model->getOrderListByDelivery($storeId, $deadlineTime);
- // 售后单ID集
- $orderRefundIds = helper::getArrayColumn($list, 'order_refund_id');
- // 批量更新售后单状态
- if (!empty($orderRefundIds)) {
- $model->onUpdateDelivery($orderRefundIds);
- foreach($orderRefundIds as $orderRefundId){
- $json_str = json_encode(["买家超时未退货,退款已关闭"]);
- (new RefundHisModel())->add($orderRefundId,'系统',7,$json_str,'','系统','用户超时未退货,系统自动关闭售后单');
- }
- }
- // 订单商品ID集
- $orderGoodsIds = helper::getArrayColumn($list, 'order_goods_id');
- // 批量解冻订单商品冻结状态
- if (!empty($orderGoodsIds)) {
- (new OrderGoodsModel)->onUpdateFrozen($orderGoodsIds);
- }
- // 记录日志
- Tools::taskLogs('OrderRefund', 'deliveryEvent', [
- 'storeId' => $storeId,
- 'deliveryDays' => $deliveryDays,
- 'deadlineTime' => $deadlineTime,
- 'orderIds' => helper::jsonEncode($orderRefundIds),
- ]);
- }
- /**
- * 合计订单退款金额 (实付金额+米卡抵扣)*退款数量/购买总数量
- * @param $orderGoodsId
- * @return mixed
- */
- public static function sumRefundPriceNew($orderGoodsId){
- $lists = OrderRefundModel::alias('order_refund')
- ->join('order_goods','order_refund.order_goods_id=order_goods.order_goods_id','left')
- ->whereIn('order_refund.order_goods_id',$orderGoodsId)
- ->where('finance_refund',10)
- ->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')
- ->select();
- $sum = 0;
- if (count($lists)){
- foreach ($lists as $list){
- $a = helper::bcadd($list->total_pay_price ,$list->rice_card_money,4);
- $b = helper::bcmul($a,$list->goods_num,4);
- $c = helper::bcdiv($b,$list->total_num,4);
- $sum = helper::bcadd($sum,$c);
- }
- }
- return $sum;
- }
- }
|