SyncService.java 5.6 KB

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