Переглянути джерело

Merge branch '20200918' of http://114.135.61.188:53000/ZONIOT/water-iot into 20200918

# Conflicts:
#	smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PaySyncDataController.java
#	smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayBaseAccountService.java
zhoujiangyuan 4 роки тому
батько
коміт
23a57ee510
30 змінених файлів з 1064 додано та 292 видалено
  1. 21 0
      smart-city-platform/src/main/java/com/bz/smart_city/commom/util/TreeUtil.java
  2. 57 0
      smart-city-platform/src/main/java/com/bz/smart_city/controller/common/CommonController.java
  3. 0 11
      smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/AmountWaterUsedAmountController.java
  4. 12 0
      smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PayBaseAccountController.java
  5. 1 1
      smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PaySyncDataController.java
  6. 3 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/AreaMapper.java
  7. 3 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/SiteMapper.java
  8. 24 12
      smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/AmountWaterUsedAmountMapper.java
  9. 3 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/PayBaseAccountMapper.java
  10. 29 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountDaySynParamDto.java
  11. 29 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountSynParamDto.java
  12. 26 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountSynRespDto.java
  13. 37 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/BaseWatermeterDto.java
  14. 28 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/SiteinfoDto.java
  15. 30 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/SynAccountInfo.java
  16. 2 0
      smart-city-platform/src/main/java/com/bz/smart_city/entity/pay/DeviceReplaceRecord.java
  17. 42 0
      smart-city-platform/src/main/java/com/bz/smart_city/quartz/job/AmountSyncByDayJob.java
  18. 39 0
      smart-city-platform/src/main/java/com/bz/smart_city/quartz/job/AmountSyncJob.java
  19. 7 0
      smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/AmountSynByDayService.java
  20. 248 0
      smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/impl/AmountSynDayServiceImpl.java
  21. 196 169
      smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/impl/AmountSynServiceImpl.java
  22. 22 6
      smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/AmountWaterUsedAmountServiceImpl.java
  23. 4 1
      smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayBaseAccountServiceImpl.java
  24. 5 0
      smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayBaseAccountService.java
  25. 2 2
      smart-city-platform/src/main/resources/application-prd.properties
  26. 4 0
      smart-city-platform/src/main/resources/mapper/AreaMapper.xml
  27. 1 1
      smart-city-platform/src/main/resources/mapper/CustomerMapper.xml
  28. 12 0
      smart-city-platform/src/main/resources/mapper/SiteMapper.xml
  29. 164 89
      smart-city-platform/src/main/resources/mapper/pay/AmountWaterUsedAmountMapper.xml
  30. 13 0
      smart-city-platform/src/main/resources/mapper/pay/PayBaseAccountMapper.xml

+ 21 - 0
smart-city-platform/src/main/java/com/bz/smart_city/commom/util/TreeUtil.java

@@ -1,5 +1,6 @@
 package com.bz.smart_city.commom.util;
 
+import com.bz.smart_city.dto.AreaDto;
 import com.bz.smart_city.dto.ChannelDto;
 import com.bz.smart_city.dto.CustomerDto;
 import com.bz.smart_city.dto.OrganizationDto;
@@ -122,6 +123,26 @@ public class TreeUtil {
         }
     }
 
+    public static List<AreaDto> getArea(List<AreaDto> list, Integer id, Integer leve) {
+        List<AreaDto> temList = newArrayList();
+        if (list != null) {
+            for (AreaDto areaDto : list) {
+                if (id.equals(areaDto.getPid())) {
+                    List<AreaDto> chidren = getArea(list, areaDto.getCode(), ++leve);
+                    AreaDto tempArea = new AreaDto();
+                    BeanUtils.copyProperties(areaDto, tempArea);
+                    tempArea.setChildren(chidren);
+                    temList.add(tempArea);
+                    leve--;
+                }
+            }
+        }
+        if(temList.size() > 0){
+            return temList;
+        }else {
+            return null;
+        }
+    }
 
 
 }

+ 57 - 0
smart-city-platform/src/main/java/com/bz/smart_city/controller/common/CommonController.java

@@ -0,0 +1,57 @@
+package com.bz.smart_city.controller.common;
+
+import com.bz.smart_city.commom.model.AjaxMessage;
+import com.bz.smart_city.commom.model.ResultStatus;
+import com.bz.smart_city.commom.util.TreeUtil;
+import com.bz.smart_city.dao.AreaMapper;
+import com.bz.smart_city.dto.AreaDto;
+import com.bz.smart_city.dto.ChannelDeviceCountDto;
+import com.bz.smart_city.dto.DeviceDto;
+import com.bz.smart_city.dto.DeviceTypeDto;
+import com.bz.smart_city.service.ChannelService;
+import com.bz.smart_city.service.DeviceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Controller
+@ResponseBody
+@RequestMapping("common")
+@Api(tags = "公共模块")
+public class CommonController {
+
+    @Autowired
+    private ChannelService channelService;
+
+    @Resource
+    private AreaMapper areaMapper;
+
+    @GetMapping("/getChanelList")
+    @ApiOperation(value = "获取场景列表")
+    public AjaxMessage<List<ChannelDeviceCountDto>> getChanelList(
+    ) {
+        List<ChannelDeviceCountDto> list = channelService.getList();
+        return new AjaxMessage<>(ResultStatus.OK, list);
+    }
+
+//    @GetMapping("/getAllArea")
+//    @ApiOperation(value = "获取所有的省市区")
+//    public AjaxMessage<List<AreaDto>> getAllArea(
+//    ) {
+//        List<AreaDto> list = areaMapper.getAllArea();
+//        return new AjaxMessage<>(ResultStatus.OK, TreeUtil.getArea(list, 100000, 1));
+//    }
+
+
+}

+ 0 - 11
smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/AmountWaterUsedAmountController.java

@@ -122,17 +122,6 @@ public class AmountWaterUsedAmountController {
         return ajaxMessage;
     }
 
-    //换表接口
 
-    @ResponseBody
-    @GetMapping("/synDeviceReplaceRecord")
-    @ApiOperation(value = "获取全部审核条数")
-    public AjaxMessage synDeviceReplaceRecord(
-            @ApiParam(value = "h换表记录")@RequestBody(required = true) DeviceReplaceRecordDto deviceReplaceRecordDto
-     ){
-        amountWaterUsedAmountService.saveDeviceReplaceRecord(deviceReplaceRecordDto);
-
-        return new AjaxMessage<>(ResultStatus.OK);
-    }
 
 }

+ 12 - 0
smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PayBaseAccountController.java

@@ -134,5 +134,17 @@ public class PayBaseAccountController {
     }
 
 
+    @GetMapping("/synAccountInfo")
+    @ApiOperation(value = "客户信息同步接口")
+    public AjaxMessage synAccountInfo(
+            @ApiParam(value = "创建日期,格式yyyyMMdd",required = false) @RequestBody(required = false) String createDate)
+    {
+        List list = payBaseAccountService.getSynAccountInfo(createDate);
+        if(list.size()>0){
+            return new AjaxMessage(ResultStatus.OK,list);
+        }else{
+            return new AjaxMessage(1,"未查询到有效数据","");
+        }
+    }
 
 }

+ 1 - 1
smart-city-platform/src/main/java/com/bz/smart_city/controller/pay/PaySyncDataController.java

@@ -77,7 +77,7 @@ public class PaySyncDataController {
         return paySyncDataService.queryWaterMeterType(parentId);
     }
 
-    @PostMapping("/SyncData/synReplaceRecord")
+    @PostMapping("/amount/synDeviceReplaceRecord")
     @ApiOperation(value = "同步换表信息")
     public AjaxMessage syncReplaceRecord(
             @ApiParam(value = "同步换表信息", required = true) @RequestBody(required = true) WaterMeterReplaceLog waterMeterReplaceLog

+ 3 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/AreaMapper.java

@@ -1,5 +1,6 @@
 package com.bz.smart_city.dao;
 
+import com.bz.smart_city.dto.AreaDto;
 import com.bz.smart_city.dto.AreaRelevanceDto;
 import com.bz.smart_city.entity.Area;
 import org.apache.ibatis.annotations.Mapper;
@@ -14,5 +15,7 @@ import java.util.List;
 public interface AreaMapper {
     List<Area> findByIds(@Param("ids")List<Integer> ids);
 
+    List<AreaDto> getAllArea();
+
     List<AreaRelevanceDto> findByLevelType(@Param("levelType")Integer levelType);
 }

+ 3 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/SiteMapper.java

@@ -1,6 +1,7 @@
 package com.bz.smart_city.dao;
 
 import com.bz.smart_city.dto.SiteDto;
+import com.bz.smart_city.dto.pay.SiteinfoDto;
 import com.bz.smart_city.entity.Site;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,6 @@ public interface SiteMapper {
     Site findById(@Param("siteId") Integer siteId);
 
     int findByCustomerIdUnique(@Param("id") Integer id, @Param("customerId") Integer customerId);
+
+    SiteinfoDto getSiteAndCustomerByCustomerNo(@Param("customerNo") String customerNo);
 }

+ 24 - 12
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/AmountWaterUsedAmountMapper.java

@@ -1,14 +1,12 @@
 package com.bz.smart_city.dao.pay;
 
-import com.bz.smart_city.dto.pay.AmountWaterUsedAmountDto;
-import com.bz.smart_city.dto.pay.MeterReadRecordDto;
-import com.bz.smart_city.dto.pay.ReplaceMeterCountDto;
-import com.bz.smart_city.dto.pay.ReplaceMeterDto;
+import com.bz.smart_city.dto.pay.*;
 import com.bz.smart_city.entity.ProgramItem;
 import com.bz.smart_city.entity.pay.AmountWaterUsedAmount;
 import com.bz.smart_city.entity.pay.AmountWaterUsedAmountByDay;
 import com.bz.smart_city.entity.pay.DeviceReplaceRecord;
 import com.bz.smart_city.entity.pay.archives.PayBaseCustomerandmeterrela;
+import com.bz.smart_city.dto.pay.AmountSynParamDto;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -54,9 +52,6 @@ public interface AmountWaterUsedAmountMapper {
 
     Integer createdAmountByDay(@Param("siteId") Integer siteId, @Param("customerId")Integer customerId);
 
-    @MapKey("deviceId")
-    HashMap<BigInteger, MeterReadRecordDto> getMeterReadRecord(@Param("list")List<BigInteger> list);
-
     @MapKey("watermeterId")
     HashMap<BigInteger, AmountWaterUsedAmountByDay> getAmountWaterUsedAmountByDay(@Param("siteId") Integer siteId, @Param("customerId")Integer customerId);
 
@@ -71,12 +66,29 @@ public interface AmountWaterUsedAmountMapper {
     //换表明细 list:设备ID
     List<ReplaceMeterDto> getRepalceRecordDetail(@Param("stTime")LocalDateTime stTime,@Param("etTime")LocalDateTime etTime,@Param("list")List<BigInteger> list,@Param("siteId")Integer siteId,@Param("customerId")Integer customerId);
 
-    //换表统计 list:设备ID
-    @MapKey("deviceId")
-    HashMap<BigInteger, ReplaceMeterCountDto> getRepalceRecordCount(@Param("stTime")LocalDateTime stTime, @Param("etTime")LocalDateTime etTime, @Param("list")List<BigInteger> list,@Param("siteId")Integer siteId,@Param("customerId")Integer customerId);
-
     AmountWaterUsedAmount getLastReadrecord(@Param("metercode") String metercode, @Param("siteId") Integer siteId,@Param("customerId")Integer customerId);
 
-    void insertReplaceRecord( @Param("deviceReplaceRecord") DeviceReplaceRecord deviceReplaceRecord);
+    //插入换表信息
+    Integer insertReplaceRecord( @Param("deviceReplaceRecord") DeviceReplaceRecord deviceReplaceRecord);
+
+    //根据水表编码查询水表信息
+    BaseWatermeterDto getWatermeterInfoByMetercode(@Param("metercode") String metercode, @Param("siteId") Integer siteId, @Param("customerId") Integer customerId );
+
+    Integer updateWatermeterInfo(@Param("baseWatermeterDto") BaseWatermeterDto baseWatermeterDto);
+
+    //插入水量同步基础信息(同步计划)
+    Integer insertSelectAmountBaseInfo( @Param("year") Integer year,@Param("month") Integer month,@Param("siteId") Integer siteId,@Param("customerId") Integer customerId);
+
+    //获取需要同步水量的水表编码
+    List<String> getSynAmountMetercode( @Param("year") Integer year,@Param("month") Integer month,@Param("siteId") Integer siteId,@Param("customerId") Integer customerId);
+
+    AmountSynParamDto GetAmountSynMeterInfo(@Param("year") Integer year, @Param("month") Integer month, @Param("siteId") Integer siteId, @Param("customerId") Integer customerId);
+
+    //获取同步计划
+    List<String> GetAmountSynInfo(@Param("year") Integer year, @Param("month") Integer month, @Param("siteId") Integer siteId, @Param("customerId") Integer customerId);
+
+
+    @MapKey("metercode")
+    HashMap<String, DeviceReplaceRecord > getRepalceRecordCount(@Param("year")Integer year, @Param("month")Integer month,@Param("siteId")Integer siteId,@Param("customerId")Integer customerId);
 
 }

+ 3 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/pay/PayBaseAccountMapper.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Select;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.LocalDate;
 import java.util.List;
 
 @Mapper
@@ -51,4 +52,6 @@ public interface PayBaseAccountMapper {
     List<PayMeter>findMeterInfo(@Param("queryInfo") String queryInfo, @Param("state") String state, @Param("siteId") BigInteger siteId, @Param("customerId") BigInteger customerId,@Param("year") Integer year,@Param("month") Integer month,@Param("programItemList") List<ProgramItem> programItemList);
 
     void updateAccountName(@Param("type")Integer type,@Param("accountname")String accountname,@Param("accountId")BigInteger accountId);
+
+    List<SynAccountInfo> getSynAccountInfo( @Param("createDate")String createDate);
 }

+ 29 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountDaySynParamDto.java

@@ -0,0 +1,29 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2020-10-09 8:28
+ */
+@Data
+@Api("结算水量同步接口请求参数")
+public class AmountDaySynParamDto implements Serializable {
+
+    private static final long serialVersionUID = 3519394900406918279L;
+
+    @ApiModelProperty("账期,格式yyyymmdd")
+    private String readTime;
+
+    @ApiModelProperty("客户编号")
+    private String customerNo;
+
+    @ApiModelProperty("水表编码")
+    private List<String> fileNo;
+}

+ 29 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountSynParamDto.java

@@ -0,0 +1,29 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2020-10-09 8:28
+ */
+@Data
+@Api("结算水量同步接口请求参数")
+public class AmountSynParamDto implements Serializable {
+
+    private static final long serialVersionUID = 3519394900406918279L;
+
+    @ApiModelProperty("账期,格式yyyymm")
+    private String yyyymm;
+
+    @ApiModelProperty("客户编号")
+    private String customerNo;
+
+    @ApiModelProperty("水表编码")
+    private List<String> fileNo;
+}

+ 26 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/AmountSynRespDto.java

@@ -0,0 +1,26 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2020-10-09 9:55
+ */
+@Data
+@Api("结算水量同步接口结果")
+public class AmountSynRespDto implements Serializable {
+
+    private static final long serialVersionUID = -4057222618378320320L;
+
+    @ApiModelProperty("本期抄表日期")
+    private  String currentPeriodDate;
+    @ApiModelProperty("水表档案号")
+    private  String fileNo;
+    @ApiModelProperty("本期读数")
+    private  String reading;
+}

+ 37 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/BaseWatermeterDto.java

@@ -0,0 +1,37 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDateTime;
+
+/**
+ * @description 水表信息
+ * @auto wangli
+ * @data 2020-09-28 10:53
+ */
+@Api("水表信息")
+@Data
+public class BaseWatermeterDto {
+
+    @ApiModelProperty("水表id")
+    private BigInteger id;
+    @ApiModelProperty("水表编码")
+    private String metercode;
+    @ApiModelProperty("水表表号")
+    private String eleno;
+    @ApiModelProperty("水表起度")
+    private BigDecimal stratcount;
+    @ApiModelProperty("创建者")
+    private BigInteger createBy;
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createDate;
+    @ApiModelProperty("修改者")
+    private BigInteger updateBy;
+    @ApiModelProperty("修改时间")
+    private LocalDateTime updateDate;
+
+}

+ 28 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/SiteinfoDto.java

@@ -0,0 +1,28 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigInteger;
+
+/**
+ * @description 站点信息
+ * @auto wangli
+ * @data 2020-09-28 16:05
+ */
+@Data
+@Api("站点信息")
+public class SiteinfoDto {
+
+    @ApiModelProperty("站点id")
+    private Integer id;
+    @ApiModelProperty("站点名称")
+    private String siteName;
+    @ApiModelProperty("客户id")
+    private Integer customerId;
+    @ApiModelProperty("客户编号")
+    private String customerNo;
+    @ApiModelProperty("客户名称")
+    private String customerName;
+}

+ 30 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/pay/SynAccountInfo.java

@@ -0,0 +1,30 @@
+package com.bz.smart_city.dto.pay;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2020-09-27 16:06
+ */
+@ApiModel("水务系统查询新建用户信息")
+@Data
+public class SynAccountInfo implements Serializable {
+
+    private static final long serialVersionUID = -4697217705878774042L;
+
+    @ApiModelProperty("客户编码")
+    private String accountNumber;
+    @ApiModelProperty("客户名称")
+    private String accountName;//
+    @ApiModelProperty("电话号码")
+    private String accountPhone;//
+    @ApiModelProperty("水表编码")
+    private String fileNo;//
+    @ApiModelProperty("创建日期")
+    private String createDate;
+}

+ 2 - 0
smart-city-platform/src/main/java/com/bz/smart_city/entity/pay/DeviceReplaceRecord.java

@@ -18,6 +18,8 @@ public class DeviceReplaceRecord implements Serializable {
 
     @ApiModelProperty("主键id")
     private BigInteger id;
+    @ApiModelProperty("水表Id")
+    private BigInteger watermeterId;
     @ApiModelProperty("水表编码")
     private String metercode;
     @ApiModelProperty("旧表电子号")

+ 42 - 0
smart-city-platform/src/main/java/com/bz/smart_city/quartz/job/AmountSyncByDayJob.java

@@ -0,0 +1,42 @@
+package com.bz.smart_city.quartz.job;
+
+import com.bz.smart_city.quartz.service.AmountSynByDayService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ * @create 2020-05-18 14:07
+ */
+@Slf4j
+@Component
+public  class AmountSyncByDayJob implements Job, Serializable {
+
+    private static final long serialVersionUID = 3336891083300321324L;
+
+    @Autowired
+    public AmountSynByDayService amountSynByDayService;
+
+
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        // 1,获取推送配置信息
+        /*JobDetail jobDetail = context.getJobDetail();
+        JobDataMap jobDataMap = jobDetail.getJobDataMap();
+        Integer siteId = jobDataMap.getInt("siteId");
+        Integer customerId = jobDataMap.getInt("customerId");
+        */
+        // 2,调用推送方法
+        log.info("invoke AmountSyncByDayJob");
+        amountSynByDayService.start();
+        log.info("invoked AmountSyncByDayJob");
+    }
+
+}

+ 39 - 0
smart-city-platform/src/main/java/com/bz/smart_city/quartz/job/AmountSyncJob.java

@@ -0,0 +1,39 @@
+package com.bz.smart_city.quartz.job;
+
+import com.bz.smart_city.quartz.service.AmountSynService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ * @create 2020-04-20 11:04
+ */
+@Slf4j
+@Component
+public class AmountSyncJob implements Job,Serializable {
+
+    @Autowired
+    public AmountSynService amountSynService;
+
+    private static final long serialVersionUID = 5386891083300321324L;
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        // 1,获取推送配置信息
+        JobDetail jobDetail = context.getJobDetail();
+        JobDataMap jobDataMap = jobDetail.getJobDataMap();
+        Integer siteId = jobDataMap.getInt("siteId");
+        Integer customerId = jobDataMap.getInt("customerId");
+
+        // 2,调用推送方法
+        log.info("invoke AmountSyncJob , customerId = {}",customerId);
+        amountSynService.amountUpdate(siteId,customerId);
+        log.info("invoked AmountSyncJob , customerId = {}",customerId);
+    }
+
+
+}

+ 7 - 0
smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/AmountSynByDayService.java

@@ -0,0 +1,7 @@
+package com.bz.smart_city.quartz.service;
+
+public interface AmountSynByDayService {
+    void saveQrtzTask();
+    void amountUpdateByDay(Integer siteId, Integer customerId);
+    void start();
+}

+ 248 - 0
smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/impl/AmountSynDayServiceImpl.java

@@ -0,0 +1,248 @@
+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.dto.pay.*;
+import com.bz.smart_city.entity.Customer;
+import com.bz.smart_city.entity.pay.AmountWaterUsedAmountByDay;
+import com.bz.smart_city.entity.pay.DeviceReplaceRecord;
+import com.bz.smart_city.entity.pay.archives.PayBaseCustomerandmeterrela;
+import com.bz.smart_city.quartz.entity.QuartzEntity;
+import com.bz.smart_city.quartz.job.AmountSyncByDayJob;
+import com.bz.smart_city.quartz.service.AmountSynByDayService;
+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.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2020-09-27 10:51
+ */
+@Slf4j
+@Component
+public class AmountSynDayServiceImpl implements AmountSynByDayService, InitializingBean {
+
+    @Value("1")
+    private BigInteger createBy;
+
+    @Value("http://114.135.61.188:58080/api/syncData/meterReadData")
+    private String amountDaySynUrl;
+
+    @Resource
+    private BaseClosingAccountInfoMapper baseClosingAccountInfoMapper;
+    @Resource
+    private AmountWaterUsedAmountMapper amountWaterUsedAmountMapper;
+    @Resource
+    private CustomerMapper customerMapper;
+    @Resource
+    private JobAndTriggerService jobAndTriggerService;
+
+    @Override
+    public void afterPropertiesSet() {
+        saveQrtzTask();
+    }
+
+    public void saveQrtzTask() {
+
+
+
+        // 1,查询需要批量推送的配置项目并构建定时任务
+        // 2,若对应定时任务不存在则创建
+        QuartzEntity entity = new QuartzEntity();
+        entity.setJobGroup("水量每天同步");
+        entity.setJobName("AmountSyncByDayJob" );
+        entity.setDescription("AmountSyncByDayJob" );
+        // modify by pengdi ,判断定时任务是否存在,不存在才进行新增
+
+        boolean exists = jobAndTriggerService.isExists(entity);
+        if(!exists){
+            String cron = "0 */1 * * * ?";
+            log.info("水量每天同步:" + cron);
+            entity.setCronExpression(cron);
+            entity.setJobClassName(AmountSyncByDayJob.class.getName());
+            jobAndTriggerService.save(entity);
+        }
+    }
+
+
+    public void deleteQrtzTask() {
+        // 1,查询需要批量推送的配置项目并构建定时任务
+        QuartzEntity entity = new QuartzEntity();
+        entity.setJobGroup("水量每天同步");
+        entity.setJobName("AmountSyncByDayJob");
+        if (jobAndTriggerService.isExists(entity)) {
+            jobAndTriggerService.deleteJob(entity);
+        }
+    }
+
+    public void start(){
+        List<PayBaseCustomerandmeterrela> payBaseCustomerandmeterrelas = amountWaterUsedAmountMapper.getCustIdAndSiteId();
+        for (PayBaseCustomerandmeterrela payBaseCustomerandmeterrela: payBaseCustomerandmeterrelas){
+            this.amountUpdateByDay(payBaseCustomerandmeterrela.getSiteId().intValue(),payBaseCustomerandmeterrela.getCustomerId().intValue());
+        }
+    }
+
+    @Override
+    public void amountUpdateByDay(Integer siteId, Integer customerId) {
+        //获取最新账期
+        BaseClosingAccountInfoDto baseClosingAccountInfoDto = baseClosingAccountInfoMapper.getLastClosingAccount(siteId, customerId);
+
+        if(baseClosingAccountInfoDto == null
+                || baseClosingAccountInfoDto .getYear() == null
+                || baseClosingAccountInfoDto.getMonth() == null){
+            log.info("每天同步水量失败:获取账期信息失败");
+            return ;
+        }
+        Integer year=baseClosingAccountInfoDto.getYear();
+        Integer month=baseClosingAccountInfoDto.getMonth();
+        //插入水量基础信息(同步计划)
+        Integer amountNumber = amountWaterUsedAmountMapper.getAllAmountCountByDay(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<AmountWaterUsedAmountByDay> amountWaterUsedAmountDtos = amountWaterUsedAmountMapper.getAllAmountRecordByDay(siteId, customerId);
+
+
+        if(amountWaterUsedAmountDtos.size() == 0){
+            log.info("每天同步水量失败:获取同步计划失败");
+            return;
+        }
+        //提取出水表编码集合
+        List<String> metercodes = amountWaterUsedAmountDtos.stream().map(
+                AmountWaterUsedAmountByDay -> AmountWaterUsedAmountByDay.getMetercode()).collect(Collectors.toList());
+
+        //获取账期内换表记录
+        HashMap<String, DeviceReplaceRecord> replaceRecordMap = amountWaterUsedAmountMapper.getRepalceRecordCount(year,month,siteId,customerId);
+
+        //批量更新水量信息
+        List<AmountWaterUsedAmountByDay> updates = new ArrayList<>();
+
+        //抄表数据结果
+        List<AmountSynRespDto> lists =new ArrayList<>();
+
+        for(int i=0;i<metercodes.size();i+=500){
+            AmountDaySynParamDto amountDaySynParamDto= new AmountDaySynParamDto();
+            amountDaySynParamDto.setReadTime(DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDate.now().plusDays(-1)));
+            amountDaySynParamDto.setCustomerNo(customerNo);
+            //一次查询五百条
+            List<String> selectList ;
+            if(i+500 >= metercodes.size()){
+                selectList=metercodes.subList(i,metercodes.size());
+            }else{
+                selectList=metercodes.subList(i,i+500);
+            }
+            amountDaySynParamDto.setFileNo(selectList);
+
+            String context=JSON.toJSON(amountDaySynParamDto).toString();
+            try {
+                String result= HttpClientUtils.doPostWithJson(amountDaySynUrl,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();
+            }
+        }
+
+        Map<String ,AmountSynRespDto> map = lists.stream().collect(Collectors.toMap(AmountSynRespDto::getFileNo, Function.identity(), (key1, key2) -> key2));
+
+
+        for (AmountWaterUsedAmountByDay amountWaterUsedAmountByDay : amountWaterUsedAmountDtos) {
+            BigInteger watermeterId = amountWaterUsedAmountByDay.getWatermeterId();
+            if (watermeterId != null && map.containsKey(amountWaterUsedAmountByDay.getMetercode())) {
+                AmountSynRespDto amountSynRespDto = map.get(amountWaterUsedAmountByDay.getMetercode());
+                BigDecimal readingOld = amountWaterUsedAmountByDay.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 = amountWaterUsedAmountByDay.getCalculateway();
+
+                    //换表记录计算
+                    if(replaceRecordMap.containsKey(amountWaterUsedAmountByDay.getMetercode())){
+                        DeviceReplaceRecord deviceReplaceRecord = replaceRecordMap.get(amountWaterUsedAmountByDay.getMetercode());
+                        replaceAmount=deviceReplaceRecord.getOldAmount();
+                    }
+                    //实际水量=本期水量+换表前水量
+                     Amount = readingNew.subtract(readingOld).add(replaceAmount);
+
+                        //计量方式判断
+                        if (calculateway.equals(1))//按实际用量
+                            payAmount = Amount;
+                        else if (calculateway.equals(2))//按固定量
+                            payAmount = BigDecimal.valueOf(amountWaterUsedAmountByDay.getFixedamount());
+                        else
+                            payAmount = Amount;
+
+                        if (payAmount.compareTo(BigDecimal.ZERO) < 0) {
+                            continue;
+                        }
+                    amountWaterUsedAmountByDay.setReading(readingNew);
+                    amountWaterUsedAmountByDay.setRecorddate(DateTimeUtil.parseDate(readDate, DateTimeUtil.DATE_TIME_FORMAT_SECOND));
+                    amountWaterUsedAmountByDay.setAmount(Amount);
+                    amountWaterUsedAmountByDay.setPayamount(payAmount);
+                    updates.add(amountWaterUsedAmountByDay);
+                    }
+                }
+            }
+            if (updates.size() > 0) {
+
+                for (AmountWaterUsedAmountByDay amountWaterUsedAmountDto : updates) {
+                    amountWaterUsedAmountMapper.updateByDate(amountWaterUsedAmountDto);
+                }
+            }
+        log.info("每天水量同步结束:" + LocalDateTime.now());
+        }
+}

+ 196 - 169
smart-city-platform/src/main/java/com/bz/smart_city/quartz/service/impl/AmountSynServiceImpl.java

@@ -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());
+        }
 }

+ 22 - 6
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/AmountWaterUsedAmountServiceImpl.java

@@ -6,6 +6,7 @@ import com.bz.smart_city.commom.model.Pagination;
 import com.bz.smart_city.commom.model.ResultStatus;
 import com.bz.smart_city.commom.util.*;
 import com.bz.smart_city.dao.CustomerMapper;
+import com.bz.smart_city.dao.SiteMapper;
 import com.bz.smart_city.dao.pay.*;
 import com.bz.smart_city.dao.pay.archives.PayBaseCustomerandmeterrelaMapper;
 import com.bz.smart_city.dto.CustomerDto;
@@ -70,7 +71,7 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
     @Resource
     private PayFeeMapper payFeeMapper;
     @Resource
-    private CustomerMapper customerMapper;
+    private SiteMapper siteMapper;
 
     @Override
     public Pagination<AmountWaterUsedAmountDto> getList(String condition, String accountNumber, String accountName, String meterCode, String address, Integer year, Integer month, Integer state,
@@ -646,12 +647,12 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
         DeviceReplaceRecord deviceReplaceRecord=new DeviceReplaceRecord();
         //根据客户编号查询出客户id、站点id
         if(deviceReplaceRecordDto != null && StringUtils.isNotBlank(deviceReplaceRecordDto.getCustomerNo())){
-            CustomerDto customerDto = customerMapper.getCustomerByCustomerno(deviceReplaceRecordDto.getCustomerNo());
-            if(customerDto == null){
+            SiteinfoDto siteinfoDto = siteMapper.getSiteAndCustomerByCustomerNo(deviceReplaceRecordDto.getCustomerNo());
+            if(siteinfoDto == null){
                 throw  new ServiceException(ResultStatus.CLEARING_DATA_QUERY_NO_CUSTOMER);
             }
-            deviceReplaceRecord.setSiteId(customerDto.getSiteId());
-            deviceReplaceRecord.setCustomerId(customerDto.getId());
+            deviceReplaceRecord.setSiteId(siteinfoDto.getId());
+            deviceReplaceRecord.setCustomerId(siteinfoDto.getCustomerId());
         }else{
             throw  new ServiceException(ResultStatus.LACK_NECESSARY_PARAM);
         }
@@ -670,9 +671,16 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
         AmountWaterUsedAmount amountWaterUsedAmount = amountWaterUsedAmountMapper.getLastReadrecord(deviceReplaceRecordDto.getMetercode(),deviceReplaceRecord.getSiteId(),deviceReplaceRecord.getCustomerId());
         if(amountWaterUsedAmount == null || amountWaterUsedAmount.getAmount() == null){
             //无上次抄表数据则取水表起度
-
+            BaseWatermeterDto baseWatermeterDto = amountWaterUsedAmountMapper.getWatermeterInfoByMetercode(deviceReplaceRecordDto.getMetercode(),deviceReplaceRecord.getSiteId(),deviceReplaceRecord.getCustomerId());
+            if(baseWatermeterDto == null || baseWatermeterDto.getStratcount() == null){
+                throw  new ServiceException("未查询到设备信息");
+            }else{
+                deviceReplaceRecord.setOldLastreading(baseWatermeterDto.getStratcount());
+                deviceReplaceRecord.setWatermeterId(baseWatermeterDto.getId());
+            }
         }else{
             deviceReplaceRecord.setOldLastreading(amountWaterUsedAmount.getAmount());
+            deviceReplaceRecord.setWatermeterId(amountWaterUsedAmount.getWatermeterId());
         }
         //计算出旧表水量
         deviceReplaceRecord.setOldAmount(deviceReplaceRecordDto.getOldReading().subtract(deviceReplaceRecord.getOldLastreading()));
@@ -686,6 +694,14 @@ public class AmountWaterUsedAmountServiceImpl implements AmountWaterUsedAmountSe
         deviceReplaceRecord.setNewStartcount(deviceReplaceRecordDto.getNewStartcount());
         deviceReplaceRecord.setRemarks("换表同步");
         amountWaterUsedAmountMapper.insertReplaceRecord(deviceReplaceRecord);
+        //修改水表信息电子号和起度
+        BaseWatermeterDto watermeterDto = new BaseWatermeterDto();
+        watermeterDto.setId(deviceReplaceRecord.getWatermeterId());
+        watermeterDto.setEleno(deviceReplaceRecord.getNewEleno());
+        watermeterDto.setStratcount(deviceReplaceRecord.getNewStartcount());
+        watermeterDto.setUpdateBy(new BigInteger("1"));
+        watermeterDto.setUpdateDate(LocalDateTime.now());
+        amountWaterUsedAmountMapper.updateWatermeterInfo(watermeterDto);
 
     }
 

+ 4 - 1
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/pay/PayBaseAccountServiceImpl.java

@@ -384,5 +384,8 @@ public class PayBaseAccountServiceImpl implements PayBaseAccountService {
         return accountNumber;
     }
 
-
+    @Override
+    public List<SynAccountInfo> getSynAccountInfo( String createDate){
+        return payBaseAccountMapper.getSynAccountInfo(createDate);
+    }
 }

+ 5 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/pay/PayBaseAccountService.java

@@ -36,5 +36,10 @@ public interface PayBaseAccountService {
 
     Pagination<PayMeter>findMeter(String queryInfo, String state, Integer pageNum, Integer pageSize);
 
+    //根据安装计划ID删除用户信息
+    //int delByPlanId(BigInteger planId);
+
     int getMaxAccountNumber(String CommunityCode);
+
+    List<SynAccountInfo> getSynAccountInfo( String createDate);
 }

+ 2 - 2
smart-city-platform/src/main/resources/application-prd.properties

@@ -167,5 +167,5 @@ udip.unit.url=http://47.112.15.78:8322
 #发票请求打印接口
 invoice.print.url=http://nnfpbox.nuonuocs.cn/shop/buyer/allow/cxfKp/cxfServerKpOrderSync.action
 invoice.query.url=http://nnfpbox.nuonuocs.cn/shop/buyer/allow/ecOd/queryElectricKp.action
-#光电直读agent url
-gd.agent.url=http://10.0.0.160:6377
+#抄表数据同步接口
+Sync.Data.Url=http://114.135.61.188:58080

+ 4 - 0
smart-city-platform/src/main/resources/mapper/AreaMapper.xml

@@ -31,6 +31,10 @@
         </if>
     </select>
 
+    <select id="getAllArea" resultType="com.bz.smart_city.dto.AreaDto">
+        select id as code,parent_id as pid,name from sc_area
+    </select>
+
 	<select id="findByLevelType"
 		resultType="com.bz.smart_city.dto.AreaRelevanceDto">
 		select a1.id,a1.name ,a2.`name` as property1,a3.`name` as property2

+ 1 - 1
smart-city-platform/src/main/resources/mapper/CustomerMapper.xml

@@ -244,7 +244,7 @@
         </if>
     </select>
     <select id="getListById" resultMap="BaseResultMap">
-        select id,customer_name from sc_customer where status = 1
+        select id,customer_name,customer_no from sc_customer where status = 1
         and id = #{customerId}
     </select>
     <select id="getCustomerTree" resultType="com.bz.smart_city.dto.CustomerDto">

+ 12 - 0
smart-city-platform/src/main/resources/mapper/SiteMapper.xml

@@ -192,5 +192,17 @@
         select count(1) from sc_site where status = 1 and customer_id = #{customerId}
         <if test="id != null"> and id != #{id}</if>
     </select>
+
+    <select id="getSiteAndCustomerByCustomerNo" resultType="com.bz.smart_city.dto.pay.SiteinfoDto">
+       select
+            s.id,
+            s.name as "siteName",
+            s.customer_id,
+            c.customer_no,
+            c.customer_name as "customerName"
+        from sc_site s
+        left join sc_customer c on s.customer_id=c.id
+        where c.customer_no=#{customerNo}
+    </select>
 </mapper>
 

+ 164 - 89
smart-city-platform/src/main/resources/mapper/pay/AmountWaterUsedAmountMapper.xml

@@ -216,6 +216,7 @@
 		select  amount.id,
 				amount.lastreading,
 				amount.ele_no eleNo,
+				amount.metercode metercode,
 				rela.calculateway,
 				rela.fixedamount,
 				amount.watermeter_id watermeterId,
@@ -331,7 +332,7 @@
 		) SELECT
 		c.id,
 		c.office_id,
-		ifnull( lastwua.reading, ifnull(sil.new_meter_start,0) ),
+		ifnull( lastwua.reading, ifnull(device.new_meter_start,0) ),
 		ifnull( lastwua.recorddate, c.create_date ),
 		c.metercode,
 		c.watermeter_id,
@@ -353,7 +354,7 @@
 		NULL
 		FROM
 		pay_base_customerandmeterrela c
-		LEFT JOIN sc_install_list sil ON sil.device_id = c.watermeter_id
+		LEFT JOIN sc_device device ON device.id = c.watermeter_id
 		LEFT JOIN pay_amount_waterusedamount_day amount ON amount.watermeter_id = c.watermeter_id
 		AND amount.read_date = DATE_FORMAT( DATE_SUB( now(), INTERVAL 1 DAY ), '%Y%m%d' )
 		LEFT JOIN (
@@ -384,32 +385,6 @@
 		limit 500
 	</insert>
 
-	<resultMap id="MeterReadRecordResultMap" type="com.bz.smart_city.dto.pay.MeterReadRecordDto">
-		<result column="device_id" property="deviceId" />
-		<result column="read_time" property="readTime" />
-		<result column="read_data" property="readData" />
-	</resultMap>
-
-	<select id ="getMeterReadRecord" resultMap="MeterReadRecordResultMap">
-		select
-		a.device_id,
-		a.read_data,
-		a.read_time
-		from sc_meter_read_record a
-		<where>
-
-			a.read_date=DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 day) ,'%Y%m%d')
-
-				and  a.device_id in
-
-				<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-					<if test="listItem != null and listItem != ''">
-						#{listItem}
-					</if>
-				</foreach>
-
-		</where>
-	</select>
 
 	<update id="updateByDate">
 
@@ -448,6 +423,7 @@
 		rela.calculateway,
 		rela.fixedamount,
 		amount.watermeter_id watermeterId,
+		amount.metercode,
 		amount.recorddate,
 		rela.id customerandmeterrelaId,
 		amount.waterproperty_id waterpropertyId,
@@ -480,67 +456,6 @@
 	group by c.customer_id, c.site_id
 	</select>
 
-	<resultMap id="ReplaceMeterMap" type="com.bz.smart_city.dto.pay.ReplaceMeterDto">
-
-	</resultMap>
-
-	<select id ="getRepalceRecord" resultMap="ReplaceMeterMap">
-		SELECT
-			pc.device_id AS deviceId,
-			pc.date_create AS replaceTime,
-			pc.new_begin_wsv AS newBegin,
-			pc.old_end_wsv AS oldEnd
-		FROM
-		(
-			SELECT
-				pc2.id,
-				MAX( pc2.date_create ) AS dateCreate
-			FROM
-				sc_water_meter_replace_log pc2
-				<where>
-					<if test="list != null and list.size() != 0">
-						pc2.device_id IN
-						<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-							<if test="listItem != null and listItem != ''">
-								#{listItem}
-							</if>
-						</foreach>
-					</if>
-				</where>
-
-			GROUP BY
-			pc2.id
-		) a
-		LEFT JOIN sc_water_meter_replace_log pc ON a.id = pc.id
-
-	</select>
-
-	<resultMap id="ReplaceMeterCountMap" type="com.bz.smart_city.dto.pay.ReplaceMeterCountDto">
-
-	</resultMap>
-	<select id="getRepalceRecordCount" resultMap="ReplaceMeterCountMap">
-		SELECT
-			COUNT(*) as number,
-			pc.device_id AS deviceId
-		FROM sc_water_meter_replace_log pc LEFT JOIN sc_device scd on pc.device_id = scd.id
-		<where>
-			<if test="stTime != null"> and pc.date_create >= #{stTime,jdbcType=TIMESTAMP}</if>
-			<if test="etTime != null"> and pc.date_create &lt;= #{etTime,jdbcType=TIMESTAMP}</if>
-			<if test="siteId != null"> and scd.site_id = #{siteId}</if>
-			<if test="customerId != null"> and scd.customer_id = #{customerId}</if>
-			<if test="list != null and list.size() != 0">
-				and pc.device_id IN
-				<foreach collection="list" item="listItem" open="(" close=")" separator=",">
-					<if test="listItem != null and listItem != ''">
-						#{listItem}
-					</if>
-				</foreach>
-			</if>
-
-		</where>
-			GROUP BY pc.device_id
-	</select>
-
 	<select id ="getRepalceRecordDetail" resultType="com.bz.smart_city.dto.pay.ReplaceMeterDto">
 		SELECT
 		pc.device_id AS deviceId,
@@ -578,11 +493,45 @@
 		order by a.approvetime desc
 		limit 1
 	</select>
+	<select id="getWatermeterInfoByMetercode" resultType="com.bz.smart_city.dto.pay.BaseWatermeterDto">
+		select
+			id
+			,metercode
+			,water_meter_no as "eleno"
+			,new_meter_start  as "stratcount"
+		from sc_device
+		where site_id=#{siteId}
+		and customer_id=#{customerId}
+		and metercode=#{metercode}
+	</select>
+
+	<update id="updateWatermeterInfo">
+		update sc_device set
+		<set>
+			<if test="metercode != null and metercode != ''">
+				metercode=#{metercode},
+			</if>
+			<if test="eleno != null and eleno != ''">
+				water_meter_no = #{eleno},
+			</if>
+			<if test="stratcount != null ">
+				new_meter_start = #{stratcount},
+			</if>
+			<if test="updateBy != null ">
+				update_by = #{updateBy},
+			</if>
+			<if test="updateDate != null ">
+				date_update = #{updateDate},
+			</if>
+		</set>
+		where id=#{id}
+	</update>
 
 	<insert id="insertReplaceRecord">
 
 		insert into pay_device_replace_record
 		(
+			watermeter_id,
 			metercode,
 			old_eleno,
 			new_eleno,
@@ -597,6 +546,7 @@
 			year,
 			month)
 		value(
+			#{watermeterId},
 			#{metercode},
 			#{oldEleno},
 			#{newEleno},
@@ -612,4 +562,129 @@
 			#{month})
 	</insert>
 
+	<insert id="insertSelectAmountBaseInfo">
+	insert into pay_amount_waterusedamount (
+		customerandmeterrela_id
+		,office_id
+		,lastreading
+		,lastrecorddate
+		,metercode
+		,watermeter_id
+		,month
+		,state
+		,waterproperty_id
+		,year
+		,account_id
+		,accountname
+		,accountnumber
+		,watertype
+		,isprint
+		,ele_no
+		,create_by
+		,create_date
+		,update_by
+		,update_date
+		,remarks
+		,del_flag
+		,site_id
+		,customer_id
+		)
+		select
+		c.id as customerandmeterrela_id
+		,c.office_id
+		,ifnull(amount.reading,d.new_meter_start) as lastreading
+		,ifnull(amount.recorddate,d.date_create) as lastrecorddate
+		,c.metercode
+		,c.watermeter_id
+		,#{month}
+		,1
+		,p.id as waterproperty_id
+		,#{year}
+		,c.account_id
+		,c.accountname
+		,c.accountnumber
+		,c.watertype
+		,0
+		,d.water_meter_no as ele_no
+		,'1'
+		,now()
+		,'1'
+		,now()
+		,'抄表计划'
+		,'0'
+		,#{siteId}
+		,#{customerId}
+		from pay_base_customerandmeterrela c
+		left join pay_base_waterproperty p on c.waterproperty_id=p.id
+		left join sc_device d on c.watermeter_id=d.id
+		left join (
+			select
+			a.watermeter_id,
+			a.reading,
+			a.recorddate
+			from (
+				select
+					ele_no
+					,max(create_date) create_date
+				from pay_amount_waterusedamount
+				where state =2
+				group by ele_no
+			)	aLast
+			left join pay_amount_waterusedamount a on a.ele_no=aLast.ele_no and a.create_date=aLast.create_date
+		) amount on amount.watermeter_id=c.watermeter_id
+		where c.businessstate= 1 and c.site_id=#{siteId} and c.customer_id=#{customerId}
+	</insert>
+
+	<select id="getSynAmountMetercode" resultType="java.lang.String">
+		select metercode from pay_amount_waterusedamount
+ 		where year = #{year} and month = #{month} and  site_id = #{siteId} and customer_id=#{customerId}
+	</select>
+
+	<resultMap id="AmountSynParam" type="com.bz.smart_city.dto.pay.AmountSynParamDto">
+		<result  column="yyyymm" property="yyyymm" jdbcType="VARCHAR"/>
+		<result  column="customerNo" property="customerNo"  jdbcType="VARCHAR" />
+		<collection property="fileNo" resultMap="metercodes" />
+	</resultMap>
+
+	<resultMap id="metercodes" type="java.lang.String">
+		<result column="metercode"/>
+	</resultMap>
+
+	<select id="GetAmountSynMeterInfo" resultMap="AmountSynParam">
+		select
+			concat(year,month) as "yyyymm"
+			,c.customer_no as "customerNo"
+			,a.metercode as "metercode"
+		from pay_amount_waterusedamount a
+		left join sc_customer c on a.customer_id=c.id
+		where a.customer_id=#{customerId} and a.site_id=#{siteId}
+		and a.`year`=#{year} and a.`month`=#{month}
+	</select>
+
+	<select id="GetAmountSynInfo" resultType="java.lang.String">
+		select
+			a.metercode as "metercode"
+		from pay_amount_waterusedamount a
+		left join sc_customer c on a.customer_id=c.id
+		where a.customer_id=#{customerId} and a.site_id=#{siteId}
+		and a.`year`=#{year} and a.`month`=#{month}
+	</select>
+
+	<resultMap id="ReplaceMeterCountMap" type="com.bz.smart_city.entity.pay.DeviceReplaceRecord">
+
+	</resultMap>
+	<select id="getRepalceRecordCount" resultMap="ReplaceMeterCountMap">
+		select
+			id
+			,watermeter_id as "watermeterId"
+			,metercode
+			,create_date as "createDate"
+			,old_lastreading as "oldLastreading"
+			,old_reading as "oldReading"
+			,old_amount as "oldAmount"
+		from pay_device_replace_record
+		where site_id=#{siteId} and customer_id=#{customerId} and year=#{year} and month =#{month}
+	</select>
+
+
 </mapper>

+ 13 - 0
smart-city-platform/src/main/resources/mapper/pay/PayBaseAccountMapper.xml

@@ -522,4 +522,17 @@
             update pay_pay_messagesendrecord set accountname =#{accountname} where account_id =#{accountId}
         </if>
     </update>
+    <select id="getSynAccountInfo" resultType="com.bz.smart_city.dto.pay.SynAccountInfo">
+        select
+            a.accountnumber as "accountNumber"
+            ,a.name as "accountName"
+            ,a.mobilephone as "accountPhone"
+            ,c.metercode as "fileNo"
+            ,c.create_date as "createDate"
+        from pay_base_customerandmeterrela c
+        left join pay_base_account a on c.account_id=a.id
+        <if test="createDate != null and createDate != ''">
+            where DATE_FORMAT( c.create_date, "%Y%m%d" ) = #{createDate}
+        </if>
+    </select>
 </mapper>