KingdeeErpProperties.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. package com.jeesite.modules.mes.erp;
  2. import com.jeesite.common.lang.StringUtils;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class KingdeeErpProperties {
  7. @Value("${erp.k3cloud.base-url:https://erp.anhuidayang.com:8800/k3cloud}")
  8. private String baseUrl;
  9. @Value("${erp.k3cloud.acct-id:672630265043d5}")
  10. private String acctId;
  11. @Value("${erp.k3cloud.username:}")
  12. private String username;
  13. @Value("${erp.k3cloud.password:}")
  14. private String password;
  15. @Value("${erp.k3cloud.org-number:100}")
  16. private String orgNumber;
  17. @Value("${erp.k3cloud.filter-current-org:false}")
  18. private boolean filterCurrentOrg;
  19. @Value("${erp.k3cloud.inventory-category-filter-enabled:false}")
  20. private boolean inventoryCategoryFilterEnabled;
  21. @Value("${erp.k3cloud.inventory-category-field:}")
  22. private String inventoryCategoryField;
  23. /** 生产订单可见物料编码(逗号分隔,替代存货类别过滤) */
  24. @Value("${erp.k3cloud.production-order.material-numbers:}")
  25. private String productionOrderMaterialNumbers;
  26. @Value("${erp.k3cloud.lcid:2052}")
  27. private int lcid;
  28. /** 生产领料单单据类型编码,Apifox 验证后配置 */
  29. @Value("${erp.k3cloud.pick-mtrl.bill-type:SCLLD01_SYS}")
  30. private String pickMtrlBillType;
  31. /** 库存状态编码(如「可用」) */
  32. @Value("${erp.k3cloud.pick-mtrl.stock-status:KCZT01_SYS}")
  33. private String pickMtrlStockStatus;
  34. @Value("${erp.k3cloud.pick-mtrl.owner-type:BD_OwnerOrg}")
  35. private String pickMtrlOwnerType;
  36. @Value("${erp.k3cloud.pick-mtrl.keeper-type:BD_KeeperOrg}")
  37. private String pickMtrlKeeperType;
  38. @Value("${erp.k3cloud.pick-mtrl.link-rule:PRD_PPBOM2PICKMTRL_NORMAL}")
  39. private String pickMtrlLinkRule;
  40. @Value("${erp.k3cloud.pick-mtrl.link-table:T_PRD_PPBOMENTRY}")
  41. private String pickMtrlLinkTable;
  42. /** MES 线边库位 ID(优先);未配置则按 mes-kw-title 查找或自动创建 */
  43. @Value("${erp.k3cloud.pick-mtrl.mes-kw-id:}")
  44. private String pickMtrlMesKwId;
  45. @Value("${erp.k3cloud.pick-mtrl.mes-kw-title:ERP线边库}")
  46. private String pickMtrlMesKwTitle;
  47. @Value("${erp.k3cloud.pick-mtrl.mes-ck-name:ERP线边仓}")
  48. private String pickMtrlMesCkName;
  49. /** 标准采购订单单据类型编码 */
  50. @Value("${erp.k3cloud.purchase-order.bill-type:CGDD01_SYS}")
  51. private String purchaseOrderBillType;
  52. /** 标准采购入库单单据类型编码 */
  53. @Value("${erp.k3cloud.in-stock.bill-type:RKD01_SYS}")
  54. private String inStockBillType;
  55. @Value("${erp.k3cloud.in-stock.business-type:CG}")
  56. private String inStockBusinessType;
  57. @Value("${erp.k3cloud.in-stock.stock-number:1100105}")
  58. private String inStockStockNumber;
  59. @Value("${erp.k3cloud.in-stock.stock-status:KCZT01_SYS}")
  60. private String inStockStockStatus;
  61. @Value("${erp.k3cloud.in-stock.owner-type:BD_OwnerOrg}")
  62. private String inStockOwnerType;
  63. @Value("${erp.k3cloud.in-stock.keeper-type:BD_KeeperOrg}")
  64. private String inStockKeeperType;
  65. @Value("${erp.k3cloud.in-stock.link-rule:PUR_PurchaseOrder-STK_InStock}")
  66. private String inStockLinkRule;
  67. @Value("${erp.k3cloud.in-stock.link-table:t_PUR_POOrderEntry}")
  68. private String inStockLinkTable;
  69. @Value("${erp.k3cloud.in-stock.settle-currency:PRE001}")
  70. private String inStockSettleCurrency;
  71. @Value("${erp.k3cloud.in-stock.price-time-point:1}")
  72. private String inStockPriceTimePoint;
  73. /** 五金库仓位:FStockLocId.F100004 */
  74. @Value("${erp.k3cloud.in-stock.stock-loc-key:F100004}")
  75. private String inStockStockLocKey;
  76. @Value("${erp.k3cloud.in-stock.stock-loc-number:}")
  77. private String inStockStockLocNumber;
  78. /** 直接调拨单 STK_TransferDirect 单据类型 */
  79. @Value("${erp.k3cloud.transfer-direct.bill-type:ZJDB01_SYS}")
  80. private String transferDirectBillType;
  81. /** 直接调拨单固定物料范围(HEV / 115) */
  82. @Value("${erp.k3cloud.transfer-direct.material-numbers:8.10.HEV.10.047696,8.35.115.10.5003146600021}")
  83. private String transferDirectMaterialNumbers;
  84. @Value("${erp.k3cloud.transfer-direct.transfer-biz-type:InnerOrgTransfer}")
  85. private String transferDirectBizType;
  86. @Value("${erp.k3cloud.transfer-direct.transfer-direct-type:GENERAL}")
  87. private String transferDirectDirection;
  88. /** 调拨类别:3=外发调拨 */
  89. @Value("${erp.k3cloud.transfer-direct.transfer-category:3}")
  90. private String transferDirectCategory;
  91. @Value("${erp.k3cloud.transfer-direct.bill-sign-status:A}")
  92. private String transferDirectBillSignStatus;
  93. @Value("${erp.k3cloud.transfer-direct.stock-status:KCZT01_SYS}")
  94. private String transferDirectStockStatus;
  95. @Value("${erp.k3cloud.transfer-direct.owner-type:BD_OwnerOrg}")
  96. private String transferDirectOwnerType;
  97. @Value("${erp.k3cloud.transfer-direct.keeper-type:BD_KeeperOrg}")
  98. private String transferDirectKeeperType;
  99. @Value("${erp.k3cloud.transfer-direct.default-src-stock-number:}")
  100. private String transferDirectDefaultSrcStockNumber;
  101. @Value("${erp.k3cloud.transfer-direct.default-dest-stock-number:}")
  102. private String transferDirectDefaultDestStockNumber;
  103. /** 生产入库单 PRD_INSTOCK 固定物料范围(HEV / 115,与直接调拨单一致) */
  104. @Value("${erp.k3cloud.prd-in-stock.material-numbers:8.10.HEV.10.047696,8.35.115.10.5003146600021}")
  105. private String prdInStockMaterialNumbers;
  106. @Value("${erp.k3cloud.prd-in-stock.bill-type:SCRKD01_SYS}")
  107. private String prdInStockBillType;
  108. @Value("${erp.k3cloud.prd-in-stock.in-stock-type:1}")
  109. private String prdInStockInStockType;
  110. @Value("${erp.k3cloud.prd-in-stock.stock-status:KCZT01_SYS}")
  111. private String prdInStockStockStatus;
  112. @Value("${erp.k3cloud.prd-in-stock.owner-type:BD_OwnerOrg}")
  113. private String prdInStockOwnerType;
  114. @Value("${erp.k3cloud.prd-in-stock.keeper-type:BD_KeeperOrg}")
  115. private String prdInStockKeeperType;
  116. @Value("${erp.k3cloud.prd-in-stock.default-stock-number:}")
  117. private String prdInStockDefaultStockNumber;
  118. public String getBaseUrl() {
  119. if (baseUrl.endsWith("/")) {
  120. return baseUrl.substring(0, baseUrl.length() - 1);
  121. }
  122. return baseUrl;
  123. }
  124. public String getAcctId() {
  125. return acctId;
  126. }
  127. public String getUsername() {
  128. return username;
  129. }
  130. public String getPassword() {
  131. return password;
  132. }
  133. public String getOrgNumber() {
  134. return orgNumber;
  135. }
  136. public boolean isFilterCurrentOrg() {
  137. return filterCurrentOrg;
  138. }
  139. public boolean isInventoryCategoryFilterEnabled() {
  140. return inventoryCategoryFilterEnabled;
  141. }
  142. public String getInventoryCategoryField() {
  143. return inventoryCategoryField;
  144. }
  145. /**
  146. * 生产订单列表/选单可见物料编码;未配置时与生产入库物料范围一致。
  147. */
  148. public java.util.List<String> getProductionOrderMaterialNumbers() {
  149. java.util.List<String> configured = parseMaterialNumbers(productionOrderMaterialNumbers);
  150. if (!configured.isEmpty()) {
  151. return configured;
  152. }
  153. return getPrdInStockMaterialNumbers();
  154. }
  155. public boolean isAllowedProductionOrderMaterial(String materialNumber) {
  156. if (StringUtils.isBlank(materialNumber)) {
  157. return false;
  158. }
  159. String trimmed = materialNumber.trim();
  160. for (String allowed : getProductionOrderMaterialNumbers()) {
  161. if (trimmed.equals(allowed)) {
  162. return true;
  163. }
  164. }
  165. return false;
  166. }
  167. public boolean isProductionOrderMaterialFilterEnabled() {
  168. return !getProductionOrderMaterialNumbers().isEmpty();
  169. }
  170. public int getLcid() {
  171. return lcid;
  172. }
  173. public String getPickMtrlBillType() {
  174. return pickMtrlBillType;
  175. }
  176. public String getPickMtrlStockStatus() {
  177. return pickMtrlStockStatus;
  178. }
  179. public String getPickMtrlOwnerType() {
  180. return pickMtrlOwnerType;
  181. }
  182. public String getPickMtrlKeeperType() {
  183. return pickMtrlKeeperType;
  184. }
  185. public String getPickMtrlLinkRule() {
  186. return pickMtrlLinkRule;
  187. }
  188. public String getPickMtrlLinkTable() {
  189. return pickMtrlLinkTable;
  190. }
  191. public String getPickMtrlMesKwId() {
  192. return pickMtrlMesKwId;
  193. }
  194. public String getPickMtrlMesKwTitle() {
  195. return pickMtrlMesKwTitle;
  196. }
  197. public String getPickMtrlMesCkName() {
  198. return pickMtrlMesCkName;
  199. }
  200. public String getPurchaseOrderBillType() {
  201. return purchaseOrderBillType;
  202. }
  203. public String getInStockBillType() {
  204. return inStockBillType;
  205. }
  206. public String getInStockBusinessType() {
  207. return inStockBusinessType;
  208. }
  209. public String getInStockStockNumber() {
  210. return inStockStockNumber;
  211. }
  212. public String getInStockStockStatus() {
  213. return inStockStockStatus;
  214. }
  215. public String getInStockOwnerType() {
  216. return inStockOwnerType;
  217. }
  218. public String getInStockKeeperType() {
  219. return inStockKeeperType;
  220. }
  221. public String getInStockLinkRule() {
  222. return inStockLinkRule;
  223. }
  224. public String getInStockLinkTable() {
  225. return inStockLinkTable;
  226. }
  227. public String getInStockSettleCurrency() {
  228. return inStockSettleCurrency;
  229. }
  230. public String getInStockPriceTimePoint() {
  231. return inStockPriceTimePoint;
  232. }
  233. public String getInStockStockLocKey() {
  234. return inStockStockLocKey;
  235. }
  236. public String getInStockStockLocNumber() {
  237. return inStockStockLocNumber;
  238. }
  239. public String getTransferDirectBillType() {
  240. return transferDirectBillType;
  241. }
  242. public java.util.List<String> getTransferDirectMaterialNumbers() {
  243. return parseMaterialNumbers(transferDirectMaterialNumbers);
  244. }
  245. public boolean isAllowedTransferDirectMaterial(String materialNumber) {
  246. if (StringUtils.isBlank(materialNumber)) {
  247. return false;
  248. }
  249. String trimmed = materialNumber.trim();
  250. for (String allowed : getTransferDirectMaterialNumbers()) {
  251. if (trimmed.equals(allowed)) {
  252. return true;
  253. }
  254. }
  255. return false;
  256. }
  257. public String getTransferDirectBizType() {
  258. return transferDirectBizType;
  259. }
  260. public String getTransferDirectDirection() {
  261. return transferDirectDirection;
  262. }
  263. public String getTransferDirectCategory() {
  264. return transferDirectCategory;
  265. }
  266. public String getTransferDirectBillSignStatus() {
  267. return transferDirectBillSignStatus;
  268. }
  269. public String getTransferDirectStockStatus() {
  270. return transferDirectStockStatus;
  271. }
  272. public String getTransferDirectOwnerType() {
  273. return transferDirectOwnerType;
  274. }
  275. public String getTransferDirectKeeperType() {
  276. return transferDirectKeeperType;
  277. }
  278. public String getTransferDirectDefaultSrcStockNumber() {
  279. return transferDirectDefaultSrcStockNumber;
  280. }
  281. public String getTransferDirectDefaultDestStockNumber() {
  282. return transferDirectDefaultDestStockNumber;
  283. }
  284. public java.util.List<String> getPrdInStockMaterialNumbers() {
  285. return parseMaterialNumbers(prdInStockMaterialNumbers);
  286. }
  287. public boolean isAllowedPrdInStockMaterial(String materialNumber) {
  288. if (StringUtils.isBlank(materialNumber)) {
  289. return false;
  290. }
  291. String trimmed = materialNumber.trim();
  292. for (String allowed : getPrdInStockMaterialNumbers()) {
  293. if (trimmed.equals(allowed)) {
  294. return true;
  295. }
  296. }
  297. return false;
  298. }
  299. public String getPrdInStockBillType() {
  300. return prdInStockBillType;
  301. }
  302. public String getPrdInStockInStockType() {
  303. return prdInStockInStockType;
  304. }
  305. public String getPrdInStockStockStatus() {
  306. return prdInStockStockStatus;
  307. }
  308. public String getPrdInStockOwnerType() {
  309. return prdInStockOwnerType;
  310. }
  311. public String getPrdInStockKeeperType() {
  312. return prdInStockKeeperType;
  313. }
  314. public String getPrdInStockDefaultStockNumber() {
  315. return prdInStockDefaultStockNumber;
  316. }
  317. private java.util.List<String> parseMaterialNumbers(String materialNumbers) {
  318. java.util.List<String> list = new java.util.ArrayList<>();
  319. if (StringUtils.isBlank(materialNumbers)) {
  320. return list;
  321. }
  322. for (String part : materialNumbers.split(",")) {
  323. if (StringUtils.isNotBlank(part)) {
  324. list.add(part.trim());
  325. }
  326. }
  327. return list;
  328. }
  329. /**
  330. * 判断所选仓库是否需要填写仓位(当前按配置仓库 + 仓位维度键判断)。
  331. */
  332. public boolean requiresStockLocation(String stockNumber) {
  333. if (StringUtils.isBlank(stockNumber) || StringUtils.isBlank(inStockStockLocKey)) {
  334. return false;
  335. }
  336. return StringUtils.isNotBlank(inStockStockNumber) && inStockStockNumber.trim().equals(stockNumber.trim());
  337. }
  338. /**
  339. * 仓位维度在 Save 接口中的字段名(F100004 → FSTOCKLOCID__FF100004)。
  340. */
  341. public String toStockLocSaveKey(String locKey) {
  342. String key = StringUtils.isBlank(locKey) ? inStockStockLocKey : locKey.trim();
  343. if (StringUtils.isBlank(key)) {
  344. return "FSTOCKLOCID__FF100004";
  345. }
  346. if (key.startsWith("FSTOCKLOCID__")) {
  347. return key;
  348. }
  349. if (key.startsWith("F")) {
  350. return "FSTOCKLOCID__F" + key;
  351. }
  352. return "FSTOCKLOCID__FF" + key;
  353. }
  354. }