Browse Source

定时计划修改

hym 4 years ago
parent
commit
ca2671d6ae

+ 1 - 1
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/config/QuartzConfigration.java

@@ -14,7 +14,7 @@ public class QuartzConfigration {
     public SchedulerFactoryBean schedulerFactoryBean() {
         SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
         try {
-            schedulerFactoryBean.setOverwriteExistingJobs(true);
+           // schedulerFactoryBean.setOverwriteExistingJobs(true);
 
             schedulerFactoryBean.setJobFactory(jobFactory);
         } catch (Exception e) {

+ 2 - 2
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/config/SqlServerDataSourceConfig.java

@@ -16,8 +16,8 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 
 import javax.sql.DataSource;
 
-//@Configuration
-//@MapperScan(basePackages = "com.zcxk.dao.sqlserver", sqlSessionTemplateRef  = "sqlServerSqlSessionTemplate")
+@Configuration
+@MapperScan(basePackages = "com.zcxk.dao.sqlserver", sqlSessionTemplateRef  = "sqlServerSqlSessionTemplate")
 public class SqlServerDataSourceConfig {
 
     @Bean(name = "sqlServerDataSource")

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

@@ -7,10 +7,14 @@ import com.zcxk.dao.mysql.SendDao;
 import com.zcxk.dao.sqlserver.ReceiveDao;
 import com.zcxk.entity.*;
 import com.zcxk.job.SyncMeterDataJob;
+import com.zcxk.service.SyncService;
 import org.apache.commons.lang3.StringUtils;
 import org.quartz.CronExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -22,168 +26,22 @@ import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
-@RestController
+@EnableScheduling
+@Service
+
 public class DemoController {
-   // @Autowired
-    ReceiveDao receiveDao;
-    @Autowired
-    SendDao sendDao;
-    @Value("${customerId}")
-    Integer customerId;
-    @Value("${siteId}")
-    Integer siteId;
-    @Value("${sysId}")
-    Integer sysId;
-    @Value("${buildingId}")
-    Integer buildingId;
     @Autowired
-    private QuartzManager quartzManager;
+    private SyncService syncService;
     @GetMapping("/getBaseInfo")
-    public void countPlanDevice(Integer id){
-
-        WaterMeterBaseEntity waterMeterBaseEntity=new WaterMeterBaseEntity();
-        SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
-        waterMeterBaseEntity.setRegionId(id+"");
-        List<Map<String, Object>> meterInfor = receiveDao.getMeterInfor(waterMeterBaseEntity);
-        Map<String,Object>args=new HashMap<>();
-        args.put("customerId",customerId);
-        Set<String> hasDeviceNos = sendDao.selectDevice(args);
-        List<DeviceType> deviceTypes = sendDao.selectDeviceType();
-        Map<String,DeviceType>mapDeviceType=new HashMap<>();
-        deviceTypes.forEach(deviceType -> {
-            mapDeviceType.put(deviceType.getModel(),deviceType);
-        });
-
-        Set<String> allDeviceNos=new HashSet<>();
-        meterInfor.forEach(map->{
-            String deviceNo=(String) map.get("releationId");
-            allDeviceNos.add(StringUtils.lowerCase(deviceNo));
-        });
-        Sets.SetView<String> difference = Sets.difference(allDeviceNos, hasDeviceNos);
-        for (String temp : difference) {
-            System.out.println(temp);
-        }
-        List<Device>needAddWaterMeter=new ArrayList<>();
-        meterInfor.forEach(map->{
-            String deviceNo=(String) map.get("releationId");
-            if(difference.contains(deviceNo)){
-                 Device device = new Device();
-                device.setId(idWorker.nextId());
-                device.setDeviceNo(StringUtils.lowerCase(deviceNo));
-                DeviceType deviceType = mapDeviceType.get(map.get("releationId"));
-                if(deviceType!=null){
-                    device.setDeviceType(deviceType.getDeviceType() );
-                    device.setManufacturerId(deviceType.getManufacturerId());
-                }
-                device.setSysId(sysId);
-                device.setSiteId(siteId);
-                device.setBuildingId(buildingId);
-                device.setLocDesc((String) map.get("address"));
-
-                device.setDeviceStatus(5+"");//未启用
-                device.setStatus(1);
-                device.setDateCreate(new Date());
-                device.setCreateBy("system");
-                device.setCustomerId(customerId);
-                device.setWaterMeterNo((String) map.get("meterNo"));
-                device.setRegisterStatus(0);
-                needAddWaterMeter.add(device);
-
-            }
-        });
-        if(needAddWaterMeter.size()>0){
-            sendDao.insertDeviceInfo(needAddWaterMeter);
-        }
-
-
-
+    public void countPlanDevice(){
+        syncService.countPlanDevice();
     }
     @GetMapping("/uploadData")
     public void uploadData(){
-        Map<String,Object>args2=new HashMap<>();
-        List<Map<String, Object>> uploadPlan = receiveDao.getUploadPlan(args2);
-        uploadPlan.forEach(map->{
-            TaskEntity taskEntity=new TaskEntity();
-            taskEntity.setPlanId((String) map.get("PlanId"));
-
-            receiveDao.creatUploadTask(taskEntity);
-            if(taskEntity.getReturnCode()==1){
-
-
-               try {
-                   Map<String,Object>args=new HashMap<>();
-
-                   List<MeterDataEntity>datas=new ArrayList<>();
-                   SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                   Date date= (Date) map.get("UploadTime");
-                   LocalDateTime time=dateToLocateDateTime(date);
-
-                   String needUploadTime = time.plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-                    //LocalDateTime ldt = LocalDateTime.parse("2017-09-28 17:07:05",df);
-                   int needUploadTimeDate = Integer.parseInt(needUploadTime);
-                   args.put("readDate",needUploadTimeDate);
-                   args.put("customerId",customerId);
-                   List<MeterReadRecord> meterReadRecords = sendDao.selectDeviceMeterReader(args);
-                   meterReadRecords.forEach(meterReadRecord -> {
-                       MeterDataEntity meterDataEntity=new MeterDataEntity();
-                       meterDataEntity.setReleationId(meterReadRecord.getDeviceNo());
-                       meterDataEntity.setCurrentReading(Float.parseFloat(meterReadRecord.getReadData()));
-                       meterDataEntity.setCurrentReadDate(simpleDateFormat.format(meterReadRecord.getReadTime()));
-                       datas.add(meterDataEntity);
-                   });
-
-                   if(datas.size()>0){
-                       UploadWaterMeterDataEntity uploadWaterMeterDataEntity=new UploadWaterMeterDataEntity();
-                       uploadWaterMeterDataEntity.setTaskId(taskEntity.getTaskId());
-                       uploadWaterMeterDataEntity.setMeterData(datas);
-                       receiveDao.meterDataInsert(uploadWaterMeterDataEntity);
-                       System.out.println(1);
-                   }
-
-               }catch (Exception e){
-                   e.printStackTrace();
-               }
-
-            }
-
-        });
+        syncService.uploadData();
     }
-    private  LocalDateTime dateToLocateDateTime(Date date) {
-        Instant instant = date.toInstant();
-        ZoneId zoneId = ZoneId.systemDefault();
-        return LocalDateTime.ofInstant(instant, zoneId);
-    }
-    @GetMapping("/addJob")
-    public void addJob(){
-
-
-
-            String dateTimeStr = "2018-07-28 14:11:15";
-            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, df);
-            StringBuffer cron=new StringBuffer();
-            cron.append(dateTime.getSecond());
-            cron.append(" ");
-            cron.append(dateTime.getMinute());
-            cron.append(" ");
-            cron.append(dateTime.getHour());
-            cron.append(" ");
-            cron.append(dateTime.getDayOfMonth());
-            cron.append(" ");
-            cron.append(dateTime.getMonth());
-            cron.append(" ? *");
-            Map<String,Object>args=new HashMap<>();
-        args.put("readDate","20210107");
-        args.put("customerId",customerId);
-        List<DeviceType> deviceTypes = sendDao.selectDeviceType();
-        List<MeterReadRecord> meterReadRecords = sendDao.selectDeviceMeterReader(args);
-        System.out.println(1);
-            //quartzManager.addJob("test", SyncMeterDataJob.class,cron.toString(),666);
-
-
-   }
     public static void main(String[] args) {
-        String dateTimeStr = "2018-10-31 04:04:04";
+       /* String dateTimeStr = "2018-10-31 04:04:04";
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, df);
         StringBuffer cron=new StringBuffer();
@@ -197,8 +55,9 @@ public class DemoController {
         cron.append(" ");
         cron.append(dateTime.getMonth());
         cron.append(" ? *");
+         System.out.println(CronExpression.isValidExpression(cron.toString()));
+*/
 
-        System.out.println(CronExpression.isValidExpression(cron.toString()));
     }
 
 }

+ 1 - 1
meter-reading-sishui/read-sqlSever/src/main/java/com/zcxk/handle/TableTypeHandle.java

@@ -15,7 +15,7 @@ public class TableTypeHandle extends BaseTypeHandler{
     public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object paramter, JdbcType jdbcType) throws SQLException {
         SQLServerDataTable sourceDataTable = new SQLServerDataTable();
 
-        sourceDataTable.addColumnMetadata("releationId" ,java.sql.Types.INTEGER);
+        sourceDataTable.addColumnMetadata("releationId" , Types.VARCHAR);
 
         sourceDataTable.addColumnMetadata("currentReading" , Types.DECIMAL);
         sourceDataTable.addColumnMetadata("currentReadDate" , Types.VARCHAR);

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

@@ -15,6 +15,10 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 @Component
@@ -38,42 +42,54 @@ 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 {
-                Map<String,Object>args=new HashMap<>();
-
-                List<MeterDataEntity>datas=new ArrayList<>();
-                SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-dd-MM HH:mm:ss");
-                String uplaodTime= (String) map.get("UploadTime");
-                Date time=simpleDateFormat.parse(uplaodTime);
-                Date needUploadTime=new Date(time.getTime()-24*3600*1000);
-                SimpleDateFormat needUploadDateFormate=new SimpleDateFormat("yyyyddMM");
-                int needUploadTimeDate = Integer.parseInt(needUploadDateFormate.format(needUploadTime));
-                args.put("readDate",needUploadTimeDate);
-                args.put("customerId",customerId);
-                List<MeterReadRecord> meterReadRecords = sendDao.selectDeviceMeterReader(args);
-                meterReadRecords.forEach(meterReadRecord -> {
-                    MeterDataEntity meterDataEntity=new MeterDataEntity();
-                    meterDataEntity.setReleationId(meterReadRecord.getDeviceNo());
-                    meterDataEntity.setCurrentReading(Float.parseFloat(meterReadRecord.getReadData()));
-                    meterDataEntity.setCurrentReadDate(simpleDateFormat.format(meterReadRecord.getReadTime()));
-                    datas.add(meterDataEntity);
-                });
-
-
-                UploadWaterMeterDataEntity uploadWaterMeterDataEntity=new UploadWaterMeterDataEntity();
-                uploadWaterMeterDataEntity.setTaskId(taskEntity.getTaskId());
-                uploadWaterMeterDataEntity.setMeterData(datas);
-                receiveDao.meterDataInsert(uploadWaterMeterDataEntity);
-                log.info("上传水表数据,结果={}",uploadWaterMeterDataEntity.getReturnMsg());
-                quartzManager.deleteJob(planId);
-            }catch (Exception e){
-                e.printStackTrace();
+          }catch (Exception e){
+                log.error("泗水上传数据失败",e);
             }
-
+         finally{
+             quartzManager.deleteJob(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(meterReadRecord.getDeviceNo());
+            meterDataEntity.setCurrentReading(Float.parseFloat(meterReadRecord.getReadData()));
+            meterDataEntity.setCurrentReadDate(simpleDateFormat.format(meterReadRecord.getReadTime()));
+            datas.add(meterDataEntity);
+        });
+
+        if(datas.size()>0){
+            UploadWaterMeterDataEntity uploadWaterMeterDataEntity=new UploadWaterMeterDataEntity();
+            uploadWaterMeterDataEntity.setTaskId(taskId);
+            uploadWaterMeterDataEntity.setMeterData(datas);
+            receiveDao.meterDataInsert(uploadWaterMeterDataEntity);
+            log.info("上传数据认为完毕 ,任务返回信息={},任务状态={}",
+                    uploadWaterMeterDataEntity.getReturnMsg(),uploadWaterMeterDataEntity.getReturnCode());
+        }
+    }
+    private   List<MeterReadRecord>getMeterReadRecord(Date date){
+        Map<String,Object>args=new HashMap<>();
+        LocalDateTime time=dateToLocateDateTime(date);
+        String needUploadTime = time.plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        //LocalDateTime ldt = LocalDateTime.parse("2017-09-28 17:07:05",df);
+        int needUploadTimeDate = Integer.parseInt(needUploadTime);
+        args.put("readDate",needUploadTimeDate);
+        args.put("customerId",customerId);
+        List<MeterReadRecord> meterReadRecords = sendDao.selectDeviceMeterReader(args);
+        return meterReadRecords;
+    }
+    private  LocalDateTime dateToLocateDateTime(Date date) {
+        Instant instant = date.toInstant();
+        ZoneId zoneId = ZoneId.systemDefault();
+        return LocalDateTime.ofInstant(instant, zoneId);
+    }
 }

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

@@ -0,0 +1,165 @@
+package com.zcxk.service;
+
+import com.google.common.collect.Sets;
+import com.zcxk.config.QuartzManager;
+import com.zcxk.config.SnowflakeIdWorker;
+import com.zcxk.dao.mysql.SendDao;
+import com.zcxk.dao.sqlserver.ReceiveDao;
+import com.zcxk.entity.Device;
+import com.zcxk.entity.DeviceType;
+import com.zcxk.entity.WaterMeterBaseEntity;
+import com.zcxk.job.SyncMeterDataJob;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
+
+@EnableScheduling
+@Service
+public class SyncService {
+    @Autowired
+    ReceiveDao receiveDao;
+    @Autowired
+    SendDao sendDao;
+    @Value("${customerId}")
+    Integer customerId;
+    @Value("${siteId}")
+    Integer siteId;
+    @Value("${sysId}")
+    Integer sysId;
+    @Value("${buildingId}")
+    Integer buildingId;
+    @Autowired
+    private QuartzManager quartzManager;
+
+    @Scheduled(cron = "0/10 * * * * ?")
+    public void countPlanDevice(){
+
+        WaterMeterBaseEntity waterMeterBaseEntity=new WaterMeterBaseEntity();
+
+
+        List<Map<String, Object>> meterInfor = receiveDao.getMeterInfor(waterMeterBaseEntity);
+
+
+        List<Device>needAddWaterMeter=new ArrayList<>();
+        setNeddWaterMeters(meterInfor,needAddWaterMeter);
+        if(needAddWaterMeter.size()>0){
+            sendDao.insertDeviceInfo(needAddWaterMeter);
+        }
+
+
+
+    }
+    private void setNeddWaterMeters(List<Map<String, Object>> meterInfor, List<Device>needAddWaterMeter){
+        List<DeviceType> deviceTypes = sendDao.selectDeviceType();
+        Sets.SetView<String> difference =needSyncDeviceNo(meterInfor);
+        SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
+        Map<String,DeviceType>mapDeviceType=new HashMap<>();
+        deviceTypes.forEach(deviceType -> {
+            mapDeviceType.put(deviceType.getModel(),deviceType);
+        });
+        meterInfor.forEach(map->{
+            String deviceNo=(String) map.get("releationId");
+            deviceNo=StringUtils.lowerCase(deviceNo);
+            if(difference.contains(deviceNo)){
+
+                needAddWaterMeter.add(setDeviceInfo(idWorker,deviceNo,mapDeviceType,map));
+
+            }
+        });
+    }
+    private Device setDeviceInfo(SnowflakeIdWorker idWorker,String deviceNo,Map<String,DeviceType> mapDeviceType,
+                                 Map<String, Object> map){
+        Device device = new Device();
+        device.setId(idWorker.nextId());
+        device.setDeviceNo(StringUtils.lowerCase(deviceNo));
+        DeviceType deviceType = mapDeviceType.get(map.get("model"));
+        if(deviceType!=null){
+            device.setDeviceType(deviceType.getDeviceType() );
+            device.setManufacturerId(deviceType.getManufacturerId());
+        }
+        device.setSysId(sysId);
+        device.setSiteId(siteId);
+        device.setBuildingId(buildingId);
+        device.setLocDesc((String) map.get("address"));
+
+        device.setDeviceStatus(5+"");//未启用
+        device.setStatus(1);
+        device.setDateCreate(new Date());
+        device.setCreateBy("system");
+        device.setCustomerId(customerId);
+        device.setWaterMeterNo((String) map.get("meterNo"));
+        device.setRegisterStatus(0);
+        return device;
+    }
+    private  Sets.SetView<String>needSyncDeviceNo(List<Map<String, Object>> meterInfor){
+
+        Map<String,Object>args=new HashMap<>();
+        args.put("customerId",customerId);
+        Set<String> hasDeviceNos = sendDao.selectDevice(args);
+        List<DeviceType> deviceTypes = sendDao.selectDeviceType();
+
+
+        Set<String> allDeviceNos=new HashSet<>();
+        meterInfor.forEach(map->{
+            String deviceNo=(String) map.get("releationId");
+            allDeviceNos.add(StringUtils.lowerCase(deviceNo));
+        });
+        Sets.SetView<String> difference = Sets.difference(allDeviceNos, hasDeviceNos);
+        return difference;
+    }
+    public void uploadData(){
+        Map<String,Object>args2=new HashMap<>();
+        List<Map<String, Object>> uploadPlan = receiveDao.getUploadPlan(args2);
+        uploadPlan.forEach(map->{
+            String planId=(String) map.get("PlanId");
+            if(!quartzManager.checkExists(planId)){
+                quartzManager.addJob(planId, SyncMeterDataJob.class,setCron((Date) map.get("UploadTime")),map);
+            }
+
+        });
+    }
+    private String setCron(Date planDateTime){
+        LocalDateTime dateTime =dateToLocateDateTime(planDateTime);
+        StringBuffer cron=new StringBuffer();
+        cron.append(dateTime.getSecond());
+        cron.append(" ");
+        cron.append(dateTime.getMinute());
+        cron.append(" ");
+        cron.append(dateTime.getHour());
+        cron.append(" ");
+        cron.append(dateTime.getDayOfMonth());
+        cron.append(" ");
+        cron.append(dateTime.getMonth());
+        cron.append(" ?");
+        return cron.toString();
+    }
+    private  LocalDateTime dateToLocateDateTime(Date date) {
+        Instant instant = date.toInstant();
+        ZoneId zoneId = ZoneId.systemDefault();
+        return LocalDateTime.ofInstant(instant, zoneId);
+
+    }
+    // @GetMapping("/addJob")
+    public void addJob(){
+
+
+
+
+        Map<String,Object>args=new HashMap<>();
+        args.put("readDate","20210107");
+        args.put("customerId",customerId);
+
+
+        //quartzManager.addJob("test", SyncMeterDataJob.class,cron.toString(),666);
+
+
+    }
+}