主订单取消并发起退款
This commit is contained in:
parent
f31426a97d
commit
7a235f058a
|
|
@ -392,4 +392,29 @@ public class OrderMasterController extends BaseController {
|
|||
public String checkOrderMasterCodeUnique(OrderMaster orderMaster) {
|
||||
return orderMasterService.checkOrderMasterCodeUnique(orderMaster);
|
||||
}
|
||||
|
||||
/**
|
||||
* 消费者申请取消主订单
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
@PostMapping("/cancel")
|
||||
@ResponseBody
|
||||
public AjaxResult cancel(Long orderMasterId) {
|
||||
orderMasterService.cancel(orderMasterId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 师傅审核取消主订单申请
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
* @param agree 0=不同意 1=同意
|
||||
*/
|
||||
@PostMapping("/cancel/agree")
|
||||
@ResponseBody
|
||||
public AjaxResult cancelAgree(Long orderMasterId, Integer agree) {
|
||||
orderMasterService.cancelAgree(orderMasterId, agree);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,16 +36,6 @@ public class PayController {
|
|||
@Resource
|
||||
private FinancialMasterService financialMasterService;
|
||||
|
||||
/**
|
||||
* 确认支付
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
public AjaxResult confirm(Long orderMasterId) throws BaseAdaPayException {
|
||||
orderMasterService.confirm(orderMasterId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
|
|
|
|||
|
|
@ -7,12 +7,16 @@ import java.util.Map;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
* 订单状态
|
||||
*
|
||||
* @author clunt
|
||||
*/
|
||||
public enum OrderStatus implements IEnumType {
|
||||
|
||||
GOING_CANCEL(-2, "待上门时申请取消"),
|
||||
SERVER_CANCEL(-3, "服务中申请取消"),
|
||||
FINISH_CHECK_CANCEL(-4, "待确认时申请取消"),
|
||||
|
||||
RECEIVE(0, "待接单"),
|
||||
PLAIN(1, "待排期"),
|
||||
GOING(2, "待上门"),
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ public interface OrderMasterService {
|
|||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
void confirm(Long orderMasterId) throws BaseAdaPayException;
|
||||
void finish(Long orderMasterId) throws BaseAdaPayException;
|
||||
|
||||
/**
|
||||
* 发起提现
|
||||
|
|
@ -93,4 +93,19 @@ public interface OrderMasterService {
|
|||
* @param amount 提现金额
|
||||
*/
|
||||
void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException;
|
||||
|
||||
/**
|
||||
* 消费者申请取消主订单
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
*/
|
||||
void cancel(Long orderMasterId);
|
||||
|
||||
/**
|
||||
* 师傅同意取消主订单
|
||||
*
|
||||
* @param orderMasterId 主订单ID
|
||||
* @param agree 0=不同意 1=同意
|
||||
*/
|
||||
void cancelAgree(Long orderMasterId, Integer agree);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ 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.AdapayOrderType;
|
||||
import com.ghy.common.enums.FinancialDetailType;
|
||||
import com.ghy.common.enums.OrderStatus;
|
||||
import com.ghy.common.utils.AdapayUtils;
|
||||
import com.ghy.order.domain.OrderMaster;
|
||||
|
|
@ -78,7 +79,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
public int updateOrderMaster(OrderMaster orderMaster) throws BaseAdaPayException {
|
||||
if (orderMaster.getOrderStatus().equals(OrderStatus.FINISH.code())) {
|
||||
logger.info("订单[ID={}]完成,进入确认分账", orderMaster.getId());
|
||||
confirm(orderMaster.getId());
|
||||
finish(orderMaster.getId());
|
||||
}
|
||||
return orderMasterMapper.updateOrderMaster(orderMaster);
|
||||
}
|
||||
|
|
@ -126,7 +127,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void confirm(Long orderMasterId) throws BaseAdaPayException {
|
||||
public void finish(Long orderMasterId) throws BaseAdaPayException {
|
||||
// 校验订单
|
||||
OrderMaster orderMaster = selectById(orderMasterId);
|
||||
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||
|
|
@ -244,4 +245,90 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||
Assert.isTrue(status, response.getString("error_msg"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancel(Long orderMasterId) {
|
||||
OrderMaster orderMaster = selectById(orderMasterId);
|
||||
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||
switch (orderMaster.getOrderStatus()) {
|
||||
case 0: // 待接单状态可直接取消
|
||||
case 1: // 待排期状态可直接取消
|
||||
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||
// 发起退款
|
||||
try {
|
||||
refund(orderMaster);
|
||||
} catch (BaseAdaPayException e) {
|
||||
logger.error("订单[code={}]退款失败", orderMaster.getCode(), e);
|
||||
}
|
||||
break;
|
||||
case 2: // 待上门状态需要师傅同意才能取消
|
||||
updateStatus(orderMasterId, OrderStatus.GOING_CANCEL.code());
|
||||
break;
|
||||
case 3: // 服务中状态需要师傅同意才能取消
|
||||
updateStatus(orderMasterId, OrderStatus.SERVER_CANCEL.code());
|
||||
break;
|
||||
case 4: // 待确认状态需要师傅同意才能取消
|
||||
updateStatus(orderMasterId, OrderStatus.FINISH_CHECK_CANCEL.code());
|
||||
break;
|
||||
default: // 其他状态不可取消
|
||||
throw new IllegalArgumentException("这个订单不能取消了");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelAgree(Long orderMasterId, Integer agree) {
|
||||
OrderMaster orderMaster = selectById(orderMasterId);
|
||||
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||
if (Integer.valueOf(1).equals(agree)) {
|
||||
// 师傅同意取消订单
|
||||
// 修改主订单状态为已取消
|
||||
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||
// 发起退款
|
||||
try {
|
||||
refund(orderMaster);
|
||||
} catch (BaseAdaPayException e) {
|
||||
logger.error("订单[code={}]退款失败", orderMaster.getCode(), e);
|
||||
}
|
||||
} else {
|
||||
// 师傅不同意取消订单
|
||||
Integer orderStatus = orderMaster.getOrderStatus();
|
||||
// 修改主订单状态为原来的状态
|
||||
updateStatus(orderMasterId, Math.abs(orderStatus));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主订单发起退款
|
||||
*
|
||||
* @param orderMaster 主订单
|
||||
*/
|
||||
public void refund(OrderMaster orderMaster) throws BaseAdaPayException {
|
||||
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
|
||||
// 支付状态
|
||||
Integer payStatus = financialMaster.getPayStatus();
|
||||
if (!payStatus.equals(1)) {
|
||||
// 如果状态不是已支付 则不需要退款
|
||||
return;
|
||||
}
|
||||
List<FinancialDetail> financialDetails = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
||||
|
||||
// 主订单实付金额 - 已退款金额 = 待退款金额
|
||||
BigDecimal payMoney = financialMaster.getPayMoney();
|
||||
for (FinancialDetail fd : financialDetails) {
|
||||
if (FinancialDetailType.RETURN_FEE.getCode().equals(fd.getFinancialDetailType())) {
|
||||
// 如果有退款子财务单 则减去子财务单的已退款金额
|
||||
payMoney = payMoney.subtract(fd.getPayMoney());
|
||||
}
|
||||
}
|
||||
|
||||
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
|
||||
logger.info("订单[code={}]待退款金额<=0,不需要退款", orderMaster.getCode());
|
||||
return;
|
||||
}
|
||||
|
||||
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
|
||||
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt);
|
||||
logger.info("退款结果: " + response.toJSONString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public class PayReverseCallbackService implements CallBackService {
|
|||
@Override
|
||||
public void onResponse(JSONObject response) {
|
||||
logger.debug("撤销支付 Response: {}", response.toString());
|
||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) {
|
||||
if (AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
|
||||
String reverseId = response.getString("id");
|
||||
String paymentId = response.getString("payment_id");
|
||||
String reverseAmt = response.getString("reverse_amt");
|
||||
|
|
|
|||
Loading…
Reference in New Issue