diff --git a/src/main/java/com/gaotao/modules/api/entity/issueAndReturnVo/AnInventoryPartInStockVo.java b/src/main/java/com/gaotao/modules/api/entity/issueAndReturnVo/AnInventoryPartInStockVo.java new file mode 100644 index 00000000..75534b0c --- /dev/null +++ b/src/main/java/com/gaotao/modules/api/entity/issueAndReturnVo/AnInventoryPartInStockVo.java @@ -0,0 +1,130 @@ +package com.gaotao.modules.api.entity.issueAndReturnVo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class AnInventoryPartInStockVo { + @JsonProperty("ActivitySeq") + private String activitySeq; + + @JsonProperty("AvailabilityControlId") + private String availabilityControlId; + + @JsonProperty("AvgUnitTransitCost") + private String avgUnitTransitCost; + + @JsonProperty("BayNo") + private String bayNo; + + @JsonProperty("BinNo") + private String binNo; + + @JsonProperty("CatchQtyInTransit") + private String catchQtyInTransit; + + @JsonProperty("CatchQtyOnhand") + private String catchQtyOnhand; + + @JsonProperty("ConditionCode") + private String conditionCode; + + @JsonProperty("ConfigurationId") + private String configurationId; + + @JsonProperty("Contract") + private String contract; + + @JsonProperty("CountVariance") + private String countVariance; + + @JsonProperty("EngChgLevel") + private String engChgLevel; + + @JsonProperty("ExpirationDate") + private String expirationDate; + + @JsonProperty("FreezeFlag") + private String freezeFlag; + + @JsonProperty("FreezeFlagDb") + private String freezeFlagDb; + + @JsonProperty("HandlingUnitId") + private String handlingUnitId; + + @JsonProperty("LastActivityDate") + private String lastActivityDate; + + @JsonProperty("LastCountDate") + private String lastCountDate; + + @JsonProperty("LocationNo") + private String locationNo; + + @JsonProperty("LocationType") + private String locationType; + + @JsonProperty("LocationTypeDb") + private String locationTypeDb; + + @JsonProperty("LotBatchNo") + private String lotBatchNo; + + @JsonProperty("Objid") + private String objid; + + @JsonProperty("Objkey") + private String objkey; + + @JsonProperty("Objversion") + private String objversion; + + @JsonProperty("OwningCustomerNo") + private String owningCustomerNo; + + @JsonProperty("OwningVendorNo") + private String owningVendorNo; + + @JsonProperty("PartNo") + private String partNo; + + @JsonProperty("PartOwnership") + private String partOwnership; + + @JsonProperty("PartOwnershipDb") + private String partOwnershipDb; + + @JsonProperty("ProjectId") + private String projectId; + + @JsonProperty("QtyInTransit") + private String qtyInTransit; + + @JsonProperty("QtyOnhand") + private String qtyOnhand; + + @JsonProperty("QtyReserved") + private String qtyReserved; + + @JsonProperty("ReceiptDate") + private String receiptDate; + + @JsonProperty("RowNo") + private String rowNo; + + @JsonProperty("SerialNo") + private String serialNo; + + @JsonProperty("Source") + private String source; + + @JsonProperty("TierNo") + private String tierNo; + + @JsonProperty("WaivDevRejNo") + private String waivDevRejNo; + + @JsonProperty("Warehouse") + private String warehouse; +} diff --git a/src/main/java/com/gaotao/modules/api/service/IfsApiIssueAndReturnService.java b/src/main/java/com/gaotao/modules/api/service/IfsApiIssueAndReturnService.java index 16760ee3..88d243d9 100644 --- a/src/main/java/com/gaotao/modules/api/service/IfsApiIssueAndReturnService.java +++ b/src/main/java/com/gaotao/modules/api/service/IfsApiIssueAndReturnService.java @@ -75,4 +75,6 @@ public interface IfsApiIssueAndReturnService { String purchaseOrderMoveToStockOneLocation(PurchaseOrderMoveToStockDto purchaseOrderMoveToStockDto); List getInventoryPartInStock(String site); + + List getAnInventoryPartInStock(String site,String partNo); } 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 260b2f0c..025e7c22 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 @@ -776,4 +776,26 @@ public class IfsApiIssueAndReturnServiceImpl implements IfsApiIssueAndReturnServ } } + @Override + public List getAnInventoryPartInStock(String site,String partNo) { + try { + Map params = Map.of( + "ifsDBName", ifsDBName, + "domainUserID", domainUserID, + "ifsSiteID", site, + "ifsPartNo",partNo + ); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonBody = objectMapper.writeValueAsString(params); + String ifsResponse = HttpUtils.doGetWithBody(ifsUrl + "AnInventoryPartInStock", jsonBody, null); + ObjectMapper mapper = new ObjectMapper(); + List inventoryPartInStockVos = mapper.readValue(ifsResponse, new TypeReference>() { + }); + + return inventoryPartInStockVos; + }catch (Exception e) { + e.printStackTrace(); + throw new XJException("获取IFS库存在库信息失败"); + } + } } 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 0f7c9378..e2b3b5d9 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 @@ -1,5 +1,6 @@ package com.gaotao.modules.production.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.core.type.TypeReference; @@ -26,6 +27,7 @@ import com.gaotao.modules.trans.service.Consts; import com.gaotao.modules.trans.service.TransHeaderService; import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.handlingunit.service.HandlingUnitService; +import com.gaotao.modules.trans.service.ValidateInventoryPartInStockService; import com.gaotao.modules.warehouse.service.InventoryStockService; import io.jsonwebtoken.lang.Maps; import lombok.extern.slf4j.Slf4j; @@ -59,10 +61,9 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { @Autowired private IfsApiIssueAndReturnService ifsApiIssueAndReturnService; - @Value("${custom.ifs-url}") - private String ifsUrl; - private static final String ifsDBName="IFST"; - private static final String domainUserID="CCL_WMS"; + @Autowired + private ValidateInventoryPartInStockService validateInventoryPartInStockService; + @Override public IPage getIssureNotifyByNo(SOIssueNotifyHeaderData data) { @@ -206,6 +207,10 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { issueList.add(productionIssue);*/ seqNo++; } + String s1 = validateInventoryPartInStockService.validateInventoryPartInStock(directIssueDto.getComponentPartNo(), directIssueDto.getSite(), subList); + if(!"200".equals(s1)){ + throw new XJException("物料"+directIssueDto.getComponentPartNo()+"已被预留或库存不足,无法发料"); + } transCommonRequestDto.setSubList(subList); List out = transHeaderService.genTransAndChangeInventoryStock(transCommonRequestDto, "OUT"); @@ -504,6 +509,10 @@ public class ProductionIssueServiceImpl implements ProductionIssueService { subList.add(subDto); seqNo++; } + String s1 = validateInventoryPartInStockService.validateInventoryPartInStock(directIssueDto.getComponentPartNo(), directIssueDto.getSite(), subList); + if(!"200".equals(s1)){ + throw new XJException("物料"+directIssueDto.getComponentPartNo()+"已被预留或库存不足,无法发料"); + } transCommonRequestDto.setSubList(subList); List out = transHeaderService.genTransAndChangeInventoryStock(transCommonRequestDto, "OUT"); diff --git a/src/main/java/com/gaotao/modules/trans/service/ValidateInventoryPartInStockService.java b/src/main/java/com/gaotao/modules/trans/service/ValidateInventoryPartInStockService.java index 10ba725d..3695b8c1 100644 --- a/src/main/java/com/gaotao/modules/trans/service/ValidateInventoryPartInStockService.java +++ b/src/main/java/com/gaotao/modules/trans/service/ValidateInventoryPartInStockService.java @@ -1,4 +1,11 @@ package com.gaotao.modules.trans.service; +import com.gaotao.modules.trans.entity.TransCommonSubDto; +import com.gaotao.modules.trans.entity.TransDetailSub; + +import java.util.List; + public interface ValidateInventoryPartInStockService { + + String validateInventoryPartInStock(String partNo,String site,List dto); } diff --git a/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java b/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java index e2112470..0033404e 100644 --- a/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java +++ b/src/main/java/com/gaotao/modules/trans/service/impl/ValidateInventoryPartInStockServiceImpl.java @@ -1,12 +1,89 @@ package com.gaotao.modules.trans.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gaotao.modules.api.entity.issueAndReturnVo.AnInventoryPartInStockVo; +import com.gaotao.modules.api.entity.issueAndReturnVo.InventoryPartInStockVo; +import com.gaotao.modules.api.service.IfsApiIssueAndReturnService; +import com.gaotao.modules.handlingunit.entity.HandlingUnit; +import com.gaotao.modules.trans.entity.TransCommonSubDto; +import com.gaotao.modules.trans.entity.TransDetail; +import com.gaotao.modules.trans.entity.TransDetailSub; import com.gaotao.modules.trans.service.ValidateInventoryPartInStockService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service public class ValidateInventoryPartInStockServiceImpl implements ValidateInventoryPartInStockService { - public String ValidateInventoryPartInStock(){ + @Autowired + private IfsApiIssueAndReturnService ifsApiIssueAndReturnService; + + /** + * 校验物料库存 + * @param partNo + * @param site + * @param dto + * @return + */ + @Override + public String validateInventoryPartInStock(String partNo,String site,List dto){ + + List detailSubs = new ArrayList<>(); + //保存sub + for (TransCommonSubDto subDto:dto){ + TransDetailSub detailSub = new TransDetailSub(); + detailSub.setSite(site); + detailSub.setItemNo(subDto.getItemNo()); + detailSub.setSubNo(subDto.getSubNo()); + detailSub.setSubQty(Double.valueOf(subDto.getTransQty())); + detailSub.setDirection(subDto.getDirection()); + detailSub.setPartNo(subDto.getPartNo()); + detailSub.setBatchNo(subDto.getBatchNo()); + detailSub.setLocationId(subDto.getLocationId()); + detailSub.setOrderRef3(subDto.getWdrNo()); + detailSub.setOrderRef4(subDto.getWarehouseId()); + detailSub.setSeqNo(subDto.getSqeNo()); + + detailSubs.add(detailSub); + } + + Map, Double> collect = detailSubs.stream().collect(Collectors.groupingBy(item -> Arrays.asList(item.getSite(), item.getPartNo(), item.getBatchNo(), item.getLocationId(), item.getOrderRef3(),item.getOrderRef4()), Collectors.summingDouble(TransDetailSub::getSubQty))); + + List inventoryPartInStock = ifsApiIssueAndReturnService.getAnInventoryPartInStock(site,partNo); + if(inventoryPartInStock==null || inventoryPartInStock.size()==0){ + return "400"; + } + + for (Map.Entry, Double> entry : collect.entrySet()) { + List key = entry.getKey(); + Double totalQty = entry.getValue(); + boolean flag = false; + for(AnInventoryPartInStockVo vo:inventoryPartInStock){ + if(vo.getContract().equals(key.get(0)) + && vo.getPartNo().equals(key.get(1)) + && vo.getLotBatchNo().equals(key.get(2)) + && vo.getLocationNo().equals(key.get(3)) + && vo.getWaivDevRejNo().equals(key.get(4)) + && vo.getWarehouse().equals(key.get(5)) + ){ + if(!"N".equals(vo.getFreezeFlagDb()) || (new BigDecimal(vo.getQtyOnhand()).subtract(new BigDecimal(vo.getQtyReserved())).compareTo(new BigDecimal(totalQty)))< 0){ + flag = true; + break; + } + + } + } + if(flag){ + return "400"; + } + } return "200"; } }