diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index faa011180..1f54b38f6 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -1,9 +1,14 @@ package com.iformall.schedule; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; import com.iformall.config.PayProperty; import com.iformall.domain.po.*; import com.iformall.enums.EnumAppType; +import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumCouponType; import com.iformall.enums.EnumPayType; +import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.WxPayOrderService; import com.iformall.service.WxRefundOrderService; @@ -15,6 +20,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.List; @Component @@ -50,20 +56,41 @@ public class CouponOrderExpiringSchedule { List list = wxCouponOrderMapper.findExpiredCouponOrderByValidDate(); + list.parallelStream().forEach(co -> { + // 券过期与退款分离 + couponOrderExpire(co); + + if(!co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { + // 非储值卡, 可以退款 + WxAppinfo appinfo = new WxAppinfo(); + appinfo.setTenantId(co.getTenantId()); + appinfo.setType(EnumAppType.B.getCode()); + appinfo = wxAppinfoMapper.findList(appinfo).get(0); + + try { + wxRefundOrderService.createRefundOrder(payProperty.isReal(), appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null); + } catch (Exception e) { + logger.error("退款失败:"+e.getMessage()+"couponOrderId="+co.getId()); + } + } - for(WxCouponOrder co:list) { - - WxAppinfo appinfo = new WxAppinfo(); - appinfo.setTenantId(co.getTenantId()); - appinfo.setType(EnumAppType.B.getCode()); - appinfo = wxAppinfoMapper.findList(appinfo).get(0); + }); + } - try { - wxRefundOrderService.createRefundOrder(payProperty.isReal(), appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null); - } catch (Exception e) { - logger.error("退款失败:"+e.getMessage()+"couponOrderId="+co.getId()); - continue; - } + private void couponOrderExpire(WxCouponOrder co) { + // 标记 couponOrder过期 + WxCouponOrder wxCouponOrder = new WxCouponOrder(); + wxCouponOrder.setId(co.getId()); + if(co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_OVER_TIME.getCode()); // 卡线下退款 + } else { + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()); //券已过期 + } + wxCouponOrder.setUpdateDate(new Date()); + try { + wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); } } } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index f7f205af2..b36725355 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -300,10 +300,6 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); } - if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode())) { - logger.error("已过期: couponOrder-" + couponOrderId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); - } if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode())) { logger.error("已退款: couponOrder-" + couponOrderId); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME);