From 5575139ee0f7d02a6d0a26bf6826586222b2360d Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Tue, 11 Nov 2025 14:48:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E9=80=80=E6=96=99=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProductionReturnController.java | 17 ++- .../entity/dto/ProductionReturnDto.java | 2 + .../service/ProductionReturnService.java | 8 +- .../impl/ProductionReturnServiceImpl.java | 123 ++++++++++++++---- .../production/ProductionReturnMapper.xml | 4 + 5 files changed, 123 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/gaotao/modules/production/controller/ProductionReturnController.java b/src/main/java/com/gaotao/modules/production/controller/ProductionReturnController.java index 81ea549..3ab1bd8 100644 --- a/src/main/java/com/gaotao/modules/production/controller/ProductionReturnController.java +++ b/src/main/java/com/gaotao/modules/production/controller/ProductionReturnController.java @@ -56,7 +56,7 @@ public class ProductionReturnController { @PostMapping("/getIssueForShopOrder") public R getIssueForShopOrder(@RequestBody ProductionReturnDto dto){ try { - List issueForShopOrder = productionReturnService.getIssueForShopOrder(dto.getWorkOrderNo(), dto.getSite()); + List issueForShopOrder = productionReturnService.getIssueForShopOrder(dto.getWorkOrderNo(), dto.getSite(),dto.getComponentPartNo()); return R.ok().put("issueForShopOrder", issueForShopOrder); } catch (Exception e) { return R.error(e.getMessage()); @@ -72,6 +72,15 @@ public class ProductionReturnController { return R.ok().put("inventoryPart", inventoryPart); } + /** + * 确认发料 + */ + @PostMapping("/productionReturnConfirm") + public R productionReturnConfirm(@RequestBody DirectUnissueDto dto)throws Exception{ + List ids = productionReturnService.productionReturnConfirm(dto); + return R.ok().put("unitIds", ids); + } + /*------------------------------------------------PDA申请单退料----------------------------------------------------------*/ @PostMapping("/getUnissueNotifyHeaderInfo") public R getUnissueNotifyHeaderInfo(@RequestBody ProductionReturnDto dto)throws Exception{ @@ -116,8 +125,8 @@ public class ProductionReturnController { } @PostMapping("/productionReturnUnissueConfirm") - public R productionReturnUnissueConfirm(@RequestBody DirectUnissueDto dto){ - productionReturnService.productionReturnUnissueConfirm(dto); - return R.ok(); + public R productionReturnUnissueConfirm(@RequestBody DirectUnissueDto dto)throws Exception{ + List ids = productionReturnService.productionReturnUnissueConfirm(dto); + return R.ok().put("unitIds", ids); } } diff --git a/src/main/java/com/gaotao/modules/production/entity/dto/ProductionReturnDto.java b/src/main/java/com/gaotao/modules/production/entity/dto/ProductionReturnDto.java index 9374e63..90288d7 100644 --- a/src/main/java/com/gaotao/modules/production/entity/dto/ProductionReturnDto.java +++ b/src/main/java/com/gaotao/modules/production/entity/dto/ProductionReturnDto.java @@ -59,4 +59,6 @@ public class ProductionReturnDto implements Serializable { private String sequenceNo; private String orderNo; + private String componentPartNo; + } diff --git a/src/main/java/com/gaotao/modules/production/service/ProductionReturnService.java b/src/main/java/com/gaotao/modules/production/service/ProductionReturnService.java index baf7f91..8a964bc 100644 --- a/src/main/java/com/gaotao/modules/production/service/ProductionReturnService.java +++ b/src/main/java/com/gaotao/modules/production/service/ProductionReturnService.java @@ -20,7 +20,7 @@ public interface ProductionReturnService { * @param site * @return */ - List getReturnWorkOrderInfo(String workOrderNo, String site); + List getReturnWorkOrderInfo(String workOrderNo, String site)throws Exception; /** * 获取领料记录(直接退料) @@ -28,10 +28,12 @@ public interface ProductionReturnService { * @param site * @return */ - List getIssueForShopOrder(String workOrderNo, String site); + List getIssueForShopOrder(String workOrderNo, String site,String componentPartNo)throws Exception; List getInventoryPart(String partNo, String site); + List productionReturnConfirm(DirectUnissueDto returnDto) throws Exception; + /*------------------------------------------------PDA申请单退料----------------------------------------------------------*/ List getUnissueNotifyHeaderInfo(ProductionReturnDto dto); @@ -41,5 +43,5 @@ public interface ProductionReturnService { MaterialLabelInfo scanMaterialLabel(String labelCode, String site,String batchNo,String partNo); - void productionReturnUnissueConfirm(DirectUnissueDto dto); + List productionReturnUnissueConfirm(DirectUnissueDto dto)throws Exception; } diff --git a/src/main/java/com/gaotao/modules/production/service/impl/ProductionReturnServiceImpl.java b/src/main/java/com/gaotao/modules/production/service/impl/ProductionReturnServiceImpl.java index 35ea23a..064b392 100644 --- a/src/main/java/com/gaotao/modules/production/service/impl/ProductionReturnServiceImpl.java +++ b/src/main/java/com/gaotao/modules/production/service/impl/ProductionReturnServiceImpl.java @@ -83,43 +83,32 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { private TransHeaderService transHeaderService; @Override - public List getReturnWorkOrderInfo(String workOrderNo, String site) { + public List getReturnWorkOrderInfo(String workOrderNo, String site) throws Exception{ List shopOrders = ifsApiIssueAndReturnService.getWorkOrderInfo(workOrderNo, site, "*", "*"); List shopOrderVos = shopOrders.stream() .filter(so -> "Started".equalsIgnoreCase(so.getObjstate())) .toList(); + if (shopOrders.size()>0 && shopOrderVos.size()==0){ + throw new Exception("工单状态不允许退料"); + } return shopOrderVos; } @Override - public List getIssueForShopOrder(String workOrderNo, String site){ + public List getIssueForShopOrder(String workOrderNo, String site,String componentPartNo)throws Exception { // 验证工单状态 if (!validateWorkOrderStatus(workOrderNo, site)) { throw new XJException("工单状态不允许发料"); } - try{ - Map params = Map.of( - "ifsDBName", ifsDBName, - "domainUserID", getCurrentDomainUserID(), - "ifsSiteID", site, - "ifsOrderNo", workOrderNo, - "ifsReleaseNo", "*", - "ifsSequenceNo", "*" - ); - ObjectMapper objectMapper = new ObjectMapper(); - String jsonBody = objectMapper.writeValueAsString(params); - String ifsResponse = HttpUtils.doGetWithBody(ifsUrl+"IssueForShopOrder",jsonBody,null); - ObjectMapper mapper = new ObjectMapper(); - List issueForShopOrderVos = mapper.readValue(ifsResponse, new TypeReference>() { - }); - - return issueForShopOrderVos; - }catch (Exception e){ - throw new XJException("获取工单BOM物料列表失败: " + e.getMessage()); - } - + List issueForShopOrderVos = ifsApiIssueAndReturnService.getIssueForShopOrder(workOrderNo, site,"*", "*"); + List shopOrderVos = issueForShopOrderVos.stream() + .filter(vo -> { + return vo.getPartNo() != null && componentPartNo != null + && vo.getPartNo().equals(componentPartNo); + }).collect(Collectors.toList()); + return shopOrderVos; } @Override @@ -134,6 +123,89 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { return true; } + @Override + @Transactional + public List productionReturnConfirm(DirectUnissueDto returnDto) throws Exception{ + // 验证工单状态 + if (!validateWorkOrderStatus(returnDto.getWorkOrderNo(), returnDto.getSite())) { + throw new XJException("工单状态不允许发料"); + } + + //创建出库单记录 + List subList = new ArrayList<>(); + + TransCommonRequestDto transCommonRequestDto = new TransCommonRequestDto(); + transCommonRequestDto.setSite(returnDto.getSite()); + transCommonRequestDto.setTransTypeDb("PRUI"); + transCommonRequestDto.setTransType("PRUI"); + transCommonRequestDto.setRemark("生产直接退料-工单:" + returnDto.getWorkOrderNo()); + transCommonRequestDto.setStatus("C"); + transCommonRequestDto.setWorkOrderNo(returnDto.getWorkOrderNo()); + transCommonRequestDto.setWarehouseId(returnDto.getWarehouseId()); + transCommonRequestDto.setSourceNo(returnDto.getWorkOrderNo()); + + Double seqNo = 1.0; + // 处理每个选择的物料 + for (WorkOrderMaterialDto material : returnDto.getSelectedMaterials()) { + // 创建出库记录详情 + TransCommonSubDto subDto = new TransCommonSubDto(); + subDto.setItemNo(Double.valueOf(returnDto.getLineItemNo())); + subDto.setPartNo(returnDto.getComponentPartNo()); + subDto.setSubNo(material.getLabelCode()); + subDto.setBatchNo(material.getBatchNo()); + subDto.setWarehouseId(material.getWarehouseId()); + subDto.setLocationId(material.getLocationId()); + subDto.setTransQty(material.getIssueQty().toString()); + subDto.setDirection("+"); + subDto.setWdrNo(material.getWdrNo()); + subDto.setSqeNo(seqNo); + subList.add(subDto); + seqNo++; + } + transCommonRequestDto.setSubList(subList); + List in = transHeaderService.genTransAndChangeInventoryStock(transCommonRequestDto, "IN"); + + //前端打印新标签并跟新HandlingUnit的库位和长度 + BigDecimal issueQty = BigDecimal.ZERO; + List handlingUnits = new ArrayList<>(); + List unitIds = new ArrayList<>(); + for (WorkOrderMaterialDto material : returnDto.getSelectedMaterials()) { + HandlingUnit hu = new HandlingUnit(); + hu.setUnitId(material.getLabelCode()); + hu.setLocationId(material.getLocationId()); + hu.setQty(material.getIssueQty()); + hu.setHeight(material.getHeight() == null ? BigDecimal.ZERO : material.getHeight()); + handlingUnits.add(hu); + issueQty = issueQty.add(material.getIssueQty()); + unitIds.add(material.getLabelCode()); + } + productionReturnMapper.updateHandingUnit(handlingUnits); + + for (TransDetail unissue : in){ + UnissueShopOrderDto unissueShopOrderDto = new UnissueShopOrderDto(); + unissueShopOrderDto.setIfsOrderNo(transCommonRequestDto.getWorkOrderNo()); + unissueShopOrderDto.setIfsLineItemNo(returnDto.getLineItemNo()); + unissueShopOrderDto.setIfsReleaseNo(returnDto.getReleaseNo() == null ? "*" : returnDto.getReleaseNo()); + unissueShopOrderDto.setIfsSequenceNo(returnDto.getSequenceNo() == null ? "*" : returnDto.getSequenceNo()); + unissueShopOrderDto.setIfsSiteID(returnDto.getSite()); + unissueShopOrderDto.setIfsPartNo(unissue.getPartNo()); + unissueShopOrderDto.setIfsLocationNo(unissue.getLocationId()); + unissueShopOrderDto.setIfsLotBatchNo(unissue.getBatchNo()); + unissueShopOrderDto.setIfsWDRNo(unissue.getWdrNo()); + unissueShopOrderDto.setIfsSerialNo("*"); + unissueShopOrderDto.setIfsTransQty(unissue.getTransQty()); + unissueShopOrderDto.setIfsIssuedQty(returnDto.getIssueQty()); + unissueShopOrderDto.setIfsReversedQty(returnDto.getIfsReversedQty()); + unissueShopOrderDto.setIfsTransactionID(returnDto.getTransactionId()); + unissueShopOrderDto.setIfsAccountingID(returnDto.getAccountingId()); + unissueShopOrderDto.setIfsEngChgLevel("0"); + unissueShopOrderDto.setIfsActivitySequenceNo("0"); + unissueShopOrderDto.setIfsHandlingUnitID("0"); + ifsApiIssueAndReturnService.addShopOrderManualUnIssue(unissueShopOrderDto); + } + return unitIds; + } + /*------------------------------------------------PDA申请单退料----------------------------------------------------------*/ @Override public List getUnissueNotifyHeaderInfo(ProductionReturnDto dto){ @@ -184,7 +256,7 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { @Override @Transactional - public void productionReturnUnissueConfirm(DirectUnissueDto returnDto) { + public List productionReturnUnissueConfirm(DirectUnissueDto returnDto) throws Exception{ // 验证工单状态 if (!validateWorkOrderStatus(returnDto.getWorkOrderNo(), returnDto.getSite())) { throw new XJException("工单状态不允许发料"); @@ -240,6 +312,7 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { //前端打印新标签并跟新HandlingUnit的库位和长度 BigDecimal issueQty = BigDecimal.ZERO; List handlingUnits = new ArrayList<>(); + List unitIds = new ArrayList<>(); for (WorkOrderMaterialDto material : returnDto.getSelectedMaterials()) { HandlingUnit hu = new HandlingUnit(); hu.setUnitId(material.getLabelCode()); @@ -248,6 +321,7 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { hu.setHeight(material.getHeight() == null ? BigDecimal.ZERO : material.getHeight()); handlingUnits.add(hu); issueQty = issueQty.add(material.getIssueQty()); + unitIds.add(material.getLabelCode()); } productionReturnMapper.updateHandingUnit(handlingUnits); UnissueNotifyOrderMaterialList one = productionReturnMapper.getUnissueNotifyOrderMaterialListByOne(returnDto.getNotifyNo(), returnDto.getSite(), returnDto.getItemNo(), returnDto.getLineItemNo(), returnDto.getComponentPartNo()); @@ -276,5 +350,6 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { unissueShopOrderDto.setIfsHandlingUnitID("0"); ifsApiIssueAndReturnService.addShopOrderManualUnIssue(unissueShopOrderDto); } + return unitIds; } } diff --git a/src/main/resources/mapper/production/ProductionReturnMapper.xml b/src/main/resources/mapper/production/ProductionReturnMapper.xml index 8f57b48..876fa81 100644 --- a/src/main/resources/mapper/production/ProductionReturnMapper.xml +++ b/src/main/resources/mapper/production/ProductionReturnMapper.xml @@ -46,6 +46,10 @@ UPDATE handling_unit SET + reserve_flag = 'N', + reserve_order_ref1 = null, + reserve_order_ref2 = null, + reserve_order_ref3 = null, location_id = CASE unit_id WHEN #{hu.unitId} THEN #{hu.locationId}