diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java index 2aefffd3..16f71845 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentOutboundController.java @@ -35,6 +35,7 @@ import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 零部件出库单 @@ -113,6 +114,39 @@ public class ComponentOutboundController { return ApiResult.success(vos); } + /** + * 出库单冲销 + * + * @param request 确认出库单的参数对象 + */ + @PostMapping("reverse") + public ApiResult reverse(@Valid @RequestBody PackingOutBoundReverseQO request) { + // 通过出库单ID获取到出库单 + WmsComponentOutbound outbound = wmsComponentOutboundService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(outbound)).throwMessage("出库单不存在"); + VUtil.trueThrowBusinessError(outbound.getIsReverse()).throwMessage("此出库单已经被冲销,不可以二次冲销"); + List outboundItems = wmsComponentOutboundItemService.lambdaQuery() + .eq(WmsComponentOutboundItem::getOutboundId, request.getId()) + .list(); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(outboundItems)).throwMessage("无有效的出库单明细项"); + + // 组装库存信息 + List inventoryDTOS = new ArrayList<>(); + for (WmsComponentOutboundItem item : outboundItems) { + List codes = wmsComponentOutboundScanCodesService.findByOutboundItemId(item.getId()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(codes)).throwMessage("无有效的扫码记录"); + for (WmsComponentOutboundScanCodes code : codes) { + setInventoryDTO(inventoryDTOS, item.getIdnrk(), outbound.getFactoryNo(), item.getLgort(), code.getBatchNumber(), code.getCodeNum()); + } + } + // 组装SAP的信息 + ZWM3A20DTO zwm3a20DTO = new ZWM3A20DTO() + .setIType("B") + .setIvDelivery(outbound.getVbelv()); + componentOutboundControllerService.reverse(outbound.getId(), outbound.getPackingId(), inventoryDTOS, zwm3a20DTO); + return ApiResult.success(); + } + /** * 确认出库单 * @@ -126,16 +160,36 @@ public class ComponentOutboundController { VUtil.trueThrowBusinessError(Objects.isNull(packing)).throwMessage("此装箱单不存在"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getItems())).throwMessage("无发货详情信息"); - List packingItemId = request.getItems() - .stream() - .map(ComponentOutboundItemInputQO::getPackingItemId) - .toList(); - List packingItems = wmsComponentPackingItemService .lambdaQuery() - .in(WmsComponentPackingItem::getId, packingItemId) + .eq(WmsComponentPackingItem::getPackingId, packing.getId()) .list(); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(packingItems)).throwMessage("无法找到有效的装箱单详情"); + //判断是否存在了相同的交货单了 + WmsComponentOutbound outboundSelect = wmsComponentOutboundService.lambdaQuery() + .eq(WmsComponentOutbound::getVbelv, packing.getVbelv()) + .eq(WmsComponentOutbound::getIsReverse, false) + .one(); + VUtil.trueThrowBusinessError(Objects.nonNull(outboundSelect)) + .throwMessage("交货单已出库,单号为【" + outboundSelect.getOutboundNo() + "】"); + //判断数量是否一致,且已经存在了相同的收货单了 + for (WmsComponentPackingItem item : packingItems) { + List items = request.getItems() + .stream() + .filter(d -> d.getPackingItemId().equals(item.getId())) + .toList(); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)) + .throwMessage("物料【" + item.getIdnrk() + "】的实际出库数量为0,小于了出库数量【" + item.getMenge() + "】"); + + BigDecimal totalCodeNum = request.getItems().stream() + .flatMap(i -> i.getScanCodes() != null ? i.getScanCodes().stream() : Stream.empty()) + .map(ScanCodeQO::getCodeNum) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + VUtil.trueThrowBusinessError(item.getMenge().subtract(totalCodeNum).compareTo(BigDecimal.ZERO) != 0) + .throwMessage("物料【" + item.getIdnrk() + "】的实际出库数量为【" + totalCodeNum + "】,小于了出库数量【" + item.getMenge() + "】"); + } + WmsComponentOutbound outbound = setWmsComponentOutbound(packing); List outboundItems = new ArrayList<>(); List outboundScanCodes = new ArrayList<>(); @@ -156,19 +210,15 @@ public class ComponentOutboundController { //处理条码,先根据批次号、序列号进行一次数量汇总 if (CollectionUtil.isNotEmpty(item.getScanCodes())) { - List scanCodesGroup=new ArrayList<>(); - for (ScanCodeQO code : item.getScanCodes()) - { - ScanCodeQO codeItem=scanCodesGroup.stream().filter(c->c.getBatchNumber().equals(code.getBatchNumber()) + List scanCodesGroup = new ArrayList<>(); + for (ScanCodeQO code : item.getScanCodes()) { + ScanCodeQO codeItem = scanCodesGroup.stream().filter(c -> c.getBatchNumber().equals(code.getBatchNumber()) && c.getSerialNumber().equals(code.getSerialNumber()) ).findFirst().orElse(null); - if(Objects.isNull(codeItem)) - { + if (Objects.isNull(codeItem)) { scanCodesGroup.add(code); - } - else - { + } else { codeItem.setCodeNum(codeItem.getCodeNum().add(code.getCodeNum())); } } @@ -210,14 +260,12 @@ public class ComponentOutboundController { } } - for (ScanCodeQO code : scanCodesGroup) { -// VUtil.trueThrowBusinessError(codeIds.contains(code.getCodeId())).throwMessage("物料[" + outboundItem.getIdnrk() + "]的条码[" + code.getCodeId() + "]被重复使用"); -// codeIds.add(code.getCodeId()); // 组装条码信息 WmsComponentOutboundScanCodes scanCodes = new WmsComponentOutboundScanCodes(); scanCodes.setOutboundItemId(outboundItem.getId()) .setCodeId(code.getCodeId()) + .setOutboundId(outbound.getId()) .setSerialNumbers(code.getSerialNumber()) .setCodeNum(code.getCodeNum()) .setBatchNumber(code.getBatchNumber()) @@ -226,17 +274,10 @@ public class ComponentOutboundController { //组装下库存信息 setInventoryDTO(inventories, outboundItem.getIdnrk(), packing.getFactoryNo(), outboundItem.getLgort(), code.getBatchNumber(), code.getCodeNum()); - } - } else { - setInventoryDTO(inventories, outboundItem.getIdnrk(), packing.getFactoryNo(), outboundItem.getLgort(), "", outboundItem.getOutQty()); - set3A20Item("", outboundItem, outboundItem.getOutQty(), zwm3a20DTO); } } -// 判断下当前的条码是否有已经使用过得 -// List existScanCodes = wmsComponentOutboundScanCodesService.findByCodeIdIn(codeIds); -// VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existScanCodes)).throwMessage("存在已经使用过的条码"); componentOutboundControllerService.confirmPda(outbound, outboundItems, outboundScanCodes, zwm3a20DTO, inventories); return ApiResult.success(); } @@ -270,6 +311,7 @@ public class ComponentOutboundController { .setPackingId(packing.getId()) .setCreateName(UserUtil.getUserName()) .setCreateId(UserUtil.getUserId()) + .setIsReverse(false) .setCreateTime(LocalDateTime.now()); return outbound; } @@ -308,6 +350,9 @@ public class ComponentOutboundController { return outboundItem; } + /* + 组装库存信息 + */ private void setInventoryDTO(List inventories, String materialNo, String factoryNo, String warehouseNo, String batchNumber, BigDecimal outQty ) { diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentPackingController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentPackingController.java index 72858f83..df381f23 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentPackingController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ComponentPackingController.java @@ -96,6 +96,14 @@ public class ComponentPackingController { */ @PostMapping("getorders") public ApiResult getComponentOrders(@Valid @RequestBody ComponentOrderQO request) { + // 判断交货单号是否已经存在了 + WmsComponentPacking packing = wmscomponentPackingService.lambdaQuery() + .eq(WmsComponentPacking::getVbelv, request.getVbelv()) + .eq(WmsComponentPacking::getIsCompleted, 2) + .one(); + + VUtil.trueThrowBusinessError(Objects.nonNull(packing)) + .throwMessage("已存在相同的交货单,单号为【" + packing.getNo() + "】,状态为【" + (packing.getIsCompleted() == 0 ? "未出库" : "已出库") + "】"); ZWM3A19DTO result = sapService.zwm3a19(request.getVbelv(), request.getWerks()); VUtil.trueThrowBusinessError(StrUtil.isBlank(result.getHeadDTO().getWbstk()) || result.getHeadDTO().getWbstk().equalsIgnoreCase("C")) @@ -137,7 +145,7 @@ public class ComponentPackingController { public ApiResult deletePacking(@Valid @RequestBody List ids) { //首先判断是否存在已完成的单据 List packingList = wmscomponentPackingService.lambdaQuery() - .eq(WmsComponentPacking::getIsCompleted, 2) + .ne(WmsComponentPacking::getIsCompleted, 0) .in(WmsComponentPacking::getId, ids) .list(); VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(packingList)).throwMessage("存在已完成的装车单,请勿删除"); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java index 6b25b646..37a1c350 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java @@ -93,7 +93,7 @@ public class InventoryController extends BaseController { @GetMapping("check/getTaskItems") public ApiResult> getTaskItems(@Valid @RequestParam(required = false) Long id) { List taskItems = Objects.isNull(id) ? Collections.emptyList() : inventoryCheckTaskItemService.lambdaQuery().eq(WmsInventoryCheckTaskItem::getTaskId, id).list(); - List warehouseVOS = warehouseService.getEnableList(null); + List warehouseVOS = warehouseService.getEnableList(null); List vos = new ArrayList<>(); warehouseVOS.forEach(warehouseVO -> { WmsInventoryCheckTaskItem item = taskItems.stream().filter(taskItem -> Objects.equals(taskItem.getWarehouseId(), warehouseVO.getId())).findFirst().orElse(null); @@ -107,8 +107,8 @@ public class InventoryController extends BaseController { .setChargeUserId(Objects.isNull(item) ? null : item.getChargeUserId()) .setChargeUserName(Objects.isNull(item) ? "" : item.getChargeUserName()) .setAddress(warehouseVO.getAddress()) - .setUserName(warehouseVO.getUserName()) - .setPhone(warehouseVO.getPhone()) +// .setUserName(warehouseVO.getUserName()) +// .setPhone(warehouseVO.getPhone()) ); }); return ApiResult.success(vos); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java index 1ed0de56..d6802323 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java @@ -78,7 +78,7 @@ public class OutPurchaseController extends BaseController { public ApiResult searchSAP(@Valid @RequestBody @NotNull zwm3A05QO request) { ZWM3A05VO result = sapService.zwm3A05(request); result.getItems().parallelStream().forEach(it -> { - it.setBinNos(binService.getBinNos(it.getMatnr(), it.getWerks(), it.getLgort())); + it.setBinNos(binService.getBinNos(it.getMatnr(), result.getWerks(), it.getLgort())); }); return ApiResult.success(result); } @@ -107,14 +107,15 @@ public class OutPurchaseController extends BaseController { item.setId(IdUtil.getSnowflakeNextId()); item.setOrderId(order.getId()); item.setNum(BigDecimal.ZERO); + item.setWerks(request.getWerks()); if (CollectionUtil.isNotEmpty(it.getQrCodes())) { it.getQrCodes().forEach(qrCode -> { - MaterialQRCodeContentDTO dto = NoUtil.getMaterialQRCodeContent(qrCode); + MaterialQRCodeContentDTO dto = NoUtil.getMaterialQRCodeContent(qrCode.getContent()); VUtil.trueThrowBusinessError(!StrUtil.equals(dto.getMaterialNo(), it.getMatnr())) .throwMessage("物料" + it.getMatnr() + "与二维码不匹配"); VUtil.trueThrowBusinessError(!check(dto, it.getCharg(), it.getSernrs())) .throwMessage("物料" + it.getMatnr() + "包含不符合批次号和序列号的扫码记录"); - item.setNum(item.getNum().add(dto.getNum())); + item.setNum(item.getNum().add(qrCode.getNum())); records.add(new OutMaterialScanRecord() .setSource(6) .setSourceId(order.getId()) @@ -122,7 +123,7 @@ public class OutPurchaseController extends BaseController { .setTicketId(order.getId()) .setTicketItemId(item.getId()) .setMaterialNo(dto.getMaterialNo()) - .setContent(qrCode) + .setContent(qrCode.getContent()) .setBatchNo(dto.getBatchNo()) .setSerialNo(dto.getSerialNo()) .setUniqNo(dto.getUniqNo()) @@ -137,10 +138,10 @@ public class OutPurchaseController extends BaseController { ); }); } - VUtil.trueThrowBusinessError(it.getNum().compareTo(item.getTemng()) > 0) - .throwMessage("物料" + it.getMatnr() + "的扫码数量大于退货数量"); - VUtil.trueThrowBusinessError(item.getNum().compareTo(it.getNum()) != 0) - .throwMessage("物料" + it.getMatnr() + "的扫码数量不一致"); +// VUtil.trueThrowBusinessError(it.getNum().compareTo(item.getTemng()) > 0) +// .throwMessage("物料" + it.getMatnr() + "的扫码数量大于退货数量"); +// VUtil.trueThrowBusinessError(item.getNum().compareTo(it.getNum()) != 0) +// .throwMessage("物料" + it.getMatnr() + "的扫码数量不一致"); items.add(item); if (item.getNum().compareTo(BigDecimal.ZERO) > 0) { input1.add(new ZWM3A06Input1DTO() @@ -148,10 +149,10 @@ public class OutPurchaseController extends BaseController { .setRetpo(it.getRetpo()) .setMatnr(it.getMatnr()) .setMaktx(it.getMaktx()) - .setErfmg(it.getNum()) + .setErfmg(item.getNum()) .setMeins(it.getMeins()) .setCharg(it.getCharg()) - .setWerks(it.getWerks()) + .setWerks(item.getWerks()) .setLgort(it.getLgort()) .setLfbja(it.getLfbja()) .setLfbnr(it.getLfbnr()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/WarehouseController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/WarehouseController.java index 6c514947..7b222cf5 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/WarehouseController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/WarehouseController.java @@ -7,6 +7,7 @@ import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.WarehouseAddQO; import com.nflg.wms.common.pojo.qo.WarehouseSearchQO; import com.nflg.wms.common.pojo.qo.WarehouseUpdateQO; +import com.nflg.wms.common.pojo.vo.WarehouseSimpleVO; import com.nflg.wms.common.pojo.vo.WarehouseVO; import com.nflg.wms.repository.entity.DictionaryItem; import com.nflg.wms.starter.BaseController; @@ -118,7 +119,7 @@ public class WarehouseController extends BaseController { * @param factoryNo 工厂编号 */ @GetMapping("getEnableList") - public ApiResult> getEnableList(@Valid @RequestParam(required = false) String factoryNo) { + public ApiResult> getEnableList(@Valid @RequestParam(required = false) String factoryNo) { return ApiResult.success(warehouseControllerService.getEnableList(factoryNo)); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/document/WmsComponentOutboundScanCodes.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/document/WmsComponentOutboundScanCodes.java index 89385196..b322c324 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/document/WmsComponentOutboundScanCodes.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/document/WmsComponentOutboundScanCodes.java @@ -15,6 +15,11 @@ public class WmsComponentOutboundScanCodes { @Id private String id; + /** + * 出库单ID + */ + private Long outboundId; + /*** * 出库单的单行ID号 * diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/repository/WmsComponentOutboundScanCodesRepository.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/repository/WmsComponentOutboundScanCodesRepository.java index e007e017..67694994 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/repository/WmsComponentOutboundScanCodesRepository.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/repository/WmsComponentOutboundScanCodesRepository.java @@ -12,6 +12,9 @@ import java.util.List; @Repository public interface WmsComponentOutboundScanCodesRepository extends MongoRepository { List findByOutboundItemId(Long outboundItemId); + + List findByoutboundId(Long outboundId); + List findByCodeIdIn(List attr0); } \ No newline at end of file diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ComponentOutboundControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ComponentOutboundControllerService.java index 8602f3d5..fc1e596e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ComponentOutboundControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ComponentOutboundControllerService.java @@ -10,7 +10,10 @@ import com.nflg.wms.common.pojo.dto.ZWM3A20DTO; import com.nflg.wms.common.pojo.qo.ComponentOutboundInputQO; import com.nflg.wms.common.pojo.qo.ComponentOutboundItemInputQO; import com.nflg.wms.common.pojo.qo.ComponentOutboundQO; +import com.nflg.wms.common.pojo.qo.PackingOutBoundReverseQO; import com.nflg.wms.common.pojo.vo.ComponentOutboundVO; +import com.nflg.wms.common.util.DateTimeUtil; +import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; @@ -19,6 +22,7 @@ import jakarta.validation.Valid; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -82,4 +86,36 @@ public class ComponentOutboundControllerService { wmsComponentOutboundScanCodesService.insert(outboundScanCodes); } } + + @Transactional + public void reverse(Long outboundId, Long packingId, List inventories, ZWM3A20DTO zwm3a20DTO) { + //修改出库单的冲销状态为true + wmsComponentOutboundService.lambdaUpdate() + .set(WmsComponentOutbound::getIsReverse, true) + .set(WmsComponentOutbound::getModifyId, UserUtil.getUserId()) + .set(WmsComponentOutbound::getModifyName, UserUtil.getUserName()) + .set(WmsComponentOutbound::getModifyTime, LocalDateTime.now()) + .eq(WmsComponentOutbound::getId, outboundId) + .update(); + // 修改包装单的冲销状态为true + wmscomponentPackingService.lambdaUpdate() + .set(WmsComponentPacking::getIsCompleted, 1) + .set(WmsComponentPacking::getModifyId, UserUtil.getUserId()) + .set(WmsComponentPacking::getModifyName, UserUtil.getUserName()) + .set(WmsComponentPacking::getModifyTime, LocalDateTime.now()) + .eq(WmsComponentPacking::getId, packingId) + .update(); + //修改库存信息 + if (CollectionUtil.isNotEmpty(inventories)) { + inventoryService.in(inventories); + } +//SAP冲销 + Pair result = sapService.zwm3a20(zwm3a20DTO); + wmsComponentOutboundService.lambdaUpdate() + .set(WmsComponentOutbound::getMaterialDoc, result.getKey()) + .set(WmsComponentOutbound::getMaterialDocYear, result.getValue()) + .eq(WmsComponentOutbound::getId, outboundId) + .update(); + } + } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java index bd321eed..78ca3242 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java @@ -149,7 +149,10 @@ public class SapService { JCoTable ot1 = function.getTableParameterList().getTable("OUTPUT1"); VUtil.trueThrowBusinessError(ot1.getNumRows() == 0).throwMessage("没有订单数据"); ot1.setRow(0); - ZWM3A05VO vo = new ZWM3A05VO().setEbeln(ot1.getString("EBELN")).setLifnr(ot1.getString("LIFNR")); + ZWM3A05VO vo = new ZWM3A05VO() + .setEbeln(ot1.getString("EBELN")) + .setLifnr(ot1.getString("LIFNR")) + .setWerks(ot1.getString("WERKS")); vo.setItems(JCoUtil.toBeanList(ot1, ZWM3A05ItemVO.class)); JCoTable ot2 = function.getTableParameterList().getTable("OUTPUT2"); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java index de4a6a79..045de30e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/WarehouseControllerService.java @@ -16,6 +16,7 @@ import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.WarehouseAddQO; import com.nflg.wms.common.pojo.qo.WarehouseSearchQO; import com.nflg.wms.common.pojo.qo.WarehouseUpdateQO; +import com.nflg.wms.common.pojo.vo.WarehouseSimpleVO; import com.nflg.wms.common.pojo.vo.WarehouseVO; import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.EecExcelUtil; @@ -217,7 +218,7 @@ public class WarehouseControllerService { .writeTo(response.getOutputStream()); } - public List getEnableList(String factoryNo) { + public List getEnableList(String factoryNo) { return warehouseService.getEnableList(factoryNo); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java index 3b67f281..1a8a412a 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/JCoUtil.java @@ -1,8 +1,10 @@ package com.nflg.wms.admin.util; import cn.hutool.core.collection.CollectionUtil; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.nflg.wms.common.util.BeanUtil; import com.sap.conn.jco.*; @@ -11,8 +13,10 @@ import java.util.stream.Collectors; public class JCoUtil { - private static final ObjectMapper MAPPER = new ObjectMapper() - .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); + private static final ObjectMapper MAPPER = JsonMapper.builder() + .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .build(); /** * 将 JCoTable 转换为 Java Bean 列表 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java index 30568019..c54d3838 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java @@ -1,6 +1,7 @@ package com.nflg.wms.common.pojo.dto; import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; import lombok.Data; @@ -118,6 +119,7 @@ public class DepartmentMaterialReturnSlipDTO { return Objects.isNull(num) ? bdmng : num; } + @JsonIgnore private String key; public String getKey() { diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackingOutBoundReverseQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackingOutBoundReverseQO.java new file mode 100644 index 00000000..627f3b83 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackingOutBoundReverseQO.java @@ -0,0 +1,11 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class PackingOutBoundReverseQO { + // 出库单ID + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java index 8246fd33..5ee84920 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO.java @@ -1,29 +1,14 @@ package com.nflg.wms.common.pojo.qo; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; -import java.math.BigDecimal; - @Data -public class QRCodeQO { +public class QRCodeQO extends QRCodeQO1 { /** * 项id */ @NotNull private Long itemId; - - /** - * 二维码内容 - */ - @NotBlank - private String content; - - /** - * 数量 - */ - @NotNull - private BigDecimal num; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java new file mode 100644 index 00000000..30bbf331 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java @@ -0,0 +1,23 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class QRCodeQO1 { + + /** + * 二维码内容 + */ + @NotBlank + private String content; + + /** + * 数量 + */ + @NotNull + private BigDecimal num; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentOutboundVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentOutboundVO.java index 2756e055..96ae6e9a 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentOutboundVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentOutboundVO.java @@ -150,4 +150,9 @@ public class ComponentOutboundVO { private String modifyName; private LocalDateTime modifyTime; + + /** + * 是否冲销 + */ + private Boolean isReverse; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentPackingVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentPackingVO.java index 3c1606ea..97fa351c 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentPackingVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ComponentPackingVO.java @@ -124,7 +124,7 @@ public class ComponentPackingVO { private String wbstk; /** - * 0 未出库;1 完成出库 + * 0 未出库;1 对冲;2 出库完成 */ private Short isCompleted; @@ -136,4 +136,5 @@ public class ComponentPackingVO { * 所属工厂 */ private String factoryNo; + } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InventoryCheckTaskItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InventoryCheckTaskItemVO.java index d4d4015d..d1e7524a 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InventoryCheckTaskItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InventoryCheckTaskItemVO.java @@ -74,13 +74,13 @@ public class InventoryCheckTaskItemVO { */ private String address; - /** - * 责任人 - */ - private String userName; +// /** +// * 责任人 +// */ +// private String userName; - /** - * 联系电话 - */ - private String phone; +// /** +// * 联系电话 +// */ +// private String phone; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseSimpleVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseSimpleVO.java new file mode 100644 index 00000000..a14b02c7 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseSimpleVO.java @@ -0,0 +1,29 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +@Data +public class WarehouseSimpleVO { + + private Long id; + + /** + * 仓库编码 + */ + private String no; + + /** + * 仓库名称 + */ + private String name; + + /** + * 所属工厂名称 + */ + private String factoryName; + + /** + * 所在地点 + */ + private String address; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseVO.java index e374edd0..962b08bc 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WarehouseVO.java @@ -5,19 +5,7 @@ import lombok.Data; import java.time.LocalDateTime; @Data -public class WarehouseVO { - - private Long id; - - /** - * 仓库编码 - */ - private String no; - - /** - * 仓库名称 - */ - private String name; +public class WarehouseVO extends WarehouseSimpleVO { /** * 责任人 @@ -34,11 +22,6 @@ public class WarehouseVO { */ private String phone; - /** - * 所在地点 - */ - private String address; - /** * 是否启用 */ @@ -83,9 +66,4 @@ public class WarehouseVO { * 所属工厂 */ private Long factoryId; - - /** - * 所属工厂名称 - */ - private String factoryName; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java index fc03597d..9e1b41ae 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java @@ -1,13 +1,14 @@ package com.nflg.wms.common.pojo.vo; +import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.nflg.wms.common.pojo.qo.QRCodeQO1; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Data @JsonIgnoreProperties(ignoreUnknown = true) @@ -18,6 +19,10 @@ public class ZWM3A05ItemVO { */ private String ebelp; + public String getEbelp() { + return StrUtil.removeAllPrefix(ebelp, "0"); + } + /** * 退货项目 */ @@ -74,11 +79,6 @@ public class ZWM3A05ItemVO { */ private String lgort; - /** - * 工厂 - */ - private String werks; - /** * 批次号列表 */ @@ -89,17 +89,17 @@ public class ZWM3A05ItemVO { */ private String binNos; - /** - * 实际退货数量(扫码后计算) - */ - private BigDecimal num; - - public BigDecimal getNum() { - return Optional.ofNullable(num).orElse(BigDecimal.ZERO); - } +// /** +// * 实际退货数量(扫码后计算) +// */ +// private BigDecimal num; +// +// public BigDecimal getNum() { +// return Optional.ofNullable(num).orElse(BigDecimal.ZERO); +// } /** * 二维码列表 */ - private List qrCodes = new ArrayList<>(); + private List qrCodes = new ArrayList<>(); } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java index 124a7d2e..399a4f75 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java @@ -21,6 +21,11 @@ public class ZWM3A05VO { */ private String lifnr; + /** + * 工厂 + */ + private String werks; + @Valid private List items = new ArrayList<>(); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentOutbound.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentOutbound.java index a0b994b3..dbc92973 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentOutbound.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentOutbound.java @@ -177,4 +177,9 @@ public class WmsComponentOutbound implements Serializable { * 物料年度凭证 */ private String materialDocYear; + + /** + * 是否冲销 + */ + private Boolean isReverse; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentPacking.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentPacking.java index a4ec3b2c..5c6e92be 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentPacking.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsComponentPacking.java @@ -14,7 +14,7 @@ import java.time.LocalDateTime; /** *

- * + * *

* * @author 代码生成器生成 @@ -160,7 +160,7 @@ public class WmsComponentPacking implements Serializable { private String factoryNo; /** - * 0 未出库;1 部分出库;2 出库完成 + * 0 未出库;1 对冲;2 出库完成 */ private Short isCompleted; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java index fc477df8..3efa820a 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.pojo.qo.WarehouseSearchQO; +import com.nflg.wms.common.pojo.vo.WarehouseSimpleVO; import com.nflg.wms.common.pojo.vo.WarehouseVO; import com.nflg.wms.repository.entity.WmsWarehouse; import org.apache.ibatis.annotations.Param; @@ -26,7 +27,7 @@ public interface WmsWarehouseMapper extends BaseMapper { List searchNonPage(@Param("request") WarehouseSearchQO request); - List getEnableList(String factoryNo); + List getEnableList(String factoryNo); List getListByIds(List list); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java index 99bb3742..1b80bd67 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.WarehouseSearchQO; +import com.nflg.wms.common.pojo.vo.WarehouseSimpleVO; import com.nflg.wms.common.pojo.vo.WarehouseVO; import com.nflg.wms.repository.entity.WmsWarehouse; import jakarta.validation.Valid; @@ -37,7 +38,7 @@ public interface IWmsWarehouseService extends IService { List searchNonPage(@Valid WarehouseSearchQO request); - List getEnableList(String factoryNo); + List getEnableList(String factoryNo); List getListByIds(List list); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java index c55bb4d8..310aed94 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.WarehouseSearchQO; +import com.nflg.wms.common.pojo.vo.WarehouseSimpleVO; import com.nflg.wms.common.pojo.vo.WarehouseVO; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; @@ -106,7 +107,7 @@ public class WmsWarehouseServiceImpl extends ServiceImpl getEnableList(String factoryNo) { + public List getEnableList(String factoryNo) { return baseMapper.getEnableList(factoryNo); } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsComponentOutboundMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsComponentOutboundMapper.xml index 3a50a692..d13844ee 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsComponentOutboundMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsComponentOutboundMapper.xml @@ -6,7 +6,7 @@ select id,packing_no, outbound_no,matnr,name1,uname,vbeln,maktx,datum,xnum,cnum,bname,zjshz,zchep,tel_number,sernr,huodh,vbelv, p_name,l_bezei,l_name,g_streen,g_str_suppl2,wbstk,create_name,create_time,factory_no,create_id, - create_name,create_time,packing_id + create_name,create_time,packing_id,is_reverse from wms_component_outbound diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml index 1846e4b5..4ffbb75a 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml @@ -49,7 +49,7 @@ order by w.id desc - select w.*, di.name as factory_name from wms_warehouse w left join dictionary_item di on w.factory_id = di.id diff --git a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java index 35eae3d8..6c8d92d5 100644 --- a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java +++ b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java @@ -33,7 +33,7 @@ public class CodeGeneratorTest { ) .strategyConfig(builder -> { builder - .addInclude("wms_inventory_barcode_printing") //只生成指定表 + .addInclude("wms_component_outbound") //只生成指定表 .entityBuilder().idType(IdType.ASSIGN_ID) .enableLombok() .enableChainModel()