| @@ -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<String, Date> 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<KwMerchantMeter> 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<String, Date> 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(); | |||