diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java index f1da51168..5b15abd0e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxUserStructureController.java @@ -254,6 +254,8 @@ public class WxUserStructureController extends BaseController { @ApiOperation("查询会员数量") @GetMapping("/findUserDataCount") public ResultData findUserCount(Date startTime, Date endTime) { + + final int daysBefore = 29; logger.debug("[" + getIpAddr() + "] WxUserStructureController::findUserCount"); WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); dto.setTenantId(getTenantId()); @@ -280,7 +282,7 @@ public class WxUserStructureController extends BaseController { long wxtodayCount = wxCUserService.findCount(dto);//今天新增 List wxnewCountVos = new ArrayList<>();//每日新增会员数 int j = 1; - for (int i = 29; i >= 0; i--) { + for (int i = daysBefore; i >= 0; i--) { c.clear(); c.setTime(today); c.add(Calendar.DAY_OF_YEAR, -i); @@ -298,7 +300,7 @@ public class WxUserStructureController extends BaseController { List wxallCountVos = new ArrayList<>();//累计会员数 c.clear(); c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -30); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); dto.setEndTime(c.getTime()); dto.setStartTime(null); long firstDay = wxCUserService.findCount(dto);//统计的第一天总数 @@ -341,7 +343,7 @@ public class WxUserStructureController extends BaseController { } private Map getMemberData(WxCUserBasicInfoDto dto) { - + final int daysBefore = 29; long allCount = wxCUserBasicInfoService.findCount(dto);//总量 Calendar c = Calendar.getInstance(); @@ -354,7 +356,7 @@ public class WxUserStructureController extends BaseController { long todayCount = wxCUserBasicInfoService.findCount(dto);//今天新增 List newCountVos = new ArrayList<>();//每日新增会员数 int j = 1; - for (int i = 29; i >= 0; i--) { + for (int i = daysBefore; i >= 0; i--) { c.clear(); c.setTime(today); c.add(Calendar.DAY_OF_YEAR, -i); @@ -372,7 +374,7 @@ public class WxUserStructureController extends BaseController { List allCountVos = new ArrayList<>();//累计会员数 c.clear(); c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -30); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); dto.setEndTime(c.getTime()); dto.setStartTime(null); long firstDay = wxCUserBasicInfoService.findCount(dto);//统计的第一天总数 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(); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantShopServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantShopServiceImpl.java index 2e1c0ff01..784526732 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantShopServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantShopServiceImpl.java @@ -35,6 +35,7 @@ public class WxMerchantShopServiceImpl implements WxMerchantShopService { @Override public PageInfo queryShopList(WxMerchantShop record, Integer pageIndex, Integer pageSize) { List resultlist=new ArrayList<>(); + PageHelper.startPage(pageIndex, pageSize); List merchantShops = wxMerchantShopMapper.findList(record); for(WxMerchantShop merchantShop:merchantShops){ @@ -45,7 +46,7 @@ public class WxMerchantShopServiceImpl implements WxMerchantShopService { resultlist.add(shopList.get(0)); } } - PageHelper.startPage(pageIndex, pageSize); + PageInfo pageInfo = new PageInfo<>(resultlist); return pageInfo; } diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 5b2408c5e..7f9bd8415 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -181,24 +181,32 @@ + + 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 + +