diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CeneterOutboundControlelr.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CeneterOutboundControlelr.java index d9dee7ee..bbe5cfeb 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CeneterOutboundControlelr.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CeneterOutboundControlelr.java @@ -1,19 +1,29 @@ package com.nflg.wms.admin.controller; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; +import com.nflg.wms.admin.service.CenterOutboundControllerService; +import com.nflg.wms.admin.service.CenterReturnControllerService; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; -import com.nflg.wms.common.pojo.qo.C_MaterialOutboundItemQO; -import com.nflg.wms.common.pojo.qo.C_MaterialOutboundSearchQO; -import com.nflg.wms.common.pojo.qo.C_MaterialReturnSearchQO; -import com.nflg.wms.common.pojo.vo.C_MaterialOutboundVO; -import com.nflg.wms.common.pojo.vo.C_MaterialReturnItemVO; -import com.nflg.wms.common.pojo.vo.C_MaterialReturnVO; -import com.nflg.wms.common.pojo.vo.ScanCodeVO; +import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.pojo.vo.*; +import com.nflg.wms.common.util.PageUtil; +import com.nflg.wms.repository.entity.WmsCenterOutboundItem; +import com.nflg.wms.repository.entity.WmsCenterOutboundScan; +import com.nflg.wms.repository.entity.WmsCenterReturnItem; +import com.nflg.wms.repository.service.IWmsCenterOutboundItemService; +import com.nflg.wms.repository.service.IWmsCenterOutboundScanService; +import com.nflg.wms.repository.service.IWmsCenterOutboundService; import com.nflg.wms.starter.annotation.ApiMark; +import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * 中心领料单 @@ -21,35 +31,169 @@ import java.util.List; @RestController @RequestMapping("/center/outbound") public class CeneterOutboundControlelr { + @Resource + private IWmsCenterOutboundService wmsCenterOutboundService; + + @Resource + private IWmsCenterOutboundItemService wmsCenterOutboundItemService; + + @Resource + private IWmsCenterOutboundScanService wmsCenterOutboundScanService; + + @Resource + private CenterOutboundControllerService outboundControllerService; + + /** + * 查询领料单列表 + * + * @param request 领料单搜索请求参数对象,包含分页信息和搜索条件 + * @return 返回分页的领料单数据,包含领料单列表和分页信息 + */ @PostMapping("search") @ApiMark(moduleName = "中心领料单管理", apiName = "领料单列表") public ApiResult> search(@Valid @RequestBody C_MaterialOutboundSearchQO request) { - // return ApiResult.success(wmsSrmOrderService.search(request)); - return null; + // 调用服务层查询领料单数据,并转换为前端需要的VO对象格式 + PageData pageData = PageUtil.convert(wmsCenterOutboundService.search(request), d -> Convert.convert(C_MaterialOutboundVO.class, d)); + return ApiResult.success(pageData); } + + /** + * 获取领料单详情 + * + * @param orderId 领料单ID + * @return 领料单明细项列表 + */ //收货单详情 @GetMapping("getOrderItem") @ApiMark(moduleName = "中心领料单管理", apiName = "领料单详情") - public ApiResult getOrderItem(@RequestParam Long orderId) { - return null; - // return ApiResult.success(wmsSrmOrderItemService.getOrderItem(orderId)); + public ApiResult> getOrderItem(@RequestParam Long orderId) { + // 查询退库单对应的明细项 + List items = wmsCenterOutboundItemService.lambdaQuery() + .eq(WmsCenterOutboundItem::getOrderId, orderId) + .list(); + + // 如果明细项为空,返回空列表 + if (CollectionUtil.isEmpty(items)) { + return ApiResult.success(Collections.emptyList()); + } + + // 将明细项转换为VO对象 + List vos = items.stream() + .map(this::convertToVO) + .collect(Collectors.toList()); + + return ApiResult.success(vos); + } + + private C_MaterialOutboundItemVO convertToVO(WmsCenterOutboundItem item) { + C_MaterialOutboundItemVO vo = new C_MaterialOutboundItemVO(); + if (item != null) { + vo.setId(item.getId()); + vo.setOrderId(item.getOrderId()); + vo.setReservedNumberId(item.getReservedNumberId()); + vo.setMaterialNo(item.getMaterialNo()); + vo.setMaterialDesc(item.getMaterialDesc()); + vo.setUnit(item.getUnit()); + vo.setFactory(item.getFactory()); + vo.setQty(item.getQty()); + vo.setWarehouseNumber(item.getWarehouseNumber()); + vo.setQty(item.getQty()); + } + return vo; + } + + /** + * 获取物料的扫码信息 + * + * @param orderItemId 订单项ID + * @return 返回扫码信息列表 + */ + @GetMapping("getScanCodes") + @ApiMark(moduleName = "中心领料单管理", apiName = "条码详情") + public ApiResult> getScanCodes(@RequestParam String orderItemId) { + // 查询退库单对应的明细项 + List items = wmsCenterOutboundScanService.lambdaQuery() + .eq(WmsCenterOutboundScan::getItemId, orderItemId) + .list(); + + // 如果明细项为空,返回空列表 + if (CollectionUtil.isEmpty(items)) { + return ApiResult.success(Collections.emptyList()); + } + + // 将明细项转换为VO对象 + List vos = items.stream() + .map(this::convertToScanCodeVO) + .collect(Collectors.toList()); + + return ApiResult.success(vos); + } + + + private ScanCodeVO convertToScanCodeVO(WmsCenterOutboundScan item) { + ScanCodeVO vo = new ScanCodeVO(); + if (item != null) { + vo.setCodeId(item.getCodeId()); + vo.setCodeNum(item.getCodeNum()); + vo.setBatchNumber(item.getBatchNumber()); + vo.setSerialNumber(item.getSerialNumber()); + vo.setCodeContent(item.getCodeContent()); + } + return vo; + } + + + /** + * 根据预留单号查询出库信息 + * + * @param reservedNumber 预留单号 + * @return 出库信息列表的API结果 + */ + @PostMapping("getOutboundItems") + @ApiMark(moduleName = "中心领料单管理", apiName = "从SAP查询中心领料单信息") + public ApiResult> getOutboundItems(@RequestParam String reservedNumber) { + // 查询预留单对应的出库项信息 + List sapItems = outboundControllerService.getOrderItem(reservedNumber); + + // 如果查询结果为空,则返回空列表 + if (Objects.isNull(sapItems) || CollectionUtil.isEmpty(sapItems)) { + return ApiResult.success(Collections.emptyList()); + } + + // 返回查询到的出库信息列表 + return ApiResult.success(sapItems); } - // 根据预留单号查询出库信息 //确认出库 - // 获取出库单列表信息 - - // 获取出库单详情信息 - - //获取物料的扫码信息 - @GetMapping("getScanCodes") - @ApiMark(moduleName = "中心领料单管理", apiName = "条码详情") - public List getScanCodes(@RequestParam String orderItemId) { - return null; - // return wmsSrmOrderItemService.getScanCodes(orderItemId); + /** + * 确认出库操作 + * + * @param request 出库请求参数,包含出库物料信息,必须经过验证 + * @return ApiResult 操作结果,成功时返回空数据的API结果 + */ + @PostMapping("confirmOutbound") + @ApiMark(moduleName = "中心领料单管理", apiName = "出库确认") + public ApiResult confirmOutbound(@Valid @RequestBody C_MaterialOutboundQO request) { + // 调用出库服务执行确认出库操作 + outboundControllerService.confirmOutbound(request); + return ApiResult.success(); } - // 获取物料出库的推荐批次(根据物料编号+仓库+工厂+数量 按照有效期和批次号进行升序排序) + + + /** + * 获取推荐物料出库项列表 + * + * @param request 推荐项查询参数对象,包含查询条件 + * @return ApiResult> 包含推荐物料出库项列表的API结果对象 + */ + @PostMapping("getCommendationItems") + @ApiMark(moduleName = "中心领料单管理", apiName = "获取出库的建议内容") + public ApiResult> getCommendationItems(@Valid @RequestBody CommendationItemQO request) { + // 调用出库控制器服务获取推荐项数据并返回成功结果 + return ApiResult.success(outboundControllerService.getCommendationItems(request)); + } + } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CenterReturnController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CenterReturnController.java index ae2f134f..044b6ba4 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CenterReturnController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/CenterReturnController.java @@ -61,7 +61,7 @@ public class CenterReturnController { @ApiMark(moduleName = "中心物料退库管理", apiName = "退库单列表") public ApiResult> search(@Valid @RequestBody C_MaterialReturnSearchQO request) { // 调用服务层查询退库单数据,并转换为前端需要的VO对象格式 - PageData pageData = PageUtil.convert(wmsCenterReturnService.searchDictionary(request), d -> Convert.convert(C_MaterialReturnVO.class, d)); + PageData pageData = PageUtil.convert(wmsCenterReturnService.search(request), d -> Convert.convert(C_MaterialReturnVO.class, d)); return ApiResult.success(pageData); } @@ -145,8 +145,9 @@ public class CenterReturnController { } - /** + /** * 根据预留单号查询退货信息 + * * @param reservedNumber 预留单号 * @return ApiResult 退货信息结果封装 * @throws JCoException SAP连接异常 @@ -168,7 +169,7 @@ public class CenterReturnController { } - /** + /** * 提交退货信息 * * @param request 退货申请参数对象,包含退货物料的相关信息 diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java index 31e2873f..4b80d61c 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BasdeSerialNumberControllerService.java @@ -26,20 +26,19 @@ public class BasdeSerialNumberControllerService { ) public String generateSerialNumber(Integer businessType) { String currentDate = LocalDate.now().format(DATE_FORMATTER); - int retryCount = 0; - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(BasdeSerialNumber::getBusinessType, businessType) - .eq(BasdeSerialNumber::getCurrentDateStr, currentDate); BasdeSerialNumber serialNumber = basdeSerialNumberService.lambdaQuery() .eq(BasdeSerialNumber::getBusinessType, businessType) - .eq(BasdeSerialNumber::getCurrentDateStr, currentDate) .one(); if (Objects.isNull(serialNumber)) { return null; } - int nextSerial = serialNumber.getMaxSerial() + 1; + int nextSerial = 0; + if (serialNumber.getCurrentDateStr().equals(currentDate)) { + nextSerial = serialNumber.getMaxSerial(); + } + nextSerial = nextSerial + 1; serialNumber.setMaxSerial(nextSerial); serialNumber.setCurrentDateStr(currentDate); basdeSerialNumberService.updateById(serialNumber); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/CenterOutboundControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/CenterOutboundControllerService.java new file mode 100644 index 00000000..b93a67b5 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/CenterOutboundControllerService.java @@ -0,0 +1,42 @@ +package com.nflg.wms.admin.service; + +import com.nflg.wms.common.pojo.dto.SapImportResultDTO; +import com.nflg.wms.common.pojo.qo.C_MaterialOutboundQO; +import com.nflg.wms.common.pojo.qo.CommendationItemQO; +import com.nflg.wms.common.pojo.vo.C_MaterialOutboundSAPItemVO; +import com.nflg.wms.common.pojo.vo.C_MaterialOutboundreCommendationItemVO; +import com.nflg.wms.repository.service.IWmsCenterOutboundItemService; +import com.nflg.wms.repository.service.IWmsCenterOutboundScanService; +import com.nflg.wms.repository.service.IWmsCenterOutboundService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class CenterOutboundControllerService { + @Resource + private IWmsCenterOutboundService wmsCenterOutboundService; + + @Resource + private IWmsCenterOutboundItemService wmsCenterOutboundItemService; + + @Resource + private IWmsCenterOutboundScanService wmsCenterOutboundScanService; + + @Resource + private SapService sapService; + + public List getOrderItem(String reservedNumber) { + + } + + public void confirmOutbound(C_MaterialOutboundQO request) { + + } + + public List getCommendationItems(CommendationItemQO request) { + + } + +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SapImportResultDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SapImportResultDTO.java new file mode 100644 index 00000000..e22bbfc9 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SapImportResultDTO.java @@ -0,0 +1,14 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class SapImportResultDTO { + //SAP同步的结果 + private boolean syncStatus; + + //SAP同步失败的错误信息 + private String syncMsg; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/C_MaterialOutboundItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/C_MaterialOutboundItemQO.java index 897a7a9b..a31bcba6 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/C_MaterialOutboundItemQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/C_MaterialOutboundItemQO.java @@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.qo; import lombok.Data; import lombok.experimental.Accessors; +import java.math.BigDecimal; import java.util.List; @Data @@ -28,7 +29,7 @@ public class C_MaterialOutboundItemQO { private String resbMeins; // 实际出库数量 - private String resbErfmg; + private BigDecimal resbErfmg; //扫码信息 private List scanCodes; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/CommendationItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/CommendationItemQO.java new file mode 100644 index 00000000..d76cc9c1 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/CommendationItemQO.java @@ -0,0 +1,19 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class CommendationItemQO { + //工厂 + private String factory; + //物料编号 + private String materialNo; + // 仓库编号 + private String warehouseNumber; + //出库数量 + private BigDecimal qty; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundSAPItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundSAPItemVO.java new file mode 100644 index 00000000..e1ae8874 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundSAPItemVO.java @@ -0,0 +1,57 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@Accessors(chain = true) +public class C_MaterialOutboundSAPItemVO { + + /** + * 预留单行号 + */ + private String reservedNumberId; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 单位 + */ + private String unit; + + /** + * 工厂 + */ + private String factory; + + /** + * 领料数量 + */ + private BigDecimal qty; + + /** + * 默认仓库 + */ + private String warehouseNumber; + + /** + * 货位编号 + */ + private String binNos; + + /** + * 推荐物料出库列表 + */ + private List recommendationItems; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundreCommendationItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundreCommendationItemVO.java new file mode 100644 index 00000000..57d780b5 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/C_MaterialOutboundreCommendationItemVO.java @@ -0,0 +1,20 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class C_MaterialOutboundreCommendationItemVO { + /** + * 推荐的批次号 + */ + private String recommendationBatchCode; + + /** + * 推荐的数量 + */ + private BigDecimal recommendationBatchNum; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterOutboundService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterOutboundService.java index abd8f557..6a79a4df 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterOutboundService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterOutboundService.java @@ -1,7 +1,10 @@ package com.nflg.wms.repository.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.pojo.qo.C_MaterialOutboundSearchQO; import com.nflg.wms.repository.entity.WmsCenterOutbound; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.validation.Valid; /** *

@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IWmsCenterOutboundService extends IService { + IPage search(@Valid C_MaterialOutboundSearchQO request); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterReturnService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterReturnService.java index f20c4b37..bcf2bb8b 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterReturnService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsCenterReturnService.java @@ -20,7 +20,7 @@ import java.util.List; */ public interface IWmsCenterReturnService extends IService { - IPage searchDictionary(@Valid C_MaterialReturnSearchQO request); + IPage search(@Valid C_MaterialReturnSearchQO request); void saveReturns(WmsCenterReturn wmsCenterReturn, List wmsCenterReturnItems, List wmsCenterReturnScans); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterOutboundServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterOutboundServiceImpl.java index 6ed60a49..b710f95c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterOutboundServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterOutboundServiceImpl.java @@ -1,6 +1,12 @@ package com.nflg.wms.repository.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.pojo.qo.C_MaterialOutboundSearchQO; import com.nflg.wms.repository.entity.WmsCenterOutbound; +import com.nflg.wms.repository.entity.WmsCenterReturn; import com.nflg.wms.repository.mapper.WmsCenterOutboundMapper; import com.nflg.wms.repository.service.IWmsCenterOutboundService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -17,4 +23,29 @@ import org.springframework.stereotype.Service; @Service public class WmsCenterOutboundServiceImpl extends ServiceImpl implements IWmsCenterOutboundService { + @Override + public IPage search(C_MaterialOutboundSearchQO request) { + // 参数非空校验 + if (request == null) { + throw new IllegalArgumentException("请求参数不能为空"); + } + + // 分页参数校验 + int page = request.getPage() <= 0 ? 1 : request.getPage(); + int pageSize = request.getPageSize() <= 0 ? 10 : request.getPageSize(); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StrUtil.isNotBlank(request.getOrderNumber())) { + // 对用户输入进行转义,防止SQL注入 + String orderNumber = request.getOrderNumber().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + queryWrapper.like(WmsCenterOutbound::getOrderNumber, orderNumber); + } + if (StrUtil.isNotBlank(request.getReservedNumber())) { + // 对用户输入进行转义,防止SQL注入 + String reservedNumber = request.getReservedNumber().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + queryWrapper.like(WmsCenterOutbound::getReservedNumber, reservedNumber); + } + queryWrapper.orderByDesc(WmsCenterOutbound::getId); + return baseMapper.selectPage(new Page<>(page, pageSize), queryWrapper); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterReturnServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterReturnServiceImpl.java index 9484e277..3a8462ee 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterReturnServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsCenterReturnServiceImpl.java @@ -48,7 +48,7 @@ public class WmsCenterReturnServiceImpl extends ServiceImpl searchDictionary(C_MaterialReturnSearchQO request) { + public IPage search(C_MaterialReturnSearchQO request) { // 参数非空校验 if (request == null) { throw new IllegalArgumentException("请求参数不能为空");