提交代码

dev
胡锐 2 days ago
parent 1d6ed5bce8
commit 7de5f7ddd3
  1. 95
      schedule/src/main/java/com/hfkj/schedule/OrderSchedule.java
  2. 2
      service/src/main/java/com/hfkj/service/order/BsOrderRefundService.java
  3. 41
      service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java

@ -1,13 +1,27 @@
package com.hfkj.schedule;
import com.hfkj.service.order.BsOrderService;
import com.hfkj.common.exception.BaseException;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.entity.BsOrder;
import com.hfkj.entity.BsOrderRefund;
import com.hfkj.entity.BsOrderSettle;
import com.hfkj.model.order.OrderChildModel;
import com.hfkj.model.order.OrderModel;
import com.hfkj.service.discount.BsDiscountUserService;
import com.hfkj.service.order.*;
import com.hfkj.sysenum.order.*;
import org.apache.commons.collections4.MapUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 订单结算业务
@ -19,6 +33,16 @@ import java.util.Map;
public class OrderSchedule {
@Resource
private BsOrderService orderService;
@Resource
private BsOrderRefundService orderRefundService;
@Resource
private BsOrderChildService orderChildService;
@Resource
private BsOrderSettleService orderSettleService;
@Resource
private OrderRefundBusiness orderRefundBusiness;
@Resource
private BsDiscountUserService discountUserService;
@Scheduled(cron="0 0/1 * * * ?") //每分钟执行一次
public void cancel() {
@ -33,4 +57,73 @@ public class OrderSchedule {
}
}
}
@Scheduled(cron="0 0/1 * * * ?") //每分钟执行一次
public void refund() {
Map<String,Object> param = new HashMap<>();
param.put("refundStatus", OrderRefundStatusEnum.status1.getCode());
// 获取待退款订单
List<BsOrderRefund> refundList = orderRefundService.getRefundList(param);
for (BsOrderRefund orderRefund : refundList) {
try {
// 订单结算
BsOrderSettle orderSettle = orderSettleService.getData(orderRefund.getOrderNo());
if (orderSettle != null && orderSettle.getLedgerFlag().equals(true)) {
if (orderSettle.getLedgerStatus().equals(OrderSettleLedgerStatusEnum.status6.getCode())) {
// 分账撤销成功
// 资金退款
Boolean refundMoney = orderRefundService.refundMoney(orderRefund);
if (refundMoney != null) {
orderRefund.setRefundStatus(refundMoney?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
orderRefundService.editData(orderRefund);
}
// 退款成功
if (orderRefund.getRefundStatus().equals(OrderRefundStatusEnum.status2.getCode())) {
OrderChildModel orderChild = orderChildService.getDetail(orderRefund.getOrderChildNo());
OrderModel order = orderService.getDetail(orderRefund.getOrderNo());
// 修改子订单可退数量、金额、积分
orderChild.setSurplusRefundCount(0);
orderChild.setSurplusRefundPrice(orderChild.getSurplusRefundPrice().subtract(orderRefund.getRefundPrice()));
orderChild.setSurplusRefundIntegral(orderChild.getSurplusRefundIntegral() - orderRefund.getRefundIntegral());
orderChild.setStatus(orderChild.getSurplusRefundCount()==0? OrderChildStatusEnum.status4.getCode():orderChild.getStatus());
orderChildService.editData(orderChild);
// 处理退款业务
if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) {
try {
orderRefundBusiness.gasOrder(orderRefund);
} catch (BaseException e) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, e.getErrorMsg());
} catch (Exception e) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败");
}
}
// 查询子订单已全部退款
List<OrderChildModel> orderChildList = orderChildService.getOrderChildListByOrderNo(orderChild.getOrderNo());
if (orderChildList.size() == orderChildList.stream().filter(o->o.getStatus().equals(OrderChildStatusEnum.status4.getCode())).collect(Collectors.toList()).size()) {
order.setOrderStatus(OrderStatusEnum.status4.getCode());
order.setRefundTime(new Date());
orderService.editData(order);
if (order.getDeduction().getUserCouponDiscountId() != null) {
// 退回优惠券
discountUserService.revokeUserDiscount(order.getDeduction().getUserCouponDiscountId());
}
}
}
// 删除缓存
orderService.cacheDelete(orderRefund.getOrderNo());
}
}
} catch (Exception e) {
}
}
}
}

@ -23,7 +23,7 @@ public interface BsOrderRefundService {
* 退款金额
* @return
*/
boolean refundMoney(BsOrderRefund orderRefund);
Boolean refundMoney(BsOrderRefund orderRefund);
/**
* 交易订单退款

@ -17,6 +17,7 @@ import com.hfkj.service.gas.BsGasOrderService;
import com.hfkj.service.merchant.BsMerchantService;
import com.hfkj.service.order.*;
import com.hfkj.sysenum.gas.GasOrderCreateType;
import com.hfkj.sysenum.gas.OrderOilStatus;
import com.hfkj.sysenum.merchant.MerchantSourceTypeEnum;
import com.hfkj.sysenum.order.*;
import org.apache.commons.collections4.MapUtils;
@ -70,9 +71,15 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED, isolation = Isolation.READ_UNCOMMITTED)
public boolean refundMoney(BsOrderRefund orderRefund) {
public Boolean refundMoney(BsOrderRefund orderRefund) {
try {
if (OrderPayChannelEnum.type1.getCode() == orderRefund.getRefundPayChannel()) {
// 交易结算
BsOrderSettle orderSettle = orderSettleService.getData(orderRefund.getOrderNo());
if (orderSettle.getLedgerFlag().equals(true) && OrderSettleLedgerStatusEnum.status1.getCode() == orderSettle.getLedgerStatus()) {
orderSettleService.revokeLedger(orderSettle);
return null;
}
// 渠道退款
JSONObject refund = HuiPayService.refund(orderRefund.getAccountMerchantNo(), orderRefund.getAccountMerchantKey(), orderRefund.getOrderNo(), orderRefund.getRefundOrderNo(), orderRefund.getRefundPrice());
if (refund.getString("return_code").equals("000000")) {
@ -170,6 +177,14 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
if (merchant == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的商户");
}
if (orderChild.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) {
// 加油订单
BsGasOrder gasOrder = gasOrderService.getDetailByOrderNo(order.getOrderNo());
if (gasOrder != null) {
gasOrder.setStatus(OrderOilStatus.STATUS5.getNumber());
gasOrderService.updateGasOrder(gasOrder);
}
}
// 创建退款订单
BsOrderRefund orderRefund = new BsOrderRefund();
orderRefund.setMerId(merchant.getId());
@ -228,18 +243,30 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的加油订单");
}
if (gasOrder.getAbnormal().equals(true)) {
orderRefund.setRefundStatus(refundMoney(orderRefund)?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
// 资金退款
Boolean refundMoney = refundMoney(orderRefund);
if (refundMoney != null) {
orderRefund.setRefundStatus(refundMoney?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
}
} else {
if (gasOrder.getChannelType().equals(MerchantSourceTypeEnum.type1.getNumber())
|| gasOrder.getChannelType().equals(MerchantSourceTypeEnum.type3.getNumber())) {
orderRefund.setRefundStatus(refundMoney(orderRefund)?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
// 资金退款
Boolean refundMoney = refundMoney(orderRefund);
if (refundMoney != null) {
orderRefund.setRefundStatus(refundMoney?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
}
}
}
} else {
orderRefund.setRefundStatus(refundMoney(orderRefund)?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
// 资金退款
Boolean refundMoney = refundMoney(orderRefund);
if (refundMoney != null) {
orderRefund.setRefundStatus(refundMoney?OrderRefundStatusEnum.status2.getCode():OrderRefundStatusEnum.status3.getCode());
editData(orderRefund);
}
}
// 退款成功

Loading…
Cancel
Save