diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java index 178e9753c..5bdcbd429 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/PowerBillAutoBuildSchedule.java @@ -1,15 +1,16 @@ package com.iformall.schedule; import com.alibaba.fastjson.JSONObject; +import com.iformall.domain.dto.KwMeterDataDto; import com.iformall.domain.po.*; -import com.iformall.enums.EnumBillDailyType; -import com.iformall.enums.EnumBillPayWay; -import com.iformall.enums.EnumDelStatus; -import com.iformall.enums.EnumPowerBillBuildWay; +import com.iformall.domain.vo.KwMeterDataVo; +import com.iformall.enums.*; +import com.iformall.mapper.KwMerchantMeterMapper; import com.iformall.mapper.WxMerchantPowerBillConfigMapper; import com.iformall.mapper.WxMerchantShopMapper; import com.iformall.mapper.WxPowerBillAutoConfigMapper; import com.iformall.service.WxBillDailyService; +import com.iformall.service.kw.KwMeterDataService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +48,12 @@ public class PowerBillAutoBuildSchedule { @Autowired private WxMerchantShopMapper wxMerchantShopMapper; + @Autowired + KwMeterDataService kwMeterDataService; + + @Autowired + KwMerchantMeterMapper kwMerchantMeterMapper; + /** * 每天5点执行 */ @@ -75,25 +82,37 @@ public class PowerBillAutoBuildSchedule { private void buildPowerBill(WxMerchantPowerBillConfig wxMerchantPowerBillConfig, WxPowerBillAutoConfig wxPowerBillAutoConfig) { - String unitPrice = wxPowerBillAutoConfig.getUnitPrice(); - Date startdate = getLastMonthDate().get("startdate"); - Date enddate = getLastMonthDate().get("enddate"); + Map monthDate = getLastMonthDate(); + Date startdate = monthDate.get("startdate"); + Date enddate = monthDate.get("enddate"); + Date lastdate = monthDate.get("lastdate"); MallUserInfo mallUserInfo = getMallUserInfo(); WxBillDaily wxBillDaily = getBillDaily(wxMerchantPowerBillConfig); JSONObject priceDetal = new JSONObject(); Date receiveDate = getReceiveDate(Integer.parseInt(wxPowerBillAutoConfig.getReceiveDay())); + long receivePay = 0L; + Long merchantId = wxMerchantPowerBillConfig.getMerchantId(); if (wxMerchantPowerBillConfig.getBuildWay().equals(EnumPowerBillBuildWay.METER.getCode())) { //根据日期拉取电量 单价 * 电量 = 电费 - + int usedPower = getUsedPower(startdate, lastdate, merchantId); + if (usedPower == 0) { + logger.info("没有电量使用,不生成账单>>>>商户ID:" + merchantId); + return; + } + String price = wxMerchantPowerBillConfig.getPrice(); + priceDetal.put("unitPrice", price); + priceDetal.put("power", usedPower); + receivePay = new BigDecimal(price).multiply(new BigDecimal(100)) + .multiply(new BigDecimal(usedPower)).longValue(); } else { + String unitPrice = wxPowerBillAutoConfig.getUnitPrice(); String price = wxMerchantPowerBillConfig.getPrice(); priceDetal.put("unitPrice", unitPrice); priceDetal.put("power", 0); - long receivePay = new BigDecimal(price).multiply(new BigDecimal(100)).longValue(); - wxBillDaily.setReceivePay(receivePay); - wxBillDaily.setNeedPay(receivePay); + receivePay = new BigDecimal(price).multiply(new BigDecimal(100)).longValue(); } - + wxBillDaily.setReceivePay(receivePay); + wxBillDaily.setNeedPay(receivePay); wxBillDaily.setReceiveDate(receiveDate); wxBillDaily.setStarttime(startdate); wxBillDaily.setEndtime(enddate); @@ -102,6 +121,28 @@ public class PowerBillAutoBuildSchedule { } + private int getUsedPower(Date startdate, Date lastdate, Long merchantId) { + KwMerchantMeter kwMerchantMeter = new KwMerchantMeter(); + kwMerchantMeter.setMerchantId(merchantId); + kwMerchantMeter.setStatus(EnumMerchantMeterStatus.VALID.getCode()); + List merchantMeterList = kwMerchantMeterMapper.select(kwMerchantMeter); + int usedPower = 0; + if (!merchantMeterList.isEmpty()) { + int size = merchantMeterList.size(); + for (int i = 0; i < size; i++) { + KwMerchantMeter merchantMeter = merchantMeterList.get(i); + KwMeterDataDto kwMeterDataDto = new KwMeterDataDto(); + kwMeterDataDto.setTenantId(merchantMeter.getTenantId()); + kwMeterDataDto.setMeterId(merchantMeter.getMeterId()); + kwMeterDataDto.setStartTime(startdate); + kwMeterDataDto.setEndTime(lastdate); + KwMeterDataVo power = kwMeterDataService.getPower(kwMeterDataDto); + usedPower += power.getUsedPower(); + } + } + return usedPower; + } + private WxBillDaily getBillDaily(WxMerchantPowerBillConfig wxMerchantPowerBillConfig) { WxBillDaily wxBillDaily = new WxBillDaily(); Long merchantId = wxMerchantPowerBillConfig.getMerchantId(); @@ -125,13 +166,17 @@ public class PowerBillAutoBuildSchedule { now = now.with(TemporalAdjusters.lastDayOfMonth()); Instant end = now.atStartOfDay().atZone(zoneId).toInstant(); Date last = Date.from(end); + now = now.with(TemporalAdjusters.firstDayOfNextMonth()); + Instant lastday = now.atStartOfDay().atZone(zoneId).toInstant(); + Date next = Date.from(lastday); Map dateMap = new HashMap<>(2); dateMap.put("startdate", first); dateMap.put("enddate", last); + dateMap.put("lastdate", next); return dateMap; } - private Date getReceiveDate(Integer day) { + private Date getReceiveDate(int day) { ZoneId zoneId = ZoneOffset.systemDefault(); LocalDate of = LocalDate.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), day); Instant instant = of.atStartOfDay().atZone(zoneId).toInstant();