| @@ -193,7 +193,10 @@ public class WxPayOrderController extends BaseController { | |||||
| //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 | //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 | ||||
| if (wxPayOrderService.isOrderGroupCoupon(payOrder, wxCoupon)) { | 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); | return new ResultData(Result.SUCCESS, "支付状态更新成功", order); | ||||
| } | } | ||||
| }else { | }else { | ||||
| @@ -140,14 +140,26 @@ public class OrderExpiringSchedule { | |||||
| // 拼团取消 | // 拼团取消 | ||||
| WxOrder order = new WxOrder(); | 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<WxOrder> orderGroups = wxOrderMapper.findListOfUnpaidGroupOrderByDate(dateMap); | |||||
| orderGroups.stream().forEach( o -> { | |||||
| try { | try { | ||||
| proxy.orderGroupExpired((WxOrder) o,true,true,payWay); | |||||
| proxy.orderGroupExpired(o,true,true,payWay); | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("拼团取消失败" + e.getMessage()); | |||||
| logger.error("砍价券支付过期失败" + e.getMessage()); | |||||
| } | } | ||||
| }); | }); | ||||
| //更新拼团过期状态 | //更新拼团过期状态 | ||||
| wxOrderMapper.updateOrderStatusForGroup(); | 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}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| public void expiredAndReturnMoney(WxOrder wxOrder,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception { | public void expiredAndReturnMoney(WxOrder wxOrder,boolean checkRealPay,EnumPayWay payWay) throws MallinkException, Exception { | ||||
| orderGroupExpired(wxOrder,checkRealPay,false,payWay); | orderGroupExpired(wxOrder,checkRealPay,false,payWay); | ||||
| @@ -341,7 +373,7 @@ public class OrderExpiringSchedule { | |||||
| payOrderQ.updateTenantInfo(order); | payOrderQ.updateTenantInfo(order); | ||||
| payOrderQ.setCUserId(order.getCUserId()); | payOrderQ.setCUserId(order.getCUserId()); | ||||
| payOrderQ.setOrderId(order.getId()); | payOrderQ.setOrderId(order.getId()); | ||||
| payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); | |||||
| //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); | |||||
| WxPayOrder payOrder = null; | WxPayOrder payOrder = null; | ||||
| List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ); | List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ); | ||||
| @@ -24,7 +24,9 @@ public enum EnumOrderStatus { | |||||
| ORDER_STATUS_COOPERATING_FAILD(14, "参团失败"), | ORDER_STATUS_COOPERATING_FAILD(14, "参团失败"), | ||||
| ORDER_STATUS_COOPERATING_UNPAID(15, "拼团待付款"),//占库存 | ORDER_STATUS_COOPERATING_UNPAID(15, "拼团待付款"),//占库存 | ||||
| ORDER_STATUS_COOPERATING_BREAK(16, "拼团取消"), | 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) { | public static EnumOrderStatus getEnum(Integer code) { | ||||
| for (EnumOrderStatus value : values()) { | for (EnumOrderStatus value : values()) { | ||||
| @@ -21,6 +21,8 @@ public interface WxOrderMapper extends CommonMapper<WxOrder, Long> { | |||||
| List<WxOrder> findListOfUnpaidPressOrderByDate(Map dateMap); | List<WxOrder> findListOfUnpaidPressOrderByDate(Map dateMap); | ||||
| List<WxOrder> findListOfCompleteUnPaidPressOrderByDate(Map dateMap); | List<WxOrder> findListOfCompleteUnPaidPressOrderByDate(Map dateMap); | ||||
| List<WxOrder> findListOfUnpaidGroupOrderByDate(Map dateMap); | |||||
| List<WxOrderCouponVo> findListOfCUser(WxOrder wxOrder); | List<WxOrderCouponVo> findListOfCUser(WxOrder wxOrder); | ||||
| List<WxOrderCouponVo> selectDetailOfCUser(WxOrder wxOrder); | List<WxOrderCouponVo> selectDetailOfCUser(WxOrder wxOrder); | ||||
| @@ -84,6 +84,9 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { | |||||
| //此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 | //此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 | ||||
| int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); | int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); | ||||
| Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; | Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; | ||||
| if (remainPeople < 0) { | |||||
| throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,参团人数已满,将稍后退款."); | |||||
| } | |||||
| //Integer remainPeople = wxOrderGroup.getRemainPeople()-1; | //Integer remainPeople = wxOrderGroup.getRemainPeople()-1; | ||||
| wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); | wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); | ||||
| wxOrderGroup.setUpdateDate(new Date()); | wxOrderGroup.setUpdateDate(new Date()); | ||||
| @@ -132,9 +135,11 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { | |||||
| //此处不要抛出异常,会导致事务回滚,状态写不上 | //此处不要抛出异常,会导致事务回滚,状态写不上 | ||||
| return; | return; | ||||
| }else { | }else { | ||||
| order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); | |||||
| order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); | |||||
| wxOrderMapper.updateById(order); | 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_BREAK.getCode()); | ||||
| //拼团取消。定时会处理退款 | //拼团取消。定时会处理退款 | ||||
| temp.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); | |||||
| temp.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE_REFUND.getCode()); | |||||
| wxOrderMapper.updateById(temp); | wxOrderMapper.updateById(temp); | ||||
| } | } | ||||
| } | } | ||||
| @@ -599,7 +599,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| payOrderQ.updateTenantInfo(wxOrder); | payOrderQ.updateTenantInfo(wxOrder); | ||||
| payOrderQ.setCUserId(wxOrder.getCUserId()); | payOrderQ.setCUserId(wxOrder.getCUserId()); | ||||
| payOrderQ.setOrderId(wxOrder.getId()); | payOrderQ.setOrderId(wxOrder.getId()); | ||||
| payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); | |||||
| //payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); | |||||
| WxPayOrder payOrder = null; | WxPayOrder payOrder = null; | ||||
| List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ); | List<WxPayOrder> list = wxPayOrderMapper.findList(payOrderQ); | ||||
| @@ -95,7 +95,7 @@ | |||||
| <if test=" null != orderGroupId "> | <if test=" null != orderGroupId "> | ||||
| and o.order_group_id=#{orderGroupId} | and o.order_group_id=#{orderGroupId} | ||||
| </if> | </if> | ||||
| 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 | order by o.id desc,o.order_status | ||||
| </select> | </select> | ||||
| @@ -218,6 +218,22 @@ | |||||
| AND unix_timestamp(`update_date`) < unix_timestamp(#{endDate,jdbcType=TIMESTAMP}) | AND unix_timestamp(`update_date`) < unix_timestamp(#{endDate,jdbcType=TIMESTAMP}) | ||||
| </if> | </if> | ||||
| </select> | </select> | ||||
| <select id="findListOfUnpaidGroupOrderByDate" parameterType="map" resultMap="BaseResultMap"> | |||||
| select | |||||
| <include refid="allColumns"/> | |||||
| from wx_order | |||||
| where order_status = 15 and press_end_date is null | |||||
| <if test="type != null"> | |||||
| AND type = #{type,jdbcType=TINYINT} | |||||
| </if> | |||||
| <if test="startDate != null"> | |||||
| AND unix_timestamp(`create_date`) > unix_timestamp(#{startDate,jdbcType=TIMESTAMP}) | |||||
| </if> | |||||
| <if test="endDate != null"> | |||||
| AND unix_timestamp(`create_date`) < unix_timestamp(#{endDate,jdbcType=TIMESTAMP}) | |||||
| </if> | |||||
| </select> | |||||
| <sql id="allCUserOrderDetailColumns"> | <sql id="allCUserOrderDetailColumns"> | ||||