单师傅全额退款逻辑
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.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.ghy.common.adapay.model.AdapayStatusEnum;
|
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.exception.base.BaseException;
|
||||||
import com.ghy.common.utils.DateUtils;
|
import com.ghy.common.utils.DateUtils;
|
||||||
import com.ghy.common.utils.ObjectUtils;
|
import com.ghy.common.utils.ObjectUtils;
|
||||||
import com.ghy.order.domain.AfterServiceImgs;
|
import com.ghy.order.domain.*;
|
||||||
import com.ghy.order.domain.OrderDetail;
|
import com.ghy.order.service.*;
|
||||||
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.payment.domain.FinancialDetail;
|
import com.ghy.payment.domain.FinancialDetail;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
import com.ghy.payment.service.AdapayService;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ghy.order.mapper.AfterServiceRecordMapper;
|
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 com.ghy.common.core.text.Convert;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
@ -65,6 +60,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderDetailService orderDetailService;
|
private OrderDetailService orderDetailService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OrderGoodsService orderGoodsService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询售后记录
|
* 查询售后记录
|
||||||
*
|
*
|
||||||
|
|
@ -133,23 +131,37 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
Assert.notNull(orderDetail, "子单不存在!");
|
Assert.notNull(orderDetail, "子单不存在!");
|
||||||
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId());
|
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId());
|
||||||
Assert.notNull(financialDetail, "财务子单不存在!");
|
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;
|
BigDecimal refundMoney = BigDecimal.ZERO;
|
||||||
if(ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())){
|
if(ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())){
|
||||||
refundMoney = afterServiceRecord.getAgreedRefund();
|
refundMoney = afterServiceRecord.getAgreedRefund();
|
||||||
}else {
|
}else {
|
||||||
refundMoney = afterServiceRecord.getRefund();
|
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()));
|
financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(afterServiceRecord.getAgreedRefund()));
|
||||||
}else {
|
}else {
|
||||||
refundMoney = financialDetail.getPayMoney();
|
refundMoney = financialDetail.getPayMoney();
|
||||||
financialDetail.setPayMoney(BigDecimal.ZERO);
|
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())){
|
if(PayTypeEnum.ALIPAY_QR.getCode().equals(orderMaster.getPayType()) && ! PayStatus.PAID.getCode().equals(financialMaster.getPayStatus())){
|
||||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
||||||
financialMasterService.updateFinancialMaster(financialMaster);
|
financialMasterService.updateFinancialMaster(financialMaster);
|
||||||
|
|
@ -173,6 +185,14 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
throw new BaseException("发起退款异常");
|
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) {
|
} catch (BaseAdaPayException e) {
|
||||||
throw new BaseException(e.getMessage());
|
throw new BaseException(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -217,4 +237,34 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
||||||
{
|
{
|
||||||
return afterServiceRecordMapper.deleteAfterServiceRecordById(id);
|
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