diff --git a/schedule/src/main/java/com/hfkj/schedule/OrderSchedule.java b/schedule/src/main/java/com/hfkj/schedule/OrderSchedule.java index 3d3b126..7935d3b 100644 --- a/schedule/src/main/java/com/hfkj/schedule/OrderSchedule.java +++ b/schedule/src/main/java/com/hfkj/schedule/OrderSchedule.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 param = new HashMap<>(); + param.put("refundStatus", OrderRefundStatusEnum.status1.getCode()); + // 获取待退款订单 + List 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 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) { + + } + } + + } } diff --git a/service/src/main/java/com/hfkj/service/order/BsOrderRefundService.java b/service/src/main/java/com/hfkj/service/order/BsOrderRefundService.java index 53b3106..16bf98d 100644 --- a/service/src/main/java/com/hfkj/service/order/BsOrderRefundService.java +++ b/service/src/main/java/com/hfkj/service/order/BsOrderRefundService.java @@ -23,7 +23,7 @@ public interface BsOrderRefundService { * 退款金额 * @return */ - boolean refundMoney(BsOrderRefund orderRefund); + Boolean refundMoney(BsOrderRefund orderRefund); /** * 交易订单退款 diff --git a/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java b/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java index e21b7ec..096afcc 100644 --- a/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java +++ b/service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java @@ -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); + } } // 退款成功