Browse Source

调整表同步方式,更新第三方id

hym 4 years ago
parent
commit
5cf57264cb

+ 1 - 1
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/controller/DemoController.java

@@ -34,7 +34,7 @@ public class DemoController {
     private SyncService syncService;
     @GetMapping("/getBaseInfo")
     public void countPlanDevice(){
-        syncService.countPlanDevice();
+        syncService.uploadRelationId();
     }
     @GetMapping("/uploadData")
     public void uploadData(){

+ 6 - 0
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/dao/mysql/SendDao.java

@@ -20,4 +20,10 @@ public interface SendDao {
      Building getBuilding(Integer buildingId);
 
      void insertSelective(DeviceDimension deviceDimension);
+
+    void updateRelationId(Device device);
+
+    List<Map<String, String>> selectRelationIdsByDeviceNo(List<MeterReadRecord> meterReadRecords);
+
+    Set<String> selectMeterNo(Map<String, Object> args);
 }

+ 2 - 0
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/entity/Device.java

@@ -111,4 +111,6 @@ public class Device implements Serializable {
      */
 
     private String sealNo;
+    //第三方关联id
+    private String relationId;
 }

+ 35 - 16
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/job/SyncMeterDataJob.java

@@ -37,6 +37,11 @@ public class SyncMeterDataJob implements Job {
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         Object params = jobExecutionContext.getJobDetail().getJobDataMap().get("params");
         Map<String,Object> map= (Map<String, Object>) params;
+        sendTask(map);
+
+
+    }
+    public void sendTask( Map<String,Object> map){
         TaskEntity taskEntity=new TaskEntity();
         String planId=(String) map.get("PlanId");
         taskEntity.setPlanId(planId);
@@ -44,31 +49,37 @@ public class SyncMeterDataJob implements Job {
         receiveDao.creatUploadTask(taskEntity);
         log.info("通知上传任务 ,任务返回信息={}",taskEntity.getReturnMsg());
         if(taskEntity.getReturnCode()==1){
-         try {
-            uploadData((Date) map.get("UploadTime"),taskEntity.getTaskId());
+            try {
+                uploadData((Date) map.get("UploadTime"),taskEntity.getTaskId());
 
-          }catch (Exception e){
+            }catch (Exception e){
                 log.error("泗水上传数据失败",e);
             }
-         finally{
-             quartzManager.deleteJob(planId);
-             log.info("删除定时计划={}",planId);
-         }
+            finally{
+                quartzManager.deleteJob(planId);
+                log.info("删除定时计划={}",planId);
+            }
         }
-
-
     }
     private void uploadData(Date uploadDate,String taskId){
         List<MeterDataEntity>datas=new ArrayList<>();
         SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<MeterReadRecord> meterReadRecords = getMeterReadRecord(uploadDate);
-        meterReadRecords.forEach(meterReadRecord -> {
-            MeterDataEntity meterDataEntity=new MeterDataEntity();
-            meterDataEntity.setReleationId(StringUtils.upperCase(meterReadRecord.getDeviceNo()));
-            meterDataEntity.setCurrentReading(Float.parseFloat(meterReadRecord.getReadData()));
-            meterDataEntity.setCurrentReadDate(simpleDateFormat.format(meterReadRecord.getReadTime()));
-            datas.add(meterDataEntity);
-        });
+        Map<String, String> meterReadRecordRelationId = getMeterReadRecordRelationId(meterReadRecords);
+        if(meterReadRecords.size()>0){
+            meterReadRecords.forEach(meterReadRecord -> {
+                MeterDataEntity meterDataEntity=new MeterDataEntity();
+                String relationId = meterReadRecordRelationId.get(meterReadRecord.getDeviceNo());
+                if(relationId!=null){
+                    meterDataEntity.setReleationId(StringUtils.upperCase(relationId));
+                    meterDataEntity.setCurrentReading(Float.parseFloat(meterReadRecord.getReadData()));
+                    meterDataEntity.setCurrentReadDate(simpleDateFormat.format(meterReadRecord.getReadTime()));
+                    datas.add(meterDataEntity);
+                }
+
+            });
+        }
+
 
         if(datas.size()>0){
             UploadWaterMeterDataEntity uploadWaterMeterDataEntity=new UploadWaterMeterDataEntity();
@@ -79,6 +90,14 @@ public class SyncMeterDataJob implements Job {
                     uploadWaterMeterDataEntity.getReturnMsg(),uploadWaterMeterDataEntity.getReturnCode());
         }
     }
+    private Map<String,String>getMeterReadRecordRelationId( List<MeterReadRecord> meterReadRecords){
+        Map<String,String>relationIds=new HashMap<>();
+        List<Map<String,String>>maps=sendDao.selectRelationIdsByDeviceNo(meterReadRecords);
+        maps.forEach(map->{
+            relationIds.put(map.get("deviceNo"),map.get("relationId"));
+        });
+        return  relationIds;
+    }
     private   List<MeterReadRecord>getMeterReadRecord(Date date){
         Map<String,Object>args=new HashMap<>();
         LocalDateTime time=dateToLocateDateTime(date);

+ 37 - 0
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/service/SyncService.java

@@ -40,6 +40,8 @@ public class SyncService {
     String model;
     @Autowired
     private QuartzManager quartzManager;
+    @Autowired
+    private SyncMeterDataJob syncMeterDataJob;
 
     //@Scheduled(cron = "0 0 * * * ?")
     public void countPlanDevice(){
@@ -62,6 +64,39 @@ public class SyncService {
 
 
 
+    }
+    public void uploadRelationId(){
+        WaterMeterBaseEntity waterMeterBaseEntity=new WaterMeterBaseEntity();
+
+        log.info("获取泗水水表列表");
+        List<Map<String, Object>> meterInfor = receiveDao.getMeterInfor(waterMeterBaseEntity);
+        Sets.SetView<String> meterNoIntersection = needSyncMeterNo(meterInfor);
+        meterInfor.forEach(meter->{
+            String meterNo = (String) meter.get("meterNo");
+            if(meterNoIntersection.contains(meterNo)){
+                Device device=new Device();
+                device.setWaterMeterNo(meterNo);
+                device.setRelationId((String) meter.get("releationId"));
+                device.setCustomerId(customerId);
+                sendDao.updateRelationId(device);
+            }
+
+        });
+
+    }
+    private  Sets.SetView<String>needSyncMeterNo(List<Map<String, Object>> meterInfor){
+
+        Map<String,Object>args=new HashMap<>();
+        args.put("customerId",customerId);
+        Set<String> hasDeviceNos= sendDao.selectMeterNo(args);
+
+        Set<String> allDeviceNos=new HashSet<>();
+        meterInfor.forEach(map->{
+            String meterNo=(String) map.get("meterNo");
+            allDeviceNos.add(meterNo);
+        });
+        Sets.SetView<String> intersection = Sets.intersection(allDeviceNos, hasDeviceNos);
+        return intersection;
     }
     private void setDeviceDimernsionInfo(List<Device>needAddWaterMeter){
         needAddWaterMeter.forEach(device->{
@@ -87,6 +122,7 @@ public class SyncService {
             sendDao.insertSelective(deviceDimension);
         });
     }
+
     private void setNeddWaterMeters(List<Map<String, Object>> meterInfor, List<Device>needAddWaterMeter){
         List<DeviceType> deviceTypes = sendDao.selectDeviceType();
         Sets.SetView<String> difference =needSyncDeviceNo(meterInfor);
@@ -156,6 +192,7 @@ public class SyncService {
         uploadPlan.forEach(map->{
             String planId=(String) map.get("PlanId");
             log.info("获取泗水上传计划");
+            //syncMeterDataJob.sendTask(map);
             if(!quartzManager.checkExists(planId)){
 
                 quartzManager.addJob(planId, SyncMeterDataJob.class,setCron((Date) map.get("UploadTime")),map);

+ 15 - 1
meter-reading-sishui/read-sqlSever/src/main/resources/mysql-mapper/SendDao.xml

@@ -22,7 +22,7 @@
             #{item.sealNo} )
         </foreach>
     </insert>
-    <insert id="insertSelective" parameterType="com.bz.smart_city.entity.DeviceDimension">
+    <insert id="insertSelective" parameterType="com.zcxk.entity.DeviceDimension">
         <!--@mbg.generated-->
         replace into sc_device_dimension
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -126,6 +126,10 @@
             </if>
         </trim>
     </insert>
+    <update id="updateRelationId">
+        update sc_device set relation_id=#{relationId} where
+        relation_id is null and water_meter_no=#{waterMeterNo} and customer_id=#{customerId}
+    </update>
     <select id="getBuilding" resultType="com.zcxk.entity.Building">
         select
         sb.*,
@@ -153,6 +157,16 @@
     <select id="selectDeviceType" resultType="com.zcxk.entity.DeviceType">
            select * from sc_device_type
     </select>
+    <select id="selectRelationIdsByDeviceNo" resultType="java.util.Map">
+        select device_no deviceNo ,relation_id relationId from sc_device
+        where
+        <foreach collection="list" item="item" index="index" separator=",">
+            device_no=#{item.deviceNo}
+        </foreach>
+    </select>
+    <select id="selectMeterNo" resultType="java.lang.String">
+          select water_meter_no from sc_device where customer_id=#{customerId} and   relation_id is null
+    </select>
 
 
 </mapper>