From 1d5c0dd0deec300e2842f0e24c463dc7ced5cc20 Mon Sep 17 00:00:00 2001 From: lym <1994302445@qq.com> Date: Thu, 6 Jun 2024 09:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E6=96=99=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/order/OrderServiceImpl.java | 11 +-- .../admin/api/webcad/ApiTypeRealize.java | 2 +- .../resources/type/板材汇总-按房间-模板.xlsx | Bin 10404 -> 10988 bytes .../resources/type/板材汇总-按板材-模板.xlsx | Bin 10397 -> 11853 bytes .../type/生产单Excel导入错误导出模板.xlsx | Bin 24220 -> 24511 bytes .../manage/enums/DictTypeConstants.java | 11 +++ .../manage/enums/RemainPlateStatusEnum.java | 22 ++++++ .../admin/plate/RemainPlateController.java | 49 ++++++++++--- .../plate/vo/remain/RemainPlatePageReqVO.java | 17 +++-- .../plate/vo/remain/RemainPlateRespVO.java | 18 ++++- .../plate/vo/remain/RemainPlateSaveReqVO.java | 21 ++++-- .../remainplaten/RemainPlateDO.java | 10 ++- .../mysql/remainplaten/RemainPlateMapper.java | 21 +++++- .../remainplaten/RemainPlateService.java | 39 +++++++--- .../remainplaten/RemainPlateServiceImpl.java | 67 ++++++++++++++++-- .../system/enums/ErrorCodeConstants.java | 3 + 16 files changed, 243 insertions(+), 48 deletions(-) create mode 100644 cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java create mode 100644 cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index f3cb6ee4d..a9093cc00 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -655,13 +655,16 @@ public class OrderServiceImpl implements OrderService { case "配件汇总1-模板.xlsx":// 配件汇总 map.put(orderDO, orderPartsMapper.selectPartAll(orderDO.getId(), SecurityFrameworkUtils.getLoginUser().getOrganId())); break; - case "板材明细-按房间-模板.xlsx":// + case "板材明细-按房间-模板.xlsx": break; - case "板材明细-按板材-模板.xlsx":// + case "板材明细-按板材-模板.xlsx": + map.put(orderDO, plateMapper.selectPlateGoodsList(orderDO.getId(), SecurityFrameworkUtils.getLoginUser().getOrganId())); + break; - case "板材汇总-按房间-模板.xlsx":// + case "板材汇总-按房间-模板.xlsx": break; - case "板材汇总-按板材-模板.xlsx":// + case "板材汇总-按板材-模板.xlsx": + map.put(orderDO, plateMapper.selectPlateGoodsList(orderDO.getId(), SecurityFrameworkUtils.getLoginUser().getOrganId())); break; default: // 处理默认情况,可以选择忽略或者做其他处理 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java index bb5de1295..68213a96b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java @@ -498,7 +498,7 @@ public class ApiTypeRealize { .groupId(0L) .partsId(0L) .plateId(plateId) - .num(0.0) + .num(1.0) .build(); if (plateDetail.get(plate.getInteger("BlockNo")) != null) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/板材汇总-按房间-模板.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/板材汇总-按房间-模板.xlsx index b72c7c80ed71104ec66618f8f15422f67a8534e8..30ed4d78642e454c3da018158cff1fa2fdc09b27 100644 GIT binary patch literal 10988 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 literal 10404 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 literal 10397 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 I;#uy004eqkIRF3v diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx index 5acc4721d3c7dc0f2952a2c0cc45ff61d17d1d93..8f98befc8fd244b173e3c077a8527d4da5054556 100644 GIT binary patch delta 9689 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 delta 9425 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 diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java new file mode 100644 index 000000000..005e62b4d --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java @@ -0,0 +1,11 @@ +package com.cf.imes.module.manage.enums; + +/** + * Manage 字典类型的枚举类 + * + * @author 晨丰科技 + */ +public interface DictTypeConstants { + + String SYNTHESIS_TYPE = "synthesisType";//加工组类型 +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java new file mode 100644 index 000000000..d979e2dde --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RemainPlateStatusEnum { + UNUSED(0, "未使用"), + IN_USE(1, "使用中"); + + private final Integer status; + private String description; + + public boolean equals(Integer status) { + return this.status .equals(status) ; + } + + public boolean equals(RemainPlateStatusEnum enableStatusEnum) { + return enableStatusEnum != null && enableStatusEnum.status .equals(this.getStatus()) ; + } +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/RemainPlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/RemainPlateController.java index 1136477f6..2dcba5a0c 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/RemainPlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/RemainPlateController.java @@ -5,6 +5,7 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateRes import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSaveReqVO; import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO; import com.cf.imes.module.manage.service.remainplaten.RemainPlateService; +import io.swagger.v3.oas.annotations.Parameters; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; @@ -30,7 +31,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -@Tag(name = "管理后台 - 生产单余料板表 order_remain_plate_{N}") +@Tag(name = "管理后台 - 生产单余料板表") @RestController @RequestMapping("/manage/remain-plate") @Validated @@ -40,31 +41,61 @@ public class RemainPlateController { private RemainPlateService remainPlateService; @PostMapping("/create") - @Operation(summary = "创建生产单余料板表 order_remain_plate_{N}") + @Operation(summary = "创建生产单余料板表") @PreAuthorize("@ss.hasPermission('manage:remain-plate:create')") public CommonResult createRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO createReqVO) { return success(remainPlateService.createRemainPlate(createReqVO)); } @PutMapping("/update") - @Operation(summary = "更新生产单余料板表 order_remain_plate_{N}") + @Operation(summary = "更新生产单余料板表") @PreAuthorize("@ss.hasPermission('manage:remain-plate:update')") public CommonResult updateRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO updateReqVO) { remainPlateService.updateRemainPlate(updateReqVO); return success(true); } + @PutMapping("/updateStatus") + @Operation(summary = "余料板批量核销") + @Parameters({ + @Parameter(name = "id", description = "余料板id集", required = true), + @Parameter(name = "status", description = "修改的状态", required = true , example = "1"), + @Parameter(name = "useType", description = "使用类型,0核销,1排单,2补板", required = true , example = "1"), + @Parameter(name = "planId", description = "排单 ID", example = "1") + }) + @PreAuthorize("@ss.hasPermission('manage:remain-plate:update')") + public CommonResult updateRemainPlate(@RequestParam("id") Set ids, + @RequestParam("status") Integer status, + @RequestParam("useType") Integer useType, + @RequestParam("planId") Long planId) { + remainPlateService.updateRemainPlateStatus(ids,status,useType,planId); + return success(true); + } + + @PutMapping("/revertUpdate") + @Operation(summary = "余料板批量释放") + @Parameters({ + @Parameter(name = "id", description = "余料板id集", required = true), + @Parameter(name = "status", description = "修改的状态", required = true , example = "1") + }) + @PreAuthorize("@ss.hasPermission('manage:remain-plate:update')") + public CommonResult updateRemainPlate(@RequestParam("id") Set ids, + @RequestParam("status") Integer status) { + remainPlateService.revertRemainPlateStatus(ids,status); + return success(true); + } + @DeleteMapping("/delete") - @Operation(summary = "删除生产单余料板表 order_remain_plate_{N}") + @Operation(summary = "删除生产单余料板表") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('manage:remain-plate:delete')") - public CommonResult deleteRemainPlate(@RequestParam("id") Long id) { - remainPlateService.deleteRemainPlate(id); + public CommonResult deleteRemainPlate(@RequestParam("id") Set ids) { + remainPlateService.deleteRemainPlate(ids); return success(true); } @GetMapping("/get") - @Operation(summary = "获得生产单余料板表 order_remain_plate_{N}") + @Operation(summary = "获得生产单余料板表") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('manage:remain-plate:query')") public CommonResult getRemainPlate(@RequestParam("id") Long id) { @@ -73,7 +104,7 @@ public class RemainPlateController { } @GetMapping("/page") - @Operation(summary = "获得生产单余料板表 order_remain_plate_{N}分页") + @Operation(summary = "获得生产单余料板表分页") @PreAuthorize("@ss.hasPermission('manage:remain-plate:query')") public CommonResult> getRemainPlatePage(@Valid RemainPlatePageReqVO pageReqVO) { PageResult pageResult = remainPlateService.getRemainPlatePage(pageReqVO); @@ -81,7 +112,7 @@ public class RemainPlateController { } @GetMapping("/export-excel") - @Operation(summary = "导出生产单余料板表 order_remain_plate_{N} Excel") + @Operation(summary = "导出生产单余料板表Excel") @PreAuthorize("@ss.hasPermission('manage:remain-plate:export')") @OperateLog(type = EXPORT) public void exportRemainPlateExcel(@Valid RemainPlatePageReqVO pageReqVO, diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java index acace44b5..04ba05ee4 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java @@ -19,12 +19,21 @@ public class RemainPlatePageReqVO extends PageParam { @Schema(description = "排单 ID", example = "16628") private Long planId; + @Schema(description = "组织id", example = "1") + private Long organId; + @Schema(description = "初始排单 ID", example = "6628") private Long initPlanId; - @Schema(description = "余料板状态,0未使用,1使用中,2已使用", example = "1") + @Schema(description = "余料板状态,0未使用,1使用中", example = "0") private Integer status; + @Schema(description = "是否为开料添加,0否,1是", example = "0") + private Boolean isCutting; + + @Schema(description = "使用类型,0核销,1排单,2补板", example = "0") + private Integer useType; + @Schema(description = "商品 ID", example = "7425") private String goodsId; @@ -38,10 +47,10 @@ public class RemainPlatePageReqVO extends PageParam { private String color; @Schema(description = "宽度") - private BigDecimal width; + private BigDecimal[] width; @Schema(description = "长度") - private BigDecimal length; + private BigDecimal[] length; @Schema(description = "厚度") private BigDecimal thickness; @@ -62,7 +71,7 @@ public class RemainPlatePageReqVO extends PageParam { private String remark; @Schema(description = "轮廊数据,Json 串") - private String outline; + private String outLineJson; @Schema(description = "创建日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java index 8e46093d2..03736b370 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java @@ -16,6 +16,10 @@ public class RemainPlateRespVO { @ExcelProperty("余料板 ID") private Long id; + @Schema(description = "组织id", example = "1") + @ExcelIgnore + private Long organId; + @Schema(description = "排单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16628") @ExcelProperty("排单 ID") private Long planId; @@ -24,10 +28,18 @@ public class RemainPlateRespVO { @ExcelProperty("初始排单 ID") private Long initPlanId; - @Schema(description = "余料板状态,0未使用,1使用中,2已使用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("余料板状态,0未使用,1使用中,2已使用") + @Schema(description = "余料板状态,0未使用,1使用中", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("余料板状态,0未使用,1使用中") private Integer status; + @Schema(description = "是否为开料添加,0否,1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("是否为开料添加,0否,1是") + private Boolean isCutting; + + @Schema(description = "使用类型,0核销,1排单,2补板", example = "0") + @ExcelProperty("使用类型,0核销,1排单,2补板") + private Integer useType; + @Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7425") @ExcelProperty("商品 ID") private String goodsId; @@ -78,7 +90,7 @@ public class RemainPlateRespVO { @Schema(description = "轮廊数据,Json 串", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("轮廊数据,Json 串") - private String outline; + private String outLineJson; @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建日期") diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java index 1ea6928a3..ddd6083b0 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.manage.controller.admin.plate.vo.remain; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.NotEmpty; @@ -10,21 +11,29 @@ import java.math.BigDecimal; @Data public class RemainPlateSaveReqVO { - @Schema(description = "余料板 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16470") + @Schema(description = "余料板 ID") private Long id; - @Schema(description = "排单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16628") - @NotNull(message = "排单 ID不能为空") + @Schema(description = "组织id", example = "1") + private Long organId; + + @Schema(description = "排单 ID") private Long planId; - @Schema(description = "初始排单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6628") - @NotNull(message = "初始排单 ID不能为空") + @Schema(description = "初始排单 ID") private Long initPlanId; @Schema(description = "余料板状态,0未使用,1使用中,2已使用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "余料板状态,0未使用,1使用中,2已使用不能为空") private Integer status; + @Schema(description = "是否为开料添加,0否,1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "是否为开料添加,0否,1是") + private Boolean isCutting; + + @Schema(description = "使用类型,0核销,1排单,2补板", example = "0") + private Integer useType; + @Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7425") @NotEmpty(message = "商品 ID不能为空") private String goodsId; @@ -71,6 +80,6 @@ public class RemainPlateSaveReqVO { @Schema(description = "轮廊数据,Json 串", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "轮廊数据,Json 串不能为空") - private String outline; + private String outLineJson; } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java index 11977afbd..14ce761cf 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java @@ -42,6 +42,14 @@ public class RemainPlateDO extends BaseDO { * 余料板状态,0未使用,1使用中,2已使用 */ private Integer status; + /** + * 是否为开料添加,0否,1是 + */ + private Boolean isCutting; + /** + * 使用类型,0核销,1排单,2补板 + */ + private Integer useType; /** * 商品 ID */ @@ -93,6 +101,6 @@ public class RemainPlateDO extends BaseDO { /** * 轮廊数据,Json 串 */ - private String outline; + private String outLineJson; } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java index 4b287e87c..3cdc618b0 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java @@ -1,5 +1,6 @@ package com.cf.imes.module.manage.dal.mysql.remainplaten; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; @@ -7,6 +8,8 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlatePag import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO; import org.apache.ibatis.annotations.Mapper; +import java.util.Set; + /** * 生产单余料板表 order_remain_plate_{N} Mapper * @@ -21,20 +24,32 @@ public interface RemainPlateMapper extends BaseMapperX { .eqIfPresent(RemainPlateDO::getInitPlanId, reqVO.getInitPlanId()) .eqIfPresent(RemainPlateDO::getStatus, reqVO.getStatus()) .eqIfPresent(RemainPlateDO::getGoodsId, reqVO.getGoodsId()) + .eqIfPresent(RemainPlateDO::getIsCutting, reqVO.getIsCutting()) .likeIfPresent(RemainPlateDO::getName, reqVO.getName()) .eqIfPresent(RemainPlateDO::getMaterial, reqVO.getMaterial()) .eqIfPresent(RemainPlateDO::getColor, reqVO.getColor()) - .eqIfPresent(RemainPlateDO::getWidth, reqVO.getWidth()) - .eqIfPresent(RemainPlateDO::getLength, reqVO.getLength()) .eqIfPresent(RemainPlateDO::getThickness, reqVO.getThickness()) .eqIfPresent(RemainPlateDO::getBrand, reqVO.getBrand()) .eqIfPresent(RemainPlateDO::getPlaceStyle, reqVO.getPlaceStyle()) .eqIfPresent(RemainPlateDO::getStore, reqVO.getStore()) .eqIfPresent(RemainPlateDO::getCount, reqVO.getCount()) .eqIfPresent(RemainPlateDO::getRemark, reqVO.getRemark()) - .eqIfPresent(RemainPlateDO::getOutline, reqVO.getOutline()) + .eqIfPresent(RemainPlateDO::getUseType, reqVO.getUseType()) + .eqIfPresent(RemainPlateDO::getOrganId, reqVO.getOrganId()) + .eqIfPresent(RemainPlateDO::getOutLineJson, reqVO.getOutLineJson()) + .betweenIfPresent(RemainPlateDO::getWidth, reqVO.getWidth()) + .betweenIfPresent(RemainPlateDO::getLength, reqVO.getLength()) .betweenIfPresent(RemainPlateDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(RemainPlateDO::getId)); } + // 批量修改状态 + default void updateRemainPlateStatus(Set ids, Integer status, Integer useType,Long organId,Long planId) { + update(new UpdateWrapper() + .set("status", status) + .set("use_type", useType) + .set("plan_id",planId) + .eq("organ_id",organId) + .in("id", ids)); + } } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateService.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateService.java index ecec41ff7..99546599e 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateService.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateService.java @@ -6,16 +6,17 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSav import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO; import javax.validation.Valid; +import java.util.Set; /** - * 生产单余料板表 order_remain_plate_{N} Service 接口 + * 生产单余料板表 Service 接口 * * @author 晨丰科技 */ public interface RemainPlateService { /** - * 创建生产单余料板表 order_remain_plate_{N} + * 创建生产单余料板表 * * @param createReqVO 创建信息 * @return 编号 @@ -23,32 +24,50 @@ public interface RemainPlateService { Long createRemainPlate(@Valid RemainPlateSaveReqVO createReqVO); /** - * 更新生产单余料板表 order_remain_plate_{N} + * 批量核销 + * + * @param ids 编号 + * @param status 状态 + * @param useType 使用类型 + * @param planId 排单id + */ + void updateRemainPlateStatus(Set ids, Integer status,Integer useType,Long planId); + + /** + * 更新生产单余料板表 + * + * @param ids 编号 + * @param status 状态 + */ + void revertRemainPlateStatus(Set ids, Integer status); + + /** + * 核销板材库 * * @param updateReqVO 更新信息 */ void updateRemainPlate(@Valid RemainPlateSaveReqVO updateReqVO); /** - * 删除生产单余料板表 order_remain_plate_{N} + * 删除生产单余料板表 * - * @param id 编号 + * @param ids 编号 */ - void deleteRemainPlate(Long id); + void deleteRemainPlate(Set ids); /** - * 获得生产单余料板表 order_remain_plate_{N} + * 获得生产单余料板表 * * @param id 编号 - * @return 生产单余料板表 order_remain_plate_{N} + * @return 生产单余料板表 */ RemainPlateDO getRemainPlate(Long id); /** - * 获得生产单余料板表 order_remain_plate_{N}分页 + * 获得生产单余料板表 * * @param pageReqVO 分页查询 - * @return 生产单余料板表 order_remain_plate_{N}分页 + * @return 生产单余料板表 */ PageResult getRemainPlatePage(RemainPlatePageReqVO pageReqVO); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java index dad8ac4a8..298f310a1 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java @@ -1,9 +1,11 @@ package com.cf.imes.module.manage.service.remainplaten; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlatePageReqVO; import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSaveReqVO; import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO; import com.cf.imes.module.manage.dal.mysql.remainplaten.RemainPlateMapper; +import com.cf.imes.module.manage.enums.RemainPlateStatusEnum; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import com.cf.imes.framework.common.pojo.PageResult; @@ -13,8 +15,10 @@ import com.cf.imes.framework.common.util.object.BeanUtils; import javax.annotation.Resource; +import java.util.Set; + import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.REMAIN_PLATE_NOT_EXISTS; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** * 生产单余料板表 order_remain_plate_{N} Service 实现类 @@ -37,21 +41,58 @@ public class RemainPlateServiceImpl implements RemainPlateService { return remainPlate.getId(); } + @Override + public void updateRemainPlateStatus(Set ids, Integer status, Integer useType,Long planId) { + //判断是否符合核销标准 + validateRemainPlateStatus(ids,RemainPlateStatusEnum.UNUSED.getStatus()); + //以id为条件批量修改余料库中的状态 + remainPlateMapper.updateRemainPlateStatus(ids, status, useType, OrganContextHolder.getOrganId(),planId); + } + + @Override + public void revertRemainPlateStatus(Set ids, Integer status) { + // 判断余料的状态 为使用中 + validateRemainPlateStatus(ids,RemainPlateStatusEnum.IN_USE.getStatus()); + remainPlateMapper.updateRemainPlateStatus(ids, status, null, OrganContextHolder.getOrganId(),null); + } + @Override public void updateRemainPlate(RemainPlateSaveReqVO updateReqVO) { // 校验存在 validateRemainPlateExists(updateReqVO.getId()); - // 更新 - RemainPlateDO updateObj = BeanUtils.toBean(updateReqVO, RemainPlateDO.class); + // 是否使用 + if (validateRemainPlateStatus(updateReqVO.getId()) == RemainPlateStatusEnum.IN_USE.getStatus()){ + throw exception(REMAIN_PLATE_STATUS_USED); + } + // 判断是否为开料添加 + RemainPlateDO updateObj = new RemainPlateDO(); + if (validateRemainPlateIsCutting(updateReqVO.getId())){ + updateObj.setRemark(updateReqVO.getRemark()); + }else { + // 更新 + updateObj = BeanUtils.toBean(updateReqVO, RemainPlateDO.class); + } remainPlateMapper.updateById(updateObj); } @Override - public void deleteRemainPlate(Long id) { - // 校验存在 - validateRemainPlateExists(id); + public void deleteRemainPlate(Set ids) { + // 判断余料的状态 为使用中 + validateRemainPlateStatus(ids,RemainPlateStatusEnum.IN_USE.getStatus()); // 删除 - remainPlateMapper.deleteById(id); + remainPlateMapper.deleteBatchIds(ids); + } + + // 判断余料板是否正在使用 + private void validateRemainPlateStatus(Set ids, Integer status) { + for (Long id : ids) { + if (validateRemainPlateStatus(id) == status) { + if (status == RemainPlateStatusEnum.IN_USE.getStatus()) + throw exception(REMAIN_PLATE_STATUS_USED); + if (status == RemainPlateStatusEnum.UNUSED.getStatus()) + throw exception(REMAIN_PLATE_STATUS_NO_USED); + } + } } private void validateRemainPlateExists(Long id) { @@ -60,6 +101,18 @@ public class RemainPlateServiceImpl implements RemainPlateService { } } + private boolean validateRemainPlateIsCutting(Long id) { + return remainPlateMapper.selectById(id).getIsCutting(); + } + + private Integer validateRemainPlateStatus(Long id) { + return remainPlateMapper.selectById(id).getStatus(); + } + + private Integer validateRemainPlateUseType(Long id) { + return remainPlateMapper.selectById(id).getUseType(); + } + @Override public RemainPlateDO getRemainPlate(Long id) { return remainPlateMapper.selectById(id); diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 33de65513..f52d99d21 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -256,4 +256,7 @@ public interface ErrorCodeConstants { ErrorCode APPLICATION_LOGIN_USER_DISABLED = new ErrorCode(1_002_037_001, "应用登陆失败"); ErrorCode ERR = new ErrorCode(1_002_038_001, "未知错误"); + + ErrorCode REMAIN_PLATE_STATUS_USED = new ErrorCode(1_002_038_001, "余料板正在使用中,禁止修改"); + ErrorCode REMAIN_PLATE_STATUS_NO_USED = new ErrorCode(1_002_038_001, "余料板未使用"); }