diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index 02405aee7..c0d26537a 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -44,6 +44,9 @@ public class CouponSendSchedule { @Autowired private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + @Autowired + private WxCUserMapper wxCUserMapper; + @Autowired private WxCouponSendMapper wxCouponSendMapper; @@ -59,7 +62,7 @@ public class CouponSendSchedule { //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 @Scheduled(cron = "0 0 6 * * ?") // 测试每天6点发券 - //@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 + //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 public void couponSendSchedule() { List mallList = wxMallMapper.findList(new WxMall()); @@ -89,12 +92,12 @@ public class CouponSendSchedule { .sorted(Comparator.comparing(WxLevelConfig::getPoints)) .collect(Collectors.toList()); - for (int i = 0; i < levelConfigList.size(); i++) { - WxLevelConfig l = levelConfigList.get(i); + for (int levelIndex = 0; levelIndex < levelConfigList.size(); levelIndex++) { + WxLevelConfig l = levelConfigList.get(levelIndex); if (l.getCapability() == null) continue; Integer levelStartScore = l.getPoints(); - Integer levelEndScore = levelConfigList.size() < i+1? levelConfigList.get(i+1).getPoints() : null; + Integer levelEndScore = levelIndex+1 < levelConfigList.size() ? levelConfigList.get(levelIndex+1).getPoints() : null; JSONObject jo = null; Long result = null; @@ -107,28 +110,37 @@ public class CouponSendSchedule { } Long sendCount = result; if (sendCount > 0) { - WxCouponSend wxCouponSend = new WxCouponSend(); - wxCouponSend.setTenantId(l.getTenantId()); - wxCouponSend.setSendType(EnumCouponSendSendType.TIMED.getCode()); - wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); - List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); - couponSendList.stream().forEach(cs->{ - if (cs.getRemainInventory() < sendCount){ - logger.error("定时发券:库存不足 levelId="+ l.getId() +" couponId="+ cs.getCouponId()); - return; //下一个券 + + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(l.getTenantId()); + wxCUserBasicInfoDto.setLevelStartScore(levelStartScore); + wxCUserBasicInfoDto.setLevelEndScore(levelEndScore); + List wxCUserBasicInfoList = wxCUserBasicInfoMapper.findListByScore(wxCUserBasicInfoDto); + + logger.info("定时发券:给LEVEL["+ l.getLevel() + + "]积分["+levelStartScore+"-"+levelEndScore+"]发券"+sendCount+"张"); + + wxCUserBasicInfoList.stream().forEach(cu->{ + + WxCouponSend wxCouponSend = new WxCouponSend(); + wxCouponSend.setTenantId(l.getTenantId()); + wxCouponSend.setSendType(EnumCouponSendSendType.TIMED.getCode()); + wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode()); + List couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); + int remain = couponSendList.stream().map(cs->{ + int count = cs.getRemainInventory(); + logger.info("定时发券:给["+ cu.getNickName() + + "]券[" + cs.getTitle() + "]还剩" + + count +"张"); + return count; + }).reduce(Integer::sum).get(); + + if (remain < sendCount){ + logger.error("定时发券:库存不足["+ cu.getNickName() +"]应发"+sendCount+"张,总共剩"+ remain + "张"); + return; } - WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(l.getTenantId()); - wxCUserBasicInfoDto.setLevelStartScore(levelStartScore); - wxCUserBasicInfoDto.setLevelEndScore(levelEndScore); - List wxCUserBasicInfoList = wxCUserBasicInfoMapper.findListByScore(wxCUserBasicInfoDto); - - wxCUserBasicInfoList.stream().forEach(cu->{ - if (cs.getRemainInventory() < sendCount){ - logger.error("定时发券:库存不足 levelId="+ l.getId() +" couponId="+ cs.getCouponId()+"userId="+cu.getId()); - return; //下一个券 - } + int sentCount = couponSendList.stream().map(cs->{ Map params = new HashMap(); params.put("tenantId", cs.getTenantId()); params.put("cUserId", cu.getId()); @@ -136,31 +148,45 @@ public class CouponSendSchedule { params.put("startTime", startTime); params.put("endTime", endTime); params.put("channelType", EnumCouponSendSendType.TIMED.getCode()); + int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); + logger.info("定时发券:已经给["+ cu.getNickName() + + "]券[" + cs.getTitle() + "] " + + count +"张"); + return count; + }).reduce(Integer::sum).get(); - int sentCount = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); - logger.info("定时发券:给["+ cu.getNickName() + - "]已发送券[" + cs.getTitle() + "] " + - sentCount +"张,还需发"+ (sendCount-sentCount) +"张"); + logger.info("定时发券:给["+ cu.getNickName() + + "]总共已发送券" + sentCount + "张,还需发"+ (sendCount-sentCount) +"张"); + + for (int count = 0; count < sendCount - sentCount; count++) { + boolean sent = false; + for(int couponIndex = 0; couponIndex< couponSendList.size(); couponIndex++) { + WxCouponSendVo cs = couponSendList.get(couponIndex); + if (cs.getRemainInventory() <= 0) + continue; - for (int count = 0; count + + cub.id,cub.phone,cub.birthdate,cub.education,cub.sex,cub.email,cub.address,cub.poins,cub.tag_id, + cub.create_date,cub.update_date,cub.tenant_id,cub.name,cub.level,cub.nick_name + +