From 73e9017b7b38b3eea060bacc4dc83887dd2955d6 Mon Sep 17 00:00:00 2001 From: clunt Date: Tue, 18 Oct 2022 23:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=B8=88=E5=82=85=E5=85=A8=E9=A2=9D?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AfterServiceRecordServiceImpl.java | 76 +++++++++++++++---- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java index cd7ccbdc..717ba4d6 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java @@ -3,6 +3,7 @@ package com.ghy.order.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Objects; import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.model.AdapayStatusEnum; @@ -14,12 +15,8 @@ import com.ghy.common.enums.PayTypeEnum; import com.ghy.common.exception.base.BaseException; import com.ghy.common.utils.DateUtils; import com.ghy.common.utils.ObjectUtils; -import com.ghy.order.domain.AfterServiceImgs; -import com.ghy.order.domain.OrderDetail; -import com.ghy.order.domain.OrderMaster; -import com.ghy.order.service.IAfterServiceImgsService; -import com.ghy.order.service.OrderDetailService; -import com.ghy.order.service.OrderMasterService; +import com.ghy.order.domain.*; +import com.ghy.order.service.*; import com.ghy.payment.domain.FinancialDetail; import com.ghy.payment.domain.FinancialMaster; import com.ghy.payment.service.AdapayService; @@ -29,8 +26,6 @@ import com.huifu.adapay.core.exception.BaseAdaPayException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ghy.order.mapper.AfterServiceRecordMapper; -import com.ghy.order.domain.AfterServiceRecord; -import com.ghy.order.service.IAfterServiceRecordService; import com.ghy.common.core.text.Convert; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -65,6 +60,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService @Autowired private OrderDetailService orderDetailService; + @Autowired + private OrderGoodsService orderGoodsService; + /** * 查询售后记录 * @@ -133,23 +131,37 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService Assert.notNull(orderDetail, "子单不存在!"); FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId()); Assert.notNull(financialDetail, "财务子单不存在!"); + OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); + Assert.notNull(orderMaster, "找不到对应的订单"); + FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId()); + Assert.notNull(financialMaster, "找不到订单"); BigDecimal refundMoney = BigDecimal.ZERO; if(ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())){ refundMoney = afterServiceRecord.getAgreedRefund(); }else { refundMoney = afterServiceRecord.getRefund(); } - if(refundMoney.compareTo(financialDetail.getPayMoney()) < 0){ + // 判断是否只有一个师傅接单,且单据派单完成. + if(this.checkIsOnlyServer(orderMaster.getId(), orderDetail.getWorkerId())){ + BigDecimal workerFee = financialMaster.getPayMoney(); + List financialDetailList = financialDetailService.selectByFinancialMasterId(financialMaster.getId()); + for (FinancialDetail detail : financialDetailList) { + if (!orderDetail.getWorkerId().equals(detail.getPayeeId())) { + workerFee = workerFee.subtract(detail.getPayMoney()); + } + } + if(workerFee.compareTo(refundMoney) < 0){ + refundMoney = financialMaster.getPayMoney(); + } + }else if(refundMoney.compareTo(financialDetail.getPayMoney()) < 0){ financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(afterServiceRecord.getAgreedRefund())); }else { refundMoney = financialDetail.getPayMoney(); financialDetail.setPayMoney(BigDecimal.ZERO); } + // 发起支付撤销 - OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); - Assert.notNull(orderMaster, "找不到对应的订单"); - FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId()); - Assert.notNull(financialMaster, "找不到订单"); + if(PayTypeEnum.ALIPAY_QR.getCode().equals(orderMaster.getPayType()) && ! PayStatus.PAID.getCode().equals(financialMaster.getPayStatus())){ financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney)); financialMasterService.updateFinancialMaster(financialMaster); @@ -173,6 +185,14 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService throw new BaseException("发起退款异常"); } } + // 如果已经全部退款,则需要更新订单状态为取消。 + if(financialMaster.getPayMoney().compareTo(BigDecimal.ZERO) == 0){ + orderMasterService.updateStatus(orderMaster.getId(), OrderStatus.CANCEL.code()); + OrderDetail data = new OrderDetail(); + data.setOrderMasterId(orderMaster.getId()); + data.setOrderStatus(OrderStatus.CANCEL.code()); + orderDetailService.updateByOrderMasterId(data); + } } catch (BaseAdaPayException e) { throw new BaseException(e.getMessage()); } @@ -217,4 +237,34 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService { return afterServiceRecordMapper.deleteAfterServiceRecordById(id); } + + private boolean checkIsOnlyServer(Long orderMasterId, Long workId){ + // 找出原单的数量 + List orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId); + // 找出原单关联的细单的商品数量 + List orderDetailList = orderDetailService.selectByOrderMasterId(orderMasterId); + for (OrderDetail detail : orderDetailList){ + // 非一个师傅接单 + if(!workId.equals(detail.getWorkerId())){ + return false; + } + // 子单数量 + List orderDetailGoodsList = orderGoodsService.selectByOrderDetailId(detail.getId()); + // 计算剩余未分配的商品数量 + for (OrderGoods detailGoods : orderDetailGoodsList) { + for(OrderGoods masterGoods : orderGoodsList){ + if(Objects.equals(masterGoods.getGoodsStandardId(), detailGoods.getGoodsStandardId())){ + masterGoods.setGoodsNum(masterGoods.getGoodsNum() - detailGoods.getGoodsNum()); + } + } + } + } + // 有单派完. + for (OrderGoods orderGoods : orderGoodsList) { + if (orderGoods.getGoodsNum() > 0) { + return false; + } + } + return true; + } }