package com.zy.asrs.timer; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasStation; import com.zy.asrs.entity.dto.*; import com.zy.asrs.enums.RedisKeyType; import com.zy.asrs.service.BasStationService; import com.zy.asrs.utils.StationUtils; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.RedisUtil; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.Synchronized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; @Component public class WmsDataTimer { @Autowired private ConfigService configService; @Autowired private BasStationService basStationService; @Autowired private StationUtils stationUtils; @Autowired private RedisUtil redisUtil; //WMS任务查询接口 @Scheduled(cron = "0/3 * * * * ? ") public synchronized void taskQuery() { Config wmsTaskQueryUrlConfig = configService.selectOne(new EntityWrapper().eq("code", "wmsTaskQueryUrl")); if (wmsTaskQueryUrlConfig == null) { return; } String wmsTaskQueryUrl = wmsTaskQueryUrlConfig.getValue(); String response = null; try { HashMap requestParam = new HashMap<>(); List basStations = basStationService.selectList(new EntityWrapper().eq("out_enable", "Y")); for (BasStation basStation : basStations) { WcsStationDto wcsStationDto = stationUtils.stationMap.get(basStation.getStationId()); if (wcsStationDto == null) { continue; } if (wcsStationDto.getAuto() != 1 || wcsStationDto.getLoading() != 1 || wcsStationDto.getTaskNo().equals("0") ) { continue; } requestParam.put("taskNo", wcsStationDto.getTaskNo()); response = new HttpHandler.Builder() .setUri(wmsTaskQueryUrl) .setJson(JSON.toJSONString(requestParam)) .setTimeout(30, TimeUnit.SECONDS) .build() .doPost(); if (response != null) { JSONObject jsonObject = JSON.parseObject(response); JSONObject data = jsonObject.getJSONObject("data"); List list = new ArrayList<>(); for (Object o : data.getJSONArray("wrkDetls")) { JSONObject wrkDetl = (JSONObject) o; TvWrkDetlDto tvWrkDetlDto = new TvWrkDetlDto(); list.add(tvWrkDetlDto); tvWrkDetlDto.setMatnr(wrkDetl.getString("matnr")); tvWrkDetlDto.setMaktx(wrkDetl.getString("maktx")); tvWrkDetlDto.setSpecs(wrkDetl.getString("specs")); tvWrkDetlDto.setBatch(wrkDetl.getString("batch")); tvWrkDetlDto.setAnfme(wrkDetl.getDouble("anfme")); } wcsStationDto.setIoType(data.getInteger("ioType")); wcsStationDto.setWrkDetls(list); stationUtils.stationMap.put(wcsStationDto.getStationId(), wcsStationDto); } } } catch (Exception e) { e.printStackTrace(); } } //WMS入库任务查询接口 @Scheduled(cron = "0/3 * * * * ? ") public synchronized void inTaskQuery() { Config wmsCombQueryUrlConfig = configService.selectOne(new EntityWrapper().eq("code", "wmsCombQueryUrl")); if (wmsCombQueryUrlConfig == null) { return; } String wmsCombQueryUrl = wmsCombQueryUrlConfig.getValue(); String response = null; try { HashMap requestParam = new HashMap<>(); List basStations = basStationService.selectList(new EntityWrapper().eq("in_enable", "Y")); for (BasStation basStation : basStations) { WcsStationDto wcsStationDto = stationUtils.stationMap.get(basStation.getStationId()); if (wcsStationDto == null) { continue; } if (wcsStationDto.getAuto() != 1 || wcsStationDto.getLoading() != 1 ) { continue; } if (Cools.isEmpty(wcsStationDto.getBarcode())) { continue; } requestParam.put("barcode", wcsStationDto.getBarcode()); response = new HttpHandler.Builder() .setUri(wmsCombQueryUrl) .setJson(JSON.toJSONString(requestParam)) .setTimeout(30, TimeUnit.SECONDS) .build() .doPost(); if (response != null) { JSONObject jsonObject = JSON.parseObject(response); JSONObject data = jsonObject.getJSONObject("data"); List list = new ArrayList<>(); for (Object o : data.getJSONArray("combDetls")) { JSONObject wrkDetl = (JSONObject) o; TvWrkDetlDto tvWrkDetlDto = new TvWrkDetlDto(); list.add(tvWrkDetlDto); tvWrkDetlDto.setMatnr(wrkDetl.getString("matnr")); tvWrkDetlDto.setMaktx(wrkDetl.getString("maktx")); tvWrkDetlDto.setSpecs(wrkDetl.getString("specs")); tvWrkDetlDto.setBatch(wrkDetl.getString("batch")); tvWrkDetlDto.setAnfme(wrkDetl.getDouble("anfme")); } wcsStationDto.setIoType(1); wcsStationDto.setWrkDetls(list); stationUtils.stationMap.put(wcsStationDto.getStationId(), wcsStationDto); } } } catch (Exception e) { e.printStackTrace(); } } //WMS库存数据查询 @Synchronized @Scheduled(cron = "0/3 * * * * ? ") public void locQuery() { Config wmsUrlConfig = configService.selectOne(new EntityWrapper().eq("code", "wmsLocQueryUrl")); if (wmsUrlConfig == null) { return; } String wmsUrl = wmsUrlConfig.getValue(); String response = null; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setTimeout(30, TimeUnit.SECONDS) .build() .doGet(); if (response != null) { JSONObject jsonObject = JSON.parseObject(response); JSONObject data = jsonObject.getJSONObject("data"); TvLocDataDto tvLocDataDto = new TvLocDataDto(); tvLocDataDto.setEmptyCount(data.getInteger("emptyCount")); tvLocDataDto.setDisableCount(data.getInteger("disableCount")); tvLocDataDto.setTotal(data.getInteger("total")); tvLocDataDto.setStockCount(data.getInteger("stockCount")); tvLocDataDto.setUsedPr(data.getDouble("usedPr")); tvLocDataDto.setUsed(data.getInteger("used")); List pieList = new ArrayList<>(); JSONArray list = data.getJSONArray("pie"); for (Object o : list) { CommonNvDto commonNvDto = JSON.parseObject(JSON.toJSONString(o), CommonNvDto.class); pieList.add(commonNvDto); } tvLocDataDto.setPie(pieList); redisUtil.set(RedisKeyType.TV_LOC_DATA_DTO.key, JSON.toJSONString(tvLocDataDto)); } } catch (Exception e) { e.printStackTrace(); } } //WMS入出库折线图 @Synchronized @Scheduled(cron = "0/3 * * * * ? ") public void inOutLineCharts() { Config wmsUrlConfig = configService.selectOne(new EntityWrapper().eq("code", "wmsInOutLineChartsQueryUrl")); if (wmsUrlConfig == null) { return; } String wmsUrl = wmsUrlConfig.getValue(); String response = null; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setTimeout(30, TimeUnit.SECONDS) .build() .doGet(); if (response != null) { JSONObject jsonObject = JSON.parseObject(response); JSONObject data = jsonObject.getJSONObject("data"); redisUtil.set(RedisKeyType.TV_LINE_CHARTS.key, JSON.toJSONString(data)); } } catch (Exception e) { e.printStackTrace(); } } //WMS库存数据统计 @Synchronized @Scheduled(cron = "0/3 * * * * ? ") public void locDetlStatistics() { Config wmsUrlConfig = configService.selectOne(new EntityWrapper().eq("code", "wmsLocDetlStatisticsQueryUrl")); if (wmsUrlConfig == null) { return; } String wmsUrl = wmsUrlConfig.getValue(); String response = null; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setTimeout(30, TimeUnit.SECONDS) .build() .doGet(); if (response != null) { JSONObject jsonObject = JSON.parseObject(response); JSONObject data = jsonObject.getJSONObject("data"); List list = new ArrayList<>(); JSONArray records = data.getJSONArray("records"); for (Object record : records) { TvLocDetlStatisticsDto tvLocDetlStatisticsDto = JSON.parseObject(JSON.toJSONString(record), TvLocDetlStatisticsDto.class); list.add(tvLocDetlStatisticsDto); } redisUtil.set(RedisKeyType.TV_LOC_DETL_STATISTICS.key, JSON.toJSONString(list)); } } catch (Exception e) { e.printStackTrace(); } } }