BusinessProcessingPlugin.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. package fi.em.formPlugin;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import kd.bos.dataentity.entity.DynamicObject;
  5. import kd.bos.dataentity.serialization.SerializationUtils;
  6. import kd.bos.exception.KDBizException;
  7. import kd.bos.form.control.Control;
  8. import kd.bos.form.control.EntryGrid;
  9. import kd.bos.form.events.AfterDoOperationEventArgs;
  10. import kd.bos.form.plugin.AbstractFormPlugin;
  11. import kd.bos.orm.query.QCP;
  12. import kd.bos.orm.query.QFilter;
  13. import kd.bos.servicehelper.BusinessDataServiceHelper;
  14. import kd.sdk.plugin.Plugin;
  15. import org.apache.commons.lang3.StringUtils;
  16. import java.math.BigDecimal;
  17. import java.util.*;
  18. public class BusinessProcessingPlugin extends AbstractFormPlugin implements Plugin {
  19. private final static String KEY_OK = "btnok";//页面取消按钮标识
  20. private final static String KEY_CANCEL = "btncancel";//页面取消按钮标识
  21. private final static String KEY_SEARCH = "search";//动态表单查询按钮操作11
  22. private final static String FORMID_ENTRY = "nckd_entryentity";//动态表单单据体标识
  23. private static String nckd_agentparameter = "nckd_agentparameter";//动因参数基础资料
  24. /**
  25. * 页面点击事件
  26. *
  27. * @param evt
  28. */
  29. @Override
  30. public void click(EventObject evt) {
  31. super.click(evt);
  32. //获取被点击的控件对象
  33. Control source = (Control) evt.getSource();
  34. String pageId = this.getView().getPageId();
  35. if (StringUtils.equals(source.getKey(), KEY_OK)) {
  36. String listStr = this.getPageCache().get(pageId);
  37. if (StringUtils.isNotBlank(listStr)){
  38. JSONArray reJa = new JSONArray();
  39. EntryGrid entryGrid = this.getView().getControl(FORMID_ENTRY);
  40. int[] selectRows = entryGrid.getSelectRows();
  41. if (selectRows.length<=0){
  42. this.getView().showMessage("请先选择一条数据!");
  43. return;
  44. }
  45. JSONArray infoJa = SerializationUtils.fromJsonString(listStr, JSONArray.class);
  46. for(int i=0;i<selectRows.length;i++){
  47. JSONObject reJo = infoJa.getJSONObject(selectRows[i]);
  48. reJa.add(reJo);
  49. }
  50. HashMap<String, String> map = new HashMap<>();
  51. map.put("reJaStr", reJa.toJSONString());
  52. this.getView().returnDataToParent(map);
  53. }
  54. this.getView().close();
  55. } else if (StringUtils.equals(source.getKey(), KEY_CANCEL)) {
  56. //被点击控件为取消则设置返回值为空并关闭页面(在页面关闭回调方法中必须验证返回值不为空,否则会报空指针)
  57. this.getView().returnDataToParent(null);
  58. this.getView().close();
  59. } else {
  60. this.getView().returnDataToParent(null);
  61. this.getView().close();
  62. }
  63. }
  64. @Override
  65. public void registerListener(EventObject e) {
  66. super.registerListener(e);
  67. //页面确认按钮和取消按钮添加监听
  68. this.addClickListeners(KEY_OK, KEY_CANCEL);
  69. }
  70. @Override
  71. public void afterCreateNewData(EventObject e) {
  72. super.afterBindData(e);
  73. // DynamicObject period = (DynamicObject) this.getModel().getValue("nckd_typeagent");
  74. //获取父页面传入数据
  75. Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
  76. String payeenamev = (String) customParams.get("payeenamev");
  77. String controls = (String) customParams.get("controls");
  78. String billtype = (String) customParams.get("billtype");
  79. String orgnumber = (String) customParams.get("orgnumber");
  80. if (payeenamev == null || payeenamev.isEmpty()) {
  81. throw new KDBizException("收款处理付款人为空!");
  82. }
  83. if ("cysgzmx".equals(controls)) {
  84. List<JSONObject> resdate = new ArrayList<>();
  85. //历史数据清除1111
  86. this.getModel().deleteEntryData("nckd_entryentity");
  87. //构建查询应收挂账单参数
  88. QFilter nckd_orgamountFilter = new QFilter("unsettleamount", QCP.large_than, new BigDecimal(0));
  89. nckd_orgamountFilter.and("billstatus", QCP.equals, "C");
  90. nckd_orgamountFilter.and("payeename", QCP.like, payeenamev);
  91. nckd_orgamountFilter.and("unsettleamount", QCP.is_notnull, "");
  92. nckd_orgamountFilter.and("org.number", QCP.equals, orgnumber);
  93. DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("nckd_cas_arbill", "id", new QFilter[]{nckd_orgamountFilter});
  94. for (int c = 0; c < nckd_cas_arbill.length; c++) {
  95. //当前单头
  96. DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
  97. //单据编号
  98. String billno = dynamicObject.getString("billno");
  99. //应收挂账日期
  100. Date bizdate = dynamicObject.getDate("bizdate");
  101. Date expectdate = dynamicObject.getDate("expectdate");
  102. //应收挂账金额/冲销金额
  103. BigDecimal settleamount = dynamicObject.getBigDecimal("unsettleamount");
  104. for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry")) {
  105. DynamicObject eMaterial = entryentity.getDynamicObject("e_material");//物料
  106. DynamicObject eExpenseitem = entryentity.getDynamicObject("e_expenseitem");//费用项目
  107. DynamicObject settleorg = entryentity.getDynamicObject("settleorg");//结算组织
  108. BigDecimal eActamt = entryentity.getBigDecimal("e_actamt");//实付金额
  109. DynamicObject costcenter = entryentity.getDynamicObject("costcenter");//成本中心
  110. DynamicObject productline = entryentity.getDynamicObject("productline");//产品线
  111. BigDecimal eDiscountamt = entryentity.getBigDecimal("e_discountamt");//现金折扣
  112. DynamicObject project = entryentity.getDynamicObject("project");//项目
  113. DynamicObject eFundflowitem = entryentity.getDynamicObject("e_fundflowitem");//资金用途
  114. String contractnumber = entryentity.getString("contractnumber");//合同
  115. int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
  116. //赋值给新增分录
  117. this.getModel().setValue("nckd_cysnumber", billno, rowIndex);
  118. this.getModel().setValue("nckd_cysdata", bizdate, rowIndex);
  119. this.getModel().setValue("nckd_cysgzbalance", settleamount, rowIndex);
  120. this.getModel().setValue("nckd_cyscxbalance", settleamount, rowIndex);
  121. this.getModel().setValue("nckd_datefield", expectdate, rowIndex);
  122. QFilter nckd_cysfyxmFilter = new QFilter("name", QCP.equals,payeenamev);
  123. DynamicObject nckd_cyffyxm = BusinessDataServiceHelper.loadSingle("bd_supplier","id",new QFilter[] {nckd_cysfyxmFilter});
  124. this.getModel().setValue("nckd_e_fundflowitem", nckd_cyffyxm, rowIndex);
  125. //分录数据
  126. if (eMaterial != null) {
  127. this.getModel().setValue("nckd_materielfield", eMaterial, rowIndex);
  128. }
  129. if (eExpenseitem != null) {
  130. this.getModel().setValue("nckd_cysfyxm", eExpenseitem, rowIndex);
  131. }
  132. if (settleorg != null) {
  133. this.getModel().setValue("nckd_cyssection", settleorg, rowIndex);
  134. }
  135. if (eActamt != null) {
  136. this.getModel().setValue("nckd_cyssfje", eActamt, rowIndex);
  137. }
  138. if (costcenter != null) {
  139. this.getModel().setValue("nckd_costcenter", costcenter, rowIndex);
  140. }
  141. if (productline != null) {
  142. this.getModel().setValue("nckd_productline", productline, rowIndex);
  143. }
  144. if (eDiscountamt != null) {
  145. this.getModel().setValue("nckd_e_discountamt", eDiscountamt, rowIndex);
  146. }
  147. if (project != null) {
  148. this.getModel().setValue("nckd_project", project, rowIndex);
  149. }
  150. if (eFundflowitem != null) {
  151. this.getModel().setValue("nckd_e_fundflowitem", eFundflowitem, rowIndex);
  152. }
  153. if (contractnumber != null) {
  154. this.getModel().setValue("nckd_contractnumber", contractnumber, rowIndex);
  155. }
  156. //将选中的数据放到缓存中
  157. JSONObject obj = new JSONObject();
  158. obj.put("nckd_cysnumber", billno);
  159. obj.put("nckd_cysdata", bizdate);
  160. obj.put("expectdate", expectdate);
  161. if (settleorg != null) {
  162. obj.put("settleorg", settleorg.getString("number"));
  163. }
  164. if (eExpenseitem != null) {
  165. obj.put("nckd_cysfyxm", eExpenseitem.getString("number"));
  166. } else {
  167. obj.put("nckd_cysfyxm", "");
  168. }
  169. obj.put("nckd_cysgzbalance", settleamount);
  170. obj.put("controls", controls);
  171. obj.put("billtype", billtype);
  172. resdate.add(obj);
  173. }
  174. }
  175. String pageId = this.getView().getPageId();
  176. String listStr = SerializationUtils.toJsonString(resdate);
  177. this.getPageCache().put(pageId, listStr);
  178. } else if ("cyfgzmx".equals(controls)) {
  179. List<JSONObject> resdate = new ArrayList<>();
  180. //历史数据清除
  181. this.getModel().deleteEntryData("nckd_entryentity");
  182. //构建查询应收挂账单参数
  183. QFilter nckd_orgamountFilter = new QFilter("asstact.number", QCP.equals, payeenamev);
  184. nckd_orgamountFilter.and("billstatus", QCP.equals, "C");
  185. nckd_orgamountFilter.and("unsettleamount", QCP.large_than, new BigDecimal(0));
  186. nckd_orgamountFilter.and("unsettleamount", QCP.is_notnull, "");
  187. nckd_orgamountFilter.and("org.number", QCP.equals, orgnumber);
  188. DynamicObject[] nckd_cas_arbill = BusinessDataServiceHelper.load("ap_finapbill", "id", new QFilter[]{nckd_orgamountFilter});
  189. for (int c = 0; c < nckd_cas_arbill.length; c++) {
  190. //当前单头
  191. DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(nckd_cas_arbill[c].getPkValue(), nckd_cas_arbill[c].getDynamicObjectType().getName());
  192. //单据编号
  193. String billno = dynamicObject.getString("billno");
  194. //应收挂账日期
  195. Date bizdate = dynamicObject.getDate("bizdate");
  196. Date duedate = dynamicObject.getDate("duedate");
  197. DynamicObject org = dynamicObject.getDynamicObject("org");
  198. long id = dynamicObject.getLong("id");
  199. //应收挂账金额/冲销金额
  200. BigDecimal settleamount = dynamicObject.getBigDecimal("unsettleamount");
  201. for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("detailentry")) {
  202. DynamicObject material = entryentity.getDynamicObject("material");
  203. String spectype = entryentity.getString("spectype");
  204. DynamicObject expenseitem = entryentity.getDynamicObject("expenseitem");
  205. DynamicObject measureunit = entryentity.getDynamicObject("measureunit");
  206. BigDecimal quantity = entryentity.getBigDecimal("quantity");
  207. BigDecimal price = entryentity.getBigDecimal("price");
  208. DynamicObject taxrateid = entryentity.getDynamicObject("taxrateid");
  209. String discountmode = entryentity.getString("discountmode");
  210. int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
  211. //赋值给新增分录
  212. this.getModel().setValue("nckd_cyfnumber", billno, rowIndex);
  213. this.getModel().setValue("nckd_cyfdata", bizdate, rowIndex);
  214. this.getModel().setValue("nckd_datefield", duedate, rowIndex);
  215. this.getModel().setValue("nckd_cyforg", org, rowIndex);
  216. this.getModel().setValue("nckd_cyfgzbalance", settleamount, rowIndex);
  217. this.getModel().setValue("nckd_cyfcxbalance", settleamount, rowIndex);
  218. this.getModel().setValue("nckd_billid", id, rowIndex);
  219. QFilter nckd_cysfyxmFilter = new QFilter("number", QCP.equals,payeenamev);
  220. DynamicObject nckd_cyffyxm = BusinessDataServiceHelper.loadSingle("bd_supplier","id",new QFilter[] {nckd_cysfyxmFilter});
  221. this.getModel().setValue("nckd_basedatafield", nckd_cyffyxm, rowIndex);
  222. //分录字段
  223. if (material != null) {
  224. this.getModel().setValue("nckd_materielfield", material, rowIndex);
  225. }
  226. this.getModel().setValue("nckd_spectype", spectype, rowIndex);
  227. if (expenseitem != null) {
  228. this.getModel().setValue("nckd_expenseitem", expenseitem, rowIndex);
  229. }
  230. if (measureunit != null) {
  231. this.getModel().setValue("nckd_measureunit", measureunit, rowIndex);
  232. }
  233. this.getModel().setValue("nckd_quantity", quantity, rowIndex);
  234. this.getModel().setValue("nckd_price", price, rowIndex);
  235. if (taxrateid != null) {
  236. this.getModel().setValue("nckd_taxrateid", taxrateid, rowIndex);
  237. }
  238. this.getModel().setValue("nckd_discountmode", discountmode, rowIndex);
  239. //将选中的数据放到缓存中
  240. JSONObject obj = new JSONObject();
  241. obj.put("nckd_cyfnumber", billno);
  242. obj.put("nckd_cyfwldw", "");
  243. obj.put("nckd_cyfdata", bizdate);
  244. obj.put("duedate", duedate);
  245. obj.put("id", id);
  246. obj.put("nckd_cyfgzbalance", settleamount);
  247. obj.put("settleorg", org.getString("number"));
  248. if (expenseitem != null) {
  249. obj.put("nckd_cyffyxm", expenseitem.getString("number"));
  250. } else {
  251. obj.put("nckd_cyffyxm", "");
  252. }
  253. obj.put("controls", controls);
  254. obj.put("billtype", billtype);
  255. resdate.add(obj);
  256. }
  257. }
  258. String pageId = this.getView().getPageId();
  259. String listStr = SerializationUtils.toJsonString(resdate);
  260. this.getPageCache().put(pageId, listStr);
  261. } else if ("pzht".equals(controls)) {
  262. List<JSONObject> resdate = new ArrayList<>();
  263. //历史数据清除
  264. this.getModel().deleteEntryData("nckd_entryentity");
  265. //构建查询应收挂账单参数
  266. QFilter nckd_orgamountFilter = new QFilter("org.number", QCP.equals,orgnumber);
  267. nckd_orgamountFilter.and("status", QCP.equals, "C");
  268. nckd_orgamountFilter.and("nckd_amountfield1", QCP.large_than,0);
  269. nckd_orgamountFilter.and("leaser.number", QCP.equals, payeenamev);
  270. DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("fa_lease_contract", "id", new QFilter[]{nckd_orgamountFilter});
  271. for (int c = 0; c < fa_lease_contract.length; c++) {
  272. //当前单头
  273. DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
  274. //核算组织
  275. DynamicObject org = dynamicObject.getDynamicObject("org");
  276. //合同号
  277. String number = dynamicObject.getString("number");
  278. //合同名称
  279. String name = dynamicObject.getString("name");
  280. //承租方
  281. DynamicObject leaser = dynamicObject.getDynamicObject("leaser");
  282. //资产名称
  283. String assetname = dynamicObject.getString("assetname");
  284. //合同签订日期
  285. Date contrsigndate = dynamicObject.getDate("contrsigndate");
  286. //收款余额/冲销金额
  287. BigDecimal nckdAmountfield1 = dynamicObject.getBigDecimal("nckd_amountfield1");
  288. int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
  289. //赋值给新增分录
  290. this.getModel().setValue("nckd_pzhtorg", org, rowIndex);
  291. this.getModel().setValue("nckd_pzhthth", number, rowIndex);
  292. this.getModel().setValue("nckd_pzhtname", name, rowIndex);
  293. this.getModel().setValue("nckd_pzhtczf", leaser, rowIndex);
  294. this.getModel().setValue("nckd_pzhtzcname", assetname, rowIndex);
  295. this.getModel().setValue("nckd_ppzhtdata", contrsigndate, rowIndex);
  296. this.getModel().setValue("nckd_pzhtskbalance", nckdAmountfield1, rowIndex);
  297. this.getModel().setValue("nckd_pzhtcxbalance", nckdAmountfield1, rowIndex);
  298. //将选中的数据放到缓存中
  299. JSONObject obj = new JSONObject();
  300. obj.put("nckd_pzhtorg", org.getString("number"));
  301. obj.put("nckd_pzhthth", number);
  302. obj.put("nckd_pzhtname", name);
  303. obj.put("nckd_pzhtczf", leaser.getString("number"));
  304. obj.put("nckd_pzhtzcname", assetname);
  305. obj.put("nckd_ppzhtdata", contrsigndate);
  306. obj.put("nckd_pzhtskbalance", nckdAmountfield1);
  307. obj.put("nckd_pzhtcxbalance", nckdAmountfield1);
  308. obj.put("controls", controls);
  309. obj.put("billtype", billtype);
  310. resdate.add(obj);
  311. }
  312. String pageId = this.getView().getPageId();
  313. String listStr = SerializationUtils.toJsonString(resdate);
  314. this.getPageCache().put(pageId, listStr);
  315. } else if ("skskzh".equals(controls)) {
  316. List<JSONObject> resdate = new ArrayList<>();
  317. //历史数据清除
  318. this.getModel().deleteEntryData("nckd_entryentity");
  319. //构建查询供应商参数
  320. QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals, payeenamev);
  321. DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("bd_supplier", "id", new QFilter[]{nckd_orgamountFilter});
  322. for (int c = 0; c < fa_lease_contract.length; c++) {
  323. //当前单头
  324. DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
  325. for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry_bank")) {
  326. String bankaccount = entryentity.getString("bankaccount");
  327. String accountname = entryentity.getString("accountname");
  328. int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
  329. //赋值给新增分录
  330. this.getModel().setValue("nckd_bankaccount", bankaccount, rowIndex);
  331. this.getModel().setValue("nckd_accountname", accountname, rowIndex);
  332. //将选中的数据放到缓存中
  333. JSONObject obj = new JSONObject();
  334. obj.put("nckd_bankaccount", bankaccount);
  335. obj.put("nckd_accountname", accountname);
  336. obj.put("controls", controls);
  337. obj.put("billtype", billtype);
  338. resdate.add(obj);
  339. }
  340. String pageId = this.getView().getPageId();
  341. String listStr = SerializationUtils.toJsonString(resdate);
  342. this.getPageCache().put(pageId, listStr);
  343. }
  344. }else if ("fkfkzh".equals(controls)) {
  345. List<JSONObject> resdate = new ArrayList<>();
  346. //历史数据清除
  347. this.getModel().deleteEntryData("nckd_entryentity");
  348. //构建查询供应商参数
  349. QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals, payeenamev);
  350. DynamicObject[] fa_lease_contract = BusinessDataServiceHelper.load("bd_supplier", "id", new QFilter[]{nckd_orgamountFilter});
  351. for (int c = 0; c < fa_lease_contract.length; c++) {
  352. //当前单头
  353. DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(fa_lease_contract[c].getPkValue(), fa_lease_contract[c].getDynamicObjectType().getName());
  354. for (DynamicObject entryentity : dynamicObject.getDynamicObjectCollection("entry_bank")) {
  355. String bankaccount = entryentity.getString("bankaccount");
  356. String accountname = entryentity.getString("accountname");
  357. int rowIndex = this.getModel().createNewEntryRow("nckd_entryentity");
  358. //赋值给新增分录
  359. this.getModel().setValue("nckd_bankaccount", bankaccount, rowIndex);
  360. this.getModel().setValue("nckd_accountname", accountname, rowIndex);
  361. //将选中的数据放到缓存中
  362. JSONObject obj = new JSONObject();
  363. obj.put("nckd_bankaccount", bankaccount);
  364. obj.put("nckd_accountname", accountname);
  365. obj.put("controls", controls);
  366. obj.put("billtype", billtype);
  367. resdate.add(obj);
  368. }
  369. String pageId = this.getView().getPageId();
  370. String listStr = SerializationUtils.toJsonString(resdate);
  371. this.getPageCache().put(pageId, listStr);
  372. }
  373. }
  374. }
  375. }