From 02653eab55ba71f1343e365fd088313d58c3e84e Mon Sep 17 00:00:00 2001 From: hupeng Date: Thu, 24 Jan 2019 23:21:47 +0800 Subject: [PATCH] =?UTF-8?q?[BUG][=E4=BC=9A=E5=91=98]:=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=8F=91=E5=88=B8=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=9B=B4=E6=94=B9,=E7=BB=9F=E4=B8=80=E8=80=83=E8=99=91?= =?UTF-8?q?=E5=A4=9A=E5=BC=A0=E5=88=B8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/schedule/CouponSendSchedule.java | 98 ++++++++++++------- .../mapper/WxCUserBasicInfoMapper.xml | 20 ++-- 2 files changed, 76 insertions(+), 42 deletions(-) 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 + +