Commit 55f86d4e9ae0b0828b7498c3a6dc472ce4c91baa
1 parent
09442e65
feat(mes): add request and response VO for MES item receipt and detail, includin…
…g service and controller implementations
Showing
24 changed files
with
2037 additions
and
0 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 7 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 8 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | ||
| 9 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 10 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | ||
| 11 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptPageReqVO; | ||
| 12 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptRespVO; | ||
| 13 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO; | ||
| 14 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.vendor.MesMdVendorDO; | ||
| 15 | +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.lqc.MesQcIqcDO; | ||
| 16 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeDO; | ||
| 17 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; | ||
| 18 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 19 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 20 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 21 | +import cn.iocoder.yudao.module.mes.service.md.vendor.MesMdVendorService; | ||
| 22 | +import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcService; | ||
| 23 | +import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; | ||
| 24 | +import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptService; | ||
| 25 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; | ||
| 26 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; | ||
| 27 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; | ||
| 28 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 29 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 30 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 31 | +import jakarta.annotation.Resource; | ||
| 32 | +import jakarta.servlet.http.HttpServletResponse; | ||
| 33 | +import jakarta.validation.Valid; | ||
| 34 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 35 | +import org.springframework.validation.annotation.Validated; | ||
| 36 | +import org.springframework.web.bind.annotation.*; | ||
| 37 | + | ||
| 38 | +import java.io.IOException; | ||
| 39 | +import java.util.Collections; | ||
| 40 | +import java.util.List; | ||
| 41 | +import java.util.Map; | ||
| 42 | + | ||
| 43 | +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; | ||
| 44 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 45 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 46 | + | ||
| 47 | +@Tag(name = "管理后台 - MES 采购入库单") | ||
| 48 | +@RestController | ||
| 49 | +@RequestMapping("/mes/wm/item-receipt") | ||
| 50 | +@Validated | ||
| 51 | +public class MesWmItemReceiptController { | ||
| 52 | + | ||
| 53 | + @Resource | ||
| 54 | + private MesWmItemReceiptService itemReceiptService; | ||
| 55 | + | ||
| 56 | + @Resource | ||
| 57 | + private MesMdVendorService vendorService; | ||
| 58 | + | ||
| 59 | + @Resource | ||
| 60 | + private MesWmWarehouseService warehouseService; | ||
| 61 | + | ||
| 62 | + @Resource | ||
| 63 | + private MesWmWarehouseLocationService locationService; | ||
| 64 | + | ||
| 65 | + @Resource | ||
| 66 | + private MesWmWarehouseAreaService areaService; | ||
| 67 | + | ||
| 68 | + @Resource | ||
| 69 | + private MesQcIqcService iqcService; | ||
| 70 | + | ||
| 71 | + @Resource | ||
| 72 | + private MesWmArrivalNoticeService arrivalNoticeService; | ||
| 73 | + | ||
| 74 | + @PostMapping("/create") | ||
| 75 | + @Operation(summary = "创建采购入库单") | ||
| 76 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:create')") | ||
| 77 | + public CommonResult<Long> createItemReceipt(@Valid @RequestBody MesWmItemReceiptSaveReqVO createReqVO) { | ||
| 78 | + return success(itemReceiptService.createItemReceipt(createReqVO)); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @PutMapping("/update") | ||
| 82 | + @Operation(summary = "修改采购入库单") | ||
| 83 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") | ||
| 84 | + public CommonResult<Boolean> updateItemReceipt(@Valid @RequestBody MesWmItemReceiptSaveReqVO updateReqVO) { | ||
| 85 | + itemReceiptService.updateItemReceipt(updateReqVO); | ||
| 86 | + return success(true); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + @DeleteMapping("/delete") | ||
| 90 | + @Operation(summary = "删除采购入库单") | ||
| 91 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 92 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:delete')") | ||
| 93 | + public CommonResult<Boolean> deleteItemReceipt(@RequestParam("id") Long id) { | ||
| 94 | + itemReceiptService.deleteItemReceipt(id); | ||
| 95 | + return success(true); | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + @GetMapping("/get") | ||
| 99 | + @Operation(summary = "获得采购入库单") | ||
| 100 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 101 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 102 | + public CommonResult<MesWmItemReceiptRespVO> getItemReceipt(@RequestParam("id") Long id) { | ||
| 103 | + MesWmItemReceiptDO receipt = itemReceiptService.getItemReceipt(id); | ||
| 104 | + if (receipt == null) { | ||
| 105 | + return success(null); | ||
| 106 | + } | ||
| 107 | + return success(buildRespVOList(Collections.singletonList(receipt)).get(0)); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + @GetMapping("/page") | ||
| 111 | + @Operation(summary = "获得采购入库单分页") | ||
| 112 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 113 | + public CommonResult<PageResult<MesWmItemReceiptRespVO>> getItemReceiptPage( | ||
| 114 | + @Valid MesWmItemReceiptPageReqVO pageReqVO) { | ||
| 115 | + PageResult<MesWmItemReceiptDO> pageResult = itemReceiptService.getItemReceiptPage(pageReqVO); | ||
| 116 | + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + @GetMapping("/export-excel") | ||
| 120 | + @Operation(summary = "导出采购入库单 Excel") | ||
| 121 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:export')") | ||
| 122 | + @ApiAccessLog(operateType = EXPORT) | ||
| 123 | + public void exportItemReceiptExcel(@Valid MesWmItemReceiptPageReqVO pageReqVO, | ||
| 124 | + HttpServletResponse response) throws IOException { | ||
| 125 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 126 | + PageResult<MesWmItemReceiptDO> pageResult = itemReceiptService.getItemReceiptPage(pageReqVO); | ||
| 127 | + ExcelUtils.write(response, "采购入库单.xls", "数据", MesWmItemReceiptRespVO.class, | ||
| 128 | + buildRespVOList(pageResult.getList())); | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + @PutMapping("/submit") | ||
| 132 | + @Operation(summary = "提交采购入库单") | ||
| 133 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 134 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") | ||
| 135 | + public CommonResult<Boolean> submitItemReceipt(@RequestParam("id") Long id) { | ||
| 136 | + itemReceiptService.submitItemReceipt(id); | ||
| 137 | + return success(true); | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + @PutMapping("/approve") | ||
| 141 | + @Operation(summary = "审批采购入库单") | ||
| 142 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 143 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") | ||
| 144 | + public CommonResult<Boolean> approveItemReceipt(@RequestParam("id") Long id) { | ||
| 145 | + itemReceiptService.approveItemReceipt(id); | ||
| 146 | + return success(true); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + @PutMapping("/execute") | ||
| 150 | + @Operation(summary = "执行入库") | ||
| 151 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 152 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:execute')") | ||
| 153 | + public CommonResult<Boolean> executeItemReceipt(@RequestParam("id") Long id) { | ||
| 154 | + itemReceiptService.executeItemReceipt(id); | ||
| 155 | + return success(true); | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + // ==================== 拼接 VO ==================== | ||
| 159 | + | ||
| 160 | + private List<MesWmItemReceiptRespVO> buildRespVOList(List<MesWmItemReceiptDO> list) { | ||
| 161 | + if (CollUtil.isEmpty(list)) { | ||
| 162 | + return Collections.emptyList(); | ||
| 163 | + } | ||
| 164 | + // 1. 获得关联数据 | ||
| 165 | + Map<Long, MesMdVendorDO> vendorMap = vendorService.getVendorMap( | ||
| 166 | + convertSet(list, MesWmItemReceiptDO::getVendorId)); | ||
| 167 | + Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap( | ||
| 168 | + convertSet(list, MesWmItemReceiptDO::getWarehouseId)); | ||
| 169 | + Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap( | ||
| 170 | + convertSet(list, MesWmItemReceiptDO::getLocationId)); | ||
| 171 | + Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap( | ||
| 172 | + convertSet(list, MesWmItemReceiptDO::getAreaId)); | ||
| 173 | + Map<Long, MesQcIqcDO> iqcMap = iqcService.getIqcMap( | ||
| 174 | + convertSet(list, MesWmItemReceiptDO::getIqcId)); | ||
| 175 | + Map<Long, MesWmArrivalNoticeDO> noticeMap = arrivalNoticeService.getArrivalNoticeMap( | ||
| 176 | + convertSet(list, MesWmItemReceiptDO::getNoticeId)); | ||
| 177 | + // 2. 构建结果 | ||
| 178 | + return BeanUtils.toBean(list, MesWmItemReceiptRespVO.class, vo -> { | ||
| 179 | + MapUtils.findAndThen(vendorMap, vo.getVendorId(), | ||
| 180 | + vendor -> vo.setVendorName(vendor.getName())); | ||
| 181 | + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), | ||
| 182 | + warehouse -> vo.setWarehouseName(warehouse.getName())); | ||
| 183 | + MapUtils.findAndThen(locationMap, vo.getLocationId(), | ||
| 184 | + location -> vo.setLocationName(location.getName())); | ||
| 185 | + MapUtils.findAndThen(areaMap, vo.getAreaId(), | ||
| 186 | + area -> vo.setAreaName(area.getName())); | ||
| 187 | + MapUtils.findAndThen(iqcMap, vo.getIqcId(), | ||
| 188 | + iqc -> vo.setIqcCode(iqc.getCode())); | ||
| 189 | + MapUtils.findAndThen(noticeMap, vo.getNoticeId(), | ||
| 190 | + notice -> vo.setNoticeCode(notice.getCode())); | ||
| 191 | + }); | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptDetailController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | ||
| 7 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailPageReqVO; | ||
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailRespVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailSaveReqVO; | ||
| 11 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | ||
| 12 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; | ||
| 13 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO; | ||
| 14 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 15 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 16 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 17 | +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | ||
| 18 | +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; | ||
| 19 | +import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptDetailService; | ||
| 20 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; | ||
| 21 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; | ||
| 22 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; | ||
| 23 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 24 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 25 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 26 | +import jakarta.annotation.Resource; | ||
| 27 | +import jakarta.validation.Valid; | ||
| 28 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 29 | +import org.springframework.validation.annotation.Validated; | ||
| 30 | +import org.springframework.web.bind.annotation.*; | ||
| 31 | + | ||
| 32 | +import java.util.Collections; | ||
| 33 | +import java.util.List; | ||
| 34 | +import java.util.Map; | ||
| 35 | + | ||
| 36 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 37 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 38 | + | ||
| 39 | +@Tag(name = "管理后台 - MES 采购入库明细") | ||
| 40 | +@RestController | ||
| 41 | +@RequestMapping("/mes/wm/item-receipt-detail") | ||
| 42 | +@Validated | ||
| 43 | +public class MesWmItemReceiptDetailController { | ||
| 44 | + | ||
| 45 | + @Resource | ||
| 46 | + private MesWmItemReceiptDetailService itemReceiptDetailService; | ||
| 47 | + | ||
| 48 | + @Resource | ||
| 49 | + private MesMdItemService itemService; | ||
| 50 | + | ||
| 51 | + @Resource | ||
| 52 | + private MesMdUnitMeasureService unitMeasureService; | ||
| 53 | + | ||
| 54 | + @Resource | ||
| 55 | + private MesWmWarehouseService warehouseService; | ||
| 56 | + | ||
| 57 | + @Resource | ||
| 58 | + private MesWmWarehouseLocationService locationService; | ||
| 59 | + | ||
| 60 | + @Resource | ||
| 61 | + private MesWmWarehouseAreaService areaService; | ||
| 62 | + | ||
| 63 | + @PostMapping("/create") | ||
| 64 | + @Operation(summary = "创建采购入库明细") | ||
| 65 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:create')") | ||
| 66 | + public CommonResult<Long> createItemReceiptDetail(@Valid @RequestBody MesWmItemReceiptDetailSaveReqVO createReqVO) { | ||
| 67 | + return success(itemReceiptDetailService.createItemReceiptDetail(createReqVO)); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @PutMapping("/update") | ||
| 71 | + @Operation(summary = "修改采购入库明细") | ||
| 72 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") | ||
| 73 | + public CommonResult<Boolean> updateItemReceiptDetail(@Valid @RequestBody MesWmItemReceiptDetailSaveReqVO updateReqVO) { | ||
| 74 | + itemReceiptDetailService.updateItemReceiptDetail(updateReqVO); | ||
| 75 | + return success(true); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @DeleteMapping("/delete") | ||
| 79 | + @Operation(summary = "删除采购入库明细") | ||
| 80 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 81 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:delete')") | ||
| 82 | + public CommonResult<Boolean> deleteItemReceiptDetail(@RequestParam("id") Long id) { | ||
| 83 | + itemReceiptDetailService.deleteItemReceiptDetail(id); | ||
| 84 | + return success(true); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + @GetMapping("/get") | ||
| 88 | + @Operation(summary = "获得采购入库明细") | ||
| 89 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 90 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 91 | + public CommonResult<MesWmItemReceiptDetailRespVO> getItemReceiptDetail(@RequestParam("id") Long id) { | ||
| 92 | + MesWmItemReceiptDetailDO detail = itemReceiptDetailService.getItemReceiptDetail(id); | ||
| 93 | + if (detail == null) { | ||
| 94 | + return success(null); | ||
| 95 | + } | ||
| 96 | + return success(buildRespVOList(Collections.singletonList(detail)).get(0)); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + @GetMapping("/page") | ||
| 100 | + @Operation(summary = "获得采购入库明细分页") | ||
| 101 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 102 | + public CommonResult<PageResult<MesWmItemReceiptDetailRespVO>> getItemReceiptDetailPage( | ||
| 103 | + @Valid MesWmItemReceiptDetailPageReqVO pageReqVO) { | ||
| 104 | + PageResult<MesWmItemReceiptDetailDO> pageResult = itemReceiptDetailService.getItemReceiptDetailPage(pageReqVO); | ||
| 105 | + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + // ==================== 拼接 VO ==================== | ||
| 109 | + | ||
| 110 | + private List<MesWmItemReceiptDetailRespVO> buildRespVOList(List<MesWmItemReceiptDetailDO> list) { | ||
| 111 | + if (CollUtil.isEmpty(list)) { | ||
| 112 | + return Collections.emptyList(); | ||
| 113 | + } | ||
| 114 | + // 1. 获得关联数据 | ||
| 115 | + Map<Long, MesMdItemDO> itemMap = itemService.getItemMap( | ||
| 116 | + convertSet(list, MesWmItemReceiptDetailDO::getItemId)); | ||
| 117 | + Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap( | ||
| 118 | + convertSet(list, MesWmItemReceiptDetailDO::getWarehouseId)); | ||
| 119 | + Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap( | ||
| 120 | + convertSet(list, MesWmItemReceiptDetailDO::getLocationId)); | ||
| 121 | + Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap( | ||
| 122 | + convertSet(list, MesWmItemReceiptDetailDO::getAreaId)); | ||
| 123 | + // 2. 构建结果 | ||
| 124 | + return BeanUtils.toBean(list, MesWmItemReceiptDetailRespVO.class, vo -> { | ||
| 125 | + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { | ||
| 126 | + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); | ||
| 127 | + // TODO @AI:批量查询,避免 N+1 查询 | ||
| 128 | + if (item.getUnitMeasureId() != null) { | ||
| 129 | + MesMdUnitMeasureDO unitMeasure = unitMeasureService.getUnitMeasure(item.getUnitMeasureId()); | ||
| 130 | + if (unitMeasure != null) { | ||
| 131 | + vo.setUnitMeasureName(unitMeasure.getName()); | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + }); | ||
| 135 | + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), | ||
| 136 | + warehouse -> vo.setWarehouseName(warehouse.getName())); | ||
| 137 | + MapUtils.findAndThen(locationMap, vo.getLocationId(), | ||
| 138 | + location -> vo.setLocationName(location.getName())); | ||
| 139 | + MapUtils.findAndThen(areaMap, vo.getAreaId(), | ||
| 140 | + area -> vo.setAreaName(area.getName())); | ||
| 141 | + }); | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptLineController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | ||
| 7 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 8 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLinePageReqVO; | ||
| 9 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineRespVO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO; | ||
| 11 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | ||
| 12 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; | ||
| 13 | +import cn.iocoder.yudao.module.mes.dal.dataobject.qc.lqc.MesQcIqcDO; | ||
| 14 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; | ||
| 15 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 16 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 17 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 18 | +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | ||
| 19 | +import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; | ||
| 20 | +import cn.iocoder.yudao.module.mes.service.qc.lqc.MesQcIqcService; | ||
| 21 | +import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptLineService; | ||
| 22 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; | ||
| 23 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; | ||
| 24 | +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; | ||
| 25 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 26 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 27 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 28 | +import jakarta.annotation.Resource; | ||
| 29 | +import jakarta.validation.Valid; | ||
| 30 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 31 | +import org.springframework.validation.annotation.Validated; | ||
| 32 | +import org.springframework.web.bind.annotation.*; | ||
| 33 | + | ||
| 34 | +import java.util.Collections; | ||
| 35 | +import java.util.List; | ||
| 36 | +import java.util.Map; | ||
| 37 | + | ||
| 38 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 39 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 40 | + | ||
| 41 | +@Tag(name = "管理后台 - MES 采购入库单行") | ||
| 42 | +@RestController | ||
| 43 | +@RequestMapping("/mes/wm/item-receipt-line") | ||
| 44 | +@Validated | ||
| 45 | +public class MesWmItemReceiptLineController { | ||
| 46 | + | ||
| 47 | + @Resource | ||
| 48 | + private MesWmItemReceiptLineService itemReceiptLineService; | ||
| 49 | + | ||
| 50 | + @Resource | ||
| 51 | + private MesMdItemService itemService; | ||
| 52 | + | ||
| 53 | + @Resource | ||
| 54 | + private MesMdUnitMeasureService unitMeasureService; | ||
| 55 | + | ||
| 56 | + @Resource | ||
| 57 | + private MesWmWarehouseService warehouseService; | ||
| 58 | + | ||
| 59 | + @Resource | ||
| 60 | + private MesWmWarehouseLocationService locationService; | ||
| 61 | + | ||
| 62 | + @Resource | ||
| 63 | + private MesWmWarehouseAreaService areaService; | ||
| 64 | + | ||
| 65 | + @Resource | ||
| 66 | + private MesQcIqcService iqcService; | ||
| 67 | + | ||
| 68 | + @PostMapping("/create") | ||
| 69 | + @Operation(summary = "创建采购入库单行") | ||
| 70 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:create')") | ||
| 71 | + public CommonResult<Long> createItemReceiptLine(@Valid @RequestBody MesWmItemReceiptLineSaveReqVO createReqVO) { | ||
| 72 | + return success(itemReceiptLineService.createItemReceiptLine(createReqVO)); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + @PutMapping("/update") | ||
| 76 | + @Operation(summary = "修改采购入库单行") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") | ||
| 78 | + public CommonResult<Boolean> updateItemReceiptLine(@Valid @RequestBody MesWmItemReceiptLineSaveReqVO updateReqVO) { | ||
| 79 | + itemReceiptLineService.updateItemReceiptLine(updateReqVO); | ||
| 80 | + return success(true); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @DeleteMapping("/delete") | ||
| 84 | + @Operation(summary = "删除采购入库单行") | ||
| 85 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 86 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:delete')") | ||
| 87 | + public CommonResult<Boolean> deleteItemReceiptLine(@RequestParam("id") Long id) { | ||
| 88 | + itemReceiptLineService.deleteItemReceiptLine(id); | ||
| 89 | + return success(true); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + @GetMapping("/get") | ||
| 93 | + @Operation(summary = "获得采购入库单行") | ||
| 94 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 95 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 96 | + public CommonResult<MesWmItemReceiptLineRespVO> getItemReceiptLine(@RequestParam("id") Long id) { | ||
| 97 | + MesWmItemReceiptLineDO line = itemReceiptLineService.getItemReceiptLine(id); | ||
| 98 | + if (line == null) { | ||
| 99 | + return success(null); | ||
| 100 | + } | ||
| 101 | + return success(buildRespVOList(Collections.singletonList(line)).get(0)); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + @GetMapping("/page") | ||
| 105 | + @Operation(summary = "获得采购入库单行分页") | ||
| 106 | + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") | ||
| 107 | + public CommonResult<PageResult<MesWmItemReceiptLineRespVO>> getItemReceiptLinePage( | ||
| 108 | + @Valid MesWmItemReceiptLinePageReqVO pageReqVO) { | ||
| 109 | + PageResult<MesWmItemReceiptLineDO> pageResult = itemReceiptLineService.getItemReceiptLinePage(pageReqVO); | ||
| 110 | + return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + // ==================== 拼接 VO ==================== | ||
| 114 | + | ||
| 115 | + private List<MesWmItemReceiptLineRespVO> buildRespVOList(List<MesWmItemReceiptLineDO> list) { | ||
| 116 | + if (CollUtil.isEmpty(list)) { | ||
| 117 | + return Collections.emptyList(); | ||
| 118 | + } | ||
| 119 | + // 1. 获得关联数据 | ||
| 120 | + Map<Long, MesMdItemDO> itemMap = itemService.getItemMap( | ||
| 121 | + convertSet(list, MesWmItemReceiptLineDO::getItemId)); | ||
| 122 | + Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap( | ||
| 123 | + convertSet(list, MesWmItemReceiptLineDO::getWarehouseId)); | ||
| 124 | + Map<Long, MesWmWarehouseLocationDO> locationMap = locationService.getWarehouseLocationMap( | ||
| 125 | + convertSet(list, MesWmItemReceiptLineDO::getLocationId)); | ||
| 126 | + Map<Long, MesWmWarehouseAreaDO> areaMap = areaService.getWarehouseAreaMap( | ||
| 127 | + convertSet(list, MesWmItemReceiptLineDO::getAreaId)); | ||
| 128 | + Map<Long, MesQcIqcDO> iqcMap = iqcService.getIqcMap( | ||
| 129 | + convertSet(list, MesWmItemReceiptLineDO::getIqcId)); | ||
| 130 | + // 2. 构建结果 | ||
| 131 | + return BeanUtils.toBean(list, MesWmItemReceiptLineRespVO.class, vo -> { | ||
| 132 | + MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { | ||
| 133 | + vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); | ||
| 134 | + // TODO @AI:批量查询,避免 N+1 查询 | ||
| 135 | + if (item.getUnitMeasureId() != null) { | ||
| 136 | + MesMdUnitMeasureDO unitMeasure = unitMeasureService.getUnitMeasure(item.getUnitMeasureId()); | ||
| 137 | + if (unitMeasure != null) { | ||
| 138 | + vo.setUnitMeasureName(unitMeasure.getName()); | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + }); | ||
| 142 | + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), | ||
| 143 | + warehouse -> vo.setWarehouseName(warehouse.getName())); | ||
| 144 | + MapUtils.findAndThen(locationMap, vo.getLocationId(), | ||
| 145 | + location -> vo.setLocationName(location.getName())); | ||
| 146 | + MapUtils.findAndThen(areaMap, vo.getAreaId(), | ||
| 147 | + area -> vo.setAreaName(area.getName())); | ||
| 148 | + MapUtils.findAndThen(iqcMap, vo.getIqcId(), | ||
| 149 | + iqc -> vo.setIqcCode(iqc.getCode())); | ||
| 150 | + }); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库单分页 Request VO") | ||
| 10 | +@Data | ||
| 11 | +@EqualsAndHashCode(callSuper = true) | ||
| 12 | +@ToString(callSuper = true) | ||
| 13 | +public class MesWmItemReceiptPageReqVO extends PageParam { | ||
| 14 | + | ||
| 15 | + @Schema(description = "入库单编码", example = "IR2026020001") | ||
| 16 | + private String code; | ||
| 17 | + | ||
| 18 | + @Schema(description = "入库单名称", example = "钢板入库单") | ||
| 19 | + private String name; | ||
| 20 | + | ||
| 21 | + @Schema(description = "采购订单编号", example = "PO20260101") | ||
| 22 | + private String purchaseOrderCode; | ||
| 23 | + | ||
| 24 | + @Schema(description = "供应商编号", example = "1") | ||
| 25 | + private Long vendorId; | ||
| 26 | + | ||
| 27 | + @Schema(description = "状态", example = "0") | ||
| 28 | + private Integer status; | ||
| 29 | + | ||
| 30 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; | ||
| 4 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import lombok.Data; | ||
| 7 | + | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - MES 采购入库单 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class MesWmItemReceiptRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 16 | + @ExcelProperty("编号") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "入库单编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "IR2026020001") | ||
| 20 | + @ExcelProperty("入库单编码") | ||
| 21 | + private String code; | ||
| 22 | + | ||
| 23 | + @Schema(description = "入库单名称", example = "钢板入库单") | ||
| 24 | + @ExcelProperty("入库单名称") | ||
| 25 | + private String name; | ||
| 26 | + | ||
| 27 | + @Schema(description = "来料检验单编号", example = "1") | ||
| 28 | + private Long iqcId; | ||
| 29 | + | ||
| 30 | + @Schema(description = "来料检验单编码", example = "IQC20260201") | ||
| 31 | + @ExcelProperty("来料检验单") | ||
| 32 | + private String iqcCode; | ||
| 33 | + | ||
| 34 | + @Schema(description = "到货通知单编号", example = "1") | ||
| 35 | + private Long noticeId; | ||
| 36 | + | ||
| 37 | + @Schema(description = "到货通知单编码", example = "AN2026020001") | ||
| 38 | + @ExcelProperty("到货通知单") | ||
| 39 | + private String noticeCode; | ||
| 40 | + | ||
| 41 | + @Schema(description = "采购订单编号", example = "PO20260101") | ||
| 42 | + @ExcelProperty("采购订单编号") | ||
| 43 | + private String purchaseOrderCode; | ||
| 44 | + | ||
| 45 | + @Schema(description = "供应商编号", example = "1") | ||
| 46 | + private Long vendorId; | ||
| 47 | + | ||
| 48 | + @Schema(description = "供应商名称", example = "某供应商") | ||
| 49 | + @ExcelProperty("供应商") | ||
| 50 | + private String vendorName; | ||
| 51 | + | ||
| 52 | + @Schema(description = "仓库编号", example = "1") | ||
| 53 | + private Long warehouseId; | ||
| 54 | + | ||
| 55 | + @Schema(description = "仓库名称", example = "原料仓") | ||
| 56 | + @ExcelProperty("仓库") | ||
| 57 | + private String warehouseName; | ||
| 58 | + | ||
| 59 | + @Schema(description = "库区编号", example = "1") | ||
| 60 | + private Long locationId; | ||
| 61 | + | ||
| 62 | + @Schema(description = "库区名称", example = "A 区") | ||
| 63 | + @ExcelProperty("库区") | ||
| 64 | + private String locationName; | ||
| 65 | + | ||
| 66 | + @Schema(description = "库位编号", example = "1") | ||
| 67 | + private Long areaId; | ||
| 68 | + | ||
| 69 | + @Schema(description = "库位名称", example = "A-01") | ||
| 70 | + @ExcelProperty("库位") | ||
| 71 | + private String areaName; | ||
| 72 | + | ||
| 73 | + @Schema(description = "入库日期") | ||
| 74 | + @ExcelProperty("入库日期") | ||
| 75 | + private LocalDateTime receiptDate; | ||
| 76 | + | ||
| 77 | + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") | ||
| 78 | + @ExcelProperty("状态") | ||
| 79 | + private Integer status; | ||
| 80 | + | ||
| 81 | + @Schema(description = "备注", example = "备注") | ||
| 82 | + @ExcelProperty("备注") | ||
| 83 | + private String remark; | ||
| 84 | + | ||
| 85 | + @Schema(description = "预留字段1") | ||
| 86 | + private String attribute1; | ||
| 87 | + | ||
| 88 | + @Schema(description = "预留字段2") | ||
| 89 | + private String attribute2; | ||
| 90 | + | ||
| 91 | + @Schema(description = "预留字段3") | ||
| 92 | + private Integer attribute3; | ||
| 93 | + | ||
| 94 | + @Schema(description = "预留字段4") | ||
| 95 | + private Integer attribute4; | ||
| 96 | + | ||
| 97 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 98 | + @ExcelProperty("创建时间") | ||
| 99 | + private LocalDateTime createTime; | ||
| 100 | + | ||
| 101 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotEmpty; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库单新增/修改 Request VO") | ||
| 10 | +@Data | ||
| 11 | +public class MesWmItemReceiptSaveReqVO { | ||
| 12 | + | ||
| 13 | + @Schema(description = "编号", example = "1024") | ||
| 14 | + private Long id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "入库单编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "IR2026020001") | ||
| 17 | + @NotEmpty(message = "入库单编码不能为空") | ||
| 18 | + private String code; | ||
| 19 | + | ||
| 20 | + @Schema(description = "入库单名称", example = "钢板入库单") | ||
| 21 | + private String name; | ||
| 22 | + | ||
| 23 | + @Schema(description = "来料检验单编号", example = "1") | ||
| 24 | + private Long iqcId; | ||
| 25 | + | ||
| 26 | + @Schema(description = "到货通知单编号", example = "1") | ||
| 27 | + private Long noticeId; | ||
| 28 | + | ||
| 29 | + @Schema(description = "采购订单编号", example = "PO20260101") | ||
| 30 | + private String purchaseOrderCode; | ||
| 31 | + | ||
| 32 | + @Schema(description = "供应商编号", example = "1") | ||
| 33 | + private Long vendorId; | ||
| 34 | + | ||
| 35 | + @Schema(description = "仓库编号", example = "1") | ||
| 36 | + private Long warehouseId; | ||
| 37 | + | ||
| 38 | + @Schema(description = "库区编号", example = "1") | ||
| 39 | + private Long locationId; | ||
| 40 | + | ||
| 41 | + @Schema(description = "库位编号", example = "1") | ||
| 42 | + private Long areaId; | ||
| 43 | + | ||
| 44 | + @Schema(description = "入库日期") | ||
| 45 | + private LocalDateTime receiptDate; | ||
| 46 | + | ||
| 47 | + @Schema(description = "备注", example = "备注") | ||
| 48 | + private String remark; | ||
| 49 | + | ||
| 50 | + @Schema(description = "预留字段1") | ||
| 51 | + private String attribute1; | ||
| 52 | + | ||
| 53 | + @Schema(description = "预留字段2") | ||
| 54 | + private String attribute2; | ||
| 55 | + | ||
| 56 | + @Schema(description = "预留字段3") | ||
| 57 | + private Integer attribute3; | ||
| 58 | + | ||
| 59 | + @Schema(description = "预留字段4") | ||
| 60 | + private Integer attribute4; | ||
| 61 | + | ||
| 62 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/detail/MesWmItemReceiptDetailPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库明细分页 Request VO") | ||
| 10 | +@Data | ||
| 11 | +@EqualsAndHashCode(callSuper = true) | ||
| 12 | +@ToString(callSuper = true) | ||
| 13 | +public class MesWmItemReceiptDetailPageReqVO extends PageParam { | ||
| 14 | + | ||
| 15 | + @Schema(description = "入库单编号", example = "1") | ||
| 16 | + private Long receiptId; | ||
| 17 | + | ||
| 18 | + @Schema(description = "入库单行编号", example = "1") | ||
| 19 | + private Long lineId; | ||
| 20 | + | ||
| 21 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/detail/MesWmItemReceiptDetailRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import java.math.BigDecimal; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库明细 Response VO") | ||
| 10 | +@Data | ||
| 11 | +public class MesWmItemReceiptDetailRespVO { | ||
| 12 | + | ||
| 13 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 14 | + private Long id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "入库单行编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + private Long lineId; | ||
| 18 | + | ||
| 19 | + @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + private Long receiptId; | ||
| 21 | + | ||
| 22 | + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 23 | + private Long itemId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "物料编码", example = "M001") | ||
| 26 | + private String itemCode; | ||
| 27 | + | ||
| 28 | + @Schema(description = "物料名称", example = "钢板") | ||
| 29 | + private String itemName; | ||
| 30 | + | ||
| 31 | + @Schema(description = "规格型号", example = "10mm*100mm") | ||
| 32 | + private String specification; | ||
| 33 | + | ||
| 34 | + @Schema(description = "计量单位名称", example = "千克") | ||
| 35 | + private String unitMeasureName; | ||
| 36 | + | ||
| 37 | + @Schema(description = "上架数量", example = "300.00") | ||
| 38 | + private BigDecimal quantity; | ||
| 39 | + | ||
| 40 | + @Schema(description = "批次编号", example = "1") | ||
| 41 | + private Long batchId; | ||
| 42 | + | ||
| 43 | + @Schema(description = "仓库编号", example = "1") | ||
| 44 | + private Long warehouseId; | ||
| 45 | + | ||
| 46 | + @Schema(description = "仓库名称", example = "原料仓") | ||
| 47 | + private String warehouseName; | ||
| 48 | + | ||
| 49 | + @Schema(description = "库区编号", example = "1") | ||
| 50 | + private Long locationId; | ||
| 51 | + | ||
| 52 | + @Schema(description = "库区名称", example = "A 区") | ||
| 53 | + private String locationName; | ||
| 54 | + | ||
| 55 | + @Schema(description = "库位编号", example = "1") | ||
| 56 | + private Long areaId; | ||
| 57 | + | ||
| 58 | + @Schema(description = "库位名称", example = "A-01") | ||
| 59 | + private String areaName; | ||
| 60 | + | ||
| 61 | + @Schema(description = "备注", example = "备注") | ||
| 62 | + private String remark; | ||
| 63 | + | ||
| 64 | + @Schema(description = "预留字段1") | ||
| 65 | + private String attribute1; | ||
| 66 | + | ||
| 67 | + @Schema(description = "预留字段2") | ||
| 68 | + private String attribute2; | ||
| 69 | + | ||
| 70 | + @Schema(description = "预留字段3") | ||
| 71 | + private Integer attribute3; | ||
| 72 | + | ||
| 73 | + @Schema(description = "预留字段4") | ||
| 74 | + private Integer attribute4; | ||
| 75 | + | ||
| 76 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 77 | + private LocalDateTime createTime; | ||
| 78 | + | ||
| 79 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/detail/MesWmItemReceiptDetailSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotNull; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import java.math.BigDecimal; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库明细新增/修改 Request VO") | ||
| 10 | +@Data | ||
| 11 | +public class MesWmItemReceiptDetailSaveReqVO { | ||
| 12 | + | ||
| 13 | + @Schema(description = "编号", example = "1024") | ||
| 14 | + private Long id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "入库单行编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + @NotNull(message = "入库单行编号不能为空") | ||
| 18 | + private Long lineId; | ||
| 19 | + | ||
| 20 | + @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 21 | + @NotNull(message = "入库单编号不能为空") | ||
| 22 | + private Long receiptId; | ||
| 23 | + | ||
| 24 | + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 25 | + @NotNull(message = "物料编号不能为空") | ||
| 26 | + private Long itemId; | ||
| 27 | + | ||
| 28 | + @Schema(description = "上架数量", example = "300.00") | ||
| 29 | + private BigDecimal quantity; | ||
| 30 | + | ||
| 31 | + @Schema(description = "批次编号", example = "1") | ||
| 32 | + private Long batchId; | ||
| 33 | + | ||
| 34 | + @Schema(description = "仓库编号", example = "1") | ||
| 35 | + private Long warehouseId; | ||
| 36 | + | ||
| 37 | + @Schema(description = "库区编号", example = "1") | ||
| 38 | + private Long locationId; | ||
| 39 | + | ||
| 40 | + @Schema(description = "库位编号", example = "1") | ||
| 41 | + private Long areaId; | ||
| 42 | + | ||
| 43 | + @Schema(description = "备注", example = "备注") | ||
| 44 | + private String remark; | ||
| 45 | + | ||
| 46 | + @Schema(description = "预留字段1") | ||
| 47 | + private String attribute1; | ||
| 48 | + | ||
| 49 | + @Schema(description = "预留字段2") | ||
| 50 | + private String attribute2; | ||
| 51 | + | ||
| 52 | + @Schema(description = "预留字段3") | ||
| 53 | + private Integer attribute3; | ||
| 54 | + | ||
| 55 | + @Schema(description = "预留字段4") | ||
| 56 | + private Integer attribute4; | ||
| 57 | + | ||
| 58 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/line/MesWmItemReceiptLinePageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import lombok.Data; | ||
| 6 | +import lombok.EqualsAndHashCode; | ||
| 7 | +import lombok.ToString; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库单行分页 Request VO") | ||
| 10 | +@Data | ||
| 11 | +@EqualsAndHashCode(callSuper = true) | ||
| 12 | +@ToString(callSuper = true) | ||
| 13 | +public class MesWmItemReceiptLinePageReqVO extends PageParam { | ||
| 14 | + | ||
| 15 | + @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 16 | + private Long receiptId; | ||
| 17 | + | ||
| 18 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/line/MesWmItemReceiptLineRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +import java.math.BigDecimal; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - MES 采购入库单行 Response VO") | ||
| 10 | +@Data | ||
| 11 | +public class MesWmItemReceiptLineRespVO { | ||
| 12 | + | ||
| 13 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 14 | + private Long id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + private Long receiptId; | ||
| 18 | + | ||
| 19 | + @Schema(description = "到货通知单行编号", example = "1") | ||
| 20 | + private Long noticeLineId; | ||
| 21 | + | ||
| 22 | + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 23 | + private Long itemId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "物料编码", example = "M001") | ||
| 26 | + private String itemCode; | ||
| 27 | + | ||
| 28 | + @Schema(description = "物料名称", example = "钢板") | ||
| 29 | + private String itemName; | ||
| 30 | + | ||
| 31 | + @Schema(description = "规格型号", example = "10mm*100mm") | ||
| 32 | + private String specification; | ||
| 33 | + | ||
| 34 | + @Schema(description = "计量单位名称", example = "千克") | ||
| 35 | + private String unitMeasureName; | ||
| 36 | + | ||
| 37 | + @Schema(description = "入库数量", example = "500.00") | ||
| 38 | + private BigDecimal receivedQuantity; | ||
| 39 | + | ||
| 40 | + @Schema(description = "批次编号", example = "1") | ||
| 41 | + private Long batchId; | ||
| 42 | + | ||
| 43 | + @Schema(description = "仓库编号", example = "1") | ||
| 44 | + private Long warehouseId; | ||
| 45 | + | ||
| 46 | + @Schema(description = "仓库名称", example = "原料仓") | ||
| 47 | + private String warehouseName; | ||
| 48 | + | ||
| 49 | + @Schema(description = "库区编号", example = "1") | ||
| 50 | + private Long locationId; | ||
| 51 | + | ||
| 52 | + @Schema(description = "库区名称", example = "A 区") | ||
| 53 | + private String locationName; | ||
| 54 | + | ||
| 55 | + @Schema(description = "库位编号", example = "1") | ||
| 56 | + private Long areaId; | ||
| 57 | + | ||
| 58 | + @Schema(description = "库位名称", example = "A-01") | ||
| 59 | + private String areaName; | ||
| 60 | + | ||
| 61 | + @Schema(description = "生产日期") | ||
| 62 | + private LocalDateTime productionDate; | ||
| 63 | + | ||
| 64 | + @Schema(description = "有效期") | ||
| 65 | + private LocalDateTime expireDate; | ||
| 66 | + | ||
| 67 | + @Schema(description = "生产批号", example = "PB20260110") | ||
| 68 | + private String productionBatchNumber; | ||
| 69 | + | ||
| 70 | + @Schema(description = "是否需要来料检验", example = "true") | ||
| 71 | + private Boolean iqcCheckFlag; | ||
| 72 | + | ||
| 73 | + @Schema(description = "来料检验单编号", example = "1") | ||
| 74 | + private Long iqcId; | ||
| 75 | + | ||
| 76 | + @Schema(description = "来料检验单编码", example = "IQC20260201") | ||
| 77 | + private String iqcCode; | ||
| 78 | + | ||
| 79 | + @Schema(description = "备注", example = "备注") | ||
| 80 | + private String remark; | ||
| 81 | + | ||
| 82 | + @Schema(description = "预留字段1") | ||
| 83 | + private String attribute1; | ||
| 84 | + | ||
| 85 | + @Schema(description = "预留字段2") | ||
| 86 | + private String attribute2; | ||
| 87 | + | ||
| 88 | + @Schema(description = "预留字段3") | ||
| 89 | + private Integer attribute3; | ||
| 90 | + | ||
| 91 | + @Schema(description = "预留字段4") | ||
| 92 | + private Integer attribute4; | ||
| 93 | + | ||
| 94 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 95 | + private LocalDateTime createTime; | ||
| 96 | + | ||
| 97 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/line/MesWmItemReceiptLineSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotNull; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import java.math.BigDecimal; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - MES 采购入库单行新增/修改 Request VO") | ||
| 11 | +@Data | ||
| 12 | +public class MesWmItemReceiptLineSaveReqVO { | ||
| 13 | + | ||
| 14 | + @Schema(description = "编号", example = "1024") | ||
| 15 | + private Long id; | ||
| 16 | + | ||
| 17 | + @Schema(description = "入库单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 18 | + @NotNull(message = "入库单编号不能为空") | ||
| 19 | + private Long receiptId; | ||
| 20 | + | ||
| 21 | + @Schema(description = "到货通知单行编号", example = "1") | ||
| 22 | + private Long noticeLineId; | ||
| 23 | + | ||
| 24 | + @Schema(description = "物料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 25 | + @NotNull(message = "物料编号不能为空") | ||
| 26 | + private Long itemId; | ||
| 27 | + | ||
| 28 | + @Schema(description = "入库数量", example = "500.00") | ||
| 29 | + private BigDecimal receivedQuantity; | ||
| 30 | + | ||
| 31 | + @Schema(description = "批次编号", example = "1") | ||
| 32 | + private Long batchId; | ||
| 33 | + | ||
| 34 | + @Schema(description = "仓库编号", example = "1") | ||
| 35 | + private Long warehouseId; | ||
| 36 | + | ||
| 37 | + @Schema(description = "库区编号", example = "1") | ||
| 38 | + private Long locationId; | ||
| 39 | + | ||
| 40 | + @Schema(description = "库位编号", example = "1") | ||
| 41 | + private Long areaId; | ||
| 42 | + | ||
| 43 | + @Schema(description = "生产日期") | ||
| 44 | + private LocalDateTime productionDate; | ||
| 45 | + | ||
| 46 | + @Schema(description = "有效期") | ||
| 47 | + private LocalDateTime expireDate; | ||
| 48 | + | ||
| 49 | + @Schema(description = "生产批号", example = "PB20260110") | ||
| 50 | + private String productionBatchNumber; | ||
| 51 | + | ||
| 52 | + @Schema(description = "是否需要来料检验", example = "true") | ||
| 53 | + private Boolean iqcCheckFlag; | ||
| 54 | + | ||
| 55 | + @Schema(description = "来料检验单编号", example = "1") | ||
| 56 | + private Long iqcId; | ||
| 57 | + | ||
| 58 | + @Schema(description = "备注", example = "备注") | ||
| 59 | + private String remark; | ||
| 60 | + | ||
| 61 | + @Schema(description = "预留字段1") | ||
| 62 | + private String attribute1; | ||
| 63 | + | ||
| 64 | + @Schema(description = "预留字段2") | ||
| 65 | + private String attribute2; | ||
| 66 | + | ||
| 67 | + @Schema(description = "预留字段3") | ||
| 68 | + private Integer attribute3; | ||
| 69 | + | ||
| 70 | + @Schema(description = "预留字段4") | ||
| 71 | + private Integer attribute4; | ||
| 72 | + | ||
| 73 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt; | ||
| 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.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeDO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 9 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 10 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 11 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 12 | +import lombok.*; | ||
| 13 | + | ||
| 14 | +import java.time.LocalDateTime; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * MES 采购入库单 DO | ||
| 18 | + */ | ||
| 19 | +@TableName("mes_wm_item_receipt") | ||
| 20 | +@KeySequence("mes_wm_item_receipt_seq") | ||
| 21 | +@Data | ||
| 22 | +@EqualsAndHashCode(callSuper = true) | ||
| 23 | +@ToString(callSuper = true) | ||
| 24 | +@Builder | ||
| 25 | +@NoArgsConstructor | ||
| 26 | +@AllArgsConstructor | ||
| 27 | +public class MesWmItemReceiptDO extends BaseDO { | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 编号 | ||
| 31 | + */ | ||
| 32 | + @TableId | ||
| 33 | + private Long id; | ||
| 34 | + /** | ||
| 35 | + * 入库单编码 | ||
| 36 | + */ | ||
| 37 | + private String code; | ||
| 38 | + /** | ||
| 39 | + * 入库单名称 | ||
| 40 | + */ | ||
| 41 | + private String name; | ||
| 42 | + // TODO @AI:关联字段; | ||
| 43 | + /** | ||
| 44 | + * 来料检验单编号 | ||
| 45 | + * | ||
| 46 | + * 关联 mes_qc_iqc.id | ||
| 47 | + */ | ||
| 48 | + private Long iqcId; | ||
| 49 | + /** | ||
| 50 | + * 到货通知单编号 | ||
| 51 | + * | ||
| 52 | + * 关联 {@link MesWmArrivalNoticeDO#getId()} | ||
| 53 | + */ | ||
| 54 | + private Long noticeId; | ||
| 55 | + /** | ||
| 56 | + * 采购订单编号 | ||
| 57 | + */ | ||
| 58 | + private String purchaseOrderCode; | ||
| 59 | + /** | ||
| 60 | + * 供应商编号 | ||
| 61 | + * | ||
| 62 | + * 关联 {@link MesMdVendorDO#getId()} | ||
| 63 | + */ | ||
| 64 | + private Long vendorId; | ||
| 65 | + /** | ||
| 66 | + * 仓库编号 | ||
| 67 | + * | ||
| 68 | + * 关联 {@link MesWmWarehouseDO#getId()} | ||
| 69 | + */ | ||
| 70 | + private Long warehouseId; | ||
| 71 | + /** | ||
| 72 | + * 库区编号 | ||
| 73 | + * | ||
| 74 | + * 关联 {@link MesWmWarehouseLocationDO#getId()} | ||
| 75 | + */ | ||
| 76 | + private Long locationId; | ||
| 77 | + /** | ||
| 78 | + * 库位编号 | ||
| 79 | + * | ||
| 80 | + * 关联 {@link MesWmWarehouseAreaDO#getId()} | ||
| 81 | + */ | ||
| 82 | + private Long areaId; | ||
| 83 | + /** | ||
| 84 | + * 入库日期 | ||
| 85 | + */ | ||
| 86 | + private LocalDateTime receiptDate; | ||
| 87 | + // TODO @AI:枚举类;需要 @关联 | ||
| 88 | + // TODO @AI:字典类;需要 @关联 | ||
| 89 | + /** | ||
| 90 | + * 状态 | ||
| 91 | + * | ||
| 92 | + * 0=草稿 1=已提交 2=已审批 3=已完成 | ||
| 93 | + */ | ||
| 94 | + private Integer status; | ||
| 95 | + /** | ||
| 96 | + * 备注 | ||
| 97 | + */ | ||
| 98 | + private String remark; | ||
| 99 | + /** | ||
| 100 | + * 预留字段1 | ||
| 101 | + */ | ||
| 102 | + private String attribute1; | ||
| 103 | + /** | ||
| 104 | + * 预留字段2 | ||
| 105 | + */ | ||
| 106 | + private String attribute2; | ||
| 107 | + /** | ||
| 108 | + * 预留字段3 | ||
| 109 | + */ | ||
| 110 | + private Integer attribute3; | ||
| 111 | + /** | ||
| 112 | + * 预留字段4 | ||
| 113 | + */ | ||
| 114 | + private Integer attribute4; | ||
| 115 | + | ||
| 116 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDetailDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt; | ||
| 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_item_receipt_detail") | ||
| 19 | +@KeySequence("mes_wm_item_receipt_detail_seq") | ||
| 20 | +@Data | ||
| 21 | +@EqualsAndHashCode(callSuper = true) | ||
| 22 | +@ToString(callSuper = true) | ||
| 23 | +@Builder | ||
| 24 | +@NoArgsConstructor | ||
| 25 | +@AllArgsConstructor | ||
| 26 | +public class MesWmItemReceiptDetailDO extends BaseDO { | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 编号 | ||
| 30 | + */ | ||
| 31 | + @TableId | ||
| 32 | + private Long id; | ||
| 33 | + /** | ||
| 34 | + * 入库单行编号 | ||
| 35 | + * | ||
| 36 | + * 关联 {@link MesWmItemReceiptLineDO#getId()} | ||
| 37 | + */ | ||
| 38 | + private Long lineId; | ||
| 39 | + /** | ||
| 40 | + * 入库单编号 | ||
| 41 | + * | ||
| 42 | + * 关联 {@link MesWmItemReceiptDO#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 模块迁移后关联 | ||
| 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 | + * 预留字段1 | ||
| 85 | + */ | ||
| 86 | + private String attribute1; | ||
| 87 | + /** | ||
| 88 | + * 预留字段2 | ||
| 89 | + */ | ||
| 90 | + private String attribute2; | ||
| 91 | + /** | ||
| 92 | + * 预留字段3 | ||
| 93 | + */ | ||
| 94 | + private Integer attribute3; | ||
| 95 | + /** | ||
| 96 | + * 预留字段4 | ||
| 97 | + */ | ||
| 98 | + private Integer attribute4; | ||
| 99 | + | ||
| 100 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptLineDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt; | ||
| 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.arrivalnotice.MesWmArrivalNoticeLineDO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; | ||
| 9 | +import com.baomidou.mybatisplus.annotation.KeySequence; | ||
| 10 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
| 11 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 12 | +import lombok.*; | ||
| 13 | + | ||
| 14 | +import java.math.BigDecimal; | ||
| 15 | +import java.time.LocalDateTime; | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * MES 采购入库单行 DO | ||
| 19 | + */ | ||
| 20 | +@TableName("mes_wm_item_receipt_line") | ||
| 21 | +@KeySequence("mes_wm_item_receipt_line_seq") | ||
| 22 | +@Data | ||
| 23 | +@EqualsAndHashCode(callSuper = true) | ||
| 24 | +@ToString(callSuper = true) | ||
| 25 | +@Builder | ||
| 26 | +@NoArgsConstructor | ||
| 27 | +@AllArgsConstructor | ||
| 28 | +public class MesWmItemReceiptLineDO extends BaseDO { | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 编号 | ||
| 32 | + */ | ||
| 33 | + @TableId | ||
| 34 | + private Long id; | ||
| 35 | + /** | ||
| 36 | + * 入库单编号 | ||
| 37 | + * | ||
| 38 | + * 关联 {@link MesWmItemReceiptDO#getId()} | ||
| 39 | + */ | ||
| 40 | + private Long receiptId; | ||
| 41 | + /** | ||
| 42 | + * 到货通知单行编号 | ||
| 43 | + * | ||
| 44 | + * 关联 {@link MesWmArrivalNoticeLineDO#getId()} | ||
| 45 | + */ | ||
| 46 | + private Long noticeLineId; | ||
| 47 | + /** | ||
| 48 | + * 物料编号 | ||
| 49 | + * | ||
| 50 | + * 关联 {@link MesMdItemDO#getId()} | ||
| 51 | + */ | ||
| 52 | + private Long itemId; | ||
| 53 | + /** | ||
| 54 | + * 入库数量 | ||
| 55 | + */ | ||
| 56 | + private BigDecimal receivedQuantity; | ||
| 57 | + /** | ||
| 58 | + * 批次编号 | ||
| 59 | + * | ||
| 60 | + * TODO @芋艿:待 mes_wm_batch 模块迁移后关联 | ||
| 61 | + */ | ||
| 62 | + private Long batchId; | ||
| 63 | + /** | ||
| 64 | + * 仓库编号 | ||
| 65 | + * | ||
| 66 | + * 关联 {@link MesWmWarehouseDO#getId()} | ||
| 67 | + */ | ||
| 68 | + private Long warehouseId; | ||
| 69 | + /** | ||
| 70 | + * 库区编号 | ||
| 71 | + * | ||
| 72 | + * 关联 {@link MesWmWarehouseLocationDO#getId()} | ||
| 73 | + */ | ||
| 74 | + private Long locationId; | ||
| 75 | + /** | ||
| 76 | + * 库位编号 | ||
| 77 | + * | ||
| 78 | + * 关联 {@link MesWmWarehouseAreaDO#getId()} | ||
| 79 | + */ | ||
| 80 | + private Long areaId; | ||
| 81 | + /** | ||
| 82 | + * 生产日期 | ||
| 83 | + */ | ||
| 84 | + private LocalDateTime productionDate; | ||
| 85 | + /** | ||
| 86 | + * 有效期 | ||
| 87 | + */ | ||
| 88 | + private LocalDateTime expireDate; | ||
| 89 | + /** | ||
| 90 | + * 生产批号 | ||
| 91 | + */ | ||
| 92 | + private String productionBatchNumber; | ||
| 93 | + /** | ||
| 94 | + * 是否需要来料检验 | ||
| 95 | + */ | ||
| 96 | + private Boolean iqcCheckFlag; | ||
| 97 | + // TODO @AI:关联下 iqcId 字段 | ||
| 98 | + /** | ||
| 99 | + * 来料检验单编号 | ||
| 100 | + * | ||
| 101 | + * 关联 mes_qc_iqc.id | ||
| 102 | + */ | ||
| 103 | + private Long iqcId; | ||
| 104 | + /** | ||
| 105 | + * 备注 | ||
| 106 | + */ | ||
| 107 | + private String remark; | ||
| 108 | + /** | ||
| 109 | + * 预留字段1 | ||
| 110 | + */ | ||
| 111 | + private String attribute1; | ||
| 112 | + /** | ||
| 113 | + * 预留字段2 | ||
| 114 | + */ | ||
| 115 | + private String attribute2; | ||
| 116 | + /** | ||
| 117 | + * 预留字段3 | ||
| 118 | + */ | ||
| 119 | + private Integer attribute3; | ||
| 120 | + /** | ||
| 121 | + * 预留字段4 | ||
| 122 | + */ | ||
| 123 | + private Integer attribute4; | ||
| 124 | + | ||
| 125 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptDetailMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt; | ||
| 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.itemreceipt.vo.detail.MesWmItemReceiptDetailPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * MES 采购入库明细 Mapper | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface MesWmItemReceiptDetailMapper extends BaseMapperX<MesWmItemReceiptDetailDO> { | ||
| 17 | + | ||
| 18 | + default PageResult<MesWmItemReceiptDetailDO> selectPage(MesWmItemReceiptDetailPageReqVO reqVO) { | ||
| 19 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmItemReceiptDetailDO>() | ||
| 20 | + .eqIfPresent(MesWmItemReceiptDetailDO::getReceiptId, reqVO.getReceiptId()) | ||
| 21 | + .eqIfPresent(MesWmItemReceiptDetailDO::getLineId, reqVO.getLineId()) | ||
| 22 | + .orderByDesc(MesWmItemReceiptDetailDO::getId)); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + default List<MesWmItemReceiptDetailDO> selectListByReceiptId(Long receiptId) { | ||
| 26 | + return selectList(MesWmItemReceiptDetailDO::getReceiptId, receiptId); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + default List<MesWmItemReceiptDetailDO> selectListByLineId(Long lineId) { | ||
| 30 | + return selectList(MesWmItemReceiptDetailDO::getLineId, lineId); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + default void deleteByReceiptId(Long receiptId) { | ||
| 34 | + delete(MesWmItemReceiptDetailDO::getReceiptId, receiptId); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + default void deleteByLineId(Long lineId) { | ||
| 38 | + delete(MesWmItemReceiptDetailDO::getLineId, lineId); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptLineMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt; | ||
| 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.itemreceipt.vo.line.MesWmItemReceiptLinePageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * MES 采购入库单行 Mapper | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface MesWmItemReceiptLineMapper extends BaseMapperX<MesWmItemReceiptLineDO> { | ||
| 17 | + | ||
| 18 | + default PageResult<MesWmItemReceiptLineDO> selectPage(MesWmItemReceiptLinePageReqVO reqVO) { | ||
| 19 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmItemReceiptLineDO>() | ||
| 20 | + .eqIfPresent(MesWmItemReceiptLineDO::getReceiptId, reqVO.getReceiptId()) | ||
| 21 | + .orderByDesc(MesWmItemReceiptLineDO::getId)); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + default List<MesWmItemReceiptLineDO> selectListByReceiptId(Long receiptId) { | ||
| 25 | + return selectList(MesWmItemReceiptLineDO::getReceiptId, receiptId); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + default void deleteByReceiptId(Long receiptId) { | ||
| 29 | + delete(MesWmItemReceiptLineDO::getReceiptId, receiptId); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt; | ||
| 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.itemreceipt.vo.MesWmItemReceiptPageReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; | ||
| 8 | +import org.apache.ibatis.annotations.Mapper; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * MES 采购入库单 Mapper | ||
| 12 | + */ | ||
| 13 | +@Mapper | ||
| 14 | +public interface MesWmItemReceiptMapper extends BaseMapperX<MesWmItemReceiptDO> { | ||
| 15 | + | ||
| 16 | + default PageResult<MesWmItemReceiptDO> selectPage(MesWmItemReceiptPageReqVO reqVO) { | ||
| 17 | + return selectPage(reqVO, new LambdaQueryWrapperX<MesWmItemReceiptDO>() | ||
| 18 | + .likeIfPresent(MesWmItemReceiptDO::getCode, reqVO.getCode()) | ||
| 19 | + .likeIfPresent(MesWmItemReceiptDO::getName, reqVO.getName()) | ||
| 20 | + .likeIfPresent(MesWmItemReceiptDO::getPurchaseOrderCode, reqVO.getPurchaseOrderCode()) | ||
| 21 | + .eqIfPresent(MesWmItemReceiptDO::getVendorId, reqVO.getVendorId()) | ||
| 22 | + .eqIfPresent(MesWmItemReceiptDO::getStatus, reqVO.getStatus()) | ||
| 23 | + .orderByDesc(MesWmItemReceiptDO::getId)); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + default MesWmItemReceiptDO selectByCode(String code) { | ||
| 27 | + return selectOne(MesWmItemReceiptDO::getCode, code); | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailPageReqVO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO; | ||
| 7 | +import jakarta.validation.Valid; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * MES 采购入库明细 Service 接口 | ||
| 13 | + */ | ||
| 14 | +public interface MesWmItemReceiptDetailService { | ||
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * 创建采购入库明细 | ||
| 18 | + * | ||
| 19 | + * @param createReqVO 创建信息 | ||
| 20 | + * @return 编号 | ||
| 21 | + */ | ||
| 22 | + Long createItemReceiptDetail(@Valid MesWmItemReceiptDetailSaveReqVO createReqVO); | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 修改采购入库明细 | ||
| 26 | + * | ||
| 27 | + * @param updateReqVO 修改信息 | ||
| 28 | + */ | ||
| 29 | + void updateItemReceiptDetail(@Valid MesWmItemReceiptDetailSaveReqVO updateReqVO); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 删除采购入库明细 | ||
| 33 | + * | ||
| 34 | + * @param id 编号 | ||
| 35 | + */ | ||
| 36 | + void deleteItemReceiptDetail(Long id); | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 获得采购入库明细 | ||
| 40 | + * | ||
| 41 | + * @param id 编号 | ||
| 42 | + * @return 采购入库明细 | ||
| 43 | + */ | ||
| 44 | + MesWmItemReceiptDetailDO getItemReceiptDetail(Long id); | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * 获得采购入库明细分页 | ||
| 48 | + * | ||
| 49 | + * @param pageReqVO 分页参数 | ||
| 50 | + * @return 采购入库明细分页 | ||
| 51 | + */ | ||
| 52 | + PageResult<MesWmItemReceiptDetailDO> getItemReceiptDetailPage(MesWmItemReceiptDetailPageReqVO pageReqVO); | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 按入库单行编号获得明细列表 | ||
| 56 | + * | ||
| 57 | + * @param lineId 行编号 | ||
| 58 | + * @return 明细列表 | ||
| 59 | + */ | ||
| 60 | + List<MesWmItemReceiptDetailDO> getItemReceiptDetailListByLineId(Long lineId); | ||
| 61 | + | ||
| 62 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptDetailMapper; | ||
| 9 | +import jakarta.annotation.Resource; | ||
| 10 | +import org.springframework.stereotype.Service; | ||
| 11 | +import org.springframework.validation.annotation.Validated; | ||
| 12 | + | ||
| 13 | +import java.util.List; | ||
| 14 | + | ||
| 15 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 16 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * MES 采购入库明细 Service 实现类 | ||
| 20 | + */ | ||
| 21 | +@Service | ||
| 22 | +@Validated | ||
| 23 | +public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetailService { | ||
| 24 | + | ||
| 25 | + @Resource | ||
| 26 | + private MesWmItemReceiptDetailMapper itemReceiptDetailMapper; | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public Long createItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO createReqVO) { | ||
| 30 | + // TODO @AI:校验关联字段; | ||
| 31 | + MesWmItemReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmItemReceiptDetailDO.class); | ||
| 32 | + itemReceiptDetailMapper.insert(detail); | ||
| 33 | + return detail.getId(); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + @Override | ||
| 37 | + public void updateItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO updateReqVO) { | ||
| 38 | + // 校验存在 | ||
| 39 | + validateItemReceiptDetailExists(updateReqVO.getId()); | ||
| 40 | + // TODO @AI:校验关联字段; | ||
| 41 | + | ||
| 42 | + // 更新 | ||
| 43 | + MesWmItemReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptDetailDO.class); | ||
| 44 | + itemReceiptDetailMapper.updateById(updateObj); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public void deleteItemReceiptDetail(Long id) { | ||
| 49 | + // 校验存在 | ||
| 50 | + validateItemReceiptDetailExists(id); | ||
| 51 | + // 删除 | ||
| 52 | + itemReceiptDetailMapper.deleteById(id); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @Override | ||
| 56 | + public MesWmItemReceiptDetailDO getItemReceiptDetail(Long id) { | ||
| 57 | + return itemReceiptDetailMapper.selectById(id); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + public PageResult<MesWmItemReceiptDetailDO> getItemReceiptDetailPage(MesWmItemReceiptDetailPageReqVO pageReqVO) { | ||
| 62 | + return itemReceiptDetailMapper.selectPage(pageReqVO); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + public List<MesWmItemReceiptDetailDO> getItemReceiptDetailListByLineId(Long lineId) { | ||
| 67 | + return itemReceiptDetailMapper.selectListByLineId(lineId); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + private void validateItemReceiptDetailExists(Long id) { | ||
| 71 | + if (itemReceiptDetailMapper.selectById(id) == null) { | ||
| 72 | + throw exception(WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS); | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptLineService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLinePageReqVO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; | ||
| 7 | +import jakarta.validation.Valid; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * MES 采购入库单行 Service 接口 | ||
| 13 | + */ | ||
| 14 | +public interface MesWmItemReceiptLineService { | ||
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * 创建采购入库单行 | ||
| 18 | + * | ||
| 19 | + * @param createReqVO 创建信息 | ||
| 20 | + * @return 编号 | ||
| 21 | + */ | ||
| 22 | + Long createItemReceiptLine(@Valid MesWmItemReceiptLineSaveReqVO createReqVO); | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 修改采购入库单行 | ||
| 26 | + * | ||
| 27 | + * @param updateReqVO 修改信息 | ||
| 28 | + */ | ||
| 29 | + void updateItemReceiptLine(@Valid MesWmItemReceiptLineSaveReqVO updateReqVO); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 删除采购入库单行(级联删除明细) | ||
| 33 | + * | ||
| 34 | + * @param id 编号 | ||
| 35 | + */ | ||
| 36 | + void deleteItemReceiptLine(Long id); | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 获得采购入库单行 | ||
| 40 | + * | ||
| 41 | + * @param id 编号 | ||
| 42 | + * @return 采购入库单行 | ||
| 43 | + */ | ||
| 44 | + MesWmItemReceiptLineDO getItemReceiptLine(Long id); | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * 获得采购入库单行分页 | ||
| 48 | + * | ||
| 49 | + * @param pageReqVO 分页参数 | ||
| 50 | + * @return 采购入库单行分页 | ||
| 51 | + */ | ||
| 52 | + PageResult<MesWmItemReceiptLineDO> getItemReceiptLinePage(MesWmItemReceiptLinePageReqVO pageReqVO); | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 按入库单编号获得行列表 | ||
| 56 | + * | ||
| 57 | + * @param receiptId 入库单编号 | ||
| 58 | + * @return 行列表 | ||
| 59 | + */ | ||
| 60 | + List<MesWmItemReceiptLineDO> getItemReceiptLineListByReceiptId(Long receiptId); | ||
| 61 | + | ||
| 62 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptLineServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLinePageReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptDetailMapper; | ||
| 9 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptLineMapper; | ||
| 10 | +import jakarta.annotation.Resource; | ||
| 11 | +import org.springframework.stereotype.Service; | ||
| 12 | +import org.springframework.transaction.annotation.Transactional; | ||
| 13 | +import org.springframework.validation.annotation.Validated; | ||
| 14 | + | ||
| 15 | +import java.util.List; | ||
| 16 | + | ||
| 17 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 18 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_ITEM_RECEIPT_LINE_NOT_EXISTS; | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * MES 采购入库单行 Service 实现类 | ||
| 22 | + */ | ||
| 23 | +@Service | ||
| 24 | +@Validated | ||
| 25 | +public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineService { | ||
| 26 | + | ||
| 27 | + @Resource | ||
| 28 | + private MesWmItemReceiptLineMapper itemReceiptLineMapper; | ||
| 29 | + | ||
| 30 | + @Resource | ||
| 31 | + private MesWmItemReceiptDetailMapper itemReceiptDetailMapper; | ||
| 32 | + | ||
| 33 | + @Override | ||
| 34 | + public Long createItemReceiptLine(MesWmItemReceiptLineSaveReqVO createReqVO) { | ||
| 35 | + // TODO @AI:校验关联字段; | ||
| 36 | + | ||
| 37 | + // 新增 | ||
| 38 | + MesWmItemReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmItemReceiptLineDO.class); | ||
| 39 | + itemReceiptLineMapper.insert(line); | ||
| 40 | + return line.getId(); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + @Override | ||
| 44 | + public void updateItemReceiptLine(MesWmItemReceiptLineSaveReqVO updateReqVO) { | ||
| 45 | + // 校验存在 | ||
| 46 | + validateItemReceiptLineExists(updateReqVO.getId()); | ||
| 47 | + // TODO @AI:校验关联字段; | ||
| 48 | + | ||
| 49 | + // 更新 | ||
| 50 | + MesWmItemReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptLineDO.class); | ||
| 51 | + itemReceiptLineMapper.updateById(updateObj); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + @Transactional(rollbackFor = Exception.class) | ||
| 56 | + public void deleteItemReceiptLine(Long id) { | ||
| 57 | + // 校验存在 | ||
| 58 | + validateItemReceiptLineExists(id); | ||
| 59 | + | ||
| 60 | + // 级联删除明细 | ||
| 61 | + itemReceiptDetailMapper.deleteByLineId(id); | ||
| 62 | + // 删除 | ||
| 63 | + itemReceiptLineMapper.deleteById(id); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + @Override | ||
| 67 | + public MesWmItemReceiptLineDO getItemReceiptLine(Long id) { | ||
| 68 | + return itemReceiptLineMapper.selectById(id); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @Override | ||
| 72 | + public PageResult<MesWmItemReceiptLineDO> getItemReceiptLinePage(MesWmItemReceiptLinePageReqVO pageReqVO) { | ||
| 73 | + return itemReceiptLineMapper.selectPage(pageReqVO); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + @Override | ||
| 77 | + public List<MesWmItemReceiptLineDO> getItemReceiptLineListByReceiptId(Long receiptId) { | ||
| 78 | + return itemReceiptLineMapper.selectListByReceiptId(receiptId); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + private void validateItemReceiptLineExists(Long id) { | ||
| 82 | + if (itemReceiptLineMapper.selectById(id) == null) { | ||
| 83 | + throw exception(WM_ITEM_RECEIPT_LINE_NOT_EXISTS); | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptPageReqVO; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; | ||
| 7 | +import jakarta.validation.Valid; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * MES 采购入库单 Service 接口 | ||
| 11 | + */ | ||
| 12 | +public interface MesWmItemReceiptService { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 创建采购入库单 | ||
| 16 | + * | ||
| 17 | + * @param createReqVO 创建信息 | ||
| 18 | + * @return 编号 | ||
| 19 | + */ | ||
| 20 | + Long createItemReceipt(@Valid MesWmItemReceiptSaveReqVO createReqVO); | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 修改采购入库单 | ||
| 24 | + * | ||
| 25 | + * @param updateReqVO 修改信息 | ||
| 26 | + */ | ||
| 27 | + void updateItemReceipt(@Valid MesWmItemReceiptSaveReqVO updateReqVO); | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 删除采购入库单(级联删除行+明细) | ||
| 31 | + * | ||
| 32 | + * @param id 编号 | ||
| 33 | + */ | ||
| 34 | + void deleteItemReceipt(Long id); | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * 获得采购入库单 | ||
| 38 | + * | ||
| 39 | + * @param id 编号 | ||
| 40 | + * @return 采购入库单 | ||
| 41 | + */ | ||
| 42 | + MesWmItemReceiptDO getItemReceipt(Long id); | ||
| 43 | + | ||
| 44 | + /** | ||
| 45 | + * 获得采购入库单分页 | ||
| 46 | + * | ||
| 47 | + * @param pageReqVO 分页参数 | ||
| 48 | + * @return 采购入库单分页 | ||
| 49 | + */ | ||
| 50 | + PageResult<MesWmItemReceiptDO> getItemReceiptPage(MesWmItemReceiptPageReqVO pageReqVO); | ||
| 51 | + | ||
| 52 | + // TODO @AI:0-》1、1-》2 尽量写状态;不要写这种; | ||
| 53 | + /** | ||
| 54 | + * 提交采购入库单(0→1) | ||
| 55 | + * | ||
| 56 | + * @param id 编号 | ||
| 57 | + */ | ||
| 58 | + void submitItemReceipt(Long id); | ||
| 59 | + | ||
| 60 | + // TODO @AI:0-》1、1-》2 尽量写状态;不要写这种; | ||
| 61 | + /** | ||
| 62 | + * 审批采购入库单(1→2) | ||
| 63 | + * | ||
| 64 | + * @param id 编号 | ||
| 65 | + */ | ||
| 66 | + void approveItemReceipt(Long id); | ||
| 67 | + | ||
| 68 | + // TODO @AI:0-》1、1-》2 尽量写状态;不要写这种; | ||
| 69 | + /** | ||
| 70 | + * 执行入库(2→3),更新库存台账 | ||
| 71 | + * | ||
| 72 | + * @param id 编号 | ||
| 73 | + */ | ||
| 74 | + void executeItemReceipt(Long id); | ||
| 75 | + | ||
| 76 | +} |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 5 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; | ||
| 8 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO; | ||
| 9 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO; | ||
| 10 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptDetailMapper; | ||
| 11 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptLineMapper; | ||
| 12 | +import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptMapper; | ||
| 13 | +import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; | ||
| 14 | +import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; | ||
| 15 | +import jakarta.annotation.Resource; | ||
| 16 | +import org.springframework.context.annotation.Lazy; | ||
| 17 | +import org.springframework.stereotype.Service; | ||
| 18 | +import org.springframework.transaction.annotation.Transactional; | ||
| 19 | +import org.springframework.validation.annotation.Validated; | ||
| 20 | + | ||
| 21 | +import java.math.BigDecimal; | ||
| 22 | +import java.util.List; | ||
| 23 | + | ||
| 24 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 25 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; | ||
| 26 | + | ||
| 27 | +/** | ||
| 28 | + * MES 采购入库单 Service 实现类 | ||
| 29 | + */ | ||
| 30 | +@Service | ||
| 31 | +@Validated | ||
| 32 | +public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { | ||
| 33 | + | ||
| 34 | + @Resource | ||
| 35 | + private MesWmItemReceiptMapper itemReceiptMapper; | ||
| 36 | + | ||
| 37 | + @Resource | ||
| 38 | + private MesWmItemReceiptLineMapper itemReceiptLineMapper; | ||
| 39 | + | ||
| 40 | + @Resource | ||
| 41 | + private MesWmItemReceiptDetailMapper itemReceiptDetailMapper; | ||
| 42 | + | ||
| 43 | + @Resource | ||
| 44 | + @Lazy | ||
| 45 | + private MesWmArrivalNoticeService arrivalNoticeService; | ||
| 46 | + | ||
| 47 | + @Resource | ||
| 48 | + private MesWmMaterialStockService materialStockService; | ||
| 49 | + | ||
| 50 | + @Override | ||
| 51 | + public Long createItemReceipt(MesWmItemReceiptSaveReqVO createReqVO) { | ||
| 52 | + // 校验编码唯一 | ||
| 53 | + validateCodeUnique(null, createReqVO.getCode()); | ||
| 54 | + // TODO @AI:校验关联字段; | ||
| 55 | + | ||
| 56 | + // 插入 | ||
| 57 | + MesWmItemReceiptDO receipt = BeanUtils.toBean(createReqVO, MesWmItemReceiptDO.class); | ||
| 58 | + receipt.setStatus(0); // 草稿 TODO @AI:使用枚举类 | ||
| 59 | + itemReceiptMapper.insert(receipt); | ||
| 60 | + return receipt.getId(); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @Override | ||
| 64 | + public void updateItemReceipt(MesWmItemReceiptSaveReqVO updateReqVO) { | ||
| 65 | + // 校验存在 | ||
| 66 | + MesWmItemReceiptDO receipt = validateItemReceiptExists(updateReqVO.getId()); | ||
| 67 | + // TODO @AI:校验关联字段; | ||
| 68 | + // 校验状态:只有草稿才允许修改 | ||
| 69 | + // TODO @AI:校验状态,看看抽个方法,尽量几个方法复用 | ||
| 70 | + if (receipt.getStatus() != 0) { | ||
| 71 | + throw exception(WM_ITEM_RECEIPT_STATUS_NOT_PREPARE); | ||
| 72 | + } | ||
| 73 | + // 校验编码唯一 | ||
| 74 | + validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | ||
| 75 | + | ||
| 76 | + // 更新 | ||
| 77 | + MesWmItemReceiptDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptDO.class); | ||
| 78 | + itemReceiptMapper.updateById(updateObj); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @Override | ||
| 82 | + @Transactional(rollbackFor = Exception.class) | ||
| 83 | + public void deleteItemReceipt(Long id) { | ||
| 84 | + // 校验存在 | ||
| 85 | + MesWmItemReceiptDO receipt = validateItemReceiptExists(id); | ||
| 86 | + // 校验状态:只有草稿才允许删除 | ||
| 87 | + // TODO @AI:校验状态,看看抽个方法,尽量几个方法复用 | ||
| 88 | + if (receipt.getStatus() != 0) { | ||
| 89 | + throw exception(WM_ITEM_RECEIPT_STATUS_NOT_PREPARE); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + // 级联删除明细和行 | ||
| 93 | + itemReceiptDetailMapper.deleteByReceiptId(id); | ||
| 94 | + itemReceiptLineMapper.deleteByReceiptId(id); | ||
| 95 | + // 删除 | ||
| 96 | + itemReceiptMapper.deleteById(id); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + @Override | ||
| 100 | + public MesWmItemReceiptDO getItemReceipt(Long id) { | ||
| 101 | + return itemReceiptMapper.selectById(id); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + @Override | ||
| 105 | + public PageResult<MesWmItemReceiptDO> getItemReceiptPage(MesWmItemReceiptPageReqVO pageReqVO) { | ||
| 106 | + return itemReceiptMapper.selectPage(pageReqVO); | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + @Override | ||
| 110 | + public void submitItemReceipt(Long id) { | ||
| 111 | + // 校验存在 | ||
| 112 | + MesWmItemReceiptDO receipt = validateItemReceiptExists(id); | ||
| 113 | + // TODO @AI:校验状态,看看抽个方法,尽量几个方法复用 | ||
| 114 | + if (receipt.getStatus() != 0) { | ||
| 115 | + throw exception(WM_ITEM_RECEIPT_STATUS_NOT_PREPARE); | ||
| 116 | + } | ||
| 117 | + // 校验至少有一条行 | ||
| 118 | + // TODO @AI:对方抽个计算数量的方法啊; | ||
| 119 | + List<MesWmItemReceiptLineDO> lines = itemReceiptLineMapper.selectListByReceiptId(id); | ||
| 120 | + if (lines.isEmpty()) { | ||
| 121 | + throw exception(WM_ITEM_RECEIPT_NO_LINE); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + // 提交 | ||
| 125 | + itemReceiptMapper.updateById(new MesWmItemReceiptDO().setId(id).setStatus(1)); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + @Override | ||
| 129 | + public void approveItemReceipt(Long id) { | ||
| 130 | + // 校验存在 | ||
| 131 | + MesWmItemReceiptDO receipt = validateItemReceiptExists(id); | ||
| 132 | + // TODO @AI:抽一些校验的存在+状态方法 | ||
| 133 | + if (receipt.getStatus() != 1) { | ||
| 134 | + throw exception(WM_ITEM_RECEIPT_STATUS_ERROR); | ||
| 135 | + } | ||
| 136 | + // 校验每行的 SUM(detail.quantity) = line.receivedQuantity | ||
| 137 | + // TODO @AI:抽个计算的 count 方法,然后在行和明细都用;不然代码里到处都是计算的逻辑; | ||
| 138 | + List<MesWmItemReceiptLineDO> lines = itemReceiptLineMapper.selectListByReceiptId(id); | ||
| 139 | + for (MesWmItemReceiptLineDO line : lines) { | ||
| 140 | + List<MesWmItemReceiptDetailDO> details = itemReceiptDetailMapper.selectListByLineId(line.getId()); | ||
| 141 | + BigDecimal totalDetailQty = details.stream() | ||
| 142 | + .map(MesWmItemReceiptDetailDO::getQuantity) | ||
| 143 | + .reduce(BigDecimal.ZERO, BigDecimal::add); | ||
| 144 | + if (line.getReceivedQuantity() != null && totalDetailQty.compareTo(line.getReceivedQuantity()) != 0) { | ||
| 145 | + throw exception(WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH); | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + // 审批 | ||
| 150 | + itemReceiptMapper.updateById(new MesWmItemReceiptDO().setId(id).setStatus(2)); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + @Override | ||
| 154 | + @Transactional(rollbackFor = Exception.class) | ||
| 155 | + public void executeItemReceipt(Long id) { | ||
| 156 | + // 校验存在 | ||
| 157 | + MesWmItemReceiptDO receipt = validateItemReceiptExists(id); | ||
| 158 | + // TODO @AI:抽一些校验的存在+状态方法 | ||
| 159 | + if (receipt.getStatus() != 2) { | ||
| 160 | + throw exception(WM_ITEM_RECEIPT_STATUS_ERROR); | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + // 遍历所有明细,更新库存台账 | ||
| 164 | + // TODO @AI:select 方法,对方搞个; | ||
| 165 | + List<MesWmItemReceiptDetailDO> details = itemReceiptDetailMapper.selectListByReceiptId(id); | ||
| 166 | + for (MesWmItemReceiptDetailDO detail : details) { | ||
| 167 | + materialStockService.increaseStock( | ||
| 168 | + detail.getItemId(), detail.getWarehouseId(), detail.getLocationId(), detail.getAreaId(), | ||
| 169 | + detail.getBatchId(), detail.getQuantity(), receipt.getVendorId(), null, null); | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + // 更新入库单状态 | ||
| 173 | + // TODO @AI:枚举类; | ||
| 174 | + itemReceiptMapper.updateById(new MesWmItemReceiptDO().setId(id).setStatus(3)); | ||
| 175 | + // 更新关联的到货通知单状态 | ||
| 176 | + if (receipt.getNoticeId() != null) { | ||
| 177 | + arrivalNoticeService.finishArrivalNotice(receipt.getNoticeId()); | ||
| 178 | + } | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + private MesWmItemReceiptDO validateItemReceiptExists(Long id) { | ||
| 182 | + MesWmItemReceiptDO receipt = itemReceiptMapper.selectById(id); | ||
| 183 | + if (receipt == null) { | ||
| 184 | + throw exception(WM_ITEM_RECEIPT_NOT_EXISTS); | ||
| 185 | + } | ||
| 186 | + return receipt; | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + private void validateCodeUnique(Long id, String code) { | ||
| 190 | + MesWmItemReceiptDO receipt = itemReceiptMapper.selectByCode(code); | ||
| 191 | + if (receipt == null) { | ||
| 192 | + return; | ||
| 193 | + } | ||
| 194 | + // TODO @AI:ObjUtil notEquals | ||
| 195 | + if (id == null || !id.equals(receipt.getId())) { | ||
| 196 | + throw exception(WM_ITEM_RECEIPT_CODE_DUPLICATE); | ||
| 197 | + } | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | +} |