|
@@ -0,0 +1,357 @@
|
|
|
+package fi.fa.webService;
|
|
|
+
|
|
|
+
|
|
|
+import com.alibaba.druid.util.StringUtils;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import kd.bos.coderule.api.CodeRuleInfo;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.openapi.common.custom.annotation.ApiController;
|
|
|
+import kd.bos.openapi.common.custom.annotation.ApiMapping;
|
|
|
+import kd.bos.openapi.common.custom.annotation.ApiParam;
|
|
|
+import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
|
|
|
+import kd.bos.openapi.common.result.CustomApiResult;
|
|
|
+import kd.bos.orm.query.QCP;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
|
|
|
+import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import java.io.Serializable;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+
|
|
|
+ * 接收e管家资产调拨单接口
|
|
|
+ */
|
|
|
+@ApiController(value = "midDispatch", desc = "自定义API 中间表新增")
|
|
|
+@ApiMapping(value = "saveMidDispatchApi")
|
|
|
+public class DispatchMidController implements Serializable {
|
|
|
+
|
|
|
+ * @description 资产调拨单中间表新增接口,资产调拨单下推接口
|
|
|
+ * @param info
|
|
|
+ * @return CustomApiResult
|
|
|
+ */
|
|
|
+ @ApiPostMapping(value = "/add", desc = "新增资产调拨单中间表")
|
|
|
+ public CustomApiResult<Object> AddMidDispatch (@ApiParam(value = "e管家资产调拨单") JSONObject info) {
|
|
|
+ StringBuilder resultString = new StringBuilder();
|
|
|
+ JSONArray data = info.getJSONArray("data");
|
|
|
+
|
|
|
+ for (int i = 0; i < data.size(); i++) {
|
|
|
+ try{
|
|
|
+ JSONObject eobject = data.getJSONObject(i);
|
|
|
+ HashMap<String , Long> map = new HashMap<>();
|
|
|
+
|
|
|
+ SaveMidDispatch(eobject);
|
|
|
+
|
|
|
+ String errorChange = Control(eobject, map);
|
|
|
+
|
|
|
+ String errorCode = Check(eobject, map);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(errorCode) && StringUtils.isEmpty(errorChange)) {
|
|
|
+
|
|
|
+ Push(eobject, map);
|
|
|
+
|
|
|
+ OncePush(eobject.getString("billno"));
|
|
|
+ }
|
|
|
+
|
|
|
+ appendErrorMessages(resultString, errorChange, errorCode);
|
|
|
+ } catch (Exception e){
|
|
|
+ resultString.append("保存过程中发生异常:").append(e.getMessage()).append("\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultString.length() == 0
|
|
|
+ ? CustomApiResult.success("推送调拨单成功!")
|
|
|
+ : CustomApiResult.fail("404", resultString.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 保存中间表
|
|
|
+ * @param jsonObject
|
|
|
+ */
|
|
|
+ private void SaveMidDispatch(JSONObject jsonObject) {
|
|
|
+ DynamicObject midDispatch;
|
|
|
+
|
|
|
+ QFilter filter = new QFilter("number", QCP.equals, jsonObject.getString("billno"));
|
|
|
+ DynamicObject[] mid = BusinessDataServiceHelper.load("nckd_e_dispatch_mid","id",new QFilter[] {filter});
|
|
|
+ if (mid.length > 0) {
|
|
|
+ midDispatch = BusinessDataServiceHelper.loadSingle(mid[0].getPkValue(), mid[0].getDynamicObjectType().getName());
|
|
|
+ }else {
|
|
|
+ midDispatch = BusinessDataServiceHelper.newDynamicObject("nckd_e_dispatch_mid");
|
|
|
+ }
|
|
|
+
|
|
|
+ midDispatch.set("number", jsonObject.getString("billno"));
|
|
|
+ midDispatch.set("nckd_user_out", jsonObject.getString("sendUser"));
|
|
|
+ midDispatch.set("nckd_user_in", jsonObject.getString("recieveUser"));
|
|
|
+ midDispatch.set("nckd_date_out", jsonObject.getDate("sendDate"));
|
|
|
+ midDispatch.set("nckd_org_out", jsonObject.getString("outOrgId"));
|
|
|
+ midDispatch.set("nckd_org_in", jsonObject.getString("orgId"));
|
|
|
+ midDispatch.set("nckd_reason", jsonObject.getString("reason"));
|
|
|
+ midDispatch.set("nckd_changemode", "调出");
|
|
|
+ midDispatch.set("nckd_dispatch_type", jsonObject.getString("dispatchType"));
|
|
|
+ midDispatch.set("nckd_dept_in", jsonObject.getString("inDeptId"));
|
|
|
+ midDispatch.set("nckd_used_user", jsonObject.getString("user"));
|
|
|
+ midDispatch.set("nckd_storeplace", jsonObject.getString("storeplace"));
|
|
|
+ String cardNumber = "";
|
|
|
+ JSONArray assetArray = jsonObject.getJSONArray("asset");
|
|
|
+ for (int j = 0; j < assetArray.size(); j++) {
|
|
|
+
|
|
|
+ JSONObject asset = assetArray.getJSONObject(j);
|
|
|
+ String number = asset.getString("number");
|
|
|
+ String orgId = asset.getString("orgId");
|
|
|
+ cardNumber = number+ ":" + orgId + ",";
|
|
|
+ }
|
|
|
+ midDispatch.set("nckd_card_number_tag", cardNumber);
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{midDispatch});
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description e管家推送数据校验
|
|
|
+ * @param jsonObject,map
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String Check(JSONObject jsonObject, HashMap<String , Long> map) {
|
|
|
+ String billno = jsonObject.getString("billno");
|
|
|
+ String user = jsonObject.getString("user");
|
|
|
+ List<String> numberList = new ArrayList<>();
|
|
|
+
|
|
|
+ if (isAlreadyDispatched(billno)) {
|
|
|
+ return "单据" + billno + "已经生成调拨单,请勿重复推送!";
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray assetArray = jsonObject.getJSONArray("asset");
|
|
|
+ if (assetArray.isEmpty()) {
|
|
|
+ return "单据" + billno + "未绑定资产信息,生成调拨单失败";
|
|
|
+ }
|
|
|
+ Boolean isSame = true;
|
|
|
+
|
|
|
+ for (int j = 0; j < assetArray.size(); j++) {
|
|
|
+
|
|
|
+ JSONObject asset = assetArray.getJSONObject(j);
|
|
|
+ if (!asset.getString("orgId").equals(assetArray.getJSONObject(0).getString("orgId"))) {
|
|
|
+ isSame = false;
|
|
|
+ }
|
|
|
+ numberList.add(asset.getString("number"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isSame) {
|
|
|
+ String e_orgId = assetArray.getJSONObject(0).getString("orgId");
|
|
|
+
|
|
|
+ QFilter filter = new QFilter("number", QCP.in,numberList);
|
|
|
+ DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
|
|
|
+ if (dynamicObjects.length == 0 || dynamicObjects.length != numberList.size()) {
|
|
|
+ return "单据"+billno+"绑定的资产有未同步至星瀚的数据,生成调拨单失败";
|
|
|
+ }else {
|
|
|
+ DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(dynamicObjects[0].getPkValue(), dynamicObjects[0].getDynamicObjectType().getName());
|
|
|
+
|
|
|
+ String code = cardInfo.getString("nckd_card_real_code");
|
|
|
+ if (StringUtils.isEmpty(code)) {
|
|
|
+
|
|
|
+ Long orgId = getOrg(e_orgId);
|
|
|
+ if (ObjectUtils.isNotEmpty(orgId)) {
|
|
|
+
|
|
|
+ for (int a = 0; a < dynamicObjects.length ; a++) {
|
|
|
+ DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
|
|
|
+ ecardInfoList.set("nckd_orgfield",orgId);
|
|
|
+ ecardInfoList.set("nckd_dept",map.get("inDeptId"));
|
|
|
+ ecardInfoList.set("nckd_use_name",user);
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ return "资产信息的组织在组织对照表中未查询到数据,生成调拨单失败";
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+
|
|
|
+ QFilter qfilter = new QFilter("nckd_card_real_code", QCP.equals,code);
|
|
|
+ DynamicObject[] cardObject = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {qfilter});
|
|
|
+
|
|
|
+ if (cardObject.length > 0 && assetArray.size() != cardObject.length) {
|
|
|
+ return "单据"+billno+"绑定的资产信息与星瀚实物卡片数量不一致,生成调拨单失败";
|
|
|
+ }
|
|
|
+ jsonObject.put("nckd_card_real_code", code);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+
|
|
|
+ return "单据"+billno+"绑定的资产信息组织不相同,生成调拨单失败";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 下推生成资产调拨单
|
|
|
+ * @param jsonObject,map
|
|
|
+ */
|
|
|
+ private void Push(JSONObject jsonObject, HashMap<String , Long> map) {
|
|
|
+ String dispatchType = jsonObject.getString("dispatchType");
|
|
|
+
|
|
|
+ if ("0".equals(dispatchType)) {
|
|
|
+ DynamicObject dispatch = BusinessDataServiceHelper.newDynamicObject("fa_dispatch");
|
|
|
+
|
|
|
+ CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dispatch.getDataEntityType().getName(), dispatch, null);
|
|
|
+ String sysCode = CodeRuleServiceHelper.getNumber(codeRule, dispatch);
|
|
|
+ String nckd_card_real_code = jsonObject.getString("nckd_card_real_code");
|
|
|
+ nckd_card_real_code = "A00100101900240800008";
|
|
|
+
|
|
|
+ String firstTenChars = nckd_card_real_code.substring(0, 10);
|
|
|
+ String billno = firstTenChars + sysCode;
|
|
|
+
|
|
|
+ dispatch.set("billno", billno);
|
|
|
+ dispatch.set("outuser", map.get("sendUser"));
|
|
|
+ dispatch.set("inuser", map.get("recieveUser"));
|
|
|
+ dispatch.set("dispatchdate", jsonObject.getDate("sendDate"));
|
|
|
+ dispatch.set("assetunit", map.get("outOrgId"));
|
|
|
+ dispatch.set("inassetunit", map.get("orgId"));
|
|
|
+ dispatch.set("org", map.get("outOrgId"));
|
|
|
+ dispatch.set("inorg", map.get("orgId"));
|
|
|
+ dispatch.set("reason", jsonObject.getString("reason"));
|
|
|
+ dispatch.set("dispatchtype", "A");
|
|
|
+ dispatch.set("changemode", 14);
|
|
|
+ dispatch.set("currency", 1);
|
|
|
+ dispatch.set("currencyrate", 1);
|
|
|
+
|
|
|
+ dispatch.set("creator", map.get("sendUser"));
|
|
|
+ dispatch.set("createtime", jsonObject.getDate("sendDate"));
|
|
|
+ dispatch.set("modifier", map.get("recieveUser"));
|
|
|
+ dispatch.set("modifytime", jsonObject.getDate("sendDate"));
|
|
|
+ dispatch.set("auditor", map.get("recieveUser"));
|
|
|
+ dispatch.set("auditdate", jsonObject.getDate("sendDate"));
|
|
|
+ dispatch.set("billstatus", "C");
|
|
|
+ dispatch.set("appliant", map.get("sendUser"));
|
|
|
+
|
|
|
+
|
|
|
+ QFilter cardFilter = new QFilter("billno", QCP.equals,nckd_card_real_code);
|
|
|
+ DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {cardFilter});
|
|
|
+ for (int c = 0; c < card.length; c++) {
|
|
|
+ DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName());
|
|
|
+
|
|
|
+ DynamicObjectCollection entryEntity = dispatch.getDynamicObjectCollection("dispatchentry");
|
|
|
+ DynamicObject entry1 = entryEntity.addNew();
|
|
|
+ entry1.set("realcard", cardInfo);
|
|
|
+ entry1.set("measurement", cardInfo.getDynamicObject("unit").getLong("id"));
|
|
|
+ entry1.set("dispatchqty", cardInfo.getInt("assetamount"));
|
|
|
+ entry1.set("inusedept", map.get("inDeptId"));
|
|
|
+ }
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{dispatch});
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 查询组织对照表获取组织id
|
|
|
+ * @param eOrgId
|
|
|
+ * @return Long
|
|
|
+ */
|
|
|
+ private Long getOrg(String eOrgId) {
|
|
|
+ QFilter orgFilter = new QFilter("nckd_e_org", QCP.equals,eOrgId);
|
|
|
+ DynamicObject[] orgControl = BusinessDataServiceHelper.load("nckd_base_org_ext","id",new QFilter[] {orgFilter});
|
|
|
+ if (orgControl.length > 0) {
|
|
|
+ DynamicObject orgControlInfo = BusinessDataServiceHelper.loadSingle(orgControl[0].getPkValue(), orgControl[0].getDynamicObjectType().getName());
|
|
|
+ Long orgId = Long.valueOf(orgControlInfo.getString("nckd_org_number"));
|
|
|
+ return orgId;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ QFilter filter = new QFilter("id", QCP.equals,Long.valueOf(eOrgId));
|
|
|
+ DynamicObject[] org = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {filter});
|
|
|
+ if (org.length > 0) {
|
|
|
+ DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[0].getPkValue(), org[0].getDynamicObjectType().getName());
|
|
|
+ return orgInfo.getLong("id");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 查询用户表获取用户
|
|
|
+ * @param eUser
|
|
|
+ * @return Long
|
|
|
+ */
|
|
|
+ private Long getUser(String eUser) {
|
|
|
+ QFilter filter = new QFilter("number", QCP.in, eUser);
|
|
|
+ DynamicObject[] user = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {filter});
|
|
|
+ if (user.length > 0) {
|
|
|
+ DynamicObject userInfo = BusinessDataServiceHelper.loadSingle(user[0].getPkValue(), user[0].getDynamicObjectType().getName());
|
|
|
+ Long userId = userInfo.getLong("id");
|
|
|
+ return userId;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * @description e管家数据转换为星瀚数据
|
|
|
+ * @param jsonObject,map
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String Control (JSONObject jsonObject, HashMap<String , Long> map) {
|
|
|
+
|
|
|
+ Long sendUser = getUser(jsonObject.getString("sendUser"));
|
|
|
+ Long recieveUser = getUser(jsonObject.getString("recieveUser"));
|
|
|
+ Long user = getUser(jsonObject.getString("user"));
|
|
|
+ if (ObjectUtils.isEmpty(sendUser) || ObjectUtils.isEmpty(recieveUser) || ObjectUtils.isEmpty(user)) {
|
|
|
+ return "人员信息转换失败";
|
|
|
+ }
|
|
|
+ map.put("sendUser", sendUser);
|
|
|
+ map.put("recieveUser", recieveUser);
|
|
|
+ map.put("user", user);
|
|
|
+
|
|
|
+
|
|
|
+ Long outOrgId = getOrg(jsonObject.getString("outOrgId"));
|
|
|
+ Long orgId = getOrg(jsonObject.getString("orgId"));
|
|
|
+ Long inDeptId = getOrg(jsonObject.getString("inDeptId"));
|
|
|
+ if (ObjectUtils.isEmpty(outOrgId) || ObjectUtils.isEmpty(orgId) || ObjectUtils.isEmpty(inDeptId)) {
|
|
|
+ return "组织信息转换失败";
|
|
|
+ }
|
|
|
+ map.put("outOrgId", outOrgId);
|
|
|
+ map.put("orgId", orgId);
|
|
|
+ map.put("inDeptId", inDeptId);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * @description 生单后反写中间表,防止反复生单
|
|
|
+ * @param billno
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private void OncePush(String billno) {
|
|
|
+ QFilter filter = new QFilter("number", QCP.equals, billno);
|
|
|
+ DynamicObject[] mid = BusinessDataServiceHelper.load("nckd_e_dispatch_mid","id",new QFilter[] {filter});
|
|
|
+ DynamicObject midDispatch = BusinessDataServiceHelper.loadSingle(mid[0].getPkValue(), mid[0].getDynamicObjectType().getName());
|
|
|
+ midDispatch.set("nckd_flag", "1");
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{midDispatch});
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 判断是否已经下推生成调拨单
|
|
|
+ * @param billno
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ private boolean isAlreadyDispatched(String billno) {
|
|
|
+ QFilter flagFilter = new QFilter("number", QCP.equals, billno);
|
|
|
+ DynamicObject[] mid = BusinessDataServiceHelper.load("nckd_e_dispatch_mid", "id", new QFilter[]{flagFilter});
|
|
|
+ if (mid.length > 0) {
|
|
|
+ DynamicObject midDispatch = BusinessDataServiceHelper.loadSingle(mid[0].getPkValue(), mid[0].getDynamicObjectType().getName());
|
|
|
+ String flag = midDispatch.getString("nckd_flag");
|
|
|
+ return "1".equals(flag);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @description 拼接错误信息
|
|
|
+ * @param resultString,errorChange,errorCode
|
|
|
+ */
|
|
|
+ private void appendErrorMessages(StringBuilder resultString, String errorChange, String errorCode) {
|
|
|
+ if (!StringUtils.isEmpty(errorChange)) {
|
|
|
+ resultString.append(errorChange).append("\n");
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(errorCode)) {
|
|
|
+ resultString.append(errorCode).append("\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|