diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsExportVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsExportVO.java index 260735e9..dd969d08 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsExportVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsExportVO.java @@ -2,6 +2,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.orderys.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat; import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert; import com.chanko.yunxi.mes.framework.excel.core.convert.TimestampToDateConvert; @@ -38,12 +39,18 @@ public class OrderYsExportVO { @Schema(description = "已收金额") @ExcelProperty("已收金额") private BigDecimal cgYishou; + @Schema(description = "剩余金额") + @ExcelProperty("剩余金额") + private BigDecimal remainingYishou; @Schema(description = "已收款比例") @ExcelProperty("已收款比例") private String ysRatio; @Schema(description = "已开票金额") @ExcelProperty("已开票金额") private BigDecimal amount; + @Schema(description = "剩余开票金额") + @ExcelProperty("剩余开票金额") + private BigDecimal remainingAmount; @Schema(description = "已开票比例") @ExcelProperty("已开票比例") private String ykRatio; @@ -58,4 +65,6 @@ public class OrderYsExportVO { @ExcelProperty("备注") private String rem; + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java index d025a6f0..f44c8c5a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/orderys/vo/OrderYsRespVO.java @@ -73,4 +73,7 @@ public class OrderYsRespVO { private String projectCode; private LocalDateTime projectStartTime; private String contractNo; + private BigDecimal remainingYishou; + private BigDecimal remainingAmount; + } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/PlanController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/PlanController.java index f13c0ce0..b31c7fc1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/PlanController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/PlanController.java @@ -112,4 +112,11 @@ public class PlanController { return planService.verification(id,type); } + @GetMapping("/getPartProcess") + @Operation(summary = "获得零件进程分页") + @PreAuthorize("@ss.hasPermission('heli:plan:query')") + public CommonResult getPartProcess(@Valid PlanPageReqVO pageReqVO) { + PlanDO pageResult = planService.getPartProcess(pageReqVO); + return success(pageResult); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanPageReqVO.java index 033cc1ad..9d06dbe3 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanPageReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanPageReqVO.java @@ -98,7 +98,8 @@ public class PlanPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] changeEndTime; - + @Schema(description = "子项目名称") + private String projectSubName; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanRespVO.java index cde20f81..c1a61951 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plan/vo/PlanRespVO.java @@ -1,6 +1,8 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo; import com.baomidou.mybatisplus.annotation.TableField; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -154,4 +156,6 @@ public class PlanRespVO { private LocalDateTime castEndDate; @Schema(description = "是否需要铸件图:1表示需要,0表示不需要") private Integer hasCast; + @Schema(description = "计划子项目明细") + private List list; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java index 011ad361..0e34b267 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/PlanSubDetailController.java @@ -152,4 +152,11 @@ public class PlanSubDetailController { public CommonResult insertWork(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { return planSubDetailService.insertWork(updateReqVO); } + + @GetMapping("/getList") + @Operation(summary = "获得零件进程管理详情子项目信息") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") + public CommonResult> getList(@Valid PlanSubDetailPageReqVO pageReqVO) { + return success( planSubDetailService.getList(pageReqVO)); + } } 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 5c7ebc22..a40ac6ab 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 @@ -78,5 +78,4 @@ public class PlanSubDetailPageReqVO extends PageParam { private String planNo; - } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java index c7ac15a3..34040ae5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/orderys/OrderYsDO.java @@ -95,6 +95,10 @@ public class OrderYsDO extends BaseDO { private String ysRatio; @TableField(exist = false) private String ykRatio; + @TableField(exist = false) + private BigDecimal remainingYishou; + @TableField(exist = false) + private BigDecimal remainingAmount; } \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java index 54d585fa..f7581d59 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plan/PlanDO.java @@ -1,5 +1,8 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.plan; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -228,6 +231,14 @@ public class PlanDO extends BaseDO { private LocalDateTime orderTime; private String code; - - + @TableField(exist = false) + private PageResult list; + @TableField(exist = false) + private String craftOwnerName; + @TableField(exist = false) + private String projectProgress; + @TableField(exist = false) + private String processProgress; + @TableField(exist = false) + private String processFlag; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansub/PlanSubDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansub/PlanSubDO.java index d8161d20..2af7dd2f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansub/PlanSubDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansub/PlanSubDO.java @@ -223,4 +223,45 @@ public class PlanSubDO extends BaseDO { private String projectCode; @TableField(exist = false) private String planNo; + @TableField(exist = false) + private String projectName; + @TableField(exist = false) + private LocalDateTime projectEndTime; + @TableField(exist = false) + private LocalDateTime craftEndDate; + @TableField(exist = false) + private String craftOwnerName; + @TableField(exist = false) + private Integer deliveryStatus; + //设计任务 + @TableField(exist = false) + private String designTask; + //设计任务标识 + @TableField(exist = false) + private String designTaskFlag; + @TableField(exist = false) + //外协任务 + private String outsourcingTasks; + @TableField(exist = false) + //外协任务标识 + private String outsourcingTasksFlag; + //加工任务 + @TableField(exist = false) + private String processingTask; + //加工任务标识 + @TableField(exist = false) + private String processingTaskFlag; + //过程检 + @TableField(exist = false) + private String processInspection; + //过程检标识 + @TableField(exist = false) + private String processInspectionFlag; + //装配任务 + @TableField(exist = false) + private String assemblyTask; + //装配任务标识 + @TableField(exist = false) + private String assemblyTaskFlag; + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java index bc7cb3a9..ef5a69d2 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/plansubdetail/PlanSubDetailDO.java @@ -106,4 +106,15 @@ public class PlanSubDetailDO extends BaseDO { private String planNo; @TableField(exist = false) private String projectNameSim; + //工单状态 + @TableField(exist = false) + private String status; + //工单标识 + @TableField(exist = false) + private String statusFlag; + //生产进度 + @TableField(exist = false) + private String productionSchedule; + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java index c9abe84e..4604d181 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java @@ -38,6 +38,8 @@ public interface OrderYsMapper extends BaseMapperX { .select("p.delivery_status as deliveryStatus") .select("p.id as projectId","p.code as projectCode") .select("p.project_start_time as projectStartTime","p.contract_no as contractNo") + .select("t.cg_ys-t.cg_yishou as remainingYishou") + .select("t.cg_ys-sum(i.amount) as remainingAmount") .leftJoin( "finance_invoice i ON i.order_code = t.code AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'") .leftJoin(ProjectOrderDO.class,"p", ProjectOrderDO::getCode, OrderYsDO::getCode) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plan/PlanMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plan/PlanMapper.java index 05318cf8..fb9420da 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plan/PlanMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plan/PlanMapper.java @@ -134,4 +134,6 @@ List selectfhtj(Long txrid); List selectfhtj1(); @Delete("delete from project_plan where project_id=#{id}") void deleteOrderId(@Param("id") Long id); + + } \ No newline at end of file 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 f6a0f24d..bdadd9aa 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 @@ -7,6 +7,7 @@ import cn.smallbun.screw.core.util.StringUtils; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO; @@ -17,6 +18,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; +import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; @@ -296,4 +298,29 @@ public interface PlanSubMapper extends BaseMapperX { } @Delete("delete from project_plan_sub where project_id=#{id}") void deleteOrderId(@Param("id") Long id); + + default PageResult getPartProcess(PlanPageReqVO pageReqVO){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(PlanSubDO.class) + .select("p.project_name as projectName","s.name as projectSubName") + .select("p.project_end_time as projectEndTime","d.craft_end_date") + .select("u.nickname as craftOwnerName","p.delivery_status as deliveryStatus") + .leftJoin(ProjectOrderDO.class, "p", ProjectOrderDO::getId, PlanSubDO::getProjectId) + .leftJoin(ProjectOrderSubDO.class, "s", ProjectOrderSubDO::getId, PlanSubDO::getProjectSubId) + .leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId) + .leftJoin(PlanDO.class, "d", PlanDO::getId, PlanSubDO::getProjectPlanId) + .leftJoin(AdminUserDO.class, "u", + wrapper -> wrapper.eq(AdminUserDO::getId, PlanDO::getCraftOwner)) + .disableSubLogicDel(); + query.eq(ProjectOrderDO::getDeleted,0); + query.eq(ProjectOrderSubDO::getDeleted,0); + query.eq(CustomerDO::getDeleted,0); + query.eq(PlanDO::getDeleted,0); + query.eq(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode()); + query.eq(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName()); + query.eq(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName()); + query.eq(ObjectUtil.isNotEmpty(pageReqVO.getCustomerName()), CustomerDO::getName, pageReqVO.getCustomerName()); + 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/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 0f26196e..ba5a06e1 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 @@ -2,7 +2,6 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; @@ -16,7 +15,6 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.ygjx.vo.YgjxPageReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.bgmasterline.BgMasterLineDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipManufactureDO; 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; @@ -32,22 +30,17 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch 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.taskreport.TaskReportDO; -import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; -import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; -import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.*; -import java.time.temporal.ChronoUnit; import java.util.*; /** @@ -906,4 +899,26 @@ public interface TaskDispatchDetailMapper extends BaseMapperX batchInternalLaborCost(@Param("bomDetailIds")List bomDetailIds); List batchProcessInspection(@Param("bomDetailIds")List bomDetailIds); + + default List outSourceTask(Long projectSubId,String type,String checkYn){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDetailDO.class) + .select("a.bom_detail_id as bomDetailId") + .leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId); + query.eq(TaskDispatchDO::getProjectSubId,projectSubId); + query.eq(TaskDispatchDO::getDispatchType,"PRODUCTION"); + query.eq(ObjectUtil.isNotEmpty(checkYn),TaskDispatchDetailDO::getCheckYn,checkYn); + query.eq(TaskDispatchDetailDO::getIsOutsourcing,type); + return selectList(query); + } + + default List assemblyTask(Long projectSubId){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + query.selectAll(TaskDispatchDetailDO.class) + .select("a.bom_detail_id as bomDetailId") + .leftJoin(TaskDispatchDO.class,"a",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId); + query.eq(TaskDispatchDO::getProjectSubId,projectSubId); + query.eq(TaskDispatchDO::getDispatchType,"ASSEMBLE"); + return selectList(query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/partpurchaseorder/PartPurchaseOrderServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/partpurchaseorder/PartPurchaseOrderServiceImpl.java index 1e35592b..d65aed72 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/partpurchaseorder/PartPurchaseOrderServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/partpurchaseorder/PartPurchaseOrderServiceImpl.java @@ -1,5 +1,6 @@ package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -18,6 +19,8 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.Pa import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO; import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailSaveReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; @@ -29,6 +32,8 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.Pur import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; @@ -45,6 +50,7 @@ import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService import com.chanko.yunxi.mes.module.heli.service.supplier.SupplierService; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; +import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; @@ -62,6 +68,7 @@ import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS; @Service @Validated @@ -92,6 +99,10 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{ private ProcessBomDetailMapper processBomDetailMapper; @Autowired private TaskDispatchDetailMapper taskDispatchDetailMapper; + @Autowired + private MaterialMapper materialMapper; + @Autowired + private CompositionMapper compositionMapper; @Override public PageResult getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) { @@ -404,10 +415,141 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{ if (ObjectUtil.isNotEmpty(orderMakeDO)) { if (orderMakeDO.getGoodsType() == 2) { submitNo(list); + }else { + submitNo1(list); } } return true; } + public void submitNo1(List list) { + if (CollUtil.isNotEmpty(list)){ + List updateList =list; + //插入make表 + PurchaseOrderNoDO purchaseOrderNoDO = new PurchaseOrderNoDO(); + SerialNumberDO serialNumberDO = new SerialNumberDO(); + // 月度流水号 + serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date())); + serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1); + + // 入库前缀 + String code = PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()); + purchaseOrderNoDO.setPurchaseNo(code); + serialNumberService.updateSerialNumber(serialNumberDO); + purchaseOrderNoDO.setGoodsType(1); + purchaseOrderNoDO.setPurchaseType(1); + purchaseOrderNoDO.setSupplierId(updateList.get(0).getSupplierId()); + purchaseOrderNoDO.setOrdDate(new Date()); + purchaseOrderNoMapper.insert(purchaseOrderNoDO); + OrderYfSaveReqVO orderYfVO = new OrderYfSaveReqVO(); + orderYfVO.setCgOrderNum(code); + SupplierDO supplierDO = supplierMapper.selectById(updateList.get(0).getSupplierId()); + if (ObjectUtil.isNotEmpty(supplierDO)){ + orderYfVO.setCgGysname(supplierDO.getName()); + } + BigDecimal sum = updateList.stream() + .filter(Objects::nonNull) // 过滤掉空对象 + .map(PurchaseOrderMakeDetailDO::getEstimatedPrice) + .filter(Objects::nonNull) // 过滤掉空值 + .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和 + orderYfVO.setCgYf(sum); + orderYfService.createCg(orderYfVO); + List insertList =new ArrayList<>(); + HashMap insertMap = new HashMap<>(); + HashMap insertMaterialMap = new HashMap<>(); + HashMap compositionDOHashMap = new HashMap<>(); + for (PurchaseOrderMakeDetailDO pmd : updateList) { + + PurchaseOrderNoDetailDO pd = new PurchaseOrderNoDetailDO(); + pd.setMakeDetailId(pmd.getId()); + pd.setPurchaseOrderId(purchaseOrderNoDO.getId()); + pd.setBoomDetailId(pmd.getBoomDetailId()); + if (pd.getMakeDetailId() != null) { + MaterialDO materialDO = insertMaterialMap.get(pmd.getMaterialId()); + + if (materialDO == null) { + materialDO = materialMapper.selectById(pmd.getMaterialId()); + insertMaterialMap.put(pd.getMakeDetailId(), materialDO); + } + if (ObjectUtil.isNotEmpty(materialDO)&& ObjectUtil.isNotEmpty(materialDO.getCompositionId())) { + CompositionDO compositionDO = compositionDOHashMap.get(materialDO.getCompositionId()); + if (compositionDO == null) { + compositionDO = compositionMapper.selectById(materialDO.getCompositionId()); + compositionDOHashMap.put(materialDO.getCompositionId(), compositionDO); + } + pd.setComposition(compositionDO == null ?"":compositionDO.getName()); + } +if (ObjectUtil.isNotEmpty(materialDO)){ + pd.setBoomName(materialDO.getName()); + pd.setMaterialId(materialDO.getId()); + pd.setBoomSpec(materialDO.getSpec()); + pd.setBoomUnit(materialDO.getUnit()); +} + + }else { + throw exception(PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS); + } + + pd.setPurchaseAmount(pmd.getPurchaseAmount()); + pd.setEstimatedPrice(pmd.getEstimatedPrice()); + pd.setArriveTime(pmd.getArriveTime()); + pd.setBoomAmount(pmd.getBoomAmount()); + pd.setRequireTime(pmd.getRequireTime()); + pd.setProjectMaterialPlanId(pmd.getProjectMaterialPlanId()); + pd.setProjectMaterialPlanBoomId(pmd.getProjectMaterialPlanBoomId()); + pd.setProjectPlanSubId(pmd.getProjectPlanSubId()); + pd.setName(pmd.getName()); + pd.setNameSim(pmd.getNameSim()); + PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO(); + if (insertMap.get(pmd.getPurchaseOrderId()) != null) { + purchaseOrderMakeDO = insertMap.get(pmd.getPurchaseOrderId()); + }else{ + purchaseOrderMakeDO = purchaseOrderMakeMapper.selectById(pmd.getPurchaseOrderId()); + insertMap.put(pmd.getPurchaseOrderId(),purchaseOrderMakeDO); + } + if (purchaseOrderMakeDO != null) { + pd.setProjectId(purchaseOrderMakeDO.getProjectId()); + pd.setProjectPlanId(purchaseOrderMakeDO.getProjectPlanId()); + pd.setCustomerId(purchaseOrderMakeDO.getCustomerId()); + pd.setBrief(purchaseOrderMakeDO.getBrief()); + pd.setProjectName(purchaseOrderMakeDO.getProjectName()); + pd.setProjectNameSim(purchaseOrderMakeDO.getProjectNameSim()); + } + pd.setPurchaseRemAmount(pmd.getPurchaseAmount()); + pd.setProjectSubCode(pmd.getProjectSubCode()); + insertList.add(pd); + } + if (CollUtil.isNotEmpty(insertList)) { + purchaseOrderNoDetailMapper.insertBatch(insertList); + for (PurchaseOrderMakeDetailDO pmd : updateList) { + for (PurchaseOrderNoDetailDO pd : insertList) { + if (pmd.getId().equals(pd.getMakeDetailId())){ + pmd.setPurchaseOrderNoId(purchaseOrderNoDO.getId()); + pmd.setPurchaseOrderNoDetailId(pd.getId()); + pmd.setOrderStatus(2); + pmd.setStatus(2); + pmd.setPurchaseNo(code); + break; + } + } + } + purchaseOrderMakeDetailMapper.updateBatch(updateList); + } + + }else { + // 校验存在 +// validatePurchaseOrderMakeDetailExists(updateReqVO.getId()); + // 更新 +// PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class); +// if (updateObj.getMaterialId() == null){ +// purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId()); +// purchaseOrderMakeDetailMapper.updateById(updateObj); +// }else { +// purchaseOrderMakeDetailMapper.updateById(updateObj); + // } + + } + + } @Override public PageResult getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) { return purchaseOrderMakeDetailMapper.getDetail(partPurchaseOrderPageReqVO); @@ -539,6 +681,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{ if (ObjectUtil.isNotEmpty(purchaseOrderMakeDO)){ if (purchaseOrderMakeDO.getGoodsType() == 2){ submitNo(list); + }else { + submitNo1(list); } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java index 1517d0a1..480a0e02 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plan/PlanService.java @@ -66,4 +66,6 @@ public interface PlanService { int updateById(PlanDO planDO); CommonResult verification(Long id, String type); + + PlanDO getPartProcess(PlanPageReqVO pageReqVO); } 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 ba0b1b10..1ad91a02 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 @@ -1,6 +1,7 @@ package com.chanko.yunxi.mes.module.heli.service.plan; import cn.hutool.core.util.ObjectUtil; +import cn.smallbun.screw.core.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.framework.common.exception.ErrorCode; @@ -14,10 +15,11 @@ import com.chanko.yunxi.mes.framework.web.core.util.WebFrameworkUtils; import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanSaveReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.plansub.vo.PlanSubPageReqVO; -import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.ProcessDesignSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO; +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.plansubdetail.PlanSubDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; @@ -26,11 +28,16 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesi import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; 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.taskreport.TaskReportDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmaster.PgMasterLineMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plansubdetail.PlanSubDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; @@ -38,6 +45,8 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignProgressMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.taskreport.TaskReportMapper; @@ -48,16 +57,19 @@ import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.thymeleaf.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PROJECT_PLAN; @@ -116,8 +128,22 @@ public class PlanServiceImpl implements PlanService { private ProcessDesignMapper processDesignMapper; @Resource private ProcessDesignProgressMapper processDesignProgressMapper; -@Resource -private TaskReportMapper taskReportMapper; + @Resource + private TaskReportMapper taskReportMapper; + @Resource + private PlanSubDetailMapper planSubDetailMapper; + @Resource + private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper; + @Resource + private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper; + @Resource + private PgMasterLineMapper pgMasterLineMapper; + private static final String TASK_COMPLETED = "已完成"; + private static final String TASK_NOT_STARTED = "未开始"; + private static final String TASK_STARTED_FORMAT = "已开始(%d%%)"; + private static final String TASK_FLAG_DELAYED = "1"; + private static final String TASK_FLAG_NORMAL = "0"; + @Override public Long createPlan(PlanSaveReqVO createReqVO) { // 插入 @@ -126,7 +152,7 @@ private TaskReportMapper taskReportMapper; // 月度流水号 SerialNumberDO serialNumberDO = new SerialNumberDO(); serialNumberDO = serialNumberService.getSerialNumber(PROJECT_PLAN.name(), new SimpleDateFormat("yyyyMM").format(new Date())); - serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1); + serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1); plan.setPlanNo(PROJECT_PLAN.getCode(serialNumberDO.getSerialNumber().toString())); plan.setChangeNum(0); @@ -144,40 +170,40 @@ private TaskReportMapper taskReportMapper; // 更新 PlanDO updateObj = BeanUtils.toBean(updateReqVO, PlanDO.class); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(ProcessDesignDO::getPlanId,updateObj.getId()); - queryWrapper.eq(ProcessDesignDO::getProcessDesignType,"BLUEPRINT_FOUNDRY_TECHNOLOGY"); + queryWrapper.eq(ProcessDesignDO::getPlanId, updateObj.getId()); + queryWrapper.eq(ProcessDesignDO::getProcessDesignType, "BLUEPRINT_FOUNDRY_TECHNOLOGY"); ProcessDesignDO processDesignDO = processDesignMapper.selectOne(queryWrapper); - if (updateObj.getHasCraft()==1){ - if (ObjectUtil.isEmpty(processDesignDO)){ + if (updateObj.getHasCraft() == 1) { + if (ObjectUtil.isEmpty(processDesignDO)) { ProcessDesignDO saveReqVO = new ProcessDesignDO(); - saveReqVO.setPlanId(updateObj.getId()) - .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name()) - .setStatus(ValidStatusEnum.VALID.getCode()) - .setProjectId(updateObj.getProjectId()); + saveReqVO.setPlanId(updateObj.getId()) + .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name()) + .setStatus(ValidStatusEnum.VALID.getCode()) + .setProjectId(updateObj.getProjectId()); processDesignMapper.insert(saveReqVO); } - }else { - if (ObjectUtil.isNotEmpty(processDesignDO)){ - processDesignMapper.deleteById(processDesignDO.getId()); + } else { + if (ObjectUtil.isNotEmpty(processDesignDO)) { + processDesignMapper.deleteById(processDesignDO.getId()); } } LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); - queryWrapper1.eq(ProcessDesignDO::getPlanId,updateObj.getId()); - queryWrapper1.eq(ProcessDesignDO::getProcessDesignType,"CASTING_DRAWING"); + queryWrapper1.eq(ProcessDesignDO::getPlanId, updateObj.getId()); + queryWrapper1.eq(ProcessDesignDO::getProcessDesignType, "CASTING_DRAWING"); ProcessDesignDO processDesignDO1 = processDesignMapper.selectOne(queryWrapper1); - if (updateObj.getHasCast()==1){ - if (ObjectUtil.isEmpty(processDesignDO1)){ - ProcessDesignDO casting = new ProcessDesignDO(); + if (updateObj.getHasCast() == 1) { + if (ObjectUtil.isEmpty(processDesignDO1)) { + ProcessDesignDO casting = new ProcessDesignDO(); casting.setPlanId(updateObj.getId()) .setProcessDesignType(ProcessDesignTypeEnum.CASTING_DRAWING.name()) .setStatus(ValidStatusEnum.VALID.getCode()) .setProjectId(updateObj.getProjectId()); processDesignMapper.insert(casting); } - }else { - if (ObjectUtil.isNotEmpty(processDesignDO1)){ - processDesignMapper.deleteById(processDesignDO1.getId()); + } else { + if (ObjectUtil.isNotEmpty(processDesignDO1)) { + processDesignMapper.deleteById(processDesignDO1.getId()); } } planMapper.updateById(updateObj); @@ -213,35 +239,37 @@ private TaskReportMapper taskReportMapper; public PageResult getPlanPageByStatus(PlanPageReqVO pageReqVO) { return planMapper.selectPageByStatus(pageReqVO); } + @Override - public PlanDO getPlanByProjectId(Long projectId){ - return planMapper.selectOne(new LambdaQueryWrapper() { + public PlanDO getPlanByProjectId(Long projectId) { + return planMapper.selectOne(new LambdaQueryWrapper() { { - eq(PlanDO::getProjectId, projectId); - orderByDesc(PlanDO::getId); - last("LIMIT 1"); + eq(PlanDO::getProjectId, projectId); + orderByDesc(PlanDO::getId); + last("LIMIT 1"); } }); } + @Override @Transactional(rollbackFor = Exception.class) - public Long generatePlanByProjectId(Long projectId){ + public Long generatePlanByProjectId(Long projectId) { Long id = null; // 查询最近归档历史并对比变化字段 PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ - eq(PlanDO::getProjectId, projectId); - orderByDesc(PlanDO::getId); - last("LIMIT 1"); - }} + eq(PlanDO::getProjectId, projectId); + orderByDesc(PlanDO::getId); + last("LIMIT 1"); + }} ); ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(projectId); // 生成生产计划子项目信息 List projectOrderSubDOs = projectOrderService.getProjectOrderSubListByProjectOrderId(projectId); - if(planDO != null){ + if (planDO != null) { // 设置项目更新次数 - planDO.setChangeNum(planDO.getChangeNum()+1); + planDO.setChangeNum(planDO.getChangeNum() + 1); // 设置项目更新时间 planDO.setChangeLastDate(LocalDateTime.now()); planDO.setCode(projectOrderDO.getCode()); @@ -253,34 +281,33 @@ private TaskReportMapper taskReportMapper; PlanSubPageReqVO pageReqVO = new PlanSubPageReqVO(); pageReqVO.setPageNo(1); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = planSubMapper.selectPage(pageReqVO).getList(); + List list = planSubMapper.selectPage(pageReqVO).getList(); CustomerDO customer = customerService.getCustomer(projectOrderDO.getCustomerId()); - for(ProjectOrderSubDO item : projectOrderSubDOs){ - if(!list.stream().anyMatch(a ->a.getProjectSubId().equals(item.getId()))) { + for (ProjectOrderSubDO item : projectOrderSubDOs) { + if (!list.stream().anyMatch(a -> a.getProjectSubId().equals(item.getId()))) { PlanSubDO planSubDO = new PlanSubDO(); planSubDO.setProjectPlanId(planDO.getId()); planSubDO.setProjectId(projectId); planSubDO.setName(item.getName()); planSubDO.setProjectSubId(item.getId()); - if(!StringUtils.isEmpty(item.getDeviceModel())){ + if (!StringUtils.isEmpty(item.getDeviceModel())) { planSubDO.setEquipId(Long.parseLong(item.getDeviceModel())); } - planSubDO.setProjectSubCode(customer.getBrief()+'-'+projectOrderDO.getProjectNameSim()+'-'+item.getNameSim()); + planSubDO.setProjectSubCode(customer.getBrief() + '-' + projectOrderDO.getProjectNameSim() + '-' + item.getNameSim()); planSubDO.setProjectSubShortName(item.getNameSim()); planSubMapper.insert(planSubDO); - } - else{ + } else { PlanSubDO planSubDO = list.stream().filter(ps -> ps.getProjectSubId().equals(item.getId())).findFirst().get(); - if(!StringUtils.isEmpty(item.getDeviceModel())){ + if (!StringUtils.isEmpty(item.getDeviceModel())) { planSubDO.setEquipId(Long.parseLong(item.getDeviceModel())); } - planSubDO.setProjectSubCode(customer.getBrief()+'-'+projectOrderDO.getProjectNameSim()+'-'+item.getNameSim()); + planSubDO.setProjectSubCode(customer.getBrief() + '-' + projectOrderDO.getProjectNameSim() + '-' + item.getNameSim()); planSubDO.setProjectSubShortName(item.getNameSim()); planSubMapper.updateById(planSubDO); } } - }else{ + } else { planDO = new PlanDO(); planDO.setProjectId(projectId); // 设置项目更新次数 @@ -297,7 +324,7 @@ private TaskReportMapper taskReportMapper; // planDO.setPlanNo(PROJECT_PLAN.getCode(serialNumberDO.getSerialNumber().toString())); String code = projectOrderDO.getCode().replace("-", ""); - planDO.setPlanNo("PP"+code); + planDO.setPlanNo("PP" + code); Long userId = WebFrameworkUtils.getLoginUserId(); planDO.setCreator(userId.toString()); @@ -305,15 +332,15 @@ private TaskReportMapper taskReportMapper; // 回写序列记录 // serialNumberService.updateSerialNumber(serialNumberDO); - for(ProjectOrderSubDO item : projectOrderSubDOs){ + for (ProjectOrderSubDO item : projectOrderSubDOs) { PlanSubDO planSubDO = new PlanSubDO(); - planSubDO.setProjectSubCode(customer.getBrief()+'-'+projectOrderDO.getProjectNameSim()+'-'+item.getNameSim()); + planSubDO.setProjectSubCode(customer.getBrief() + '-' + projectOrderDO.getProjectNameSim() + '-' + item.getNameSim()); planSubDO.setProjectSubShortName(item.getNameSim()); planSubDO.setProjectPlanId(planDO.getId()); planSubDO.setProjectId(projectId); planSubDO.setName(item.getName()); planSubDO.setProjectSubId(item.getId()); - if(!StringUtils.isEmpty(item.getDeviceModel())){ + if (!StringUtils.isEmpty(item.getDeviceModel())) { planSubDO.setEquipId(Long.parseLong(item.getDeviceModel())); } planSubMapper.insert(planSubDO); @@ -325,17 +352,18 @@ private TaskReportMapper taskReportMapper; return id; } + @Override - public void updatePlanStatusToTerminateByProjectId(Long projectId){ + public void updatePlanStatusToTerminateByProjectId(Long projectId) { // 查询最近归档历史并对比变化字段 PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ eq(PlanDO::getProjectId, projectId); orderByDesc(PlanDO::getId); last("LIMIT 1"); }}); - if(planDO != null){ + if (planDO != null) { // 设置项目更新次数 - planDO.setChangeNum(planDO.getChangeNum()+1); + planDO.setChangeNum(planDO.getChangeNum() + 1); // 设置项目更新时间 planDO.setChangeLastDate(LocalDateTime.now()); // 设置生产计划状态 @@ -346,47 +374,749 @@ private TaskReportMapper taskReportMapper; updatePlanTaskStatusToTerminateByPlanId(planDO.getId()); } } + @Override - public int updateById(PlanDO planDO){ - return planMapper.updateById(planDO); + public int updateById(PlanDO planDO) { + return planMapper.updateById(planDO); } @Override public CommonResult verification(Long id, String type) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(ProcessDesignDO::getPlanId,id); - queryWrapper.eq(ProcessDesignDO::getProcessDesignType,type); + queryWrapper.eq(ProcessDesignDO::getPlanId, id); + queryWrapper.eq(ProcessDesignDO::getProcessDesignType, type); ProcessDesignDO processDesignDO = processDesignMapper.selectOne(queryWrapper); - if (ObjectUtil.isNotEmpty(processDesignDO)){ + if (ObjectUtil.isNotEmpty(processDesignDO)) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProcessDesignProgressDO::getProcessDesignId,processDesignDO.getId()); - if (processDesignProgressMapper.selectCount(wrapper)>0) return CommonResult.success(false); + wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); + if (processDesignProgressMapper.selectCount(wrapper) > 0) return CommonResult.success(false); } return CommonResult.success(true); } + @Override + public PlanDO getPartProcess(PlanPageReqVO pageReqVO) { + PageResult pageResult = planSubMapper.getPartProcess(pageReqVO); + PlanDO planDO = new PlanDO(); + List list = pageResult.getList(); + if (ObjectUtil.isNotEmpty(list)) { + PlanSubDO planSubDO = list.get(0); + planDO.setProjectName(planSubDO.getProjectName()); + planDO.setProjectEndTime(planSubDO.getProjectEndTime()); + planDO.setCraftOwnerName(planSubDO.getCraftOwnerName()); + planDO.setCraftEndDate(planSubDO.getCraftEndDate()); + LocalDateTime now = LocalDateTime.now(); + if (planSubDO.getDeliveryStatus() == 3) { + planDO.setProjectProgress("已发货"); + } else if (now.isAfter(planSubDO.getProjectEndTime())) { + long overdueDays = ChronoUnit.DAYS.between( + planSubDO.getProjectEndTime().toLocalDate(), now.toLocalDate()); + planDO.setProjectProgress("已延迟" + overdueDays + "天"); + } else if (now.isBefore(planSubDO.getProjectEndTime())) { + long remainingDays = ChronoUnit.DAYS.between(now.toLocalDate(), planSubDO.getProjectEndTime().toLocalDate()); + planDO.setProjectProgress("距交付剩余" + remainingDays + "天"); + } else { + planDO.setProjectProgress("项目今天结束"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessDesignDO::getProjectId, planSubDO.getProjectId()); + queryWrapper.eq(ProcessDesignDO::getProcessDesignType, "BLUEPRINT_FOUNDRY_TECHNOLOGY"); + ProcessDesignDO processDesignDO = processDesignMapper.selectOne(queryWrapper); + if (ObjectUtil.isNotEmpty(processDesignDO)) { + if (1 == processDesignDO.getIsOverProcess()) { + planDO.setProcessProgress("已完成"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); + wrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); + wrapper.last("limit 1"); + ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(wrapper); + if (ObjectUtil.isNotEmpty(processDesignProgressDO)) { + LocalDateTime dateAsLocalDateTime = processDesignProgressDO.getEndTime().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + if (dateAsLocalDateTime.isAfter(processDesignDO.getCraftEndDate())) { + planDO.setProcessFlag("1"); + } else { + planDO.setProcessFlag("0"); + } + } + } else { + if (now.isAfter(processDesignDO.getCraftEndDate())) { + planDO.setProcessFlag("1"); + } else { + planDO.setProcessFlag("0"); + } + Long l = processDesignProgressMapper.selectCount(new LambdaQueryWrapper().eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId())); + if (l > 0) { + planDO.setProcessProgress("执行中"); + } else { + planDO.setProcessProgress("未开始"); + } + } + } + + for (PlanSubDO subDO : list) { + //设计计划 + // 1. 查询已完成的工艺设计 + List completedProcessDesigns = getCompletedProcessDesigns(subDO.getProjectSubId()); + // 2. 查询最新的设计日期 + PlanSubDetailDO latestTwoDimPlan = getLatestTwoDimPlan(subDO.getProjectSubId()); + + if (hasEnoughCompletedDesigns(completedProcessDesigns)) { + // 情况1:已完成3个以上设计 + handleCompletedDesigns(subDO, completedProcessDesigns, latestTwoDimPlan); + } else { + // 情况2:未完成或部分完成 + handleIncompleteDesigns(subDO, completedProcessDesigns, latestTwoDimPlan, now); + } + //外协任务 + // 1.查询外协的派工单 + List detailDOS = taskDispatchDetailMapper.outSourceTask(subDO.getProjectSubId(),"Y",null); + + // 2.查询采购订单 + List purchaseOrderNoDetailDOS = queryPurchaseOrderDetails(subDO); + + // 3.查询是否送审 + List purchaseOrderMakeDetailDOS = queryPurchaseOrderMakeDetails(subDO); + + // 判断所有采购订单是否都已完成 + boolean allCompleted = isAllPurchaseOrdersCompleted(purchaseOrderNoDetailDOS); + + if (allCompleted) { + subDO.setOutsourcingTasks(TASK_COMPLETED); + } else { + if (CollectionUtils.isNotEmpty(purchaseOrderMakeDetailDOS)) { + // 计算已完成采购数量和派工数量 + BigDecimal completedPurchaseAmount = calculateCompletedPurchaseAmount(purchaseOrderNoDetailDOS); + BigDecimal dispatchAmount = calculateDispatchAmount(detailDOS); + // 计算完成百分比并设置 + int percentage = calculatePercentage(completedPurchaseAmount, dispatchAmount); + subDO.setOutsourcingTasks(String.format(TASK_STARTED_FORMAT, percentage)); + subDO.setOutsourcingTasksFlag(TASK_FLAG_NORMAL); + } else { + if (ObjectUtil.isNotEmpty(detailDOS)){ + subDO.setOutsourcingTasks(TASK_NOT_STARTED); + } + } + } + // 处理时间相关逻辑 + processTimeLogic(subDO, purchaseOrderNoDetailDOS, allCompleted); + + //加工任务 + // 1. 查询非外协的派工单 + List dispatchDetailDOS = taskDispatchDetailMapper + .outSourceTask(subDO.getProjectSubId(), "N",null); + + // 2. 查询报工数据 + List taskReportDOS = queryTaskReports(dispatchDetailDOS); + + // 3. 判断所有派工单是否已完成 + boolean allCompleted1 = isAllDispatchDetailsCompleted(dispatchDetailDOS); + + if (allCompleted1) { + subDO.setProcessingTask(TASK_COMPLETED); + } else { + processInProgressTask(subDO, dispatchDetailDOS, taskReportDOS); + } + + // 4. 处理时间相关逻辑 + processProcessingTimeLogic(subDO, dispatchDetailDOS, taskReportDOS, allCompleted1, now); + + //过程检 + //1.查询非外协需要过程检的数据 + List dispatchDetailDOList = taskDispatchDetailMapper + .outSourceTask(subDO.getProjectSubId(), "N","0"); + //2.查询过程检报工信息 + List processInspectionReports = queryProcessInspectionReports(dispatchDetailDOS); + boolean isSameSizeAndNotEmpty = isSameSizeAndNotEmpty(dispatchDetailDOList, processInspectionReports); + if (isSameSizeAndNotEmpty){ + subDO.setProcessInspection(TASK_COMPLETED); + }else { + processInspectionTask(subDO, dispatchDetailDOList, processInspectionReports); + } + + //装配任务 + //查询该子项目的装配任务 + List assemblyTask = taskDispatchDetailMapper.assemblyTask(subDO.getProjectSubId()); + // 2. 查询装配报工数据 + List taskReportDOList = queryTaskReports(assemblyTask); + + // 3. 判断所有派工单是否已完成 + boolean allCompleted2 = isAllDispatchDetailsCompleted(assemblyTask); + + if (allCompleted2) { + subDO.setAssemblyTask(TASK_COMPLETED); + } else { + processAssemblyTask(subDO, assemblyTask, taskReportDOList); + } + // 4. 处理时间相关逻辑 + processAssemblyTaskTimeLogic(subDO, assemblyTask, taskReportDOList, allCompleted2, now); + } + planDO.setList( pageResult); + } + return planDO; + } + +// ================= 辅助方法 ================= + /** + * 处理进行中的任务状态 + */ + private void processAssemblyTask(PlanSubDO subDO, + List dispatchDetailDOS, + List taskReportDOS) { + + if (CollectionUtils.isEmpty(taskReportDOS)) { + if (CollectionUtils.isNotEmpty(dispatchDetailDOS)){ + subDO.setAssemblyTask(TASK_NOT_STARTED); + return; + } + } + + 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); + } + /** + * 处理进行中的任务状态 + */ + private void processInspectionTask(PlanSubDO subDO, + List dispatchDetailDOS, + List taskReportDOS) { + + if (CollectionUtils.isEmpty(taskReportDOS)) { + if (CollectionUtils.isNotEmpty(dispatchDetailDOS)){ + subDO.setProcessingTask(TASK_NOT_STARTED); + return; + } + } + + BigDecimal dispatchAmount = calculateDispatchAmount(dispatchDetailDOS); + BigDecimal reportedAmount = calculateAmount(taskReportDOS); + int percentage = calculatePercentage(reportedAmount, dispatchAmount); + + subDO.setProcessingTask(String.format(TASK_STARTED_FORMAT, percentage)); + subDO.setProcessingTaskFlag(TASK_FLAG_NORMAL); + } + /** + * 判断两个集合大小相等且都不为空 + * @param list1 第一个集合 + * @param list2 第二个集合 + * @return true: 两个集合都不为空且大小相等 + */ +public boolean isSameSizeAndNotEmpty(Collection list1, Collection list2) { + return CollectionUtils.isNotEmpty(list1) + && CollectionUtils.isNotEmpty(list2) + && list1.size() == list2.size(); +} + /** + * 查询过程检报工数据 + */ + private List queryProcessInspectionReports(List dispatchDetailDOS) { + if (CollectionUtils.isEmpty(dispatchDetailDOS)) { + return Collections.emptyList(); + } + + List dispatchDetailIds = dispatchDetailDOS.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getId) + .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(dispatchDetailIds)) { + return Collections.emptyList(); + } + + return pgMasterLineMapper.selectList( + new LambdaQueryWrapper() + .in(PgMasterLineDO::getDispatchDetailId, dispatchDetailIds) + .eq(PgMasterLineDO::getActive, "END") + ); + } + /** + * 查询报工数据 + */ + private List queryTaskReports(List dispatchDetailDOS) { + if (CollectionUtils.isEmpty(dispatchDetailDOS)) { + return Collections.emptyList(); + } + + List dispatchDetailIds = dispatchDetailDOS.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getId) + .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(dispatchDetailIds)) { + return Collections.emptyList(); + } + + return taskReportMapper.selectList( + new LambdaQueryWrapper() + .in(TaskReportDO::getDispatchDetailId, dispatchDetailIds) + .eq(TaskReportDO::getHasReport, 1) + ); + } + + /** + * 判断所有派工单是否已完成(procedureStatus == 2) + */ + private boolean isAllDispatchDetailsCompleted(List dispatchDetailDOS) { + return CollectionUtils.isNotEmpty(dispatchDetailDOS) + && dispatchDetailDOS.stream() + .filter(Objects::nonNull) + .allMatch(item -> item.getProcedureStatus() == 2); + } + + /** + * 处理进行中的任务状态 + */ + private void processInProgressTask(PlanSubDO subDO, + List dispatchDetailDOS, + List taskReportDOS) { + + if (CollectionUtils.isEmpty(taskReportDOS)) { + if (CollectionUtils.isNotEmpty(dispatchDetailDOS)){ + subDO.setProcessingTask(TASK_NOT_STARTED); + return; + } + } + + BigDecimal dispatchAmount = calculateDispatchAmount(dispatchDetailDOS); + BigDecimal reportedAmount = calculateReportedAmount(taskReportDOS); + int percentage = calculatePercentage(reportedAmount, dispatchAmount); + + subDO.setProcessingTask(String.format(TASK_STARTED_FORMAT, percentage)); + subDO.setProcessingTaskFlag(TASK_FLAG_NORMAL); + } + /** + * 处理装配任务时间逻辑 + */ + private void processAssemblyTaskTimeLogic(PlanSubDO subDO, + List dispatchDetailDOS, + List taskReportDOS, + boolean allCompleted, + LocalDateTime now) { + if (CollectionUtils.isEmpty(dispatchDetailDOS)) { + return; + } + + // 获取派工单的最大结束时间 + LocalDateTime maxDispatchEndTime = dispatchDetailDOS.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getEndTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + if (maxDispatchEndTime == null) { + return; + } + + // 根据完成状态判断是否延迟 + if (allCompleted) { + // 获取报工的最大结束时间 + LocalDateTime maxReportEndTime = Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskReportDO::getEndTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + // 如果报工结束时间晚于派工结束时间,标记为延迟 + if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) { + subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED); + } + } else { + // 当前时间晚于派工结束时间,标记为延迟 + if (now.isAfter(maxDispatchEndTime)) { + subDO.setAssemblyTaskFlag(TASK_FLAG_DELAYED); + } + } + } + /** + * 处理加工任务时间逻辑 + */ + private void processProcessingTimeLogic(PlanSubDO subDO, + List dispatchDetailDOS, + List taskReportDOS, + boolean allCompleted, + LocalDateTime now) { + if (CollectionUtils.isEmpty(dispatchDetailDOS)) { + return; + } + + // 获取派工单的最大结束时间 + LocalDateTime maxDispatchEndTime = dispatchDetailDOS.stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getEndTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + if (maxDispatchEndTime == null) { + return; + } + + // 根据完成状态判断是否延迟 + if (allCompleted) { + // 获取报工的最大结束时间 + LocalDateTime maxReportEndTime = Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskReportDO::getEndTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + // 如果报工结束时间晚于派工结束时间,标记为延迟 + if (maxReportEndTime != null && maxReportEndTime.isAfter(maxDispatchEndTime)) { + subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED); + } + } else { + // 当前时间晚于派工结束时间,标记为延迟 + if (now.isAfter(maxDispatchEndTime)) { + subDO.setProcessingTaskFlag(TASK_FLAG_DELAYED); + } + } + } + /** + * 计算已过程检数量 + */ + private BigDecimal calculateAmount(List taskReportDOS) { + return Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(PgMasterLineDO::getAmount) + .filter(Objects::nonNull) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + /** + * 计算已报工数量 + */ + private BigDecimal calculateReportedAmount(List taskReportDOS) { + return Optional.ofNullable(taskReportDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskReportDO::getAmount) + .filter(Objects::nonNull) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } +// 查询采购订单详情 +private List queryPurchaseOrderDetails(PlanSubDO subDO) { + return purchaseOrderNoDetailMapper.selectList( + new LambdaQueryWrapper() + .eq(PurchaseOrderNoDetailDO::getProjectPlanSubId, subDO.getProjectSubId()) + .isNotNull(PurchaseOrderNoDetailDO::getBoomDetailId) + ); +} + + // 查询采购订单送审详情 + private List queryPurchaseOrderMakeDetails(PlanSubDO subDO) { + return purchaseOrderMakeDetailMapper.selectList( + new LambdaQueryWrapper() + .eq(PurchaseOrderMakeDetailDO::getProjectPlanSubId, subDO.getProjectSubId()) + .isNotNull(PurchaseOrderMakeDetailDO::getBoomDetailId) + ); + } + + // 判断所有采购订单是否完成 + private boolean isAllPurchaseOrdersCompleted(List purchaseOrderNoDetailDOS) { + if (CollectionUtils.isEmpty(purchaseOrderNoDetailDOS)) { + return false; + } + return purchaseOrderNoDetailDOS.stream() + .filter(Objects::nonNull) + .allMatch(item -> item.getReceivingStatus() == 3); + } + + // 计算已收货的采购数量 + private BigDecimal calculateCompletedPurchaseAmount(List purchaseOrderNoDetailDOS) { + return Optional.ofNullable(purchaseOrderNoDetailDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .filter(item -> item.getReceivingStatus() == 3) + .map(PurchaseOrderNoDetailDO::getPurchaseAmount) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + + // 计算派工数量 + private BigDecimal calculateDispatchAmount(List detailDOS) { + return Optional.ofNullable(detailDOS) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(TaskDispatchDetailDO::getAmount) + .filter(Objects::nonNull) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + + + // 处理时间相关逻辑 + private void processTimeLogic(PlanSubDO subDO, + List purchaseOrderNoDetailDOS, + boolean allCompleted) { + if (CollectionUtils.isEmpty(purchaseOrderNoDetailDOS)) { + return; + } + + // 获取最大的requireTime + LocalDateTime maxRequireTime = purchaseOrderNoDetailDOS.stream() + .filter(Objects::nonNull) + .map(PurchaseOrderNoDetailDO::getRequireTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + if (maxRequireTime == null) { + return; + } + + // 根据完成状态判断是否延迟 + if (allCompleted) { + // 获取已完成订单的最大arriveTime + LocalDateTime maxArriveTime = purchaseOrderNoDetailDOS.stream() + .filter(Objects::nonNull) + .filter(item -> item.getReceivingStatus() == 3) + .map(PurchaseOrderNoDetailDO::getArriveTime) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + + // 如果到货时间晚于要求时间,标记为延迟 + if (maxArriveTime != null && maxArriveTime.isAfter(maxRequireTime)) { + subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED); + } + } else { + // 当前时间晚于最大要求时间,标记为延迟 + if (LocalDateTime.now().isAfter(maxRequireTime)) { + subDO.setOutsourcingTasksFlag(TASK_FLAG_DELAYED); + } + } + } + /** + * 查询已完成的工艺设计 + */ + private List getCompletedProcessDesigns(Long projectSubId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessDesignDO::getProjectSubId, projectSubId); + queryWrapper.in(ProcessDesignDO::getProcessDesignType, "BLUEPRINT_3D","BLUEPRINT_2D","BLUEPRINT_WORKBLANK"); + queryWrapper.eq(ProcessDesignDO::getIsOverProcess, "1"); + return processDesignMapper.selectList(queryWrapper); + } + + /** + * 查询最新的结束日期 + */ + private PlanSubDetailDO getLatestTwoDimPlan(Long projectSubId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PlanSubDetailDO::getProjectSubId, projectSubId); + queryWrapper.orderByDesc(PlanSubDetailDO::getTwoDimDate); + queryWrapper.last("limit 1"); + return planSubDetailMapper.selectOne(queryWrapper); + } + + /** + * 检查是否有足够的已完成设计(>=3) + */ + private boolean hasEnoughCompletedDesigns(List processDesigns) { + return ObjectUtil.isNotEmpty(processDesigns) && processDesigns.size() >= 3; + } + + /** + * 处理已完成设计的情况 + */ + private void handleCompletedDesigns(PlanSubDO subDO, + List completedDesigns, + PlanSubDetailDO latestTwoDimPlan) { + subDO.setDesignTask("已完成"); + + // 获取最新的工艺设计进度 + ProcessDesignProgressDO latestProgress = getLatestProcessDesignProgress( + completedDesigns.stream() + .map(ProcessDesignDO::getId) + .collect(Collectors.toList()) + ); + + if (ObjectUtil.isNotEmpty(latestProgress) && ObjectUtil.isNotEmpty(latestTwoDimPlan)) { + boolean isOverdue = isDateAfterLocalDateTime( + latestProgress.getEndTime(), + latestTwoDimPlan.getTwoDimDate() + ); + subDO.setDesignTaskFlag(isOverdue ? "1" : ""); + } + } + + /** + * 处理未完成设计的情况 + */ + private void handleIncompleteDesigns(PlanSubDO subDO, + List processDesigns, + PlanSubDetailDO latestTwoDimPlan, + LocalDateTime now) { + if (ObjectUtil.isEmpty(processDesigns)) { + subDO.setDesignTask("未开始"); + return; + } + + List processDesignIds = processDesigns.stream() + .map(ProcessDesignDO::getId) + .collect(Collectors.toList()); + + // 获取工艺设计进度列表 + List progressList = getProcessDesignProgressList(processDesignIds); + + if (ObjectUtil.isEmpty(progressList)) { + subDO.setDesignTask("未开始"); + return; + } + + // 计算总工时和当前工时 + BigDecimal totalWorkTime = calculateTotalWorkTime(progressList); + BigDecimal currentTime = calculateCurrentTime(subDO); + currentTime = currentTime.multiply(new BigDecimal("8")); + // 计算完成百分比 + Integer percentage = calculatePercentage( totalWorkTime,currentTime); + + // 设置设计任务状态 + subDO.setDesignTask(String.format("已开始(%d%%)", percentage)); + subDO.setDesignTaskFlag("0"); + + // 检查是否超期 + ProcessDesignProgressDO latestProgress = getLatestProgress(processDesignIds); + if (ObjectUtil.isNotEmpty(latestProgress) && + ObjectUtil.isNotEmpty(latestTwoDimPlan) && + now.isAfter(latestTwoDimPlan.getTwoDimDate())) { + subDO.setDesignTaskFlag("1"); + } + } + + /** + * 获取最新的工艺设计进度 + */ + private ProcessDesignProgressDO getLatestProcessDesignProgress(List processDesignIds) { + if (ObjectUtil.isEmpty(processDesignIds)) { + return null; + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ProcessDesignProgressDO::getProcessDesignId, processDesignIds); + queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); + queryWrapper.last("limit 1"); + return processDesignProgressMapper.selectOne(queryWrapper); + } + + /** + * 获取工艺设计进度列表 + */ + 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); + } + + /** + * 计算总工时 + */ + private BigDecimal calculateTotalWorkTime(List progressList) { + return progressList.stream() + .map(ProcessDesignProgressDO::getWorkTime) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + + /** + * 计算当前工时(将三个数值相加) + */ + private BigDecimal calculateCurrentTime(PlanSubDO subDO) { + BigDecimal currentTime = BigDecimal.ZERO; + + if (ObjectUtil.isNotEmpty(subDO.getBlankNum())) { + currentTime = currentTime.add(new BigDecimal(subDO.getBlankNum().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; + } + + /** + * 计算百分比 + */ + private Integer calculatePercentage(BigDecimal currentTime, BigDecimal totalWorkTime) { + if (totalWorkTime == null || totalWorkTime.compareTo(BigDecimal.ZERO) == 0) { + return 0; + } + + return currentTime.multiply(new BigDecimal("100")) + .divide(totalWorkTime, 0, RoundingMode.HALF_UP) + .intValue(); + } + + /** + * 判断 Date 是否在 LocalDateTime 之后 + */ + private boolean isDateAfterLocalDateTime(Date date, LocalDateTime localDateTime) { + if (date == null || localDateTime == null) { + return false; + } + + LocalDateTime dateAsLocalDateTime = date.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + + return dateAsLocalDateTime.isAfter(localDateTime); + } + + /** + * 获取最新的进度记录 + */ + private ProcessDesignProgressDO getLatestProgress(List processDesignIds) { + return getLatestProcessDesignProgress(processDesignIds); + } @Override public boolean complete(Long id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(TaskDispatchDO::getPlanId, id).eq(TaskDispatchDO::getDispatchType,"ASSEMBLE").ne(TaskDispatchDO::getDispatchStatus, TaskDispatchStatusEnum.TERMINATE.getCode());; + queryWrapper.eq(TaskDispatchDO::getPlanId, id).eq(TaskDispatchDO::getDispatchType, "ASSEMBLE").ne(TaskDispatchDO::getDispatchStatus, TaskDispatchStatusEnum.TERMINATE.getCode()); + ; List list = taskDispatchMapper.selectList(queryWrapper); LambdaQueryWrapper planTaskWrapper = new LambdaQueryWrapper<>(); planTaskWrapper.eq(PlanTaskDO::getProjectPlanId, id); List planTaskDOS = planTaskMapper.selectList(planTaskWrapper); - if (planTaskDOS==null||planTaskDOS.size()==0){ + if (planTaskDOS == null || planTaskDOS.size() == 0) { return false; } - if (list==null||list.size()==0){ + if (list == null || list.size() == 0) { return false; } for (PlanTaskDO taskDO : planTaskDOS) { - boolean flag=false; + boolean flag = false; LambdaQueryWrapper taskBomDOWrapper = new LambdaQueryWrapper<>(); taskBomDOWrapper.eq(PlanTaskBomDO::getTaskId, taskDO.getId()); List planTaskBomDOS = planTaskBomMapper.selectList(taskBomDOWrapper); - if (planTaskBomDOS==null||planTaskBomDOS.size()==0){ + if (planTaskBomDOS == null || planTaskBomDOS.size() == 0) { return false; } for (PlanTaskBomDO planTaskBomDO : planTaskBomDOS) { @@ -394,14 +1124,14 @@ private TaskReportMapper taskReportMapper; bomDetailDOWrapper.eq(ProcessBomDetailDO::getId, planTaskBomDO.getBomDetailId()); bomDetailDOWrapper.ne(ProcessBomDetailDO::getType, YesOrNoEnum.Y.getCode()); ProcessBomDetailDO processBomDetailDO = processBomDetailMapper.selectOne(bomDetailDOWrapper); - if (processBomDetailDO!=null){ - flag=true; + if (processBomDetailDO != null) { + flag = true; break; } } - if (flag){ + if (flag) { LambdaQueryWrapper taskDispatchDOWrapper = new LambdaQueryWrapper<>(); - taskDispatchDOWrapper.eq(TaskDispatchDO::getTaskId,taskDO.getId()); + taskDispatchDOWrapper.eq(TaskDispatchDO::getTaskId, taskDO.getId()); taskDispatchDOWrapper.ne(TaskDispatchDO::getDispatchStatus, TaskDispatchStatusEnum.TERMINATE.getCode()); List taskList = taskDispatchMapper.selectList(taskDispatchDOWrapper); list.addAll(taskList); @@ -411,27 +1141,28 @@ private TaskReportMapper taskReportMapper; LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDO.getId()); List detailDOS = taskDispatchDetailMapper.selectList(wrapper); - if (detailDOS==null||detailDOS.size()==0){ + if (detailDOS == null || detailDOS.size() == 0) { return false; } for (TaskDispatchDetailDO detailDO : detailDOS) { - if (detailDO.getProcedureStatus()!=2){ - return false; - } + if (detailDO.getProcedureStatus() != 2) { + return false; + } } } - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper().eq(PlanDO::getId, id).set(PlanDO::getStatus, ProjectPlanStatusEnum.COMPLETE.getCode()); - planMapper.update(wrapper); - return true; + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper().eq(PlanDO::getId, id).set(PlanDO::getStatus, ProjectPlanStatusEnum.COMPLETE.getCode()); + planMapper.update(wrapper); + return true; } /** * 生成生产任务单 + * * @param planId */ @Override - public void generatePlanTaskByPlanId(Long planId ,String type){ - if(!type.equals("refresh")){ + public void generatePlanTaskByPlanId(Long planId, String type) { + if (!type.equals("refresh")) { // 获取生产计划 PlanDO planDO = planMapper.selectOne(new LambdaQueryWrapper() {{ eq(PlanDO::getId, planId); @@ -449,7 +1180,7 @@ private TaskReportMapper taskReportMapper; last("LIMIT 1"); }}); - for(PlanSubDO item : planSubDOS){ + for (PlanSubDO item : planSubDOS) { // 获取生产计划bom信息(一个生产计划一个生产计划子项目对应一个bom信息) ProcessBomDO processBomDO = processBomMapper.selectOne(new LambdaQueryWrapper() {{ eq(ProcessBomDO::getProjectId, planDO.getProjectId()); @@ -462,7 +1193,7 @@ private TaskReportMapper taskReportMapper; eq(PlanTaskDO::getProjectId, planDO.getProjectId()); eq(PlanTaskDO::getProjectPlanId, planId); eq(PlanTaskDO::getProjectPlanSubId, item.getId()); - if(processBomDO!=null){ + if (processBomDO != null) { eq(PlanTaskDO::getProcessBomId, processBomDO.getId()); } @@ -470,13 +1201,13 @@ private TaskReportMapper taskReportMapper; }}); // 生产计划任务单存在则更新版本号和状态,不存在则新增 - if(planTaskDO == null){ + if (planTaskDO == null) { planTaskDO = new PlanTaskDO(); // 日度流水号 SerialNumberDO serialNumberDO = new SerialNumberDO(); serialNumberDO = serialNumberService.getSerialNumber(PROJECT_PLAN_TASK.name(), new SimpleDateFormat("yyyyMMdd").format(new Date())); - serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1); + serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1); // 生产计划任务单编号:PT+年月日+日度顺序号(三位流水) planTaskDO.setTaskNo(PROJECT_PLAN_TASK.getCode(serialNumberDO.getSerialNumber().toString())); @@ -487,7 +1218,7 @@ private TaskReportMapper taskReportMapper; planTaskDO.setProjectPlanId(planId); // 生产计划子项目id planTaskDO.setProjectPlanSubId(item.getId()); - if(processBomDO != null) { + if (processBomDO != null) { // bom id planTaskDO.setProcessBomId(processBomDO.getId()); // bom 版本号 @@ -501,8 +1232,8 @@ private TaskReportMapper taskReportMapper; // 回写序列记录 serialNumberService.updateSerialNumber(serialNumberDO); - }else { - if(processBomDO != null) { + } else { + if (processBomDO != null) { // bom id planTaskDO.setProcessBomId(processBomDO.getId()); // bom 版本号 @@ -523,9 +1254,9 @@ private TaskReportMapper taskReportMapper; OperateTypeEnum.valueOf("SAVE").getType(), ""); // 生成生产计划任务单加工件明细 - generatePlanTaskBom(planTaskDO.getId(),processBomDO); + generatePlanTaskBom(planTaskDO.getId(), processBomDO); } - }else{ + } else { //这里的planId其实是planSubId PlanSubDO planSubDOS = planSubMapper.selectById(planId); // 获取生产计划 @@ -554,14 +1285,14 @@ private TaskReportMapper taskReportMapper; eq(ProcessBomDO::getProjectSubId, planSubDOS.getProjectSubId()); last("LIMIT 1"); }}); - if (processBomDO.getBomStatus() !=7){ - throw exception(new ErrorCode(400,"BOM没有审核,请先审核BOM")); + if (processBomDO.getBomStatus() != 7) { + throw exception(new ErrorCode(400, "BOM没有审核,请先审核BOM")); } PlanTaskDO planTaskDO = planTaskMapper.selectOne(new LambdaQueryWrapper() {{ eq(PlanTaskDO::getProjectId, planSubDOS.getProjectId()); eq(PlanTaskDO::getProjectPlanId, planSubDOS.getProjectPlanId()); eq(PlanTaskDO::getProjectPlanSubId, planSubDOS.getId()); - if(processBomDO!=null){ + if (processBomDO != null) { eq(PlanTaskDO::getProcessBomId, processBomDO.getId()); } @@ -569,13 +1300,13 @@ private TaskReportMapper taskReportMapper; }}); // 生产计划任务单存在则更新版本号和状态,不存在则新增 - if(planTaskDO == null){ + if (planTaskDO == null) { planTaskDO = new PlanTaskDO(); // 日度流水号 SerialNumberDO serialNumberDO = new SerialNumberDO(); serialNumberDO = serialNumberService.getSerialNumber(PROJECT_PLAN_TASK.name(), new SimpleDateFormat("yyyyMMdd").format(new Date())); - serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1); + serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1); // 生产计划任务单编号:PT+年月日+日度顺序号(三位流水) planTaskDO.setTaskNo(PROJECT_PLAN_TASK.getCode(serialNumberDO.getSerialNumber().toString())); @@ -586,7 +1317,7 @@ private TaskReportMapper taskReportMapper; planTaskDO.setProjectPlanId(planSubDOS.getProjectPlanId()); // 生产计划子项目id planTaskDO.setProjectPlanSubId(planSubDOS.getId()); - if(processBomDO != null) { + if (processBomDO != null) { // bom id planTaskDO.setProcessBomId(processBomDO.getId()); // bom 版本号 @@ -600,8 +1331,8 @@ private TaskReportMapper taskReportMapper; // 回写序列记录 serialNumberService.updateSerialNumber(serialNumberDO); - }else { - if(processBomDO != null) { + } else { + if (processBomDO != null) { // bom id planTaskDO.setProcessBomId(processBomDO.getId()); // bom 版本号 @@ -622,7 +1353,7 @@ private TaskReportMapper taskReportMapper; OperateTypeEnum.valueOf("SAVE").getType(), ""); // 生成生产计划任务单加工件明细 - generatePlanTaskBom(planTaskDO.getId(),processBomDO); + generatePlanTaskBom(planTaskDO.getId(), processBomDO); // } } @@ -631,11 +1362,12 @@ private TaskReportMapper taskReportMapper; /** * 生成生产计划任务单加工件明细 + * * @param planTaskId * @param processBomDO */ - private void generatePlanTaskBom(Long planTaskId,ProcessBomDO processBomDO){ - if(processBomDO != null){ + private void generatePlanTaskBom(Long planTaskId, ProcessBomDO processBomDO) { + if (processBomDO != null) { // 获取bom下的加工件明细 // List processBomDetailDOS = processBomDetailMapper.selectList( // new LambdaQueryWrapper() {{ @@ -650,17 +1382,17 @@ private TaskReportMapper taskReportMapper; // }} // ); List planTaskBomDOS = planTaskBomMapper.selectAllListByPlanTaskId(planTaskId); - for(PlanTaskBomDO record : planTaskBomDOS){ + for (PlanTaskBomDO record : planTaskBomDOS) { // 生产任务单下加工件是否已删除 - if(!processBomDetailDOS.stream().anyMatch(a ->a.getId().equals(record.getBomDetailId()))) { + if (!processBomDetailDOS.stream().anyMatch(a -> a.getId().equals(record.getBomDetailId()))) { planTaskBomMapper.deleteById(record); } } - for(ProcessBomDetailDO record : processBomDetailDOS){ + for (ProcessBomDetailDO record : processBomDetailDOS) { // 生产任务单下不存在该加工件,则插入,否则不处理 - if( !planTaskBomDOS.stream().anyMatch(a ->a.getBomDetailId().equals(record.getId()))) { - PlanTaskBomDO planTaskBomDO = new PlanTaskBomDO(); - if (record.getBomEditStatus() == 1){ + if (!planTaskBomDOS.stream().anyMatch(a -> a.getBomDetailId().equals(record.getId()))) { + PlanTaskBomDO planTaskBomDO = new PlanTaskBomDO(); + if (record.getBomEditStatus() == 1) { planTaskBomDO.setDeleted(true); } planTaskBomDO.setTaskId(planTaskId); @@ -673,14 +1405,15 @@ private TaskReportMapper taskReportMapper; /** * 更新生产任务单状态 + * * @param planId */ - private void updatePlanTaskStatusToTerminateByPlanId(Long planId){ + private void updatePlanTaskStatusToTerminateByPlanId(Long planId) { List planTaskDOS = planTaskMapper.selectList(new LambdaQueryWrapper() {{ eq(PlanTaskDO::getProjectPlanId, planId); }}); - for(PlanTaskDO task :planTaskDOS){ + for (PlanTaskDO task : planTaskDOS) { task.setStatus(ProjectPlanStatusEnum.TERMINATE.getCode()); planTaskMapper.updateById(task); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java index 4b2c24a5..854b6295 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansubdetail/PlanSubDetailService.java @@ -68,4 +68,6 @@ public interface PlanSubDetailService { CommonResult Intersection(PlanSubDetailSaveReqVO updateReqVO); CommonResult overlap(PlanSubDetailSaveReqVO updateReqVO); + + List getList(PlanSubDetailPageReqVO pageReqVO); } 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 f4440af9..a8c4604b 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 @@ -2,17 +2,22 @@ package com.chanko.yunxi.mes.module.heli.service.plansubdetail; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.smallbun.screw.core.util.CollectionUtils; +import com.alibaba.druid.sql.visitor.functions.If; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.module.heli.controller.admin.plansub.vo.PlanSubPageReqVO; 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.processdesign.ProcessDesignDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.shopCalendar.ShopCalendarDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignProgressMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.shopCalendar.ShopCalendarMapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -62,6 +67,8 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { private ProcessDesignMapper processDesignMapper; @Resource private ProjectOrderMapper projectOrderMapper; + @Resource + private ProcessDesignProgressMapper processDesignProgressMapper; @Override public Long createPlanSubDetail(PlanSubDetailSaveReqVO createReqVO) { // 插入 @@ -1754,6 +1761,112 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { return CommonResult.success(false); } + @Override + public List getList(PlanSubDetailPageReqVO pageReqVO) { + ArrayList planSubDetailDOS = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + //设计任务 + PlanSubDetailDO designTask = new PlanSubDetailDO(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(PlanSubDetailDO::getProjectSubId,pageReqVO.getProjectSubId()); + List planSubDetail = planSubDetailMapper.selectList(lambdaQueryWrapper); + designTask.setSubType("设计"); + LocalDateTime minTime = planSubDetail.stream() + .filter(Objects::nonNull) + .map(PlanSubDetailDO::getStartTwoDimDate) + .filter(Objects::nonNull) + .min(Comparator.naturalOrder()) + .orElse(null); + designTask.setStartTwoDimDate(minTime); + LocalDateTime maxTime = planSubDetail.stream() + .filter(Objects::nonNull) + .map(PlanSubDetailDO::getTwoDimDate) + .filter(Objects::nonNull) + .max(Comparator.naturalOrder()) + .orElse(null); + designTask.setTwoDimDate(maxTime); + boolean AllCompleted = CollectionUtils.isNotEmpty(planSubDetail) + && planSubDetail.stream() + .filter(Objects::nonNull) + .allMatch(item -> item.getIsOverProcess() == 1); + if (AllCompleted){ + designTask.setStatus("已完成"); + }else { + if (ObjectUtil.isNotEmpty(planSubDetail)){ + boolean hasAtLeastOne = CollectionUtils.isNotEmpty(planSubDetail) + && planSubDetail.stream() + .filter(Objects::nonNull) + .anyMatch(item -> item.getIsOverProcess() == 1); + if (hasAtLeastOne){ + designTask.setStatus("已开始"); + designTask.setStatusFlag("0"); + }else{ + designTask.setStatus("未开始"); + } + }else{ + designTask.setStatus("未开始"); + } + } + if (ObjectUtil.isNotEmpty(planSubDetail)) { + if (AllCompleted) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessDesignDO::getProjectSubId, pageReqVO.getProjectSubId()); + queryWrapper.eq(ProcessDesignDO::getIsOverProcess, "1"); + List completedDesigns = processDesignMapper.selectList(queryWrapper); + // 获取最新的工艺设计进度 + ProcessDesignProgressDO latestProgress = getLatestProcessDesignProgress( + completedDesigns.stream() + .map(ProcessDesignDO::getId) + .collect(Collectors.toList()) + ); + if (ObjectUtil.isNotEmpty(latestProgress) && ObjectUtil.isNotEmpty(maxTime)) { + boolean isOverdue = isDateAfterLocalDateTime( + latestProgress.getEndTime(), + maxTime + ); + designTask.setStatusFlag(isOverdue ? "1" : designTask.getStatusFlag()); + } + } else { + if (ObjectUtil.isNotEmpty(maxTime)){ + if (now.isAfter(maxTime)){ + designTask.setStatusFlag("1"); + } + } + } + } + + + return null; + } + /** + * 判断 Date 是否在 LocalDateTime 之后 + */ + private boolean isDateAfterLocalDateTime(Date date, LocalDateTime localDateTime) { + if (date == null || localDateTime == null) { + return false; + } + + LocalDateTime dateAsLocalDateTime = date.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + + return dateAsLocalDateTime.isAfter(localDateTime); + } + + /** + * 获取最新的工艺设计进度 + */ + private ProcessDesignProgressDO getLatestProcessDesignProgress(List processDesignIds) { + if (ObjectUtil.isEmpty(processDesignIds)) { + return null; + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ProcessDesignProgressDO::getProcessDesignId, processDesignIds); + queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); + queryWrapper.last("limit 1"); + return processDesignProgressMapper.selectOne(queryWrapper); + } public Integer getSearchRlTs(LocalDateTime startDateTime) { List shopCalendarDOS =shopCalendarMapper.getSearchRlTL(startDateTime); int a = shopCalendarDOS.size(); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderServiceImpl.java index cd2f1bc7..d0d8fa8f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderServiceImpl.java @@ -231,6 +231,8 @@ public class ProjectOrderServiceImpl implements ProjectOrderService { } LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(PlanSubDetailDO::getProjectSubId,id); + lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2); + lambdaQueryWrapper.eq(PlanSubDetailDO::getIsOverLab,"N"); lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getCreateTime); PlanSubDetailDO planSubDetailDO = planSubDetailMapper.selectOne(lambdaQueryWrapper); if (ObjectUtil.isNotEmpty(planSubDetailDO)){ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java index a8ae988a..5f83986f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java @@ -131,7 +131,7 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta materialDO = materialMapper.selectById(pmd.getMaterialId()); insertMaterialMap.put(pd.getMakeDetailId(), materialDO); } - if (materialDO.getCompositionId() != null) { + if (ObjectUtil.isNotEmpty(materialDO)&& ObjectUtil.isNotEmpty(materialDO.getCompositionId())) { CompositionDO compositionDO = compositionDOHashMap.get(materialDO.getCompositionId()); if (compositionDO == null) { compositionDO = compositionMapper.selectById(materialDO.getCompositionId()); @@ -139,14 +139,12 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta } pd.setComposition(compositionDO == null ?"":compositionDO.getName()); } - - pd.setBoomName(materialDO.getName()); - pd.setMaterialId(materialDO.getId()); - pd.setBoomSpec(materialDO.getSpec()); - pd.setBoomUnit(materialDO.getUnit()); - - }else { - throw exception(PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS); + if (ObjectUtil.isNotEmpty(materialDO)) { + pd.setBoomName(materialDO.getName()); + pd.setMaterialId(materialDO.getId()); + pd.setBoomSpec(materialDO.getSpec()); + pd.setBoomUnit(materialDO.getUnit()); + } } pd.setPurchaseAmount(pmd.getPurchaseAmount()); @@ -186,6 +184,7 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta pmd.setPurchaseOrderNoId(purchaseOrderNoDO.getId()); pmd.setPurchaseOrderNoDetailId(pd.getId()); pmd.setOrderStatus(2); + pmd.setStatus(2); pmd.setPurchaseNo(code); break; } 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 1c3185f7..f51ee6eb 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 @@ -228,6 +228,26 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { throw exception(new ErrorCode(400,"BOM零件已删除,不允许派工")); } +// for (TaskDispatchDetailDO taskDispatchDetail : updateReqVO.getTaskDispatchDetails()) { +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(MaterialPlanBoomDO::getBoomDetailId, taskDispatchDetail.getBomDetailId()).eq(MaterialPlanBoomDO::getProcedureId, taskDispatchDetail.getProcedureId()); +// MaterialPlanBoomDO materialPlanBoomDO = materialPlanBoomMapper.selectOne(wrapper); +// if (ObjectUtil.isNotEmpty(materialPlanBoomDO)){ +// if (materialPlanBoomDO.getMplanStatus()==1||materialPlanBoomDO.getMplanStatus()==2){ +// if (materialPlanBoomDO.getBoomAmount().compareTo(new BigDecimal(taskDispatchDetail.getAmount()))!=0){ +// ProcedureDO procedureDO = procedureMapper.selectById(taskDispatchDetail.getProcedureId()); +// if (ObjectUtil.isNotEmpty(procedureDO)){ +// throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已送审或已审批,不允许修改数量,请确认!")); +// } +// } +// if (!materialPlanBoomDO.getBoomArriveDate().isEqual(taskDispatchDetail.getEndTime())){ +// ProcedureDO procedureDO = procedureMapper.selectById(taskDispatchDetail.getProcedureId()); +// if (ObjectUtil.isNotEmpty(procedureDO)){ +// throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已送审或已审批,不允许修改结束日期,请确认!")); +// } +// } +// } +// } +// } } // 更新 @@ -267,7 +287,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { } if (operateTypeEnum == OperateTypeEnum.SUBMIT) { ArrayList taskDispatchDetailDOS = new ArrayList<>(); - for (TaskDispatchDetailDO taskDispatchDetail : updateReqVO.getTaskDispatchDetails()) { + + for (TaskDispatchDetailDO taskDispatchDetail : updateReqVO.getTaskDispatchDetails()) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(MaterialPlanBoomDO::getBoomDetailId, taskDispatchDetail.getBomDetailId()).eq(MaterialPlanBoomDO::getProcedureId, taskDispatchDetail.getProcedureId()); MaterialPlanBoomDO materialPlanBoomDO = materialPlanBoomMapper.selectOne(wrapper); if ("false".equals(taskDispatchDetail.getIsOutsourcing())) { @@ -282,6 +303,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService { if (ObjectUtil.isEmpty(materialPlanBoomDO)) { taskDispatchDetailDOS.add(taskDispatchDetail); }else { + materialPlanBoomDO.setBoomAmount(new BigDecimal(taskDispatchDetail.getAmount())); materialPlanBoomDO.setBoomArriveDate(taskDispatchDetail.getEndTime()); materialPlanBoomDO.setDuEmpId(taskDispatchDetail.getOwner()); materialPlanBoomMapper.updateById(materialPlanBoomDO); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml index 894fa2f7..7e305426 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml @@ -14,7 +14,7 @@ from wms_storage sto left join wms_storage_mat mat on mat.stock_id=sto.id and mat.deleted=0 and mat.tenant_id=2 left join base_material m on mat.mat_id=m.id and m.deleted=0 and m.tenant_id=2 - where sto.stock_in_type=5 and m.material_type=5 and sto.status=4 and sto.project_no=#{projectSubId} + where sto.stock_in_type=5 and sto.status=4 and sto.project_no=#{projectSubId} diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java index 41c9f45c..559281eb 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/controller/admin/auth/AuthController.java @@ -1,7 +1,9 @@ package com.chanko.yunxi.mes.module.system.controller.admin.auth; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chanko.yunxi.mes.framework.common.enums.CommonStatusEnum; import com.chanko.yunxi.mes.framework.common.enums.UserTypeEnum; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; @@ -14,6 +16,7 @@ import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.PostDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.MenuDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.permission.RoleDO; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; +import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper; import com.chanko.yunxi.mes.module.system.enums.logger.LoginLogTypeEnum; import com.chanko.yunxi.mes.module.system.service.auth.AdminAuthService; import com.chanko.yunxi.mes.module.system.service.dept.PostService; @@ -34,14 +37,18 @@ import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.error; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import static com.chanko.yunxi.mes.framework.common.util.collection.CollectionUtils.convertSet; import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.obtainAuthorization; @Tag(name = "管理后台 - 认证") @RestController @@ -66,12 +73,34 @@ public class AuthController { private SecurityProperties securityProperties; @Resource private PostService postService; + @Resource + private AdminUserMapper adminUserMapper; + @PostMapping("/login") @PermitAll @Operation(summary = "使用账号密码登录") @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 public CommonResult login(@RequestBody @Valid AuthLoginReqVO reqVO) { +// if (ObjectUtil.isNotEmpty(reqVO.getUsername())&&!"admin".equals(reqVO.getUsername())){ +// AdminUserDO adminUserDO = userService.getOne(); +// if (ObjectUtil.isEmpty(adminUserDO)){ +// LocalDateTime currentDate = LocalDateTime.now(); +// LocalDateTime targetDate = LocalDateTime.of(2025, 12, 17,0,0,0); +// if (currentDate.isAfter(targetDate)) { +// return error(400,"当前账号已经过期,不允许使用"); +// } +// }else{ +// if ("1".equals(adminUserDO.getMobile())){ +// if (ObjectUtil.isNotEmpty(adminUserDO.getCreateTime())){ +// LocalDateTime currentDate = LocalDateTime.now(); +// if (currentDate.isAfter(adminUserDO.getCreateTime())){ +// return error(400,"当前账号已经过期,不允许使用"); +// } +// } +// } +// } +// } return success(authService.login(reqVO)); } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java index 345ff832..a85465a4 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/dal/mysql/user/AdminUserMapper.java @@ -1,5 +1,7 @@ package com.chanko.yunxi.mes.module.system.dal.mysql.user; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -70,4 +72,9 @@ public interface AdminUserMapper extends BaseMapperX { "INNER JOIN DeptHierarchy dh ON a.dept_id = dh.id\n" + "WHERE a.status = '0';") List getUserListByDeptName(@Param("name")String name); + @InterceptorIgnore(tenantLine = "true") // 忽略租户条件 + @Select("select * from system_users where username='admin' and deleted=0 ") + AdminUserDO getUserOne(); + + } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java index ab3c7b7c..b42e1a48 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserService.java @@ -208,4 +208,6 @@ public interface AdminUserService { List getList(); Boolean isAdministrator(); + + AdminUserDO getOne(); } diff --git a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java index 3f0d6b1f..463b6981 100644 --- a/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java +++ b/mes-module-system/mes-module-system-biz/src/main/java/com/chanko/yunxi/mes/module/system/service/user/AdminUserServiceImpl.java @@ -474,6 +474,11 @@ public class AdminUserServiceImpl implements AdminUserService { return userRoleMapper.selectCount(userRoleDOLambdaQueryWrapper)>0; } + @Override + public AdminUserDO getOne() { + return userMapper.getUserOne(); + } + /** * 对密码进行加密 * diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/plan/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/plan/index.ts index 3fcb4013..87217472 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/plan/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/plan/index.ts @@ -62,3 +62,7 @@ export const exportPlan = async (params) => { export const verification = async (id: number,type:string) => { return await request.get({ url: `/heli/plan/verification?id=` + id+`&type=`+type }) } +// 查询零件进程管理 +export const getPartProcess = async (params) => { + return await request.get({ url: `/heli/plan/getPartProcess`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts index 1a92f616..2efb4850 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts @@ -78,3 +78,7 @@ export const Intersection = async (data: PlanSubDetailVO) => { export const overlap = async (data: PlanSubDetailVO) => { return await request.post({ url: `/heli/plan-sub-detail/overlap`, data }) } +//获取子项目信息 +export const getList = async (params) => { + return await request.get({ url: `/heli/plan-sub-detail/getList`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/layout/components/Footer/src/Footer.vue b/mes-ui/mes-ui-admin-vue3/src/layout/components/Footer/src/Footer.vue index 577b919a..0250b3e4 100644 --- a/mes-ui/mes-ui-admin-vue3/src/layout/components/Footer/src/Footer.vue +++ b/mes-ui/mes-ui-admin-vue3/src/layout/components/Footer/src/Footer.vue @@ -19,11 +19,11 @@ const title = computed(() => appStore.getTitle) :class="prefixCls" class="h-[var(--app-footer-height)] bg-[var(--app-content-bg-color)] text-center text-[var(--el-text-color-placeholder)] dark:bg-[var(--el-bg-color)]" > - - + + - Copyright ©上海长江云息数字科技有限公司,All Rights Reserved. + Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. diff --git a/mes-ui/mes-ui-admin-vue3/src/views/Login/Login.vue b/mes-ui/mes-ui-admin-vue3/src/views/Login/Login.vue index 6400ed9b..79f457bb 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/Login/Login.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/Login/Login.vue @@ -54,7 +54,7 @@ - +
Copyright ©上海长江云息数字科技有限公司,All Rights Reserved.Copyright ©上海云赛易数字技术有限公司,All Rights Reserved. diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue index 37e8ab72..e168617e 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/deliverorder/detail.vue @@ -238,7 +238,7 @@ @@ -987,7 +987,6 @@ const queryData = async (type: string, id?: number) => { var subList = await getProjectOrderSubListByProjectOrderIdGt(saleOrderIdArr[i]); subList.forEach((sub)=>{ sub.saleOrderId = saleOrderIdArr[i]; - sub.remark = '' sub.saleOrderSubId = sub.id sub.id = '' sub.saleOrderCode = sub.projectOrderCode diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue index ddd083dd..6ed7af3c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue @@ -358,7 +358,7 @@ const opearteForm = async(type) =>{ return } if(!row.materialId){ - message.error('零件编码不能为空!') + message.error('物料编码不能为空!') loading.value = false return } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue index f9d781e3..e9ad0960 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue @@ -102,6 +102,7 @@ +