diff --git a/ghy-admin/src/main/java/com/ghy/callback/PayReverseCallbackService.java b/ghy-admin/src/main/java/com/ghy/callback/PayReverseCallbackService.java index 3b5148b3..76945a2f 100644 --- a/ghy-admin/src/main/java/com/ghy/callback/PayReverseCallbackService.java +++ b/ghy-admin/src/main/java/com/ghy/callback/PayReverseCallbackService.java @@ -55,7 +55,7 @@ public class PayReverseCallbackService implements CallBackService { @Override public void onResponse(JSONObject response) { - log.debug("撤销支付 Response: {}", response.toString()); + } @Autowired diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index e4a6e8f8..c4d0ae4a 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -735,7 +735,7 @@ public class OrderMasterController extends BaseController { @PostMapping("/cancel") @ResponseBody public AjaxResult cancel(Long orderMasterId) throws BaseAdaPayException { - orderMasterService.cancel(orderMasterId); + orderMasterService.applyForCancel(orderMasterId); return AjaxResult.success(); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java index 48421140..b37406b2 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java @@ -1,5 +1,6 @@ package com.ghy.order.service; +import com.ghy.common.enums.OrderStatus; import com.ghy.order.domain.OrderDetail; import com.ghy.order.domain.OrderStatusCount; import com.ghy.payment.domain.FinancialChangeRecord; @@ -153,4 +154,13 @@ public interface OrderDetailService { * @param reverseId 退款ID */ void refundSucceeded(String reverseId); + + /** + * 更新子订单状态 + * + * @param id 子订单id + * @param status 状态码 {@link OrderStatus} + * @return + */ + int updateStatus(Long id, int status); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java index 5bae3c95..6cdc826d 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java @@ -6,7 +6,6 @@ import com.huifu.adapay.core.exception.BaseAdaPayException; import java.util.Collection; import java.util.List; -import java.util.Set; /** * 主订单接口 @@ -96,7 +95,7 @@ public interface OrderMasterService { * * @param orderMasterId 主订单ID */ - void cancel(Long orderMasterId) throws BaseAdaPayException; + void applyForCancel(Long orderMasterId) throws BaseAdaPayException; /** * 师傅同意取消主订单 @@ -128,4 +127,12 @@ public interface OrderMasterService { * @param reverseId 退款ID */ void refundSucceeded(String reverseId); + + /** + * 判断是否全部派单 + * + * @param orderMasterId 主订单ID + * @return true/false + */ + boolean isAllAssign(Long orderMasterId); } 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 7ffdcd5a..affdf05e 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,9 +3,7 @@ package com.ghy.order.service.impl; import com.alibaba.fastjson.JSONObject; import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.core.text.Convert; -import com.ghy.common.enums.OrderStatus; import com.ghy.common.enums.PayStatus; -import com.ghy.common.enums.PayTypeEnum; import com.ghy.common.enums.RefundType; import com.ghy.common.exception.base.BaseException; import com.ghy.common.utils.DateUtils; @@ -19,11 +17,11 @@ import com.ghy.payment.service.AdapayService; import com.ghy.payment.service.FinancialDetailService; import com.ghy.payment.service.FinancialMasterService; import com.huifu.adapay.core.exception.BaseAdaPayException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -36,30 +34,22 @@ import java.util.Objects; * @date 2022-09-25 */ @Service -public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService -{ - @Autowired +public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService { + @Resource private AfterServiceRecordMapper afterServiceRecordMapper; - - @Autowired + @Resource private IAfterServiceImgsService afterServiceImgsService; - - @Autowired + @Resource private FinancialDetailService financialDetailService; - - @Autowired + @Resource private OrderMasterService orderMasterService; - - @Autowired + @Resource private FinancialMasterService financialMasterService; - - @Autowired + @Resource private AdapayService adapayService; - - @Autowired + @Resource private OrderDetailService orderDetailService; - - @Autowired + @Resource private OrderGoodsService orderGoodsService; /** @@ -69,8 +59,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 售后记录 */ @Override - public AfterServiceRecord selectAfterServiceRecordById(String id) - { + public AfterServiceRecord selectAfterServiceRecordById(String id) { return afterServiceRecordMapper.selectAfterServiceRecordById(id); } @@ -81,8 +70,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 售后记录 */ @Override - public List selectAfterServiceRecordList(AfterServiceRecord afterServiceRecord) - { + public List selectAfterServiceRecordList(AfterServiceRecord afterServiceRecord) { List list = afterServiceRecordMapper.selectAfterServiceRecordList(afterServiceRecord); list.forEach(record -> { AfterServiceImgs param = new AfterServiceImgs(); @@ -99,13 +87,12 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 结果 */ @Override - public int insertAfterServiceRecord(AfterServiceRecord afterServiceRecord) - { + public int insertAfterServiceRecord(AfterServiceRecord afterServiceRecord) { afterServiceRecord.setCreateTime(DateUtils.getNowDate()); int result = afterServiceRecordMapper.insertAfterServiceRecord(afterServiceRecord); - if(afterServiceRecord.getImgsList() != null && afterServiceRecord.getImgsList().size() > 0){ - afterServiceRecord.getImgsList().forEach(imgUrl->{ + if (afterServiceRecord.getImgsList() != null && afterServiceRecord.getImgsList().size() > 0) { + afterServiceRecord.getImgsList().forEach(imgUrl -> { imgUrl.setAfterServiceRecordId(Long.valueOf(afterServiceRecord.getId())); afterServiceImgsService.insertAfterServiceImgs(imgUrl); }); @@ -121,11 +108,11 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService */ @Override @Transactional(rollbackFor = Exception.class) - public int updateAfterServiceRecord(AfterServiceRecord param) throws Exception { + public int updateAfterServiceRecord(AfterServiceRecord param) throws BaseAdaPayException { AfterServiceRecord afterServiceRecord = this.selectAfterServiceRecordById(param.getId()); Assert.notNull(afterServiceRecord, "售后记录不存在!"); // 实际同意,需要发起退款,减少原单分账金额-调用退款接口 - if(param.getCustomerFinalCheck() != null && param.getCustomerFinalCheck() == 1){ + if (param.getCustomerFinalCheck() != null && param.getCustomerFinalCheck() == 1) { OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId()); Assert.notNull(orderDetail, "子单不存在!"); FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId()); @@ -133,82 +120,42 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); Assert.notNull(orderMaster, "找不到对应的订单"); FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId()); - Assert.notNull(financialMaster, "找不到订单"); + Assert.notNull(financialMaster, "找不到支付记录"); + Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); + Assert.isTrue(PayStatus.PAID.getCode().equals(financialMaster.getPayStatus()), "订单未支付"); + // 申请退款金额 BigDecimal refundMoney; - if(ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())){ + if (ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())) { refundMoney = afterServiceRecord.getAgreedRefund(); - }else { + } else { refundMoney = afterServiceRecord.getRefund(); } - // 判断是否只有一个师傅接单,且单据派单完成. - 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){ + if (refundMoney.compareTo(financialDetail.getPayMoney()) < 0) { + // 申请退款金额 < 子单金额 financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(afterServiceRecord.getAgreedRefund())); - }else { - refundMoney = financialDetail.getPayMoney(); - financialDetail.setPayMoney(BigDecimal.ZERO); - } - - // 发起支付撤销 - - if(PayTypeEnum.ALIPAY_QR.getCode().equals(orderMaster.getPayType()) && ! PayStatus.PAID.getCode().equals(financialMaster.getPayStatus())){ financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney)); + // 更新主/子财务单金额 financialMasterService.updateFinancialMaster(financialMaster); financialDetailService.updateFinancialDetail(financialDetail); - param.setOriginalRefund(BigDecimal.ZERO); + // 发起支付撤销 + JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), + String.valueOf(refundMoney), RefundType.RAS); + if (AdapayStatusEnum.pending.code.equals(response.getString("status"))) { + param.setOriginalRefund(refundMoney); + param.setRefundApplyTime(new Date()); + } else { + if ("reverse_amt_over".equals(response.getString("error_code"))) { + throw new BaseException("退款金额超出订单金额"); + } else { + throw new BaseException("发起退款异常"); + } + } } else { - Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); - JSONObject response = null; - try { - response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), String.valueOf(refundMoney), RefundType.RAS); - if (AdapayStatusEnum.pending.code.equals(response.getString("status"))) { - financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney)); - financialMasterService.updateFinancialMaster(financialMaster); - financialDetailService.updateFinancialDetail(financialDetail); - param.setOriginalRefund(refundMoney); - param.setRefundApplyTime(new Date()); - } else if (AdapayStatusEnum.failed.code.equals(response.getString("status"))) { - if("reverse_amt_over".equals(response.getString("error_code"))){ - throw new BaseException("退款金额大于最后一次支付,请撤销改金额再发起"); - }else { - 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()); - } - } - - // 判断子单payMoney是否已经是0了,是的话就修改子单状态为已取消;主单状态会随之更改,不用做处理。 - if (financialDetail.getPayMoney().compareTo(BigDecimal.ZERO) == 0) { - OrderDetail orderDetail2Update = new OrderDetail(); - orderDetail2Update.setId(orderDetail.getId()); - orderDetail2Update.setOrderStatus(OrderStatus.CANCEL.code()); - int affectedOrderDetail = orderDetailService.updateOrderDetail(orderDetail2Update); - if (affectedOrderDetail != 1) { - throw new Exception("子订单修改状态为已取消失败。"); - } + // 子单全额退款 直接走取消流程 + orderDetailService.cancelAgree(orderDetail.getId(), 1); } } - param.setUpdateTime(DateUtils.getNowDate()); + param.setUpdateTime(new Date()); return afterServiceRecordMapper.updateAfterServiceRecord(param); } @@ -219,8 +166,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 结果 */ @Override - public int deleteAfterServiceRecordByIds(String ids) - { + public int deleteAfterServiceRecordByIds(String ids) { return afterServiceRecordMapper.deleteAfterServiceRecordByIds(Convert.toStrArray(ids)); } @@ -232,27 +178,26 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService * @return 结果 */ @Override - public int deleteAfterServiceRecordById(String id) - { + public int deleteAfterServiceRecordById(String id) { return afterServiceRecordMapper.deleteAfterServiceRecordById(id); } - private boolean checkIsOnlyServer(Long orderMasterId, Long workId){ + private boolean checkIsOnlyServer(Long orderMasterId, Long workId) { // 找出原单的数量 - List orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId); + List orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId); // 找出原单关联的细单的商品数量 List orderDetailList = orderDetailService.selectByOrderMasterId(orderMasterId); - for (OrderDetail detail : orderDetailList){ + for (OrderDetail detail : orderDetailList) { // 非一个师傅接单 - if(!workId.equals(detail.getWorkerId())){ + 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())){ + for (OrderGoods masterGoods : orderGoodsList) { + if (Objects.equals(masterGoods.getGoodsStandardId(), detailGoods.getGoodsStandardId())) { masterGoods.setGoodsNum(masterGoods.getGoodsNum() - detailGoods.getGoodsNum()); } } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index 438aad19..c58377d3 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -210,7 +210,6 @@ public class OrderDetailServiceImpl implements OrderDetailService { } @Override - @Transactional(rollbackFor = Exception.class) public void applyForCancel(Long orderDetailId) throws BaseAdaPayException { OrderDetail orderDetail = selectById(orderDetailId); Assert.notNull(orderDetail, "找不到对应的子订单"); @@ -227,16 +226,14 @@ public class OrderDetailServiceImpl implements OrderDetailService { } if (allCancel) { logger.info("主订单[id={}]下所有的子订单都被取消 直接进入主订单取消流程", orderDetail.getOrderMasterId()); - orderMasterService.cancel(orderDetail.getOrderMasterId()); + orderMasterService.applyForCancel(orderDetail.getOrderMasterId()); return; } switch (orderDetail.getOrderStatus()) { case 0: case 1: // 待接单和待排期状态可直接取消 - orderDetailMapper.updateStatus(orderDetailId, OrderStatus.CANCEL.code()); - // 发起退款 - refund(orderDetail); + cancel(orderDetailId); break; case 2: // 待上门状态需要师傅同意才能取消 orderDetailMapper.updateStatus(orderDetailId, OrderStatus.GOING_CANCEL.code()); @@ -252,71 +249,113 @@ public class OrderDetailServiceImpl implements OrderDetailService { } } + /** + * 子订单取消 + * + * @param orderDetailId 子订单ID + */ + @Transactional(rollbackFor = Exception.class) + public void cancel(long orderDetailId) throws BaseAdaPayException { + OrderDetail orderDetail = selectById(orderDetailId); + Assert.notNull(orderDetail, "找不到对应的子订单"); + + // 查询出所有的子订单 就走主订单取消流程 + List orderDetails = orderDetailMapper.selectByOrderMasterId(orderDetail.getOrderMasterId()); + // 如果除了这个子订单以外 没有其它未取消的订单 + boolean allCancel = true; + for (OrderDetail od : orderDetails) { + if (!od.getId().equals(orderDetailId)) { + if (!od.getOrderStatus().equals(OrderStatus.CANCEL.code())) { + allCancel = false; + } + } + } + // 判断主单是否全部派单 + boolean allAssign = orderMasterService.isAllAssign(orderDetail.getOrderMasterId()); + // 如果主单已经全部派单 并且 其它订单都已经取消 + if (allAssign && allCancel) { + logger.info("主订单[id={}]下所有的子订单都被取消 直接进入主订单取消流程", orderDetail.getOrderMasterId()); + orderMasterService.cancelAgree(orderDetail.getOrderMasterId(), 1); + return; + } + orderDetailMapper.updateStatus(orderDetailId, OrderStatus.CANCEL.code()); + // 发起退款 + refund(orderDetail); + } + /** * 子单全额退款 * * @param orderDetail * @throws BaseAdaPayException */ - @Transactional(rollbackFor = Exception.class) public void refund(OrderDetail orderDetail) throws BaseAdaPayException { Long orderDetailId = orderDetail.getId(); OrderMaster orderMaster = orderMasterMapper.selectById(orderDetail.getOrderMasterId()); Assert.notNull(orderMaster, "OrderMaster is null !"); FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId()); Assert.notNull(financialMaster, "FinancialMaster is null !"); + FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(orderDetailId); + Assert.notNull(financialMaster, "找不到支付记录"); + Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); + Assert.isTrue(PayStatus.PAID.getCode().equals(financialMaster.getPayStatus()), "订单未支付"); - // 退款金额 - BigDecimal refundMoney = BigDecimal.ZERO; + // 主财务单金额 + BigDecimal masterMoney = financialMaster.getPayMoney(); + // 子财务单金额 + BigDecimal detailMoney = financialDetail.getPayMoney(); List fcrList = financialChangeRecordService.selectByDetailIds(orderDetailId.toString()); // 先把这个子单的加价单全退了 for (FinancialChangeRecord fcr : fcrList) { - financialChangeRecordService.refund(orderDetail.getDeptId(), fcr); - // 子单对应的财务单里也加上了加价单的金额 所以这里减掉 - refundMoney = refundMoney.subtract(fcr.getChangeMoney()); - } - - List fdList = financialDetailService.selectListByOrderDetailId(orderDetailId); - for (FinancialDetail fd : fdList) { - if (PayStatus.REFUND.getCode().equals(fd.getPayStatus()) || - PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) || - PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) { - // 减去退款中和已退款的子财务单金额 - refundMoney = refundMoney.subtract(fd.getPayMoney()); - } else if (PayStatus.PAID.getCode().equals(fd.getPayStatus())) { - refundMoney = refundMoney.add(fd.getPayMoney()); + if (PayStatus.PAID.getCode().equals(fcr.getPayStatus()) || PayStatus.PAYED_ADD.getCode().equals(fcr.getPayStatus())) { + executor.execute(() -> financialChangeRecordService.refund(orderMaster.getDeptId(), fcr)); + // 主/子财务单里也加上了加价单的金额 所以这里减掉 + masterMoney = masterMoney.subtract(fcr.getChangeMoney()); + detailMoney = detailMoney.subtract(fcr.getChangeMoney()); } } - if (BigDecimal.ZERO.compareTo(refundMoney) > -1) { - logger.info("子订单[id={}]待退款金额<=0,不需要退款", orderDetailId); + // detailMoney ≤ 0 不需要退款 + if (BigDecimal.ZERO.compareTo(detailMoney) > -1) { + logger.info("子订单[{}]不需要退款 payMoney={}元", orderDetail.getId(), detailMoney); + // 更新子财务单金额和状态 + financialDetail.setPayStatus(PayStatus.REFUND.getCode()); + financialDetail.setPayMoney(detailMoney); + financialDetailService.updateFinancialDetail(financialDetail); + + // 更新主财务单金额 + financialMaster.setPayMoney(masterMoney); + financialMasterService.updateFinancialMaster(financialMaster); return; } - // 子订单的退款肯定≤主订单金额 否则肯定算错了 - Assert.isTrue(refundMoney.compareTo(financialMaster.getPayMoney()) < 1, "订单金额异常"); + // 更新子财务单金额和状态 + financialDetail.setPayMoney(detailMoney); + financialDetail.setPayStatus(PayStatus.REFUNDING.getCode()); + financialDetailService.updateFinancialDetail(financialDetail); + + // 更新主财务单金额 + financialMaster.setPayMoney(masterMoney.subtract(detailMoney)); + financialMasterService.updateFinancialMaster(financialMaster); // 发起退款 - String refundAmt = AdapayUtils.bigDecimalToString(refundMoney); + String refundAmt = AdapayUtils.bigDecimalToString(detailMoney); + logger.info("子订单[id={}]发起退款: refundAmt={}元", orderDetailId, refundAmt); JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt, RefundType.ROD); - logger.debug("子订单退款结果: " + response.toJSONString()); boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) || AdapayStatusEnum.succeeded.code.equals(response.getString("status")); // 如果退款失败 这里携带失败原因抛出异常 回滚订单状态 Assert.isTrue(status, response.getString("error_msg")); logger.info("子订单[id={}]退款成功", orderDetailId); + executor.execute(() -> { + String reverseId = response.getString("id"); + FinancialDetail fd2update = new FinancialDetail(); + fd2update.setId(financialDetail.getId()); + fd2update.setReverseId(reverseId); + financialDetailService.updateFinancialDetail(fd2update); + }); - String reverseId = response.getString("id"); - for (FinancialDetail fd : fdList) { - if (PayStatus.PAID.getCode().equals(fd.getPayStatus())) { - FinancialDetail fd2update = new FinancialDetail(); - fd2update.setId(fd.getId()); - fd2update.setPayStatus(PayStatus.REFUND.getCode()); - fd2update.setReverseId(reverseId); - financialDetailService.updateFinancialDetail(fd2update); - } - } } @Override @@ -326,10 +365,7 @@ public class OrderDetailServiceImpl implements OrderDetailService { Assert.notNull(orderDetail, "找不到对应的子订单"); if (Integer.valueOf(1).equals(agree)) { // 师傅同意取消订单 - // 修改主订单状态为已取消 - orderDetailMapper.updateStatus(orderDetailId, OrderStatus.CANCEL.code()); - // 发起退款 - refund(orderDetail); + cancel(orderDetailId); } else { // 师傅不同意取消订单 Integer orderStatus = orderDetail.getOrderStatus(); @@ -633,4 +669,14 @@ public class OrderDetailServiceImpl implements OrderDetailService { public void refundSucceeded(String reverseId) { financialDetailService.refundSucceeded(reverseId); } + + @Override + public int updateStatus(Long id, int status) { + for (OrderStatus os : OrderStatus.values()) { + if (status == os.code()) { + return orderDetailMapper.updateStatus(id, status); + } + } + throw new IllegalArgumentException("Unknown OrderStatus: " + status); + } } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index 068e52fd..a0140843 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -6,13 +6,18 @@ import com.ghy.common.adapay.model.DivMember; import com.ghy.common.adapay.model.PaymentDTO; import com.ghy.common.constant.UserConstants; import com.ghy.common.core.text.Convert; -import com.ghy.common.enums.*; +import com.ghy.common.enums.AdapayOrderType; +import com.ghy.common.enums.OrderStatus; +import com.ghy.common.enums.PayStatus; +import com.ghy.common.enums.RefundType; import com.ghy.common.utils.AdapayUtils; import com.ghy.order.domain.OrderDetail; +import com.ghy.order.domain.OrderGoods; import com.ghy.order.domain.OrderMaster; import com.ghy.order.mapper.OrderMasterMapper; import com.ghy.order.request.AppOrderRequest; import com.ghy.order.service.OrderDetailService; +import com.ghy.order.service.OrderGoodsService; import com.ghy.order.service.OrderMasterService; import com.ghy.payment.domain.FinancialChangeRecord; import com.ghy.payment.domain.FinancialDetail; @@ -56,6 +61,8 @@ public class OrderMasterServiceImpl implements OrderMasterService { @Resource private OrderDetailService orderDetailService; @Resource + private OrderGoodsService orderGoodsService; + @Resource private FinancialMasterService financialMasterService; @Resource private FinancialDetailService financialDetailService; @@ -279,7 +286,7 @@ public class OrderMasterServiceImpl implements OrderMasterService { @Override @Transactional(rollbackFor = Exception.class) - public void cancel(Long orderMasterId) throws BaseAdaPayException { + public void applyForCancel(Long orderMasterId) throws BaseAdaPayException { OrderMaster orderMaster = selectById(orderMasterId); Assert.notNull(orderMaster, "找不到对应的订单"); switch (orderMaster.getOrderStatus()) { @@ -434,4 +441,18 @@ public class OrderMasterServiceImpl implements OrderMasterService { public void refundSucceeded(String reverseId) { financialMasterService.refundSucceeded(reverseId); } + + @Override + public boolean isAllAssign(Long orderMasterId) { + OrderMaster orderMaster = orderMasterMapper.selectById(orderMasterId); + Assert.notNull(orderMaster, "OrderMaster is null!!!"); + // 先判断主订单是否派完单 + List masterGoods = orderGoodsService.selectByOrderMasterId(orderMasterId); + long masterCount = masterGoods.stream().mapToInt(OrderGoods::getGoodsNum).sum(); + long detailCount = orderDetailService.selectByOrderMasterId(orderMasterId).stream().mapToInt(x -> { + List detailGoods = orderGoodsService.selectByOrderDetailId(x.getId()); + return detailGoods.stream().mapToInt(OrderGoods::getGoodsNum).sum(); + }).sum(); + return masterCount == detailCount; + } } diff --git a/ghy-order/src/main/resources/mapper/order/OrderGoodsMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderGoodsMapper.xml index 1fe69f83..3c3bacf8 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderGoodsMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderGoodsMapper.xml @@ -92,11 +92,7 @@