From edee20587b4aeedbac45c3dbbe1fa52fbef6277f Mon Sep 17 00:00:00 2001 From: z Date: Sun, 11 Jan 2026 16:00:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E8=B4=A7=E5=8D=95=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E8=BF=98=E5=8E=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/PlanSubDetailPageReqVO.java | 2 +- .../taskdispatch/TaskDispatchController.java | 7 + .../taskdispatch/TaskDispatchDetailDO.java | 30 +- .../heli/dal/mysql/plansub/PlanSubMapper.java | 3 + .../processdesign/ProcessDesignMapper.java | 16 +- .../TaskDispatchDetailMapper.java | 78 ++ .../heli/service/plan/PlanServiceImpl.java | 171 +++-- .../PlanSubDetailServiceImpl.java | 278 +++++-- .../taskdispatch/TaskDispatchService.java | 2 + .../taskdispatch/TaskDispatchServiceImpl.java | 41 +- .../heli/deliverorder/shipmentsPrint.vue | 235 +++--- .../src/views/heli/partprocess/detail.vue | 115 ++- .../src/views/heli/partprocess/index.vue | 28 +- .../src/views/heli/projectorder/index.vue | 2 +- .../views/heli/projectorder/startprint.vue | 24 +- .../views/heli/taskdispatch/detailDialog.vue | 15 +- .../pages/index/components/PageSkeleton.vue | 4 +- .../src/pages/index/components/footRight.vue | 2 +- mes-ui/mini-app/src/pages/index/index.vue | 7 + mes-ui/mini-app/src/pages/login/login.vue | 2 +- mes-ui/mini-app/src/pages/my/my.vue | 2 +- .../components/dataItem.vue | 559 ++++++++++++++ .../productionInReport-detail.vue | 710 ++++++++++++++++++ .../productionInReport/productionInReport.vue | 151 ++++ 24 files changed, 2174 insertions(+), 310 deletions(-) create mode 100644 mes-ui/mini-app/src/pages/productionInReport/components/dataItem.vue create mode 100644 mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue create mode 100644 mes-ui/mini-app/src/pages/productionInReport/productionInReport.vue diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailPageReqVO.java index a40ac6ab..12ecd34e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailPageReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailPageReqVO.java @@ -76,6 +76,6 @@ public class PlanSubDetailPageReqVO extends PageParam { private String customerBrief; private String projectName; private String planNo; - + private Boolean statusflag; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java index 812e6f6b..a26b9b66 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java @@ -292,4 +292,11 @@ public class TaskDispatchController { public CommonResult> taskPage(@Valid TaskPlanJDBaoBiaoPageReqVO pageReqVO) { return success(taskDispatchService.taskPage(pageReqVO)); } + @GetMapping("/task-dispatch-detail/pagexl") + @Operation(summary = "小程序获得派工明细分页") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult> getTaskDispatchPageDetailXl(@Valid TaskDispatchDetailPageReqVO pageReqVO) { + PageResult pageResult = taskDispatchService.getTaskDispatchPageDetailXl(pageReqVO); + return success(pageResult); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java index ea355f63..e60129fa 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java @@ -105,8 +105,6 @@ public class TaskDispatchDetailDO extends BaseDO { private Integer planStatus; private Integer isReport; - private Integer inReportProcess; - private String returnRemark; /** * 工序状态 默认 已提交 已完成 0 1 2 @@ -115,6 +113,22 @@ public class TaskDispatchDetailDO extends BaseDO { private Integer reportProcess; private String matPlanProcess; + /** + * 下料报工进度0 未报工 1 已报工 2 报工完成 + */ + private Integer inReportProcess; + /** + * 下料是否报工(Y\N) + */ + private String isInProcess; + /** + * 返工原因 + */ + private String returnRemark; + /** + * 返工原因 + */ + private String returnWRematk; @TableField(exist = false) private String projectName; @@ -282,4 +296,16 @@ public class TaskDispatchDetailDO extends BaseDO { private String reportFlag; @TableField(exist = false) private String finishedProduct; + /** + * 密度 + */ + @TableField(exist = false) + private BigDecimal density; + /** + * 重量 + */ + @TableField(exist = false) + private BigDecimal weight; + @TableField(exist = false) + private BigDecimal purchaseAmounts; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansub/PlanSubMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansub/PlanSubMapper.java index e41f867f..90e56b70 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansub/PlanSubMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansub/PlanSubMapper.java @@ -320,6 +320,9 @@ public interface PlanSubMapper extends BaseMapperX { query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName()); query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName()); query.like(ObjectUtil.isNotEmpty(pageReqVO.getCustomerName()), CustomerDO::getName, pageReqVO.getCustomerName()); + if (ObjectUtil.isNotEmpty(pageReqVO.getCustomerName())&&ObjectUtil.isEmpty(pageReqVO.getProjectCode())&&ObjectUtil.isEmpty(pageReqVO.getProjectName())&&ObjectUtil.isEmpty(pageReqVO.getProjectSubName())){ + query.ne(ProjectOrderDO::getDeliveryStatus,3); + } query.orderByAsc(ProjectOrderDO::getCode); return selectPage(pageReqVO, query); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java index a0b93e1d..033b8ea7 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/processdesign/ProcessDesignMapper.java @@ -398,10 +398,16 @@ public interface ProcessDesignMapper extends BaseMapperX { @Delete("delete from pro_process_design where project_id = #{id}") void deleteOrderId(@Param("id") Long id); - @Select("SELECT pd.* FROM pro_process_design pd " + - "INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id " + - "AND psd.sub_type = pd.process_design_type " + - "WHERE pd.project_sub_id = #{projectSubId} " + - "AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')") +// @Select("SELECT pd.* FROM pro_process_design pd " + +// "INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id " + +// "AND psd.sub_type = pd.process_design_type " + +// "WHERE pd.project_sub_id = #{projectSubId} " + +// "AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')") + @Select("SELECT DISTINCT pd.* \n" + + "FROM pro_process_design pd \n" + + "INNER JOIN project_plan_sub_detail psd ON psd.project_sub_id = pd.project_sub_id \n" + + " AND psd.sub_type = pd.process_design_type \n" + + "WHERE pd.project_sub_id = #{projectSubId} \n" + + " AND pd.process_design_type IN ('BLUEPRINT_3D', 'BLUEPRINT_2D', 'BLUEPRINT_WORKBLANK')") List selectWithDetailExists(@Param("projectSubId") Long projectSubId); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java index 41848e14..acc787f6 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java @@ -18,6 +18,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterLineDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; @@ -29,6 +30,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.Pur import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskinreport.TaskInReportDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -906,11 +908,20 @@ public interface TaskDispatchDetailMapper extends BaseMapperX wrapper.eq(MaterialPlanBoomDO::getId,TaskDispatchDetailDO::getProjectMaterialPlanDetailId)) + .leftJoin(PurchaseOrderMakeDetailDO.class, "f", + wrapper -> wrapper.eq(PurchaseOrderMakeDetailDO::getId,MaterialPlanBoomDO::getProjectPurchaseOrderMakeDetailId)) + .disableSubLogicDel() .orderByAsc(ProcessBomDetailDO::getMaterialName) .orderByAsc(TaskDispatchDO::getCode); query.eq(TaskDispatchDO::getProjectSubId,projectSubId); @@ -935,4 +946,71 @@ public interface TaskDispatchDetailMapper extends BaseMapperX selectPageXl(TaskDispatchDetailPageReqVO reqVO , Map> postIds) { + // 假设reqVO中包含了页码(page)和每页数量(limit) + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDetailDO.class) + .select("a.code as dispatchCode") + .select("b.code as projectCode", "b.project_name as projectName", "c.name as projectSubName") + .select("d.material_name as materialName") + .select("e.name as procedureName") + .select("g.name as compositionName","g.density as density") + .selectSum(TaskInReportDO::getWeight, "weight") + .leftJoin(TaskDispatchDO.class, "a", TaskDispatchDO::getId, TaskDispatchDetailDO::getDispatchId) + .leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, TaskDispatchDO::getProjectId) + .leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId) + .leftJoin(ProcessBomDetailDO.class, "d", ProcessBomDetailDO::getId, TaskDispatchDO::getBomDetailId) + .leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, TaskDispatchDetailDO::getProcedureId) + .leftJoin(TaskInReportDO.class, "f", TaskInReportDO::getDispatchDetailId, TaskDispatchDetailDO::getId) + .leftJoin(PlanSubDO.class,"plan", PlanSubDO::getProjectSubId, TaskDispatchDO::getProjectSubId) + .leftJoin(CompositionDO.class, "g", CompositionDO::getId, ProcessBomDetailDO::getCompositionId) + .groupBy(TaskDispatchDetailDO::getId) + .disableSubLogicDel();; + if (reqVO.getProcedureStatusList().size() == 1 && reqVO.getProcedureStatusList().get(0) == 2) { + // 完工降序 + query.orderByDesc(TaskDispatchDetailDO::getDispatchId, TaskDispatchDetailDO::getSort); + } else { + // 未完工升序 + query + .orderByAsc(TaskDispatchDetailDO::getDispatchId, TaskDispatchDetailDO::getSort); + } + + if (reqVO.getSubOrDetailName() != null && !reqVO.getSubOrDetailName().trim().equals("")){ + query.and( e ->e.eq(ProjectOrderDO::getProjectName, reqVO.getSubOrDetailName()).or().eq( + ProjectOrderSubDO::getName, reqVO.getSubOrDetailName() + ).or().eq(ProcessBomDetailDO::getMaterialName, reqVO.getSubOrDetailName()).or().eq(ProcessBomDetailDO::getBomBlueprintNo, reqVO.getSubOrDetailName()) + .or().eq(PlanSubDO::getProjectSubCode, reqVO.getSubOrDetailName())); + + // query.eq(" (b.project_name like '%" + reqVO.getSubOrDetailName() + "%' or c.name like '%" + reqVO.getSubOrDetailName() + "%')"); + } + query.and(wrapper -> { + wrapper.ne(ProjectOrderDO::getStatus,6); + + if (CollUtil.isNotEmpty(postIds)) { + wrapper.and(i -> { + // 为每个岗位创建对应的工序查询条件 + for (String postId : postIds.keySet()) { + Set processId = postIds.get(postId); + if (ObjectUtil.isNotEmpty(processId)) { + i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId) + .in(TaskDispatchDetailDO::getProcedureId, processId) + .isNull(TaskDispatchDetailDO::getOwner)); + } else { + i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId) + .isNull(TaskDispatchDetailDO::getOwner)); + } + } + }); + // 添加所有者查询条件 + wrapper.or(k -> k.eq(reqVO.getOwner() != null, TaskDispatchDetailDO::getOwner, reqVO.getOwner())); + } else { + wrapper.eq(reqVO.getOwner() != null, TaskDispatchDetailDO::getOwner, reqVO.getOwner()); + } + + }); + query.in(CollUtil.isNotEmpty(reqVO.getProcedureStatusList()), TaskDispatchDetailDO::getInReportProcess, reqVO.getProcedureStatusList()) + .eq(TaskDispatchDetailDO::getIsInProcess,"Y"); + + return selectPage(reqVO, query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java index f6a90afb..0a9679ce 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanServiceImpl.java @@ -412,7 +412,7 @@ public class PlanServiceImpl implements PlanService { LocalDateTime now = LocalDateTime.now(); if (planSubDO.getDeliveryStatus() == 3) { planDO.setProjectProgress("已发货"); - } else if (now.isAfter(planSubDO.getProjectEndTime())) { + } else if (now.toLocalDate().isAfter(planSubDO.getProjectEndTime().toLocalDate())) { long overdueDays = ChronoUnit.DAYS.between( planSubDO.getProjectEndTime().toLocalDate(), now.toLocalDate()); planDO.setProjectProgress("已延迟" + overdueDays + "天"); @@ -438,21 +438,21 @@ public class PlanServiceImpl implements PlanService { LocalDateTime dateAsLocalDateTime = processDesignProgressDO.getEndTime().toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(); - if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())){ - if (dateAsLocalDateTime.isAfter(planSubDO.getCraftEndDate())) { + if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())) { + if (dateAsLocalDateTime.toLocalDate().isAfter(planSubDO.getCraftEndDate().toLocalDate())) { + planDO.setProcessFlag("1"); + } else { + planDO.setProcessFlag("0"); + } + } + } + } else { + if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())) { + if (now.toLocalDate().isAfter(planSubDO.getCraftEndDate().toLocalDate())) { planDO.setProcessFlag("1"); } else { planDO.setProcessFlag("0"); } - } - } - } else { - if (ObjectUtil.isNotEmpty(planSubDO.getCraftEndDate())){ - if (now.isAfter(planSubDO.getCraftEndDate())) { - planDO.setProcessFlag("1"); - } else { - planDO.setProcessFlag("0"); - } } Long l = processDesignProgressMapper.selectCount(new LambdaQueryWrapper().eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId())); if (l > 0) { @@ -462,7 +462,7 @@ public class PlanServiceImpl implements PlanService { } } } - + } for (PlanSubDO subDO : list) { //设计计划 // 1. 查询已完成的工艺设计 @@ -475,7 +475,7 @@ public class PlanServiceImpl implements PlanService { handleCompletedDesigns(subDO, completedProcessDesigns, latestTwoDimPlan); } else { // 情况2:未完成或部分完成 - handleIncompleteDesigns(subDO, completedProcessDesigns, latestTwoDimPlan, now); + handleIncompleteDesigns(subDO, completedProcessDesigns, latestTwoDimPlan, LocalDateTime.now()); } //外协任务 // 1.查询外协的派工单 @@ -528,7 +528,7 @@ public class PlanServiceImpl implements PlanService { } // 4. 处理时间相关逻辑 - processProcessingTimeLogic(subDO, dispatchDetailDOS, taskReportDOS, allCompleted1, now); + processProcessingTimeLogic(subDO, dispatchDetailDOS, taskReportDOS, allCompleted1, LocalDateTime.now()); //过程检 //1.查询非外协需要过程检的数据 @@ -558,10 +558,9 @@ public class PlanServiceImpl implements PlanService { processAssemblyTask(subDO, assemblyTask, taskReportDOList); } // 4. 处理时间相关逻辑 - processAssemblyTaskTimeLogic(subDO, assemblyTask, taskReportDOList, allCompleted2, now); + processAssemblyTaskTimeLogic(subDO, assemblyTask, taskReportDOList, allCompleted2, LocalDateTime.now()); } planDO.setList( pageResult); - } return planDO; } @@ -578,11 +577,32 @@ public class PlanServiceImpl implements PlanService { subDO.setAssemblyTask(TASK_NOT_STARTED); } }else { - BigDecimal dispatchAmount = calculateDispatchAmount(dispatchDetailDOS); - BigDecimal reportedAmount = calculateReportedAmount(taskReportDOS); - int percentage = calculatePercentage(reportedAmount, dispatchAmount); - subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage)); - subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL); + List collect = dispatchDetailDOS.stream().filter(detailDO -> detailDO.getProcedureStatus() == 2).collect(Collectors.toList()); + //已报工完的工时 + if (ObjectUtil.isNotEmpty(collect)){ + BigDecimal workTime = calculateDispatchTime(collect); + Set dispatchDetailIdSet = collect.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getId) + .collect(Collectors.toSet()); + // 过滤 taskReportDOS + List filteredReports = taskReportDOS.stream() + .filter(report -> !dispatchDetailIdSet.contains(report.getDispatchDetailId())) + .collect(Collectors.toList()); + BigDecimal bigDecimal = calculateReportedTime(filteredReports); + bigDecimal = bigDecimal.add(workTime); + BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS); + int percentage = calculatePercentage(bigDecimal, dispatchAmount); + subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage)); + subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL); + }else{ + BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS); + BigDecimal reportedAmount = calculateReportedTime(taskReportDOS); + int percentage = calculatePercentage(reportedAmount, dispatchAmount); + subDO.setAssemblyTask(String.format(TASK_STARTED_FORMAT, percentage)); + subDO.setAssemblyTaskFlag(TASK_FLAG_NORMAL); + } + } } /** @@ -660,7 +680,7 @@ public boolean isSameSizeAndNotEmpty(Collection list1, Collection list2) return taskReportMapper.selectList( new LambdaQueryWrapper() .in(TaskReportDO::getDispatchDetailId, dispatchDetailIds) - .eq(TaskReportDO::getHasReport, 1) + ); } @@ -731,12 +751,12 @@ public boolean isSameSizeAndNotEmpty(Collection list1, Collection list2) .orElse(null); // 如果报工结束时间晚于派工结束时间,标记为延迟 - if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) { + if (maxReportEndTime != null && maxReportEndTime.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) { subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED); } } else { // 当前时间晚于派工结束时间,标记为延迟 - if (now.isAfter(maxDispatchEndTime)) { + if (now.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) { subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED); } } @@ -778,12 +798,12 @@ public boolean isSameSizeAndNotEmpty(Collection list1, Collection list2) .orElse(null); // 如果报工结束时间晚于派工结束时间,标记为延迟 - if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) { + if (maxReportEndTime != null && maxReportEndTime.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) { subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED); } } else { // 当前时间晚于派工结束时间,标记为延迟 - if (now.isAfter(maxDispatchEndTime)) { + if (now.toLocalDate().isAfter(maxDispatchEndTime.toLocalDate())) { subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED); } } @@ -801,6 +821,18 @@ public boolean isSameSizeAndNotEmpty(Collection list1, Collection list2) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); } + /** + * 计算已报工数量 + */ + private BigDecimal calculateReportedTime(List taskReportDOS) { + return Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskReportDO::getWorkTime) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } /** * 计算已报工数量 */ @@ -853,7 +885,16 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); } - + // 计算派工数量 + private BigDecimal calculateDispatchTime(List detailDOS) { + return Optional.ofNullable(detailDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getWorkTime) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } // 计算派工数量 private BigDecimal calculateDispatchAmount(List detailDOS) { return Optional.ofNullable(detailDOS) @@ -899,12 +940,12 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) .orElse(null); // 如果到货时间晚于要求时间,标记为延迟 - if (maxArriveTime != null && maxArriveTime.isAfter(maxRequireTime)) { + if (maxArriveTime != null && maxArriveTime.toLocalDate().isAfter(maxRequireTime.toLocalDate())) { subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED); } } else { // 当前时间晚于最大要求时间,标记为延迟 - if (LocalDateTime.now().isAfter(maxRequireTime)) { + if (LocalDateTime.now().toLocalDate().isAfter(maxRequireTime.toLocalDate())) { subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED); } } @@ -974,21 +1015,49 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) subDO.setDesignTask(""); } - + List collect = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1).collect(Collectors.toList()); + List collect1 = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() == 1).collect(Collectors.toList()); List processDesignIds = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() !=1) + .map(ProcessDesignDO::getId) + .collect(Collectors.toList()); + List ids = processDesigns.stream() .map(ProcessDesignDO::getId) .collect(Collectors.toList()); // 获取工艺设计进度列表 List progressList = getProcessDesignProgressList(processDesignIds); + List processDesignProgressDOS = getProcessDesignProgressList(ids); - if (ObjectUtil.isEmpty(progressList)&&ObjectUtil.isNotEmpty(latestTwoDimPlan)) { + if (ObjectUtil.isEmpty(processDesignProgressDOS)&&ObjectUtil.isNotEmpty(latestTwoDimPlan)) { subDO.setDesignTask("未开始"); } - if (ObjectUtil.isNotEmpty(progressList)) { + if (ObjectUtil.isNotEmpty(processDesignProgressDOS)) { // 计算总工时和当前工时 BigDecimal totalWorkTime = calculateTotalWorkTime(progressList); - BigDecimal currentTime = calculateCurrentTime(subDO); + BigDecimal currentTime = calculateCurrentTime(subDO,collect); + for (ProcessDesignDO processDesignDO : collect1) { + if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getThreeDimNum().toString()).multiply(new BigDecimal("8"))); + } + } + if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getBlankNum().toString()).multiply(new BigDecimal("8"))); + } + } + if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8"))); + } + } + } currentTime = currentTime.multiply(new BigDecimal("8")); // 计算完成百分比 Integer percentage = calculatePercentage(totalWorkTime, currentTime); @@ -1000,7 +1069,7 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) // 检查是否超期 if ( ObjectUtil.isNotEmpty(latestTwoDimPlan) && - now.isAfter(latestTwoDimPlan.getTwoDimDate())) { + now.toLocalDate().isAfter(latestTwoDimPlan.getTwoDimDate().toLocalDate())) { subDO.setDesignTaskFlag("1"); } } @@ -1047,21 +1116,25 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) /** * 计算当前工时(将三个数值相加) */ - private BigDecimal calculateCurrentTime(PlanSubDO subDO) { + private BigDecimal calculateCurrentTime(PlanSubDO subDO,List collect) { BigDecimal currentTime = BigDecimal.ZERO; - - if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + for (ProcessDesignDO processDesignDO : collect) { + if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); + } + } + if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + } + } + if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); + } + } } - - if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); - } - - if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); - } - return currentTime; } @@ -1090,7 +1163,7 @@ private List queryPurchaseOrderDetails(PlanSubDO subDO) .atZone(ZoneId.systemDefault()) .toLocalDateTime(); - return dateAsLocalDateTime.isAfter(localDateTime); + return dateAsLocalDateTime.toLocalDate().isAfter(localDateTime.toLocalDate()); } /** diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java index 28a0cf17..548bff34 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailServiceImpl.java @@ -1829,7 +1829,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { // 设置日期字段 setDateFields(designTask, planSubDetail); // 设置状态和进度 - setTaskStatus(designTask, planSubDetail); + setTaskStatus(designTask, planSubDetail,pageReqVO.getProjectSubId()); if ( !"已完成".equals(designTask.getStatus()) || pageReqVO.getFlag()==1){ // 如果未完成且有数据,计算进度 @@ -1853,8 +1853,11 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { setOutsourcedTaskDateFields(outsourcedTask, dispatchDetailDOS); List orderNoDetailDOS = queryPurchaseOrderDetails(pageReqVO.getProjectSubId()); + + // 3.查询是否送审 + List purchaseOrderMakeDetailDOS = queryPurchaseOrderMakeDetails(pageReqVO.getProjectSubId()); // 设置状态和进度 - setOutsourcedTaskStatus(outsourcedTask,orderNoDetailDOS,dispatchDetailDOS); + setOutsourcedTaskStatus(outsourcedTask,orderNoDetailDOS,dispatchDetailDOS,purchaseOrderMakeDetailDOS); if ( !"已完成".equals(outsourcedTask.getStatus()) || pageReqVO.getFlag()==1){ // 如果未完成且有数据,计算进度 @@ -1881,7 +1884,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { // 2. 查询报工数据 List taskReportDOS = queryTaskReports(dispatchDetailDOList); //设置状态 - setProcessingPlanStatus(processingPlan, dispatchDetailDOList); + setProcessingPlanStatus(processingPlan, dispatchDetailDOList,taskReportDOS); if ( !"已完成".equals(processingPlan.getStatus()) || pageReqVO.getFlag()==1){ processTime(processingPlan, dispatchDetailDOList,taskReportDOS); @@ -1929,11 +1932,11 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { List taskReportDOList = queryTaskReports(taskDispatchDetailDOList); setOutsourcedTaskDateFields(assemblyTask, taskDispatchDetailDOList); // 设置状态和进度 - setProcessingPlanStatus(assemblyTask, taskDispatchDetailDOList); + setProcessingPlanStatus(assemblyTask, taskDispatchDetailDOList,taskReportDOList); if ( !"已完成".equals(assemblyTask.getStatus()) || pageReqVO.getFlag()==1){ processTime(assemblyTask, taskDispatchDetailDOList,taskReportDOList); - processInProgressTask(assemblyTask, taskDispatchDetailDOList, taskReportDOList); + processInProgressAssemblyTask(assemblyTask, taskDispatchDetailDOList, taskReportDOList); planSubDetailDOS.add(assemblyTask); } return planSubDetailDOS; @@ -2035,6 +2038,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { planSubDetailDO.setPercentage("0%"); } } + if (pageReqVO.getStatusflag()){ + return planSubDetailDOS.stream().filter(planSubDetailDO -> !"100%".equals(planSubDetailDO.getPercentage())).collect(Collectors.toList()); + } return planSubDetailDOS; } @@ -2122,12 +2128,14 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { processPurchaseOrderNoDetail(dispatchDetailDO, noDetail, now); } else { // 如果没有采购订单号详情,检查是否超期 - if (now.isAfter(dispatchDetailDO.getEndTime())) { + if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) { dispatchDetailDO.setReceivingFlag("1"); } } } - + if (pageReqVO.getStatusflag()){ + return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已收货".equals(taskDispatchDetailDO.getReceiving())).collect(Collectors.toList()); + } return dispatchDetailDOS; } @@ -2151,8 +2159,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { if (!dispatchDetailIds.isEmpty()) { LambdaQueryWrapper taskReportWrapper = new LambdaQueryWrapper<>(); taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds); - taskReportWrapper.eq(TaskReportDO::getHasReport, "1"); - List allTaskReports = taskReportMapper.selectList(taskReportWrapper); taskReportMap = allTaskReports.stream() .collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId)); @@ -2203,6 +2209,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { processReportStatus(dispatchDetailDO, taskReportDOS, now); } + if (pageReqVO.getStatusflag()){ + return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList()); + } return dispatchDetailDOS; } @@ -2261,7 +2270,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { // 模拟 limit 1 的效果:取第一条记录 PgMasterLineDO pgMasterLineDO = pgMasterLines.get(0); - + dispatchDetailDO.setEndTime(pgMasterLineDO.getEntTime()); if ("END".equals(pgMasterLineDO.getActive())) { dispatchDetailDO.setReport("已完成"); @@ -2277,7 +2286,9 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { dispatchDetailDO.setReport("已生成"); } } - + if (pageReqVO.getStatusflag()){ + return dispatchDetailDOS.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList()); + } return dispatchDetailDOS; } @@ -2308,8 +2319,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { if (!dispatchDetailIds.isEmpty()) { LambdaQueryWrapper taskReportWrapper = new LambdaQueryWrapper<>(); taskReportWrapper.in(TaskReportDO::getDispatchDetailId, dispatchDetailIds); - taskReportWrapper.eq(TaskReportDO::getHasReport, "1"); - List allTaskReports = taskReportMapper.selectList(taskReportWrapper); taskReportMap = allTaskReports.stream() .collect(Collectors.groupingBy(TaskReportDO::getDispatchDetailId)); @@ -2327,7 +2336,6 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { if (zjPgMasterLineDO != null && !"1".equals(zjPgMasterLineDO.getPgType())) { LambdaQueryWrapper zjBgMasterLineWrapper = new LambdaQueryWrapper<>(); zjBgMasterLineWrapper.eq(ZjBgMasterLineDO::getZjMxId, zjPgMasterLineDO.getId()); - zjBgMasterLineWrapper.isNotNull(ZjBgMasterLineDO::getEntTime); List zjBgMasterLineDOList = zjBgMasterLineMapper.selectList(zjBgMasterLineWrapper); zjBgMasterLineMap = zjBgMasterLineDOList.stream() @@ -2359,12 +2367,13 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { if (totalReported != null) { BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP); taskDispatchDetailDO.setWorkingHour(workingHour); + taskDispatchDetailDO.setBgWorkTime(taskDispatchDetailDO.getWorkTime()); } BigDecimal amount = calculateTotalAmount(allTaskReports); taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString())); if (CollectionUtils.isNotEmpty(allTaskReports)) { LocalDateTime maxEndTime = findMaxEndTime(allTaskReports); - if (maxEndTime != null && maxEndTime.isAfter(taskDispatchDetailDO.getEndTime())) { + if (maxEndTime != null && maxEndTime.toLocalDate().isAfter(taskDispatchDetailDO.getEndTime().toLocalDate())) { taskDispatchDetailDO.setReportFlag("1"); } } @@ -2376,6 +2385,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { if (totalReported != null) { BigDecimal workingHour = totalReported.divide(DIVISOR, 2, RoundingMode.HALF_UP); taskDispatchDetailDO.setWorkingHour(workingHour); + taskDispatchDetailDO.setBgWorkTime(workingHour); } BigDecimal amount = calculateTotalAmount(allTaskReports); taskDispatchDetailDO.setNumAmount(Integer.parseInt(amount.toString())); @@ -2384,7 +2394,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { taskDispatchDetailDO.setPercentage("0%"); } - if (now.isAfter(taskDispatchDetailDO.getEndTime())) { + if (now.toLocalDate().isAfter(taskDispatchDetailDO.getEndTime().toLocalDate())) { taskDispatchDetailDO.setReportFlag("1"); } } @@ -2408,9 +2418,13 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { .collect(Collectors.groupingBy(TaskDispatchDetailDO::getDetailOwnerId)); // 2. 对每个分组进行合并计算,生成新的合并后的对象 - return groupedMap.entrySet().stream() + List collect = groupedMap.entrySet().stream() .map(entry -> mergeGroup(entry.getKey(), entry.getValue())) .collect(Collectors.toList()); + if (pageReqVO.getStatusflag()){ + return collect.stream().filter(taskDispatchDetailDO -> !"已完成".equals(taskDispatchDetailDO.getReport())).collect(Collectors.toList()); + } + return collect; } private TaskDispatchDetailDO mergeGroup(Long detailOwnerId, List groupList) { @@ -2423,7 +2437,7 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); merged.setWorkingHour(totalWorkTime); - + merged.setBgAmount(groupList.size()); // 2. reportFlag 进行或运算(只要有一个是1就是1) boolean hasReportFlagOne = groupList.stream() .anyMatch(item -> item.getReportFlag() != null && "1".equals(item.getReportFlag())); @@ -2451,14 +2465,12 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { merged.setPercentage("0%"); // 0% } else { BigDecimal totalAmount = groupList.stream() - .map(TaskDispatchDetailDO::getAmount) + .map(TaskDispatchDetailDO::getWorkTime) .filter(Objects::nonNull) - .map(BigDecimal::new) // 将 Integer 转换为 BigDecimal .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal numAmount = groupList.stream() - .map(TaskDispatchDetailDO::getNumAmount) + .map(TaskDispatchDetailDO::getBgWorkTime) .filter(Objects::nonNull) - .map(BigDecimal::new) // 将 Integer 转换为 BigDecimal .reduce(BigDecimal.ZERO, BigDecimal::add); int percentage = calculatePercentage(numAmount, @@ -2502,16 +2514,21 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { List taskReportDOS, LocalDateTime now) { if (Integer.valueOf(2).equals(dispatchDetailDO.getProcedureStatus())) { - dispatchDetailDO.setReport("已报工"); + dispatchDetailDO.setReport("已完成"); if (taskReportDOS != null) { LocalDateTime maxEndTime = findMaxEndTime(taskReportDOS); - if (maxEndTime != null && maxEndTime.isAfter(dispatchDetailDO.getEndTime())) { + if (maxEndTime != null && maxEndTime.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) { dispatchDetailDO.setReportFlag("1"); } } } else { - if (now.isAfter(dispatchDetailDO.getEndTime())) { + if (ObjectUtil.isNotEmpty(taskReportDOS)){ + dispatchDetailDO.setReport("已报工"); + }else { + dispatchDetailDO.setReport("未报工"); + } + if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) { dispatchDetailDO.setReportFlag("1"); } } @@ -2549,12 +2566,12 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { dispatchDetailDO.setReceivingTime(arriveTime); // 检查是否超期 - if (arriveTime != null && arriveTime.isAfter(dispatchDetailDO.getEndTime())) { + if (arriveTime != null && arriveTime.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) { dispatchDetailDO.setReceivingFlag("1"); } } else { // 未收货或状态不是3,检查是否超期 - if (now.isAfter(dispatchDetailDO.getEndTime())) { + if (now.toLocalDate().isAfter(dispatchDetailDO.getEndTime().toLocalDate())) { dispatchDetailDO.setReceivingFlag("1"); } } @@ -2610,7 +2627,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ .atZone(ZoneId.systemDefault()) .toLocalDateTime(); - if (endLocalDateTime.isAfter(planSubDetailDO.getTwoDimDate())) { + if (endLocalDateTime.toLocalDate().isAfter(planSubDetailDO.getTwoDimDate().toLocalDate())) { planSubDetailDO.setStatus("已延期"); planSubDetailDO.setStatusFlag("1"); } @@ -2627,7 +2644,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ new BigDecimal(planSubDetailDO.getDesignNum())); planSubDetailDO.setPercentage(calculatePercentage + "%"); - if (LocalDateTime.now().isAfter(planSubDetailDO.getTwoDimDate())) { + if (LocalDateTime.now().toLocalDate().isAfter(planSubDetailDO.getTwoDimDate().toLocalDate())) { planSubDetailDO.setStatus("已延期"); planSubDetailDO.setStatusFlag("1"); } @@ -2664,12 +2681,12 @@ if (ObjectUtil.isNotEmpty(progressList)){ .orElse(null); // 如果到货时间晚于要求时间,标记为延迟 - if (maxRequireTime != null && maxRequireTime.isAfter(maxArriveTime)) { + if (maxRequireTime != null && maxRequireTime.toLocalDate().isAfter(maxArriveTime.toLocalDate())) { outsourcedTask.setStatusFlag("1"); } } else { // 当前时间晚于最大要求时间,标记为延迟 - if (LocalDateTime.now().isAfter(maxArriveTime)) { + if (LocalDateTime.now().toLocalDate().isAfter(maxArriveTime.toLocalDate())) { outsourcedTask.setStatusFlag("1"); } } @@ -2736,7 +2753,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ .eq(PgMasterLineDO::getActive, "END") ); } - private void setProcessingPlanStatus(PlanSubDetailDO processingPlan, List dispatchDetailDOList) { + private void setProcessingPlanStatus(PlanSubDetailDO processingPlan, List dispatchDetailDOList,List taskReportDOS) { if (CollectionUtils.isEmpty(dispatchDetailDOList)) { return; } @@ -2746,7 +2763,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ if (allCompleted) { processingPlan.setStatus("已完成"); } else { - if (hasThree(dispatchDetailDOList)) { + if (ObjectUtil.isNotEmpty(taskReportDOS)) { processingPlan.setStatus("已开始"); processingPlan.setStatusFlag("0"); } else { @@ -2762,6 +2779,51 @@ if (ObjectUtil.isNotEmpty(progressList)){ .filter(Objects::nonNull) .anyMatch(detail -> detail.getProcedureStatus() == 2); } + /** + * 处理进行中的任务状态 + */ + private void processInProgressAssemblyTask(PlanSubDetailDO processingPlan, + List dispatchDetailDOS, + List taskReportDOS) { + + if (CollectionUtils.isEmpty(taskReportDOS)) { + processingPlan.setProductionSchedule("0"); + return; + } + if (CollectionUtils.isEmpty(dispatchDetailDOS)){ + processingPlan.setProductionSchedule("0"); + return; + } + List collect = dispatchDetailDOS.stream().filter(detailDO -> detailDO.getProcedureStatus() == 2).collect(Collectors.toList()); + //已报工完的工时 + if (ObjectUtil.isNotEmpty(collect)){ + BigDecimal workTime = calculateDispatchTime(collect); + Set dispatchDetailIdSet = collect.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getId) + .collect(Collectors.toSet()); + // 过滤 taskReportDOS + List filteredReports = taskReportDOS.stream() + .filter(report -> !dispatchDetailIdSet.contains(report.getDispatchDetailId())) + .collect(Collectors.toList()); + BigDecimal bigDecimal = calculateReportedTime(filteredReports); + bigDecimal = bigDecimal.add(workTime); + BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS); + Integer percentage = calculatePercentage(bigDecimal, dispatchAmount); + processingPlan.setProductionSchedule(percentage.toString()); + }else{ + BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS); + BigDecimal reportedAmount = calculateReportedTime(taskReportDOS); + Integer percentage = calculatePercentage(reportedAmount, dispatchAmount); + processingPlan.setProductionSchedule(percentage.toString()); + } + +// BigDecimal dispatchAmount = calculateDispatchTime(dispatchDetailDOS); +// BigDecimal reportedAmount = calculateReportedTime(taskReportDOS); +// Integer percentage = calculatePercentage(reportedAmount, dispatchAmount); +// +// processingPlan.setProductionSchedule(percentage.toString()); + } /** * 处理进行中的任务状态 */ @@ -2796,6 +2858,18 @@ if (ObjectUtil.isNotEmpty(progressList)){ .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); } + /** + * 计算已报工工时 + */ + private BigDecimal calculateReportedTime(List taskReportDOS) { + return Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskReportDO::getWorkTime) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } /** * 计算已报工数量 */ @@ -2838,7 +2912,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ return taskReportMapper.selectList( new LambdaQueryWrapper() .in(TaskReportDO::getDispatchDetailId, dispatchDetailIds) - .eq(TaskReportDO::getHasReport, 1) + ); } // 处理时间相关逻辑 @@ -2875,18 +2949,18 @@ if (ObjectUtil.isNotEmpty(progressList)){ .orElse(null); // 如果到货时间晚于要求时间,标记为延迟 - if (maxArriveTime != null && maxArriveTime.isAfter(maxRequireTime)) { + if (maxArriveTime != null && maxArriveTime.toLocalDate().isAfter(maxRequireTime.toLocalDate())) { outsourcedTask.setStatusFlag("1"); } } else { // 当前时间晚于最大要求时间,标记为延迟 - if (LocalDateTime.now().isAfter(maxRequireTime)) { + if (LocalDateTime.now().toLocalDate().isAfter(maxRequireTime.toLocalDate())) { outsourcedTask.setStatusFlag("1"); } } } - private void setOutsourcedTaskStatus(PlanSubDetailDO outsourcedTask, List orderNoDetailDOS,List dispatchDetailDOS) { - if (CollectionUtils.isEmpty(orderNoDetailDOS)||CollectionUtils.isEmpty(dispatchDetailDOS)) { + private void setOutsourcedTaskStatus(PlanSubDetailDO outsourcedTask, List orderNoDetailDOS,List dispatchDetailDOS,List purchaseOrderMakeDetailDOS) { + if (CollectionUtils.isEmpty(dispatchDetailDOS)) { return; } // 判断所有采购订单是否都已收货 @@ -2894,15 +2968,30 @@ if (ObjectUtil.isNotEmpty(progressList)){ if (allCompleted) { outsourcedTask.setStatus("已完成"); } else { - if (hasStatusThree(orderNoDetailDOS)) { - outsourcedTask.setStatus("已开始"); - outsourcedTask.setStatusFlag("0"); - } else { + if (ObjectUtil.isNotEmpty(dispatchDetailDOS)){ + if (ObjectUtil.isNotEmpty(purchaseOrderMakeDetailDOS)) { + outsourcedTask.setStatus("已开始"); + outsourcedTask.setStatusFlag("0"); + } else { + outsourcedTask.setStatus("未开始"); + } + }else{ outsourcedTask.setStatus("未开始"); } + } } // 计算派工数量 + private BigDecimal calculateDispatchTime(List detailDOS) { + return Optional.ofNullable(detailDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getWorkTime) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + // 计算派工数量 private BigDecimal calculateDispatchAmount(List detailDOS) { return Optional.ofNullable(detailDOS) .orElse(Collections.emptyList()) @@ -2941,6 +3030,14 @@ if (ObjectUtil.isNotEmpty(progressList)){ .filter(Objects::nonNull) .allMatch(item -> item.getReceivingStatus() == 3)&&purchaseOrderNoDetailDOS.size()==dispatchDetailDOS.size(); } + // 查询采购订单送审详情 + private List queryPurchaseOrderMakeDetails(Long projectSubId) { + return purchaseOrderMakeDetailMapper.selectList( + new LambdaQueryWrapper() + .eq(PurchaseOrderMakeDetailDO::getProjectPlanSubId, projectSubId) + .isNotNull(PurchaseOrderMakeDetailDO::getBoomDetailId) + ); + } private List queryPurchaseOrderDetails(Long projectSubId) { return purchaseOrderNoDetailMapper.selectList( @@ -2992,7 +3089,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ } // 3. 提取状态判断逻辑 - private void setTaskStatus(PlanSubDetailDO designTask, List planSubDetail) { + private void setTaskStatus(PlanSubDetailDO designTask, List planSubDetail,Long projectSubId) { if (CollectionUtils.isEmpty(planSubDetail)) { return; } @@ -3005,17 +3102,33 @@ if (ObjectUtil.isNotEmpty(progressList)){ designTask.setStatus("已完成"); designTask.setProductionSchedule("100"); } else { - boolean hasStarted = planSubDetail.stream() - .filter(Objects::nonNull) - .anyMatch(item -> item.getIsOverProcess() == 1); +// boolean hasStarted = planSubDetail.stream() +// .filter(Objects::nonNull) +// .anyMatch(item -> item.getIsOverProcess() == 1); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessDesignDO::getProjectSubId, projectSubId); + List processDesigns = processDesignMapper.selectList(queryWrapper); + List processDesignIds = processDesigns.stream() + .map(ProcessDesignDO::getId) + .collect(Collectors.toList()); - designTask.setStatus(hasStarted ? "已开始" : "未开始"); - if (hasStarted) { - designTask.setStatusFlag("0"); - } + // 获取工艺设计进度列表 + List progressList = getProcessDesignProgressList(processDesignIds); + designTask.setStatus(ObjectUtil.isNotEmpty(progressList) ? "已开始" : "未开始"); } } + /** + * 获取工艺设计进度列表 + */ + private List getProcessDesignProgressList(List processDesignIds) { + if (ObjectUtil.isEmpty(processDesignIds)) { + return Collections.emptyList(); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ProcessDesignProgressDO::getProcessDesignId, processDesignIds); + return processDesignProgressMapper.selectList(queryWrapper); + } // 4. 提取进度计算逻辑 private void calculateAndSetProgress(PlanSubDetailDO designTask, Long projectSubId) { if (projectSubId == null) return; @@ -3031,7 +3144,12 @@ if (ObjectUtil.isNotEmpty(progressList)){ designTask.setProductionSchedule("0"); return; } + List collect = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1).collect(Collectors.toList()); + List collect1 = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() == 1).collect(Collectors.toList()); List ids = processDesigns.stream() + .filter(processDesignDO -> processDesignDO.getIsOverProcess() != 1) .map(ProcessDesignDO::getId) .collect(Collectors.toList()); @@ -3048,7 +3166,28 @@ if (ObjectUtil.isNotEmpty(progressList)){ wrapper1.last("limit 1"); PlanSubDO subDO = planSubMapper.selectOne(wrapper1); - BigDecimal currentTime = calculateCurrentTime(subDO).multiply(new BigDecimal("8")); + BigDecimal currentTime = calculateCurrentTime(subDO,collect); + for (ProcessDesignDO processDesignDO : collect1) { + if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getThreeDimNum().toString()).multiply(new BigDecimal("8"))); + } + } + if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getBlankNum().toString()).multiply(new BigDecimal("8"))); + } + } + if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); + totalWorkTime = totalWorkTime.add(new BigDecimal(subDO.getTwoDimNum().toString()).multiply(new BigDecimal("8"))); + } + } + } + currentTime = currentTime.multiply(new BigDecimal("8")); Integer percentage = calculatePercentage(totalWorkTime, currentTime); designTask.setProductionSchedule(percentage.toString()); @@ -3093,7 +3232,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ designTask.setStatusFlag(isOverdue ? "1" : ""); } } - } else if (maxTime != null && now.isAfter(maxTime)) { + } else if (maxTime != null && now.toLocalDate().isAfter(maxTime.toLocalDate())) { designTask.setStatusFlag("1"); } } @@ -3119,26 +3258,31 @@ if (ObjectUtil.isNotEmpty(progressList)){ .reduce(BigDecimal.ZERO, BigDecimal::add); } /** - * 计算总工时(将三个数值相加) + * 计算当前工时(将三个数值相加) */ - private BigDecimal calculateCurrentTime(PlanSubDO subDO) { + private BigDecimal calculateCurrentTime(PlanSubDO subDO,List collect) { BigDecimal currentTime = BigDecimal.ZERO; - - if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + for (ProcessDesignDO processDesignDO : collect) { + if ("BLUEPRINT_3D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); + } + } + if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().toString())); + } + } + if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ + if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); + } + } } - - if (ObjectUtil.isNotEmpty(subDO.getThreeDimNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getThreeDimNum().toString())); - } - - if (ObjectUtil.isNotEmpty(subDO.getTwoDimNum())) { - currentTime = currentTime.add(new BigDecimal(subDO.getTwoDimNum().toString())); - } - return currentTime; } + /** * 判断 Date 是否在 LocalDateTime 之后 */ @@ -3151,7 +3295,7 @@ if (ObjectUtil.isNotEmpty(progressList)){ .atZone(ZoneId.systemDefault()) .toLocalDateTime(); - return dateAsLocalDateTime.isAfter(localDateTime); + return dateAsLocalDateTime.toLocalDate().isAfter(localDateTime.toLocalDate()); } /** diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java index bdf56327..53ef8748 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java @@ -112,4 +112,6 @@ public interface TaskDispatchService { PageResult taskPage( TaskPlanJDBaoBiaoPageReqVO pageReqVO); PageResult taskBbPage(TaskPlanJDBaoBiaoPageReqVO pageReqVO); + + PageResult getTaskDispatchPageDetailXl(TaskDispatchDetailPageReqVO pageReqVO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java index d04c2343..beb527eb 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java @@ -264,13 +264,19 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { for (TaskDispatchDetailDO dispatchDetailDO : list) { TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId()); if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){ + ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId()); if ("false".equals(dispatchDetailDO.getIsOutsourcing())){ if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())){ - ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId()); if (ObjectUtil.isNotEmpty(procedureDO)){ throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做零件采购,不允许去掉外协,请确认!")); } } + }else{ +// if (taskDispatchDetailDO.getInReportProcess()!=0){ +// if (ObjectUtil.isNotEmpty(procedureDO)) { +// throw exception(new ErrorCode(400, "该工序" + procedureDO.getName() + "已做下料,不允许修改外协!")); +// } +// } } // if (isDetailChanged(taskDispatchDetailDO, dispatchDetailDO)) { // if (taskDispatchDetailDO.getPlanStatus()==1){ @@ -688,6 +694,9 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { } } } +// if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&taskDispatchDetailDO.getReportProcess()!=0){ +// throw exception(new ErrorCode(400,"该工序已做下料报工,不允许删除")); +// } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId()); TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper); @@ -1054,7 +1063,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { // bdgzsomthingMapper.updateById(bdgzsomthingDO); // } // } - if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && taskDispatchDetailDO.getTestYn().equals("N")&&taskDispatchDetailDO.getCheckYn().equals("0")){ + if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && taskDispatchDetailDO.getTestYn().equals("N")&&taskDispatchDetailDO.getCheckYn()==0){ pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO); } // if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && isBomDetailProductionOver){ @@ -1571,6 +1580,22 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { return taskDispatchDetailMapper.taskBbPage(pageReqVO); } + @Override + public PageResult getTaskDispatchPageDetailXl(TaskDispatchDetailPageReqVO pageReqVO) { + List fpUserDetailDOS = fpUserDetailMapper.selectList(new LambdaQueryWrapper().eq(FpUserDetailDO::getBusyId, pageReqVO.getOwner())); +// Set postIds = new HashSet<>(); +// Set procedureIds = new HashSet<>(); + Map> postIds = new HashMap<>(); + for (FpUserDetailDO fpUserDetailDO : fpUserDetailDOS) { + if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())&&ObjectUtil.isNotEmpty(fpUserDetailDO.getProcCd())){ + postIds.put(fpUserDetailDO.getPostId(), fpUserDetailDO.getProcCd()); + }else if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())){ + postIds.put(fpUserDetailDO.getPostId(), null); + } + } + return taskDispatchDetailMapper.selectPageXl(pageReqVO, postIds); + } + private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List list) { list.forEach(o -> o.setDispatchId(dispatchId)); @@ -1685,15 +1710,23 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { list = list.stream() .peek(item -> { item.setDispatchId(dispatchId); + ProcedureDO procedureDO = procedureMapper.selectById(item.getProcedureId()); if ("true".equals(item.getIsOutsourcing())) { // 外协处理逻辑 item.setIsOutsourcing("Y"); item.setIsReport(0); - }else { +// if (ObjectUtil.isNotEmpty(procedureDO)) { +// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { +// item.setIsInProcess("N"); +// } +// } + }else { item.setIsOutsourcing("N"); - ProcedureDO procedureDO = procedureMapper.selectById(item.getProcedureId()); if (ObjectUtil.isNotEmpty(procedureDO)){ item.setIsReport(procedureDO.getIsReport()); +// if ("下料1".equals(procedureDO.getName())||"下料2".equals(procedureDO.getName())) { +// item.setIsInProcess("Y"); +// } } } if ("true".equals(item.getIsFoam())) { diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/shipmentsPrint.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/shipmentsPrint.vue index eca453c2..aa270e4f 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/shipmentsPrint.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/shipmentsPrint.vue @@ -18,78 +18,78 @@ 发货编号 - + {{ formData.code }} - 合同号 + 合同号 {{ formData.contractNo }} - 性质: - {{ formData.property }} + 性质: + {{ formData.property }} 发货日期 - + {{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }} - 联系人 - {{ formData.receivePersonName }} - 电话 - {{ formData.receivePersonMobile }} + 联系人 + {{ formData.receivePersonName }} + 电话 + {{ formData.receivePersonMobile }} 收货单位 - {{ formData.customerName }} + {{ formData.customerName }} 收货地址 - {{ formData.receiveAddress }} + {{ formData.receiveAddress }} 项目名称 - {{ formData.projectName }} - 重量(T) - {{ formData.transportWeight }} - 位置(米) - {{ formData.transportSize }} + {{ formData.projectName }} + 重量(T) + {{ formData.transportWeight }} + 位置(米) + {{ formData.transportSize }} - 内容清单 - 单位 - 数量 - 重量(T) - 尺寸(米) - 备注 + 内容清单 + 单位 + 数量 + 重量(T) + 尺寸(米) + 备注 - {{ item.name }} - 备件:{{ item.name }} - 刀具:{{ item.name }} - {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }} - {{ item.amount }} - {{ item.weight }} - {{ item.size }} - {{ item.remark }} + {{ item.name }} + 备件:{{ item.name }} + 刀具:{{ item.name }} + {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }} + {{ item.amount }} + {{ item.weight }} + {{ item.size }} + {{ item.remark }} - 详见清单附件 + 详见清单附件 + + + + - - - - -   +   + + + + - - - - - {{formData.remark?formData.remark:' '}} + {{formData.remark?formData.remark:' '}} @@ -99,33 +99,33 @@ 发货单位 - + {{ formData.deliverCompany }} - 联系人 - {{ formData.deliverPersonName }} - 电话 - {{ formData.deliverPersonMobile }} + 联系人 + {{ formData.deliverPersonName }} + 电话 + {{ formData.deliverPersonMobile }} 司机姓名 - + {{ formData.transportDriverName }} - - 车牌号 - {{ formData.transportBusNumber }} - - 电话 - {{ formData.transportDriverMobile }} + + 车牌号 + {{ formData.transportBusNumber }} + + 电话 + {{ formData.transportDriverMobile }} - + - +
内部货物门点人签名:
- +
收货人签名:
@@ -151,77 +151,77 @@ 发货编号 - + {{ formData.code }} - 合同号 + 合同号 {{ formData.contractNo }} - 性质: - {{ formData.property }} + 性质: + {{ formData.property }} 发货日期 - + {{ formatDate(new Date(formData.deliverDate), 'YYYY-MM-DD') }} - 联系人 - {{ formData.receivePersonName }} - 电话 - {{ formData.receivePersonMobile }} + 联系人 + {{ formData.receivePersonName }} + 电话 + {{ formData.receivePersonMobile }} 收货单位 - {{ formData.customerName }} + {{ formData.customerName }} 收货地址 - {{ formData.receiveAddress }} + {{ formData.receiveAddress }} - 项目名称 - {{ formData.projectName }} - 重量(T) - {{ formData.transportWeight }} - 位置(米) - {{ formData.transportSize }} + 项目名称 收货单位 + {{ formData.projectName }} + 重量(T) + {{ formData.transportWeight }} + 位置(米) + {{ formData.transportSize }} - 内容清单 - 单位 - 数量 - 重量(T) - 尺寸(米) - 备注 + 内容清单 + 单位 + 数量 + 重量(T) + 尺寸(米) + 备注 - {{ item.name }} - {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }} - {{ item.amount }} - {{ item.weight }} - {{ item.size }} - {{ item.remark }} + {{ item.name }} + {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, item.unit) }} + {{ item.amount }} + {{ item.weight }} + {{ item.size }} + {{ item.remark }} - 详见清单附件 + 详见清单附件 + + + + - - - - -   +   + + + + - - - - - {{formData.remark?formData.remark:' '}} + {{formData.remark?formData.remark:' '}} @@ -232,33 +232,33 @@ 发货单位 - + {{ formData.deliverCompany }} - 联系人 - {{ formData.deliverPersonName }} - 电话 - {{ formData.deliverPersonMobile }} + 联系人 + {{ formData.deliverPersonName }} + 电话 + {{ formData.deliverPersonMobile }} 司机姓名 - + {{ formData.transportDriverName }} - - 车牌号 - {{ formData.transportBusNumber }} - - 电话 - {{ formData.transportDriverMobile }} + + 车牌号 + {{ formData.transportBusNumber }} + + 电话 + {{ formData.transportDriverMobile }} - + - +
内部货物门点人签名:
- +
收货人签名:
@@ -504,7 +504,6 @@ const onPrint = () => { } } table { - table-layout: fixed; width: 100%; /* 让表格宽度100%占满其父元素宽度 */ height: auto; /* 高度根据内容自适应 */ font-size: 14px; @@ -591,16 +590,7 @@ const subTotalAmount = ref(0) const num = ref(0) const splitThreshold = 6 const logoDataUrl = ref('') // 存储Logo的Base64编码数据URL -const fontSizeStyle = computed(() => { - const projectName = formData.value?.projectName ?? '' - return { - textAlign: 'left', - width: '100%', - fontSize: projectName.length > 20 - ? '13px !important' - : '14px !important' - } -}) + /** 打开弹窗 */ const open = async (id: number) => { dialogVisible.value = true @@ -692,7 +682,6 @@ onMounted(() => {}) } } table { -table-layout: fixed; width: 100%; /* 让表格宽度100%占满其父元素宽度 */ height: auto; /* 高度根据内容自适应 */ font-size: 14px; diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue index f749bf1e..8a00f215 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/detail.vue @@ -13,7 +13,7 @@ - + @@ -34,6 +34,10 @@ @@ -59,6 +63,7 @@ + @@ -73,6 +78,7 @@ + @@ -97,7 +103,7 @@ - + @@ -108,7 +114,9 @@ + + @@ -141,24 +149,28 @@ const list3 = ref([]) // 加工数据 const list4 = ref([]) // 过程检数据 const list5 = ref([]) // 装配任务数据 const type = ref('') +const type1 = ref('') const formData = reactive({ id:undefined, projectSubId:undefined, - flag:true + flag:true, + statusflag:true }) //初始化方法 onMounted(async () => { console.log(query) formData.projectSubId = query.projectSubId - getList() + await getList() const queryParams = reactive({ - projectSubId:formData.projectSubId + projectSubId:formData.projectSubId, + statusflag:formData.statusflag }) if (list.value){ - const hasDesignTask = list.value.some(item => item.subType === "设计任务"); + const hasDesignTask = list.value.some(item => item.subType == "设计任务"); if (hasDesignTask){ list1.value= await PlansubdetailApi.getList1(queryParams) type.value='sheji' + type1.value='sheji' } } @@ -166,43 +178,90 @@ const formData = reactive({ const change = (val) => { getList() } -/** 处理某一行的点击 */ -const rowClick = async (row) => { - console.log(row); +const change1 =async (val) => { const queryParams = reactive({ projectSubId:formData.projectSubId, + statusflag:formData.statusflag + }) + type.value=type1.value + if (type.value=='sheji'){ + list1.value= await PlansubdetailApi.getList1(queryParams) + if (list1.value.length<=0){ + type1.value=type.value + type.value='' + } + + }else if (type.value=='waixei'){ + list2.value= await PlansubdetailApi.getList2(queryParams) + if (list2.value.length<=0){ + type1.value=type.value + type.value='' + } + }else if (type.value=='jiagong'){ + list3.value= await PlansubdetailApi.getList3(queryParams) + if (list3.value.length<=0){ + type1.value=type.value + type.value='' + } + }else if (type.value=='guochengjian'){ + list4.value= await PlansubdetailApi.getList4(queryParams) + if (list4.value.length<=0){ + type1.value=type.value + type.value='' + } + }else if (type.value=='zhuangpei'){ + list5.value= await PlansubdetailApi.getList5(queryParams) + console.log(list5.value.length) + if (list5.value.length<=0){ + type1.value=type.value + type.value='' + } + } +} +/** 处理某一行的点击 */ +const rowClick = async (row) => { + console.log(type1.value); + const queryParams = reactive({ + projectSubId:formData.projectSubId, + statusflag:formData.statusflag }) type.value='' + if (row.subType=='设计任务'){ list1.value= await PlansubdetailApi.getList1(queryParams) if (list1.value.length>0){ type.value='sheji' } + type1.value='sheji' }else if (row.subType=='外协任务'){ list2.value= await PlansubdetailApi.getList2(queryParams) if (list2.value.length>0){ type.value='waixei' } + type1.value='waixei' }else if (row.subType=='加工任务'){ list3.value= await PlansubdetailApi.getList3(queryParams) if (list3.value.length>0){ type.value='jiagong' } + type1.value='jiagong' }else if (row.subType=='过程检任务'){ list4.value= await PlansubdetailApi.getList4(queryParams) if (list4.value.length>0){ type.value='guochengjian' } + type1.value='guochengjian' }else{ list5.value= await PlansubdetailApi.getList5(queryParams) if (list5.value.length>0){ type.value='zhuangpei' } + type1.value='zhuangpei' } } const cellClassName = ({ row,column }) => { if (column.label === '任务状态' && row.statusFlag) { - return row.statusFlag === '1' ? 'warning-row1' : row.statusFlag === '0' ?'warning-row2':""; + return row.statusFlag === '1' ? 'warning-row1' :""; } } @@ -228,7 +287,7 @@ const cellClassName4 = ({ row,column }) => { } const cellClassName5 = ({ row,column }) => { if (column.label === '工单状态' && row.statusFlag) { - return row.statusFlag === '1' ? 'warning-row1' : row.statusFlag === '0' ?'warning-row2':""; + return row.statusFlag === '1' ? 'warning-row1' :""; } } @@ -249,22 +308,32 @@ const getList = async () => { - diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/index.vue index 364a395a..bcbb07e0 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/partprocess/index.vue @@ -42,19 +42,19 @@ - + - + @@ -63,19 +63,19 @@ - + - @@ -162,7 +162,7 @@ const formData = ref({ const queryFormRef = ref() // 搜索的表单 /** 查询列表 */ const getList = async () => { - if ((queryParams.projectCode==null||queryParams.projectCode=='')&&(queryParams.projectSubName==null||queryParams.projectSubName=='')&&(queryParams.projectName==null ||queryParams.projectName=='')) { + if ((queryParams.projectCode==null||queryParams.projectCode=='')&&(queryParams.projectSubName==null||queryParams.projectSubName=='')&&(queryParams.projectName==null ||queryParams.projectName=='')&&(queryParams.customerName==null ||queryParams.customerName=='')) { message.error("必须输入查询条件查询") return } @@ -179,19 +179,19 @@ const getList = async () => { const cellClassName = ({ row,column }) => { if (column.label === '设计任务' && row.designTaskFlag) { - return row.designTaskFlag === '1' ? 'warning-row1' :row.designTaskFlag === '0' ? 'warning-row2':""; + return row.designTaskFlag === '1' ? 'warning-row1' :""; } if (column.label === '外协任务' && row.outsourcingTasksFlag) { - return row.outsourcingTasksFlag === '1' ? 'warning-row1' :row.outsourcingTasksFlag === '0' ? 'warning-row2':""; + return row.outsourcingTasksFlag === '1' ? 'warning-row1' :""; } if (column.label === '加工任务' && row.processingTaskFlag) { - return row.processingTaskFlag === '1' ? 'warning-row1' : row.processingTaskFlag === '0' ?'warning-row2':""; + return row.processingTaskFlag === '1' ? 'warning-row1' :""; } if (column.label === '过程检任务' && row.processInspectionFlag) { - return row.processInspectionFlag === '1' ? 'warning-row1' : row.processInspectionFlag === '0' ? 'warning-row2':""; + return row.processInspectionFlag === '1' ? 'warning-row1' :""; } if (column.label === '装配任务' && row.assemblyTaskFlag) { - return row.assemblyTaskFlag === '1' ? 'warning-row1' : row.assemblyTaskFlag === '0' ?'warning-row2':""; + return row.assemblyTaskFlag === '1' ? 'warning-row1' :""; } // return ''; } @@ -242,13 +242,13 @@ window.addEventListener('beforeunload', () => { diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/index.vue index aa32bc77..607b724b 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/index.vue @@ -164,7 +164,7 @@ ref="multipleTableRef" @@ -478,7 +479,9 @@ v-model="row.deviceModel" \ No newline at end of file + diff --git a/mes-ui/mini-app/src/pages/index/components/footRight.vue b/mes-ui/mini-app/src/pages/index/components/footRight.vue index 70709b13..4b6e15ab 100644 --- a/mes-ui/mini-app/src/pages/index/components/footRight.vue +++ b/mes-ui/mini-app/src/pages/index/components/footRight.vue @@ -2,7 +2,7 @@ // import type { stringify } from 'querystring'; diff --git a/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue b/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue new file mode 100644 index 00000000..11ee7b17 --- /dev/null +++ b/mes-ui/mini-app/src/pages/productionInReport/productionInReport-detail.vue @@ -0,0 +1,710 @@ + + + diff --git a/mes-ui/mini-app/src/pages/productionInReport/productionInReport.vue b/mes-ui/mini-app/src/pages/productionInReport/productionInReport.vue new file mode 100644 index 00000000..05cdadf0 --- /dev/null +++ b/mes-ui/mini-app/src/pages/productionInReport/productionInReport.vue @@ -0,0 +1,151 @@ + + + + +