You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

814 lines
39 KiB

7 months ago
7 months ago
7 months ago
7 months ago
  1. package com.spring.ifs.api;
  2. import com.spring.ifs.data.BomAlternative;
  3. import com.spring.ifs.data.BomDistribution;
  4. import com.spring.ifs.data.BomHeader;
  5. import com.spring.ifs.data.BomItem;
  6. import com.spring.ifs.utils.IfsConverterToMap;
  7. import com.spring.ifs.utils.IfsPlsqlUtils;
  8. import com.spring.modules.base.utils.DateUtils;
  9. import com.spring.modules.part.entity.APIEntity.BomIfsItem;
  10. import ifs.fnd.ap.*;
  11. import java.math.BigDecimal;
  12. import java.util.*;
  13. /**
  14. * @description: Bom的api
  15. * @author LR
  16. * @date 2024/12/9 10:56
  17. * @version 1.0
  18. */
  19. public class BomApiTest {
  20. /**
  21. * @description: 查询Bom Header
  22. * @author LR
  23. * @date 2024/12/11 14:45
  24. * @version 1.0
  25. */
  26. public static Map<String, String> getBomHeader(Server srv, String contract, String partNo, String engChgLevel, String bomType) throws APException {
  27. StringBuilder searchSql = new StringBuilder();
  28. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion,");
  29. searchSql.append(" CONTRACT, PART_NO, BOM_TYPE, ENG_CHG_LEVEL, NOTE_TEXT");
  30. searchSql.append(" FROM IFSAPP.PROD_STRUCTURE_HEAD");
  31. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType");
  32. //设置查询的入参
  33. Map<String, String> inParam = new HashMap<>();
  34. inParam.put("contract", contract);
  35. inParam.put("partNo", partNo);
  36. inParam.put("engChgLevel", engChgLevel);
  37. inParam.put("bomType", bomType);
  38. //调用查询的通用方法
  39. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  40. //判断能否返回
  41. if (recordCollection == null) {
  42. return new HashMap<>();
  43. } else {
  44. Record recordData = recordCollection.get(0);
  45. Map<String, String> resultMap = IfsConverterToMap.ConverterIfsToMap(recordData);
  46. return resultMap;
  47. }
  48. }
  49. /**
  50. * @description: 按照料号查询Bom Header的集合
  51. * @author LR
  52. * @date 2024/12/12 17:40
  53. * @version 1.0
  54. */
  55. public static List<BomHeader> getBomHeadersByPartNo(Server srv, String contract, String partNo) throws APException {
  56. StringBuilder searchSql = new StringBuilder();
  57. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion,");
  58. searchSql.append(" CONTRACT, PART_NO, BOM_TYPE, ENG_CHG_LEVEL, NOTE_TEXT");
  59. searchSql.append(" FROM IFSAPP.PROD_STRUCTURE_HEAD");
  60. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo");
  61. //设置查询的入参
  62. Map<String, String> inParam = new HashMap<>();
  63. inParam.put("contract", contract);
  64. inParam.put("partNo", partNo);
  65. //调用查询的通用方法
  66. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  67. //判断能否返回
  68. if (recordCollection == null) {
  69. return new ArrayList<>();
  70. } else {
  71. List<BomHeader> resultItems = new ArrayList<>();
  72. //调用通用的处理方法 返回Map
  73. List<Map<String, String>> resultList = IfsConverterToMap.ConverterIfsToList(recordCollection);
  74. //判断是否存在数据
  75. if(resultList == null) {
  76. return resultItems;
  77. }
  78. //获取数据转bean
  79. for (int i = 0; i < resultList.size(); i++) {
  80. Map<String, String> tempMap = resultList.get(i);
  81. BomHeader tempItem = new BomHeader();
  82. //设置参数
  83. tempItem.setIfsRowId(tempMap.get("IFSROWID"));
  84. tempItem.setIfsRowVersion(tempMap.get("IFSROWVERSION"));
  85. tempItem.setContract((String) tempMap.get("CONTRACT"));
  86. tempItem.setPartNo((String) tempMap.get("PART_NO"));
  87. tempItem.setBomType((String) tempMap.get("BOM_TYPE"));
  88. tempItem.setEngChgLevel((String) tempMap.get("ENG_CHG_LEVEL"));
  89. tempItem.setNoteText((String) tempMap.get("NOTE_TEXT"));
  90. //添加对象
  91. resultItems.add(tempItem);
  92. }
  93. return resultItems;
  94. }
  95. }
  96. /**
  97. * @description: 插入Bom Header的主表
  98. * @author LR
  99. * @date 2024/12/11 15:08
  100. * @version 1.0
  101. */
  102. public static Map<String, String> insertBomHeader(Server srv, BomHeader inData) throws APException {
  103. //公共参数
  104. String contract = inData.getContract();// 域
  105. String partNo = inData.getPartNo();// 物料编码
  106. String engChgLevel = inData.getEngChgLevel();// 版本
  107. String bomType = inData.getBomType();// 分类
  108. String effPhaseInDate = inData.getEffPhaseInDate().substring(0, 10)+"-00.00.00";// 启用时间-年月日
  109. String effPhaseOutDate = inData.getEffPhaseOutDate();// 结束时间-年月日
  110. if(effPhaseOutDate == null || effPhaseOutDate.equals("")) {
  111. effPhaseOutDate = "";
  112. }else {
  113. effPhaseOutDate = effPhaseOutDate+"-00.00.00";
  114. }
  115. //判断是否存在问题
  116. String noteText = inData.getNoteText();// 备注
  117. String createDate = DateUtils.getStringDate(new Date(), "yyyy-MM-dd")+"-00.00.00";//创建的时间
  118. //入参
  119. Map<String, String> inParam = new HashMap<>();
  120. //填充参数
  121. inParam.put("OBJID", "");
  122. inParam.put("OBJVERSION", "");
  123. inParam.put("PART_NO", partNo); // 物料编码
  124. inParam.put("CONTRACT", contract); // 域
  125. inParam.put("ENG_CHG_LEVEL", engChgLevel); // 物料的版本
  126. inParam.put("BOM_TYPE", bomType); // BOM类型
  127. inParam.put("EFF_PHASE_IN_DATE", effPhaseInDate); // 启用日期
  128. inParam.put("EFF_PHASE_OUT_DATE", effPhaseOutDate); // 到期时间
  129. inParam.put("NOTE_TEXT", noteText); // 备注
  130. inParam.put("CREATE_DATE", createDate); // 创建日期
  131. //执行存储过程 获取结果集
  132. //执行check的操作
  133. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  134. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.CHECK, inParam);
  135. //执行do的操作
  136. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  137. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.DO, inParam);
  138. //返回结果集
  139. return resultMap;
  140. }
  141. /**
  142. * @description: 修改Bom Header的主表信息
  143. * @author LR
  144. * @date 2024/12/11 15:32
  145. * @version 1.0
  146. */
  147. public static Map<String, String> modifyBomHeader(Server srv, BomHeader inData) throws APException {
  148. //公共参数
  149. String ifsRowId = inData.getIfsRowId();
  150. String ifsRowVersion = inData.getIfsRowVersion();
  151. String effPhaseInDate = inData.getEffPhaseInDate().substring(0, 10)+"-00.00.00";// 启用时间-年月日
  152. String effPhaseOutDate = inData.getEffPhaseOutDate();// 结束时间-年月日
  153. if(effPhaseOutDate == null || effPhaseOutDate.equals("")) {
  154. effPhaseOutDate = "";
  155. }else {
  156. effPhaseOutDate = effPhaseOutDate+"-00.00.00";
  157. }
  158. //判断是否存在问题
  159. String noteText = inData.getNoteText();// 备注
  160. //入参
  161. Map<String, String> inParam = new HashMap<>();
  162. //填充参数
  163. inParam.put("OBJID", ifsRowId);
  164. inParam.put("OBJVERSION", ifsRowVersion);
  165. inParam.put("EFF_PHASE_IN_DATE", effPhaseInDate); // 启用日期
  166. inParam.put("EFF_PHASE_OUT_DATE", effPhaseOutDate); // 到期时间
  167. inParam.put("NOTE_TEXT", noteText); // 备注
  168. //执行check的操作
  169. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  170. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  171. //执行do的操作
  172. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  173. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  174. //返回结果集
  175. return resultMap;
  176. }
  177. /**
  178. * @description: 删除Bom的主表信息
  179. * @author LR
  180. * @date 2024/12/11 15:33
  181. * @version 1.0
  182. */
  183. public static Map<String, String> removeBomHeader(Server srv, BomHeader inData) throws APException {
  184. //公共参数
  185. String ifsRowId = inData.getIfsRowId();
  186. String ifsRowVersion = inData.getIfsRowVersion();
  187. //入参
  188. Map<String, String> inParam = new HashMap<>();
  189. //填充参数
  190. inParam.put("OBJID", ifsRowId);
  191. inParam.put("OBJVERSION", ifsRowVersion);
  192. //执行check的操作
  193. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  194. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.CHECK, inParam);
  195. //执行do的操作
  196. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_HEAD_API",
  197. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.DO, inParam);
  198. //返回结果集
  199. return resultMap;
  200. }
  201. /**
  202. * @description: 查询Bom的替代
  203. * @author LR
  204. * @date 2024/12/11 14:48
  205. * @version 1.0
  206. */
  207. public static Map<String, String> getBomAlternative(Server srv, String contract, String partNo, String engChgLevel, String bomType, String alternativeNo) throws APException {
  208. StringBuilder searchSql = new StringBuilder();
  209. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, STATE,");
  210. searchSql.append(" CONTRACT, PART_NO, BOM_TYPE, ENG_CHG_LEVEL, ALTERNATIVE_NO, NOTE_TEXT");
  211. searchSql.append(" FROM IFSAPP.PROD_STRUCT_ALTERNATE");
  212. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType AND ALTERNATIVE_NO = :alternativeNo");
  213. //设置查询的入参
  214. Map<String, String> inParam = new HashMap<>();
  215. inParam.put("contract", contract);
  216. inParam.put("partNo", partNo);
  217. inParam.put("engChgLevel", engChgLevel);
  218. inParam.put("bomType", bomType);
  219. inParam.put("alternativeNo", alternativeNo);
  220. //调用查询的通用方法
  221. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  222. //判断能否返回
  223. if (recordCollection == null) {
  224. return new HashMap<>();
  225. } else {
  226. Record recordData = recordCollection.get(0);
  227. Map<String, String> resultMap = IfsConverterToMap.ConverterIfsToMap(recordData);
  228. return resultMap;
  229. }
  230. }
  231. /**
  232. * @description: 插入Bom Alternative
  233. * @author LR
  234. * @date 2024/12/11 15:45
  235. * @version 1.0
  236. */
  237. public static Map<String, String> insertBomAlternative(Server srv, BomAlternative inData) throws APException {
  238. //公共参数
  239. String contract = inData.getContract();// 域
  240. String partNo = inData.getPartNo();// 物料编码
  241. String engChgLevel = inData.getEngChgLevel();// 版本
  242. String bomType = inData.getBomType();// 分类
  243. String alternativeNo = inData.getAlternativeNo();
  244. String alternativeDesc = inData.getAlternativeDesc();
  245. //判断是否存在问题
  246. String noteText = inData.getNoteText();// 备注
  247. //入参
  248. Map<String, String> inParam = new HashMap<>();
  249. //填充参数
  250. inParam.put("OBJID", "");
  251. inParam.put("OBJVERSION", "");
  252. inParam.put("PART_NO", partNo); // 物料编码
  253. inParam.put("CONTRACT", contract); // 域
  254. inParam.put("ENG_CHG_LEVEL", engChgLevel); // 物料的版本
  255. inParam.put("BOM_TYPE", bomType); // BOM类型
  256. inParam.put("ALTERNATIVE_NO", alternativeNo); // 替代编码
  257. inParam.put("ALTERNATIVE_DESCRIPTION", alternativeDesc); // 替代编码描述
  258. inParam.put("USE_COST_DISTRIBUTION_DB", "STANDARD"); // 固定值
  259. inParam.put("NOTE_TEXT", noteText); // 备注
  260. //执行存储过程 获取结果集
  261. //执行check的操作
  262. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  263. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.CHECK, inParam);
  264. //执行do的操作
  265. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  266. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.DO, inParam);
  267. //返回结果集
  268. return resultMap;
  269. }
  270. /**
  271. * @description: 修改Bom 的替代信息
  272. * @author LR
  273. * @date 2024/12/11 15:47
  274. * @version 1.0
  275. */
  276. public static Map<String, String> modifyBomAlternative(Server srv, BomAlternative inData) throws APException {
  277. //公共参数
  278. String ifsRowId = inData.getIfsRowId();// 域
  279. String ifsRowVersion = inData.getIfsRowVersion();// 物料编码
  280. String alternativeDesc = inData.getAlternativeDesc();
  281. String noteText = inData.getNoteText();// 备注
  282. //入参
  283. Map<String, String> inParam = new HashMap<>();
  284. //填充参数
  285. inParam.put("OBJID", ifsRowId);
  286. inParam.put("OBJVERSION", ifsRowVersion);
  287. inParam.put("ALTERNATIVE_DESCRIPTION", alternativeDesc); // 替代编码描述
  288. inParam.put("NOTE_TEXT", noteText); // 备注
  289. //执行check的操作
  290. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  291. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  292. //执行do的操作
  293. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  294. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  295. //返回结果集
  296. return resultMap;
  297. }
  298. /**
  299. * @description: 删除Bom Alternative
  300. * @author LR
  301. * @date 2024/12/11 15:51
  302. * @version 1.0
  303. */
  304. public static void removeBomAlternative(Server srv, BomAlternative inData) throws APException {
  305. //公共参数
  306. String ifsRowId = inData.getIfsRowId();// 域
  307. String ifsRowVersion = inData.getIfsRowVersion();// 物料编码
  308. //入参
  309. Map<String, String> inParam = new HashMap<>();
  310. //填充参数
  311. inParam.put("OBJID", ifsRowId);
  312. inParam.put("OBJVERSION", ifsRowVersion);
  313. //执行check的操作
  314. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  315. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.CHECK, inParam);
  316. //执行do的操作
  317. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  318. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.DO, inParam);
  319. }
  320. /**
  321. * @description: Build Bom的信息
  322. * @author LR
  323. * @date 2024/12/11 15:53
  324. * @version 1.0
  325. */
  326. public static Map<String, String> buildBomAlternative(Server srv, BomAlternative inData) throws APException {
  327. //公共参数
  328. String ifsRowId = inData.getIfsRowId();// 域
  329. String ifsRowVersion = inData.getIfsRowVersion();// 物料编码
  330. //入参
  331. Map<String, String> inParam = new HashMap<>();
  332. //填充参数
  333. inParam.put("OBJID", ifsRowId);
  334. inParam.put("OBJVERSION", ifsRowVersion);
  335. //执行check的操作
  336. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  337. "BUILD__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  338. //执行do的操作
  339. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  340. "BUILD__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  341. //返回结果集
  342. return resultMap;
  343. }
  344. /**
  345. * @description: retire Bom Alternative
  346. * @author LR
  347. * @date 2024/12/11 15:55
  348. * @version 1.0
  349. */
  350. public static Map<String, String> retireBomAlternative(Server srv, BomAlternative inData) throws APException {
  351. //公共参数
  352. String ifsRowId = inData.getIfsRowId();// 域
  353. String ifsRowVersion = inData.getIfsRowVersion();// 物料编码
  354. //入参
  355. Map<String, String> inParam = new HashMap<>();
  356. //填充参数
  357. inParam.put("OBJID", ifsRowId);
  358. inParam.put("OBJVERSION", ifsRowVersion);
  359. //执行check的操作
  360. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  361. "RETIRE__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  362. //执行do的操作
  363. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCT_ALTERNATE_API",
  364. "RETIRE__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  365. //返回结果集
  366. return resultMap;
  367. }
  368. /**
  369. * @description: 获取Bom Item
  370. * @author LR
  371. * @date 2024/12/11 16:12
  372. * @version 1.0
  373. */
  374. public static Map<String, String> getBomItem(Server srv, String contract, String partNo, String engChgLevel, String bomType, String alternativeNo, String lineItemNo) throws APException {
  375. StringBuilder searchSql = new StringBuilder();
  376. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, PART_NO, CONTRACT, ENG_CHG_LEVEL, BOM_TYPE, ALTERNATIVE_NO,");
  377. searchSql.append(" LINE_ITEM_NO, LINE_SEQUENCE, COMPONENT_PART, QTY_PER_ASSEMBLY, ISSUE_TYPE, OPERATION_NO,");
  378. searchSql.append(" COMPONENT_SCRAP, SHRINKAGE_FACTOR");
  379. searchSql.append(" FROM IFSAPP.PROD_STRUCTURE");
  380. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType");
  381. searchSql.append(" AND ALTERNATIVE_NO = :alternativeNo AND LINE_ITEM_NO = :lineItemNo");
  382. //设置查询的入参
  383. Map<String, String> inParam = new HashMap<>();
  384. inParam.put("contract", contract);
  385. inParam.put("partNo", partNo);
  386. inParam.put("engChgLevel", engChgLevel);
  387. inParam.put("bomType", bomType);
  388. inParam.put("alternativeNo", alternativeNo);
  389. inParam.put("lineItemNo", lineItemNo);
  390. //调用查询的通用方法
  391. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  392. //判断能否返回
  393. if (recordCollection == null) {
  394. return new HashMap<>();
  395. } else {
  396. Record recordData = recordCollection.get(0);
  397. Map<String, String> resultMap = IfsConverterToMap.ConverterIfsToMap(recordData);
  398. return resultMap;
  399. }
  400. }
  401. /**
  402. * @description: 获取Bom Items
  403. * @author LR
  404. * @date 2024/12/11 16:16
  405. * @version 1.0
  406. */
  407. public static List<Map<String, String>> getBomItems(Server srv, String contract, String partNo, String engChgLevel, String bomType, String alternativeNo) throws APException {
  408. StringBuilder searchSql = new StringBuilder();
  409. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, PART_NO, CONTRACT, ENG_CHG_LEVEL, BOM_TYPE, ALTERNATIVE_NO,");
  410. searchSql.append(" LINE_ITEM_NO, LINE_SEQUENCE, COMPONENT_PART, QTY_PER_ASSEMBLY, ISSUE_TYPE, OPERATION_NO,");
  411. searchSql.append(" COMPONENT_SCRAP, SHRINKAGE_FACTOR");
  412. searchSql.append(" FROM IFSAPP.PROD_STRUCTURE");
  413. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType");
  414. searchSql.append(" AND ALTERNATIVE_NO = :alternativeNo");
  415. //设置查询的入参
  416. Map<String, String> inParam = new HashMap<>();
  417. inParam.put("contract", contract);
  418. inParam.put("partNo", partNo);
  419. inParam.put("engChgLevel", engChgLevel);
  420. inParam.put("bomType", bomType);
  421. inParam.put("alternativeNo", alternativeNo);
  422. //调用查询的通用方法
  423. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  424. //判断能否返回
  425. if (recordCollection == null) {
  426. return new ArrayList<>();
  427. } else {
  428. List<Map<String, String>> resultList = IfsConverterToMap.ConverterIfsToList(recordCollection);
  429. return resultList;
  430. }
  431. }
  432. /**
  433. * @description: 查询 Bom Item集合
  434. * @author LR
  435. * @date 2024/12/13 9:48
  436. * @version 1.0
  437. */
  438. public static List<BomItem> getBomItems(Server srv, String contract, String partNo, String engChgLevel, String bomType,
  439. String alternativeNo, String lineItemNo) throws APException {
  440. StringBuilder searchSql = new StringBuilder();
  441. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, PART_NO, CONTRACT, ENG_CHG_LEVEL, BOM_TYPE, ALTERNATIVE_NO,");
  442. searchSql.append(" LINE_ITEM_NO, LINE_SEQUENCE, COMPONENT_PART, QTY_PER_ASSEMBLY, ISSUE_TYPE, OPERATION_NO,");
  443. searchSql.append(" COMPONENT_SCRAP, SHRINKAGE_FACTOR");
  444. searchSql.append(" FROM IFSAPP.PROD_STRUCTURE");
  445. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType");
  446. searchSql.append(" AND ALTERNATIVE_NO = :alternativeNo");
  447. //设置查询的入参
  448. Map<String, String> inParam = new HashMap<>();
  449. inParam.put("contract", contract);
  450. inParam.put("partNo", partNo);
  451. inParam.put("engChgLevel", engChgLevel);
  452. inParam.put("bomType", bomType);
  453. inParam.put("alternativeNo", alternativeNo);
  454. //判断是否需要添加查询的条件
  455. if(!(lineItemNo == null || "".equals(lineItemNo))) {
  456. inParam.put("lineItemNo", lineItemNo);
  457. searchSql.append(" AND LINE_ITEM_NO = :lineItemNo");
  458. }
  459. //调用查询的通用方法
  460. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  461. //判断能否返回
  462. if (recordCollection == null) {
  463. return new ArrayList<>();
  464. } else {
  465. List<BomItem> resultItems = new ArrayList<>();
  466. //调用通用的处理方法 返回Map
  467. List<Map<String, String>> resultList = IfsConverterToMap.ConverterIfsToList(recordCollection);
  468. //判断是否存在数据
  469. if(resultList == null) {
  470. return resultItems;
  471. }
  472. //获取数据转bean
  473. for (int i = 0; i < resultList.size(); i++) {
  474. Map<String, String> tempMap = resultList.get(i);
  475. BomItem tempItem = new BomItem();
  476. //设置参数
  477. tempItem.setIfsRowId(tempMap.get("IFSROWID"));
  478. tempItem.setIfsRowVersion(tempMap.get("IFSROWVERSION"));
  479. tempItem.setPartNo(tempMap.get("PART_NO"));
  480. tempItem.setContract(tempMap.get("CONTRACT"));
  481. tempItem.setEngChgLevel(tempMap.get("ENG_CHG_LEVEL"));
  482. tempItem.setBomType(tempMap.get("BOM_TYPE"));
  483. tempItem.setAlternativeNo(tempMap.get("ALTERNATIVE_NO"));
  484. BigDecimal itemValue = new BigDecimal(tempMap.get("LINE_ITEM_NO"));
  485. itemValue = itemValue.setScale(0, BigDecimal.ROUND_HALF_UP);
  486. itemValue = itemValue.stripTrailingZeros();
  487. String formatterValue = itemValue.toPlainString();
  488. tempItem.setLineItemNo(formatterValue);
  489. tempItem.setNoteText(tempMap.get("NOTE_TEXT"));
  490. tempItem.setConsumptionItem(tempMap.get("CONSUMPTION_ITEM"));
  491. //tempItem.se(tempMap.get("UNITMEAS"));
  492. tempItem.setLineSequence(tempMap.get("LINE_SEQUENCE"));
  493. tempItem.setComponentPart(tempMap.get("COMPONENT_PART"));
  494. //处理字符串含有E 科学计数法
  495. String strQtyPerAssembly = tempMap.get("QTY_PER_ASSEMBLY");
  496. BigDecimal bigQtyPerAssembly = new BigDecimal(strQtyPerAssembly);
  497. bigQtyPerAssembly = bigQtyPerAssembly.stripTrailingZeros();
  498. String formatterQtyPerAssembly = bigQtyPerAssembly.toPlainString();
  499. tempItem.setQtyPerAssembly(formatterQtyPerAssembly);
  500. String strComponentScrap= tempMap.get("COMPONENT_SCRAP");
  501. BigDecimal bigComponentScrap = new BigDecimal(strComponentScrap);
  502. bigComponentScrap = bigComponentScrap.stripTrailingZeros();
  503. String formatterComponentScrap = bigComponentScrap.toPlainString();
  504. tempItem.setComponentScrap(formatterComponentScrap);
  505. String strShrinkageFactor= tempMap.get("SHRINKAGE_FACTOR");
  506. BigDecimal bigShrinkageFactor = new BigDecimal(strShrinkageFactor);
  507. bigShrinkageFactor = bigShrinkageFactor.stripTrailingZeros();
  508. String formatterShrinkageFactor = bigShrinkageFactor.toPlainString();
  509. tempItem.setShrinkageFactor(formatterShrinkageFactor);
  510. tempItem.setIssueType(tempMap.get("ISSUE_TYPE"));
  511. tempItem.setOperationNo(tempMap.get("OPERATION_NO"));
  512. //添加对象
  513. resultItems.add(tempItem);
  514. }
  515. return resultItems;
  516. }
  517. }
  518. /**
  519. * @description: 插入Bom Item
  520. * @author LR
  521. * @date 2024/12/11 16:17
  522. * @version 1.0
  523. */
  524. public static Map<String, String> insertBomItem(Server srv, BomItem inData) throws APException {
  525. //公共参数
  526. String contract = inData.getContract();
  527. String partNo = inData.getPartNo();// 物料编码
  528. String engChgLevel = inData.getEngChgLevel();// 版本
  529. String bomType = inData.getBomType();// 分类
  530. String alternativeNo = inData.getAlternativeNo();
  531. String operationNo = inData.getOperationNo();
  532. String lineItemNo = inData.getLineItemNo();
  533. String sequenceNo = inData.getLineSequence();
  534. //判断是否存在问题
  535. String componentPart = inData.getComponentPart();//
  536. String qtyPerAssembly = inData.getQtyPerAssembly();
  537. String issueType = inData.getIssueType();
  538. String componentScrap = inData.getComponentScrap();
  539. String shrinkageFactor = inData.getShrinkageFactor();
  540. String noteText = inData.getNoteText();
  541. String consumptionItem = inData.getConsumptionItem();
  542. String createDate = DateUtils.getStringDate(new Date(), "yyyy-MM-dd")+"-00.00.00";
  543. String lastActivityDate = DateUtils.getStringDate(new Date(), "yyyy-MM-dd")+"-00.00.00";
  544. String productFlag = inData.getProductFlag();
  545. //入参
  546. Map<String, String> inParam = new HashMap<>();
  547. //填充参数
  548. inParam.put("OBJID", "");
  549. inParam.put("OBJVERSION", "");
  550. inParam.put("PART_NO", partNo); // 物料编码
  551. inParam.put("CONTRACT", contract); // 域
  552. inParam.put("ENG_CHG_LEVEL", engChgLevel); // 物料的版本
  553. inParam.put("BOM_TYPE", bomType); // BOM类型
  554. inParam.put("ALTERNATIVE_NO", alternativeNo); // 替代编码
  555. inParam.put("LINE_ITEM_NO", lineItemNo); // 行号
  556. inParam.put("LINE_SEQUENCE", sequenceNo); // 序号
  557. inParam.put("COMPONENT_PART", componentPart); // 子零件
  558. inParam.put("QTY_PER_ASSEMBLY", qtyPerAssembly); // 单位用量
  559. if ("byProduct".equalsIgnoreCase(productFlag)) {
  560. inParam.put("CONSUMPTION_ITEM", consumptionItem); // 消耗项目
  561. }else {
  562. inParam.put("ISSUE_TYPE", issueType); // 生产属性
  563. inParam.put("CONSUMPTION_ITEM", consumptionItem); // 消耗项目
  564. }
  565. inParam.put("COMPONENT_SCRAP", componentScrap); // 报废
  566. inParam.put("SHRINKAGE_FACTOR", shrinkageFactor); // 损耗率
  567. inParam.put("NOTE_TEXT", noteText); // 备注
  568. inParam.put("OPERATION_NO", operationNo); // 工序
  569. inParam.put("ISSUE_PLANNED_SCRAP_DB", "TRUE"); // 固定值
  570. inParam.put("ISSUE_OVERREPORTED_QTY_DB", "FALSE"); // 固定值
  571. inParam.put("LEADTIME_OFFSET", "0"); // 固定值
  572. inParam.put("PROMISE_PLANNED", "Promised"); // 固定值
  573. inParam.put("PHANTOM_CONSUME", "Not Phantom Consume"); // 固定值
  574. inParam.put("CHARGED_ITEM", "Item not charged"); // 固定值
  575. inParam.put("CREATE_DATE", createDate); // 创建时间
  576. inParam.put("LAST_ACTIVITY_DATE", lastActivityDate); // 最近更新时间
  577. inParam.put("PURCHASE_COMP_BACKFLUSH_DB", "FALSE"); // 固定值
  578. inParam.put("STD_PLANNED_ITEM", "1"); // 固定值
  579. inParam.put("OPER_COST_DISTRIBUTION", "0"); // 固定值
  580. inParam.put("GEN_OH_COST_DISTRIBUTION", "0"); // 固定值
  581. inParam.put("EXCLUDE_FROM_AS_BUILT_DB", "FALSE"); // 固定值
  582. inParam.put("BY_PROD_AS_SUPPLY_IN_MRP_DB", "FALSE"); // 固定值
  583. inParam.put("STOP_BOM_EXPLOSION_DB", "FALSE"); // 固定值
  584. inParam.put("LOT_BATCH_ORIGIN_DB", "FALSE"); // 固定值
  585. //执行check的操作
  586. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  587. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.CHECK, inParam);
  588. //执行do的操作
  589. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  590. "NEW__", PlsqlBaseMethodType.NEW, PlsqlBaseMethodAction.DO, inParam);
  591. //返回结果集
  592. return resultMap;
  593. }
  594. /**
  595. * @description: 修改 Bom Item
  596. * @author LR
  597. * @date 2024/12/11 16:22
  598. * @version 1.0
  599. */
  600. public static Map<String, String> modifyBomItem(Server srv, BomItem inData) throws APException {
  601. //公共参数
  602. String ifsRowId = inData.getIfsRowId();//
  603. String ifsRowVersion = inData.getIfsRowVersion();//
  604. String sequenceNo = inData.getLineSequence();
  605. String operationNo = inData.getOperationNo();
  606. //判断是否存在问题
  607. String componentPart = inData.getComponentPart();//
  608. String qtyPerAssembly = inData.getQtyPerAssembly();
  609. String issueType = inData.getIssueType();
  610. String componentScrap = inData.getComponentScrap();
  611. String shrinkageFactor = inData.getShrinkageFactor();
  612. String noteText = inData.getNoteText();
  613. String consumptionItem = inData.getConsumptionItem();
  614. String createDate = DateUtils.getStringDate(new Date(), "yyyy-MM-dd")+"-00.00.00";
  615. String lastActivityDate = DateUtils.getStringDate(new Date(), "yyyy-MM-dd")+"-00.00.00";
  616. String productFlag = inData.getProductFlag();
  617. //入参
  618. Map<String, String> inParam = new HashMap<>();
  619. //填充参数
  620. inParam.put("OBJID", ifsRowId);
  621. inParam.put("OBJVERSION", ifsRowVersion);
  622. inParam.put("LINE_SEQUENCE", sequenceNo); // 序号
  623. inParam.put("COMPONENT_PART", componentPart); // 子零件
  624. inParam.put("QTY_PER_ASSEMBLY", qtyPerAssembly); // 单位用量
  625. if ("byProduct".equalsIgnoreCase(productFlag)) {
  626. inParam.put("CONSUMPTION_ITEM", consumptionItem); // 消耗项目
  627. }else {
  628. inParam.put("ISSUE_TYPE", issueType); // 生产属性
  629. inParam.put("CONSUMPTION_ITEM", consumptionItem); // 消耗项目
  630. }
  631. inParam.put("COMPONENT_SCRAP", componentScrap); // 报废
  632. inParam.put("SHRINKAGE_FACTOR", shrinkageFactor); // 损耗率
  633. inParam.put("NOTE_TEXT", noteText); // 备注
  634. inParam.put("CREATE_DATE", createDate); // 创建时间
  635. inParam.put("OPERATION_NO", operationNo); // 工序
  636. inParam.put("LAST_ACTIVITY_DATE", lastActivityDate); // 最近更新时间
  637. //执行check的操作
  638. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  639. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  640. //执行do的操作
  641. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  642. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  643. //返回结果集
  644. return resultMap;
  645. }
  646. /**
  647. * @description: 删除 Bom Item
  648. * @author LR
  649. * @date 2024/12/11 16:24
  650. * @version 1.0
  651. */
  652. public static void removeBomItem(Server srv, BomItem inData) throws APException {
  653. //公共参数
  654. //公共参数
  655. String ifsRowId = inData.getIfsRowId();//
  656. String ifsRowVersion = inData.getIfsRowVersion();//
  657. //入参
  658. Map<String, String> inParam = new HashMap<>();
  659. //填充参数
  660. inParam.put("OBJID", ifsRowId);
  661. inParam.put("OBJVERSION", ifsRowVersion);
  662. //执行check的操作
  663. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  664. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.CHECK, inParam);
  665. //执行do的操作
  666. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "PROD_STRUCTURE_API",
  667. "REMOVE__", PlsqlBaseMethodType.REMOVE, PlsqlBaseMethodAction.DO, inParam);
  668. }
  669. /**
  670. * @description: 查询副产品的信息
  671. * @author LR
  672. * @date 2024/12/11 16:27
  673. * @version 1.0
  674. */
  675. public static Map<String, String> getBomDistribution(Server srv, String contract, String partNo, String engChgLevel, String bomType, String alternativeNo,
  676. String componentLineItemNo, String byProdLineItemNo) throws APException {
  677. StringBuilder searchSql = new StringBuilder();
  678. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, CONTRACT contract, PART_NO partNo, ENG_CHG_LEVEL engChgLevel,");
  679. searchSql.append(" BOM_TYPE bomType, ALTERNATIVE_NO alternativeNo, BYPROD_LINE_ITEM_NO byProdLineItemNo,");
  680. searchSql.append(" IFSAPP.MANUF_STRUCTURE_API.Get_Component_Part(contract,part_no,eng_chg_level,bom_type,alternative_no,BYPROD_LINE_ITEM_NO) byProductPartNo,");
  681. searchSql.append(" COMPONENT_LINE_ITEM_NO componentLineItemNo,");
  682. searchSql.append(" IFSAPP.MANUF_STRUCTURE_API.Get_Component_Part(contract,part_no,eng_chg_level,bom_type,alternative_no,COMPONENT_LINE_ITEM_NO) componentPart,");
  683. searchSql.append(" ITEM_COST_DISTRIBUTION itemCostDistribution");
  684. searchSql.append(" FROM IFSAPP.MANUF_STRUCT_COST_DISTRIB");
  685. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType AND ALTERNATIVE_NO = :alternativeNo");
  686. searchSql.append(" AND COMPONENT_LINE_ITEM_NO = :componentLineItemNo AND BYPROD_LINE_ITEM_NO = :byProdLineItemNo");
  687. //设置查询的入参
  688. Map<String, String> inParam = new HashMap<>();
  689. inParam.put("contract", contract);
  690. inParam.put("partNo", partNo);
  691. inParam.put("engChgLevel", engChgLevel);
  692. inParam.put("bomType", bomType);
  693. inParam.put("alternativeNo", alternativeNo);
  694. inParam.put("componentLineItemNo", componentLineItemNo);
  695. inParam.put("byProdLineItemNo", byProdLineItemNo);
  696. //调用查询的通用方法
  697. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  698. //判断能否返回
  699. if (recordCollection == null) {
  700. return null;
  701. } else {
  702. Record record = recordCollection.get(0);
  703. Map<String, String> resultMap = IfsConverterToMap.ConverterIfsToMap(record);
  704. return resultMap;
  705. }
  706. }
  707. /**
  708. * @description: 查询Bom 副产品的所有信息
  709. * @author LR
  710. * @date 2024/12/11 16:30
  711. * @version 1.0
  712. */
  713. public static List<Map<String, String>> getBomDistributions(Server srv, String contract, String partNo, String engChgLevel, String bomType, String alternativeNo) throws APException {
  714. StringBuilder searchSql = new StringBuilder();
  715. searchSql.append("SELECT OBJID ifsRowId, OBJVERSION ifsRowVersion, CONTRACT contract, PART_NO partNo, ENG_CHG_LEVEL engChgLevel,");
  716. searchSql.append(" BOM_TYPE bomType, ALTERNATIVE_NO alternativeNo, BYPROD_LINE_ITEM_NO byProdLineItemNo,");
  717. searchSql.append(" IFSAPP.MANUF_STRUCTURE_API.Get_Component_Part(contract,part_no,eng_chg_level,bom_type,alternative_no,BYPROD_LINE_ITEM_NO) byProductPartNo,");
  718. searchSql.append(" COMPONENT_LINE_ITEM_NO componentLineItemNo,");
  719. searchSql.append(" IFSAPP.MANUF_STRUCTURE_API.Get_Component_Part(contract,part_no,eng_chg_level,bom_type,alternative_no,COMPONENT_LINE_ITEM_NO) componentPart,");
  720. searchSql.append(" ITEM_COST_DISTRIBUTION itemCostDistribution");
  721. searchSql.append(" FROM IFSAPP.MANUF_STRUCT_COST_DISTRIB");
  722. searchSql.append(" WHERE CONTRACT = :contract AND PART_NO = :partNo AND ENG_CHG_LEVEL = :engChgLevel AND BOM_TYPE = :bomType AND ALTERNATIVE_NO = :alternativeNo");
  723. //设置查询的入参
  724. Map<String, String> inParam = new HashMap<>();
  725. inParam.put("contract", contract);
  726. inParam.put("partNo", partNo);
  727. inParam.put("engChgLevel", engChgLevel);
  728. inParam.put("bomType", bomType);
  729. inParam.put("alternativeNo", alternativeNo);
  730. //调用查询的通用方法
  731. RecordCollection recordCollection = IfsPlsqlUtils.execSqlSearchGetRecordCollection(srv, searchSql, inParam);
  732. //判断能否返回
  733. if (recordCollection == null) {
  734. return new ArrayList<>();
  735. } else {
  736. List<Map<String, String>> resultList = IfsConverterToMap.ConverterIfsToList(recordCollection);
  737. return resultList;
  738. }
  739. }
  740. /**
  741. * @description: 修改 Bom的副产品信息
  742. * @author LR
  743. * @date 2024/12/11 16:47
  744. * @version 1.0
  745. */
  746. public static Map<String, String> modifyBomDistribution(Server srv, BomDistribution inData) throws APException {
  747. //公共参数
  748. String ifsRowId = inData.getIfsRowId();//
  749. String ifsRowVersion = inData.getIfsRowVersion();//
  750. String itemCostDistribution = inData.getItemCostDistribution();
  751. //入参
  752. Map<String, String> inParam = new HashMap<>();
  753. //填充参数
  754. inParam.put("OBJID", ifsRowId);
  755. inParam.put("OBJVERSION", ifsRowVersion);
  756. inParam.put("ITEM_COST_DISTRIBUTION", itemCostDistribution); // 序号
  757. //执行check的操作
  758. Map<String, String> checkMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "MANUF_STRUCT_COST_DISTRIB_API",
  759. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.CHECK, inParam);
  760. //执行do的操作
  761. Map<String, String> resultMap = IfsPlsqlUtils.execProcedureGetRecord(srv, "MANUF_STRUCT_COST_DISTRIB_API",
  762. "MODIFY__", PlsqlBaseMethodType.MODIFY, PlsqlBaseMethodAction.DO, inParam);
  763. //返回结果集
  764. return resultMap;
  765. }
  766. }