123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- 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 lombok.extern.slf4j.Slf4j;
- 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
- @Slf4j
- 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;
- @Value("${model}")
- String model;
- @Autowired
- private QuartzManager quartzManager;
- //@Scheduled(cron = "0 0 * * * ?")
- public void countPlanDevice(){
- WaterMeterBaseEntity waterMeterBaseEntity=new WaterMeterBaseEntity();
- log.info("获取泗水水表列表");
- List<Map<String, Object>> meterInfor = receiveDao.getMeterInfor(waterMeterBaseEntity);
- List<Device>needAddWaterMeter=new ArrayList<>();
- setNeddWaterMeters(meterInfor,needAddWaterMeter);
- if(needAddWaterMeter.size()>0){
- log.info("增加新增泗水水表");
- 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));
- String deviceModel= (String) map.get("model");
- DeviceType deviceType = mapDeviceType.get(deviceModel);
- if(deviceType==null){
- deviceType= mapDeviceType.get(model);
- }
- if(deviceType!=null){
- device.setDeviceType(deviceType.getId() );
- 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);
- 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;
- }
- //@Scheduled(cron = "* 0/30 * * * ?")
- 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");
- log.info("获取泗水上传计划");
- if(!quartzManager.checkExists(planId)){
- quartzManager.addJob(planId, SyncMeterDataJob.class,setCron((Date) map.get("UploadTime")),map);
- //quartzManager.addJob(planId, SyncMeterDataJob.class,"15 41 15 * * ?", map);
- log.info("设置泗水上传计划定时任务");
- }
- });
- }
- 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);
- }
- }
|