| package com.fzzy.async.fzzy35.impl; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.bstek.dorado.util.DateUtils; | 
| 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.fzzy35.entity.Fz35Grain; | 
| import com.fzzy.async.fzzy35.repository.Fzzy35Sync1302Rep; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.lang.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
|   | 
| /** | 
|  * 温湿度检测数据同步 | 
|  * | 
|  * @author czt | 
|  * @date 2022-09-07 14:41 | 
|  */ | 
| @Slf4j | 
| @Component | 
| public class Fzzy35Sync1302 { | 
|   | 
|     @Autowired | 
|     private Fzzy35Sync1302Rep 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<Fz35Grain> list = fzzySync1302Rep.findByReceiveDate(start, end); | 
|             log.info(DateUtils.format("yyyy-MM-dd HH:mm:ss",start)); | 
|             log.info(DateUtils.format("yyyy-MM-dd HH:mm:ss",end)); | 
|             if (null == list || list.isEmpty()) { | 
|                 log.info("1302---同步数据:没有查询到需要同步的数据"); | 
|                 return; | 
|             } | 
|             Date syncTime = new Date(); | 
|             Api1302 api1302; | 
|             Api1105 api1105; | 
|             List<Api1302> api1302List; | 
|             for (Fz35Grain fz35Grain : list) { | 
|                 //获取货位信息 | 
|                 api1105 = commonService.getApi1105Cache(fz35Grain.getDepotId()); | 
|                 if (null == api1105) { | 
|                     continue; | 
|                 } | 
|   | 
|                 //由货位代码+检测日期     (yyyyMMdd) +4 位顺序号组成  --2019 1128 0819 | 
|                 api1302 = new Api1302(); | 
|                 //api1302.setWsdjcdh(api1105.getHwdm() + DateFormatUtils.format(grain.getReceiveDate(), "yyyyMMdd") + String.valueOf(index).substring(1)); | 
|                 api1302.setWsdjcdh(api1105.getHwdm() + fz35Grain.getBatchId()); | 
|                 api1302.setJcsj(fz35Grain.getReceiveDate()); | 
|                 api1302.setHwdm(api1105.getHwdm()); | 
|   | 
|                 api1302.setCfww(fz35Grain.getTempOut() == null ? 0.00: fz35Grain.getTempOut()); | 
|                 if(null == fz35Grain.getHumidityOut() || fz35Grain.getHumidityOut() < 0){ | 
|                     api1302.setCfws(0); | 
|                 }else { | 
|                     api1302.setCfws(fz35Grain.getHumidityOut()); | 
|                 } | 
|   | 
|                 api1302.setCfnw(fz35Grain.getTempIn() == null ? 0.00: fz35Grain.getTempIn()); | 
|                 if(null == fz35Grain.getHumidityIn() || fz35Grain.getHumidityIn() < 0){ | 
|                     api1302.setCfns(0); | 
|                 }else { | 
|                     api1302.setCfns(fz35Grain.getHumidityIn()); | 
|                 } | 
|   | 
|                 api1302.setLszgw(fz35Grain.getTempMax() == null ? 0.00: fz35Grain.getTempMax()); | 
|                 api1302.setLspjw(fz35Grain.getTempAve() == null ? 0.00: fz35Grain.getTempAve()); | 
|                 api1302.setLszdw(fz35Grain.getTempMin() == null ? 0.00: fz35Grain.getTempMin()); | 
|   | 
|                 //判断粮食最低温、平均温、最高温是否符合逻辑 | 
|                 if(api1302.getLszdw() >= api1302.getLspjw()){ | 
|                     continue; | 
|                 } | 
|                 if(api1302.getLspjw() >= api1302.getLszgw()){ | 
|                     continue; | 
|                 } | 
|   | 
|                 //温度集合 | 
|                 if (StringUtils.isEmpty(fz35Grain.getCableCir())) { | 
|                     api1302.setLswdzjh(getTempPointList1(fz35Grain.getPoints(), fz35Grain.getCable())); | 
|                     api1302.setLssdzjh(getHumPointList1(fz35Grain.getPoints(), fz35Grain.getCable())); | 
|                 } else { | 
|                     api1302.setLswdzjh(getTempPointList2(fz35Grain.getPoints(), fz35Grain.getCable(), fz35Grain.getCableCir())); | 
|                     api1302.setLssdzjh(getHumPointList2(fz35Grain.getPoints(), fz35Grain.getCable(), fz35Grain.getCableCir())); | 
|                 } | 
|   | 
|                 api1302.setZhgxsj(fz35Grain.getReceiveDate()); | 
|   | 
|                 api1302.setBizId(fz35Grain.getBatchId()); | 
|                 api1302.setKqdm(api1105.getKqdm()); | 
|                 api1302.setSyncTime(syncTime); | 
|                 api1302List = api1302Rep.getDataByWsdjcdh(api1302.getWsdjcdh()); | 
|                 if(null == api1302List || api1302List.isEmpty()){ | 
|                     api1302.setCzbz(Constant.CZBZ_I); | 
|                 }else { | 
|                     api1302.setCzbz(api1302List.get(0).getCzbz()); | 
|                 } | 
|                 log.info("1302---同步数据:" + api1302.toString()); | 
|                 api1302Rep.save(api1302); | 
|             } | 
|   | 
|         } 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 = ""; | 
|         if (c * h * l > points.length) { | 
|             return 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-1)*h+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;  //圈截止根数 | 
|         int genNum = 0; | 
|         for (String s : cab) { | 
|             genNum += Integer.valueOf(s); | 
|         } | 
|         String[] points = point.split(","); | 
|         String result = ""; | 
|         if (c * genNum > points.length) { | 
|             return 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); | 
|     } | 
| } |