CustomerAddnewWebApiPlugin.java 34 KB

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