package com.nanometer.smartlab.api.schedule; import com.alibaba.fastjson.JSON; import com.nanometer.smartlab.entity.BaseMeta; import com.nanometer.smartlab.service.*; import com.nanometer.smartlab.util.Constants; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; /** * Created by Caspar on 18/4/22. */ @Component //@EnableScheduling public class ReagentSyncSchedule { private static Logger logger = Logger.getLogger(ReagentSyncSchedule.class); @Value("${reagent.flow.url}") private String reagentFlowUrl; @Value("${reagent.status.url}") private String reagentStatusUrl; @Value("${sensors.url}") private String reagentSensorsUrl; @Lazy @Resource private BaseMetaService baseMetaService; @Lazy @Resource private OpeReagentStatusService reagentStatusService; @Lazy @Resource private OpeUseFlowService opeUseFlowService; @Lazy @Resource private SysContainerSensorsService sysContainerSensorsService; @Lazy @Resource private SysUserService sysUserService; private static String reagentStatusLastdate = null; private static String reagentFlowLastdate = null; //@Scheduled(fixedDelayString = "${reagent.status.schedule.delay}") // public void syncReagentStatus(){ // Date current = new Date(); // BaseMeta baseMeta = null; // baseMeta = baseMetaService.getBaseMeta("syncreagentstatuslastdata"); // if(reagentStatusLastdate == null) { // reagentStatusLastdate = baseMeta.getMetaValue(); // } // // RestTemplate client = new RestTemplate(); // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // MultiValueMap varParams= new LinkedMultiValueMap(); // varParams.add("startTime",reagentStatusLastdate); // String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS); // varParams.add("endTime",lastDate); // // logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate); // // HttpEntity> requestEntity = new HttpEntity>(varParams, headers); // ResponseEntity response = client.postForEntity(reagentStatusUrl, requestEntity , LinkedHashMap.class ); // List data = (ArrayList)response.getBody().get("data"); // if(CollectionUtils.isEmpty(data)==false){ // logger.info("result data: "+ JSON.toJSONString(data)); // reagentStatusService.syncOpeReagentStatus(data); // } // reagentStatusLastdate = lastDate; // baseMeta.setMetaValue(reagentStatusLastdate); // baseMetaService.updateBaseMeta(baseMeta); // } // // //@Scheduled(fixedDelayString = "${reagent.flow.schedule.delay}") // public void syncReagentFlow() throws ParseException{ // Date current = new Date(); // BaseMeta baseMeta = null; // baseMeta = baseMetaService.getBaseMeta("syncreagentflowlastdata"); // if(reagentFlowLastdate == null) { // reagentFlowLastdate = baseMeta.getMetaValue(); // } // // RestTemplate client = new RestTemplate(); // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // MultiValueMap varParams= new LinkedMultiValueMap(); // varParams.add("startTime",reagentFlowLastdate); // String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS); // varParams.add("endTime",lastDate); // // logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate); // // HttpEntity> requestEntity = new HttpEntity>(varParams, headers); // ResponseEntity response = client.postForEntity(reagentFlowUrl, requestEntity , LinkedHashMap.class ); // List data = (ArrayList)response.getBody().get("data"); // if(CollectionUtils.isEmpty(data)==false){ // opeUseFlowService.syncReagentFlow(data); // //[{"status":1,"containerCode":"c1000-001","updateTime":"2018-04-15 11:23:49","reagentCode":"r2010-0001","idcard":"u001"}....] // logger.info("result data: "+JSON.toJSONString(data)); // } // baseMeta.setMetaValue(lastDate); // reagentFlowLastdate = lastDate; // baseMetaService.updateBaseMeta(baseMeta); // } // // //@Scheduled(fixedDelayString = "${sensors.schedule.delay}") // public void syncSensors() { // Date current = new Date(); // BaseMeta baseMeta = baseMetaService.getBaseMeta("syncsensorslastdata"); // RestTemplate client = new RestTemplate(); // HttpHeaders headers = new HttpHeaders(); // headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // MultiValueMap varParams= new LinkedMultiValueMap(); // varParams.add("startTime",baseMeta.getMetaValue()); // varParams.add("endTime",DateFormatUtils.format(current,Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS)); // HttpEntity> requestEntity = new HttpEntity>(varParams, headers); // ResponseEntity response = client.postForEntity(reagentSensorsUrl, requestEntity , LinkedHashMap.class ); // LinkedHashMap body = response.getBody(); // List data = body == null ? null : (ArrayList) body.get("data"); // if(!CollectionUtils.isEmpty(data)){ // try { // logger.info("result data: " + JSON.toJSONString(data)); // sysContainerSensorsService.syncSysContainerSensors(data); // //{"data": [{"containerCode": "c1000-003", "Temp": 28.0, "Flag": 16, "Humidity": 58, "updateTime": "2018-04-18 13:37:46", "voc1": 20}], "func": "sensors", "method": "POST", "message": "OK", "code": 0} // baseMeta.setMetaValue(DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS)); // baseMetaService.updateBaseMeta(baseMeta); // }catch (Exception e){ // logger.error("error occured.", e); // } // } // } // // // @Scheduled(cron = "0 0 2 1 * ?") // public void updateUserPoint() { // logger.debug("updateUserPoint start,and now is "+new Date()); // sysUserService.updateUserPointBySelective(20,null); // logger.debug("updateUserPoint end"); // } }