| 
					
				 | 
			
			
				@@ -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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //查询e管家实物卡片清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //获取星瀚资产编码,查询关联的e管家实物卡片清单数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //查询e管家实物卡片清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    QFilter qfilter = new QFilter("nckd_card_real_code", QCP.equals,code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DynamicObject[] cardObject = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {qfilter}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //e管家推送的清单和星瀚系统保存的清单数量不一致,返回错误信息并且不能生成调拨单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    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");//调拨类型 A="平价调拨",B="非平价调拨" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |