SupplierAddnewWebApiPlugin.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. package bamp.basedata.webapi;
  2. import kd.bos.dataentity.OperateOption;
  3. import kd.bos.dataentity.entity.DynamicObject;
  4. import kd.bos.dataentity.entity.DynamicObjectCollection;
  5. import kd.bos.entity.operate.result.OperateErrorInfo;
  6. import kd.bos.entity.operate.result.OperationResult;
  7. import kd.bos.entity.validate.ValidateResult;
  8. import kd.bos.entity.validate.ValidateResultCollection;
  9. import kd.bos.logging.Log;
  10. import kd.bos.logging.LogFactory;
  11. import kd.bos.openapi.common.custom.annotation.ApiController;
  12. import kd.bos.openapi.common.custom.annotation.ApiMapping;
  13. import kd.bos.openapi.common.custom.annotation.ApiParam;
  14. import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
  15. import kd.bos.openapi.common.result.CustomApiResult;
  16. import kd.bos.orm.query.QCP;
  17. import kd.bos.orm.query.QFilter;
  18. import kd.bos.servicehelper.BusinessDataServiceHelper;
  19. import kd.bos.servicehelper.operation.OperationServiceHelper;
  20. import kd.bos.servicehelper.operation.SaveServiceHelper;
  21. import java.io.Serializable;
  22. import java.text.ParseException;
  23. import java.text.SimpleDateFormat;
  24. import java.util.*;
  25. /*
  26. * 供应商新增插件
  27. * wangj 2025-02-05
  28. * 主要功能:新增主数据供应商
  29. */
  30. @SuppressWarnings("all")
  31. @ApiController(value = "open", desc = "供应商新增接口插件")
  32. @ApiMapping(value = "/bd_supplier")
  33. public class SupplierAddnewWebApiPlugin implements Serializable {
  34. int successCount = 0;
  35. int failCount = 0;
  36. private static final Log log = LogFactory.getLog(SupplierAddnewWebApiPlugin.class);
  37. @ApiPostMapping(value = "supplier_addnew", desc = "同步接口")
  38. public CustomApiResult<Map<String, Object>> supplier_addnew(@ApiParam(value = "提交参数") List<Map<String, Object>> data ) {
  39. CustomApiResult customApiResult = new CustomApiResult();
  40. customApiResult.setStatus(true);
  41. customApiResult.setErrorCode("0");
  42. try {
  43. Map resultDatasMap = new HashMap();
  44. List<Map> resultDatas = new ArrayList<Map>();
  45. for(Map param : data){
  46. Map resultData = new HashMap();
  47. try {
  48. doUpdateSupplier(param,resultData);
  49. }catch (Exception e) {
  50. resultData.put("id","");
  51. resultData.put("errors",e.getMessage());
  52. resultData.put("billStatus",false);
  53. failCount ++;
  54. }
  55. resultDatas.add(resultData);
  56. }
  57. resultDatasMap.put("failCount",failCount);
  58. if(failCount>0){
  59. customApiResult.setStatus(false);
  60. customApiResult.setErrorCode("603");
  61. }
  62. resultDatasMap.put("successCount",successCount);
  63. resultDatasMap.put("result",resultDatas);
  64. customApiResult.setData(resultDatasMap);
  65. } catch (Exception e) {
  66. customApiResult.setStatus(false);
  67. customApiResult.setMessage(e.getMessage());
  68. customApiResult.setErrorCode("400");
  69. }
  70. return customApiResult;
  71. }
  72. private void doUpdateSupplier(Map param, Map resultData) throws ParseException {
  73. String errorMsg = "";
  74. //创建新用户
  75. DynamicObject supplierObj = null;
  76. if(param.get("number")!=null){
  77. QFilter qFilter_number = new QFilter("number", QCP.equals,param.get("number"));
  78. DynamicObject[] customer = BusinessDataServiceHelper.load("bd_supplier","id",new QFilter[]{qFilter_number});
  79. if(customer.length>0){//防止新增失败情况留存的历史数据
  80. supplierObj = BusinessDataServiceHelper.loadSingle(customer[0].getPkValue(),"bd_supplier");
  81. if(param.get("enable")!=null && !"".equals(param.get("enable")) && "0".equals(param.get("enable"))){//使用状态变为禁用
  82. //禁用人
  83. setDynamicField(true,"modifier_number","disabler","bos_user",param,resultData,supplierObj);
  84. //禁用时间
  85. setDateField(true,"modifytime","disabledate",param,resultData,supplierObj);
  86. //使用状态
  87. supplierObj.set("enable","0");
  88. }
  89. //更新供应商子码基础资料
  90. if(param.get("pznm_zmentry")!=null){
  91. List<Map> mapEntrys = (List<Map>) param.get("pznm_zmentry");
  92. doSetEntry(mapEntrys,resultData,supplierObj);
  93. }
  94. }else{
  95. supplierObj = BusinessDataServiceHelper.newDynamicObject("bd_supplier");
  96. //数据状态
  97. supplierObj.set("status","A");
  98. //使用状态
  99. supplierObj.set("enable","1");
  100. }
  101. resultData.put("number",param.get("number"));
  102. }
  103. //供应商编码
  104. setTextField(true,"number","number",param,resultData,supplierObj);
  105. //供应商名称
  106. setTextField(true,"name","name",param,resultData,supplierObj);
  107. //创建人
  108. setDynamicField(true,"creator_number","creator","bos_user",param,resultData,supplierObj);
  109. //创建时间
  110. setDateField(true,"createtime","createtime",param,resultData,supplierObj);
  111. //修改人
  112. setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user",param,resultData,supplierObj);
  113. //修改时间
  114. setDateField(true,"modifytime","modifytime",param,resultData,supplierObj);
  115. //审核人
  116. setDynamicField(true,"approverid_number","pznm_auditor_xh","bos_user",param,resultData,supplierObj);
  117. //审核日期
  118. setDateField(true,"approvedate","approvedate",param,resultData,supplierObj);
  119. //创建组织
  120. setDynamicField(true,"createorg_number","createorg","bos_org",param,resultData,supplierObj);
  121. //控制策略
  122. setTextField(true,"ctrlstrategy","ctrlstrategy",param,resultData,supplierObj);
  123. //详细地址
  124. setTextField(false,"bizpartner_address","bizpartner_address",param,resultData,supplierObj);
  125. //统一社会信用代码
  126. setTextField(false,"societycreditcode","societycreditcode",param,resultData,supplierObj);
  127. //是否关联单位
  128. setTextField(false,"pznm_isrelateunit","pznm_isrelateunit",param,resultData,supplierObj);
  129. //内部业务单元
  130. setDynamicField(false,"internal_company_number","internal_company","bos_org",param,resultData,supplierObj);
  131. //是否内部单位
  132. setTextField(false,"chkisinternalcompany","chkisinternalcompany",param,resultData,supplierObj);
  133. //供应商分类
  134. if(param.get("entry_groupstandard")!=null){
  135. List<Map> mapEntrys = (List<Map>) param.get("entry_groupstandard");
  136. doSetGroupEntry(mapEntrys,resultData,supplierObj);
  137. }
  138. //银行信息
  139. if(param.get("entry_bank")!=null){
  140. List<Map> mapEntrys = (List<Map>) param.get("entry_bank");
  141. doSetBankEntry(mapEntrys,resultData,supplierObj);
  142. }
  143. //委托人分录
  144. if(param.get("pznm_wtrentry")!=null){
  145. List<Map> mapEntrys = (List<Map>) param.get("pznm_wtrentry");
  146. doSetWtrEntry(mapEntrys,resultData,supplierObj);
  147. }
  148. //控制状态分录
  149. if(param.get("pznm_kzztentry")!=null){
  150. List<Map> mapEntrys = (List<Map>) param.get("pznm_kzztentry");
  151. doSetKzztentry(mapEntrys,resultData,supplierObj);
  152. }
  153. if(resultData.get("errors")!=null && !"".equals(resultData.get("errors"))){
  154. List errors = new ArrayList();
  155. errors.add(resultData.get("errors"));
  156. resultData.put("id","");
  157. resultData.put("errors",errors);
  158. resultData.put("billStatus",false);
  159. failCount ++;
  160. }else{
  161. //保存供应商对象
  162. String status = supplierObj.getString("status");
  163. if("A".equals(status)){//暂存,走正常逻辑
  164. doAddNew(resultData,supplierObj,param);
  165. }else if("B".equals(status)){//已提交,走update和审核
  166. doUpdateAndAudit(resultData,supplierObj);
  167. }else if("C".equals(status)){//已审核,走修改逻辑
  168. doUpdate(resultData,supplierObj);
  169. }
  170. }
  171. }
  172. private void doUpdate(Map resultData, DynamicObject supplierObj) {
  173. SaveServiceHelper.update(supplierObj);
  174. resultData.put("errors",new ArrayList());
  175. resultData.put("id",supplierObj.getPkValue());
  176. resultData.put("billStatus", true);
  177. successCount++;
  178. }
  179. private void doUpdateAndAudit(Map resultData, DynamicObject supplierObj) {
  180. SaveServiceHelper.update(supplierObj);
  181. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "bd_supplier",
  182. new DynamicObject[]{supplierObj}, OperateOption.create());
  183. //执行供应商对应组织分配
  184. if(result_audit.isSuccess()){//保存供应商成功
  185. resultData.put("errors",new ArrayList());
  186. resultData.put("id",result_audit.getSuccessPkIds().get(0));
  187. resultData.put("billStatus", true);
  188. successCount++;
  189. }else{//提交供应商失败
  190. List errors = new ArrayList();
  191. ValidateResultCollection validateResults = result_audit.getValidateResult();
  192. List<ValidateResult> validateResultList = validateResults.getValidateErrors();
  193. for(ValidateResult validateResult : validateResultList){
  194. List<OperateErrorInfo> allErrorInfos = validateResult.getAllErrorInfo();
  195. for(OperateErrorInfo allErrorInfo : allErrorInfos){
  196. errors.add(allErrorInfo.getMessage());
  197. }
  198. }
  199. resultData.put("errors",errors);
  200. resultData.put("id","");
  201. resultData.put("billStatus", false);
  202. failCount ++;
  203. }
  204. }
  205. private void doAddNew(Map resultData, DynamicObject supplierObj, Map param) {
  206. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", "bd_supplier",
  207. new DynamicObject[]{supplierObj}, OperateOption.create());
  208. if(result_submit.isSuccess()){
  209. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "bd_supplier",
  210. new DynamicObject[]{supplierObj}, OperateOption.create());
  211. //执行供应商对应组织分配
  212. if(result_audit.isSuccess()){//保存供应商成功
  213. //更新供应商子码基础资料
  214. if(param.get("pznm_zmentry")!=null){
  215. List<Map> mapEntrys = (List<Map>) param.get("pznm_zmentry");
  216. doSetEntry(mapEntrys,resultData,supplierObj);
  217. }
  218. if(resultData.get("errors")!=null && !"".equals(resultData.get("errors"))){
  219. List errors = new ArrayList();
  220. errors.add(resultData.get("errors"));
  221. resultData.put("errors",errors);
  222. resultData.put("id","");
  223. resultData.put("billStatus", false);
  224. failCount ++;
  225. }else{
  226. resultData.put("errors",new ArrayList());
  227. resultData.put("id",result_audit.getSuccessPkIds().get(0));
  228. resultData.put("billStatus", true);
  229. successCount++;
  230. }
  231. }else{//提交供应商失败
  232. List errors = new ArrayList();
  233. ValidateResultCollection validateResults = result_audit.getValidateResult();
  234. List<ValidateResult> validateResultList = validateResults.getValidateErrors();
  235. for(ValidateResult validateResult : validateResultList){
  236. List<OperateErrorInfo> allErrorInfos = validateResult.getAllErrorInfo();
  237. for(OperateErrorInfo allErrorInfo : allErrorInfos){
  238. errors.add(allErrorInfo.getMessage());
  239. }
  240. }
  241. resultData.put("errors",errors);
  242. resultData.put("id","");
  243. resultData.put("billStatus", false);
  244. failCount ++;
  245. }
  246. }else{
  247. List errors = new ArrayList();
  248. ValidateResultCollection validateResults = result_submit.getValidateResult();
  249. List<ValidateResult> validateResultList = validateResults.getValidateErrors();
  250. for(ValidateResult validateResult : validateResultList){
  251. List<OperateErrorInfo> allErrorInfos = validateResult.getAllErrorInfo();
  252. for(OperateErrorInfo allErrorInfo : allErrorInfos){
  253. errors.add(allErrorInfo.getMessage());
  254. }
  255. }
  256. resultData.put("errors",errors);
  257. resultData.put("id","");
  258. resultData.put("billStatus", false);
  259. failCount ++;
  260. }
  261. }
  262. private void doSetGroupEntry(List<Map> mapEntrys, Map resultData, DynamicObject supplierObj) {
  263. DynamicObjectCollection entrys = supplierObj.getDynamicObjectCollection("entry_groupstandard");
  264. entrys.clear();
  265. for(Map mapEntry : mapEntrys) {
  266. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  267. //分类标准.编码
  268. setDynamicField(true, "standardid_number", "standardid", "bd_suppliergroupstandard",
  269. mapEntry, resultData, newEntry);
  270. //分类.编码
  271. setDynamicField(false,"groupid_number","groupid","bd_suppliergroup",
  272. mapEntry,resultData,newEntry);
  273. entrys.add(newEntry);
  274. }
  275. }
  276. private void doSetBankEntry(List<Map> mapEntrys, Map resultData, DynamicObject supplierObj) {
  277. DynamicObjectCollection entrys = supplierObj.getDynamicObjectCollection("entry_bank");
  278. entrys.clear();
  279. for(Map mapEntry : mapEntrys) {
  280. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  281. //所属组织
  282. setDynamicField(true, "pznm_bket_org_number", "pznm_bket_org", "bos_org",
  283. mapEntry, resultData, newEntry);
  284. //银行账号
  285. setTextField(true, "bankaccount", "bankaccount", mapEntry, resultData, newEntry);
  286. //账户名称
  287. setTextField(true, "accountname", "accountname", mapEntry, resultData, newEntry);
  288. //开户银行
  289. setDynamicField(true,"bank_number","bank","bd_bebank",
  290. mapEntry,resultData,newEntry);
  291. //币别
  292. setDynamicField(true,"currency_number","currency","bd_currency",
  293. mapEntry,resultData,newEntry);
  294. //默认
  295. setTextField(true, "isdefault_bank", "isdefault_bank", mapEntry, resultData, newEntry);
  296. //账户性质
  297. setTextField(false, "pznm_bket_account", "pznm_bket_account", mapEntry, resultData, newEntry);
  298. entrys.add(newEntry);
  299. }
  300. }
  301. private void doSetEntry(List<Map> mapEntrys, Map resultData, DynamicObject supplierObj) {
  302. //拼接组织+字码编码的过滤条件
  303. List<String> zmnumbers = new ArrayList<String>();
  304. List<String> orgnumbers = new ArrayList<String>();
  305. for(Map mapEntry : mapEntrys){
  306. zmnumbers.add(mapEntry.get("pznm_zmet_number").toString());
  307. orgnumbers.add(mapEntry.get("pznm_zmet_org_number").toString());
  308. }
  309. //查询过滤条件,缓存存在的字码Map记录
  310. Map isHaveOrgs_zmnumber = new HashMap();
  311. QFilter qFilter_customer = new QFilter("pznm_supplier",QCP.equals,supplierObj.getPkValue());
  312. QFilter qFilter_org = new QFilter("pznm_zmet_org.number",QCP.in,orgnumbers);
  313. QFilter qFilter_ztnumber = new QFilter("number",QCP.in,zmnumbers);
  314. DynamicObject[] isHaveObjs = BusinessDataServiceHelper.load("pznm_supplierzm",
  315. "id,pznm_zmet_org,pznm_zmet_org.number,pznm_zmet_number,pznm_zmet_name,pznm_zmet_oldnumber,pznm_zmet_wtr,pznm_zmet_wtrphone," +
  316. "pznm_zmet_lxr,pznm_zmet_lxrphone,pznm_zmet_cgper,pznm_zmet_setttype," +
  317. "pznm_zmet_zqnotes,pznm_zmet_settday,pznm_zmet_zqrtype,pznm_zmet_zqptype,pznm_zmet_paytype,pznm_zmet_invoicetype,pznm_sourcesysid",
  318. new QFilter[]{qFilter_customer,qFilter_org,qFilter_ztnumber});
  319. for(DynamicObject obj : isHaveObjs){
  320. DynamicObject org = (DynamicObject) obj.getDynamicObject("pznm_zmet_org");
  321. String org_zmnumber = org.getString("number")+"_"+obj.getString("number");
  322. isHaveOrgs_zmnumber.put(org_zmnumber,obj);
  323. }
  324. //区分并拼接需更新和新增的记录
  325. DynamicObjectCollection add_entrys = new DynamicObjectCollection();
  326. DynamicObjectCollection update_entrys = new DynamicObjectCollection();
  327. for(Map mapEntry : mapEntrys){
  328. String org_zmnumber = mapEntry.get("pznm_zmet_org_number").toString()+"_"+mapEntry.get("pznm_zmet_number").toString();
  329. if(isHaveOrgs_zmnumber.get(org_zmnumber)!=null && !"".equals(isHaveOrgs_zmnumber.get(org_zmnumber))){
  330. //已存在,缓存修改对象
  331. DynamicObject update_entry = (DynamicObject) isHaveOrgs_zmnumber.get(org_zmnumber);
  332. setDynamicField(true,"pznm_zmet_org_number","pznm_zmet_org","bos_org",
  333. mapEntry,resultData,update_entry);
  334. //供应商子码.子码ID
  335. setTextField(true,"pznm_sourcesysid","pznm_sourcesysid",mapEntry,resultData,update_entry);
  336. //供应商子码.子码编码
  337. setTextField(true,"pznm_zmet_number","number",mapEntry,resultData,update_entry);
  338. //供应商子码.子码名称
  339. setTextField(true,"pznm_zmet_name","name",mapEntry,resultData,update_entry);
  340. //供应商子码.老系统编号
  341. setTextField(false,"pznm_zmet_oldnumber","pznm_zmet_oldnumber",mapEntry,resultData,update_entry);
  342. //委托人.编码
  343. setDynamicField(false,"pznm_zmet_wtr_number","pznm_zmet_wtr","pznm_outcontacts",
  344. mapEntry,resultData,update_entry);
  345. //委托人信息.委托人电话
  346. setTextField(false,"pznm_zmet_wtrphone","pznm_zmet_wtrphone",mapEntry,resultData,update_entry);
  347. //联系人.编码
  348. setDynamicField(false,"pznm_zmet_lxr_number","pznm_zmet_lxr","pznm_outcontacts",
  349. mapEntry,resultData,update_entry);
  350. //供应商子码.联系人电话
  351. setTextField(false,"pznm_zmet_lxrphone","pznm_zmet_lxrphone",mapEntry,resultData,update_entry);
  352. //供应商子码.采购负责人.工号
  353. setDynamicField(false,"pznm_zmet_cgper_number","pznm_zmet_cgper","bos_user",
  354. mapEntry,resultData,update_entry);
  355. //结算类型.编码
  356. setDynamicField(false,"pznm_zmet_setttype_number","pznm_zmet_setttype","pznm_settlementtype",
  357. mapEntry,resultData,update_entry);
  358. //供应商子码.账期摘要
  359. setTextField(false,"pznm_zmet_zqnotes","pznm_zmet_zqnotes",mapEntry,resultData,update_entry);
  360. //供应商子码.实销实结结算日
  361. setTextField(false,"pznm_zmet_settday","pznm_zmet_settday",mapEntry,resultData,update_entry);
  362. //账期类型(收款).编码
  363. setDynamicField(false,"pznm_zmet_zqrtype_number","pznm_zmet_zqrtype","bd_reccondition",
  364. mapEntry,resultData,update_entry);
  365. //账期类型(付款).编码
  366. setDynamicField(false,"pznm_zmet_zqptype_number","pznm_zmet_zqptype","bd_paycondition",
  367. mapEntry,resultData,update_entry);
  368. //支付方式.编码
  369. setDynamicField(false,"pznm_zmet_paytype_number","pznm_zmet_paytype","bd_settlementtype",
  370. mapEntry,resultData,update_entry);
  371. //发票类型.编码
  372. setDynamicField(false,"pznm_zmet_invoicetype_number","pznm_zmet_invoicetype","bd_invoicetype",
  373. mapEntry,resultData,update_entry);
  374. update_entrys.add(update_entry);
  375. }else{
  376. //不存在,缓存新增对象
  377. DynamicObject add_entry = BusinessDataServiceHelper.newDynamicObject("pznm_supplierzm");
  378. setDynamicField(true,"pznm_zmet_org_number","pznm_zmet_org","bos_org",
  379. mapEntry,resultData,add_entry);
  380. //供应商子码.子码ID
  381. setTextField(true,"pznm_sourcesysid","pznm_sourcesysid",mapEntry,resultData,add_entry);
  382. //供应商子码.子码编码
  383. setTextField(true,"pznm_zmet_number","number",mapEntry,resultData,add_entry);
  384. //供应商子码.子码名称
  385. setTextField(true,"pznm_zmet_name","name",mapEntry,resultData,add_entry);
  386. //供应商子码.老系统编号
  387. setTextField(false,"pznm_zmet_oldnumber","pznm_zmet_oldnumber",mapEntry,resultData,add_entry);
  388. //委托人.编码
  389. setDynamicField(false,"pznm_zmet_wtr_number","pznm_zmet_wtr","pznm_outcontacts",
  390. mapEntry,resultData,add_entry);
  391. //委托人信息.委托人电话
  392. setTextField(false,"pznm_zmet_wtrphone","pznm_zmet_wtrphone",mapEntry,resultData,add_entry);
  393. //联系人.编码
  394. setDynamicField(false,"pznm_zmet_lxr_number","pznm_zmet_lxr","pznm_outcontacts",
  395. mapEntry,resultData,add_entry);
  396. //供应商子码.联系人电话
  397. setTextField(false,"pznm_zmet_lxrphone","pznm_zmet_lxrphone",mapEntry,resultData,add_entry);
  398. //供应商子码.采购负责人.工号
  399. setDynamicField(false,"pznm_zmet_cgper_number","pznm_zmet_cgper","bos_user",
  400. mapEntry,resultData,add_entry);
  401. //结算类型.编码
  402. setDynamicField(false,"pznm_zmet_setttype_number","pznm_zmet_setttype","pznm_settlementtype",
  403. mapEntry,resultData,add_entry);
  404. //客户子码.账期摘要
  405. setTextField(false,"pznm_zmet_zqnotes","pznm_zmet_zqnotes",mapEntry,resultData,add_entry);
  406. //客户子码.实销实结结算日
  407. setTextField(false,"pznm_zmet_settday","pznm_zmet_settday",mapEntry,resultData,add_entry);
  408. //账期类型(收款).编码
  409. setDynamicField(false,"pznm_zmet_zqrtype_number","pznm_zmet_zqrtype","bd_reccondition",
  410. mapEntry,resultData,add_entry);
  411. //账期类型(付款).编码
  412. setDynamicField(false,"pznm_zmet_zqptype_number","pznm_zmet_zqptype","bd_paycondition",
  413. mapEntry,resultData,add_entry);
  414. //支付方式.编码
  415. setDynamicField(false,"pznm_zmet_paytype_number","pznm_zmet_paytype","bd_settlementtype",
  416. mapEntry,resultData,add_entry);
  417. //发票类型.编码
  418. setDynamicField(false,"pznm_zmet_invoicetype_number","pznm_zmet_invoicetype","bd_invoicetype",
  419. mapEntry,resultData,add_entry);
  420. //供应商
  421. add_entry.set("pznm_supplier",supplierObj);
  422. //数据状态
  423. add_entry.set("status","A");
  424. //使用状态
  425. add_entry.set("enable","1");
  426. add_entrys.add(add_entry);
  427. }
  428. }
  429. DynamicObject[] real_update_entrys = new DynamicObject[update_entrys.size()];
  430. for(int i=0;i< update_entrys.size();i++){
  431. real_update_entrys[i] = update_entrys.get(i);
  432. }
  433. DynamicObject[] real_add_entrys = new DynamicObject[add_entrys.size()];
  434. for(int i=0;i< add_entrys.size();i++){
  435. real_add_entrys[i] = add_entrys.get(i);
  436. }
  437. if(resultData.get("errors")==null || "".equals(resultData.get("errors"))) {
  438. //执行更新
  439. if (real_update_entrys.length > 0) {
  440. SaveServiceHelper.update(real_update_entrys);
  441. }
  442. //执行新增
  443. if (real_add_entrys.length > 0) {
  444. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", "pznm_supplierzm",
  445. real_add_entrys, OperateOption.create());
  446. if (result_submit.isSuccess() == true) {
  447. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "pznm_supplierzm",
  448. real_add_entrys, OperateOption.create());
  449. if (result_audit.isSuccess() == false) {
  450. resultData.put("errors", "子码审核失败");
  451. }
  452. } else {
  453. resultData.put("errors", "子码创建失败");
  454. }
  455. }
  456. }
  457. }
  458. private void doSetWtrEntry(List<Map> mapEntrys, Map resultData, DynamicObject supplierObj) {
  459. DynamicObjectCollection entrys = supplierObj.getDynamicObjectCollection("pznm_wtrentry");
  460. entrys.clear();
  461. for(Map mapEntry : mapEntrys){
  462. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  463. //所属组织
  464. setDynamicField(true,"pznm_wtret_org_number","pznm_wtret_org","bos_org",
  465. mapEntry,resultData,newEntry);
  466. //委托人信息.委托人电话
  467. setTextField(false,"pznm_wtret_userphone","pznm_wtret_userphone",mapEntry,resultData,newEntry);
  468. //委托人.编码
  469. setDynamicField(true,"pznm_wtret_user_number","pznm_wtret_user","pznm_outcontacts",
  470. mapEntry,resultData,newEntry);
  471. entrys.add(newEntry);
  472. }
  473. }
  474. private void doSetKzztentry(List<Map> mapEntrys, Map resultData, DynamicObject supplierObj) {
  475. DynamicObjectCollection entrys = supplierObj.getDynamicObjectCollection("pznm_kzztentry");
  476. entrys.clear();
  477. for(Map mapEntry : mapEntrys){
  478. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  479. //所属组织
  480. setDynamicField(true,"pznm_kzztet_org_number","pznm_kzztet_org","bos_org",
  481. mapEntry,resultData,newEntry);
  482. //公司级状态
  483. setTextField(true,"pznm_companystatus","pznm_companystatus",mapEntry,resultData,newEntry);
  484. entrys.add(newEntry);
  485. }
  486. }
  487. /* 校验并设置F7字段
  488. * @key 入参校验字段
  489. * @fieldName 写入供应商对象的字段名
  490. * @entityNumber 字段对应基础资料实体名
  491. * @param 接口入参对象
  492. * @resultData 返回报文对象
  493. * @supplierObj 供应商对象
  494. */
  495. private void setDynamicField(Boolean isMust,String key,String fieldName, String entityNumber, Map param, Map resultData, DynamicObject supplierObj) {
  496. if(param.get(key)==null || "".equals(param.get(key))){
  497. if(isMust){
  498. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  499. resultData.put("errors",errors+"参数【" + key + "】必填");
  500. }
  501. }else{
  502. QFilter qFilter_number = new QFilter("number",QCP.equals,param.get(key));
  503. QFilter qFilter_enable = new QFilter("enable", QCP.equals,"1");
  504. QFilter qFilter_status = new QFilter("status", QCP.equals, "C");
  505. DynamicObject objCol = BusinessDataServiceHelper.loadSingleFromCache(entityNumber,"id,number,name",
  506. new QFilter[]{qFilter_number,qFilter_enable,qFilter_status});
  507. if(objCol!=null){
  508. supplierObj.set(fieldName,objCol);
  509. }else{
  510. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  511. resultData.put("errors",errors+"参数【" + key + "】值【"+param.get(key)+"】匹配不成功,可能的原因是:1、编码不正确 2、不符合基础资料字段查询条件");
  512. }
  513. }
  514. }
  515. /* 校验并设置文本字段
  516. * @key 入参校验字段
  517. * @fieldName 写入供应商对象的字段名
  518. * @param 接口入参对象
  519. * @resultData 返回报文对象
  520. * @supplierObj 供应商对象
  521. */
  522. private void setTextField(Boolean isMust,String key,String fieldName,Map param, Map resultData, DynamicObject supplierObj) {
  523. if(param.get(key)==null || "".equals(param.get(key))){
  524. if(isMust){
  525. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  526. resultData.put("errors",errors+"参数【" + key + "】必填");
  527. }
  528. }else{
  529. supplierObj.set(fieldName,param.get(key));
  530. }
  531. }
  532. /* 校验并设置日期字段
  533. * @key 入参校验字段
  534. * @fieldName 写入供应商对象的字段名
  535. * @param 接口入参对象
  536. * @resultData 返回报文对象
  537. * @supplierObj 供应商对象
  538. */
  539. private void setDateField(Boolean isMust,String key,String fieldName,Map param, Map resultData, DynamicObject supplierObj) throws ParseException {
  540. if(param.get(key)==null || "".equals(param.get(key))){
  541. if(isMust){
  542. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  543. resultData.put("errors",errors+"参数【" + key + "】必填");
  544. }
  545. }else{
  546. supplierObj.set(fieldName,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(param.get(key).toString()));
  547. }
  548. }
  549. }