From 32059a44b57fb04c0885ef5910c71ee0a75ff17d Mon Sep 17 00:00:00 2001 From: zengchenxi Date: Fri, 10 May 2024 13:59:27 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=9C=80=E6=B1=82=E3=80=91=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=A4=A7=E5=B1=8F=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=8E=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/storagemat/vo/StorageMatRespVO.java | 3 + .../taskdispatch/TaskDispatchDO.java | 6 + .../mysql/scequipment/ScEquipmentMapper.java | 4 + .../biz/service/screen/ScreenServiceImpl.java | 107 +++++++++++++----- 4 files changed, 92 insertions(+), 28 deletions(-) diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/storagemat/vo/StorageMatRespVO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/storagemat/vo/StorageMatRespVO.java index 87032ba8..56e78e40 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/storagemat/vo/StorageMatRespVO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/controller/admin/storagemat/vo/StorageMatRespVO.java @@ -72,4 +72,7 @@ public class StorageMatRespVO { private String unit; + @Schema(description = "库存数量") + private BigDecimal stockQuantity; + } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskdispatch/TaskDispatchDO.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskdispatch/TaskDispatchDO.java index a53422e0..fa2a7e6f 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskdispatch/TaskDispatchDO.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/dataobject/taskdispatch/TaskDispatchDO.java @@ -146,6 +146,12 @@ public class TaskDispatchDO extends BaseDO { @TableField(exist = false) private Long materialId; + @TableField(exist = false) + private Integer qualifiedQuantity; + + @TableField(exist = false) + private Integer unqualifiedQuantity; + public boolean canSave(){ return TaskDispatchStatusEnum.SAVE.getCode() == this.dispatchStatus.intValue(); } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/scequipment/ScEquipmentMapper.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/scequipment/ScEquipmentMapper.java index 1a9373c0..83c44f27 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/scequipment/ScEquipmentMapper.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/dal/mysql/scequipment/ScEquipmentMapper.java @@ -41,4 +41,8 @@ public interface ScEquipmentMapper extends BaseMapperX { @Select("CALL Fault_Time(#{id}, #{startTime}, #{endTime})") @Options(statementType = StatementType.CALLABLE) List getFaultTimeInfo(ScDashboardReqVO reqVO); + + @Select("CALL Equipment()") + @Options(statementType = StatementType.CALLABLE) + void generateLiveDataOfEquipment(); } diff --git a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/screen/ScreenServiceImpl.java b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/screen/ScreenServiceImpl.java index 87087f18..b2e9f1ce 100644 --- a/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/screen/ScreenServiceImpl.java +++ b/mes-module-majoys/mes-module-majoys-biz/src/main/java/com/chanko/yunxi/mes/module/biz/service/screen/ScreenServiceImpl.java @@ -9,6 +9,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.module.biz.controller.admin.screen.vo.ScreenPageReqVO; import com.chanko.yunxi.mes.module.biz.controller.admin.screen.vo.ScreenSaveReqVO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.equipmanufacture.EquipManufactureDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.plansub.PlanSubDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.processdesign.ProcessDesignDO; @@ -18,6 +19,7 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.screen.ScreenDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO; +import com.chanko.yunxi.mes.module.biz.dal.dataobject.unqualifiednotification.UnqualifiedNotificationDO; import com.chanko.yunxi.mes.module.biz.dal.mysql.plansub.PlanSubMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.processdesign.ProcessDesignMapper; import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderMapper; @@ -43,6 +45,7 @@ import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.module.biz.enums.ErrorCodeConstants.SCREEN_NOT_EXISTS; +import static com.chanko.yunxi.mes.module.biz.enums.ScreenTypeEnum.ProductionOrderState; /** * 大屏数据 Service 实现类 @@ -165,38 +168,16 @@ public class ScreenServiceImpl implements ScreenService { } } - + ScreenDO productionOrderState = todayDataList.stream().filter(screenDO -> ProductionOrderState.name().equals(screenDO.getType())).findFirst().get(); // 设置今天数据 - // TODO 待开发 - /*todayDataList.forEach(screenDO -> { + todayDataList.forEach(screenDO -> { switch (ScreenTypeEnum.valueOf(screenDO.getType())){ - case State: - ScreenDO yesterdayScreenDO = null; - if(CollUtil.isNotEmpty(yesterdayList)) { - yesterdayScreenDO = yesterdayList.stream().filter(yesterdayDO -> screenDO.getType().equals(yesterdayDO.getType())).findFirst().get(); - } - buildState(screenDO, yesterdayScreenDO); - break; - case ProgressTrackingOfProduction: - buildProgressTrackingOfProduction(screenDO); - break; - case ProgressTrackingOfDesign: - buildProgressTrackingOfDesign(screenDO); - break; - case NumberOfMouldPerYear: - buildNumberOfMouldPerYear(screenDO); - break; - case NumberOfMouldPerMonth: - buildNumberOfMouldPerMonth(screenDO); - break; - case ProcessingStatusOfCNC: - buildProcessingStatusOfCNC(screenDO); - break; - case AssemblyShopInfo: - buildAssemblyShopInfo(screenDO); + case ProductionStateList: + // 同时设置 生产订单状态 + buildProductionStateList(screenDO, productionOrderState); break; } - });*/ + }); // 分插入与更新 List insertList = todayDataList.stream().filter(screenDO -> screenDO.getId() == null).collect(Collectors.toList()); @@ -208,6 +189,76 @@ public class ScreenServiceImpl implements ScreenService { return todayDataList; } + /** + * 包装生产订单状态 + *

+ * "1D": ["completionRate","deliveryRate"] + * [95.44, 97.0] + * + * @param screenDO + * @param completionRate + * @param deliveryRate + */ + private void buildProductionOrderState(ScreenDO screenDO, BigDecimal completionRate, BigDecimal deliveryRate) { + screenDO.setData(JSON.toJSONString(Arrays.asList(completionRate, deliveryRate))); + } + + /** + * 包装生产状态列表: + *

+ * "2D": ["productionCode","productName","plannedQuantity", "qualifiedQuantity", "unqualifiedQuantity", "productionProgress"] + * [["xx", "上", 23, 20, 3, 87.0],["xx", "上", 23, 20, 3, 87.0],["xx", "上", 23, 20, 3, 87.0]] + * + * @param screenDO + * @param productionOrderState + */ + private void buildProductionStateList(ScreenDO screenDO, ScreenDO productionOrderState) { + ArrayList resultData = new ArrayList<>(16); + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDO.class) + .select("d.name as projectSubName", "d.code as projectSubCode") + .select("b.amount", "d.unit") + .select("COALESCE(sum(e.amount),0) as qualifiedQuantity") + .select("COALESCE(sum(f.amount),0) as unqualifiedQuantity") + .leftJoin(PlanDO.class, "a", PlanDO::getId, TaskDispatchDO::getPlanId) + .leftJoin(ProjectOrderSubDO.class, "b", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId) + .leftJoin(ProjectOrderDO.class, "c", ProjectOrderDO::getId, ProcessDesignDO::getProjectId) + .leftJoin(MaterialDO.class, "d", MaterialDO::getId, ProjectOrderSubDO::getMaterialId) + .leftJoin(TaskReportDO.class, "e", Wrapper -> Wrapper.eq(TaskReportDO::getDispatchId, TaskDispatchDO::getId) + .eq(TaskReportDO::getType, TaskDispatchTypeEnum.ASSEMBLE.name()) + .eq(TaskReportDO::getHasReport, YesOrNoEnum.Y.getCode()) + ) + .leftJoin(UnqualifiedNotificationDO.class, "f", Wrapper -> Wrapper.eq(UnqualifiedNotificationDO::getProjectSubId, TaskDispatchDO::getProjectSubId) + .eq(UnqualifiedNotificationDO::getNotificationStatus, UnqualifiedNotificationStatusEnum.AUDIT.getCode())) + .orderByDesc(TaskDispatchDO::getId) + .groupBy(TaskDispatchDO::getId) + .disableSubLogicDel(); + + BigDecimal sumProductionProgress = new BigDecimal(0); + List taskDispatchDOList = taskDispatchMapper.selectList(query); + taskDispatchDOList.forEach(taskDispatchDO -> { + + BigDecimal productionProgress = new BigDecimal(taskDispatchDO.getQualifiedQuantity() * 100).divide(new BigDecimal(taskDispatchDO.getAmount()), 2, BigDecimal.ROUND_CEILING); + resultData.add(new LinkedList(){{ + add(taskDispatchDO.getProjectSubCode()); + add(taskDispatchDO.getProjectSubName()); + add(taskDispatchDO.getAmount()); + add(taskDispatchDO.getQualifiedQuantity()); + add(taskDispatchDO.getUnqualifiedQuantity()); + add(productionProgress); + }}); + + sumProductionProgress.add(sumProductionProgress); + }); + + screenDO.setData(JSON.toJSONString(resultData)); + + BigDecimal completionRate = sumProductionProgress.divide(new BigDecimal(taskDispatchDOList.size()), 2, BigDecimal.ROUND_CEILING); + BigDecimal deliveryRate = null; + buildProductionOrderState(productionOrderState, completionRate, deliveryRate); + } + + /** * 包装车间工作信息: *