| @@ -51,10 +51,10 @@ public class WxCUserTagsSchedule { | |||||
| //活跃时间在10天内的 | //活跃时间在10天内的 | ||||
| Calendar startA = Calendar.getInstance(); | Calendar startA = Calendar.getInstance(); | ||||
| startA.setTime(curDate); | startA.setTime(curDate); | ||||
| startA.add(Calendar.DAY_OF_YEAR, -1); | |||||
| startA.add(Calendar.DAY_OF_YEAR, -10); | |||||
| wxCUserBasicInfo.setActiveStartTime(startA.getTime()); | wxCUserBasicInfo.setActiveStartTime(startA.getTime()); | ||||
| wxCUserBasicInfo.setActiveEndTime(curDate); | wxCUserBasicInfo.setActiveEndTime(curDate); | ||||
| int pageIndex = 1; | |||||
| int pageIndex = 0; | |||||
| final int pageSize = 5000; | final int pageSize = 5000; | ||||
| PageInfo page; | PageInfo page; | ||||
| @@ -5,6 +5,7 @@ import com.iformall.domain.po.base.TenantEntity; | |||||
| import lombok.Data; | import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| import java.util.Date; | |||||
| import java.util.List; | import java.util.List; | ||||
| @JsonIgnoreProperties(value = {"handler"}) | @JsonIgnoreProperties(value = {"handler"}) | ||||
| @@ -91,4 +92,7 @@ public class WxMerchantVo extends TenantEntity { | |||||
| @io.swagger.annotations.ApiModelProperty(value = "客服电话", name = "linkLinePhone") | @io.swagger.annotations.ApiModelProperty(value = "客服电话", name = "linkLinePhone") | ||||
| private String linkLinePhone; | private String linkLinePhone; | ||||
| @io.swagger.annotations.ApiModelProperty(value = "置顶时间", name = "topTime") | |||||
| private Date topTime; | |||||
| } | } | ||||
| @@ -72,32 +72,30 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { | |||||
| WxPayOrderMapper wxPayOrderMapper; | WxPayOrderMapper wxPayOrderMapper; | ||||
| private int updateOrderGroup(WxOrderGroup wxOrderGroup,WxOrder order, WxCoupon wxCoupon) { | 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 | @Override | ||||
| @@ -317,8 +315,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { | |||||
| orderList = orderList.parallelStream().filter(o -> { | orderList = orderList.parallelStream().filter(o -> { | ||||
| return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || | 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_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()); | }).sorted(Comparator.comparing(order -> order.getId())).collect(Collectors.toList()); | ||||
| if (!orderList.isEmpty()) { | if (!orderList.isEmpty()) { | ||||
| List<WxCUserBasicInfo> userList = new ArrayList<>(); | List<WxCUserBasicInfo> userList = new ArrayList<>(); | ||||
| @@ -230,6 +230,10 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| WxOrder orderParams = new WxOrder(); | WxOrder orderParams = new WxOrder(); | ||||
| orderParams.setOrderGroupId(order.getOrderGroupId()); | orderParams.setOrderGroupId(order.getOrderGroupId()); | ||||
| orderParams.setCUserId(user.getId()); | orderParams.setCUserId(user.getId()); | ||||
| List<Integer> orderstatuslist = new ArrayList<Integer>(); | |||||
| orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); | |||||
| orderstatuslist.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); | |||||
| orderParams.setStatusS(orderstatuslist); | |||||
| List<WxOrder> olist = wxOrderMapper.findList(orderParams); | List<WxOrder> olist = wxOrderMapper.findList(orderParams); | ||||
| if (olist == null || olist.size() <=0 ) { | if (olist == null || olist.size() <=0 ) { | ||||
| throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); | throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"未查询到参团订单[user:"+user.getId()+",groupId:"+order.getOrderGroupId()+"]"); | ||||
| @@ -148,7 +148,7 @@ public class RedisLock { | |||||
| public boolean setOrderGroupComplateLock(long orderGroupId) { | public boolean setOrderGroupComplateLock(long orderGroupId) { | ||||
| String longstr = stringRedisTemplate.opsForValue().get("orderGroup:complete:"+String.valueOf(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; | return false; | ||||
| } | } | ||||
| Long rs = stringRedisTemplate.opsForValue().increment("orderGroup:complete:"+String.valueOf(orderGroupId), 1); | Long rs = stringRedisTemplate.opsForValue().increment("orderGroup:complete:"+String.valueOf(orderGroupId), 1); | ||||
| @@ -349,7 +349,7 @@ | |||||
| <sql id="allMerchantVoColumns"> | <sql id="allMerchantVoColumns"> | ||||
| distinct m.id,m.img_url,m.name,m.link_phone,m.status,m.business_id, | 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.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 | |||||
| </sql> | </sql> | ||||
| <select id="getMerchantByCode" parameterType="java.util.Map" resultMap="MerchantVoResultMap"> | <select id="getMerchantByCode" parameterType="java.util.Map" resultMap="MerchantVoResultMap"> | ||||
| @@ -396,6 +396,7 @@ | |||||
| <result column="introduction" jdbcType="VARCHAR" property="introduction"/> | <result column="introduction" jdbcType="VARCHAR" property="introduction"/> | ||||
| <result column="action_desc" jdbcType="VARCHAR" property="actionDesc"/> | <result column="action_desc" jdbcType="VARCHAR" property="actionDesc"/> | ||||
| <result column="link_line_phone" property="linkLinePhone"/> | <result column="link_line_phone" property="linkLinePhone"/> | ||||
| <result column="top_time" property="topTime"/> | |||||
| <collection column="{merchantId=id}" property="shopVoList" | <collection column="{merchantId=id}" property="shopVoList" | ||||
| ofType="com.iformall.domain.vo.WxShopVo" | ofType="com.iformall.domain.vo.WxShopVo" | ||||