单师傅全额退款逻辑
This commit is contained in:
parent
ead994fd89
commit
73e9017b7b
|
|
@ -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<FinancialDetail> 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<OrderGoods> orderGoodsList = orderGoodsService.selectByOrderMasterId(orderMasterId);
|
||||
// 找出原单关联的细单的商品数量
|
||||
List<OrderDetail> orderDetailList = orderDetailService.selectByOrderMasterId(orderMasterId);
|
||||
for (OrderDetail detail : orderDetailList){
|
||||
// 非一个师傅接单
|
||||
if(!workId.equals(detail.getWorkerId())){
|
||||
return false;
|
||||
}
|
||||
// 子单数量
|
||||
List<OrderGoods> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue