diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 131a60585..a9e7d4daf 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -193,7 +193,10 @@ public class WxPayOrderController extends BaseController { //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 if (wxPayOrderService.isOrderGroupCoupon(payOrder, wxCoupon)) { - if (order.getOrderStatus()!=EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()) { + if(order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode())) { + return new ResultData(Result.SUCCESS, "拼团失败:人员已满,将稍后退款。"); + } + if (!order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode())) { return new ResultData(Result.SUCCESS, "支付状态更新成功", order); } }else { diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java index 47f06f57c..c5fd706de 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/OrderExpiringSchedule.java @@ -140,14 +140,26 @@ public class OrderExpiringSchedule { // 拼团取消 WxOrder order = new WxOrder(); - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); - wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { +// order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); +// wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { +// try { +// proxy.orderGroupExpired((WxOrder) o,true,true,payWay); +// } catch (Exception e) { +// logger.error("拼团取消失败" + e.getMessage()); +// } +// }); + Date groupExpireDate = new Date(curDate.getTime() - NORMAL_TIME_OUT ); + dateMap.put("type", EnumOrderType.COUPON.getCode()); + dateMap.put("endDate", groupExpireDate); + List orderGroups = wxOrderMapper.findListOfUnpaidGroupOrderByDate(dateMap); + orderGroups.stream().forEach( o -> { try { - proxy.orderGroupExpired((WxOrder) o,true,true,payWay); + proxy.orderGroupExpired(o,true,true,payWay); } catch (Exception e) { - logger.error("拼团取消失败" + e.getMessage()); + logger.error("砍价券支付过期失败" + e.getMessage()); } }); + //更新拼团过期状态 wxOrderMapper.updateOrderStatusForGroup(); @@ -192,8 +204,28 @@ public class OrderExpiringSchedule { } }); + //此处是拼团完成后,会将其他失效的订单置成该状态。需要查询是否已经付款,如果已经付款,则退款,退款回回滚库存。如果没付款,则主动回滚库存 + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); + wxOrderMapper.selectList(new QueryWrapper(order)).stream().forEach(o -> { + try { + proxy.expiredCheckAndReturnMoney((WxOrder) o,payWay); + } catch (Exception e) { + logger.error("参团失败退款失败" + e.getMessage()); + } + }); + } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void expiredCheckAndReturnMoney(WxOrder wxOrder,EnumPayWay payWay) throws MallinkException, Exception { + if (wxPaySuccess(wxOrder, false, payWay)) { + orderGroupExpired(wxOrder,false,false,payWay); + returnMoney(wxOrder,payWay); + }else { + orderGroupExpired(wxOrder,false,true,payWay); + } + } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void expiredAndReturnMoney(WxOrder wxOrder,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception { orderGroupExpired(wxOrder,checkRealPay,false,payWay); @@ -341,7 +373,7 @@ public class OrderExpiringSchedule { payOrderQ.updateTenantInfo(order); payOrderQ.setCUserId(order.getCUserId()); payOrderQ.setOrderId(order.getId()); - payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; List list = wxPayOrderMapper.findList(payOrderQ); diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java index d3dce2f12..7756a08a2 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderStatus.java @@ -24,7 +24,9 @@ public enum EnumOrderStatus { ORDER_STATUS_COOPERATING_FAILD(14, "参团失败"), ORDER_STATUS_COOPERATING_UNPAID(15, "拼团待付款"),//占库存 ORDER_STATUS_COOPERATING_BREAK(16, "拼团取消"), - ORDER_STATUS_COOPERATING_SCHEDU_REFUND(99,"订单定时状态-需要返款和回滚库存,无需再次查询真实支付状态") + ORDER_STATUS_COOPERATING_SCHEDU_REFUND(99,"订单定时状态-需要返款和回滚库存,无需再次查询真实支付状态"), + ORDER_STATUS_COOPERATING_COMPLETE_REFUND(98,"拼团完成会更新未支付的为此状态,未有效的订单统一置成该状态") + ; public static EnumOrderStatus getEnum(Integer code) { for (EnumOrderStatus value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java index 4dbc72579..224151a8f 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderMapper.java @@ -21,6 +21,8 @@ public interface WxOrderMapper extends CommonMapper { List findListOfUnpaidPressOrderByDate(Map dateMap); List findListOfCompleteUnPaidPressOrderByDate(Map dateMap); + List findListOfUnpaidGroupOrderByDate(Map dateMap); + List findListOfCUser(WxOrder wxOrder); List selectDetailOfCUser(WxOrder wxOrder); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java index 2bd01210e..f5132fb61 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -84,6 +84,9 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { //此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; + if (remainPeople < 0) { + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,参团人数已满,将稍后退款."); + } //Integer remainPeople = wxOrderGroup.getRemainPeople()-1; wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); wxOrderGroup.setUpdateDate(new Date()); @@ -132,9 +135,11 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { //此处不要抛出异常,会导致事务回滚,状态写不上 return; }else { - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); wxOrderMapper.updateById(order); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团人数已满,将稍后退款。"); + //此处不要抛出异常,会导致事务回滚,状态写不上 + //throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团人数已满,将稍后退款。"); + return; } } @@ -244,7 +249,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { //temp.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_BREAK.getCode()); //拼团取消。定时会处理退款 - temp.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); + temp.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); wxOrderMapper.updateById(temp); } } 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 ec14ea0f8..180f05717 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -599,7 +599,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { payOrderQ.updateTenantInfo(wxOrder); payOrderQ.setCUserId(wxOrder.getCUserId()); payOrderQ.setOrderId(wxOrder.getId()); - payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); WxPayOrder payOrder = null; List list = wxPayOrderMapper.findList(payOrderQ); diff --git a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml index 91367a9df..7372be060 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderGroupMapper.xml @@ -95,7 +95,7 @@ and o.order_group_id=#{orderGroupId} - and o.order_status in(10,11,12,13,14,15,16) + and o.order_status in(10,11,12,13,14,15,16,98,99) order by o.id desc,o.order_status diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index d4ad86213..0507938de 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -218,6 +218,22 @@ AND unix_timestamp(`update_date`) < unix_timestamp(#{endDate,jdbcType=TIMESTAMP}) + +