d34d4815c7c635b1abce05580fb284a4206fb134.svn-base 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.iamberry.app.api.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.context.annotation.Lazy;
  7. import org.springframework.scheduling.annotation.Scheduled;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import com.iamberry.app.api.controller.BaseController;
  11. import com.iamberry.app.tool.dto.TuyaHistoryListDTO;
  12. import com.iamberry.app.tool.dto.TuyaHistoryResultDTO;
  13. import com.iamberry.zk.ZookeeperQueue;
  14. @Lazy(false)
  15. @Component("tuyaHistoryConnector")
  16. @RequestMapping("/")
  17. public class TuyaHistoryConnector extends BaseController {
  18. // Is server restart or crashed?
  19. private static boolean isRestart;
  20. private long nextStartTime;
  21. private final static int LIMIT = 100;
  22. List<TuyaHistoryListDTO> tmpList = new ArrayList<TuyaHistoryListDTO>();
  23. private Logger logger = LoggerFactory.getLogger(TuyaHistoryConnector.class);
  24. static {
  25. isRestart = true;
  26. ZookeeperQueue.rootElement();
  27. }
  28. // pull data each 5 minutes
  29. // @Scheduled(fixedDelay = 50000)
  30. private void startPullHistoryData() {
  31. boolean run = ZookeeperQueue.getTaskRun();
  32. logger.info("Start the timer ZK : " + run);
  33. if (!run) {
  34. return;
  35. }
  36. long currentime = System.currentTimeMillis() / 1000 * 1000;
  37. if (isRestart == true) {
  38. isRestart = false;
  39. // add 1000 to avoid get same last data again, some may lost
  40. nextStartTime = milkService.getLastRecordDate().getTime() + 1000;
  41. }
  42. tmpList.clear();
  43. connectorHandler(nextStartTime, currentime, "0");
  44. nextStartTime = currentime;
  45. }
  46. private void connectorHandler(long startTime, long endTime, String offset) {
  47. try {
  48. TuyaHistoryResultDTO rawData = TuyaConnector.TuyaHistoryConnect(startTime, endTime, offset, LIMIT);
  49. logger.info("rawData-size:"+rawData.getList().size());
  50. if (rawData.getList().isEmpty()) {
  51. return;
  52. }
  53. if (rawData.getNextOffset() == null) {
  54. tmpList.addAll(rawData.getList());
  55. tmpList.sort((TuyaHistoryListDTO o1, TuyaHistoryListDTO o2) -> o1.getTime().compareTo(o2.getTime()));
  56. for (TuyaHistoryListDTO oneRecord : tmpList) {
  57. // 根据机器ID 获取对应的用户id
  58. String devId = oneRecord.getDevId();
  59. Long userId = machineService.selectUserIDByDevId(devId);
  60. logger.info("add macine reader : "+userId + ",devID:" + devId);
  61. milkService.addRecordData(oneRecord.getDevId(), oneRecord.getValue(), oneRecord.getTime(), userId);
  62. }
  63. } else {
  64. logger.info("get data end!");
  65. tmpList.addAll(rawData.getList());
  66. connectorHandler(startTime, endTime, rawData.getNextOffset());
  67. }
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }