SyncService.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package com.zcxk.service;
  2. import com.google.common.collect.Sets;
  3. import com.zcxk.config.QuartzManager;
  4. import com.zcxk.config.SnowflakeIdWorker;
  5. import com.zcxk.dao.mysql.SendDao;
  6. import com.zcxk.dao.sqlserver.ReceiveDao;
  7. import com.zcxk.entity.Device;
  8. import com.zcxk.entity.DeviceType;
  9. import com.zcxk.entity.WaterMeterBaseEntity;
  10. import com.zcxk.job.SyncMeterDataJob;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.scheduling.annotation.EnableScheduling;
  16. import org.springframework.scheduling.annotation.Scheduled;
  17. import org.springframework.stereotype.Service;
  18. import java.time.Instant;
  19. import java.time.LocalDateTime;
  20. import java.time.ZoneId;
  21. import java.util.*;
  22. @EnableScheduling
  23. @Service
  24. @Slf4j
  25. public class SyncService {
  26. @Autowired
  27. ReceiveDao receiveDao;
  28. @Autowired
  29. SendDao sendDao;
  30. @Value("${customerId}")
  31. Integer customerId;
  32. @Value("${siteId}")
  33. Integer siteId;
  34. @Value("${sysId}")
  35. Integer sysId;
  36. @Value("${buildingId}")
  37. Integer buildingId;
  38. @Value("${model}")
  39. String model;
  40. @Autowired
  41. private QuartzManager quartzManager;
  42. //@Scheduled(cron = "0 0 * * * ?")
  43. public void countPlanDevice(){
  44. WaterMeterBaseEntity waterMeterBaseEntity=new WaterMeterBaseEntity();
  45. log.info("获取泗水水表列表");
  46. List<Map<String, Object>> meterInfor = receiveDao.getMeterInfor(waterMeterBaseEntity);
  47. List<Device>needAddWaterMeter=new ArrayList<>();
  48. setNeddWaterMeters(meterInfor,needAddWaterMeter);
  49. if(needAddWaterMeter.size()>0){
  50. log.info("增加新增泗水水表");
  51. sendDao.insertDeviceInfo(needAddWaterMeter);
  52. }
  53. }
  54. private void setNeddWaterMeters(List<Map<String, Object>> meterInfor, List<Device>needAddWaterMeter){
  55. List<DeviceType> deviceTypes = sendDao.selectDeviceType();
  56. Sets.SetView<String> difference =needSyncDeviceNo(meterInfor);
  57. SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);
  58. Map<String,DeviceType>mapDeviceType=new HashMap<>();
  59. deviceTypes.forEach(deviceType -> {
  60. mapDeviceType.put(deviceType.getModel(),deviceType);
  61. });
  62. meterInfor.forEach(map->{
  63. String deviceNo=(String) map.get("releationId");
  64. deviceNo=StringUtils.lowerCase(deviceNo);
  65. if(difference.contains(deviceNo)){
  66. needAddWaterMeter.add(setDeviceInfo(idWorker,deviceNo,mapDeviceType,map));
  67. }
  68. });
  69. }
  70. private Device setDeviceInfo(SnowflakeIdWorker idWorker,String deviceNo,Map<String,DeviceType> mapDeviceType,
  71. Map<String, Object> map){
  72. Device device = new Device();
  73. device.setId(idWorker.nextId());
  74. device.setDeviceNo(StringUtils.lowerCase(deviceNo));
  75. String deviceModel= (String) map.get("model");
  76. DeviceType deviceType = mapDeviceType.get(deviceModel);
  77. if(deviceType==null){
  78. deviceType= mapDeviceType.get(model);
  79. }
  80. if(deviceType!=null){
  81. device.setDeviceType(deviceType.getId() );
  82. device.setManufacturerId(deviceType.getManufacturerId());
  83. }
  84. device.setSysId(sysId);
  85. device.setSiteId(siteId);
  86. device.setBuildingId(buildingId);
  87. device.setLocDesc((String) map.get("address"));
  88. device.setDeviceStatus(5+"");//未启用
  89. device.setStatus(1);
  90. device.setDateCreate(new Date());
  91. device.setCreateBy("system");
  92. device.setCustomerId(customerId);
  93. device.setWaterMeterNo((String) map.get("meterNo"));
  94. device.setRegisterStatus(0);
  95. return device;
  96. }
  97. private Sets.SetView<String>needSyncDeviceNo(List<Map<String, Object>> meterInfor){
  98. Map<String,Object>args=new HashMap<>();
  99. args.put("customerId",customerId);
  100. Set<String> hasDeviceNos = sendDao.selectDevice(args);
  101. Set<String> allDeviceNos=new HashSet<>();
  102. meterInfor.forEach(map->{
  103. String deviceNo=(String) map.get("releationId");
  104. allDeviceNos.add(StringUtils.lowerCase(deviceNo));
  105. });
  106. Sets.SetView<String> difference = Sets.difference(allDeviceNos, hasDeviceNos);
  107. return difference;
  108. }
  109. //@Scheduled(cron = "* 0/30 * * * ?")
  110. public void uploadData(){
  111. Map<String,Object>args2=new HashMap<>();
  112. List<Map<String, Object>> uploadPlan = receiveDao.getUploadPlan(args2);
  113. uploadPlan.forEach(map->{
  114. String planId=(String) map.get("PlanId");
  115. log.info("获取泗水上传计划");
  116. if(!quartzManager.checkExists(planId)){
  117. quartzManager.addJob(planId, SyncMeterDataJob.class,setCron((Date) map.get("UploadTime")),map);
  118. //quartzManager.addJob(planId, SyncMeterDataJob.class,"15 41 15 * * ?", map);
  119. log.info("设置泗水上传计划定时任务");
  120. }
  121. });
  122. }
  123. private String setCron(Date planDateTime){
  124. LocalDateTime dateTime =dateToLocateDateTime(planDateTime);
  125. StringBuffer cron=new StringBuffer();
  126. cron.append(dateTime.getSecond());
  127. cron.append(" ");
  128. cron.append(dateTime.getMinute());
  129. cron.append(" ");
  130. cron.append(dateTime.getHour());
  131. cron.append(" ");
  132. cron.append(dateTime.getDayOfMonth());
  133. cron.append(" ");
  134. cron.append(dateTime.getMonth());
  135. cron.append(" ?");
  136. return cron.toString();
  137. }
  138. private LocalDateTime dateToLocateDateTime(Date date) {
  139. Instant instant = date.toInstant();
  140. ZoneId zoneId = ZoneId.systemDefault();
  141. return LocalDateTime.ofInstant(instant, zoneId);
  142. }
  143. // @GetMapping("/addJob")
  144. public void addJob(){
  145. Map<String,Object>args=new HashMap<>();
  146. args.put("readDate","20210107");
  147. args.put("customerId",customerId);
  148. //quartzManager.addJob("test", SyncMeterDataJob.class,cron.toString(),666);
  149. }
  150. }