|
@@ -1,27 +1,37 @@
|
|
|
package com.bz.smart_city.quartz.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.bz.smart_city.commom.util.DateTimeUtil;
|
|
|
+import com.bz.smart_city.commom.util.HttpClientUtils;
|
|
|
+import com.bz.smart_city.dao.CustomerMapper;
|
|
|
import com.bz.smart_city.dao.pay.AmountWaterUsedAmountMapper;
|
|
|
import com.bz.smart_city.dao.pay.BaseClosingAccountInfoMapper;
|
|
|
import com.bz.smart_city.dao.pay.PayBaseConfigMapper;
|
|
|
import com.bz.smart_city.dto.pay.*;
|
|
|
+import com.bz.smart_city.entity.Customer;
|
|
|
+import com.bz.smart_city.entity.pay.DeviceReplaceRecord;
|
|
|
+import com.bz.smart_city.quartz.entity.QuartzEntity;
|
|
|
+import com.bz.smart_city.quartz.job.AmountSyncJob;
|
|
|
import com.bz.smart_city.quartz.service.AmountSynService;
|
|
|
import com.bz.smart_city.quartz.service.JobAndTriggerService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.InitializingBean;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.BigInteger;
|
|
|
-import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.time.ZoneId;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @description
|
|
@@ -30,200 +40,217 @@ import java.util.List;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
-public class AmountSynServiceImpl implements AmountSynService {
|
|
|
+public class AmountSynServiceImpl implements AmountSynService , InitializingBean {
|
|
|
|
|
|
@Value("1")
|
|
|
private BigInteger createBy;
|
|
|
|
|
|
+ @Value("http://114.135.61.188:58080/api/syncData/clearingData")
|
|
|
+ private String amountSynUrl;
|
|
|
+
|
|
|
@Resource
|
|
|
private BaseClosingAccountInfoMapper baseClosingAccountInfoMapper;
|
|
|
@Resource
|
|
|
private AmountWaterUsedAmountMapper amountWaterUsedAmountMapper;
|
|
|
@Resource
|
|
|
- private PayBaseConfigMapper payBaseConfigMapper;
|
|
|
+ private CustomerMapper customerMapper;
|
|
|
@Resource
|
|
|
private JobAndTriggerService jobAndTriggerService;
|
|
|
+ @Resource
|
|
|
+ private PayBaseConfigMapper payBaseConfigMapper;
|
|
|
+
|
|
|
@Override
|
|
|
- public void saveQrtzTask(PayBaseConfigDto payBaseConfigDto) {
|
|
|
+ public void afterPropertiesSet() {
|
|
|
+ //获取系统参数
|
|
|
+ List<PayBaseConfigDto> payBaseConfigDtos = payBaseConfigMapper.getAllList("AUTO_SYNUAMOUNT_TIME",null,null,null);
|
|
|
|
|
|
+ //循环添加定时任务
|
|
|
+ for(PayBaseConfigDto payBaseConfigDto :payBaseConfigDtos){
|
|
|
+ saveQrtzTask(payBaseConfigDto);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void amountUpdate(Integer siteId, Integer customerId) {
|
|
|
+ public void saveQrtzTask(PayBaseConfigDto payBaseConfigDto) {
|
|
|
|
|
|
|
|
|
- //获取水表信息
|
|
|
- //调取接口获取水量信息
|
|
|
- //保存水量信息
|
|
|
+ String value = payBaseConfigDto.getValue();
|
|
|
+ if(value == null|| value==""){ //获取定时corn失败
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 1,查询需要批量推送的配置项目并构建定时任务
|
|
|
+ // 2,若对应定时任务不存在则创建
|
|
|
+ QuartzEntity entity = new QuartzEntity();
|
|
|
+ entity.setJobGroup("水量同步");
|
|
|
+ entity.setJobName("AmountSyncJob"+payBaseConfigDto.getCustomerId());
|
|
|
+ entity.setDescription("AmountSyncJob"+payBaseConfigDto.getCustomerId());
|
|
|
+ boolean exists = jobAndTriggerService.isExists(entity);
|
|
|
+ if(!exists){
|
|
|
+ String[] values = value.split("_");
|
|
|
+ String cron = "0 */"+values[2]+" * "+values[0]+"-"+values[1]+" * ?";
|
|
|
+ log.info("水量同步cron:"+cron);
|
|
|
+ entity.setCronExpression(cron);
|
|
|
+ entity.setJobClassName(AmountSyncJob.class.getName());
|
|
|
+ HashMap<String, Object> jobData = new HashMap<String, Object>();
|
|
|
+ jobData.put("siteId", payBaseConfigDto.getSiteId().intValue());
|
|
|
+ jobData.put("customerId", payBaseConfigDto.getCustomerId().intValue());
|
|
|
+ entity.setJobData(jobData);
|
|
|
+ jobAndTriggerService.save(entity);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- /* public void amountUpdate(Integer siteId, Integer customerId){
|
|
|
|
|
|
+ public void deleteQrtzTask(BigInteger id) {
|
|
|
+ // 1,查询需要批量推送的配置项目并构建定时任务
|
|
|
+ QuartzEntity entity = new QuartzEntity();
|
|
|
+ entity.setJobGroup("水量同步");
|
|
|
+ entity.setJobName("AmountSyncJob"+id);
|
|
|
+ if(jobAndTriggerService.isExists(entity)){
|
|
|
+ jobAndTriggerService.deleteJob(entity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void amountUpdate(Integer siteId, Integer customerId) {
|
|
|
//获取最新账期
|
|
|
+ BaseClosingAccountInfoDto baseClosingAccountInfoDto = baseClosingAccountInfoMapper.getLastClosingAccount(siteId, customerId);
|
|
|
|
|
|
- List<BaseClosingAccountInfoDto> baseClosingAccountInfoDtos = baseClosingAccountInfoMapper.getList(null,null, BigInteger.valueOf(siteId),BigInteger.valueOf(customerId),0);
|
|
|
- if(baseClosingAccountInfoDtos.size()>0){
|
|
|
- //customerId accountPeriod 是否有结算计划
|
|
|
- BaseClosingAccountInfoDto baseClosingAccountInfoDto = baseClosingAccountInfoDtos.get(0);
|
|
|
- Integer year = baseClosingAccountInfoDto.getYear();
|
|
|
- Integer month = baseClosingAccountInfoDto.getMonth();
|
|
|
-
|
|
|
- String accountPeriod = year + String.format("%02d",month);
|
|
|
-
|
|
|
-
|
|
|
- ClearingRecord clearingRecord = //clearingRecordMapper.findClearingRecordByAccoutPeriodAndCust(accountPeriod,Integer.valueOf(customerId));
|
|
|
- if(clearingRecord!=null){
|
|
|
- //产生水量基础计划
|
|
|
- Integer totalNum = amountWaterUsedAmountMapper.getAllAmountCount(year,month,siteId,customerId);
|
|
|
- Integer num = totalNum / 500 + (totalNum % 500 > 0 ? 1 : 0);
|
|
|
- log.info("抄表计划生成开始:" + LocalDateTime.now() + ",计划条数" + totalNum);
|
|
|
- for (int i = 0; i < num; i++)
|
|
|
- {
|
|
|
- int a = amountWaterUsedAmountMapper.createdAmount(year,month,siteId,customerId);
|
|
|
- log.info("成功条数" + i + ":" + a);
|
|
|
- }
|
|
|
- log.info("抄表计划生成完成:" + LocalDateTime.now());
|
|
|
-
|
|
|
- //获取结算水量
|
|
|
- log.info("水量同步开始:" + LocalDateTime.now());
|
|
|
- HashMap<BigInteger, ClearingDataInfoDto> clearingDataHashMap = clearingRecordItemMapper.findClearingDataHashMap(clearingRecord.getId(),1);
|
|
|
- if(clearingDataHashMap!=null&&clearingDataHashMap.size()>0) {
|
|
|
- //同步水量
|
|
|
- List<AmountWaterUsedAmountDto> amountWaterUsedAmountDtos = amountWaterUsedAmountMapper.getAllAmountRecord(year, month,siteId, customerId);
|
|
|
- //批量更新水量信息
|
|
|
- List<AmountWaterUsedAmountDto> updates = new ArrayList<>();
|
|
|
-
|
|
|
- //换表记录
|
|
|
- HashMap<BigInteger, ReplaceMeterCountDto> replaceMap = new HashMap<>();
|
|
|
- if(amountWaterUsedAmountDtos.size() > 0){
|
|
|
- LocalDateTime stTime = LocalDateTime.ofInstant(baseClosingAccountInfoDtos.get(0).getStartTime().toInstant(), ZoneId.systemDefault());
|
|
|
- HashMap<BigInteger, ReplaceMeterCountDto> childReplaceMap = amountWaterUsedAmountMapper.getRepalceRecordCount(stTime,null,null,null,customerId);
|
|
|
- if(childReplaceMap.size() >0){
|
|
|
- List<ReplaceMeterDto> replaceMeterDtoList = amountWaterUsedAmountMapper.getRepalceRecordDetail(stTime,null,null,null,customerId);
|
|
|
- if(replaceMeterDtoList.size() >0){
|
|
|
- for(int i=0;i<replaceMeterDtoList.size();i++){
|
|
|
- if(childReplaceMap.containsKey(replaceMeterDtoList.get(i).getDeviceId())){
|
|
|
- ReplaceMeterCountDto replaceMeterCountDto = childReplaceMap.get(replaceMeterDtoList.get(i).getDeviceId());
|
|
|
- if(replaceMeterCountDto.getReplaceMeterDtoList() == null)
|
|
|
- {
|
|
|
- replaceMeterCountDto.setReplaceMeterDtoList(new ArrayList<>());
|
|
|
- }
|
|
|
- replaceMeterCountDto.getReplaceMeterDtoList().add(replaceMeterDtoList.get(i));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- replaceMap.putAll(childReplaceMap);
|
|
|
- }
|
|
|
+ if(baseClosingAccountInfoDto == null
|
|
|
+ || baseClosingAccountInfoDto .getYear() == null
|
|
|
+ || baseClosingAccountInfoDto.getMonth() == null){
|
|
|
+ log.info("同步水量失败:获取账期信息失败");
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ Integer year=baseClosingAccountInfoDto.getYear();
|
|
|
+ Integer month=baseClosingAccountInfoDto.getMonth();
|
|
|
+ //插入水量基础信息(同步计划)
|
|
|
+ Integer amountNumber = amountWaterUsedAmountMapper.insertSelectAmountBaseInfo(year,month,siteId,customerId);
|
|
|
+ if(amountNumber == 0){
|
|
|
+ log.info("同步水量失败:生成同步计划失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取客户编号
|
|
|
+ List<Customer> customers = customerMapper.getListById(customerId);
|
|
|
+ if(customers .size() != 1){
|
|
|
+ log.info("同步水量失败:查询客户信息异常");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String customerNo=customers.get(0).getCustomerNo();
|
|
|
+ //获取同步计划
|
|
|
+ List<AmountWaterUsedAmountDto> amountWaterUsedAmountDtos = amountWaterUsedAmountMapper.getAllAmountRecord(year, month,siteId, customerId);
|
|
|
+ if(amountWaterUsedAmountDtos.size() == 0){
|
|
|
+ log.info("同步水量失败:获取同步计划失败");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //提取出水表编码集合
|
|
|
+ List<String> metercodes = amountWaterUsedAmountDtos.stream().map(
|
|
|
+ AmountWaterUsedAmountDto -> AmountWaterUsedAmountDto.getMetercode()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //获取账期内换表记录
|
|
|
+ HashMap<String, DeviceReplaceRecord> replaceRecordMap = amountWaterUsedAmountMapper.getRepalceRecordCount(year,month,siteId,customerId);
|
|
|
+
|
|
|
+ //批量更新水量信息
|
|
|
+ List<AmountWaterUsedAmountDto> updates = new ArrayList<>();
|
|
|
+
|
|
|
+ //抄表数据结果
|
|
|
+ List<AmountSynRespDto> lists =new ArrayList<>();
|
|
|
+
|
|
|
+ for(int i=0;i<metercodes.size();i+=500){
|
|
|
+ AmountSynParamDto amountSynParamDto= new AmountSynParamDto();
|
|
|
+ amountSynParamDto.setYyyymm(year+""+month);
|
|
|
+ amountSynParamDto.setCustomerNo(customerNo);
|
|
|
+ //一次查询五百条
|
|
|
+ List<String> selectList ;
|
|
|
+ if(i+500 >= metercodes.size()){
|
|
|
+ selectList=metercodes.subList(i,metercodes.size());
|
|
|
+ }else{
|
|
|
+ selectList=metercodes.subList(i,i+500);
|
|
|
+ }
|
|
|
+ amountSynParamDto.setFileNo(selectList);
|
|
|
+
|
|
|
+ String context=JSON.toJSON(amountSynParamDto).toString();
|
|
|
+ try {
|
|
|
+ String result= HttpClientUtils.doPostWithJson(amountSynUrl,context);
|
|
|
+ log.info("同步水量请求结果"+result);
|
|
|
+
|
|
|
+ JSONObject jsonObject= JSON.parseObject(result);
|
|
|
+ Integer status= jsonObject.getInteger("status");
|
|
|
+ if(status .equals(0)){ //返回正常
|
|
|
+ JSONObject datas = jsonObject.getJSONObject("data");
|
|
|
+ String total = datas.getString("total");
|
|
|
+ if(StringUtils.isNotBlank(total) && Integer.valueOf(total) > 0){//有数据
|
|
|
+ JSONArray jsonArray = datas.getJSONArray("list");
|
|
|
+ List<AmountSynRespDto> list = jsonArray.toJavaList(AmountSynRespDto.class);
|
|
|
+
|
|
|
+ lists.addAll(list);
|
|
|
}
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- for (AmountWaterUsedAmountDto amountWaterUsedAmountDto : amountWaterUsedAmountDtos) {
|
|
|
- BigInteger watermeterId = amountWaterUsedAmountDto.getWatermeterId();
|
|
|
- if (watermeterId != null && clearingDataHashMap.containsKey(watermeterId)) {
|
|
|
- ClearingDataInfoDto clearingDataDTO = clearingDataHashMap.get(watermeterId);
|
|
|
- BigInteger amountId = amountWaterUsedAmountDto.getId();//水量id
|
|
|
- BigDecimal readingOld = amountWaterUsedAmountDto.getLastreading();//上期止度
|
|
|
- if (clearingDataDTO.getCurrentPeriodData() != null) {
|
|
|
- BigDecimal readingNew = new BigDecimal(clearingDataDTO.getCurrentPeriodData()).setScale(0, BigDecimal.ROUND_DOWN);//本期止度
|
|
|
- BigInteger meterid = amountWaterUsedAmountDto.getWatermeterId();//水表id
|
|
|
- BigDecimal payAmount = BigDecimal.ZERO;//结算水量
|
|
|
- Date lastAmountDate = amountWaterUsedAmountDto.getLastrecorddate();
|
|
|
- BigDecimal Amount = BigDecimal.ZERO;//实际用水量
|
|
|
- BigDecimal tempReading = BigDecimal.ZERO;
|
|
|
- tempReading = readingOld;//起度或上期的止度
|
|
|
- String readDate = clearingDataDTO.getMeterReadDate();
|
|
|
- Integer calculateway = amountWaterUsedAmountDto.getCalculateway();
|
|
|
-
|
|
|
- //换表记录计算
|
|
|
- boolean replace = false;
|
|
|
- ReplaceMeterCountDto replaceMeterCountDto=null;
|
|
|
- if(replaceMap.containsKey(watermeterId)){
|
|
|
- replaceMeterCountDto = replaceMap.get(watermeterId);
|
|
|
- //有换表记录且换表时间在两次同步之间 用水量=(换表中的旧表止度-上次抄表止度) + (本次止度-换表中的新表起度)
|
|
|
- if(replaceMeterCountDto != null){
|
|
|
- LocalDateTime currTime = LocalDateTime.parse(readDate, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));//本次抄表时间
|
|
|
- LocalDateTime previousTime = LocalDateTime.ofInstant(amountWaterUsedAmountDto.getLastrecorddate().toInstant(),ZoneId.systemDefault()); //上个帐期的结算抄表时间
|
|
|
-
|
|
|
- ReplaceMeterDto oldReplaceMeterDto = null;
|
|
|
- for(int i = 0;i<replaceMeterCountDto.getReplaceMeterDtoList().size();i++){
|
|
|
- LocalDateTime replaceTime = replaceMeterCountDto.getReplaceMeterDtoList().get(i).getReplaceTime(); //换表时间
|
|
|
-
|
|
|
- Duration duration1 = Duration.between(previousTime,replaceTime);
|
|
|
- Duration duration2 = Duration.between(replaceTime,currTime);
|
|
|
- if(duration1.toMillis() > 0 && duration2.toMinutes() > 0){
|
|
|
- BigDecimal replaceEndData = new BigDecimal(replaceMeterCountDto.getReplaceMeterDtoList().get(i).getOldEnd()).setScale(2,BigDecimal.ROUND_DOWN);//换表中的旧表止度
|
|
|
- BigDecimal replaceData = BigDecimal.ZERO;
|
|
|
- if(oldReplaceMeterDto == null)
|
|
|
- replaceData = tempReading;
|
|
|
- else
|
|
|
- replaceData = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的起度
|
|
|
- BigDecimal oldMeterUse = replaceEndData.subtract(replaceData); //旧表用量
|
|
|
-
|
|
|
- Amount = Amount.add(oldMeterUse);
|
|
|
- replace = true;
|
|
|
-
|
|
|
- oldReplaceMeterDto = replaceMeterCountDto.getReplaceMeterDtoList().get(i);
|
|
|
- }
|
|
|
- else {
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //新表用量
|
|
|
- if(oldReplaceMeterDto != null){
|
|
|
- BigDecimal replaceNewDate = new BigDecimal(oldReplaceMeterDto.getNewBegin()).setScale(0,BigDecimal.ROUND_DOWN);//换表中的新表起度
|
|
|
- BigDecimal newMeterUse = readingNew.subtract(replaceNewDate);//新表用量
|
|
|
- Amount = Amount.add(newMeterUse);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(!replace){
|
|
|
- if (readingNew.compareTo(tempReading) > 0)
|
|
|
- Amount = Amount.add(readingNew.subtract(tempReading));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //计量方式判断
|
|
|
-
|
|
|
- if (calculateway.equals(1))//按实际用量
|
|
|
- payAmount = Amount;
|
|
|
- else if (calculateway.equals(2))//按固定量
|
|
|
- payAmount = BigDecimal.valueOf(amountWaterUsedAmountDto.getFixedamount());
|
|
|
- else
|
|
|
- payAmount = Amount;
|
|
|
-
|
|
|
- if (payAmount.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- amountWaterUsedAmountDto.setReading(readingNew);
|
|
|
- amountWaterUsedAmountDto.setRecorddate(DateTimeUtil.parseDate(readDate, DateTimeUtil.DATE_TIME_FORMAT_SECOND));
|
|
|
- amountWaterUsedAmountDto.setAmount(Amount);
|
|
|
- amountWaterUsedAmountDto.setPayamount(payAmount);
|
|
|
-
|
|
|
- updates.add(amountWaterUsedAmountDto);
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
+ Map<String ,AmountSynRespDto> map = lists.stream().collect(Collectors.toMap(AmountSynRespDto::getFileNo, Function.identity(), (key1, key2) -> key2));
|
|
|
|
|
|
- }
|
|
|
- if (updates.size() > 0) {
|
|
|
- //List<List<AmountWaterUsedAmountDto>> lists = Lists.partition(updates, 500);
|
|
|
- for (AmountWaterUsedAmountDto amountWaterUsedAmountDto : updates) {
|
|
|
- amountWaterUsedAmountMapper.batchUpdate(amountWaterUsedAmountDto);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //换表记录
|
|
|
|
|
|
|
|
|
- log.info("水量同步结束:" + LocalDateTime.now());
|
|
|
+ for (AmountWaterUsedAmountDto amountWaterUsedAmountDto : amountWaterUsedAmountDtos) {
|
|
|
+ BigInteger watermeterId = amountWaterUsedAmountDto.getWatermeterId();
|
|
|
+ if (watermeterId != null && map.containsKey(amountWaterUsedAmountDto.getMetercode())) {
|
|
|
+ AmountSynRespDto amountSynRespDto = map.get(amountWaterUsedAmountDto.getMetercode());
|
|
|
+ BigDecimal readingOld = amountWaterUsedAmountDto.getLastreading();//上期止度
|
|
|
|
|
|
- }
|
|
|
+ if (amountSynRespDto.getReading() != null) {
|
|
|
+ BigDecimal readingNew = new BigDecimal(amountSynRespDto.getReading()).setScale(0, BigDecimal.ROUND_DOWN);//本期止度
|
|
|
|
|
|
- }
|
|
|
+ BigDecimal payAmount ;//结算水量
|
|
|
+
|
|
|
+ BigDecimal Amount ;//实际用水量
|
|
|
+
|
|
|
+ BigDecimal replaceAmount = BigDecimal.ZERO;//旧表用水量
|
|
|
+
|
|
|
+ String readDate = amountSynRespDto.getCurrentPeriodDate();
|
|
|
+
|
|
|
+ Integer calculateway = amountWaterUsedAmountDto.getCalculateway();
|
|
|
+
|
|
|
+ //换表记录计算
|
|
|
+ if(replaceRecordMap.containsKey(amountWaterUsedAmountDto.getMetercode())){
|
|
|
+ DeviceReplaceRecord deviceReplaceRecord = replaceRecordMap.get(amountWaterUsedAmountDto.getMetercode());
|
|
|
|
|
|
+ replaceAmount=deviceReplaceRecord.getOldAmount();
|
|
|
|
|
|
- }*/
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //实际水量=本期水量+换表前水量
|
|
|
+ Amount = readingNew.subtract(readingOld).add(replaceAmount);
|
|
|
+
|
|
|
+
|
|
|
+ //计量方式判断
|
|
|
+ if (calculateway.equals(1))//按实际用量
|
|
|
+ payAmount = Amount;
|
|
|
+ else if (calculateway.equals(2))//按固定量
|
|
|
+ payAmount = BigDecimal.valueOf(amountWaterUsedAmountDto.getFixedamount());
|
|
|
+ else
|
|
|
+ payAmount = Amount;
|
|
|
+
|
|
|
+ if (payAmount.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ amountWaterUsedAmountDto.setReading(readingNew);
|
|
|
+ amountWaterUsedAmountDto.setRecorddate(DateTimeUtil.parseDate(readDate, DateTimeUtil.DATE_TIME_FORMAT_SECOND));
|
|
|
+ amountWaterUsedAmountDto.setAmount(Amount);
|
|
|
+ amountWaterUsedAmountDto.setPayamount(payAmount);
|
|
|
+ updates.add(amountWaterUsedAmountDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (updates.size() > 0) {
|
|
|
+ //List<List<AmountWaterUsedAmountDto>> lists = Lists.partition(updates, 500);
|
|
|
+ for (AmountWaterUsedAmountDto amountWaterUsedAmount : updates) {
|
|
|
+ amountWaterUsedAmountMapper.batchUpdate(amountWaterUsedAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("水量同步结束:" + LocalDateTime.now());
|
|
|
+ }
|
|
|
}
|