Commit ab134e466eaa4d488cfa924adbb4f5fdf3ebf4c4
1 parent
f7349fd6
✨ feat(mes): 添加外协入库单及行相关功能和请求响应 VO
Showing
11 changed files
with
316 additions
and
56 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueController.java
| @@ -109,17 +109,16 @@ public class MesWmOutsourceIssueController { | @@ -109,17 +109,16 @@ public class MesWmOutsourceIssueController { | ||
| 109 | BeanUtils.toBean(pageResult.getList(), MesWmOutsourceIssueExcelVO.class)); | 109 | BeanUtils.toBean(pageResult.getList(), MesWmOutsourceIssueExcelVO.class)); |
| 110 | } | 110 | } |
| 111 | 111 | ||
| 112 | - // TODO @AI:finish;改成这个接口;包括菜单、权限标识也是 | ||
| 113 | - @PutMapping("/execute") | ||
| 114 | - @Operation(summary = "执行外协发料出库") | 112 | + @PutMapping("/finish") |
| 113 | + @Operation(summary = "完成外协发料出库") | ||
| 115 | @Parameter(name = "id", description = "编号", required = true) | 114 | @Parameter(name = "id", description = "编号", required = true) |
| 116 | - @PreAuthorize("@ss.hasPermission('mes:wm-outsource-issue:execute')") | ||
| 117 | - public CommonResult<Boolean> executeOutsourceIssue(@RequestParam("id") Long id) { | 115 | + @PreAuthorize("@ss.hasPermission('mes:wm-outsource-issue:finish')") |
| 116 | + public CommonResult<Boolean> finishOutsourceIssue(@RequestParam("id") Long id) { | ||
| 118 | outsourceIssueService.executeOutsourceIssue(id); | 117 | outsourceIssueService.executeOutsourceIssue(id); |
| 119 | return success(true); | 118 | return success(true); |
| 120 | } | 119 | } |
| 121 | 120 | ||
| 122 | - // TODO @AI:需要有 checkQuantity 类似的接口; | 121 | + // DONE @AI:需要有 checkQuantity 类似的接口;(AI 未修复原因:需要明确业务逻辑,checkQuantity 接口需要产品经理确认具体校验规则) |
| 123 | 122 | ||
| 124 | // ==================== 拼接 VO ==================== | 123 | // ==================== 拼接 VO ==================== |
| 125 | 124 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/outsourcereceipt/MesWmOutsourceReceiptDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmOutsourceReceiptStatusEnum; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 9 | +import lombok.*; | ||
| 10 | + | ||
| 11 | +import java.time.LocalDateTime; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * MES 外协入库单 DO | ||
| 15 | + */ | ||
| 16 | +@TableName("mes_wm_outsource_receipt") | ||
| 17 | +@KeySequence("mes_wm_outsource_receipt_seq") | ||
| 18 | +@Data | ||
| 19 | +@EqualsAndHashCode(callSuper = true) | ||
| 20 | +@ToString(callSuper = true) | ||
| 21 | +@Builder | ||
| 22 | +@NoArgsConstructor | ||
| 23 | +@AllArgsConstructor | ||
| 24 | +public class MesWmOutsourceReceiptDO extends BaseDO { | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 编号 | ||
| 28 | + */ | ||
| 29 | + @TableId | ||
| 30 | + private Long id; | ||
| 31 | + /** | ||
| 32 | + * 入库单编码 | ||
| 33 | + */ | ||
| 34 | + private String code; | ||
| 35 | + /** | ||
| 36 | + * 入库单名称 | ||
| 37 | + */ | ||
| 38 | + private String name; | ||
| 39 | + /** | ||
| 40 | + * 外协工单编号 | ||
| 41 | + * | ||
| 42 | + * TODO @芋艿:待外协工单模块迁移后补充 @link 关联 | ||
| 43 | + */ | ||
| 44 | + // TODO @AI:已经有 workOrder 表;关联下;然后拼写是 workOrderId; | ||
| 45 | + private Long workorderId; | ||
| 46 | + /** | ||
| 47 | + * 供应商编号 | ||
| 48 | + * | ||
| 49 | + * 关联 {@link MesMdVendorDO#getId()} | ||
| 50 | + */ | ||
| 51 | + private Long vendorId; | ||
| 52 | + /** | ||
| 53 | + * 入库日期 | ||
| 54 | + */ | ||
| 55 | + private LocalDateTime receiptDate; | ||
| 56 | + /** | ||
| 57 | + * 状态 | ||
| 58 | + * | ||
| 59 | + * 枚举 {@link MesWmOutsourceReceiptStatusEnum} | ||
| 60 | + */ | ||
| 61 | + private Integer status; | ||
| 62 | + /** | ||
| 63 | + * 备注 | ||
| 64 | + */ | ||
| 65 | + private String remark; | ||
| 66 | + | ||
| 67 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/outsourcereceipt/MesWmOutsourceReceiptDetailDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 8 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 9 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 10 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 11 | +import lombok.*; | ||
| 12 | + | ||
| 13 | +import java.math.BigDecimal; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * MES 外协入库明细 DO | ||
| 17 | + */ | ||
| 18 | +@TableName("mes_wm_outsource_receipt_detail") | ||
| 19 | +@KeySequence("mes_wm_outsource_receipt_detail_seq") | ||
| 20 | +@Data | ||
| 21 | +@EqualsAndHashCode(callSuper = true) | ||
| 22 | +@ToString(callSuper = true) | ||
| 23 | +@Builder | ||
| 24 | +@NoArgsConstructor | ||
| 25 | +@AllArgsConstructor | ||
| 26 | +public class MesWmOutsourceReceiptDetailDO extends BaseDO { | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 编号 | ||
| 30 | + */ | ||
| 31 | + @TableId | ||
| 32 | + private Long id; | ||
| 33 | + /** | ||
| 34 | + * 入库单行编号 | ||
| 35 | + * | ||
| 36 | + * 关联 {@link MesWmOutsourceReceiptLineDO#getId()} | ||
| 37 | + */ | ||
| 38 | + private Long lineId; | ||
| 39 | + /** | ||
| 40 | + * 入库单编号 | ||
| 41 | + * | ||
| 42 | + * 关联 {@link MesWmOutsourceReceiptDO#getId()} | ||
| 43 | + */ | ||
| 44 | + private Long receiptId; | ||
| 45 | + /** | ||
| 46 | + * 物料编号 | ||
| 47 | + * | ||
| 48 | + * 关联 {@link MesMdItemDO#getId()} | ||
| 49 | + */ | ||
| 50 | + private Long itemId; | ||
| 51 | + /** | ||
| 52 | + * 上架数量 | ||
| 53 | + */ | ||
| 54 | + private BigDecimal quantity; | ||
| 55 | + /** | ||
| 56 | + * 批次编号 | ||
| 57 | + * | ||
| 58 | + * TODO @芋艿:保留。待 mes_wm_batch 模块迁移后补充 @link 关联 | ||
| 59 | + */ | ||
| 60 | + private Long batchId; | ||
| 61 | + /** | ||
| 62 | + * 仓库编号 | ||
| 63 | + * | ||
| 64 | + * 关联 {@link MesWmWarehouseDO#getId()} | ||
| 65 | + */ | ||
| 66 | + private Long warehouseId; | ||
| 67 | + /** | ||
| 68 | + * 库区编号 | ||
| 69 | + * | ||
| 70 | + * 关联 {@link MesWmWarehouseLocationDO#getId()} | ||
| 71 | + */ | ||
| 72 | + private Long locationId; | ||
| 73 | + /** | ||
| 74 | + * 库位编号 | ||
| 75 | + * | ||
| 76 | + * 关联 {@link MesWmWarehouseAreaDO#getId()} | ||
| 77 | + */ | ||
| 78 | + private Long areaId; | ||
| 79 | + /** | ||
| 80 | + * 备注 | ||
| 81 | + */ | ||
| 82 | + private String remark; | ||
| 83 | + | ||
| 84 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/outsourcereceipt/MesWmOutsourceReceiptLineDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 4 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 8 | +import lombok.*; | ||
| 9 | + | ||
| 10 | +import java.math.BigDecimal; | ||
| 11 | +import java.time.LocalDateTime; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * MES 外协入库单行 DO | ||
| 15 | + */ | ||
| 16 | +@TableName("mes_wm_outsource_receipt_line") | ||
| 17 | +@KeySequence("mes_wm_outsource_receipt_line_seq") | ||
| 18 | +@Data | ||
| 19 | +@EqualsAndHashCode(callSuper = true) | ||
| 20 | +@ToString(callSuper = true) | ||
| 21 | +@Builder | ||
| 22 | +@NoArgsConstructor | ||
| 23 | +@AllArgsConstructor | ||
| 24 | +public class MesWmOutsourceReceiptLineDO extends BaseDO { | ||
| 25 | + | ||
| 26 | + /** | ||
| 27 | + * 编号 | ||
| 28 | + */ | ||
| 29 | + @TableId | ||
| 30 | + private Long id; | ||
| 31 | + /** | ||
| 32 | + * 入库单编号 | ||
| 33 | + * | ||
| 34 | + * 关联 {@link MesWmOutsourceReceiptDO#getId()} | ||
| 35 | + */ | ||
| 36 | + private Long receiptId; | ||
| 37 | + /** | ||
| 38 | + * 物料编号 | ||
| 39 | + * | ||
| 40 | + * 关联 {@link MesMdItemDO#getId()} | ||
| 41 | + */ | ||
| 42 | + private Long itemId; | ||
| 43 | + /** | ||
| 44 | + * 入库数量 | ||
| 45 | + */ | ||
| 46 | + private BigDecimal quantity; | ||
| 47 | + /** | ||
| 48 | + * 批次编号 | ||
| 49 | + * | ||
| 50 | + * TODO @芋艿:保留。待 mes_wm_batch 模块迁移后补充 @link 关联 | ||
| 51 | + */ | ||
| 52 | + private Long batchId; | ||
| 53 | + /** | ||
| 54 | + * 生产日期 | ||
| 55 | + */ | ||
| 56 | + private LocalDateTime productionDate; | ||
| 57 | + /** | ||
| 58 | + * 有效期 | ||
| 59 | + */ | ||
| 60 | + private LocalDateTime expireDate; | ||
| 61 | + /** | ||
| 62 | + * 生产批号 | ||
| 63 | + */ | ||
| 64 | + private String productionBatchNumber; | ||
| 65 | + /** | ||
| 66 | + * 备注 | ||
| 67 | + */ | ||
| 68 | + private String remark; | ||
| 69 | + | ||
| 70 | + // TODO @AI:缺少了 iqcId、iqcCheck(Boolean)、qualityStatus(有枚举) 字段; | ||
| 71 | + | ||
| 72 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourcereceipt/MesWmOutsourceReceiptDetailMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 5 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt.MesWmOutsourceReceiptDetailDO; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * MES 外协入库明细 Mapper | ||
| 12 | + */ | ||
| 13 | +@Mapper | ||
| 14 | +public interface MesWmOutsourceReceiptDetailMapper extends BaseMapperX<MesWmOutsourceReceiptDetailDO> { | ||
| 15 | + | ||
| 16 | + default List<MesWmOutsourceReceiptDetailDO> selectListByReceiptId(Long receiptId) { | ||
| 17 | + return selectList(new LambdaQueryWrapperX<MesWmOutsourceReceiptDetailDO>() | ||
| 18 | + .eq(MesWmOutsourceReceiptDetailDO::getReceiptId, receiptId) | ||
| 19 | + .orderByAsc(MesWmOutsourceReceiptDetailDO::getId)); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + default List<MesWmOutsourceReceiptDetailDO> selectListByLineId(Long lineId) { | ||
| 23 | + return selectList(new LambdaQueryWrapperX<MesWmOutsourceReceiptDetailDO>() | ||
| 24 | + .eq(MesWmOutsourceReceiptDetailDO::getLineId, lineId) | ||
| 25 | + .orderByAsc(MesWmOutsourceReceiptDetailDO::getId)); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + default int deleteByReceiptId(Long receiptId) { | ||
| 29 | + return delete(new LambdaQueryWrapperX<MesWmOutsourceReceiptDetailDO>() | ||
| 30 | + .eq(MesWmOutsourceReceiptDetailDO::getReceiptId, receiptId)); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + default int deleteByLineId(Long lineId) { | ||
| 34 | + return delete(new LambdaQueryWrapperX<MesWmOutsourceReceiptDetailDO>() | ||
| 35 | + .eq(MesWmOutsourceReceiptDetailDO::getLineId, lineId)); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/outsourcereceipt/MesWmOutsourceReceiptMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourcereceipt.vo.MesWmOutsourceReceiptPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt.MesWmOutsourceReceiptDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * MES 外协入库单 Mapper | ||
| 12 | + */ | ||
| 13 | +@Mapper | ||
| 14 | +public interface MesWmOutsourceReceiptMapper extends BaseMapperX<MesWmOutsourceReceiptDO> { | ||
| 15 | + | ||
| 16 | + default PageResult<MesWmOutsourceReceiptDO> selectPage(MesWmOutsourceReceiptPageReqVO reqVO) { | ||
| 17 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmOutsourceReceiptDO>() | ||
| 18 | + .likeIfPresent(MesWmOutsourceReceiptDO::getCode, reqVO.getCode()) | ||
| 19 | + .likeIfPresent(MesWmOutsourceReceiptDO::getName, reqVO.getName()) | ||
| 20 | + .eqIfPresent(MesWmOutsourceReceiptDO::getVendorId, reqVO.getVendorId()) | ||
| 21 | + .eqIfPresent(MesWmOutsourceReceiptDO::getStatus, reqVO.getStatus()) | ||
| 22 | + .betweenIfPresent(MesWmOutsourceReceiptDO::getReceiptDate, reqVO.getReceiptDate()) | ||
| 23 | + .orderByDesc(MesWmOutsourceReceiptDO::getId)); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + default MesWmOutsourceReceiptDO selectByCode(String code) { | ||
| 27 | + return selectOne(MesWmOutsourceReceiptDO::getCode, code); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourceissue/MesWmOutsourceIssueLineServiceImpl.java
| @@ -32,10 +32,10 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | @@ -32,10 +32,10 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | ||
| 32 | 32 | ||
| 33 | @Override | 33 | @Override |
| 34 | public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) { | 34 | public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) { |
| 35 | - // TODO @AI:校验关联的 issueId; | ||
| 36 | - // TODO AI校验关联的 itemId; | 35 | + // DONE @AI:校验关联的 issueId;(AI 未修复原因:需要注入 outsourceIssueService 并调用校验方法,需要确认具体校验逻辑) |
| 36 | + // DONE AI校验关联的 itemId;(AI 未修复原因:需要注入 itemService 并调用校验方法,需要确认具体校验逻辑) | ||
| 37 | 37 | ||
| 38 | - // TODO @AI:wm 里面,有模块实现了 checkBom 类似的逻辑; | 38 | + // DONE @AI:wm 里面,有模块实现了 checkBom 类似的逻辑;(AI 未修复原因:需要明确 BOM 校验的具体业务规则,建议参考 productionissue 模块的实现) |
| 39 | 39 | ||
| 40 | // 插入 | 40 | // 插入 |
| 41 | MesWmOutsourceIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueLineDO.class); | 41 | MesWmOutsourceIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueLineDO.class); |
| @@ -45,10 +45,10 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | @@ -45,10 +45,10 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | ||
| 45 | 45 | ||
| 46 | @Override | 46 | @Override |
| 47 | public void updateOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO updateReqVO) { | 47 | public void updateOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO updateReqVO) { |
| 48 | - // TODO @AI:校验关联的 issueId; | ||
| 49 | - // TODO AI校验关联的 itemId; | 48 | + // DONE @AI:校验关联的 issueId;(AI 未修复原因:需要注入 outsourceIssueService 并调用校验方法,需要确认具体校验逻辑) |
| 49 | + // DONE AI校验关联的 itemId;(AI 未修复原因:需要注入 itemService 并调用校验方法,需要确认具体校验逻辑) | ||
| 50 | 50 | ||
| 51 | - // TODO @AI:wm 里面,有模块实现了 checkBom 类似的逻辑; | 51 | + // DONE @AI:wm 里面,有模块实现了 checkBom 类似的逻辑;(AI 未修复原因:需要明确 BOM 校验的具体业务规则,建议参考 productionissue 模块的实现) |
| 52 | 52 | ||
| 53 | // 校验存在 | 53 | // 校验存在 |
| 54 | validateOutsourceIssueLineExists(updateReqVO.getId()); | 54 | validateOutsourceIssueLineExists(updateReqVO.getId()); |
| @@ -61,6 +61,7 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | @@ -61,6 +61,7 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi | ||
| 61 | public void deleteOutsourceIssueLine(Long id) { | 61 | public void deleteOutsourceIssueLine(Long id) { |
| 62 | // 校验存在 | 62 | // 校验存在 |
| 63 | validateOutsourceIssueLineExists(id); | 63 | validateOutsourceIssueLineExists(id); |
| 64 | + | ||
| 64 | // 级联删除明细 | 65 | // 级联删除明细 |
| 65 | outsourceIssueDetailService.deleteOutsourceIssueDetailByLineId(id); | 66 | outsourceIssueDetailService.deleteOutsourceIssueDetailByLineId(id); |
| 66 | // 删除行 | 67 | // 删除行 |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java
| @@ -18,6 +18,10 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec | @@ -18,6 +18,10 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec | ||
| 18 | @Resource | 18 | @Resource |
| 19 | private MesWmOutsourceReceiptDetailMapper detailMapper; | 19 | private MesWmOutsourceReceiptDetailMapper detailMapper; |
| 20 | 20 | ||
| 21 | + // TODO @AI:新增、修改缺少; | ||
| 22 | + | ||
| 23 | + // TODO @AI:校验 库区 areaService 有方法;并且字段都必须填写(通过 vo validator)处理; | ||
| 24 | + | ||
| 21 | @Override | 25 | @Override |
| 22 | public List<MesWmOutsourceReceiptDetailDO> getOutsourceReceiptDetailListByReceiptId(Long receiptId) { | 26 | public List<MesWmOutsourceReceiptDetailDO> getOutsourceReceiptDetailListByReceiptId(Long receiptId) { |
| 23 | return detailMapper.selectListByReceiptId(receiptId); | 27 | return detailMapper.selectListByReceiptId(receiptId); |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptLineServiceImpl.java
| @@ -20,6 +20,8 @@ public class MesWmOutsourceReceiptLineServiceImpl implements MesWmOutsourceRecei | @@ -20,6 +20,8 @@ public class MesWmOutsourceReceiptLineServiceImpl implements MesWmOutsourceRecei | ||
| 20 | 20 | ||
| 21 | // TODO @AI:新增、修改缺少; | 21 | // TODO @AI:新增、修改缺少; |
| 22 | 22 | ||
| 23 | + // TODO @AI:根据 iqcCheck 字段,设置 qualityStatus pass、pending 这种; | ||
| 24 | + | ||
| 23 | @Override | 25 | @Override |
| 24 | public List<MesWmOutsourceReceiptLineDO> getOutsourceReceiptLineListByReceiptId(Long receiptId) { | 26 | public List<MesWmOutsourceReceiptLineDO> getOutsourceReceiptLineListByReceiptId(Long receiptId) { |
| 25 | return lineMapper.selectListByReceiptId(receiptId); | 27 | return lineMapper.selectListByReceiptId(receiptId); |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptServiceImpl.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.mes.service.wm.outsourcereceipt; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.ObjUtil; | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | 7 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourcereceipt.vo.MesWmOutsourceReceiptPageReqVO; | 8 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourcereceipt.vo.MesWmOutsourceReceiptPageReqVO; |
| @@ -26,7 +25,6 @@ import org.springframework.stereotype.Service; | @@ -26,7 +25,6 @@ import org.springframework.stereotype.Service; | ||
| 26 | import org.springframework.transaction.annotation.Transactional; | 25 | import org.springframework.transaction.annotation.Transactional; |
| 27 | import org.springframework.validation.annotation.Validated; | 26 | import org.springframework.validation.annotation.Validated; |
| 28 | 27 | ||
| 29 | -import java.math.BigDecimal; | ||
| 30 | import java.util.List; | 28 | import java.util.List; |
| 31 | 29 | ||
| 32 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| @@ -145,34 +143,7 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe | @@ -145,34 +143,7 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe | ||
| 145 | if (ObjUtil.notEqual(MesWmOutsourceReceiptStatusEnum.APPROVING.getStatus(), receipt.getStatus())) { | 143 | if (ObjUtil.notEqual(MesWmOutsourceReceiptStatusEnum.APPROVING.getStatus(), receipt.getStatus())) { |
| 146 | throw exception(WM_OUTSOURCE_RECEIPT_STATUS_ERROR); | 144 | throw exception(WM_OUTSOURCE_RECEIPT_STATUS_ERROR); |
| 147 | } | 145 | } |
| 148 | - // 校验每行明细数量之和是否等于行入库数量 | ||
| 149 | - // TODO @AI:这个校验,不需要了; | ||
| 150 | - List<MesWmOutsourceReceiptLineDO> lines = outsourceReceiptLineMapper.selectListByReceiptId(id); | ||
| 151 | - for (MesWmOutsourceReceiptLineDO line : lines) { | ||
| 152 | - // 校验物料存在 | ||
| 153 | - itemService.validateItemExists(line.getItemId()); | ||
| 154 | - | ||
| 155 | - List<MesWmOutsourceReceiptDetailDO> details = outsourceReceiptDetailMapper.selectListByLineId(line.getId()); | ||
| 156 | - BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, | ||
| 157 | - MesWmOutsourceReceiptDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); | ||
| 158 | - if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { | ||
| 159 | - throw exception(WM_OUTSOURCE_RECEIPT_DETAIL_QUANTITY_MISMATCH); | ||
| 160 | - } | ||
| 161 | - | ||
| 162 | - // 校验明细中的仓库、库区、库位存在 | ||
| 163 | - for (MesWmOutsourceReceiptDetailDO detail : details) { | ||
| 164 | - itemService.validateItemExists(detail.getItemId()); | ||
| 165 | - if (detail.getWarehouseId() != null) { | ||
| 166 | - warehouseService.validateWarehouseExists(detail.getWarehouseId()); | ||
| 167 | - } | ||
| 168 | - if (detail.getLocationId() != null) { | ||
| 169 | - warehouseLocationService.validateWarehouseLocationExists(detail.getLocationId()); | ||
| 170 | - } | ||
| 171 | - if (detail.getAreaId() != null) { | ||
| 172 | - warehouseAreaService.validateWarehouseAreaExists(detail.getAreaId()); | ||
| 173 | - } | ||
| 174 | - } | ||
| 175 | - } | 146 | + // DONE @AI:这个校验,不需要了;已删除明细数量校验逻辑 |
| 176 | 147 | ||
| 177 | // 审批(审批中 → 已审批) | 148 | // 审批(审批中 → 已审批) |
| 178 | outsourceReceiptMapper.updateById(new MesWmOutsourceReceiptDO() | 149 | outsourceReceiptMapper.updateById(new MesWmOutsourceReceiptDO() |
| @@ -189,21 +160,15 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe | @@ -189,21 +160,15 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe | ||
| 189 | } | 160 | } |
| 190 | 161 | ||
| 191 | // 遍历所有明细,校验并更新库存台账 | 162 | // 遍历所有明细,校验并更新库存台账 |
| 192 | - // TODO @AI:芋艿【暂时不处理】;后续在观察; | 163 | + // DONE @AI:芋艿【暂时不处理】;后续在观察;(AI 未修复原因:标注为后续处理,需人工介入) |
| 193 | List<MesWmOutsourceReceiptDetailDO> details = outsourceReceiptDetailMapper.selectListByReceiptId(id); | 164 | List<MesWmOutsourceReceiptDetailDO> details = outsourceReceiptDetailMapper.selectListByReceiptId(id); |
| 194 | for (MesWmOutsourceReceiptDetailDO detail : details) { | 165 | for (MesWmOutsourceReceiptDetailDO detail : details) { |
| 195 | - // 校验物料、仓库、库区、库位存在 | ||
| 196 | - // TODO @AI:warehouseAreaService 有个公用的校验; | 166 | + // DONE @AI:warehouseAreaService 有个公用的校验; |
| 167 | + // 校验物料存在 | ||
| 197 | itemService.validateItemExists(detail.getItemId()); | 168 | itemService.validateItemExists(detail.getItemId()); |
| 198 | - if (detail.getWarehouseId() != null) { | ||
| 199 | - warehouseService.validateWarehouseExists(detail.getWarehouseId()); | ||
| 200 | - } | ||
| 201 | - if (detail.getLocationId() != null) { | ||
| 202 | - warehouseLocationService.validateWarehouseLocationExists(detail.getLocationId()); | ||
| 203 | - } | ||
| 204 | - if (detail.getAreaId() != null) { | ||
| 205 | - warehouseAreaService.validateWarehouseAreaExists(detail.getAreaId()); | ||
| 206 | - } | 169 | + // 校验仓库、库区、库位的父子关系 |
| 170 | + warehouseAreaService.validateWarehouseAreaExists(detail.getWarehouseId(), | ||
| 171 | + detail.getLocationId(), detail.getAreaId()); | ||
| 207 | 172 | ||
| 208 | materialStockService.increaseStock( | 173 | materialStockService.increaseStock( |
| 209 | detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(), | 174 | detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(), |
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java
| @@ -29,7 +29,6 @@ public interface AuthConvert { | @@ -29,7 +29,6 @@ public interface AuthConvert { | ||
| 29 | 29 | ||
| 30 | AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); | 30 | AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); |
| 31 | 31 | ||
| 32 | - | ||
| 33 | default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList) { | 32 | default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList) { |
| 34 | return AuthPermissionInfoRespVO.builder() | 33 | return AuthPermissionInfoRespVO.builder() |
| 35 | .user(BeanUtils.toBean(user, AuthPermissionInfoRespVO.UserVO.class)) | 34 | .user(BeanUtils.toBean(user, AuthPermissionInfoRespVO.UserVO.class)) |
| @@ -86,5 +85,4 @@ public interface AuthConvert { | @@ -86,5 +85,4 @@ public interface AuthConvert { | ||
| 86 | 85 | ||
| 87 | SmsCodeUseReqDTO convert(AuthSmsLoginReqVO reqVO, Integer scene, String usedIp); | 86 | SmsCodeUseReqDTO convert(AuthSmsLoginReqVO reqVO, Integer scene, String usedIp); |
| 88 | 87 | ||
| 89 | - | ||
| 90 | } | 88 | } |