diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java index 3ace0e8f1..3fe9303ff 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxCUserTagsSchedule.java @@ -51,10 +51,10 @@ public class WxCUserTagsSchedule { //活跃时间在10天内的 Calendar startA = Calendar.getInstance(); startA.setTime(curDate); - startA.add(Calendar.DAY_OF_YEAR, -1); + startA.add(Calendar.DAY_OF_YEAR, -10); wxCUserBasicInfo.setActiveStartTime(startA.getTime()); wxCUserBasicInfo.setActiveEndTime(curDate); - int pageIndex = 1; + int pageIndex = 0; final int pageSize = 5000; PageInfo page; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java index 704bfa2fd..fc96c819b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxMerchantVo.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.base.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; import java.util.List; @JsonIgnoreProperties(value = {"handler"}) @@ -91,4 +92,7 @@ public class WxMerchantVo extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "客服电话", name = "linkLinePhone") private String linkLinePhone; + + @io.swagger.annotations.ApiModelProperty(value = "置顶时间", name = "topTime") + private Date topTime; } 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 203fd4bc5..6d1980844 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -72,32 +72,30 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { WxPayOrderMapper wxPayOrderMapper; private int updateOrderGroup(WxOrderGroup wxOrderGroup,WxOrder order, WxCoupon wxCoupon) { - //锁住人数 - long time = System.currentTimeMillis() + RedisLock.LONG_TIMEOUT; - String timeStr = String.valueOf(time); - boolean grouppeopleLock = redisLock.lock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); - if (!grouppeopleLock) { - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团锁定失败,请稍后再试。"); - } - //此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 - int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); - Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; - //Integer remainPeople = wxOrderGroup.getRemainPeople()-1; - wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); - wxOrderGroup.setUpdateDate(new Date()); - wxOrderGroup.setRemainPeople(remainPeople); - logger.info("非首次拼团,更新拼团信息, 剩余人数-1"); - int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); - if (row != 1) { - //错误,更新状态,定时任务会发起退款,回滚库存 - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); - wxOrderMapper.updateById(order); - redisLock.unlock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); - throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款."); - }else { - redisLock.unlock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); - } - return remainPeople; + //TODO 并发处理 锁住人数 + //此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 + if (null != order.getOrderGroupId() && (!order.getOrderGroupId().equals(0L))) { + synchronized(order.getOrderGroupId()) { + int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); + Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; + //Integer remainPeople = wxOrderGroup.getRemainPeople()-1; + wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); + wxOrderGroup.setUpdateDate(new Date()); + wxOrderGroup.setRemainPeople(remainPeople); + logger.info("非首次拼团,更新拼团信息, 剩余人数-1"); + int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); + if (row != 1) { + //错误,更新状态,定时任务会发起退款,回滚库存 + order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); + wxOrderMapper.updateById(order); + throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款."); + } + return remainPeople; + } + }else { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"参团错误,非参团订单."); + } + } @Override @@ -317,8 +315,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { orderList = orderList.parallelStream().filter(o -> { return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()) || - o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()) || - o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); + o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); }).sorted(Comparator.comparing(order -> order.getId())).collect(Collectors.toList()); if (!orderList.isEmpty()) { List userList = new ArrayList<>(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 8ae10aa74..ade99bd09 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -230,6 +230,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { WxOrder orderParams = new WxOrder(); orderParams.setOrderGroupId(order.getOrderGroupId()); orderParams.setCUserId(user.getId()); + List orderstatuslist = new ArrayList(); + orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); + orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); + orderParams.setStatusS(orderstatuslist); List olist = wxOrderMapper.findList(orderParams); if (olist == null || olist.size() <=0 ) { throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); diff --git a/mallinkService/src/main/java/com/iformall/utils/RedisLock.java b/mallinkService/src/main/java/com/iformall/utils/RedisLock.java index 48395bc2d..c90d1cceb 100644 --- a/mallinkService/src/main/java/com/iformall/utils/RedisLock.java +++ b/mallinkService/src/main/java/com/iformall/utils/RedisLock.java @@ -148,7 +148,7 @@ public class RedisLock { public boolean setOrderGroupComplateLock(long orderGroupId) { String longstr = stringRedisTemplate.opsForValue().get("orderGroup:complete:"+String.valueOf(orderGroupId)); - if (Long.parseLong(longstr) >= 1L) { + if ((!StringUtils.isEmpty(longstr)) && Long.parseLong(longstr) >= 1L) { return false; } Long rs = stringRedisTemplate.opsForValue().increment("orderGroup:complete:"+String.valueOf(orderGroupId), 1); diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index 5c94e287f..9827ac8d9 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -349,7 +349,7 @@ distinct m.id,m.img_url,m.name,m.link_phone,m.status,m.business_id, m.is_public,m.email,m.title,m.cover_picture,m.sub_business_id, - m.shop_type,m.introduction,m.action_desc,bu.title as business_name,m.link_line_phone + m.shop_type,m.introduction,m.action_desc,bu.title as business_name,m.link_line_phone,m.top_time