diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java index 6e776c491..d4e23e2d3 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java @@ -23,18 +23,15 @@ import java.util.*; public class DaliyAmountSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired private WxMallMapper wxMallMapper; @Autowired private WxMerchantMapper wxMerchantMapper; - @Autowired private WxCouponOrderMapper wxCouponOrderMapper; - @Autowired private WxDateAmountRecordService wxDateAmountRecordService; @@ -42,13 +39,64 @@ public class DaliyAmountSchedule { private WxOrderMapper wxOrderMapper; - - @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点盘点前一天的数据 - // @Scheduled(cron = "*/30 * * * * ?") // 测试10秒中一次 @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void daliyAmountSchedule() { + public void daliyAmountMerchant(Date startDate,Date endDate,Calendar cal,WxMerchant merchant){ + Map dateMap = new HashMap(); + dateMap.put("startDate", startDate); + dateMap.put("endDate", endDate); + dateMap.put("merchantId", merchant.getId()); + + List list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap); + logger.info("find " + list.size() + " coupon order from " + startDate + " to " + endDate); + int total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum(); + + logger.info("\nFound " + list.size() + " coupon orders \n" + + "for merchantId:" + merchant.getId() + "\n" + + "from " + startDate + " to " + endDate + "\n" + + "TOTAL ORDER=" + total_price); + + WxDateAmountRecord dateAmountRecord = new WxDateAmountRecord(); + dateAmountRecord.setPayPrice(total_price); + dateAmountRecord.setMerchantId(merchant.getId()); + dateAmountRecord.setTenantId(merchant.getTenantId()); + dateAmountRecord.setType(EnumDateAmtType.PAY_RECORD.getCode()); + dateAmountRecord.setDate(startDate); + dateAmountRecord.setDayOfWeek(cal.get(Calendar.DAY_OF_WEEK)); + dateAmountRecord.setMonth(cal.get(Calendar.MONTH)); + dateAmountRecord.setWeekOfYear(cal.get(Calendar.WEEK_OF_YEAR)); + + wxDateAmountRecordService.saveAmount(dateAmountRecord); + + list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap); + logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate); + total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum(); + logger.info("\nFound " + list.size() + " coupon orders \n" + + "for merchantId:" + merchant.getId() + "\n" + + "from " + startDate + " to " + endDate + "\n" + + "TOTAL VERIFIED=" + total_price); + + dateAmountRecord.setPayPrice(total_price); + dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode()); + wxDateAmountRecordService.saveAmount(dateAmountRecord); + + Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap); + Long countMic = (Long) microPayMap.get("count"); + BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price"); + logger.info("\nFound " + countMic + " order " + "\n" + + "for merchantId:" + merchant.getId() + "\n" + + "from " + startDate + " to " + endDate + "\n" + + "TOTAL Payment=" + totalPriceMic); + + dateAmountRecord.setPayPrice(totalPriceMic.intValue()); + dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode()); + wxDateAmountRecordService.saveAmount(dateAmountRecord); + + } + @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点盘点前一天的数据 + //@Scheduled(cron = "*/30 * * * * ?") // 测试10秒中一次 + public void daliyAmountSchedule() { List mallList = wxMallMapper.findList(new WxMall()); if (mallList.size()==0) { @@ -56,16 +104,15 @@ public class DaliyAmountSchedule { return; } - for (int i=0; i < mallList.size(); i++) { - - WxMerchant merchant = new WxMerchant(); - merchant.setTenantId(mallList.get(i).getTenantId()); - merchant.setStatus(EnumMerchantStatus.VALID.getCode()); - List merchantList = wxMerchantMapper.findList(merchant); + mallList.stream().forEach(mall->{ + WxMerchant merchantQ = new WxMerchant(); + merchantQ.setTenantId(mall.getTenantId()); + merchantQ.setStatus(EnumMerchantStatus.VALID.getCode()); + List merchantList = wxMerchantMapper.findList(merchantQ); if (merchantList.size()==0) { - logger.info("No merchant info found in mall" + mallList.get(i).getName()); - continue; + logger.info("No merchant info found in mall" + mall.getName()); + return; } // 时间选择 @@ -76,65 +123,23 @@ public class DaliyAmountSchedule { cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); - cal.add(Calendar.DAY_OF_YEAR, 0); - Date endDate = cal.getTime(); - cal.add(Calendar.DAY_OF_YEAR, -1); - Date startDate = cal.getTime(); - - for (int j=0; j < merchantList.size(); j++) { - merchant = merchantList.get(j); - - Map dateMap = new HashMap(); - dateMap.put("startDate", startDate); - dateMap.put("endDate", endDate); - dateMap.put("merchantId",merchant.getId()); - - List list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap); - logger.info("find " + list.size() + " coupon order from " + startDate + " to " + endDate); - int total_price = list.stream().mapToInt(p->p.getCouponPrice()).sum(); - - logger.info("\nFound " + list.size() + " coupon orders \n" + - "for merchantId:" + merchant.getId() + "\n" + - "from " + startDate + " to " + endDate +"\n" + - "TOTAL ORDER=" + total_price); - - WxDateAmountRecord dateAmountRecord = new WxDateAmountRecord(); - dateAmountRecord.setPayPrice(total_price); - dateAmountRecord.setMerchantId(merchant.getId()); - dateAmountRecord.setTenantId(merchant.getTenantId()); - dateAmountRecord.setType(EnumDateAmtType.PAY_RECORD.getCode()); - dateAmountRecord.setDate(startDate); - dateAmountRecord.setDayOfWeek(cal.get(Calendar.DAY_OF_WEEK)); - dateAmountRecord.setMonth(cal.get(Calendar.MONTH)); - dateAmountRecord.setWeekOfYear(cal.get(Calendar.WEEK_OF_YEAR)); - - wxDateAmountRecordService.saveAmount(dateAmountRecord); - - list= wxCouponOrderMapper.findListOfVerifiedByDate(dateMap); - logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate); - total_price = list.stream().mapToInt(p->p.getCouponPrice()).sum(); - logger.info("\nFound " + list.size() + " coupon orders \n" + - "for merchantId:" + merchant.getId() + "\n" + - "from " + startDate + " to " + endDate +"\n" + - "TOTAL VERIFIED=" + total_price); - - dateAmountRecord.setPayPrice(total_price); - dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode()); - wxDateAmountRecordService.saveAmount(dateAmountRecord); - - Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap); - Long countMic = (Long) microPayMap.get("count"); - BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price"); - logger.info("\nFound " + countMic + " order " + "\n" + - "for merchantId:" + merchant.getId() + "\n" + - "from " + startDate + " to " + endDate + "\n" + - "TOTAL Payment=" + totalPriceMic); - - dateAmountRecord.setPayPrice(totalPriceMic.intValue()); - dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode()); - wxDateAmountRecordService.saveAmount(dateAmountRecord); - - } - } + int day = 0; //查找过去30天是否有漏记 + do { + + cal.add(Calendar.DAY_OF_YEAR, 0); + Date endDate = cal.getTime(); + cal.add(Calendar.DAY_OF_YEAR, -1); + Date startDate = cal.getTime(); + + merchantList.stream().filter(merchant->{ + WxDateAmountRecord dateAmountRecordQ = new WxDateAmountRecord(); + dateAmountRecordQ.setDate(startDate); + dateAmountRecordQ.setMerchantId(merchant.getId()); + return (wxDateAmountRecordService.listAsPage(dateAmountRecordQ,1,1).getList().size()==0); + }).forEach(merchant -> { + daliyAmountMerchant(startDate, endDate, cal, merchant); + }); + } while (day-- > -7); //补全最近7天的数据 + }); } } \ No newline at end of file diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index 8d0283c13..ed0cf20b0 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -220,13 +220,13 @@