package com.jeesite.modules.mes.erp; import com.jeesite.common.lang.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class KingdeeErpProperties { @Value("${erp.k3cloud.base-url:https://erp.anhuidayang.com:8800/k3cloud}") private String baseUrl; @Value("${erp.k3cloud.acct-id:672630265043d5}") private String acctId; @Value("${erp.k3cloud.username:}") private String username; @Value("${erp.k3cloud.password:}") private String password; @Value("${erp.k3cloud.org-number:100}") private String orgNumber; @Value("${erp.k3cloud.filter-current-org:false}") private boolean filterCurrentOrg; @Value("${erp.k3cloud.inventory-category-filter-enabled:false}") private boolean inventoryCategoryFilterEnabled; @Value("${erp.k3cloud.inventory-category-field:}") private String inventoryCategoryField; /** 生产订单可见物料编码(逗号分隔,替代存货类别过滤) */ @Value("${erp.k3cloud.production-order.material-numbers:}") private String productionOrderMaterialNumbers; @Value("${erp.k3cloud.lcid:2052}") private int lcid; /** 生产领料单单据类型编码,Apifox 验证后配置 */ @Value("${erp.k3cloud.pick-mtrl.bill-type:SCLLD01_SYS}") private String pickMtrlBillType; /** 库存状态编码(如「可用」) */ @Value("${erp.k3cloud.pick-mtrl.stock-status:KCZT01_SYS}") private String pickMtrlStockStatus; @Value("${erp.k3cloud.pick-mtrl.owner-type:BD_OwnerOrg}") private String pickMtrlOwnerType; @Value("${erp.k3cloud.pick-mtrl.keeper-type:BD_KeeperOrg}") private String pickMtrlKeeperType; @Value("${erp.k3cloud.pick-mtrl.link-rule:PRD_PPBOM2PICKMTRL_NORMAL}") private String pickMtrlLinkRule; @Value("${erp.k3cloud.pick-mtrl.link-table:T_PRD_PPBOMENTRY}") private String pickMtrlLinkTable; /** MES 线边库位 ID(优先);未配置则按 mes-kw-title 查找或自动创建 */ @Value("${erp.k3cloud.pick-mtrl.mes-kw-id:}") private String pickMtrlMesKwId; @Value("${erp.k3cloud.pick-mtrl.mes-kw-title:ERP线边库}") private String pickMtrlMesKwTitle; @Value("${erp.k3cloud.pick-mtrl.mes-ck-name:ERP线边仓}") private String pickMtrlMesCkName; /** 标准采购订单单据类型编码 */ @Value("${erp.k3cloud.purchase-order.bill-type:CGDD01_SYS}") private String purchaseOrderBillType; /** 标准采购入库单单据类型编码 */ @Value("${erp.k3cloud.in-stock.bill-type:RKD01_SYS}") private String inStockBillType; @Value("${erp.k3cloud.in-stock.business-type:CG}") private String inStockBusinessType; @Value("${erp.k3cloud.in-stock.stock-number:1100105}") private String inStockStockNumber; @Value("${erp.k3cloud.in-stock.stock-status:KCZT01_SYS}") private String inStockStockStatus; @Value("${erp.k3cloud.in-stock.owner-type:BD_OwnerOrg}") private String inStockOwnerType; @Value("${erp.k3cloud.in-stock.keeper-type:BD_KeeperOrg}") private String inStockKeeperType; @Value("${erp.k3cloud.in-stock.link-rule:PUR_PurchaseOrder-STK_InStock}") private String inStockLinkRule; @Value("${erp.k3cloud.in-stock.link-table:t_PUR_POOrderEntry}") private String inStockLinkTable; @Value("${erp.k3cloud.in-stock.settle-currency:PRE001}") private String inStockSettleCurrency; @Value("${erp.k3cloud.in-stock.price-time-point:1}") private String inStockPriceTimePoint; /** 五金库仓位:FStockLocId.F100004 */ @Value("${erp.k3cloud.in-stock.stock-loc-key:F100004}") private String inStockStockLocKey; @Value("${erp.k3cloud.in-stock.stock-loc-number:}") private String inStockStockLocNumber; /** 直接调拨单 STK_TransferDirect 单据类型 */ @Value("${erp.k3cloud.transfer-direct.bill-type:ZJDB01_SYS}") private String transferDirectBillType; /** 直接调拨单固定物料范围(HEV / 115) */ @Value("${erp.k3cloud.transfer-direct.material-numbers:8.10.HEV.10.047696,8.35.115.10.5003146600021}") private String transferDirectMaterialNumbers; @Value("${erp.k3cloud.transfer-direct.transfer-biz-type:InnerOrgTransfer}") private String transferDirectBizType; @Value("${erp.k3cloud.transfer-direct.transfer-direct-type:GENERAL}") private String transferDirectDirection; /** 调拨类别:3=外发调拨 */ @Value("${erp.k3cloud.transfer-direct.transfer-category:3}") private String transferDirectCategory; @Value("${erp.k3cloud.transfer-direct.bill-sign-status:A}") private String transferDirectBillSignStatus; @Value("${erp.k3cloud.transfer-direct.stock-status:KCZT01_SYS}") private String transferDirectStockStatus; @Value("${erp.k3cloud.transfer-direct.owner-type:BD_OwnerOrg}") private String transferDirectOwnerType; @Value("${erp.k3cloud.transfer-direct.keeper-type:BD_KeeperOrg}") private String transferDirectKeeperType; @Value("${erp.k3cloud.transfer-direct.default-src-stock-number:}") private String transferDirectDefaultSrcStockNumber; @Value("${erp.k3cloud.transfer-direct.default-dest-stock-number:}") private String transferDirectDefaultDestStockNumber; /** 生产入库单 PRD_INSTOCK 固定物料范围(HEV / 115,与直接调拨单一致) */ @Value("${erp.k3cloud.prd-in-stock.material-numbers:8.10.HEV.10.047696,8.35.115.10.5003146600021}") private String prdInStockMaterialNumbers; @Value("${erp.k3cloud.prd-in-stock.bill-type:SCRKD01_SYS}") private String prdInStockBillType; @Value("${erp.k3cloud.prd-in-stock.in-stock-type:1}") private String prdInStockInStockType; @Value("${erp.k3cloud.prd-in-stock.stock-status:KCZT01_SYS}") private String prdInStockStockStatus; @Value("${erp.k3cloud.prd-in-stock.owner-type:BD_OwnerOrg}") private String prdInStockOwnerType; @Value("${erp.k3cloud.prd-in-stock.keeper-type:BD_KeeperOrg}") private String prdInStockKeeperType; @Value("${erp.k3cloud.prd-in-stock.default-stock-number:}") private String prdInStockDefaultStockNumber; public String getBaseUrl() { if (baseUrl.endsWith("/")) { return baseUrl.substring(0, baseUrl.length() - 1); } return baseUrl; } public String getAcctId() { return acctId; } public String getUsername() { return username; } public String getPassword() { return password; } public String getOrgNumber() { return orgNumber; } public boolean isFilterCurrentOrg() { return filterCurrentOrg; } public boolean isInventoryCategoryFilterEnabled() { return inventoryCategoryFilterEnabled; } public String getInventoryCategoryField() { return inventoryCategoryField; } /** * 生产订单列表/选单可见物料编码;未配置时与生产入库物料范围一致。 */ public java.util.List getProductionOrderMaterialNumbers() { java.util.List configured = parseMaterialNumbers(productionOrderMaterialNumbers); if (!configured.isEmpty()) { return configured; } return getPrdInStockMaterialNumbers(); } public boolean isAllowedProductionOrderMaterial(String materialNumber) { if (StringUtils.isBlank(materialNumber)) { return false; } String trimmed = materialNumber.trim(); for (String allowed : getProductionOrderMaterialNumbers()) { if (trimmed.equals(allowed)) { return true; } } return false; } public boolean isProductionOrderMaterialFilterEnabled() { return !getProductionOrderMaterialNumbers().isEmpty(); } public int getLcid() { return lcid; } public String getPickMtrlBillType() { return pickMtrlBillType; } public String getPickMtrlStockStatus() { return pickMtrlStockStatus; } public String getPickMtrlOwnerType() { return pickMtrlOwnerType; } public String getPickMtrlKeeperType() { return pickMtrlKeeperType; } public String getPickMtrlLinkRule() { return pickMtrlLinkRule; } public String getPickMtrlLinkTable() { return pickMtrlLinkTable; } public String getPickMtrlMesKwId() { return pickMtrlMesKwId; } public String getPickMtrlMesKwTitle() { return pickMtrlMesKwTitle; } public String getPickMtrlMesCkName() { return pickMtrlMesCkName; } public String getPurchaseOrderBillType() { return purchaseOrderBillType; } public String getInStockBillType() { return inStockBillType; } public String getInStockBusinessType() { return inStockBusinessType; } public String getInStockStockNumber() { return inStockStockNumber; } public String getInStockStockStatus() { return inStockStockStatus; } public String getInStockOwnerType() { return inStockOwnerType; } public String getInStockKeeperType() { return inStockKeeperType; } public String getInStockLinkRule() { return inStockLinkRule; } public String getInStockLinkTable() { return inStockLinkTable; } public String getInStockSettleCurrency() { return inStockSettleCurrency; } public String getInStockPriceTimePoint() { return inStockPriceTimePoint; } public String getInStockStockLocKey() { return inStockStockLocKey; } public String getInStockStockLocNumber() { return inStockStockLocNumber; } public String getTransferDirectBillType() { return transferDirectBillType; } public java.util.List getTransferDirectMaterialNumbers() { return parseMaterialNumbers(transferDirectMaterialNumbers); } public boolean isAllowedTransferDirectMaterial(String materialNumber) { if (StringUtils.isBlank(materialNumber)) { return false; } String trimmed = materialNumber.trim(); for (String allowed : getTransferDirectMaterialNumbers()) { if (trimmed.equals(allowed)) { return true; } } return false; } public String getTransferDirectBizType() { return transferDirectBizType; } public String getTransferDirectDirection() { return transferDirectDirection; } public String getTransferDirectCategory() { return transferDirectCategory; } public String getTransferDirectBillSignStatus() { return transferDirectBillSignStatus; } public String getTransferDirectStockStatus() { return transferDirectStockStatus; } public String getTransferDirectOwnerType() { return transferDirectOwnerType; } public String getTransferDirectKeeperType() { return transferDirectKeeperType; } public String getTransferDirectDefaultSrcStockNumber() { return transferDirectDefaultSrcStockNumber; } public String getTransferDirectDefaultDestStockNumber() { return transferDirectDefaultDestStockNumber; } public java.util.List getPrdInStockMaterialNumbers() { return parseMaterialNumbers(prdInStockMaterialNumbers); } public boolean isAllowedPrdInStockMaterial(String materialNumber) { if (StringUtils.isBlank(materialNumber)) { return false; } String trimmed = materialNumber.trim(); for (String allowed : getPrdInStockMaterialNumbers()) { if (trimmed.equals(allowed)) { return true; } } return false; } public String getPrdInStockBillType() { return prdInStockBillType; } public String getPrdInStockInStockType() { return prdInStockInStockType; } public String getPrdInStockStockStatus() { return prdInStockStockStatus; } public String getPrdInStockOwnerType() { return prdInStockOwnerType; } public String getPrdInStockKeeperType() { return prdInStockKeeperType; } public String getPrdInStockDefaultStockNumber() { return prdInStockDefaultStockNumber; } private java.util.List parseMaterialNumbers(String materialNumbers) { java.util.List list = new java.util.ArrayList<>(); if (StringUtils.isBlank(materialNumbers)) { return list; } for (String part : materialNumbers.split(",")) { if (StringUtils.isNotBlank(part)) { list.add(part.trim()); } } return list; } /** * 判断所选仓库是否需要填写仓位(当前按配置仓库 + 仓位维度键判断)。 */ public boolean requiresStockLocation(String stockNumber) { if (StringUtils.isBlank(stockNumber) || StringUtils.isBlank(inStockStockLocKey)) { return false; } return StringUtils.isNotBlank(inStockStockNumber) && inStockStockNumber.trim().equals(stockNumber.trim()); } /** * 仓位维度在 Save 接口中的字段名(F100004 → FSTOCKLOCID__FF100004)。 */ public String toStockLocSaveKey(String locKey) { String key = StringUtils.isBlank(locKey) ? inStockStockLocKey : locKey.trim(); if (StringUtils.isBlank(key)) { return "FSTOCKLOCID__FF100004"; } if (key.startsWith("FSTOCKLOCID__")) { return key; } if (key.startsWith("F")) { return "FSTOCKLOCID__F" + key; } return "FSTOCKLOCID__FF" + key; } }