diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 6303cbba..af030a1f 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -66,6 +66,7 @@ public interface ErrorCodeConstants { ErrorCode STORAGE_CHECK_MAT_NOT_EXISTS = new ErrorCode(1_003_008, "盘点物料不存在"); ErrorCode BEFORE_STORAGE_NOT_EXISTS = new ErrorCode(1_003_009, "物料原仓库查询错误"); ErrorCode STORAGE_IN_NOT_EXISTS = new ErrorCode(1_003_010, "入库单不存在"); + ErrorCode PLAN_SUB_DETAIL_NOT_EXISTS = new ErrorCode(1_003_100, "生产计划子项目设计时间明细不存在"); ErrorCode STORAGE_IN_DETAIL_NOT_EXISTS = new ErrorCode(1_003_011, "入库单明细不存在"); ErrorCode STORAGE_INVENTORY_NOT_EXISTS = new ErrorCode(1_003_012, "库存不存在"); /************订单管理***********/ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java index 10b50d03..52e3aa13 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/deliverorder/vo/DeliverOrderSaveReqVO.java @@ -39,11 +39,9 @@ public class DeliverOrderSaveReqVO { private Integer deliverStatus; @Schema(description = "发货人", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "发货人不能为空") private Long deliverPerson; @Schema(description = "发货人电话", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "发货人电话不能为空") private String deliverPersonMobile; @Schema(description = "发货方式", requiredMode = Schema.RequiredMode.REQUIRED) 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 548a24da..4b2cd2ac 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 @@ -1,95 +1,110 @@ -package com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; -import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; -import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; - -import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; - -import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; -import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; - -import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; -import com.chanko.yunxi.mes.module.heli.service.plansubdetail.PlanSubDetailService; - -@Tag(name = "管理后台 - 生产计划子项目设计时间明细") -@RestController -@RequestMapping("/heli/plan-sub-detail") -@Validated -public class PlanSubDetailController { - - @Resource - private PlanSubDetailService planSubDetailService; - - @PostMapping("/create") - @Operation(summary = "创建生产计划子项目设计时间明细") - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:create')") - public CommonResult createPlanSubDetail(@Valid @RequestBody PlanSubDetailSaveReqVO createReqVO) { - return success(planSubDetailService.createPlanSubDetail(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新生产计划子项目设计时间明细") - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:update')") - public CommonResult updatePlanSubDetail(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { - planSubDetailService.updatePlanSubDetail(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除生产计划子项目设计时间明细") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:delete')") - public CommonResult deletePlanSubDetail(@RequestParam("id") Long id) { - planSubDetailService.deletePlanSubDetail(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得生产计划子项目设计时间明细") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") - public CommonResult getPlanSubDetail(@RequestParam("id") Long id) { - PlanSubDetailDO planSubDetail = planSubDetailService.getPlanSubDetail(id); - return success(BeanUtils.toBean(planSubDetail, PlanSubDetailRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得生产计划子项目设计时间明细分页") - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") - public CommonResult> getPlanSubDetailPage(@Valid PlanSubDetailPageReqVO pageReqVO) { - PageResult pageResult = planSubDetailService.getPlanSubDetailPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, PlanSubDetailRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出生产计划子项目设计时间明细 Excel") - @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:export')") - @OperateLog(type = EXPORT) - public void exportPlanSubDetailExcel(@Valid PlanSubDetailPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = planSubDetailService.getPlanSubDetailPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "生产计划子项目设计时间明细.xls", "数据", PlanSubDetailRespVO.class, - BeanUtils.toBean(list, PlanSubDetailRespVO.class)); - } - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; + +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; + +import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; +import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; +import com.chanko.yunxi.mes.module.heli.service.plansubdetail.PlanSubDetailService; + +@Tag(name = "管理后台 - 生产计划子项目设计时间明细") +@RestController +@RequestMapping("/heli/plan-sub-detail") +@Validated +public class PlanSubDetailController { + + @Resource + private PlanSubDetailService planSubDetailService; + + @PostMapping("/create") + @Operation(summary = "创建生产计划子项目设计时间明细") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:create')") + public CommonResult createPlanSubDetail(@Valid @RequestBody PlanSubDetailSaveReqVO createReqVO) { + return success(planSubDetailService.createPlanSubDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新生产计划子项目设计时间明细") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:update')") + public CommonResult updatePlanSubDetail(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { + planSubDetailService.updatePlanSubDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生产计划子项目设计时间明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:delete')") + public CommonResult deletePlanSubDetail(@RequestParam("id") Long id) { + return planSubDetailService.deletePlanSubDetail(id); + } + + @GetMapping("/get") + @Operation(summary = "获得生产计划子项目设计时间明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") + public CommonResult getPlanSubDetail(@RequestParam("id") Long id) { + PlanSubDetailDO planSubDetail = planSubDetailService.getPlanSubDetail(id); + return success(BeanUtils.toBean(planSubDetail, PlanSubDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得生产计划子项目设计时间明细分页") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:query')") + public CommonResult> getPlanSubDetailPage(@Valid PlanSubDetailPageReqVO pageReqVO) { + PageResult pageResult = planSubDetailService.getPlanSubDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PlanSubDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出生产计划子项目设计时间明细 Excel") + @PreAuthorize("@ss.hasPermission('heli:plan-sub-detail:export')") + @OperateLog(type = EXPORT) + public void exportPlanSubDetailExcel(@Valid PlanSubDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = planSubDetailService.getPlanSubDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "生产计划子项目设计时间明细.xls", "数据", PlanSubDetailRespVO.class, + BeanUtils.toBean(list, PlanSubDetailRespVO.class)); + } + @GetMapping("/getSearchRlTs") + @Operation(summary = "查询日期是否是节假日") + public CommonResult getSearchRlTs(@RequestParam("startDateTime") String startDateTime) { + Integer planSubDOList = planSubDetailService.getSearchRlTs(startDateTime); + return success(planSubDOList); + + } + @PostMapping("/modification") + @Operation(summary = "修改生产计划子项目设计时间明细") + public CommonResult modification(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { + return planSubDetailService.modification(updateReqVO); + } + @PostMapping("/insertWork") + @Operation(summary = "插活") + public CommonResult insertWork(@Valid @RequestBody PlanSubDetailSaveReqVO updateReqVO) { + return planSubDetailService.insertWork(updateReqVO); + } +} 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 7f370ad6..a23f7e34 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 @@ -5,6 +5,8 @@ import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -59,5 +61,8 @@ public class PlanSubDetailPageReqVO extends PageParam { @Schema(description = "子项目名称,唯一", example = "张三") private String name; - + @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + @Schema(description = "是否是最大时间段") + private Integer flag; } \ 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/vo/PlanSubDetailSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java index a3d9bfc7..5c81544e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/plansubdetail/vo/PlanSubDetailSaveReqVO.java @@ -1,59 +1,63 @@ -package com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -@Schema(description = "管理后台 - 生产计划子项目设计时间明细新增/修改 Request VO") -@Data -public class PlanSubDetailSaveReqVO { - - @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "6922") - private Long id; - - @Schema(description = "计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13863") - @NotNull(message = "计划id不能为空") - private Long projectPlanId; - - @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11384") - @NotNull(message = "项目id不能为空") - private Long projectId; - - @Schema(description = "子项目id", example = "26785") - private Long projectSubId; - - @Schema(description = "子项目编码") - private String projectSubCode; - - @Schema(description = "设计结束日期") - private LocalDateTime twoDimDate; - - @Schema(description = "设计负责人") - private Long twoDimOwner; - - @Schema(description = "设计开始日期") - private LocalDateTime startTwoDimDate; - - @Schema(description = "设计类型(BLUEPRINT_WORKBLANK-毛坯 BLUEPRINT_2D-2D BLUEPRINT_3D-3D)", example = "1") - private String subType; - - @Schema(description = "结束( 默认0 1结束)") - private Boolean isOverProcess; - - @Schema(description = "时间段顺序") - private Long seqNo; - - @Schema(description = "设计天数") - private Long designNum; - - @Schema(description = "项目编号,唯一") - private String code; - - @Schema(description = "子项目名称,唯一", example = "张三") - private String name; - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo; + +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 生产计划子项目设计时间明细新增/修改 Request VO") +@Data +public class PlanSubDetailSaveReqVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "6922") + private Long id; + + @Schema(description = "计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13863") + @NotNull(message = "计划id不能为空") + private Long projectPlanId; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11384") + @NotNull(message = "项目id不能为空") + private Long projectId; + + @Schema(description = "子项目id", example = "26785") + private Long projectSubId; + + @Schema(description = "子项目编码") + private String projectSubCode; + + @Schema(description = "设计结束日期") + private LocalDateTime twoDimDate; + + @Schema(description = "设计负责人") + private Long twoDimOwner; + + @Schema(description = "设计开始日期") + private LocalDateTime startTwoDimDate; + + @Schema(description = "设计类型(BLUEPRINT_WORKBLANK-毛坯 BLUEPRINT_2D-2D BLUEPRINT_3D-3D)", example = "1") + private String subType; + + @Schema(description = "结束( 默认0 1结束)") + private Boolean isOverProcess; + + @Schema(description = "时间段顺序") + private Long seqNo; + + @Schema(description = "设计天数") + private Long designNum; + + @Schema(description = "项目编号,唯一") + private String code; + + @Schema(description = "子项目名称,唯一", example = "张三") + private String name; + @Schema(description = "是否新增") + private String isAdd; + @Schema(description = "是否新增") + private List list; +} diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java index a54ff0d8..66ebc061 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/ProcessDesignController.java @@ -170,4 +170,12 @@ public class ProcessDesignController { processDesignService.reWork(createReqVO); return success(true); } + @PostMapping("/updateFlag") + @Operation(summary = "修改工艺明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:process-design:query')") + public CommonResult updateFlag(@RequestBody ProcessDesignProgressDO processDesignProgressDO ) { + return success(processDesignService.updateFlag(processDesignProgressDO)); + } + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java index 90b1e5f0..2cb9b0ac 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/projectorder/ProjectOrderController.java @@ -275,8 +275,8 @@ public class ProjectOrderController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('heli:project-order:delete')") public CommonResult deleteProjectOrderSub(@RequestParam("id") Long id) { - projectOrderService.deleteProjectOrderSub(id); - return success(true); + + return projectOrderService.deleteProjectOrderSub(id); } @GetMapping("/project-order-sub/page") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeSaveReqVO.java index d368d564..0e1212da 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/purchaseordermake/vo/PurchaseOrderMakeSaveReqVO.java @@ -42,7 +42,7 @@ public class PurchaseOrderMakeSaveReqVO { private BigDecimal actualPrice; @Schema(description = "单据状态,0 待送审,1已送审,2已审核,3已打回 ,默认是1", example = "2") - private Boolean status; + private Integer status; @Schema(description = "送审人", example = "17514") private Long submitUserId; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/StorageInventoryController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/StorageInventoryController.java index f64b38a7..17e808df 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/StorageInventoryController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/StorageInventoryController.java @@ -1,9 +1,11 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomImportRespVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper; +import io.swagger.v3.oas.annotations.Parameters; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -23,6 +25,8 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.error; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; @@ -33,6 +37,7 @@ import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEn import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO; import com.chanko.yunxi.mes.module.heli.service.storageinventory.StorageInventoryService; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "管理后台 - 库存") @RestController @@ -146,4 +151,26 @@ public class StorageInventoryController { StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper); return success(storageInventoryDO); } + + @PostMapping("/import") + @Operation(summary = "导入库存") + @Parameters({@Parameter(name = "file", description = "Excel 文件", required = true)}) + @OperateLog(type = IMPORT) + public CommonResult> importExcel(HttpServletRequest request, @RequestParam("file") MultipartFile file) { + try { + + return storageInventoryService.importExcel(file); + } catch (Exception e) { + e.printStackTrace(); + return error(500, "文件导入失败: " + e.getMessage()); + } + } + @PostMapping("/saveMaterial") + @Operation(summary = "插入物料") + @Parameters({@Parameter(name = "file", description = "Excel 文件", required = true)}) + @OperateLog(type = IMPORT) + public void saveMaterial(@RequestBody List list) { + storageInventoryService.saveMaterial(list); + + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/vo/StorageInventoryImportExcelVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/vo/StorageInventoryImportExcelVO.java new file mode 100644 index 00000000..96e2676a --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storageinventory/vo/StorageInventoryImportExcelVO.java @@ -0,0 +1,51 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * BOM Excel 导入 VO + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免BOM导入有问题 +public class StorageInventoryImportExcelVO { + + @ExcelProperty("物料号") + private String code; + + @ExcelProperty("物料名称") + private String materialName; + @ExcelProperty("物料简称") + private String shortName; + @ExcelProperty("类型") + private String type; + @ExcelProperty("单位") + private String unit; + @ExcelProperty("零件编码") + private String materialCode; + @ExcelProperty("规格/型号") + private String spec; + @ExcelProperty("品牌") + private String brand; + @ExcelProperty("来源") + private String mainFrom; + + @ExcelProperty("仓库") + private String whName; + + @ExcelProperty("库区") + private String rgName; + @ExcelProperty("库位") + private String pnName; + @ExcelProperty("库存") + private String yardAmount; + @ExcelProperty("平均单价(元)") + private String price; +} 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 65565bb7..b1555934 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 @@ -64,7 +64,7 @@ public class PlanSubDetailDO extends BaseDO { /** * 结束( 默认0 1结束) */ - private Boolean isOverProcess; + private Integer isOverProcess; /** * 时间段顺序 */ @@ -81,5 +81,11 @@ public class PlanSubDetailDO extends BaseDO { * 子项目名称,唯一 */ private String name; + /** + * 子项目名称,唯一 + */ + private String isCha; + @TableField(exist = false) + private Integer flag; } \ 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/plansubdetail/PlanSubDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java index 900da767..1e3bb9bc 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plansubdetail/PlanSubDetailMapper.java @@ -2,12 +2,20 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.plansubdetail; import java.util.*; +import cn.hutool.core.util.ObjectUtil; 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.dal.dataobject.customer.CustomerDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO; +import com.chanko.yunxi.mes.module.heli.enums.ProcessDesignTypeEnum; +import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; +import org.springframework.util.StringUtils; /** * 生产计划子项目设计时间明细 Mapper @@ -18,22 +26,20 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; public interface PlanSubDetailMapper extends BaseMapperX { default PageResult selectPage(PlanSubDetailPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(PlanSubDetailDO::getProjectPlanId, reqVO.getProjectPlanId()) - .eqIfPresent(PlanSubDetailDO::getProjectId, reqVO.getProjectId()) - .eqIfPresent(PlanSubDetailDO::getProjectSubId, reqVO.getProjectSubId()) - .eqIfPresent(PlanSubDetailDO::getProjectSubCode, reqVO.getProjectSubCode()) - .betweenIfPresent(PlanSubDetailDO::getTwoDimDate, reqVO.getTwoDimDate()) - .eqIfPresent(PlanSubDetailDO::getTwoDimOwner, reqVO.getTwoDimOwner()) - .betweenIfPresent(PlanSubDetailDO::getCreateTime, reqVO.getCreateTime()) - .betweenIfPresent(PlanSubDetailDO::getStartTwoDimDate, reqVO.getStartTwoDimDate()) - .eqIfPresent(PlanSubDetailDO::getSubType, reqVO.getSubType()) - .eqIfPresent(PlanSubDetailDO::getIsOverProcess, reqVO.getIsOverProcess()) - .eqIfPresent(PlanSubDetailDO::getSeqNo, reqVO.getSeqNo()) - .eqIfPresent(PlanSubDetailDO::getDesignNum, reqVO.getDesignNum()) - .eqIfPresent(PlanSubDetailDO::getCode, reqVO.getCode()) - .likeIfPresent(PlanSubDetailDO::getName, reqVO.getName()) - .orderByDesc(PlanSubDetailDO::getId)); + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + + query.selectAll(PlanSubDetailDO.class) + .orderByAsc(PlanSubDetailDO::getStartTwoDimDate); + query.eq(ObjectUtil.isNotEmpty(reqVO.getTwoDimOwner()), PlanSubDetailDO::getTwoDimOwner, reqVO.getTwoDimOwner()) + .like(ObjectUtil.isNotEmpty(reqVO.getCode()), PlanSubDetailDO::getCode, reqVO.getCode()) + .like(ObjectUtil.isNotEmpty(reqVO.getName()), PlanSubDetailDO::getName, reqVO.getName()) + .eq(ObjectUtil.isNotEmpty(reqVO.getSubType()), PlanSubDetailDO::getSubType, reqVO.getSubType()) + .and(QueryWrapper -> QueryWrapper.gt(PlanSubDetailDO::getStartTwoDimDate, reqVO.getStartTime()) + .or() + .lt( PlanSubDetailDO::getTwoDimDate, reqVO.getStartTime())) + .in(PlanSubDetailDO::getIsOverProcess,0,2); + + return selectPage(reqVO, query); } } \ 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/plantask/PlanTaskMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java index fd56c7d2..d39efd57 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/plantask/PlanTaskMapper.java @@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.plantask; import java.util.*; import java.util.stream.Collectors; +import cn.hutool.core.util.ObjectUtil; 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; @@ -49,8 +50,17 @@ public interface PlanTaskMapper extends BaseMapperX { .like(!StringUtils.isEmpty(reqVO.getProjectName()), "p.project_name", reqVO.getProjectName()) .like(!StringUtils.isEmpty(reqVO.getPlanNo()), "pl.plan_no", reqVO.getPlanNo()) .like(!StringUtils.isEmpty(reqVO.getProjectSubCode()), "ps.project_sub_code", reqVO.getProjectSubCode()) - .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), "po.name", reqVO.getProjectSubName()) - .eq(reqVO.getStatus() != null, PlanTaskDO::getStatus, reqVO.getStatus()); + .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), "po.name", reqVO.getProjectSubName()); + if (ObjectUtil.isNotEmpty(reqVO.getStatus())){ + if (reqVO.getStatus() == 4){ + query.eq(ProjectOrderDO::getDeliveryStatus, 3); + }else { + query.eq(PlanTaskDO::getStatus, reqVO.getStatus()); + } + } + if (ObjectUtil.isEmpty(reqVO.getStatus())){ + query.ne(ProjectOrderDO::getDeliveryStatus, 3); + } return selectPage(reqVO, query); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderSubMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderSubMapper.java index 2876060f..bbccdaff 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderSubMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/projectorder/ProjectOrderSubMapper.java @@ -68,8 +68,8 @@ public interface ProjectOrderSubMapper extends BaseMapperX { .leftJoin(CompositionDO.class, "b", CompositionDO::getId, ProjectOrderSubDO::getCompositionId) .disableSubLogicDel() .orderByAsc(ProjectOrderSubDO::getId) - .eq(ProjectOrderSubDO::getProjectOrderId, projectOrderId) - .gt(ProjectOrderSubDO::getRemAmount, 0); + .eq(ProjectOrderSubDO::getProjectOrderId, projectOrderId); + return selectList(query); } default int deleteByProjectOrderId(Long projectOrderId) { diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/shopCalendar/ShopCalendarMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/shopCalendar/ShopCalendarMapper.java index 475c6976..0320105e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/shopCalendar/ShopCalendarMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/shopCalendar/ShopCalendarMapper.java @@ -145,4 +145,51 @@ public interface ShopCalendarMapper extends BaseMapperX { } + default List getSearchRlT(String startDateTime){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + try { + query.selectAll(ShopCalendarDO.class); + query.ne(ShopCalendarDO::getIfjiejiari,"true"); + query.eq(ShopCalendarDO::getDates,startDateTime) + + ; + return selectList(query); + } catch (Exception e) { + // 处理异常,例如记录日志或抛出自定义异常 + System.out.println("发生了一个异常: " + e.getMessage()); + } + return selectList(query); + } + + default List getSearchRlTL(LocalDateTime startDateTime){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + try { + query.selectAll(ShopCalendarDO.class); + query.ne(ShopCalendarDO::getIfjiejiari,"true"); + query.eq(ShopCalendarDO::getDates,startDateTime) + + ; + return selectList(query); + } catch (Exception e) { + // 处理异常,例如记录日志或抛出自定义异常 + System.out.println("发生了一个异常: " + e.getMessage()); + } + return selectList(query); + } + + default List getSearchRlTLs(LocalDateTime startDateTime, LocalDateTime endDateTime){ + MPJLambdaWrapper query = new MPJLambdaWrapper<>(); + try { + query.selectAll(ShopCalendarDO.class); + query.ne(ShopCalendarDO::getIfjiejiari,"true"); + query.between(ShopCalendarDO::getDates,startDateTime,endDateTime) + + ; + return selectList(query); + } catch (Exception e) { + // 处理异常,例如记录日志或抛出自定义异常 + System.out.println("发生了一个异常: " + e.getMessage()); + } + return selectList(query); + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java index e94dc614..8b813332 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/deliverorder/DeliverOrderServiceImpl.java @@ -91,7 +91,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { if(OperateTypeEnum.valueOf(createReqVO.getActive()) == OperateTypeEnum.DELIVER){ // 超额校验 - overageDeliverValidate(createReqVO.getSaleOrderIds(), createReqVO.getDeliverOrderSubs()); +// overageDeliverValidate(createReqVO.getSaleOrderIds(), createReqVO.getDeliverOrderSubs()); } // 插入 @@ -151,7 +151,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { updateObj.setDeliverStatus(2); }else { // 超额校验 - overageDeliverValidate(updateReqVO.getSaleOrderIds(), updateReqVO.getDeliverOrderSubs()); +// overageDeliverValidate(updateReqVO.getSaleOrderIds(), updateReqVO.getDeliverOrderSubs()); } deliverOrderMapper.updateById(updateObj); updateReqVO.setDeliverStatus(updateObj.getDeliverStatus()); @@ -211,10 +211,6 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { int historyDeliveredAmount = historySubList == null || historySubList.isEmpty() ? 0 : historySubList.stream().mapToInt(DeliverOrderSubDO::getAmount).sum(); int thisTimeAmount = thisTimeSubsGroupBySaleSubId.get(projectOrderSubDO.getId()).get(0).getAmount(); if (relaAmount-historyDeliveredAmount-thisTimeAmount <0){ - System.out.println("子项目"+projectOrderSubDO.getName()); - System.out.println("已发货"+historyDeliveredAmount); - System.out.println(",本次发货"+thisTimeAmount); - System.out.println(",总数量"+relaAmount); throw new RuntimeException("子项目"+projectOrderSubDO.getName()+"已发货"+historyDeliveredAmount+",本次发货"+thisTimeAmount+",大于总数量"+relaAmount); } } @@ -247,7 +243,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { projectOrderSubMapper.updateById(projectOrderSubDO); } }); - deliverOrderMapper.deleteById(id); + deliverOrderMapper.delete(DeliverOrderDO::getId, id); // 删除子表 deleteDeliverOrderSubByDeliveryOrderId(id); @@ -256,7 +252,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { } } // 删除 - deliverOrderMapper.deleteById(id); + deliverOrderMapper.delete(DeliverOrderDO::getId, id); // 删除子表 deleteDeliverOrderSubByDeliveryOrderId(id); @@ -434,7 +430,7 @@ public class DeliverOrderServiceImpl implements DeliverOrderService { private void updateDeliverOrderSubList(Long deliveryOrderId, List list, @Valid List deliverOrderOtherSubs,String type) { deleteDeliverOrderSubByDeliveryOrderId(deliveryOrderId); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null).setCreator(null).setCreateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 if ("DELIVER".equals(type)){ //计算分摊运费 for (DeliverOrderSubDO deliverOrderOtherSub : list) { diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansub/PlanSubServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansub/PlanSubServiceImpl.java index d856d32c..a281c7ba 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansub/PlanSubServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/plansub/PlanSubServiceImpl.java @@ -1,10 +1,17 @@ package com.chanko.yunxi.mes.module.heli.service.plansub; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.chanko.yunxi.mes.module.heli.controller.admin.shopCalendar.vo.ShopCalendarPageReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; +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.shopCalendar.ShopCalendarDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plansubdetail.PlanSubDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.shopCalendar.ShopCalendarMapper; import jodd.util.StringUtil; import org.springframework.stereotype.Service; @@ -41,6 +48,10 @@ public class PlanSubServiceImpl implements PlanSubService { private ShopCalendarMapper shopCalendarMapper; @Resource private ProcessBomMapper bomMapper; + @Resource + private PlanSubDetailMapper planSubDetailMapper; + @Resource + private ProjectOrderMapper projectOrderMapper; @Override public Long createPlanSub(PlanSubSaveReqVO createReqVO) { // 插入 @@ -72,7 +83,66 @@ public class PlanSubServiceImpl implements PlanSubService { processBomDO.setCode(code); bomMapper.updateById(processBomDO); } - +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(PlanSubDetailDO::getProjectSubId, updateObj.getProjectSubId()); +// planSubDetailMapper.delete( wrapper); +// List planSubDetailDOS = new ArrayList<>(); +// ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(updateObj.getProjectId()); +// if (ObjectUtil.isNotEmpty(updateObj.getStartBlankDate())&&ObjectUtil.isNotEmpty(updateObj.getBlankDate())&&ObjectUtil.isNotEmpty(updateObj.getBlankOwner())){ +// PlanSubDetailDO planSubDetailDO = new PlanSubDetailDO(); +// planSubDetailDO.setProjectPlanId(updateObj.getProjectPlanId()); +// planSubDetailDO.setProjectId(updateObj.getProjectId()); +// planSubDetailDO.setProjectSubId(updateObj.getProjectSubId()); +// planSubDetailDO.setProjectSubCode(updateObj.getProjectSubCode()); +// planSubDetailDO.setSubType("BLUEPRINT_WORKBLANK"); +// planSubDetailDO.setStartTwoDimDate(updateObj.getStartBlankDate()); +// planSubDetailDO.setTwoDimDate(updateObj.getBlankDate()); +// planSubDetailDO.setTwoDimOwner(updateObj.getBlankOwner()); +// planSubDetailDO.setDesignNum(updateObj.getBlankNum()); +// planSubDetailDO.setName(updateObj.getName()); +// planSubDetailDO.setSeqNo(1L); +// if (ObjectUtil.isNotEmpty(projectOrderDO)){ +// planSubDetailDO.setCode(projectOrderDO.getCode()); +// } +// planSubDetailDOS.add(planSubDetailDO); +// } +// if (ObjectUtil.isNotEmpty(updateObj.getStartTwoDimDate())&&ObjectUtil.isNotEmpty(updateObj.getTwoDimDate())&&ObjectUtil.isNotEmpty(updateObj.getTwoDimOwner())){ +// PlanSubDetailDO planSubDetailDO = new PlanSubDetailDO(); +// planSubDetailDO.setProjectPlanId(updateObj.getProjectPlanId()); +// planSubDetailDO.setProjectId(updateObj.getProjectId()); +// planSubDetailDO.setProjectSubId(updateObj.getProjectSubId()); +// planSubDetailDO.setProjectSubCode(updateObj.getProjectSubCode()); +// planSubDetailDO.setSubType("BLUEPRINT_2D"); +// planSubDetailDO.setStartTwoDimDate(updateObj.getStartTwoDimDate()); +// planSubDetailDO.setTwoDimDate(updateObj.getTwoDimDate()); +// planSubDetailDO.setTwoDimOwner(updateObj.getTwoDimOwner()); +// planSubDetailDO.setDesignNum(updateObj.getTwoDimNum()); +// planSubDetailDO.setName(updateObj.getName()); +// planSubDetailDO.setSeqNo(1L); +// if (ObjectUtil.isNotEmpty(projectOrderDO)){ +// planSubDetailDO.setCode(projectOrderDO.getCode()); +// } +// planSubDetailDOS.add(planSubDetailDO); +// } +// if (ObjectUtil.isNotEmpty(updateObj.getStartThreeDimDate())&&ObjectUtil.isNotEmpty(updateObj.getThreeDimDate())&&ObjectUtil.isNotEmpty(updateObj.getThreeDimOwner())){ +// PlanSubDetailDO planSubDetailDO = new PlanSubDetailDO(); +// planSubDetailDO.setProjectPlanId(updateObj.getProjectPlanId()); +// planSubDetailDO.setProjectId(updateObj.getProjectId()); +// planSubDetailDO.setProjectSubId(updateObj.getProjectSubId()); +// planSubDetailDO.setProjectSubCode(updateObj.getProjectSubCode()); +// planSubDetailDO.setSubType("BLUEPRINT_3D"); +// planSubDetailDO.setStartTwoDimDate(updateObj.getStartThreeDimDate()); +// planSubDetailDO.setTwoDimDate(updateObj.getThreeDimDate()); +// planSubDetailDO.setTwoDimOwner(updateObj.getThreeDimOwner()); +// planSubDetailDO.setDesignNum(updateObj.getThreeDimNum()); +// planSubDetailDO.setName(updateObj.getName()); +// planSubDetailDO.setSeqNo(1L); +// if (ObjectUtil.isNotEmpty(projectOrderDO)){ +// planSubDetailDO.setCode(projectOrderDO.getCode()); +// } +// planSubDetailDOS.add(planSubDetailDO); +// } +// planSubDetailMapper.insertBatch(planSubDetailDOS); planSubMapper.updateById(updateObj); } 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 f2adba6b..4a47d292 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 @@ -1,55 +1,62 @@ -package com.chanko.yunxi.mes.module.heli.service.plansubdetail; - -import java.util.*; -import javax.validation.*; -import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; - -/** - * 生产计划子项目设计时间明细 Service 接口 - * - * @author 管理员 - */ -public interface PlanSubDetailService { - - /** - * 创建生产计划子项目设计时间明细 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createPlanSubDetail(@Valid PlanSubDetailSaveReqVO createReqVO); - - /** - * 更新生产计划子项目设计时间明细 - * - * @param updateReqVO 更新信息 - */ - void updatePlanSubDetail(@Valid PlanSubDetailSaveReqVO updateReqVO); - - /** - * 删除生产计划子项目设计时间明细 - * - * @param id 编号 - */ - void deletePlanSubDetail(Long id); - - /** - * 获得生产计划子项目设计时间明细 - * - * @param id 编号 - * @return 生产计划子项目设计时间明细 - */ - PlanSubDetailDO getPlanSubDetail(Long id); - - /** - * 获得生产计划子项目设计时间明细分页 - * - * @param pageReqVO 分页查询 - * @return 生产计划子项目设计时间明细分页 - */ - PageResult getPlanSubDetailPage(PlanSubDetailPageReqVO pageReqVO); - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.service.plansubdetail; + +import java.util.*; +import javax.validation.*; + +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 生产计划子项目设计时间明细 Service 接口 + * + * @author 管理员 + */ +public interface PlanSubDetailService { + + /** + * 创建生产计划子项目设计时间明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPlanSubDetail(@Valid PlanSubDetailSaveReqVO createReqVO); + + /** + * 更新生产计划子项目设计时间明细 + * + * @param updateReqVO 更新信息 + */ + void updatePlanSubDetail(@Valid PlanSubDetailSaveReqVO updateReqVO); + + /** + * 删除生产计划子项目设计时间明细 + * + * @param id 编号 + */ + CommonResult deletePlanSubDetail(Long id); + + /** + * 获得生产计划子项目设计时间明细 + * + * @param id 编号 + * @return 生产计划子项目设计时间明细 + */ + PlanSubDetailDO getPlanSubDetail(Long id); + + /** + * 获得生产计划子项目设计时间明细分页 + * + * @param pageReqVO 分页查询 + * @return 生产计划子项目设计时间明细分页 + */ + PageResult getPlanSubDetailPage(PlanSubDetailPageReqVO pageReqVO); + + Integer getSearchRlTs(String startDateTime); + + CommonResult modification(PlanSubDetailSaveReqVO updateReqVO); + + CommonResult insertWork(PlanSubDetailSaveReqVO updateReqVO); +} 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 9f33a104..fe1773b7 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 @@ -1,11 +1,24 @@ package com.chanko.yunxi.mes.module.heli.service.plansubdetail; +import cn.hutool.core.util.ObjectUtil; +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.dal.dataobject.plansub.PlanSubDO; +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.shopCalendar.ShopCalendarMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; + import com.chanko.yunxi.mes.module.heli.controller.admin.plansubdetail.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansubdetail.PlanSubDetailDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; @@ -28,6 +41,10 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { @Resource private PlanSubDetailMapper planSubDetailMapper; + @Resource + private ShopCalendarMapper shopCalendarMapper; + @Resource + private PlanSubMapper planSubMapper; @Override public Long createPlanSubDetail(PlanSubDetailSaveReqVO createReqVO) { @@ -48,16 +65,81 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { } @Override - public void deletePlanSubDetail(Long id) { + public CommonResult deletePlanSubDetail(Long id) { // 校验存在 validatePlanSubDetailExists(id); - // 删除 - planSubDetailMapper.deleteById(id); + PlanSubDetailDO planSubDetailDO = planSubDetailMapper.selectById(id); + // 获取当前日期时间 + LocalDateTime now = LocalDateTime.now(); + + // 判断 当前时间是否在startTwoDimDate之后 + boolean isGreaterThanCurrent = now.isAfter(planSubDetailDO.getStartTwoDimDate()); + if (isGreaterThanCurrent) return CommonResult.error(400,"当前日期>开始日期,不允许删除"); + if (ObjectUtil.isNotEmpty(planSubDetailDO.getIsOverProcess())&& planSubDetailDO.getIsOverProcess()==1&&planSubDetailDO.getSeqNo()==1){ + return CommonResult.error(400,"该设计已报工,不允许删除"); + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanSubDetailDO::getProjectSubId,planSubDetailDO.getProjectSubId()); + wrapper.eq(PlanSubDetailDO::getSubType,planSubDetailDO.getSubType()); + wrapper.gt(PlanSubDetailDO::getSeqNo,planSubDetailDO.getSeqNo()); + if (planSubDetailMapper.selectCount(wrapper)>0) return CommonResult.error(400,"请先删除序列号最大的派工时间数据 "); + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(PlanSubDO::getProjectSubId,planSubDetailDO.getProjectSubId()); + if (planSubDetailDO.getSeqNo()==1){ + if ("BLUEPRINT_WORKBLANK".equals(planSubDetailDO.getSubType())){ + lambdaUpdateWrapper.set(PlanSubDO::getStartBlankDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getBlankDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getBlankOwner,null); + lambdaUpdateWrapper.set(PlanSubDO::getBlankNum,0); + }else if ("BLUEPRINT_2D".equals(planSubDetailDO.getSubType())){ + lambdaUpdateWrapper.set(PlanSubDO::getStartTwoDimDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getTwoDimDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getTwoDimOwner,null); + lambdaUpdateWrapper.set(PlanSubDO::getTwoDimNum,0); + }else { + lambdaUpdateWrapper.set(PlanSubDO::getStartThreeDimDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getThreeDimDate,null); + lambdaUpdateWrapper.set(PlanSubDO::getThreeDimOwner,null); + lambdaUpdateWrapper.set(PlanSubDO::getThreeDimNum,0); + } + }else { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(PlanSubDetailDO::getProjectSubId,planSubDetailDO.getProjectSubId()); + lambdaQueryWrapper.eq(PlanSubDetailDO::getSubType,planSubDetailDO.getSubType()); + lambdaQueryWrapper.ne(PlanSubDetailDO::getId,planSubDetailDO.getId()); + lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getSeqNo); + List planSubDetailDOS = planSubDetailMapper.selectList(lambdaQueryWrapper); + if (ObjectUtil.isNotEmpty(planSubDetailDOS)){ + Long num = planSubDetailDOS.stream() + .filter(Objects::nonNull) + .map(PlanSubDetailDO::getDesignNum) + .filter(Objects::nonNull) + .reduce(0L,Long::sum); + LocalDateTime startTwoDimDate = planSubDetailDOS.get(0).getStartTwoDimDate(); + LocalDateTime twoDimDate = planSubDetailDOS.get(planSubDetailDOS.size()-1).getTwoDimDate(); + if ("BLUEPRINT_WORKBLANK".equals(planSubDetailDO.getSubType())){ + lambdaUpdateWrapper.set(PlanSubDO::getStartBlankDate,startTwoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getBlankDate,twoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getBlankNum,num); + }else if ("BLUEPRINT_2D".equals(planSubDetailDO.getSubType())){ + lambdaUpdateWrapper.set(PlanSubDO::getStartTwoDimDate,startTwoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getTwoDimDate,twoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getTwoDimNum,num); + }else { + lambdaUpdateWrapper.set(PlanSubDO::getStartThreeDimDate,startTwoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getThreeDimDate,twoDimDate); + lambdaUpdateWrapper.set(PlanSubDO::getThreeDimNum,num); + } + } + } + planSubMapper.update(lambdaUpdateWrapper); + planSubDetailMapper.delete(new LambdaUpdateWrapper().eq(PlanSubDetailDO::getId,id)); + return CommonResult.success(true); } private void validatePlanSubDetailExists(Long id) { if (planSubDetailMapper.selectById(id) == null) { -// throw exception(PLAN_SUB_DETAIL_NOT_EXISTS); + throw exception(PLAN_SUB_DETAIL_NOT_EXISTS); } } @@ -65,10 +147,246 @@ public class PlanSubDetailServiceImpl implements PlanSubDetailService { public PlanSubDetailDO getPlanSubDetail(Long id) { return planSubDetailMapper.selectById(id); } - @Override public PageResult getPlanSubDetailPage(PlanSubDetailPageReqVO pageReqVO) { - return planSubDetailMapper.selectPage(pageReqVO); + PageResult planSubDetailDOPageResult = planSubDetailMapper.selectPage(pageReqVO); + List list = planSubDetailDOPageResult.getList(); + for (PlanSubDetailDO planSubDetailDO : list) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanSubDetailDO::getProjectSubId,planSubDetailDO.getProjectSubId()); + wrapper.eq(PlanSubDetailDO::getSubType,planSubDetailDO.getSubType()); + wrapper.gt(PlanSubDetailDO::getSeqNo,planSubDetailDO.getSeqNo()); + if (planSubDetailMapper.selectCount(wrapper)>0) { + planSubDetailDO.setFlag(0); + }else { + planSubDetailDO.setFlag(1); + } + } + planSubDetailDOPageResult.setList(list); + return planSubDetailDOPageResult; } + @Override + public Integer getSearchRlTs(String startDateTime) { + List shopCalendarDOS =shopCalendarMapper.getSearchRlT(startDateTime); + int a = shopCalendarDOS.size(); + return a; + } + + @Override + public CommonResult modification(PlanSubDetailSaveReqVO updateReqVO) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); + wrapper.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); + wrapper.gt(PlanSubDetailDO::getSeqNo,updateReqVO.getSeqNo()); + if (planSubDetailMapper.selectCount(wrapper)>0) return CommonResult.error(400,"该子项目存在多时间段派工,不允许从中间修改!"); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); + queryWrapper.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + queryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); + } + List planSubDetailDOS = planSubDetailMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(planSubDetailDOS)) { + for (PlanSubDetailDO planSubDetailDO : planSubDetailDOS) { + LocalDateTime reqStart = updateReqVO.getStartTwoDimDate(); + LocalDateTime reqEnd = updateReqVO.getTwoDimDate(); + LocalDateTime existStart = planSubDetailDO.getStartTwoDimDate(); + LocalDateTime existEnd = planSubDetailDO.getTwoDimDate(); + // 判断请求时间段是否与已有时间段有重叠 + boolean hasOverlap = !reqEnd.isBefore(existStart) && !reqStart.isAfter(existEnd); + if (hasOverlap) { + return CommonResult.error(400, "该子项目设计时间存在交叉,请确认!"); + } + } + } + if (ObjectUtil.isNotEmpty(updateReqVO.getIsAdd())&&"1".equals(updateReqVO.getIsAdd())){ + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(PlanSubDetailDO::getProjectSubId,updateReqVO.getProjectSubId()); + wrapper1.eq(PlanSubDetailDO::getSubType,updateReqVO.getSubType()); + String type="BLUEPRINT_WORKBLANK".equals(updateReqVO.getSubType())?"毛坯":"BLUEPRINT_2D".equals(updateReqVO.getSubType())?"2D":"3D"; + if (planSubDetailMapper.selectCount(wrapper1)>0) return CommonResult.error(400,"该子项目"+updateReqVO.getName()+" 设计类型"+type+" 存在派工数据,请确认!"); + } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(PlanSubDetailDO::getIsOverProcess,0,2); + lambdaQueryWrapper.eq(PlanSubDetailDO::getTwoDimOwner,updateReqVO.getTwoDimOwner()); + lambdaQueryWrapper.ge(PlanSubDetailDO::getStartTwoDimDate,updateReqVO.getStartTwoDimDate()); + lambdaQueryWrapper.orderByAsc(PlanSubDetailDO::getStartTwoDimDate); + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + lambdaQueryWrapper.ne(PlanSubDetailDO::getId,updateReqVO.getId()); + } + List list = planSubDetailMapper.selectList(lambdaQueryWrapper); + if (ObjectUtil.isEmpty( list) ||updateReqVO.getTwoDimDate().isBefore(list.get(0).getStartTwoDimDate())){ + if (ObjectUtil.isNotEmpty(updateReqVO.getId())){ + planSubDetailMapper.delete(PlanSubDetailDO::getId,updateReqVO.getId()); + } + PlanSubDetailDO planSubDetailDO = new PlanSubDetailDO(); + planSubDetailDO.setProjectPlanId(updateReqVO.getProjectPlanId()); + planSubDetailDO.setProjectId(updateReqVO.getProjectId()); + planSubDetailDO.setProjectSubId(updateReqVO.getProjectSubId()); + planSubDetailDO.setProjectSubCode(updateReqVO.getProjectSubCode()); + planSubDetailDO.setTwoDimDate(updateReqVO.getTwoDimDate()); + planSubDetailDO.setTwoDimOwner(updateReqVO.getTwoDimOwner()); + planSubDetailDO.setStartTwoDimDate(updateReqVO.getStartTwoDimDate()); + planSubDetailDO.setSubType(updateReqVO.getSubType()); + planSubDetailDO.setIsOverProcess(0); + planSubDetailDO.setSeqNo(1L); + planSubDetailDO.setDesignNum(updateReqVO.getDesignNum()); + planSubDetailDO.setCode(updateReqVO.getCode()); + return CommonResult.success(true); + } + updateReqVO.setList( list); + return CommonResult.success(updateReqVO); + } + + @Override + public CommonResult insertWork(PlanSubDetailSaveReqVO updateReqVO) { + List list = updateReqVO.getList(); + if (isAfterOrEqual(updateReqVO.getStartTwoDimDate(), list.get(0).getTwoDimDate())&&isAfterOrEqual(list.get(0).getStartTwoDimDate(),updateReqVO.getTwoDimDate())){ + PlanSubDetailDO planSubDetailDO = list.get(0); + LocalDateTime localDateTime = addDays(updateReqVO.getTwoDimDate(), 1L); + Integer searchRlTs = getSearchRlTs(localDateTime); + int maxAttempts = 365; // 最多检查一年 + int attempts = 0; + while (searchRlTs>0 && attempts < maxAttempts){ + localDateTime = addDays(localDateTime, 1L); + searchRlTs = getSearchRlTs(localDateTime); + attempts++; + } + if (attempts >= maxAttempts) { + // 处理找不到合适日期的情况 + return CommonResult.error(400,"在一年内未找到合适的日期"); + } + int max = 365; // 最多检查一年 + int count = 0; + planSubDetailDO.setStartTwoDimDate(localDateTime); + Long designNum = planSubDetailDO.getDesignNum(); + LocalDateTime twoDimDate = planSubDetailDO.getTwoDimDate(); + LocalDateTime dateTime = addDays(twoDimDate, designNum); + Integer rlTs = getSearchRlTs(localDateTime, dateTime); + while (rlTs= max) { + // 处理找不到合适日期的情况 + return CommonResult.error(400,"在一年内未找到合适的日期"); + } + planSubDetailDO.setTwoDimDate(dateTime); + list.add(0,planSubDetailDO); + PlanSubDetailDO subDetailDO = new PlanSubDetailDO(); + subDetailDO.setProjectPlanId(updateReqVO.getProjectPlanId()); + subDetailDO.setProjectId(updateReqVO.getProjectId()); + subDetailDO.setProjectSubId(updateReqVO.getProjectSubId()); + subDetailDO.setProjectSubCode(updateReqVO.getProjectSubCode()); + subDetailDO.setTwoDimDate(planSubDetailDO.getTwoDimDate()); + subDetailDO.setTwoDimOwner(updateReqVO.getTwoDimOwner()); + subDetailDO.setStartTwoDimDate(updateReqVO.getStartTwoDimDate()); + subDetailDO.setSubType(updateReqVO.getSubType()); + subDetailDO.setIsOverProcess(0); + subDetailDO.setSeqNo(1L); + subDetailDO.setDesignNum(updateReqVO.getDesignNum()); + list.add(subDetailDO); + + }else if (isGreaterOrEqual(list.get(0).getStartTwoDimDate(),updateReqVO.getStartTwoDimDate())&&isAfterOrEqual(updateReqVO.getStartTwoDimDate(),list.get(0).getTwoDimDate())){ + PlanSubDetailDO planSubDetailDO = list.get(0); + // 拷贝两份 + PlanSubDetailDO copy1 = BeanUtils.toBean(planSubDetailDO, PlanSubDetailDO.class); + PlanSubDetailDO copy2 = BeanUtils.toBean(updateReqVO, PlanSubDetailDO.class); + copy2.setIsCha("Y"); + planSubDetailDO.setTwoDimDate(subtractDays(planSubDetailDO.getTwoDimDate(), 1L)); + planSubDetailDO.setDesignNum(getSearchRlTs(planSubDetailDO.getStartTwoDimDate(), planSubDetailDO.getTwoDimDate()).longValue()); + copy1.setStartTwoDimDate(addDays(copy2.getTwoDimDate(),1L)); + long l = copy1.getDesignNum() - planSubDetailDO.getDesignNum(); + LocalDateTime dateTime = addDays(copy1.getStartTwoDimDate(), l); + Integer rlTs = getSearchRlTs(copy1.getStartTwoDimDate(), dateTime); + int max = 365; // 最多检查一年 + int count = 0; + while (rlTs= max) { + // 处理找不到合适日期的情况 + return CommonResult.error(400,"在一年内未找到合适的日期"); + } + copy1.setTwoDimDate(dateTime); + copy1.setDesignNum(l); + list.add(0,copy1); + list.add(0,copy2); + list.add(0,planSubDetailDO); + for (int i = 3; i < list.size(); i++) { + if (isAfterOrEqual(list.get(i).getStartTwoDimDate(), list.get(i-1).getTwoDimDate())){ + PlanSubDetailDO subDetailDO = list.get(i); + LocalDateTime previous = list.get(i - 1).getTwoDimDate(); + LocalDateTime localDateTime = addDays(previous, 1L); + Integer searchRlTs = getSearchRlTs(localDateTime); + int maxAttempts = 365; // 最多检查一年 + int attempts = 0; + while (searchRlTs>0 && attempts < maxAttempts){ + localDateTime = addDays(localDateTime, 1L); + searchRlTs = getSearchRlTs(localDateTime); + attempts++; + } + if (attempts >= maxAttempts) { + // 处理找不到合适日期的情况 + return CommonResult.error(400,"在一年内未找到合适的日期"); + } + int maxNumber = 365; // 最多检查一年 + int number = 0; + subDetailDO.setStartTwoDimDate(localDateTime); + Long designNum = subDetailDO.getDesignNum(); + LocalDateTime twoDimDate = subDetailDO.getTwoDimDate(); + LocalDateTime date = addDays(twoDimDate, designNum); + Integer rlT = getSearchRlTs(localDateTime, date); + while (rlT= maxNumber) { + // 处理找不到合适日期的情况 + return CommonResult.error(400,"在一年内未找到合适的日期"); + } + subDetailDO.setTwoDimDate(date); + } + } + } + List sortedList = list.stream() + .sorted(Comparator.comparing( + PlanSubDetailDO::getStartTwoDimDate, + Comparator.nullsLast(Comparator.naturalOrder()) + )) + .collect(Collectors.toList()); + updateReqVO.setList(sortedList); + return CommonResult.success(updateReqVO); + } + public Integer getSearchRlTs(LocalDateTime startDateTime) { + List shopCalendarDOS =shopCalendarMapper.getSearchRlTL(startDateTime); + int a = shopCalendarDOS.size(); + return a; + } + public Integer getSearchRlTs(LocalDateTime startDateTime,LocalDateTime endDateTime) { + List shopCalendarDOS =shopCalendarMapper.getSearchRlTLs(startDateTime,endDateTime); + int a = shopCalendarDOS.size(); + return a; + } + public boolean isGreaterOrEqual(LocalDateTime time1, LocalDateTime time2) { + return time1.isBefore(time2); + } + public boolean isAfterOrEqual(LocalDateTime time1, LocalDateTime time2) { + return !time1.isAfter(time2); + } + public LocalDateTime addDays(LocalDateTime dateTime, Long days) { + return dateTime.plusDays(days); + } + public LocalDateTime subtractDays(LocalDateTime dateTime, Long days) { + return dateTime.minusDays(days); + } } + diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignService.java index efc99e7a..f1a61118 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignService.java @@ -89,4 +89,5 @@ public interface ProcessDesignService { PageResult getProcessDesignPages(ProcessDesignPageReqVO pageReqVO); PageResult getExportExcel(ProcessDesignPageReqVO pageReqVO); + Boolean updateFlag(ProcessDesignProgressDO processDesignProgressDO); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java index fde93607..b168e39b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java @@ -273,7 +273,7 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { wrapper.eq(PlanSubDetailDO::getProjectId, processDesignDO.getProjectId()); wrapper.eq(PlanSubDetailDO::getProjectSubId, processDesignDO.getProjectSubId()); wrapper.eq(PlanSubDetailDO::getSubType, processDesignDO.getProcessDesignType()); - wrapper.set(PlanSubDetailDO::getIsOverProcess, 2); + wrapper.set(PlanSubDetailDO::getIsOverProcess, 1); planSubDetailMapper.update(wrapper); return processDesignMapper.over(id); } @@ -734,6 +734,18 @@ public class ProcessDesignServiceImpl implements ProcessDesignService { } + @Override + public Boolean updateFlag(ProcessDesignProgressDO processDesignProgressDO) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(ProcessDesignProgressDO::getId, processDesignProgressDO.getId()); + wrapper.set(ProcessDesignProgressDO::getBeginTime, processDesignProgressDO.getBeginTime()); + wrapper.set(ProcessDesignProgressDO::getEndTime, processDesignProgressDO.getEndTime()); + wrapper.set(ProcessDesignProgressDO::getWorkTime, processDesignProgressDO.getWorkTime()); + wrapper.set(ProcessDesignProgressDO::getRemark, processDesignProgressDO.getRemark()); + processDesignProgressMapper.update(wrapper); + return true; + } + private void createProcessDesignProgressList(Long processDesignId, List list) { list.forEach(o -> o.setProcessDesignId(processDesignId)); // 按创建时间排序 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderService.java index 3fce3fb7..b363b639 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/projectorder/ProjectOrderService.java @@ -1,5 +1,6 @@ package com.chanko.yunxi.mes.module.heli.service.projectorder; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderCostPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.projectorder.vo.ProjectOrderPageReqVO; @@ -81,7 +82,7 @@ public interface ProjectOrderService { */ void createProjectOrderSnapshot(ProjectOrderSaveReqVO operateReqVO); void updateProjectOrderPrice(ProjectOrderSaveReqVO updateReqVO); - void deleteProjectOrderSub(Long id); + CommonResult deleteProjectOrderSub(Long id); PageResult getProjectOrderSubPage(ProjectOrderSubPageReqVO pageReqVO); 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 5b264276..3fff11fb 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 @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; 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.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum; @@ -18,12 +19,18 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthing import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO; +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.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderSubMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.orderys.OrderYsMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper; import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum; @@ -101,9 +108,15 @@ public class ProjectOrderServiceImpl implements ProjectOrderService { @Autowired private ProcessBomService processBomService; @Autowired + private ProcessBomMapper processBomMapper; + @Autowired private AttentiontodoService attentiontodoService; @Autowired private bdgzsomthingMapper bdgzsomthingMapper; + @Resource + private ProcessBomDetailMapper processBomDetailDOMapper; + @Resource + private PlanSubMapper planSubMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -174,8 +187,26 @@ public class ProjectOrderServiceImpl implements ProjectOrderService { } @Override - public void deleteProjectOrderSub(Long id) { + public CommonResult deleteProjectOrderSub(Long id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessBomDO::getProjectSubId,id); + List processBomDOS = processBomMapper.selectList(queryWrapper); + if (ObjectUtil.isNotEmpty(processBomDOS)){ + List collect = processBomDOS.stream().map(processBomDO -> processBomDO.getId()).collect(Collectors.toList()); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProcessBomDetailDO::getBomId,collect); + if (processBomDetailDOMapper.selectCount(lambdaQueryWrapper)>0){ + return CommonResult.error(400,"子项目已生成BOM明细,不允许删除"); + } + } + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(ProcessBomDO::getProjectSubId,id); + processBomMapper.delete(lambdaUpdateWrapper); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(PlanSubDO::getProjectSubId,id); + planSubMapper.delete( wrapper); projectOrderSubMapper.deleteById(id); + return CommonResult.success(true); } @Override @@ -638,9 +669,11 @@ public class ProjectOrderServiceImpl implements ProjectOrderService { List insertList = list.stream().filter(o -> o.getId() == null).collect(Collectors.toList()); insertList.forEach(o -> o.setRemAmount(o.getAmount())); for (ProjectOrderSubDO projectOrderSubDO : updateList) { - ProjectOrderSubDO subDO = projectOrderSubMapper.selectById(projectOrderSubDO.getId()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProjectOrderSubDO::getId,projectOrderSubDO.getId()); + ProjectOrderSubDO subDO = projectOrderSubMapper.selectOne(wrapper); if (ObjectUtil.isNotEmpty(subDO)){ - projectOrderSubDO.setRemAmount(subDO.getRemAmount()+(projectOrderSubDO.getAmount()-subDO.getAmount())); + projectOrderSubDO.setRemAmount(subDO.getRemAmount()+(projectOrderSubDO.getAmount()-subDO.getAmount())); } } if(!updateList.isEmpty()) projectOrderSubMapper.updateBatch(updateList); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryService.java index 89598998..21d7c44e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryService.java @@ -1,12 +1,16 @@ package com.chanko.yunxi.mes.module.heli.service.storageinventory; +import java.io.IOException; import java.util.*; import javax.validation.*; + +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; /** * 库存 Service 接口 @@ -59,4 +63,8 @@ public interface StorageInventoryService { StorageInventoryDO selectNowByMatPnId(Long matId, Long pnId); PageResult realTimeInventory(StorageInventoryPageReqVO pageReqVO); + + CommonResult> importExcel(MultipartFile file) throws IOException; + + void saveMaterial(List list); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java index 53ba83d6..0c8c3263 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storageinventory/StorageInventoryServiceImpl.java @@ -1,14 +1,46 @@ package com.chanko.yunxi.mes.module.heli.service.storageinventory; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chanko.yunxi.mes.framework.common.enums.BomEditStatusEnum; +import com.chanko.yunxi.mes.framework.common.enums.StatusEnum; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomImportExcelVO; import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO; +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.plantaskbom.PlanTaskBomDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO; +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.rg.RgDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.pn.PnMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.rg.RgMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.warehouse.WarehouseMapper; +import com.chanko.yunxi.mes.module.heli.service.composition.CompositionService; +import com.chanko.yunxi.mes.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.chanko.yunxi.mes.module.system.dal.dataobject.dict.DictDataDO; +import com.chanko.yunxi.mes.module.system.dal.mysql.dict.DictDataMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; +import java.math.BigDecimal; +import java.rmi.RemoteException; +import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; + import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.vo.*; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; @@ -16,6 +48,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper; +import org.springframework.web.multipart.MultipartFile; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; @@ -31,7 +64,18 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { @Resource private StorageInventoryMapper storageInventoryMapper; - + @Resource + private DictDataMapper dictDataMapper; + @Resource + private WarehouseMapper warehouseMapper; + @Resource + private RgMapper rgMapper; + @Resource + private PnMapper pnMapper; + @Resource + private MaterialMapper materialMapper; + @Resource + private StorageLogMapper storageLogMapper; @Override public Long createStorageInventory(StorageInventorySaveReqVO createReqVO) { // 插入 @@ -107,4 +151,321 @@ public class StorageInventoryServiceImpl implements StorageInventoryService { return storageInventoryMapper.realTimeInventory(pageReqVO); } -} + @Override + public CommonResult> importExcel(MultipartFile file) throws IOException { + // 校验文件格式 + if (!file.getOriginalFilename().endsWith(".xlsx") && !file.getOriginalFilename().endsWith(".xls")) { + throw exception(EXCEL_FILE_FORMAT_ERROR); + } + // 读取Excel文件并转换为VO对象列表 + List list = ExcelUtils.read(file, StorageInventoryImportExcelVO.class); + List errorMessages = new ArrayList<>(); + List errorMessages1 = new ArrayList<>(); + List errorMessages2 = new ArrayList<>(); + List errorMessages3 = new ArrayList<>(); + List errorMessages4 = new ArrayList<>(); + List errorMessages5= new ArrayList<>(); + List errorMessages6 = new ArrayList<>(); + List errorMessages7 = new ArrayList<>(); + List errorMessages8 = new ArrayList<>(); + List errorMessages9 = new ArrayList<>(); + List errorMessages10 = new ArrayList<>(); + HashMap unitDictData = getUnitDictData(); + HashMap TypeDictData = getTypeDictData(); + HashMap OriginalDictData = getOriginalDictData(); + List storageInventoryDOS = new ArrayList<>(); + List dataList = new ArrayList<>(); + // 新增:重复组合追踪器 + Map duplicateTracker = new HashMap<>(); + List logs = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + StorageInventoryDO storageInventoryDO = new StorageInventoryDO(); + StorageLogDO logDO = new StorageLogDO(); + logDO.setStockType(1); + logDO.setGoodsType(1); + StorageInventoryImportExcelVO vo = list.get(i); + String code = null; + Long whId = null; + Long rgId = null; + Long pnId = null; + if (ObjectUtil.isNotEmpty(vo.getYardAmount())) { + if (!vo.getYardAmount().matches("[0-9]+")) { + errorMessages.add("第" + (i + 1) + "行库存数量必须是数字"); + } else { + storageInventoryDO.setYardAmount(new BigDecimal(vo.getYardAmount())); + logDO.setStorageOkQty(new BigDecimal(vo.getYardAmount())); + } + } + if (ObjectUtil.isNotEmpty(vo.getPrice())) { + if (!vo.getPrice().matches("[0-9]+")) { + errorMessages1.add("第" + (i + 1) + "行平均单价必须是数字"); + } else { + storageInventoryDO.setPrice(new BigDecimal(vo.getPrice())); + } + } + if (ObjectUtil.isEmpty(vo.getCode())) { + errorMessages2.add("第" + (i + 1) + "行物料号不能为空"); + } else { + code = vo.getCode(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MaterialDO::getCode, vo.getCode()); + MaterialDO materialDO = materialMapper.selectOne(queryWrapper); + if (ObjectUtil.isEmpty(materialDO)) { + boolean hasDuplicate = dataList.stream() + .anyMatch(item -> Objects.equals(item.getCode(), vo.getCode())); + + if (!hasDuplicate) { + dataList.add(vo); + } + } else { + storageInventoryDO.setMaterialId(materialDO.getId()); + logDO.setMatId(materialDO.getId()); + storageInventoryDO.setBoomCode(vo.getCode()); + } + + } + if (ObjectUtil.isEmpty(vo.getMaterialName())) { + errorMessages3.add("第" + (i + 1) + "行物料名称不能为空"); + } else { + storageInventoryDO.setBoomName(vo.getMaterialName()); + } + if (ObjectUtil.isEmpty(vo.getType())) { + errorMessages4.add("第" + (i + 1) + "行类型不能为空"); + } else { + if (TypeDictData.get(vo.getType()) == null) { + errorMessages4.add("第" + (i + 1) + "行类型" + vo.getType() + "在键值中不存在,请联系系统管理人员"); + } + } + if (ObjectUtil.isEmpty(vo.getUnit())) { + errorMessages5.add("第" + (i + 1) + "行单位不能为空"); + } else { + if (unitDictData.get(vo.getUnit()) == null) { + errorMessages5.add("第" + (i + 1) + "行单位" + vo.getUnit() + "在键值中不存在,请联系系统管理人员"); + } else { + storageInventoryDO.setBoomUnit(unitDictData.get(vo.getUnit())); + } + } + if (ObjectUtil.isEmpty(vo.getMainFrom())) { + errorMessages6.add("第" + (i + 1) + "行来源不能为空"); + } else { + if (OriginalDictData.get(vo.getMainFrom()) == null) { + errorMessages6.add("第" + (i + 1) + "行来源" + vo.getMainFrom() + "在键值中不存在,请联系系统管理人员"); + } + } + if (ObjectUtil.isEmpty(vo.getWhName())) { + errorMessages7.add("第" + (i + 1) + "行仓库不能为空"); + } else { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WarehouseDO::getWhName, vo.getWhName()); + lambdaQueryWrapper.eq(WarehouseDO::getWhStatus, 1); + WarehouseDO warehouseDO = warehouseMapper.selectOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(warehouseDO)) { + errorMessages7.add("第" + (i + 1) + "行仓库" + vo.getWhName() + "不存在或未启用,请确认"); + } else { + logDO.setWhId(warehouseDO.getId()); + whId = warehouseDO.getId(); + storageInventoryDO.setWhId(warehouseDO.getId()); + } + } + if (ObjectUtil.isEmpty(vo.getRgName())) { + errorMessages8.add("第" + (i + 1) + "行库区不能为空"); + } else { + if (ObjectUtil.isNotEmpty(whId)) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(RgDO::getRgName, vo.getRgName()); + lambdaQueryWrapper.eq(RgDO::getRgStatus, 1); + lambdaQueryWrapper.eq(RgDO::getWhId, whId); + RgDO rgDO = rgMapper.selectOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(rgDO)) { + errorMessages8.add("第" + (i + 1) + "行库区" + vo.getRgName() + "不存在或未启用,请确认"); + } else { + logDO.setRgId(rgDO.getId()); + rgId = rgDO.getId(); + storageInventoryDO.setRgId(rgDO.getId()); + } + } + } + if (ObjectUtil.isEmpty(vo.getPnName())) { + errorMessages9.add("第" + (i + 1) + "行库位不能为空"); + } else { + if (ObjectUtil.isNotEmpty(whId) && ObjectUtil.isNotEmpty(rgId)) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(PnDO::getPnName, vo.getPnName()); + lambdaQueryWrapper.eq(PnDO::getPnStatus, 1); + lambdaQueryWrapper.eq(PnDO::getRgId, rgId); + lambdaQueryWrapper.eq(PnDO::getWhId, whId); + PnDO pnDO = pnMapper.selectOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(pnDO)) { + errorMessages9.add("第" + (i + 1) + "行库位" + vo.getPnName() + "不存在或未启用,请确认"); + } else { + logDO.setPnId(pnDO.getId()); + pnId = pnDO.getId(); + storageInventoryDO.setPnId(pnDO.getId()); + } + } + } + if (ObjectUtil.isNotEmpty(vo.getShortName())) { + storageInventoryDO.setShortName(vo.getShortName()); + } + if (ObjectUtil.isNotEmpty(vo.getSpec())) { + storageInventoryDO.setBoomSpec(vo.getSpec()); + } + if (ObjectUtil.isNotEmpty(code) && ObjectUtil.isNotEmpty(whId) && ObjectUtil.isNotEmpty(rgId) && ObjectUtil.isNotEmpty(pnId)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StorageInventoryDO::getBoomCode, code); + wrapper.eq(StorageInventoryDO::getWhId, whId); + wrapper.eq(StorageInventoryDO::getRgId, rgId); + wrapper.eq(StorageInventoryDO::getPnId, pnId); + StorageInventoryDO selectOne = storageInventoryMapper.selectOne(wrapper); + if (ObjectUtil.isNotEmpty(selectOne)) { + errorMessages10.add("第" + (i + 1) + "行物料" + vo.getMaterialName() + "在库存表中已存在,请确认"); + } + } + if (ObjectUtil.isNotEmpty(code) && ObjectUtil.isNotEmpty(whId) + && ObjectUtil.isNotEmpty(rgId) && ObjectUtil.isNotEmpty(pnId)) { + String compositeKey = String.format("%d_%d_%d_%s", whId, rgId, pnId, code); + String existingRows = duplicateTracker.get(compositeKey); + if (existingRows != null) { // ✅ 防止 NPE + errorMessages2.add("第" + (i + 1) + "行物料" + vo.getMaterialName() + "重复,请确认"); + } else { + duplicateTracker.put(compositeKey, vo.getCode()); + } + storageInventoryDOS.add(storageInventoryDO); + logs.add(logDO); + } + } + if (!errorMessages.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages1.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages1); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages2.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages2); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages3.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages3); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages4.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages4); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages5.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages5); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages6.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages6); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages7.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages7); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages8.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages8); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages9.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages9); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + if (!errorMessages10.isEmpty()) { + + String joinedErrors = String.join(System.lineSeparator(), errorMessages10); + throw new RuntimeException(joinedErrors); // 若仍需抛异常可改用此方式 + } + + if (ObjectUtil.isNotEmpty(dataList)) { + return CommonResult.success(dataList); + } + storageInventoryMapper.insertBatch(storageInventoryDOS); + storageLogMapper.insertBatch(logs); + return CommonResult.success(null); + + } + + @Override + public void saveMaterial(List list) { + ArrayList materialDOS = new ArrayList<>(); + HashMap unitDictData = getUnitDictData(); + HashMap TypeDictData = getTypeDictData(); + HashMap OriginalDictData = getOriginalDictData(); + for (StorageInventoryImportExcelVO vo : list) { + MaterialDO materialDO = new MaterialDO(); + materialDO.setCode(vo.getCode()); + materialDO.setName(vo.getMaterialName()); + materialDO.setBrand(vo.getBrand()); + materialDO.setSpec(vo.getSpec()); + if (ObjectUtil.isNotEmpty(vo.getShortName())){ + materialDO.setShortName(vo.getShortName()); + } + if (ObjectUtil.isNotEmpty(unitDictData.get(vo.getUnit()))){ + materialDO.setUnit(unitDictData.get(vo.getUnit())); + } + if (ObjectUtil.isNotEmpty(TypeDictData.get(vo.getType()))){ + materialDO.setMaterialType(TypeDictData.get(vo.getType())); + } + if (ObjectUtil.isNotEmpty(OriginalDictData.get(vo.getMainFrom()))){ + materialDO.setMainFrom(Integer.valueOf(OriginalDictData.get(vo.getMainFrom()))); + } + materialDOS.add(materialDO); + } + materialMapper.insertBatch(materialDOS); + } + + public HashMap getUnitDictData() { + //获取单位字典 + DictDataPageReqVO dictDataPageReqVO = new DictDataPageReqVO(); + dictDataPageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + dictDataPageReqVO.setDictType("heli_material_unit"); + PageResult dictDataDOPageResult = dictDataMapper.selectPage(dictDataPageReqVO); + List dictList = dictDataDOPageResult.getList(); + HashMap unitMap = new HashMap<>(); + for (DictDataDO dictDataDO : dictList) { + unitMap.put(dictDataDO.getLabel(), dictDataDO.getValue()); + } + return unitMap; + } + + public HashMap getTypeDictData() { + //获取类型字典 + DictDataPageReqVO dictDataPageReqVO = new DictDataPageReqVO(); + dictDataPageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + dictDataPageReqVO.setDictType("heli_material_type"); + PageResult dictDataDOPageResult = dictDataMapper.selectPage(dictDataPageReqVO); + List dictList = dictDataDOPageResult.getList(); + HashMap unitMap = new HashMap<>(); + for (DictDataDO dictDataDO : dictList) { + unitMap.put(dictDataDO.getLabel(), dictDataDO.getValue()); + } + return unitMap; + } + public HashMap getOriginalDictData() { + //获取来源字典 + DictDataPageReqVO dictDataPageReqVO = new DictDataPageReqVO(); + dictDataPageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + dictDataPageReqVO.setDictType("heli_material_original"); + PageResult dictDataDOPageResult = dictDataMapper.selectPage(dictDataPageReqVO); + List dictList = dictDataDOPageResult.getList(); + HashMap unitMap = new HashMap<>(); + for (DictDataDO dictDataDO : dictList) { + unitMap.put(dictDataDO.getLabel(), dictDataDO.getValue()); + } + return unitMap; + } + } 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 new file mode 100644 index 00000000..a60d02ba --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/plansubdetail/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +export interface PlanSubDetailVO { + id: number + projectPlanId: number + projectId: number + projectSubId: number + projectSubCode: string + twoDimDate: Date + twoDimOwner: number + startTwoDimDate: Date + subType: string + isOverProcess: boolean + seqNo: number + designNum: number + code: string + name: string +} + +// 查询生产计划子项目设计时间明细分页 +export const getPlanSubDetailPage = async (params) => { + return await request.get({ url: `/heli/plan-sub-detail/page`, params }) +} + +// 查询生产计划子项目设计时间明细详情 +export const getPlanSubDetail = async (id: number) => { + return await request.get({ url: `/heli/plan-sub-detail/get?id=` + id }) +} + +// 新增生产计划子项目设计时间明细 +export const createPlanSubDetail = async (data: PlanSubDetailVO) => { + return await request.post({ url: `/heli/plan-sub-detail/create`, data }) +} + +// 修改生产计划子项目设计时间明细 +export const updatePlanSubDetail = async (data: PlanSubDetailVO) => { + return await request.put({ url: `/heli/plan-sub-detail/update`, data }) +} + +// 删除生产计划子项目设计时间明细 +export const deletePlanSubDetail = async (id: number) => { + return await request.delete({ url: `/heli/plan-sub-detail/delete?id=` + id }) +} + +// 导出生产计划子项目设计时间明细 Excel +export const exportPlanSubDetail = async (params) => { + return await request.download({ url: `/heli/plan-sub-detail/export-excel`, params }) +} +export const getSearchRlTsS = async (startDateTime: string ) => { + return await request.get({ url: `/heli/plan-sub-detail/getSearchRlTs?startDateTime=` + startDateTime}) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/processdesign/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/processdesign/index.ts index a6c64f58..a8059f70 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/processdesign/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/processdesign/index.ts @@ -71,3 +71,6 @@ export const getProcessDesignPages = async (params) => { export const exportProcessDesigns = async (params) => { return await request.download({ url: `/heli/process-design/exportExcel`, params }) } +export const updateFlag = async (data) => { + return await request.post({ url: `/heli/process-design/updateFlag`, data }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storageinventory/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storageinventory/index.ts index 87eb9bbb..8fee0e0c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/storageinventory/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storageinventory/index.ts @@ -66,3 +66,7 @@ export const realTimeInventory = async (params) => { export const getById = async (params) => { return await request.get({ url: `/heli/storage-inventory/getById`, params }) } +// 新增库存 +export const saveMaterial = async (data) => { + return await request.post({ url: `/heli/storage-inventory/saveMaterial`, data }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts b/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts index 0a25c318..91054c28 100644 --- a/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts +++ b/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts @@ -301,5 +301,8 @@ export enum DICT_TYPE { HELI_PROCESS_TYPE="heli_process_type", HELI_RECEIVING_STATUS="heli_receiving_status", HELI_YS_TYPE = 'heli_ys_type', // 质检类型 + HELI_CH_PROCESS_TYPE="heli_ch_process_type", + HELI_PLAN_TASK_STATUS = 'heli_plan_task_status', //bom状态 + } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/Home/Index.vue b/mes-ui/mes-ui-admin-vue3/src/views/Home/Index.vue index 7e391dd4..0d569cc8 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/Home/Index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/Home/Index.vue @@ -689,7 +689,9 @@ const handlePay =async (row: any) => { await bdgzsomthingApi.updatebdgzsomthingbyidoneandok(row.id) //直接修改取消显示 } if (row.type == 'BOM变更审核通过后') { - // router.push({ path: '/processDesign/heli/processdesign/bomShenhe', state: { idid: row.idid } }); + await bdgzsomthingApi.deleteByIdNew(row.id); + + // router.push({ path: '/processDesign/heli/processdesign/bomShenhe', state: { idid: row.idid } }); router.push({ path: '/plan/PlanTasks', state: { idid: row.idid } }); } if (row.type == '质检通知单') { @@ -727,13 +729,14 @@ if (row.type == '设计任务到期'){ ||row.type == '生产任务到期' ||row.type == '质检任务到期前' ||row.type == '《物料需求计划》提交后' +|| row.type=='BOM变更审核通过后' // ||(row.type == '《物料需求计划》的采购'&&userDept.value.deptName != '采购部') ) { // router.push({ path: '/processDesign/heli/processdesign/bomShenhe', query: { idid: row.idid } }); await bdgzsomthingApi.updatebdgzsomthingbyidone(row.id) ElMessage({ - message: '已阅', + message: '查阅', type: 'success', }); getList() 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 84717c90..b5ef9aae 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 @@ -46,7 +46,7 @@ - + @@ -203,7 +203,7 @@ @@ -290,7 +290,7 @@ @@ -538,11 +538,16 @@ const otherSubFormRef = ref() //计算运费 const yunFei = (event) => { - const totalWeight = formData.value.deliverOrderSubs.reduce((sum, item) => { - const weight = item.weight !== null && item.weight !== undefined ? Number(item.weight) : 0; - return sum + weight; - }, 0); - formData.value.transportWeight=totalWeight + // const totalWeight = formData.value.deliverOrderSubs.reduce((sum, item) => { + // const weight = item.weight != null ? Number(item.weight) : 0; + // + // return sum + weight; + // }, 0); + let totalWeight = 0; + for (let i = 0; i < formData.value.deliverOrderSubs.length; i++) { + totalWeight += Number(formData.value.deliverOrderSubs[i].weight) || 0; + } + formData.value.transportWeight=parseFloat(totalWeight.toPrecision(12)) if (formData.value.transportFreightCost && formData.value.transportFreightCost > 0) { //先将有重量和无重量的进行拆分 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue index 16217173..0179fa22 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue @@ -46,23 +46,34 @@ const gitlist = async () => { userList.value = [] userSelectList.value = [] userList.value = [...userList.value, ...data.list] + console.log(propsmodelValue.value) // 设置初始值 if (propsmodelValue.value) { valueName.value = propsmodelValue.value const initialUser = await UserApi.getUser(valueName.value) - if (initialUser.status == 1) { - status1.value = true - } else { + console.log(valueName.value) + console.log(initialUser) + if (initialUser){ + if (initialUser.status == 1) { + status1.value = true + } else { + status1.value = false + } + }else { status1.value = false + } + // 查找初始用户是否已经在 userList 中 let foundInitialUserInList = false for (const user of userList.value) { - if (user.id === initialUser.id) { - // propsmodelValue.value=initialUser.username+' '+initialUser.nickname + if (initialUser){ + if (user.id === initialUser.id) { + // propsmodelValue.value=initialUser.username+' '+initialUser.nickname - foundInitialUserInList = true - break + foundInitialUserInList = true + break + } } } // 如果初始用户不在列表中,则将其添加到列表开头 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue new file mode 100644 index 00000000..7da5ac0d --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/interrupt/index.vue @@ -0,0 +1,288 @@ + + + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/partpurchasecheck/Form.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/partpurchasecheck/Form.vue index 5cfe02a4..5e2ec72f 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/partpurchasecheck/Form.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/partpurchasecheck/Form.vue @@ -61,6 +61,7 @@ const submitForm = async () => { try { dialogVisible.value = false + formData.value.status=3 await PartPurchaseOrderApi.updatePurchaseOrderMakeNo(formData.value) // 发送操作成功的事件 message.success("驳回成功"); diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue index f942604e..afad49ee 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/plan/productionPrint.vue @@ -105,7 +105,12 @@ 负责人 {{ userInit.find((user) => user.id == planData.craftOwner)?.nickname }} - + + 备注 + + {{ formData.remark }} + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/plantask/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/plantask/index.vue index 7eebff2f..d7f19c3c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/plantask/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/plantask/index.vue @@ -29,7 +29,7 @@ - + @@ -73,7 +73,7 @@ --> diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue index 86a2e12c..b7ffd4da 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue @@ -745,7 +745,17 @@ const submitForm = async (operate) => { } /** 新增按钮操作 */ -const onAddItem = () => { +const onAddItem = async () => { + if (formData.value.processBomDetails!=null){ + var status + await ProcessBomApi.selectPlanTaskStatus(formData.value.id).then(data=>{ + status=data + }); + if (status){ + await message.confirm("是否取消提交生产任务单") + await ProcessBomApi.updateById(formData.value.id) + } + } const row = { id: undefined, bomId: undefined, diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomImportForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomImportForm.vue index 4dfd7219..42dc118f 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomImportForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomImportForm.vue @@ -35,7 +35,7 @@ import DOMPurify from 'dompurify'; defineOptions({ name: 'BomImportForm' }) const message = useMessage() // 消息弹窗 -import * as ProcessBomApi from '@/api/heli/processbom' + const dialogVisible = ref(false) // 弹窗的是否展示 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/detail.vue index 158a5279..0fb4ec1c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/detail.vue @@ -301,7 +301,7 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict @@ -310,7 +310,7 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict @@ -318,7 +318,7 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict @@ -345,7 +345,7 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PLAN_STATUS)" :key="dict @@ -360,6 +360,15 @@ v-if="scope.row.isOver == 0 && active != 'detail'" > 结束 + + 修改 + @@ -386,6 +395,7 @@ import {useCommonStore} from "@/store/modules/common"; import {ElMessageBox} from "element-plus"; import * as PlanSubApi from "@/api/heli/plansub"; import {getPgMasterLineListByZlPgId} from "@/api/heli/pgmaster"; +import * as UserApi from "@/api/system/user"; defineOptions({ name: 'ProcessDesignDetail' }) @@ -403,7 +413,7 @@ const processDesignType = toRef(commonStore.getStore('processDesignType')) const formLoading = ref(false) const dialogTitle = ref('') const detailDisabled = ref(false) -const flag = ref(false) +const ststus = ref(false) const delayDialog = ref(false) const formData = ref({ id: undefined, @@ -415,6 +425,7 @@ const formData = ref({ projectSubId: undefined, processDesignProgressList: [], }) +const flag = ref(false) // 列表的加载中 const formRef = ref() // 表单 Ref const processDesignProgressFormRef = ref() @@ -723,6 +734,31 @@ const overRow = async( row :any) =>{ await submitForm('SAVE'); //更新一下这条数据的状态 } +const updateFlag = async(row:any) =>{ + console.log(row) + if(row.endTime == null ){ + message.error("开始时间不能为空!请确认!") + return + } + if(row.endTime == null ){ + message.error("结束时间不能为空!请确认!") + return + } + if(row.workTime == null){ + message.error("已做时间不能为空!请确认") + return + } + if(new Date(row.beginTime) > new Date(row.endTime)){ + message.error("开始时间不能大于结束时间!请确认!") + return + } + await ProcessDesignApi.updateFlag(row) + //更新一下这条数据的状态 + message.success(t('common.operationSuccess')) + commonStore.setStore('active', 'update'); + commonStore.setStore('id', processDesignId); + reload() +} const overProcess = () =>{ if(formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){ for (let index = 0; index < formData.value.processDesignProgressList.length; index++) { @@ -819,19 +855,46 @@ const queryData = async (id?: number) => { getWorkTime(1) getWorkTime(2) formData.value.processDesignProgressList = await ProcessDesignApi.getProcessDesignProgressListByProcessDesignId(id) + const newVar = await UserApi.isAdministrator(); + if (newVar==true){ + ststus.value=true + } if( formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length > 0){ var maxTime = null; if(formData.value.processDesignProgressList.length == 1){ formData.value.processDesignProgressList[0].hasNext = false; + console.log(ststus.value) if(formData.value.processDesignProgressList[0].endTime != null && formData.value.processDesignProgressList[0].endTime != ''){ + if (ststus.value){ + formData.value.processDesignProgressList[0].flag=0 + }else { + if (formData.value.processDesignProgressList[0].isOver == 1 || formData.value.isOverProcess == 1) { + formData.value.processDesignProgressList[0].flag = 1 + } + } + formData.value.processDesignProgressList[0].maxTime = (formData.value.processDesignProgressList[0].endTime - formData.value.processDesignProgressList[0].beginTime)/ (1000 * 60 * 60); + }else { + formData.value.processDesignProgressList[0].flag=1 + } } else{ + console.log(ststus.value) + var maxIndex = 0; for (let index = 0; index < formData.value.processDesignProgressList.length; index++) { var item = formData.value.processDesignProgressList[index]; if(item.endTime != null && item.endTime != ''){ item.maxTime = (item.endTime - item.beginTime)/ (1000 * 60 * 60); + if (ststus.value){ + item.flag=0 + }else { + if (item.isOver==1||formData.value.isOverProcess == 1) + item.flag=1 + } + }else { + formData.value.processDesignProgressList[0].flag=1 + } if(maxTime == null){ maxIndex = index; diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue index ff8e5165..40a444d9 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue @@ -85,7 +85,7 @@ - + @@ -261,7 +261,42 @@ const typeList = ref([ // await getList() // } catch {} // } +// const tableRowClassName = ({ row }) => { +// if (row.endDate){ +// var endTime = new Date(row.endDate); +// +// // 获取当前时间的 Date 对象 +// var currentTime = new Date(); +// // 将 endTime 和 currentTime 的时间部分设置为零 +// endTime.setHours(0, 0, 0, 0); +// currentTime.setHours(0, 0, 0, 0); +// if (endTime < currentTime&&row.isOverProcess!=1){ +// return 'warning-row1'; +// }else { +// return '' +// } +// } +// return '' +// } +const cellClassName = ({ row,column }) => { + if (row.endDate){ + var endTime = new Date(row.endDate); +// 获取当前时间的 Date 对象 + var currentTime = new Date(); +// 将 endTime 和 currentTime 的时间部分设置为零 + endTime.setHours(0, 0, 0, 0); + currentTime.setHours(0, 0, 0, 0); + if (endTime < currentTime&&row.isOverProcess!=1){ + if (column.label=='计划终止') + return 'warning-row1'; + }else { + return '' + } + } + return '' + +}; /** 导出按钮操作 */ const handleExport = async () => { try { @@ -292,3 +327,8 @@ onMounted(() => { getList() }) + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue index 21797b1b..68cea7a7 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue @@ -673,7 +673,7 @@ v-model="row.compositionId" - + @@ -277,7 +277,7 @@ const route = useRoute() const routeValue = ref('') onMounted(async () => { const newVar = await UserApi.isAdministrator(); - if (!newVar.data){ + if (newVar==false){ isReadOnly.value=true } console.log(newVar) diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/saleordercost/edit.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/saleordercost/edit.vue index 9ff75b04..b61e6bc9 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/saleordercost/edit.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/saleordercost/edit.vue @@ -67,24 +67,29 @@ - - - - - + - + + {{ }} + {{ }} + {{ }} + {{ }} + + + + + + + @@ -112,11 +117,11 @@ - - - + + + + + @@ -285,20 +290,16 @@ - - - - - - - + + + + + @@ -347,23 +348,20 @@ - - - + + + + + - - - - +