From e2d91dcb8456ce11f2faaac2708bbab050aeee97 Mon Sep 17 00:00:00 2001 From: gongbiao Date: Mon, 19 Aug 2019 16:23:32 +0800 Subject: [PATCH] =?UTF-8?q?[=E7=94=B5=E8=A1=A8=E7=AE=A1=E7=90=86][?= =?UTF-8?q?=E4=BF=AE=E6=94=B9][=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/PowerBillAutoBuildSchedule.java | 71 +++++++++++++++---- 1 file changed, 58 insertions(+), 13 deletions(-) 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();