Bläddra i källkod

每日抄表读数同步接口,

结算水量同步接口:
hym 4 år sedan
förälder
incheckning
b1fac5438b
20 ändrade filer med 327 tillägg och 7 borttagningar
  1. 2 2
      smart-city-platform/src/main/java/com/bz/smart_city/commom/model/ResultStatus.java
  2. 3 2
      smart-city-platform/src/main/java/com/bz/smart_city/commom/security/WebSecurityConfig.java
  3. 61 0
      smart-city-platform/src/main/java/com/bz/smart_city/controller/SyncDataApi.java
  4. 3 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/ClearingRecordItemMapper.java
  5. 3 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/CommunityMapper.java
  6. 2 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/DeviceMapper.java
  7. 2 0
      smart-city-platform/src/main/java/com/bz/smart_city/dao/MeterReadRecordMapper.java
  8. 2 1
      smart-city-platform/src/main/java/com/bz/smart_city/dto/ClearingDataDTO.java
  9. 20 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/AreaRequstData.java
  10. 19 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/AreaResponseData.java
  11. 12 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/ClearDataDto.java
  12. 20 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/ClearDataReuqstDto.java
  13. 9 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/MeterReadDataDto.java
  14. 18 0
      smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/MeterReadDataRequestDto.java
  15. 15 0
      smart-city-platform/src/main/java/com/bz/smart_city/service/SyncDataService.java
  16. 91 0
      smart-city-platform/src/main/java/com/bz/smart_city/service/sync/SyncDataServiceImpl.java
  17. 13 0
      smart-city-platform/src/main/resources/mapper/ClearingRecordItemMapper.xml
  18. 13 1
      smart-city-platform/src/main/resources/mapper/CommunityMapper.xml
  19. 9 1
      smart-city-platform/src/main/resources/mapper/DeviceMapper.xml
  20. 10 0
      smart-city-platform/src/main/resources/mapper/MeterReadRecordMapper.xml

+ 2 - 2
smart-city-platform/src/main/java/com/bz/smart_city/commom/model/ResultStatus.java

@@ -98,8 +98,8 @@ public enum ResultStatus {
     PAYFEE_NOT_ENOUGH(-725,"缴费金额不足"),
     PAY_INVOICE_EXISTED(-726,"收据信息已存在"),
     PAY_CONDITION_ISNULL(-727,"查询条件为空"),
-    CUSTOMER_IS_EXISTED(-3001,"客户名称已存在");
-
+    CUSTOMER_IS_EXISTED(-3001,"客户名称已存在"),
+    SYBC_DATA_PARM_ERROR(-3002,"档案号个数太多,限制为30个");
     private final int status;
 
     private final String message;

+ 3 - 2
smart-city-platform/src/main/java/com/bz/smart_city/commom/security/WebSecurityConfig.java

@@ -99,10 +99,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/watermeter/getMeterReadData","/watermeter/getDeviceCustomerInfo","/watermeter/getPeriodMeterReadData","/data/clearingData","/data/meterReadData")
                 .antMatchers("/apply/register","/apply/detail","/apply/approve")
                 .antMatchers("/payFee/payFee")
-                .antMatchers("/printinvoice/InvoicePrintRequest")
+                .antMatchers("/printinvoice/InvoicePrintRequest","/common/getAllArea","/system/community/queryCommunity","/mobile/assistant/getMeterTypes")
                 .antMatchers("/waterMeter/getMeterByDeviceNo")
                 .antMatchers("/device/synArchies","/installPlan/syncPlan")
-                .antMatchers("/druid/**");
+                .antMatchers("/druid/**").antMatchers("/syncData/**");
+
     }
 
 

+ 61 - 0
smart-city-platform/src/main/java/com/bz/smart_city/controller/SyncDataApi.java

@@ -0,0 +1,61 @@
+package com.bz.smart_city.controller;
+
+import com.bz.smart_city.commom.model.AjaxMessage;
+import com.bz.smart_city.commom.model.ListObjectWrapper;
+import com.bz.smart_city.commom.model.ResultStatus;
+import com.bz.smart_city.dto.ClearingDataDTO;
+import com.bz.smart_city.dto.syncdata.*;
+import com.bz.smart_city.service.SyncDataService;
+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.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@ResponseBody
+@RequestMapping("/syncData")
+@Api(tags = "数据同步接口类")
+public class SyncDataApi {
+    @Autowired
+    private SyncDataService syncDataService;
+    @ResponseBody
+    @PostMapping ("/clearingData")
+    @ApiOperation(value = "结算水量同步接口")
+    public AjaxMessage<ListObjectWrapper<ClearDataDto>> queryClearingDataList(
+        @RequestBody ClearDataReuqstDto clearDataDto ){
+        ListObjectWrapper<ClearDataDto> clearDataDtoListObjectWrapper = syncDataService.queryClearingDataList(clearDataDto.getYyyymm(),
+                clearDataDto.getFileNo(), clearDataDto.getCustomerNo());
+        if(clearDataDtoListObjectWrapper!=null){
+            return  new AjaxMessage<>(ResultStatus.OK,clearDataDtoListObjectWrapper);
+        }else{
+            return  new AjaxMessage<>(ResultStatus.SYBC_DATA_PARM_ERROR,null);
+        }
+
+    }
+    @ResponseBody
+    @PostMapping("/meterReadData")
+    @ApiOperation(value = "每日抄表读数同步接口")
+    public AjaxMessage<ListObjectWrapper<MeterReadDataDto>> querymeterReadData(
+            @RequestBody MeterReadDataRequestDto meterReadDataRequestDto
+            ){
+        ListObjectWrapper<MeterReadDataDto> meterReadDataDtoListObjectWrapper = syncDataService.queryMeterReadData(meterReadDataRequestDto.getReadTime()
+                , meterReadDataRequestDto.getFileNo(), meterReadDataRequestDto.getCustomerNo());
+        if(meterReadDataDtoListObjectWrapper!=null){
+            return  new AjaxMessage<>(ResultStatus.OK,meterReadDataDtoListObjectWrapper);
+        }else {
+            return  new AjaxMessage<>(ResultStatus.SYBC_DATA_PARM_ERROR,null);
+        }
+
+    }
+   /* @ResponseBody
+    @GetMapping("/queryAreaByName")
+    @ApiOperation(value = "获取小区名称对应区域接口")
+    public AjaxMessage<AreaResponseData> queryAreaByName(@RequestBody AreaRequstData areaRequstData){
+
+        return  new AjaxMessage<>(ResultStatus.OK,syncDataService.queryAreaByName(areaRequstData));
+    }*/
+}

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

@@ -54,5 +54,8 @@ public interface ClearingRecordItemMapper {
     @MapKey("deviceId")
     HashMap<BigInteger, ClearingDataInfoDto> findClearingDataHashMap(@Param("clearingRecordId")Integer clearingRecordId,
                                                                      @Param("isAudit")Integer isAudit);
+
+    List<ClearingDataDTO> findSycnClearing(@Param("deviceIds")List<Long> deviceIds,
+                                           @Param("accountPeriod")String accountPeriod);
     
 }

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

@@ -1,6 +1,8 @@
 package com.bz.smart_city.dao;
 
 import com.bz.smart_city.dto.CommunityDto;
+import com.bz.smart_city.dto.syncdata.AreaRequstData;
+import com.bz.smart_city.dto.syncdata.AreaResponseData;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -43,4 +45,5 @@ public interface CommunityMapper {
     List<Community> getMaxCodeBySiteId(@Param("siteId") Integer siteId);
 
     List<CommunityDto> getListByCustomerIds(@Param("siteId") Integer siteId, @Param("customerIds") List<Integer> customerIds, @Param("communityName") String communityName, @Param("province") Integer province, @Param("city") Integer city, @Param("region") Integer region);
+    AreaResponseData findCommunityByArea(AreaRequstData areaRequstData);
 }

+ 2 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/DeviceMapper.java

@@ -157,5 +157,7 @@ public interface DeviceMapper {
             @Param("deviceNo") String deviceNo,
             @Param("waterMeterNo") String waterMeterNo,
             @Param("programItems") List<ProgramItem> programItems);
+    List<Device> findByFileNo(@Param("fileNos") List<String> fileNos,
+                              @Param("customerNo") String customerNo);
 }
 

+ 2 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dao/MeterReadRecordMapper.java

@@ -97,5 +97,7 @@ public interface MeterReadRecordMapper {
                                               @Param("deviceNo") String deviceNo,
                                               @Param("electronicNo") String electronicNo,
                                               @Param("custId") Integer custId);
+    List<MeterReadRecord> findSyncMeterRecord(@Param("deviceIds")List<Long>deviceIds,
+                                              @Param("readTime") String readTime);
 
 }

+ 2 - 1
smart-city-platform/src/main/java/com/bz/smart_city/dto/ClearingDataDTO.java

@@ -11,5 +11,6 @@ public class ClearingDataDTO {
 	private Double lastPeriodData; 
 	private Double  currentPeriodData; 
 	private String  meterReadDate; 
-	private Double  wsvCost ; 
+	private Double  wsvCost ;
+	private Long deviceId;
 }

+ 20 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/AreaRequstData.java

@@ -0,0 +1,20 @@
+package com.bz.smart_city.dto.syncdata;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("获取小区名称对应区域参数")
+public class AreaRequstData {
+    @ApiModelProperty(value = "小区名称",position = 1)
+    private String name;
+    @ApiModelProperty(value = "省ID",position = 2)
+    private Integer province;
+    @ApiModelProperty(value = "市ID",position = 3)
+    private Integer city;
+    @ApiModelProperty(value = "区ID",position = 4)
+    private Integer region;
+    @ApiModelProperty(value = "小区ID",position = 5)
+    private Integer communityId;
+}

+ 19 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/AreaResponseData.java

@@ -0,0 +1,19 @@
+package com.bz.smart_city.dto.syncdata;
+
+import lombok.Data;
+
+@Data
+public class AreaResponseData {
+    private String address;
+    private String city;
+    private Integer latitude;
+    private Integer longitude;
+    private String name;
+    private Integer provice;
+    private Integer region;
+    private String remark;
+    private String provinceName;
+    private String cityName;
+    private String regionName;
+
+}

+ 12 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/ClearDataDto.java

@@ -0,0 +1,12 @@
+package com.bz.smart_city.dto.syncdata;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ClearDataDto {
+ private String fileNo;
+    private double reading;
+
+}

+ 20 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/ClearDataReuqstDto.java

@@ -0,0 +1,20 @@
+package com.bz.smart_city.dto.syncdata;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("结算水量")
+public class ClearDataReuqstDto {
+    @ApiModelProperty(value = "账期,格式yyyymm",position = 1)
+    private String yyyymm;
+    @ApiModelProperty(value = "客户编号",position = 2)
+    private String customerNo;
+    @ApiModelProperty(value = "档案号",position = 3)
+    private List<String> fileNo;
+
+
+}

+ 9 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/MeterReadDataDto.java

@@ -0,0 +1,9 @@
+package com.bz.smart_city.dto.syncdata;
+
+import lombok.Data;
+
+@Data
+public class MeterReadDataDto {
+    private String fileNo;
+    private String reading;
+}

+ 18 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/syncdata/MeterReadDataRequestDto.java

@@ -0,0 +1,18 @@
+package com.bz.smart_city.dto.syncdata;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("每日抄表读数")
+public class MeterReadDataRequestDto {
+    @ApiModelProperty(value = "抄表日期,格式yyyymm",position = 1)
+    private String readTime;
+    @ApiModelProperty(value = "客户编号",position = 2)
+    private String customerNo;
+    @ApiModelProperty(value = "档案号",position = 3)
+    private List<String> fileNo;
+}

+ 15 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/SyncDataService.java

@@ -0,0 +1,15 @@
+package com.bz.smart_city.service;
+
+import com.bz.smart_city.commom.model.ListObjectWrapper;
+import com.bz.smart_city.dto.syncdata.AreaRequstData;
+import com.bz.smart_city.dto.syncdata.AreaResponseData;
+import com.bz.smart_city.dto.syncdata.ClearDataDto;
+import com.bz.smart_city.dto.syncdata.MeterReadDataDto;
+
+import java.util.List;
+
+public interface SyncDataService {
+     ListObjectWrapper<ClearDataDto> queryClearingDataList(String yyyymm, List<String> fileNos, String customerId);
+     ListObjectWrapper<MeterReadDataDto> queryMeterReadData(String readTime, List<String> fileNos, String customerId);
+     AreaResponseData queryAreaByName(AreaRequstData communityName);
+}

+ 91 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/sync/SyncDataServiceImpl.java

@@ -0,0 +1,91 @@
+package com.bz.smart_city.service.sync;
+
+import com.bz.smart_city.commom.model.ListObjectWrapper;
+import com.bz.smart_city.dao.ClearingRecordItemMapper;
+import com.bz.smart_city.dao.CommunityMapper;
+import com.bz.smart_city.dao.DeviceMapper;
+import com.bz.smart_city.dao.MeterReadRecordMapper;
+import com.bz.smart_city.dto.ClearingDataDTO;
+import com.bz.smart_city.dto.syncdata.AreaRequstData;
+import com.bz.smart_city.dto.syncdata.AreaResponseData;
+import com.bz.smart_city.dto.syncdata.ClearDataDto;
+import com.bz.smart_city.dto.syncdata.MeterReadDataDto;
+import com.bz.smart_city.entity.Device;
+import com.bz.smart_city.entity.MeterReadRecord;
+import com.bz.smart_city.service.SyncDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+@Service
+public class SyncDataServiceImpl implements SyncDataService {
+    @Autowired
+    private ClearingRecordItemMapper clearingRecordItemMapper;
+    @Autowired
+    private DeviceMapper deviceMapper;
+    @Autowired
+    private MeterReadRecordMapper meterReadRecordMapper;
+    @Autowired
+    private CommunityMapper communityMapper;
+    @Override
+    public ListObjectWrapper<ClearDataDto> queryClearingDataList(String yyyymm, List<String> fileNos, String customerNo) {
+        Map<String, Object> deviceInfo = getDeviceInfo(fileNos, customerNo);
+        if(deviceInfo==null){
+            return null;
+        }
+        List<Long> deviceIds = (List<Long>)deviceInfo .get("ids");
+        List<ClearingDataDTO> sycnClearing = clearingRecordItemMapper.findSycnClearing(deviceIds, yyyymm);
+        Map<Long,String>idMatchFileNo= (Map<Long, String>) deviceInfo.get("matchs");
+        List<ClearDataDto>result=new ArrayList<>();
+        sycnClearing.forEach(clearingDataDTO -> {
+            ClearDataDto clearDataDto=new ClearDataDto();
+            clearDataDto.setFileNo(idMatchFileNo.get(clearingDataDTO.getDeviceId()));
+            clearDataDto.setReading(clearingDataDTO.getWsvCost());
+            result.add(clearDataDto);
+        });
+        return new ListObjectWrapper<ClearDataDto>(result);
+    }
+
+    @Override
+    public ListObjectWrapper<MeterReadDataDto> queryMeterReadData(String readTime, List<String> fileNos, String customerNo) {
+        Map<String, Object> deviceInfo = getDeviceInfo(fileNos, customerNo);
+        if(deviceInfo==null){
+            return null;
+        }
+        List<Long> deviceIds = (List<Long>)deviceInfo .get("ids");
+        List<MeterReadRecord> syncMeterRecords = meterReadRecordMapper.findSyncMeterRecord(deviceIds, readTime);
+        List<MeterReadDataDto> meterReadDataDtos = new ArrayList<>();
+        Map<Long,String>idMatchFileNo= (Map<Long, String>) deviceInfo.get("matchs");
+        syncMeterRecords.forEach(syncMeterRecord->{
+            MeterReadDataDto meterReadDataDto = new MeterReadDataDto();
+            meterReadDataDto.setFileNo(idMatchFileNo.get(syncMeterRecord.getDeviceId()));
+            meterReadDataDto.setReading(syncMeterRecord.getReadData());
+            meterReadDataDtos.add(meterReadDataDto);
+        });
+        return new ListObjectWrapper<MeterReadDataDto>(meterReadDataDtos);
+    }
+    private Map<String,Object>getDeviceInfo(List<String> fileNoList, String customerNo){
+
+        if(fileNoList.size()>30){
+            return null;
+        }
+        List<Device> byFileNo = deviceMapper.findByFileNo(fileNoList, customerNo);
+        Map<Long,String>idMatchFileNo=new HashMap<>();
+        List<Long>deviceIds=new ArrayList<>();
+        byFileNo.forEach(device -> {
+            deviceIds.add(device.getId());
+            idMatchFileNo.put(device.getId(),device.getWaterMeterFileNo());
+        });
+        Map<String,Object>result=new HashMap<>();
+        result.put("ids",deviceIds);
+        result.put("matchs",idMatchFileNo);
+        return  result;
+    }
+    @Override
+    public AreaResponseData queryAreaByName(AreaRequstData areaRequstData) {
+        return  communityMapper.findCommunityByArea(areaRequstData);
+    }
+}

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

@@ -390,5 +390,18 @@
             and is_audit = #{isAudit}
         </if>
     </select>
+    <select id="findSycnClearing" resultType="com.bz.smart_city.dto.ClearingDataDTO">
+        SELECT
+        device_id as deviceId,
+        water_cost as wsvCost
+        FROM
+        sc_clearing_record_item it
+        LEFT JOIN sc_clearing_record r ON ( it.record_id = r.id )
+        where account_period=#{accountPeriod} and  device_id in
+        <foreach collection="deviceIds" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+
 
+    </select>
 </mapper>

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

@@ -380,6 +380,18 @@
         <if test="region != null"> and sc.region = #{region}</if>
         order by sc.date_create desc
     </select>
-
+<select id="findCommunityByArea" parameterType="com.bz.smart_city.dto.syncdata.AreaRequstData" resultType="com.bz.smart_city.dto.syncdata.AreaResponseData">
+        select a.address,b.manger_name,a.`name`, a.city,a.customer_id,a.latitude,
+        a.longitude,a.province,a.region,a.remark,b.`name` regionName
+        from sc_community a join sc_area b on a.region=b.id
+        <where>
+            <if test="name != null"> and a.name = #{name} </if>
+            <if test="province != null"> and a.province = #{province} </if>
+            <if test="city != null"> and a.city = #{city} </if>
+            <if test="region != null"> and a.region = #{region} </if>
+            <if test="communityId != null"> and a.id = #{communityId} </if>
+        </where>
+        limit 1
+</select>
 </mapper>
 

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

@@ -1101,6 +1101,14 @@
             </foreach>
         </if>
     </select>
-
+    <select id="findByFileNo"  resultType="com.bz.smart_city.entity.Device">
+        select b.water_meter_file_no ,b.id from sc_customer a left join  sc_device b on a.id=b.customer_id
+        where
+        a.customer_no=#{customerNo}
+        and b.water_meter_file_no in
+        <foreach collection="fileNos" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
 </mapper>
 

+ 10 - 0
smart-city-platform/src/main/resources/mapper/MeterReadRecordMapper.xml

@@ -1666,5 +1666,15 @@
         </set>
         where device_id= #{meterReadRecord.deviceId,jdbcType=BIGINT}
     </update>
+    <select id="findSyncMeterRecord" resultMap="BaseResultMap">
+        select device_id,meter_file_no,read_data from sc_meter_read_record
+        where read_date=#{readTime}
+        and device_id in
+        <foreach collection="deviceIds" item="item" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+
+
+    </select>
 </mapper>