| package com.fzzy.async.fzzy30.impl; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.fzzy.api.Constant; | 
| import com.fzzy.api.entity.Api1105; | 
| import com.fzzy.api.entity.Api1302; | 
| import com.fzzy.api.entity.ApiLog; | 
| import com.fzzy.api.service.ApiCommonService; | 
| import com.fzzy.api.utils.ContextUtil; | 
| import com.fzzy.api.view.repository.Api1302Rep; | 
| import com.fzzy.api.view.repository.ApiLogRep; | 
| import com.fzzy.async.fzzy30.entity.Grain; | 
| import com.fzzy.async.fzzy30.repository.FzzySync1302Rep; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
|   | 
| /** | 
|  * 温湿度检测数据同步 | 
|  * | 
|  * @author chen | 
|  * @date 2022-09-07 14:41 | 
|  */ | 
| @Slf4j | 
| @Component | 
| public class Fzzy30Sync1302 { | 
|   | 
|     @Autowired | 
|     private FzzySync1302Rep fzzySync1302Rep; | 
|     @Autowired | 
|     private ApiCommonService commonService; | 
|     @Autowired | 
|     private Api1302Rep api1302Rep; | 
|     @Autowired | 
|     private ApiLogRep apiLogRep; | 
|   | 
|   | 
|     /** | 
|      * 同步并封装保存温湿度检测数据 | 
|      * | 
|      * @param deptId 系统对应库区编码 | 
|      * @param start  起始时间 | 
|      * @param end    截止时间 | 
|      */ | 
|     public void syncData(String deptId, Date start, Date end) { | 
|   | 
|         log.info("-------------1302接口数据开始同步------------------"); | 
|         //同步数据,只记录失败的信息 | 
|         ApiLog apiLog = new ApiLog(); | 
|         apiLog.setType(ApiLog.TYPE_SYNC); | 
|         apiLog.setKqdm(deptId); | 
|         apiLog.setUploadTime(new Date()); | 
|         apiLog.setInteId(Constant.API_CODE_1302); | 
|         apiLog.setStatus(99); | 
|         apiLog.setId(ContextUtil.getUUID()); | 
|         try { | 
|             List<Grain> list = fzzySync1302Rep.findByReceiveDate(start, end); | 
|             if (null == list || list.isEmpty()) { | 
|                 log.info("1302---同步数据:没有查询到需要同步的数据"); | 
|                 return; | 
|             } | 
|             log.info(JSONObject.toJSONString(list)); | 
|             Date syncTime = new Date(); | 
|             Api1302 api1302; | 
|             Api1105 api1105; | 
|             int index = 10001; | 
|             for (Grain grain : list) { | 
|                 //获取货位信息 | 
|                 api1105 = commonService.getApi1105Cache(grain.getDepotId()); | 
|                 if (null == api1105) { | 
|                     continue; | 
|                 } | 
|   | 
|                 //由货位代码+检测日期     (yyyyMMdd) +4 位顺序号组成  --2019 1128 0819 | 
|                 log.info(JSONObject.toJSONString(api1105)); | 
|                 api1302 = new Api1302(); | 
|                 //api1302.setWsdjcdh(api1105.getHwdm() + DateFormatUtils.format(grain.getReceiveDate(), "yyyyMMdd") + String.valueOf(index).substring(1)); | 
|                 api1302.setWsdjcdh(api1105.getHwdm() + grain.getBatchId()); | 
|                 api1302.setJcsj(grain.getReceiveDate()); | 
|                 api1302.setHwdm(api1105.getHwdm()); | 
|   | 
|                 api1302.setCfww(grain.getTempOut()); | 
|                 api1302.setCfws(grain.getHumidityOut()); | 
|                 api1302.setCfnw(grain.getTempIn() < 0.0 ? 0.0 : grain.getTempIn()); | 
|   | 
|                 api1302.setCfns(grain.getHumidityIn() < 0.0 ? 0.0 : grain.getHumidityIn()); | 
|   | 
|                 api1302.setLszgw(grain.getTempMax()); | 
|                 api1302.setLspjw(grain.getTempAve()); | 
|                 api1302.setLszdw(grain.getTempMin()); | 
|   | 
|                 //温度集合 | 
|                 if (grain.getCableCir() == null) { | 
|                     api1302.setLswdzjh(getTempPointList1(grain.getPoints(), grain.getCable())); | 
|                     api1302.setLssdzjh(getHumPointList1(grain.getPoints(), grain.getCable())); | 
|                 } else { | 
|                     api1302.setLswdzjh(getTempPointList2(grain.getPoints(), grain.getCable(), grain.getCableCir())); | 
|                     api1302.setLssdzjh(getHumPointList2(grain.getPoints(), grain.getCable(), grain.getCableCir())); | 
|                 } | 
|   | 
|                 api1302.setCzbz(Constant.CZBZ_I); | 
|                 api1302.setZhgxsj(syncTime); | 
|   | 
|                 api1302.setBizId(grain.getBatchId()); | 
|                 api1302.setKqdm(api1105.getKqdm()); | 
|                 api1302.setSyncTime(syncTime); | 
|                 log.info("1302---同步数据:" + api1302.toString()); | 
|                 api1302Rep.deleteById(api1302.getWsdjcdh()); | 
|                 api1302Rep.save(api1302); | 
|                 index++; | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             log.error("---同步失败----{}", e); | 
|             apiLog.setResult("同步失败:" + e.getMessage()); | 
|             apiLogRep.save(apiLog); | 
|         } | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 获取平方仓的温度值集合,格式:温度值,层数,行数,列数|温度值,层数,行数,列数|温度值,层数,行数,列数 | 
|      * | 
|      * @return | 
|      */ | 
|     private String getTempPointList1(String point, String cable) { | 
|         String[] cab = cable.split("-"); | 
|         int c = Integer.valueOf(cab[0]); | 
|         int h = Integer.valueOf(cab[1]); | 
|         int l = Integer.valueOf(cab[2]); | 
|   | 
|         String[] points = point.split(","); | 
|         String result = ""; | 
|         for (int i = 1; i <= l; i++) { | 
|             for (int j = 1; j <= h; j++) { | 
|                 for (int z = 1; z <= c; z++) { | 
|                     result += ("|" + points[(i * j - 1) * c + z - 1] + "," + z + "," + j + "," + i); | 
|                 } | 
|             } | 
|         } | 
|         return result.substring(1); | 
|     } | 
|   | 
|     /** | 
|      * 获取筒仓的温度值集合,格式:温度值,圈数,点数,层数|温度值,圈数,点数,层数|温度值,圈数,点数,层数 | 
|      * | 
|      * @return | 
|      */ | 
|     private String getTempPointList2(String point, String cable, String cableCir) { | 
|         String[] cab = cable.split("-"); | 
|         String[] cabCir = cableCir.split("-"); | 
|   | 
|         int q = cab.length;  //圈数 | 
|         int c = Integer.valueOf(cabCir[0]);  //层数 | 
|         int g = 0;  //圈根数 | 
|         int g1 = 1;  //圈起始根数 | 
|         int g2 = 0;  //圈截止根数 | 
|   | 
|         String[] points = point.split(","); | 
|         String result = ""; | 
|         for (int i = 1; i <= q; i++) { | 
|             g1 += g2; | 
|             g = Integer.valueOf(cab[i - 1]); | 
|             g2 += g; | 
|             for (int j = g1; j <= g2; j++) { | 
|                 for (int z = 1; z <= c; z++) { | 
|                     result += ("|" + points[(j - 1) * c + z - 1] + "," + i + "," + j + "," + z); | 
|                 } | 
|             } | 
|   | 
|         } | 
|         return result.substring(1); | 
|     } | 
|   | 
|     /** | 
|      * 获取平方仓的湿度值集合,格式:湿度,层数,行数,列数|湿度,层数,行数,列数|湿度,层数,行数,列数 | 
|      * | 
|      * @return | 
|      */ | 
|     private String getHumPointList1(String point, String cable) { | 
|         String[] cab = cable.split("-"); | 
|         int c = Integer.valueOf(cab[0]); | 
|         int h = Integer.valueOf(cab[1]); | 
|         int l = Integer.valueOf(cab[2]); | 
|   | 
|         String[] points = point.split(","); | 
|         String result = ""; | 
|         for (int i = 1; i <= l; i++) { | 
|             for (int j = 1; j <= h; j++) { | 
|                 for (int z = 1; z <= c; z++) { | 
|                     result += ("|" + "-1" + "," + z + "," + j + "," + i); | 
|                 } | 
|             } | 
|         } | 
|         return result.substring(1); | 
|     } | 
|   | 
|     /** | 
|      * 获取筒仓的湿度值集合,格式:湿度,圈数,点数,层数|湿度,圈数,点数,层数|湿度,圈数,点数,层数 | 
|      * | 
|      * @return | 
|      */ | 
|     private String getHumPointList2(String point, String cable, String cableCir) { | 
|         String[] cab = cable.split("-"); | 
|         String[] cabCir = cableCir.split("-"); | 
|   | 
|         int q = cab.length;  //圈数 | 
|         int c = Integer.valueOf(cabCir[0]);  //层数 | 
|         int g = 0;  //圈根数 | 
|         int g1 = 1;  //圈起始根数 | 
|         int g2 = 0;  //圈截止根数 | 
|   | 
|         String[] points = point.split(","); | 
|         String result = ""; | 
|         for (int i = 1; i <= q; i++) { | 
|             g1 += g2; | 
|             g = Integer.valueOf(cab[i - 1]); | 
|             g2 += g; | 
|             for (int j = g1; j <= g2; j++) { | 
|                 for (int z = 1; z <= c; z++) { | 
|                     result += ("|" + "-1" + "," + i + "," + j + "," + z); | 
|                 } | 
|             } | 
|   | 
|         } | 
|         return result.substring(1); | 
|     } | 
| } |