SupplierSaveWebApiPlugin.java 29 KB

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