AssetMidBillOpPlugin.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. package fi.fa.opplugin;
  2. import com.alibaba.druid.util.StringUtils;
  3. import kd.bos.dataentity.OperateOption;
  4. import kd.bos.dataentity.entity.DynamicObject;
  5. import kd.bos.dataentity.entity.DynamicObjectCollection;
  6. import kd.bos.entity.operate.result.OperationResult;
  7. import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
  8. import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
  9. import kd.bos.exception.KDBizException;
  10. import kd.bos.orm.query.QCP;
  11. import kd.bos.orm.query.QFilter;
  12. import kd.bos.servicehelper.BusinessDataServiceHelper;
  13. import kd.bos.servicehelper.operation.OperationServiceHelper;
  14. import kd.bos.servicehelper.operation.SaveServiceHelper;
  15. import org.apache.commons.lang3.ObjectUtils;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. public class AssetMidBillOpPlugin extends AbstractOperationServicePlugIn {
  19. @Override
  20. public void beginOperationTransaction(BeginOperationTransactionArgs e) {
  21. super.beginOperationTransaction(e);
  22. DynamicObject[] dynamicObjects = e.getDataEntities();
  23. for (int i = 0; i < dynamicObjects.length; i++) {
  24. if (StringUtils.equals(e.getOperationKey(), "push")) {
  25. DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
  26. String nckd_flag = info.getString("nckd_flag");
  27. if ("1".equals(nckd_flag)) {
  28. throw new KDBizException("单据" + info.getString("number") + "已经下推生成了资产调拨单,不允许重复下推!");
  29. }else {
  30. String dispatchType = info.getString("nckd_dispatch_type");
  31. String direction = info.getString("nckd_direction");
  32. String nckd_card_real_code = info.getString("nckd_card_number_tag");
  33. String[] asset = nckd_card_real_code.split(",");
  34. // 存储键的数组
  35. String[] keys = new String[asset.length];
  36. List<String> number = new ArrayList<>();
  37. List<String> cardNumber = new ArrayList<>();
  38. // 遍历每个键值对并获取键
  39. for (int j = 0; j < asset.length; j++) {
  40. String[] keyValue = asset[j].split(":");
  41. if (keyValue.length > 0) {
  42. number.add(keyValue[0]);
  43. }
  44. }
  45. //查询e管家实物卡片清单
  46. QFilter cardFilter = new QFilter("number", QCP.in,number);
  47. DynamicObject[] eCard = BusinessDataServiceHelper.load("nckd_fa_card_real_list","nckd_card_real_code",new QFilter[] {cardFilter});
  48. for (DynamicObject object : eCard) {
  49. cardNumber.add(object.getString("nckd_card_real_code"));
  50. }
  51. if ("0".equals(dispatchType)) {
  52. List<String> list = new ArrayList<>();
  53. list.add("A00100101900240600002");
  54. list.add("A00100101900240600008");
  55. QFilter filter = new QFilter("number", QCP.in,"A00100101900240600002");
  56. filter.and("isbak", QCP.equals, "0");
  57. DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
  58. // if (asset.length == card.length) {
  59. DynamicObject dispatch = BusinessDataServiceHelper.newDynamicObject("fa_dispatch");
  60. //单据头
  61. dispatch.set("dispatchdate", info.getDate("nckd_date_out"));//调出日期
  62. dispatch.set("assetunit", getOrg(info.getString("nckd_org_out")));//调出组织
  63. dispatch.set("inassetunit", getOrg(info.getString("nckd_org_in")));//调入组织
  64. dispatch.set("org", getOrg(info.getString("nckd_org_out")));//调出核算组织
  65. dispatch.set("inorg", getOrg(info.getString("nckd_org_in")));//调入核算组织
  66. dispatch.set("reason", info.getString("nckd_reason"));//调出原因
  67. dispatch.set("dispatchtype", "A");//调拨类型 A="平价调拨",B="非平价调拨"
  68. dispatch.set("changemode", 14);//减少方式默认"调出"
  69. dispatch.set("currency", 1);//币种
  70. dispatch.set("currencyrate", 1);//结算汇率
  71. //制单信息
  72. dispatch.set("billstatus", "A");//暂存
  73. //调出方向
  74. if("0".equals(direction)){
  75. dispatch.set("outuser", getUser(info.getString("nckd_user_out")));//调出申请人
  76. dispatch.set("inuser", getUser(info.getString("nckd_user_in")));//调入负责人
  77. dispatch.set("creator", getUser(info.getString("nckd_user_out")));//创建人
  78. dispatch.set("modifier", getUser(info.getString("nckd_user_out")));//修改人
  79. dispatch.set("auditor", getUser(info.getString("nckd_user_out")));//审核人
  80. dispatch.set("appliant", getUser(info.getString("nckd_user_out")));//调拨申请人
  81. }//调入方向
  82. else if ("1".equals(direction)) {
  83. dispatch.set("outuser", getUser(info.getString("nckd_user_in")));//调出申请人
  84. dispatch.set("inuser", getUser(info.getString("nckd_user_out")));//调入负责人
  85. dispatch.set("creator", getUser(info.getString("nckd_user_in")));//创建人
  86. dispatch.set("modifier", getUser(info.getString("nckd_user_in")));//修改人
  87. dispatch.set("auditor", getUser(info.getString("nckd_user_in")));//审核人
  88. dispatch.set("appliant", getUser(info.getString("nckd_user_in")));//调拨申请人
  89. }
  90. for (int c = 0; c < card.length; c++) {
  91. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
  92. //创建调出单分录
  93. DynamicObjectCollection entryEntity = dispatch.getDynamicObjectCollection("dispatchentry");
  94. DynamicObject entry1 = entryEntity.addNew();
  95. entry1.set("realcard", cardInfo);//资产编码
  96. entry1.set("measurement", cardInfo.getDynamicObject("unit").getLong("id"));//计量单位
  97. entry1.set("dispatchqty", cardInfo.getInt("assetamount"));//数量
  98. entry1.set("inusedept", getOrg(info.getString("nckd_dept_in")));//调入使用部门
  99. }
  100. //执行保存-提交-审核
  101. OperationResult saveResult = SaveServiceHelper.saveOperate("fa_dispatch", new DynamicObject[]{dispatch}, OperateOption.create());
  102. if (saveResult.isSuccess()){
  103. info.set("nckd_flag", "1");
  104. SaveServiceHelper.save(new DynamicObject[]{info});
  105. this.operationResult.setSuccess(true);
  106. this.operationResult.setMessage("下推资产调出单成功");
  107. this.operationResult.setShowMessage(true);
  108. OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_dispatch",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
  109. OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_dispatch",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
  110. }else {
  111. this.operationResult.setShowMessage(true);
  112. this.operationResult.setSuccess(false);
  113. this.operationResult.setMessage("下推资产调出单单失败");
  114. }
  115. // }else {
  116. // throw new KDBizException("请先拆分实物卡片再下推生单!");
  117. // }
  118. }else if ("1".equals(dispatchType)) {
  119. DynamicObject changeDept = BusinessDataServiceHelper.newDynamicObject("fa_change_dept");
  120. //单据头
  121. DynamicObject orgInfo = queryOrg(getOrg(info.getString("nckd_org_in")));
  122. changeDept.set("org", orgInfo);//核算组织
  123. changeDept.set("changedate", info.getDate("nckd_date_out"));//记账日期
  124. changeDept.set("appliantid", getUser(info.getString("nckd_user_out")));//变更申请人
  125. changeDept.set("remark", info.getString("nckd_reason"));//调出原因
  126. changeDept.set("sourcetype", 2);//来源方式(5:API生成)
  127. changeDept.set("changetype", queryChangeType(Long.parseLong("733953285719123968")));//变更类型,默认部门变更
  128. changeDept.set("chtypedetail", "1");//变更类型明细默认实物变更1
  129. changeDept.set("voucherflag", "A");//记账标识默认无需记账A
  130. changeDept.set("billstatus", "A");//暂存
  131. QFilter filter = new QFilter("number", QCP.in,"A00100101900240600007");
  132. filter.and("isbak", QCP.equals, "0");
  133. DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
  134. for (int c = 0; c < card.length; c++) {
  135. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
  136. //查询财务卡片
  137. DynamicObject fin = queryFinCard(cardInfo.getLong("id"));//财务卡片id
  138. //创建变更字段分录
  139. DynamicObjectCollection fieldentry = changeDept.getDynamicObjectCollection("fieldentry");
  140. if (!getOrg(info.getString("nckd_org_in")).equals(cardInfo.getDynamicObject("headusedept").getLong("id"))){
  141. DynamicObject entry1 = fieldentry.addNew();
  142. entry1.set("realcard1", cardInfo);//资产编码
  143. entry1.set("depreuse1", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
  144. entry1.set("currency1", 1);//币别
  145. entry1.set("basecurrency1", 1);//本币位
  146. entry1.set("assetnumber",cardInfo.getString("number"));//资产编码
  147. entry1.set("bizdate1", info.getDate("nckd_date_out"));//业务日期
  148. entry1.set("field", "fa_card_real.headusedept");//变更字段-部门
  149. entry1.set("beforevalue", String.valueOf(cardInfo.getDynamicObject("headusedept").getLong("id")));//变更前值
  150. entry1.set("aftervalue", getOrg(info.getString("nckd_dept_in")).toString());//变更后值
  151. entry1.set("realcardmasterid", cardInfo);//实物卡片id
  152. entry1.set("fincard1", fin);//财务卡片
  153. }
  154. if (ObjectUtils.isEmpty(cardInfo.getDynamicObject("headuseperson")) ||
  155. ObjectUtils.isNotEmpty(cardInfo.getDynamicObject("headuseperson")) && !getUser(info.getString("nckd_used_user")).equals(cardInfo.getDynamicObject("headuseperson").getLong("id"))) {
  156. String beforevalue = cardInfo.getDynamicObject("headuseperson") == null ? "" : String.valueOf(cardInfo.getDynamicObject("headuseperson").getLong("id"));
  157. DynamicObject entry2 = fieldentry.addNew();
  158. entry2.set("realcard1", cardInfo);//资产编码
  159. entry2.set("depreuse1", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
  160. entry2.set("currency1", 1);//币别
  161. entry2.set("basecurrency1", 1);//本币位
  162. entry2.set("assetnumber",cardInfo.getString("number"));//资产编码
  163. entry2.set("bizdate1", info.getDate("nckd_date_out"));//业务日期
  164. entry2.set("field", "fa_card_real.headuseperson");//变更字段-使用人
  165. entry2.set("beforevalue", beforevalue);//变更前值
  166. entry2.set("aftervalue", String.valueOf(getUser(info.getString("nckd_used_user")).getLong("id")));//变更后值
  167. entry2.set("realcardmasterid", cardInfo);//实物卡片id
  168. entry2.set("fincard1", fin);//财务卡片
  169. }
  170. //创建实物变更分录
  171. DynamicObjectCollection realentry = changeDept.getDynamicObjectCollection("realentry");
  172. DynamicObject realentry1 = realentry.addNew();
  173. realentry1.set("realcard", cardInfo.getLong("id"));//资产编码
  174. //创建财务变更分录
  175. DynamicObjectCollection finentry = realentry1.getDynamicObjectCollection("finentry");
  176. DynamicObject finentry1 = finentry.addNew();
  177. finentry1.set("depreuse", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认
  178. finentry1.set("fincard", fin);
  179. finentry1.set("bizdate", info.getDate("nckd_date_out"));
  180. }
  181. //执行保存-提交-审核
  182. OperationResult saveResult = SaveServiceHelper.saveOperate("fa_change_dept", new DynamicObject[]{changeDept}, OperateOption.create());
  183. if (saveResult.isSuccess()) {
  184. info.set("nckd_flag", "1");
  185. SaveServiceHelper.save(new DynamicObject[]{info});
  186. this.operationResult.setShowMessage(true);
  187. this.operationResult.setSuccess(true);
  188. this.operationResult.setMessage("下推资产变更单成功");
  189. OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_change_dept",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
  190. OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_change_dept",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
  191. }else {
  192. this.operationResult.setShowMessage(true);
  193. this.operationResult.setSuccess(false);
  194. this.operationResult.setMessage("下推资产变更单失败");
  195. }
  196. }
  197. else if ("2".equals(dispatchType)) {
  198. DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld");
  199. busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期
  200. busProcess.set("nckd_detailtype", "D");//业务类型 D:报废
  201. busProcess.set("nckd_costcompany", getOrg(info.getString("nckd_org_in")));//资产组织
  202. busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由
  203. busProcess.set("nckd_applierv", getUser(info.getString("nckd_user_out")));//制单人
  204. //制单信息
  205. busProcess.set("creator", getUser(info.getString("nckd_user_out")));//创建人
  206. busProcess.set("createtime", info.getDate("nckd_date_out"));//创建时间
  207. busProcess.set("modifier", getUser(info.getString("nckd_user_out")));//修改人
  208. busProcess.set("modifytime", info.getDate("nckd_date_out"));//修改时间
  209. busProcess.set("auditor", getUser(info.getString("nckd_user_out")));//审核人
  210. busProcess.set("auditdate", info.getDate("nckd_date_out"));//审核时间
  211. busProcess.set("billstatus", "A");//状态
  212. QFilter filter = new QFilter("number", QCP.equals,"A00100101900240700007");
  213. cardFilter.and("isbak", QCP.equals, "0");
  214. DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter});
  215. for (int c = 0; c < card.length; c++) {
  216. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
  217. //创建报废明细分录
  218. DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6");
  219. DynamicObject entry1 = entryEntity.addNew();
  220. entry1.set("nckd_basedatafield", cardInfo);//资产编码
  221. Integer count = Integer.valueOf(info.getString("nckd_count"));
  222. entry1.set("nckd_integerfield", count);//报废数量
  223. }
  224. //执行保存-提交-审核
  225. OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create());
  226. if (saveResult.isSuccess()){
  227. info.set("nckd_flag", "1");
  228. SaveServiceHelper.save(new DynamicObject[]{info});
  229. this.operationResult.setShowMessage(true);
  230. this.operationResult.setSuccess(true);
  231. this.operationResult.setMessage("下推业务处理单成功");
  232. OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create());
  233. OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create());
  234. }else {
  235. this.operationResult.setShowMessage(true);
  236. this.operationResult.setSuccess(false);
  237. this.operationResult.setMessage("下推业务处理单失败");
  238. }
  239. }
  240. }
  241. }
  242. }
  243. }
  244. /**
  245. * @description 查询用户表获取用户
  246. * @param eUser
  247. * @return Long
  248. */
  249. private DynamicObject getUser(String eUser) {
  250. QFilter filter = new QFilter("number", QCP.in, eUser);
  251. DynamicObject[] user = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {filter});
  252. if (user.length > 0) {
  253. DynamicObject userInfo = BusinessDataServiceHelper.loadSingle(user[0].getPkValue(), user[0].getDynamicObjectType().getName());
  254. return userInfo;
  255. }
  256. return null;
  257. }
  258. /**
  259. * @description 查询组织对照表获取组织id
  260. * @param eOrgId
  261. * @return Long
  262. */
  263. private Long getOrg(String eOrgId) {
  264. QFilter orgFilter = new QFilter("nckd_e_org", QCP.equals,eOrgId);
  265. DynamicObject[] orgControl = BusinessDataServiceHelper.load("nckd_base_org_ext","id",new QFilter[] {orgFilter});
  266. if (orgControl.length > 0) {
  267. DynamicObject orgControlInfo = BusinessDataServiceHelper.loadSingle(orgControl[0].getPkValue(), orgControl[0].getDynamicObjectType().getName());
  268. String number = orgControlInfo.getString("nckd_org_number");
  269. QFilter filter = new QFilter("number", QCP.equals,number);
  270. DynamicObject[] org = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {filter});
  271. if (org.length > 0) {
  272. DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[0].getPkValue(), org[0].getDynamicObjectType().getName());
  273. return orgInfo.getLong("id");
  274. }
  275. }
  276. return null;
  277. }
  278. /**
  279. * @description 查询财务卡片
  280. * @param realCardId
  281. */
  282. private DynamicObject queryFinCard(Long realCardId) {
  283. QFilter cardFilter = new QFilter("realcardmasterid", QCP.equals,realCardId);
  284. DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cardFilter});
  285. for (int c = 0; c < card.length; c++) {
  286. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
  287. return cardInfo;
  288. }
  289. return null;
  290. }
  291. /**
  292. * @description 查询折旧用途
  293. * @param id
  294. */
  295. private DynamicObject queryDepreuse(Long id) {
  296. QFilter orgQFilter= new QFilter("id", QCP.equals,id);
  297. DynamicObject[] depreuse = BusinessDataServiceHelper.load("fa_depreuse","id",new QFilter[] {orgQFilter});
  298. for (int c = 0; c < depreuse.length; c++) {
  299. DynamicObject depreuseInfo = BusinessDataServiceHelper.loadSingle(depreuse[c].getPkValue(), depreuse[c].getDynamicObjectType().getName());
  300. return depreuseInfo;
  301. }
  302. return null;
  303. }
  304. /**
  305. * @description 查询变更类型
  306. * @param id
  307. */
  308. private DynamicObject queryChangeType(Long id) {
  309. QFilter orgQFilter= new QFilter("id", QCP.equals,id);
  310. DynamicObject[] changeType = BusinessDataServiceHelper.load("fa_change_type","id",new QFilter[] {orgQFilter});
  311. for (int c = 0; c < changeType.length; c++) {
  312. DynamicObject changeInfo = BusinessDataServiceHelper.loadSingle(changeType[c].getPkValue(), changeType[c].getDynamicObjectType().getName());
  313. return changeInfo;
  314. }
  315. return null;
  316. }
  317. /**
  318. * @description 查询组织
  319. * @param orgId
  320. */
  321. private DynamicObject queryOrg(Long orgId) {
  322. QFilter orgQFilter= new QFilter("id", QCP.equals,orgId);
  323. DynamicObject[] org = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {orgQFilter});
  324. for (int c = 0; c < org.length; c++) {
  325. DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[c].getPkValue(), org[c].getDynamicObjectType().getName());
  326. return orgInfo;
  327. }
  328. return null;
  329. }
  330. }