From 631a293a9232b9abdc07fd6bd7f2d6ac5994ccd7 Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Sun, 28 Sep 2025 22:26:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/IfsApiIssueAndReturnServiceImpl.java | 43 ++++++++++-- .../dao/ProductionReturnMapper.java | 2 + .../service/ProductionIssueService.java | 4 +- .../impl/ProductionIssueServiceImpl.java | 65 +++++++------------ .../impl/ProductionReturnServiceImpl.java | 10 +++ .../production/ProductionReturnMapper.xml | 10 +++ 6 files changed, 83 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/gaotao/modules/api/service/impl/IfsApiIssueAndReturnServiceImpl.java b/src/main/java/com/gaotao/modules/api/service/impl/IfsApiIssueAndReturnServiceImpl.java index c8aaf082..50c72827 100644 --- a/src/main/java/com/gaotao/modules/api/service/impl/IfsApiIssueAndReturnServiceImpl.java +++ b/src/main/java/com/gaotao/modules/api/service/impl/IfsApiIssueAndReturnServiceImpl.java @@ -15,6 +15,9 @@ import com.gaotao.modules.notify.entity.vo.ShopOrderVo; import com.gaotao.modules.other.entity.OtherTransactionIfsDto; import com.gaotao.modules.production.entity.vo.IssueForShopOrderVo; import jakarta.transaction.Transactional; +import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -22,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +@Slf4j @Service public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnService { @@ -32,6 +36,8 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ @Value("${custom.ifs-domainUserID}") private String domainUserID; + private Logger logger = LogManager.getLogger(getClass()); + @Override public List getInventoryPart(String partNo, String site){ try{ @@ -154,7 +160,12 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ ObjectMapper objectMapper = new ObjectMapper(); String jsonBody = objectMapper.writeValueAsString(params); String ifsResponse = HttpUtils.doPost(ifsUrl+"ShopOrderManualIssue",jsonBody,null); - + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)){ + logger.info("IFS发料成功"); + }else{ + logger.info("IFS发料成功"+ifsResponse); + throw new Exception("IFS发料失败"); + } return ifsResponse; }catch (Exception e){ e.printStackTrace(); @@ -190,11 +201,16 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ String jsonBody = objectMapper.writeValueAsString(params); System.out.println(jsonBody); String ifsResponse = HttpUtils.doPost(ifsUrl+"ShopOrderManualUnIssue",jsonBody,null); - + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)){ + logger.info("IFS退料成功"); + }else{ + logger.info("IFS退料失败"+ifsResponse); + throw new Exception("IFS退料失败"); + } return ifsResponse; }catch (Exception e){ e.printStackTrace(); - throw new XJException("领料出库同步IFS失败"); + throw new XJException("退料同步IFS失败"); } } @@ -264,7 +280,12 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ ObjectMapper objectMapper = new ObjectMapper(); String jsonBody = objectMapper.writeValueAsString(params); String ifsResponse = HttpUtils.doPost(ifsUrl+"MaterialRequisitionReserve",jsonBody,null); - + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)){ + logger.info("MR预留数量成功"); + }else{ + logger.info("MR预留数量失败"+ifsResponse); + throw new Exception("MR预留数量失败"); + } return ifsResponse; }catch (Exception e){ e.printStackTrace(); @@ -295,7 +316,12 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ ObjectMapper objectMapper = new ObjectMapper(); String jsonBody = objectMapper.writeValueAsString(params); String ifsResponse = HttpUtils.doPost(ifsUrl+"MaterialRequisitionIssue",jsonBody,null); - + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)){ + logger.info("MR发料成功"); + }else{ + logger.info("MR发料失败"+ifsResponse); + throw new Exception("MR发料失败"); + } return ifsResponse; }catch (Exception e){ e.printStackTrace(); @@ -415,7 +441,12 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ ObjectMapper objectMapper = new ObjectMapper(); String jsonBody = objectMapper.writeValueAsString(params); String ifsResponse = HttpUtils.doPost(ifsUrl+"MaterialRequisitionUnIssue",jsonBody,null); - + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)){ + logger.info("MR退料成功"); + }else{ + logger.info("MR退料失败"+ifsResponse); + throw new Exception("MR退料失败"); + } return ifsResponse; }catch (Exception e){ e.printStackTrace(); diff --git a/src/main/java/com/gaotao/modules/production/dao/ProductionReturnMapper.java b/src/main/java/com/gaotao/modules/production/dao/ProductionReturnMapper.java index 43c62061..8772bb0f 100644 --- a/src/main/java/com/gaotao/modules/production/dao/ProductionReturnMapper.java +++ b/src/main/java/com/gaotao/modules/production/dao/ProductionReturnMapper.java @@ -19,4 +19,6 @@ public interface ProductionReturnMapper { List getUnissueNotifyHeaderOrderMaterialList(@Param("notifyNo") String notifyNo,@Param("site") String site,@Param("itemNo") BigDecimal itemNo); HandlingUnit scanMaterialLabel(@Param("labelCode") String labelCode, @Param("site") String site,@Param("batchNo") String batchNo,@Param("partNo") String partNo); + + void updateHandingUnit(List handlingUnits); } diff --git a/src/main/java/com/gaotao/modules/production/service/ProductionIssueService.java b/src/main/java/com/gaotao/modules/production/service/ProductionIssueService.java index 4b354cc5..b967e2a7 100644 --- a/src/main/java/com/gaotao/modules/production/service/ProductionIssueService.java +++ b/src/main/java/com/gaotao/modules/production/service/ProductionIssueService.java @@ -24,12 +24,12 @@ public interface ProductionIssueService { /** * 获取工单BOM物料列表(直接发料) */ - List getWorkOrderMaterials(String workOrderNo, String site); + List getWorkOrderMaterials(String workOrderNo, String site)throws Exception; /** * 直接发料 */ - void directIssue(DirectIssueDto directIssueDto); + void directIssue(DirectIssueDto directIssueDto)throws Exception; /** * 获取申请单物料列表(基于申请单发料) diff --git a/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueServiceImpl.java b/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueServiceImpl.java index 1bc23064..a7b45092 100644 --- a/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueServiceImpl.java +++ b/src/main/java/com/gaotao/modules/production/service/impl/ProductionIssueServiceImpl.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.gaotao.common.exception.XJException; import com.gaotao.common.utils.HttpUtils; import com.gaotao.modules.api.entity.issueAndReturnVo.IssueShopOrderDto; +import com.gaotao.modules.api.entity.issueAndReturnVo.MaterialRequisitionVo; import com.gaotao.modules.api.service.IfsApiIssueAndReturnService; import com.gaotao.modules.handlingunit.entity.HandlingUnit; import com.gaotao.modules.notify.entity.SOIssueNotifyHeader; @@ -26,6 +27,7 @@ import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.handlingunit.service.HandlingUnitService; import com.gaotao.modules.warehouse.service.InventoryStockService; import io.jsonwebtoken.lang.Maps; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -38,6 +40,7 @@ import java.util.stream.Collectors; /** * 生产发料服务实现 */ +@Slf4j @Service public class ProductionIssueServiceImpl implements ProductionIssueService { @@ -81,57 +84,29 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { @Override public List getWorkOrderInfo(String workOrderNo, String site) throws Exception{ - Map params = Map.of( - "ifsDBName", ifsDBName, - "domainUserID", domainUserID, - "ifsSiteID", site, - "ifsOrderNo", workOrderNo, - "ifsReleaseNo", "*", - "ifsSequenceNo", "*" - ); - ObjectMapper objectMapper = new ObjectMapper(); - String jsonBody = objectMapper.writeValueAsString(params); - String ifsResponse = HttpUtils.doGetWithBody(ifsUrl+"ShopOrder",jsonBody,null); - ObjectMapper mapper = new ObjectMapper(); - List shopOrderVos = mapper.readValue(ifsResponse, new TypeReference>() { - }); - + List orderInfo = ifsApiIssueAndReturnService.getWorkOrderInfo(workOrderNo, site, "*", "*"); + Set allowedStatuses = new HashSet<>(Arrays.asList("Released", "Reserved", "Started")); + List shopOrderVos = orderInfo.stream().filter(item -> allowedStatuses.contains(item.getObjstate())).collect(Collectors.toList()); return shopOrderVos; } @Override - public List getWorkOrderMaterials(String workOrderNo, String site){ + public List getWorkOrderMaterials(String workOrderNo, String site)throws Exception{ // 验证工单状态 if (!validateWorkOrderStatus(workOrderNo, site)) { throw new XJException("工单状态不允许发料"); } - try{ - Map params = Map.of( - "ifsDBName", ifsDBName, - "domainUserID", domainUserID, - "ifsSiteID", site, - "ifsOrderNo", workOrderNo, - "ifsReleaseNo", "*", - "ifsSequenceNo", "*" - ); - ObjectMapper objectMapper = new ObjectMapper(); - String jsonBody = objectMapper.writeValueAsString(params); - String ifsResponse = HttpUtils.doGetWithBody(ifsUrl+"ShopOrderMaterial",jsonBody,null); - ObjectMapper mapper = new ObjectMapper(); - List materialVos = mapper.readValue(ifsResponse, new TypeReference>() { - }); - List shopOrderMaterialVos = materialVos.stream().filter(m -> "Reserve And Backflush".equals(m.getReserveIssueMethod())).collect(Collectors.toList()); - - return shopOrderMaterialVos; - }catch (Exception e){ - throw new XJException("获取工单BOM物料列表失败: " + e.getMessage()); - } + + List materialVos = ifsApiIssueAndReturnService.getShopOrderMaterial(workOrderNo, site, "*", "*"); + List shopOrderMaterialVos = materialVos.stream().filter(m -> "Reserve And Backflush".equals(m.getReserveIssueMethod())).collect(Collectors.toList()); + + return shopOrderMaterialVos; } @Override @Transactional - public void directIssue(DirectIssueDto directIssueDto) { + public void directIssue(DirectIssueDto directIssueDto) throws Exception{ // 验证工单状态 if (!validateWorkOrderStatus(directIssueDto.getWorkOrderNo(), directIssueDto.getSite())) { throw new XJException("工单状态不允许发料"); @@ -157,6 +132,7 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { transCommonRequestDto.setWorkOrderNo(directIssueDto.getWorkOrderNo()); transCommonRequestDto.setWarehouseId(directIssueDto.getWarehouseId()); + Double seqNo = 1.0; // 处理每个选择的物料 for (WorkOrderMaterialDto material : directIssueDto.getSelectedMaterials()) { // 验证物料匹配 @@ -182,7 +158,8 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { subDto.setLocationId(material.getLocationId()); subDto.setTransQty(material.getIssueQty().toString()); subDto.setDirection("-"); - subDto.setWdrNo(material.getWdrNo()); + subDto.setWdrNo(material.getWdrNo() == null?"*":material.getWdrNo()); + subDto.setSqeNo(seqNo); subList.add(subDto); /*TransDetailDto transDetailDto = new TransDetailDto(); @@ -226,6 +203,7 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { productionIssue.setCreatedDate(new Date()); productionIssue.setIfsStatus("PENDING"); issueList.add(productionIssue);*/ + seqNo++; } transCommonRequestDto.setSubList(subList); List out = transHeaderService.genTransAndChangeInventoryStock(transCommonRequestDto, "OUT"); @@ -244,11 +222,12 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { issueShopOrderDto.setIfsWDRNo(issue.getWdrNo()); issueShopOrderDto.setIfsSerialNo("*"); issueShopOrderDto.setIfsTransQty(issue.getTransQty()); - ifsApiIssueAndReturnService.addShopOrderManualIssue(issueShopOrderDto); + String s = ifsApiIssueAndReturnService.addShopOrderManualIssue(issueShopOrderDto); + log.info("IFS发料错误",s); + if (!"IFSUpdated".equals(s)){ + throw new Exception("IFS发料失败"); + } } - - //TODO 调用打印接口 - } @Override 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 1f3d7fdc..704d59e5 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 @@ -238,5 +238,15 @@ public class ProductionReturnServiceImpl implements ProductionReturnService { unissueShopOrderDto.setIfsHandlingUnitID("0"); ifsApiIssueAndReturnService.addShopOrderManualUnIssue(unissueShopOrderDto); } + //前端打印新标签并跟新HandlingUnit的库位和长度 + List handlingUnits = new ArrayList<>(); + for (WorkOrderMaterialDto material : returnDto.getSelectedMaterials()) { + HandlingUnit hu = new HandlingUnit(); + hu.setUnitId(material.getLabelCode()); + hu.setLocationId(material.getLocationId()); + hu.setQty(material.getIssueQty()); + handlingUnits.add(hu); + } + productionReturnMapper.updateHandingUnit(handlingUnits); } } diff --git a/src/main/resources/mapper/production/ProductionReturnMapper.xml b/src/main/resources/mapper/production/ProductionReturnMapper.xml index d48ec4a9..9951cea3 100644 --- a/src/main/resources/mapper/production/ProductionReturnMapper.xml +++ b/src/main/resources/mapper/production/ProductionReturnMapper.xml @@ -35,4 +35,14 @@ from handling_unit a where a.site=#{site} and a.unit_id=#{labelCode} and a.in_stock_flag='N' and a.batch_no = #{batchNo} and a.part_no = #{partNo} + + + UPDATE handling_unit + SET + location_id = #{hu.locationId}, + qty = #{hu.qty}, + modified_date = GETDATE() + WHERE unit_id = #{hu.unitId} + +