diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java index c282767..7e00099 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockPitController.java @@ -30,4 +30,9 @@ public class CockPitController { public ResponseEntity PressedMonitor() { return new ResponseEntity<>(cockpitService.PressedMonitor(), HttpStatus.OK); } + @PostMapping("/v2/press") + @Log("压制看板") + public ResponseEntity PressedMonitorV2() { + return new ResponseEntity<>(cockpitService.PressedMonitorV2(), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java index 25e00ec..cacc4f2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java @@ -14,4 +14,10 @@ public interface CockpitService { * @return */ ConcurrentHashMap PressedMonitor(); + /** + * 压制看板2 + * + * @return + */ + ConcurrentHashMap PressedMonitorV2(); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/LoamInfoVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/LoamInfoVo.java new file mode 100644 index 0000000..eaf982e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/LoamInfoVo.java @@ -0,0 +1,17 @@ +package org.nl.wms.cockpit.service.dao; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 泥料VO + * @Date: 2024/7/8 + */ +@Data +public class LoamInfoVo { + private String redundance_material_code; + private String material_name; + private String material_weight; + private String down_time; + private String minutes_difference; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressDeviceInfoVo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressDeviceInfoVo.java new file mode 100644 index 0000000..9523596 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/PressDeviceInfoVo.java @@ -0,0 +1,20 @@ +package org.nl.wms.cockpit.service.dao; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 压机信息vo + * @Date: 2024/6/25 + */ +@Data +public class PressDeviceInfoVo { + private String point_code; + private String ext_point_code; + private String point_status; + private String material_code; + private String raw_material_code; + private String team_qty; + private String blj_weight; + private String rate; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java index 354b428..1379e7a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java @@ -1,12 +1,20 @@ package org.nl.wms.cockpit.service.impl; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.wms.cockpit.service.CockpitService; -import org.nl.wms.cockpit.service.dao.MonthlyWorkOrderVo; -import org.nl.wms.cockpit.service.dao.PressProductHeaderVo; -import org.nl.wms.cockpit.service.dao.ProductTaskVo; -import org.nl.wms.cockpit.service.dao.ShiftProductionVo; +import org.nl.wms.cockpit.service.dao.*; import org.nl.wms.cockpit.service.mapper.CockPitMapper; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.ext.acs.service.dto.to.acs.DeviceInfoDto; +import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.util.CommonUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -16,6 +24,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadPoolExecutor; +import java.util.stream.Collectors; /** * @Author: lyd @@ -27,6 +36,10 @@ import java.util.concurrent.ThreadPoolExecutor; public class CockpitServiceImpl implements CockpitService { @Autowired private CockPitMapper cockPitMapper; + @Autowired + private ISchBasePointService pointService; + @Autowired + private WmsToAcsService wmsToAcsService; @Autowired @Qualifier("threadPoolExecutor") @@ -102,4 +115,111 @@ public class CockpitServiceImpl implements CockpitService { future.join(); return map; } + + @Override + public ConcurrentHashMap PressedMonitorV2() { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + // 白班、晚班 + String dayShift = CommonUtils.getDayShift(); + List yzPoints = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getRegion_code, "YZ") + .eq(SchBasePoint::getPoint_type, "1") + .eq(SchBasePoint::getIs_has_workder, true)); + // 1、各压机信息 + CompletableFuture> pressDeviceInfoVoListFuture = CompletableFuture.supplyAsync( + () -> { + // 调用acs + List deviceCodes = yzPoints + .stream() + .map(p -> DeviceInfoDto.buildDevice(p.getPoint_code())) + .collect(Collectors.toList()); +// AcsResponse statusByCode = wmsToAcsService.getDeviceStatusByCode(deviceCodes); + List allPressInfo = cockPitMapper.getAllPressInfo(dayShift); + // 便利allPressInfo 赋值 +// if (HttpStatus.HTTP_OK == statusByCode.getCode()) { +// JSONArray datas = statusByCode.getData(); +// JSONObject data = datas.getJSONObject(0); +// // 赋值 +// allPressInfo.forEach(pi -> { +// pi.setPoint_status(data.getString("status")); +// pi.setBlj_weight(data.getString("remainingweight")); +// }); +// } + return allPressInfo; + }, pool); + pressDeviceInfoVoListFuture.thenAccept(result -> { + map.put("PressInfo", result); + }).exceptionally((e) -> { + log.error("获取压机信息错误: {}", e.getMessage(), e); + map.put("PressInfo", e); + return null; + }); + // 2、工序计划量与合格率 + CompletableFuture dayPlanFuture = CompletableFuture.supplyAsync(() -> { + JSONObject res = new JSONObject(); + // 2.1 获取当天压制工单的信息 + List dayOrders = cockPitMapper.getTheDayOrderInfos(); + // 2.1.1 每天计划量 + long planSum = dayOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPlan_weight())).mapToLong(o -> o.getPlan_weight().longValue()).sum(); + // 2.1.2 每天实际量 + long realSum = dayOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getReal_weight())).mapToLong(o -> o.getReal_weight().longValue()).sum(); + res.put("dayPlanSum", planSum / 1000); + res.put("dayRealSum", realSum / 1000); + // 2.2 统计每天数据 + List monthOrders = cockPitMapper.getTheMonthOrderInfos(); + long planMonthSum = monthOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPlan_weight())).mapToLong(o -> o.getPlan_weight().longValue()).sum(); + long realMonthSum = monthOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getReal_weight())).mapToLong(o -> o.getReal_weight().longValue()).sum(); + res.put("planMonthSum", planMonthSum / 1000); + res.put("realMonthSum", realMonthSum / 1000); + // 2.3 每天的合格数 + double dayQualityQty = dayOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getQualified_qty())).mapToDouble(o -> o.getQualified_qty().doubleValue()).sum(); + double dayUnQualityQty = dayOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getUnqualified_qty())).mapToDouble(o -> o.getUnqualified_qty().doubleValue()).sum(); + double monthQualityQty = monthOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getQualified_qty())).mapToDouble(o -> o.getQualified_qty().doubleValue()).sum(); + double monthUnQualityQty = monthOrders.stream().filter(o -> ObjectUtil.isNotEmpty(o.getUnqualified_qty())).mapToDouble(o -> o.getUnqualified_qty().doubleValue()).sum(); + double sum1 = dayQualityQty + dayUnQualityQty; + res.put("dayPassRate", sum1 == 0 ? 0 : dayQualityQty / sum1 * 100); + double sum2 = monthQualityQty + monthUnQualityQty; + res.put("montPassRate", sum2 == 0 ? 0 : monthQualityQty / sum2 * 100); + return res; + }, pool); + dayPlanFuture.thenAccept(result -> { + map.put("PlanInfo", result); + }).exceptionally((e) -> { + log.error("获取计划数据错误: {}", e.getMessage(), e); + map.put("PlanInfo", e); + return null; + }); + // 3、缓存线泥料数据 + CompletableFuture loamFuture = CompletableFuture.supplyAsync(() -> { + JSONObject res = new JSONObject(); + // 泥料数据 + List loamInfoVos = cockPitMapper.getAllDayLoamsInfo(); + // 泥料种类 + long count = loamInfoVos.stream().distinct().count(); + // 重量之和 + double sum = loamInfoVos.stream().mapToDouble(p -> Double.parseDouble(p.getMaterial_weight())).sum(); + res.put("dataInfo", loamInfoVos); + res.put("count", count); + res.put("sum", sum); + return res; + }, pool); + loamFuture.thenAccept(result -> { + map.put("DataInfo", result); + }).exceptionally((e) -> { + log.error("获取合格率数据错误: {}", e.getMessage(), e); + map.put("DataInfo", e); + return null; + }); + // 提交 + CompletableFuture allQuery = CompletableFuture.allOf( + pressDeviceInfoVoListFuture, + dayPlanFuture, + loamFuture); + CompletableFuture> future + = allQuery.thenApply((result) -> map).exceptionally((e) -> { + log.error(e.getMessage(), e); + return null; + }); + future.join(); + return map; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java index b45dcba..920ae54 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.java @@ -2,6 +2,7 @@ package org.nl.wms.cockpit.service.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import org.nl.wms.cockpit.service.dao.*; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import java.util.List; @@ -49,4 +50,29 @@ public interface CockPitMapper { */ @DS("oracle") List getMonthlyWorkOrderFutureList(); + + /** + * + * @param dayShift + * @return + */ + List getAllPressInfo(String dayShift); + + /** + * 当前泥料数据 + * @return / + */ + List getAllDayLoamsInfo(); + + /** + * 获取每天订单信息 + * @return / + */ + List getTheDayOrderInfos(); + + /** + * 获取每月订单信息 + * @return / + */ + List getTheMonthOrderInfos(); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml index 04fc6b0..716f39a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockPitMapper.xml @@ -72,4 +72,79 @@ WHERE TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') = ]]> TRUNC(SYSDATE, 'MONTH') AND TO_DATE(FPLANSTART_DATE, 'YYYYMMDD') ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), 1) + + + +