MaterialUpdateApi.java 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921
  1. package bamp.basedata.webapi;
  2. import kd.bd.master.enums.EnableEnum;
  3. import kd.bd.master.enums.StatusEnum;
  4. import kd.bd.master.vo.OperationApiVo;
  5. import kd.bd.master.webapi.model.GenMTAndBizInfoRespModel;
  6. import kd.bos.dataentity.OperateOption;
  7. import kd.bos.dataentity.entity.DynamicObject;
  8. import kd.bos.dataentity.entity.DynamicObjectCollection;
  9. import kd.bos.dataentity.metadata.IMetadata;
  10. import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
  11. import kd.bos.db.DB;
  12. import kd.bos.entity.operate.OperateOptionConst;
  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.exception.KDBizException;
  18. import kd.bos.logging.Log;
  19. import kd.bos.logging.LogFactory;
  20. import kd.bos.openapi.common.custom.annotation.ApiController;
  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 kd.bos.util.ExceptionUtils;
  30. import bamp.basedata.util.WebApiUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import javax.validation.constraints.NotEmpty;
  33. import java.text.ParseException;
  34. import java.util.*;
  35. import java.util.stream.Collectors;
  36. /**
  37. * @author : libo_kd
  38. * @description :
  39. * @date : 2025.01.15 9:37:54
  40. */
  41. @ApiController(
  42. desc = "更新物料和物料业务信息OpenAPI",
  43. value = "bd"
  44. )
  45. public class MaterialUpdateApi {
  46. private static final long serialVersionUID = 4434540944862847555L;
  47. private static Log logger = LogFactory.getLog(MaterialUpdateApi.class);
  48. private static final String ERR_CODE_OPERATE_FAILED = "777";
  49. private static final String ERR_CODE_SYS_EX = "999";
  50. private static final String BOM_VERSION_RULE = "bomversionrule";
  51. private static final Long BOM_VERSION_RULE_DEFAULTVAL = 780605109909666816L;
  52. int successCount = 0;
  53. int failCount = 0;
  54. @ApiPostMapping("/material_update")
  55. public CustomApiResult<List<GenMTAndBizInfoRespModel>> doCustomService(@NotEmpty @ApiParam("物料参数,List表示支持传入多个物料,Map代表一个物料,key为物料元数据上的字段,value为字段值。") List<Map<String, Object>> data) {
  56. CustomApiResult customApiResult = new CustomApiResult();
  57. customApiResult.setStatus(false);
  58. customApiResult.setErrorCode("400");
  59. try {
  60. Set<String> materialNums = data.stream().map(x -> (String) x.get("number")).collect(Collectors.toSet());
  61. DynamicObject[] findMaterial = new DynamicObject[0];
  62. if (materialNums.size() > 0) {
  63. findMaterial = BusinessDataServiceHelper.load("bd_material", "id,number", new QFilter[]{new QFilter("number", QCP.in, materialNums)});
  64. }
  65. Map resultDatasMap = new HashMap();
  66. List<Map> resultDatas = new ArrayList<Map>();
  67. for (Map mst : data) {
  68. Map resultData = new HashMap();
  69. try {
  70. String mstNum = (String) mst.get("number");
  71. Long id = 0l;
  72. if (findMaterial.length > 0) {
  73. List<DynamicObject> finds = Arrays.stream(findMaterial).filter(x -> x.getString("number").equals(mstNum)).collect(Collectors.toList());
  74. if (finds.size() > 0) id = finds.get(0).getLong("id");
  75. }
  76. if (id != null && id != 0L) {
  77. mst.put("id", id);
  78. forceSetStatusAndEnable(mst);
  79. updateMasterData(id, mst, "bd_material", resultData);
  80. successCount++;
  81. } else {
  82. forceSetStatusAndEnable(mst);
  83. createMasterData(mst, "bd_material", resultData);
  84. successCount++;
  85. }
  86. } catch (Exception e) {
  87. resultData.put("id", "");
  88. resultData.put("errors", e.getMessage());
  89. resultData.put("billStatus", false);
  90. logger.error(ExceptionUtils.getExceptionStackTraceMessage(e));
  91. failCount++;
  92. }
  93. resultDatas.add(resultData);
  94. }
  95. resultDatasMap.put("failCount",failCount);
  96. resultDatasMap.put("successCount",successCount);
  97. resultDatasMap.put("result",resultDatas);
  98. customApiResult.setData(resultDatasMap);
  99. if(failCount>0) {
  100. customApiResult.setStatus(false);
  101. customApiResult.setErrorCode("603");
  102. }else{
  103. customApiResult.setStatus(true);
  104. customApiResult.setErrorCode("0");
  105. }
  106. } catch (Exception e) {
  107. customApiResult.setStatus(false);
  108. customApiResult.setMessage(e.getMessage());
  109. customApiResult.setErrorCode("400");
  110. }
  111. return customApiResult;
  112. }
  113. public void createMasterData(Map newDatas, String entityName, Map resultData) throws ParseException {
  114. long materialId = DB.genLongId("T_BD_MATERIAL");
  115. Map<String, OperationApiVo> errorMap = null;
  116. DynamicObject material = BusinessDataServiceHelper.newDynamicObject(entityName);
  117. material.set("id", materialId);
  118. setHeadValue(newDatas, material, resultData);
  119. //数据状态
  120. material.set("status", "A");
  121. //使用状态
  122. material.set("enable", "1");
  123. if (resultData.get("errors") != null && !"".equals(resultData.get("errors"))) {
  124. List errors = new ArrayList();
  125. errors.add(resultData.get("errors"));
  126. resultData.put("id", "");
  127. resultData.put("errors", errors);
  128. resultData.put("billStatus", false);
  129. } else {
  130. //保存客户对象
  131. String status = material.getString("status");
  132. if ("A".equals(status)) {//暂存,走正常逻辑
  133. doAddNew(resultData, material);
  134. if (resultData.get("errors") == null) {
  135. generateMaterialBizInfo(material,newDatas,resultData);
  136. if (resultData.get("errors") != null && !"".equals(resultData.get("errors"))) {
  137. if(!((Boolean)resultData.get("billStatus"))) {
  138. throw new KDBizException(resultData.get("errors").toString());
  139. }
  140. }
  141. }
  142. }
  143. }
  144. }
  145. private void generateMaterialBizInfo(DynamicObject material, Map newDatas, Map resultData) throws ParseException {
  146. //采购信息
  147. if (newDatas.get("bd_materialpurchaseinfo") != null) {
  148. List<Map> mapEntrys = (List<Map>) newDatas.get("bd_materialpurchaseinfo");
  149. initMaterialBizInfoByMaterial(mapEntrys, resultData, material,"bd_materialpurchaseinfo");
  150. } else {
  151. resultData.put("errors", "参数【bd_materialpurchaseinfo】必填");
  152. }
  153. //销售信息
  154. if (newDatas.get("bd_materialsalinfo") != null) {
  155. List<Map> mapEntrys = (List<Map>) newDatas.get("bd_materialsalinfo");
  156. initMaterialBizInfoByMaterial(mapEntrys, resultData, material,"bd_materialsalinfo");
  157. } else {
  158. resultData.put("errors", "参数【bd_materialsalinfo】必填");
  159. }
  160. //库存信息
  161. if (newDatas.get("bd_materialinventoryinfo") != null) {
  162. List<Map> mapEntrys = (List<Map>) newDatas.get("bd_materialinventoryinfo");
  163. initMaterialBizInfoByMaterial(mapEntrys, resultData, material,"bd_materialinventoryinfo");
  164. } else {
  165. resultData.put("errors", "参数【bd_materialinventoryinfo】必填");
  166. }
  167. //子码信息
  168. if (newDatas.get("pznm_materialzm") != null) {
  169. List<Map> mapEntrys = (List<Map>) newDatas.get("pznm_materialzm");
  170. initMaterialZMByMaterial(mapEntrys, resultData, material);
  171. }
  172. //财务信息
  173. if (newDatas.get("pznm_materialfinance") != null) {
  174. List<Map> mapEntrys = (List<Map>) newDatas.get("pznm_materialfinance");
  175. initMaterialFinanceByMaterial(mapEntrys, resultData, material);
  176. }
  177. }
  178. public void initMaterialBizInfoByMaterial(List<Map> mapEntrys, Map resultData,DynamicObject material,String bizInfoFormId) throws ParseException {
  179. logger.info("initMaterialBizInfoByMaterial, materialList size:" + mapEntrys.size() + ",bizInfoFormId:" + bizInfoFormId);
  180. List<String> createOrgs = (List)mapEntrys.stream().map((m) -> {
  181. return m.get("createorg_number");
  182. }).distinct().collect(Collectors.toList());
  183. List<String> selectFields =BusinessDataServiceHelper.newDynamicObject(bizInfoFormId).getDataEntityType().getProperties().stream().map(IMetadata:: getName).collect(Collectors.toList());
  184. QFilter materialfilter=new QFilter("masterid",QCP.equals,material.getPkValue());
  185. QFilter orgfilter=new QFilter("createorg.number",QCP.in,createOrgs);
  186. DynamicObject[] findbizInfoForm=BusinessDataServiceHelper.load(bizInfoFormId, StringUtils.join(selectFields.toArray(), ','),new QFilter[]{materialfilter,orgfilter});
  187. //查询过滤条件,缓存存在的字码Map记录
  188. Map isHaveOrgs_number = new HashMap();
  189. for(DynamicObject obj : findbizInfoForm){
  190. DynamicObject org = obj.getDynamicObject("createorg");
  191. isHaveOrgs_number.put(org.getString("number"),obj);
  192. }
  193. //区分并拼接需更新和新增的记录
  194. DynamicObjectCollection add_entrys = new DynamicObjectCollection();
  195. DynamicObjectCollection update_entrys = new DynamicObjectCollection();
  196. for(Map mapEntry : mapEntrys){
  197. String orgNum = mapEntry.get("createorg_number").toString();
  198. if(isHaveOrgs_number.get(orgNum)!=null && !"".equals(isHaveOrgs_number.get(orgNum))) {
  199. //已存在,缓存修改对象
  200. DynamicObject materialBizInfo = (DynamicObject) isHaveOrgs_number.get(orgNum);
  201. //管控方式
  202. WebApiUtils.setTextField(true, "ctrlstrategy", "ctrlstrategy", mapEntry, resultData, materialBizInfo);
  203. //创建人
  204. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  205. //创建时间
  206. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  207. //修改人
  208. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  209. //修改时间
  210. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  211. //审核人
  212. WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  213. //审核时间
  214. WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  215. //修改人
  216. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  217. //审核人
  218. WebApiUtils.setDynamicField(true,"auditor_number","pznm_auditor_xh","bos_user",mapEntry, resultData, materialBizInfo);
  219. //使用状态
  220. WebApiUtils.setTextField(true, "enable", "enable", mapEntry, resultData, materialBizInfo);
  221. if(null !=mapEntry.get("enable") && "0".equals(mapEntry.get("enable"))){
  222. //禁用人
  223. WebApiUtils.setDynamicField(true, "modifier_number", "disabler", "bos_user", mapEntry, resultData, materialBizInfo);
  224. //禁用时间
  225. WebApiUtils.setDateField(true, "modifytime", "disabledate", mapEntry, resultData, materialBizInfo);
  226. }
  227. if ("bd_materialinventoryinfo".equals(bizInfoFormId)) {
  228. materialBizInfo.set("inventoryunit", material.get("baseunit"));
  229. materialBizInfo.set("baseunit", material.get("baseunit"));
  230. //允许负库存
  231. WebApiUtils.setBooleanField(false, "isallowneginv", "isallowneginv", false, mapEntry, resultData, materialBizInfo);
  232. //启用批号管理
  233. WebApiUtils.setBooleanField(true, "enablelot", "enablelot", true, mapEntry, resultData, materialBizInfo);
  234. //保质期管理
  235. WebApiUtils.setBooleanField(true, "enableshelflifemgr", "enableshelflifemgr", true, mapEntry, resultData, materialBizInfo);
  236. //保质期单位
  237. WebApiUtils.setTextField(true, "shelflifeunit", "shelflifeunit", mapEntry, resultData, materialBizInfo);
  238. //提前期单位
  239. WebApiUtils.setTextField(true, "shelflifeunit", "leadtimeunit", mapEntry, resultData, materialBizInfo);
  240. //计算方向
  241. materialBizInfo.set("caldirection","4");
  242. //保质期
  243. WebApiUtils.setTextField(true, "shelflife", "shelflife", mapEntry, resultData, materialBizInfo);
  244. } else if ("bd_materialpurchaseinfo".equals(bizInfoFormId)) {
  245. materialBizInfo.set("purchaseunit", material.get("baseunit"));
  246. } else if ("bd_materialsalinfo".equals(bizInfoFormId)) {
  247. materialBizInfo.set("salesunit", material.get("baseunit"));
  248. }
  249. update_entrys.add(materialBizInfo);
  250. }else{
  251. //不存在,缓存新增对象
  252. DynamicObject materialBizInfo = BusinessDataServiceHelper.newDynamicObject(bizInfoFormId);
  253. materialBizInfo.set("masterid", material);
  254. //管控方式
  255. WebApiUtils.setTextField(true, "ctrlstrategy", "ctrlstrategy", mapEntry, resultData, materialBizInfo);
  256. materialBizInfo.set("status", StatusEnum.SAVE.getCode());
  257. materialBizInfo.set("enable", EnableEnum.ENABLE.getCode());
  258. //创建人
  259. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  260. //创建时间
  261. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  262. //修改人
  263. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  264. //修改时间
  265. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  266. //审核人
  267. WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  268. //审核时间
  269. WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  270. //修改人
  271. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  272. //审核人
  273. WebApiUtils.setDynamicField(true,"auditor_number","pznm_auditor_xh","bos_user",mapEntry, resultData, materialBizInfo);
  274. //创建组织
  275. WebApiUtils.setDynamicField(true, "createorg_number", "createorg", "bos_org", mapEntry, resultData, materialBizInfo);
  276. if ("bd_materialinventoryinfo".equals(bizInfoFormId)) {
  277. materialBizInfo.set("inventoryunit", material.get("baseunit"));
  278. materialBizInfo.set("baseunit", material.get("baseunit"));
  279. //允许负库存
  280. WebApiUtils.setBooleanField(false, "isallowneginv", "isallowneginv", false, mapEntry, resultData, materialBizInfo);
  281. //启用批号管理
  282. WebApiUtils.setBooleanField(true, "enablelot", "enablelot", true, mapEntry, resultData, materialBizInfo);
  283. //保质期管理
  284. WebApiUtils.setBooleanField(true, "enableshelflifemgr", "enableshelflifemgr", true, mapEntry, resultData, materialBizInfo);
  285. //保质期单位
  286. WebApiUtils.setTextField(true, "shelflifeunit", "shelflifeunit", mapEntry, resultData, materialBizInfo);
  287. //提前期单位
  288. WebApiUtils.setTextField(true, "shelflifeunit", "leadtimeunit", mapEntry, resultData, materialBizInfo);
  289. //计算方向
  290. materialBizInfo.set("caldirection","4");
  291. //保质期
  292. WebApiUtils.setTextField(true, "shelflife", "shelflife", mapEntry, resultData, materialBizInfo);
  293. } else if ("bd_materialpurchaseinfo".equals(bizInfoFormId)) {
  294. materialBizInfo.set("purchaseunit", material.get("baseunit"));
  295. } else if ("bd_materialsalinfo".equals(bizInfoFormId)) {
  296. materialBizInfo.set("salesunit", material.get("baseunit"));
  297. }
  298. //数据状态
  299. materialBizInfo.set("status","A");
  300. //使用状态
  301. materialBizInfo.set("enable","1");
  302. add_entrys.add(materialBizInfo);
  303. }
  304. }
  305. DynamicObject[] real_update_entrys = new DynamicObject[update_entrys.size()];
  306. for(int i=0;i< update_entrys.size();i++){
  307. real_update_entrys[i] = update_entrys.get(i);
  308. }
  309. DynamicObject[] real_add_entrys = new DynamicObject[add_entrys.size()];
  310. for(int i=0;i< add_entrys.size();i++){
  311. real_add_entrys[i] = add_entrys.get(i);
  312. }
  313. if(resultData.get("errors")==null || "".equals(resultData.get("errors"))){
  314. //执行更新
  315. if (real_update_entrys.length > 0) {
  316. SaveServiceHelper.update(real_update_entrys);
  317. }
  318. //执行新增
  319. if (real_add_entrys.length > 0) {
  320. OperateOption option=OperateOption.create();
  321. //传入自定义参数
  322. //设置该操作已经验权,无需再次验权
  323. option.setVariableValue(OperateOptionConst.ISHASRIGHT,"true");
  324. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", bizInfoFormId,
  325. real_add_entrys, option);
  326. if (result_submit.isSuccess()) {
  327. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", bizInfoFormId,
  328. real_add_entrys, option);
  329. if (!result_audit.isSuccess()) {
  330. resultData.put("errors", bizInfoFormId+"审核失败");
  331. }
  332. } else {
  333. resultData.put("errors", bizInfoFormId+"创建失败");
  334. }
  335. }
  336. }
  337. }
  338. public void initMaterialZMByMaterial(List<Map> mapEntrys, Map resultData,DynamicObject material) throws ParseException {
  339. logger.info("initMaterialZMByMaterial, materialList size:" + mapEntrys.size());
  340. //拼接组织+字码编码的过滤条件
  341. List<String> zmnumbers = new ArrayList<String>();
  342. List<String> orgnumbers = new ArrayList<String>();
  343. for(Map mapEntry : mapEntrys){
  344. zmnumbers.add(mapEntry.get("number").toString());
  345. orgnumbers.add(mapEntry.get("pznm_zmet_org_number").toString());
  346. }
  347. List<String> selectFields =BusinessDataServiceHelper.newDynamicObject("pznm_materialzm").getDataEntityType().getProperties().stream().map(IMetadata:: getName).collect(Collectors.toList());
  348. QFilter materialfilter=new QFilter("pznm_material",QCP.equals,material.getPkValue());
  349. QFilter orgfilter=new QFilter("pznm_zmet_org.number",QCP.in,orgnumbers);
  350. QFilter numberfilter=new QFilter("number",QCP.in,zmnumbers);
  351. DynamicObject[] findbizInfoForm=BusinessDataServiceHelper.load("pznm_materialzm", StringUtils.join(selectFields.toArray(), ','),new QFilter[]{materialfilter,orgfilter,numberfilter});
  352. //查询过滤条件,缓存存在的字码Map记录
  353. Map isHaveOrgs_number = new HashMap();
  354. for(DynamicObject obj : findbizInfoForm){
  355. DynamicObject org = obj.getDynamicObject("pznm_zmet_org");
  356. String org_zmnumber = org.getString("number")+"_"+obj.getString("number");
  357. isHaveOrgs_number.put(org_zmnumber,obj);
  358. }
  359. //区分并拼接需更新和新增的记录
  360. DynamicObjectCollection add_entrys = new DynamicObjectCollection();
  361. DynamicObjectCollection update_entrys = new DynamicObjectCollection();
  362. for(Map mapEntry : mapEntrys){
  363. String org_zmnumber = mapEntry.get("pznm_zmet_org_number").toString()+"_"+mapEntry.get("number").toString();
  364. if(isHaveOrgs_number.get(org_zmnumber)!=null && !"".equals(isHaveOrgs_number.get(org_zmnumber))){
  365. //已存在,缓存修改对象
  366. DynamicObject materialBizInfo = (DynamicObject) isHaveOrgs_number.get(org_zmnumber);
  367. //子码编码
  368. WebApiUtils.setTextField(true,"number","number",mapEntry, resultData, materialBizInfo);
  369. //子码名称
  370. WebApiUtils.setTextField(true,"name","name",mapEntry, resultData, materialBizInfo);
  371. //老系统编码
  372. WebApiUtils.setTextField(false,"pznm_oldnumber","pznm_oldnumber",mapEntry, resultData, materialBizInfo);
  373. //创建人
  374. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  375. //创建时间
  376. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  377. //修改人
  378. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  379. //修改时间
  380. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  381. //修改人
  382. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  383. //审核人
  384. //WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  385. //审核时间
  386. //WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  387. //使用状态
  388. //WebApiUtils.setTextField(true, "enable", "enable", mapEntry, resultData, materialBizInfo);
  389. //来源系统id
  390. WebApiUtils.setTextField(true,"pznm_sourcesysid","pznm_sourcesysid",mapEntry, resultData, materialBizInfo);
  391. update_entrys.add(materialBizInfo);
  392. }else{
  393. //不存在,缓存新增对象
  394. DynamicObject materialBizInfo = BusinessDataServiceHelper.newDynamicObject("pznm_materialzm");
  395. //materialBizInfo.set("masterid", material);
  396. materialBizInfo.set("pznm_material", material);
  397. materialBizInfo.set("status", StatusEnum.SAVE.getCode());
  398. materialBizInfo.set("enable", EnableEnum.ENABLE.getCode());
  399. //子码编码
  400. WebApiUtils.setTextField(true,"number","number",mapEntry, resultData, materialBizInfo);
  401. //子码名称
  402. WebApiUtils.setTextField(true,"name","name",mapEntry, resultData, materialBizInfo);
  403. //老系统编码
  404. WebApiUtils.setTextField(false,"pznm_oldnumber","pznm_oldnumber",mapEntry, resultData, materialBizInfo);
  405. //创建人
  406. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  407. //创建时间
  408. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  409. //修改人
  410. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  411. //修改时间
  412. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  413. //修改人
  414. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  415. //来源系统id
  416. WebApiUtils.setTextField(true,"pznm_sourcesysid","pznm_sourcesysid",mapEntry, resultData, materialBizInfo);
  417. //审核人
  418. //WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  419. //审核时间
  420. // WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  421. //创建组织
  422. WebApiUtils.setDynamicField(true, "pznm_zmet_org_number", "pznm_zmet_org", "bos_org", mapEntry, resultData, materialBizInfo);
  423. //数据状态
  424. materialBizInfo.set("status","A");
  425. //使用状态
  426. materialBizInfo.set("enable","1");
  427. add_entrys.add(materialBizInfo);
  428. }
  429. }
  430. DynamicObject[] real_update_entrys = new DynamicObject[update_entrys.size()];
  431. for(int i=0;i< update_entrys.size();i++){
  432. real_update_entrys[i] = update_entrys.get(i);
  433. }
  434. DynamicObject[] real_add_entrys = new DynamicObject[add_entrys.size()];
  435. for(int i=0;i< add_entrys.size();i++){
  436. real_add_entrys[i] = add_entrys.get(i);
  437. }
  438. if(resultData.get("errors")==null || "".equals(resultData.get("errors"))){
  439. //执行更新
  440. if (real_update_entrys.length > 0) {
  441. SaveServiceHelper.update(real_update_entrys);
  442. }
  443. OperateOption option=OperateOption.create();
  444. //传入自定义参数
  445. //设置该操作已经验权,无需再次验权
  446. option.setVariableValue(OperateOptionConst.ISHASRIGHT,"true");
  447. //执行新增
  448. if (real_add_entrys.length > 0) {
  449. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", "pznm_materialzm",
  450. real_add_entrys, option);
  451. if (result_submit.isSuccess()) {
  452. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "pznm_materialzm",
  453. real_add_entrys, option);
  454. if (!result_audit.isSuccess()) {
  455. resultData.put("errors", "pznm_materialzm"+"审核失败");
  456. }
  457. } else {
  458. resultData.put("errors", "pznm_materialzm"+"创建失败");
  459. }
  460. }
  461. }
  462. }
  463. public void initMaterialFinanceByMaterial(List<Map> mapEntrys, Map resultData,DynamicObject material) throws ParseException {
  464. logger.info("initMaterialFinanceByMaterial, materialList size:" + mapEntrys.size());
  465. List<String> createOrgs = (List)mapEntrys.stream().map((m) -> {
  466. return m.get("pznm_fiet_org_number");
  467. }).distinct().collect(Collectors.toList());
  468. List<String> selectFields =BusinessDataServiceHelper.newDynamicObject("pznm_materialfinance").getDataEntityType().getProperties().stream().map(IMetadata:: getName).collect(Collectors.toList());
  469. QFilter materialfilter=new QFilter("pznm_material",QCP.equals,material.getPkValue());
  470. QFilter orgfilter=new QFilter("pznm_fiet_org.number",QCP.in,createOrgs);
  471. DynamicObject[] findbizInfoForm=BusinessDataServiceHelper.load("pznm_materialfinance", StringUtils.join(selectFields.toArray(), ','),new QFilter[]{materialfilter,orgfilter});
  472. //查询过滤条件,缓存存在的字码Map记录
  473. Map isHaveOrgs_number = new HashMap();
  474. for(DynamicObject obj : findbizInfoForm){
  475. DynamicObject org = obj.getDynamicObject("pznm_fiet_org");
  476. isHaveOrgs_number.put(org.getString("number"),obj);
  477. }
  478. //区分并拼接需更新和新增的记录
  479. DynamicObjectCollection add_entrys = new DynamicObjectCollection();
  480. DynamicObjectCollection update_entrys = new DynamicObjectCollection();
  481. for(Map mapEntry : mapEntrys){
  482. String orgNum = mapEntry.get("pznm_fiet_org_number").toString();
  483. if(isHaveOrgs_number.get(orgNum)!=null && !"".equals(isHaveOrgs_number.get(orgNum))) {
  484. //已存在,缓存修改对象
  485. DynamicObject materialBizInfo = (DynamicObject) isHaveOrgs_number.get(orgNum);
  486. //创建人
  487. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  488. //创建时间
  489. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  490. //修改人
  491. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  492. //修改时间
  493. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  494. //修改人
  495. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  496. //进项税
  497. WebApiUtils.setDynamicField(true, "pznm_inputtaxrate_number", "pznm_inputtaxrate", "bd_taxrate", mapEntry, resultData, materialBizInfo);
  498. //销项税
  499. WebApiUtils.setDynamicField(true, "pznm_outputtaxrate_number", "pznm_outputtaxrate", "bd_taxrate", mapEntry, resultData, materialBizInfo);
  500. //审核人
  501. //WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  502. //审核时间
  503. //WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  504. //使用状态
  505. //WebApiUtils.setTextField(true, "enable", "enable", mapEntry, resultData, materialBizInfo);
  506. update_entrys.add(materialBizInfo);
  507. }else{
  508. //不存在,缓存新增对象
  509. DynamicObject materialBizInfo = BusinessDataServiceHelper.newDynamicObject("pznm_materialfinance");
  510. //materialBizInfo.set("masterid", material);
  511. materialBizInfo.set("pznm_material", material);
  512. materialBizInfo.set("status", StatusEnum.SAVE.getCode());
  513. materialBizInfo.set("enable", EnableEnum.ENABLE.getCode());
  514. //创建人
  515. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", mapEntry, resultData, materialBizInfo);
  516. //创建时间
  517. WebApiUtils.setDateField(true, "createtime", "createtime", mapEntry, resultData, materialBizInfo);
  518. //修改人
  519. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", mapEntry, resultData, materialBizInfo);
  520. //修改时间
  521. WebApiUtils.setDateField(true, "modifytime", "modifytime", mapEntry, resultData, materialBizInfo);
  522. //修改人
  523. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", mapEntry, resultData, materialBizInfo);
  524. //进项税
  525. WebApiUtils.setDynamicField(true, "pznm_inputtaxrate_number", "pznm_inputtaxrate", "bd_taxrate", mapEntry, resultData, materialBizInfo);
  526. //销项税
  527. WebApiUtils.setDynamicField(true, "pznm_outputtaxrate_number", "pznm_outputtaxrate", "bd_taxrate", mapEntry, resultData, materialBizInfo);
  528. //审核人
  529. //WebApiUtils.setDynamicField(true, "auditor_number", "auditor", "bos_user", mapEntry, resultData, materialBizInfo);
  530. //审核时间
  531. // WebApiUtils.setDateField(true, "audittime", "audittime", mapEntry, resultData, materialBizInfo);
  532. //创建组织
  533. WebApiUtils.setDynamicField(true, "pznm_fiet_org_number", "pznm_fiet_org", "bos_org", mapEntry, resultData, materialBizInfo);
  534. //数据状态
  535. materialBizInfo.set("status","A");
  536. //使用状态
  537. materialBizInfo.set("enable","1");
  538. add_entrys.add(materialBizInfo);
  539. }
  540. }
  541. DynamicObject[] real_update_entrys = new DynamicObject[update_entrys.size()];
  542. for(int i=0;i< update_entrys.size();i++){
  543. real_update_entrys[i] = update_entrys.get(i);
  544. }
  545. DynamicObject[] real_add_entrys = new DynamicObject[add_entrys.size()];
  546. for(int i=0;i< add_entrys.size();i++){
  547. real_add_entrys[i] = add_entrys.get(i);
  548. }
  549. if(resultData.get("errors")==null || "".equals(resultData.get("errors"))){
  550. //执行更新
  551. if (real_update_entrys.length > 0) {
  552. SaveServiceHelper.update(real_update_entrys);
  553. }
  554. //执行新增
  555. if (real_add_entrys.length > 0) {
  556. OperateOption option=OperateOption.create();
  557. //传入自定义参数
  558. //设置该操作已经验权,无需再次验权
  559. option.setVariableValue(OperateOptionConst.ISHASRIGHT,"true");
  560. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", "pznm_materialfinance",
  561. real_add_entrys, option);
  562. if (result_submit.isSuccess()) {
  563. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "pznm_materialfinance",
  564. real_add_entrys, option);
  565. if (!result_audit.isSuccess()) {
  566. resultData.put("errors", "pznm_materialfinance"+"审核失败");
  567. }
  568. } else {
  569. resultData.put("errors", "pznm_materialfinance"+"创建失败");
  570. }
  571. }
  572. }
  573. }
  574. private void doAddNew(Map resultData, DynamicObject material) {
  575. OperateOption option=OperateOption.create();
  576. //传入自定义参数
  577. //设置该操作已经验权,无需再次验权
  578. option.setVariableValue(OperateOptionConst.ISHASRIGHT,"true");
  579. OperationResult result_submit = OperationServiceHelper.executeOperate("submit", "bd_customer",
  580. new DynamicObject[]{material}, option);
  581. if (result_submit.isSuccess()) {
  582. OperationResult result_audit = OperationServiceHelper.executeOperate("audit", "bd_customer",
  583. new DynamicObject[]{material}, option);
  584. //执行客户对应组织分配
  585. if (result_audit.isSuccess()) {//保存客户成功
  586. resultData.put("errors", null);
  587. resultData.put("id", result_audit.getSuccessPkIds().get(0));
  588. resultData.put("billStatus", true);
  589. } else {//提交客户失败
  590. List errors = new ArrayList();
  591. ValidateResultCollection validateResults = result_audit.getValidateResult();
  592. List<ValidateResult> validateResultList = validateResults.getValidateErrors();
  593. for (ValidateResult validateResult : validateResultList) {
  594. List<OperateErrorInfo> allErrorInfos = validateResult.getAllErrorInfo();
  595. for (OperateErrorInfo allErrorInfo : allErrorInfos) {
  596. errors.add(allErrorInfo.getMessage());
  597. }
  598. }
  599. resultData.put("errors", errors);
  600. resultData.put("id", "");
  601. resultData.put("billStatus", false);
  602. failCount++;
  603. }
  604. } else {
  605. List errors = new ArrayList();
  606. ValidateResultCollection validateResults = result_submit.getValidateResult();
  607. List<ValidateResult> validateResultList = validateResults.getValidateErrors();
  608. for (ValidateResult validateResult : validateResultList) {
  609. List<OperateErrorInfo> allErrorInfos = validateResult.getAllErrorInfo();
  610. for (OperateErrorInfo allErrorInfo : allErrorInfos) {
  611. errors.add(allErrorInfo.getMessage());
  612. }
  613. }
  614. resultData.put("errors", errors);
  615. resultData.put("id", "");
  616. resultData.put("billStatus", false);
  617. failCount++;
  618. }
  619. }
  620. /**
  621. * 设置单据头字段
  622. *
  623. * @param newDatas
  624. * @param material
  625. * @param resultData
  626. */
  627. private void setHeadValue(Map newDatas, DynamicObject material, Map resultData) throws ParseException {
  628. //物料编码
  629. WebApiUtils.setTextField(true, "number", "number", newDatas, resultData, material);
  630. //物料名称
  631. WebApiUtils.setTextField(true, "name", "name", newDatas, resultData, material);
  632. //规格型号
  633. WebApiUtils.setTextField(true, "modelnum", "modelnum", newDatas, resultData, material);
  634. //基本单位.编码
  635. WebApiUtils.setDynamicField(true, "baseunit_number", "baseunit", "bd_measureunits", newDatas, resultData, material);
  636. //创建人
  637. WebApiUtils.setDynamicField(true, "creator_number", "creator", "bos_user", newDatas, resultData, material);
  638. //创建时间
  639. WebApiUtils.setDateField(true, "createtime", "createtime", newDatas, resultData, material);
  640. //修改人
  641. WebApiUtils.setDynamicField(true, "modifier_number", "modifier", "bos_user", newDatas, resultData, material);
  642. //修改时间
  643. WebApiUtils.setDateField(true, "modifytime", "modifytime", newDatas, resultData, material);
  644. //审核人
  645. WebApiUtils.setDynamicField(true, "auditor_number", "approverid", "bos_user", newDatas, resultData, material);
  646. //审核时间
  647. WebApiUtils.setDateField(true, "audittime", "approvedate", newDatas, resultData, material);
  648. //修改人
  649. WebApiUtils.setDynamicField(true,"modifier_number","pznm_modifier_xh","bos_user", newDatas, resultData, material);
  650. //审核人
  651. WebApiUtils.setDynamicField(true,"auditor_number","pznm_auditor_xh","bos_user",newDatas, resultData, material);
  652. //创建组织
  653. WebApiUtils.setDynamicField(true, "createorg_number", "createorg", "bos_org", newDatas, resultData, material);
  654. //控制策略
  655. material.set("ctrlstrategy", 5);
  656. //物料类型
  657. //物资 1
  658. // 费用 7
  659. // 资产 8
  660. // 服务 9
  661. // 套件 3
  662. // 虚拟件 2
  663. // 可配置件 4
  664. // 特征件 5
  665. WebApiUtils.setTextField(true, "materialtype", "materialtype", newDatas, resultData, material);
  666. //可采购
  667. WebApiUtils.setBooleanField(false, "enablepur", "enablepur", true, newDatas, resultData, material);
  668. //可销售
  669. WebApiUtils.setBooleanField(false, "enablesale", "enablesale", true, newDatas, resultData, material);
  670. //可库存
  671. WebApiUtils.setBooleanField(false, "enableinv", "enableinv", true, newDatas, resultData, material);
  672. //可生产
  673. WebApiUtils.setBooleanField(false, "enableproduct", "enableproduct", true, newDatas, resultData, material);
  674. //可资产
  675. WebApiUtils.setBooleanField(false, "enableasset", "enableasset", true, newDatas, resultData, material);
  676. //可委外
  677. WebApiUtils.setBooleanField(false, "enableoutsource", "enableoutsource", true, newDatas, resultData, material);
  678. //可受托
  679. WebApiUtils.setBooleanField(false, "enabletrustee", "enabletrustee", true, newDatas, resultData, material);
  680. //可寄售
  681. WebApiUtils.setBooleanField(false, "enableconsign", "enableconsign", true, newDatas, resultData, material);
  682. //可VMI
  683. WebApiUtils.setBooleanField(false, "enablevmi", "enablevmi", true, newDatas, resultData, material);
  684. //助记码
  685. WebApiUtils.setTextField(false, "number", "number", newDatas, resultData, material);
  686. //旧物料编码
  687. WebApiUtils.setTextField(false, "oldnumber", "oldnumber", newDatas, resultData, material);
  688. //描述
  689. WebApiUtils.setTextField(false, "description", "description", newDatas, resultData, material);
  690. //默认税率
  691. WebApiUtils.setDynamicField(false, "taxrate_number", "taxrate", "bd_taxrate", newDatas, resultData, material);
  692. //税收分类编码
  693. WebApiUtils.setDynamicField(false, "pznm_taxclasscode_number", "pznm_taxclasscode", "er_taxclasscode", newDatas, resultData, material);
  694. //启用辅助属性
  695. WebApiUtils.setBooleanField(true, "isuseauxpty", "isuseauxpty", true, newDatas, resultData, material);
  696. //开启辅助属性
  697. if (null != newDatas.get("isuseauxpty") && "1".equals(newDatas.get("isuseauxpty"))) {
  698. //辅助属性
  699. if (newDatas.get("auxptyentry") != null) {
  700. List<Map> mapEntrys = (List<Map>) newDatas.get("auxptyentry");
  701. doSetAuxptyentryEntry(mapEntrys, resultData, material);
  702. } else {
  703. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  704. resultData.put("errors", errors+"参数【auxptyentry】必填");
  705. }
  706. }
  707. //物料分类
  708. if (newDatas.get("entry_groupstandard") != null) {
  709. List<Map> mapEntrys = (List<Map>) newDatas.get("entry_groupstandard");
  710. doSetGroupEntry(mapEntrys, resultData, material);
  711. } else {
  712. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  713. resultData.put("errors", errors+"参数【entry_groupstandard】必填");
  714. }
  715. //业务属性
  716. if (newDatas.get("serviceattribute") != null) {
  717. List<Map> mapEntrys = (List<Map>) newDatas.get("serviceattribute");
  718. doSetServiceattributeEntry(mapEntrys, resultData, material);
  719. } else {
  720. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  721. resultData.put("errors", errors+"参数【serviceattribute】必填");
  722. }
  723. }
  724. /**
  725. * 填充多选基础资料,业务属性
  726. *
  727. * @param mapEntrys
  728. * @param resultData
  729. * @param material
  730. */
  731. private void doSetServiceattributeEntry(List<Map> mapEntrys, Map resultData, DynamicObject material) {
  732. DynamicObjectCollection serviceattributeCol = material.getDynamicObjectCollection("serviceattribute");
  733. serviceattributeCol.clear();
  734. for (Map mapEntry : mapEntrys) {
  735. if (null != mapEntry.get("number") && null != mapEntry.get("entity_number")) {
  736. QFilter qFilter_number = new QFilter("number", QCP.equals, mapEntry.get("number"));
  737. QFilter qFilter_entity_number = new QFilter("entity.number", QCP.equals, mapEntry.get("entity_number"));
  738. QFilter qFilter_enable = new QFilter("enable", QCP.equals, "1");
  739. QFilter qFilter_status = new QFilter("status", QCP.equals, "C");
  740. DynamicObject objCol = BusinessDataServiceHelper.loadSingleFromCache("bd_serviceattribute", "id,number,name,entity",
  741. new QFilter[]{qFilter_number, qFilter_entity_number, qFilter_enable, qFilter_status});
  742. if (objCol != null) {
  743. DynamicObject serviceattributeObj = serviceattributeCol.addNew();
  744. serviceattributeObj.set("fbasedataid", objCol);
  745. } else {
  746. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  747. resultData.put("errors", errors+"参数【serviceattribute】值匹配不成功,可能的原因是:1、编码不正确;2、不符合基础资料字段查询条件");
  748. }
  749. } else {
  750. String errors = resultData.get("errors")!=null?resultData.get("errors").toString()+";":"";
  751. resultData.put("errors", errors+"参数【serviceattribute】中 【number】【entity_number】必填");
  752. }
  753. }
  754. }
  755. /**
  756. * 填充辅助属性
  757. *
  758. * @param mapEntrys
  759. * @param resultData
  760. * @param material
  761. */
  762. private void doSetAuxptyentryEntry(List<Map> mapEntrys, Map resultData, DynamicObject material) {
  763. DynamicObjectCollection entrys = material.getDynamicObjectCollection("auxptyentry");
  764. entrys.clear();
  765. for (Map mapEntry : mapEntrys) {
  766. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  767. //辅助属性.编码
  768. WebApiUtils.setDynamicField(true, "auxpty_number", "auxpty", "bd_auxproperty",
  769. mapEntry, resultData, newEntry);
  770. entrys.add(newEntry);
  771. }
  772. }
  773. /**
  774. * 填充分类
  775. *
  776. * @param mapEntrys
  777. * @param resultData
  778. * @param material
  779. */
  780. private void doSetGroupEntry(List<Map> mapEntrys, Map resultData, DynamicObject material) {
  781. DynamicObjectCollection entrys = material.getDynamicObjectCollection("entry_groupstandard");
  782. entrys.clear();
  783. for (Map mapEntry : mapEntrys) {
  784. DynamicObject newEntry = new DynamicObject(entrys.getDynamicObjectType());
  785. //分类标准.编码
  786. WebApiUtils.setDynamicField(true, "standardid_number", "standardid", "bd_materialgroupstandard",
  787. mapEntry, resultData, newEntry);
  788. //分类.编码
  789. WebApiUtils.setDynamicField(true, "groupid_number", "groupid", "bd_materialgroup",
  790. mapEntry, resultData, newEntry);
  791. entrys.add(newEntry);
  792. }
  793. }
  794. public void updateMasterData(Long id, Map updateData, String entityName, Map resultData) throws ParseException {
  795. Map<String, OperationApiVo> resultMap = null;
  796. DynamicObjectType dynamicObjectType = BusinessDataServiceHelper.newDynamicObject(entityName).getDynamicObjectType();
  797. DynamicObject material = BusinessDataServiceHelper.loadSingle(id, dynamicObjectType);
  798. setHeadValue(updateData, material, resultData);
  799. if (resultData.get("errors") != null && !"".equals(resultData.get("errors"))) {
  800. List errors = new ArrayList();
  801. errors.add(resultData.get("errors"));
  802. resultData.put("id", "");
  803. resultData.put("errors", errors);
  804. resultData.put("billStatus", false);
  805. } else {
  806. //保存客户对象
  807. String status = material.getString("status");
  808. if ("A".equals(status)) {//暂存,走正常逻辑
  809. doAddNew(resultData, material);
  810. } else if ("C".equals(status)) {//审核
  811. SaveServiceHelper.update(material);
  812. resultData.put("errors", null);
  813. resultData.put("id", material.getPkValue());
  814. resultData.put("billStatus", true);
  815. }
  816. generateMaterialBizInfo(material,updateData,resultData);
  817. if (resultData.get("errors") != null && !"".equals(resultData.get("errors"))) {
  818. if(!((Boolean)resultData.get("billStatus"))) {
  819. throw new KDBizException(resultData.get("errors").toString());
  820. }
  821. }
  822. resultData.put("errors", null);
  823. resultData.put("id", material.getPkValue());
  824. resultData.put("billStatus", true);
  825. }
  826. }
  827. public void forceSetStatusAndEnable(Map jsonObj) {
  828. if (jsonObj != null) {
  829. jsonObj.put("status", StatusEnum.SAVE.getCode());
  830. jsonObj.put("enable", EnableEnum.ENABLE.getCode());
  831. }
  832. }
  833. }