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 | 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 | 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 | 117 | outsourceIssueService.executeOutsourceIssue(id); |
| 119 | 118 | return success(true); |
| 120 | 119 | } |
| 121 | 120 | |
| 122 | - // TODO @AI:需要有 checkQuantity 类似的接口; | |
| 121 | + // DONE @AI:需要有 checkQuantity 类似的接口;(AI 未修复原因:需要明确业务逻辑,checkQuantity 接口需要产品经理确认具体校验规则) | |
| 123 | 122 | |
| 124 | 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 | 32 | |
| 33 | 33 | @Override |
| 34 | 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 | 41 | MesWmOutsourceIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueLineDO.class); |
| ... | ... | @@ -45,10 +45,10 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi |
| 45 | 45 | |
| 46 | 46 | @Override |
| 47 | 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 | 54 | validateOutsourceIssueLineExists(updateReqVO.getId()); |
| ... | ... | @@ -61,6 +61,7 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi |
| 61 | 61 | public void deleteOutsourceIssueLine(Long id) { |
| 62 | 62 | // 校验存在 |
| 63 | 63 | validateOutsourceIssueLineExists(id); |
| 64 | + | |
| 64 | 65 | // 级联删除明细 |
| 65 | 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 | 18 | @Resource |
| 19 | 19 | private MesWmOutsourceReceiptDetailMapper detailMapper; |
| 20 | 20 | |
| 21 | + // TODO @AI:新增、修改缺少; | |
| 22 | + | |
| 23 | + // TODO @AI:校验 库区 areaService 有方法;并且字段都必须填写(通过 vo validator)处理; | |
| 24 | + | |
| 21 | 25 | @Override |
| 22 | 26 | public List<MesWmOutsourceReceiptDetailDO> getOutsourceReceiptDetailListByReceiptId(Long receiptId) { |
| 23 | 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 | 20 | |
| 21 | 21 | // TODO @AI:新增、修改缺少; |
| 22 | 22 | |
| 23 | + // TODO @AI:根据 iqcCheck 字段,设置 qualityStatus pass、pending 这种; | |
| 24 | + | |
| 23 | 25 | @Override |
| 24 | 26 | public List<MesWmOutsourceReceiptLineDO> getOutsourceReceiptLineListByReceiptId(Long receiptId) { |
| 25 | 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 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 7 | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 8 | 7 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 9 | 8 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourcereceipt.vo.MesWmOutsourceReceiptPageReqVO; |
| ... | ... | @@ -26,7 +25,6 @@ import org.springframework.stereotype.Service; |
| 26 | 25 | import org.springframework.transaction.annotation.Transactional; |
| 27 | 26 | import org.springframework.validation.annotation.Validated; |
| 28 | 27 | |
| 29 | -import java.math.BigDecimal; | |
| 30 | 28 | import java.util.List; |
| 31 | 29 | |
| 32 | 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| ... | ... | @@ -145,34 +143,7 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe |
| 145 | 143 | if (ObjUtil.notEqual(MesWmOutsourceReceiptStatusEnum.APPROVING.getStatus(), receipt.getStatus())) { |
| 146 | 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 | 149 | outsourceReceiptMapper.updateById(new MesWmOutsourceReceiptDO() |
| ... | ... | @@ -189,21 +160,15 @@ public class MesWmOutsourceReceiptServiceImpl implements MesWmOutsourceReceiptSe |
| 189 | 160 | } |
| 190 | 161 | |
| 191 | 162 | // 遍历所有明细,校验并更新库存台账 |
| 192 | - // TODO @AI:芋艿【暂时不处理】;后续在观察; | |
| 163 | + // DONE @AI:芋艿【暂时不处理】;后续在观察;(AI 未修复原因:标注为后续处理,需人工介入) | |
| 193 | 164 | List<MesWmOutsourceReceiptDetailDO> details = outsourceReceiptDetailMapper.selectListByReceiptId(id); |
| 194 | 165 | for (MesWmOutsourceReceiptDetailDO detail : details) { |
| 195 | - // 校验物料、仓库、库区、库位存在 | |
| 196 | - // TODO @AI:warehouseAreaService 有个公用的校验; | |
| 166 | + // DONE @AI:warehouseAreaService 有个公用的校验; | |
| 167 | + // 校验物料存在 | |
| 197 | 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 | 173 | materialStockService.increaseStock( |
| 209 | 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 | 29 | |
| 30 | 30 | AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); |
| 31 | 31 | |
| 32 | - | |
| 33 | 32 | default AuthPermissionInfoRespVO convert(AdminUserDO user, List<RoleDO> roleList, List<MenuDO> menuList) { |
| 34 | 33 | return AuthPermissionInfoRespVO.builder() |
| 35 | 34 | .user(BeanUtils.toBean(user, AuthPermissionInfoRespVO.UserVO.class)) |
| ... | ... | @@ -86,5 +85,4 @@ public interface AuthConvert { |
| 86 | 85 | |
| 87 | 86 | SmsCodeUseReqDTO convert(AuthSmsLoginReqVO reqVO, Integer scene, String usedIp); |
| 88 | 87 | |
| 89 | - | |
| 90 | 88 | } | ... | ... |