BuildingSyncServiceImpl.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.huaxu.zoniot.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.huaxu.zoniot.dao.BuildingMapper;
  5. import com.huaxu.zoniot.dao.CustomerMapper;
  6. import com.huaxu.zoniot.dao.PushLogMapper;
  7. import com.huaxu.zoniot.entity.PushLog;
  8. import com.huaxu.zoniot.model.BuildingData;
  9. import com.huaxu.zoniot.model.DeviceData;
  10. import com.huaxu.zoniot.service.BuildingSyncService;
  11. import com.huaxu.zoniot.service.CcrcService;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import java.nio.charset.Charset;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. @Slf4j
  24. @Service
  25. public class BuildingSyncServiceImpl implements BuildingSyncService {
  26. @Autowired
  27. PushLogMapper pushLogMapper;
  28. @Autowired
  29. CustomerMapper customerMapper;
  30. @Autowired
  31. BuildingMapper buildingMapper;
  32. @Resource
  33. private RabbitTemplate rabbitTemplate;
  34. @Value("${spring.rabbitmq.exchange}")
  35. private String exchange;
  36. @Value("${spring.rabbitmq.building.queue}")
  37. private String queue;
  38. @Autowired
  39. private CcrcService ccrcService;
  40. @Override
  41. public int rabbitSync() {
  42. List<Integer> customerIds = ccrcService.getCustomerIds();
  43. if (customerIds != null && customerIds.size() > 0) {
  44. for (Integer customerId : customerIds) {
  45. // 1,查询推送记录,1档案;2数据
  46. PushLog lastLog = pushLogMapper.findLastRecordBycustomerId(customerId,5);
  47. // 2,计算推送数据时间;如果为首次推送,则判断是否需要将历史数据推送给对方;
  48. Date beginDate = null ;
  49. Date endDate = new Date();
  50. Integer status = null ;
  51. if(lastLog != null) {
  52. beginDate = lastLog.getPushTime() ;
  53. }
  54. else {
  55. // 首次推送,只推送有效的设备
  56. status = 1 ;
  57. beginDate = DateUtil.parse("1900-01-01", "yyyy-MM-dd");
  58. }
  59. // 3,根据推送数据时间进行数据查询
  60. List<Integer> cIds = customerMapper.getSubId(customerId);
  61. String pushCustomers = StringUtils.join(cIds, ",");
  62. log.info("begin query push device list , beginDate={}, endDate={}",
  63. beginDate, endDate);
  64. List<BuildingData> dataList = buildingMapper.getPushBuildingList(pushCustomers,
  65. status,
  66. beginDate,
  67. endDate);
  68. log.info("end query push device list , size = {}",dataList.size());
  69. if(dataList.size() != 0) {
  70. sendRabbitData(dataList);
  71. }
  72. // 4,定义push日志
  73. PushLog pushLog = new PushLog();
  74. pushLog.setDataSize(dataList.size());
  75. pushLog.setCustomerId(customerId);
  76. pushLog.setDateCreate(new Date());
  77. pushLog.setPushTime(endDate);
  78. pushLog.setPushContent(5);
  79. pushLogMapper.insertSelective(pushLog);
  80. }
  81. }
  82. return 0;
  83. }
  84. private void sendRabbitData(List<BuildingData> dataList) {
  85. for (BuildingData data : dataList) {
  86. String msg = JSON.toJSONString(data);
  87. log.info("transfer mq msg:{}",msg);
  88. rabbitTemplate.convertAndSend(exchange, queue,msg.getBytes(Charset.forName("UTF-8")));
  89. }
  90. }
  91. }