|
|
|
@ -0,0 +1,232 @@
|
|
|
|
|
package com.hw.jindie.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
|
|
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
|
|
|
|
import com.hw.jindie.config.KingdeeConfig;
|
|
|
|
|
import com.kingdee.bos.webapi.entity.RepoRet;
|
|
|
|
|
import com.kingdee.bos.webapi.entity.RepoStatus;
|
|
|
|
|
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @Description: 金蝶ERP交互业务处理类
|
|
|
|
|
* @Author : Yinq
|
|
|
|
|
* @Date :2024-04-08 14:38
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
public class KingdeeErpService {
|
|
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(KingdeeErpService.class);
|
|
|
|
|
|
|
|
|
|
private final K3CloudApi client;
|
|
|
|
|
|
|
|
|
|
public KingdeeErpService(K3CloudApi client) {
|
|
|
|
|
this.client = client;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 单一采购申请单保存->提交->审核
|
|
|
|
|
*
|
|
|
|
|
* @param params
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String singleSavePurchaseRequisition(String params) {
|
|
|
|
|
Gson gsonParams = new Gson();
|
|
|
|
|
JSONObject objectParams = gsonParams.fromJson(params, JSONObject.class);
|
|
|
|
|
JSONObject model = new JSONObject();
|
|
|
|
|
JSONObject FEntity = new JSONObject();
|
|
|
|
|
String FMaterialId = (String) objectParams.get("FMaterialId");//物料编码
|
|
|
|
|
// String FMaterialDesc = (String) objectParams.get("FMaterialDesc");//物料说明
|
|
|
|
|
Double FReqQty = (Double) objectParams.get("FReqQty");//采购数量
|
|
|
|
|
try {
|
|
|
|
|
//业务对象标识
|
|
|
|
|
String formId = KingdeeConfig.PUR_Requisition;
|
|
|
|
|
//调用接口
|
|
|
|
|
FEntity.put("FRequireOrgId", KingdeeConfig.getFApplicationOrgId()); //需求组织(必填项)
|
|
|
|
|
JSONObject FMaterialIdObject = new JSONObject();
|
|
|
|
|
FMaterialIdObject.put("FNumber", FMaterialId);
|
|
|
|
|
FEntity.put("FMaterialId", FMaterialIdObject); //物料编码(必填项)
|
|
|
|
|
FEntity.put("FPurchaseOrgId", KingdeeConfig.getFApplicationOrgId()); //采购组织(必填项)
|
|
|
|
|
JSONObject FUnitId = new JSONObject();
|
|
|
|
|
FUnitId.put("FNumber", "m");
|
|
|
|
|
FEntity.put("FUnitId", FUnitId); //申请单位(必填项)
|
|
|
|
|
FEntity.put("FPriceUnitId", FUnitId); //计价单位(必填项)
|
|
|
|
|
FEntity.put("FREQSTOCKUNITID", FUnitId); //库存单位(必填项)
|
|
|
|
|
FEntity.put("FReqQty", FReqQty); //申请数量
|
|
|
|
|
// FEntity.put("FMaterialDesc", FMaterialDesc); //物料说明
|
|
|
|
|
// FEntity.put("FReceiveOrgId", KingdeeConfig.getFApplicationOrgId()); //收料组织
|
|
|
|
|
// FEntity.put("FApproveQty", FReqQty); //批准数量
|
|
|
|
|
// FEntity.put("FEvaluatePrice", 0.0); //单价
|
|
|
|
|
// FEntity.put("FTAXPRICE", 0.0); //含税单价
|
|
|
|
|
// FEntity.put("FTAXRATE", 0.0); //税率%
|
|
|
|
|
// FEntity.put("FPriceUnitQty", FReqQty); //计价数量
|
|
|
|
|
// FEntity.put("FREQSTOCKQTY", FReqQty); //库存单位数量
|
|
|
|
|
// FEntity.put("FLeadTime", 0); //提前期
|
|
|
|
|
// FEntity.put("FSrcBillTypeId", ""); //源单类型
|
|
|
|
|
// FEntity.put("FSrcBillNo", ""); //源单编号
|
|
|
|
|
// FEntity.put("FBaseReqQty", FReqQty); //申请数量
|
|
|
|
|
// FEntity.put("FSalUnitID", FUnitId); //销售单位
|
|
|
|
|
// FEntity.put("FSalQty", FReqQty); //销售数量
|
|
|
|
|
// FEntity.put("FSalBaseQty", FReqQty); //销售基本数量
|
|
|
|
|
// FEntity.put("FIsVmiBusiness", false); //VMI业务
|
|
|
|
|
// FEntity.put("FDEMANDBILLENTRYSEQ", 0); // 需求单据行号
|
|
|
|
|
// FEntity.put("FDEMANDBILLENTRYID", 0); // 需求单据分录内码
|
|
|
|
|
ArrayList<JSONObject> entityList = new ArrayList<>();
|
|
|
|
|
entityList.add(FEntity);
|
|
|
|
|
model.put("FEntity", entityList);
|
|
|
|
|
String saveParams = this.saveGenericAssemblyEntity(model);
|
|
|
|
|
String resultJson = client.save(formId, saveParams);
|
|
|
|
|
// String resultJson = "{\"Result\":{\"ResponseStatus\":{\"IsSuccess\":true,\"Errors\":[],\"SuccessEntitys\":[{\"Id\":154903,\"Number\":\"CGSQ010788\",\"DIndex\":0}],\"SuccessMessages\":[],\"MsgCode\":0},\"Id\":154903,\"Number\":\"CGSQ010788\",\"NeedReturnData\":[{}]}}";
|
|
|
|
|
|
|
|
|
|
//用于记录结果
|
|
|
|
|
Gson gson = new Gson();
|
|
|
|
|
//对返回结果进行解析和校验
|
|
|
|
|
RepoRet repoRet = gson.fromJson(resultJson, RepoRet.class);
|
|
|
|
|
logger.info("singleSavePurchaseRequisition接口调用成功|请求参数:" + saveParams + "|返回结果:" + resultJson);
|
|
|
|
|
RepoStatus responseStatus = repoRet.getResult().getResponseStatus();
|
|
|
|
|
if (responseStatus.isIsSuccess()) {
|
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
|
json.put("formId", KingdeeConfig.PUR_Requisition);
|
|
|
|
|
json.put("Ids", repoRet.getResult().getId());
|
|
|
|
|
//采购申请单提交
|
|
|
|
|
// String commitResult = this.genericCommitInterface(json);
|
|
|
|
|
//采购申请单审核
|
|
|
|
|
// String auditResult = this.genericAuditInterface(json);
|
|
|
|
|
}
|
|
|
|
|
return gson.toJson(responseStatus);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.error("singleSavePurchaseRequisition|params:" + params + "|Exception:" + e);
|
|
|
|
|
return e.getMessage();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 保存通用组装实体
|
|
|
|
|
*
|
|
|
|
|
* @param model 模型
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String saveGenericAssemblyEntity(JSONObject model) {
|
|
|
|
|
// 组装数据json
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
result.put("NeedUpDateFields", new ArrayList<>());
|
|
|
|
|
result.put("NeedReturnFields", new ArrayList<>());
|
|
|
|
|
result.put("IsDeleteEntry", "true");
|
|
|
|
|
result.put("SubSystemId", "");
|
|
|
|
|
result.put("IsVerifyBaseDataField", "false");
|
|
|
|
|
result.put("IsEntryBatchFill", "true");
|
|
|
|
|
result.put("ValidateFlag", "true");
|
|
|
|
|
result.put("NumberSearch", "true");
|
|
|
|
|
result.put("IsAutoAdjustField", "false");
|
|
|
|
|
result.put("InterationFlags", "");
|
|
|
|
|
result.put("IgnoreInterationFlag", "");
|
|
|
|
|
result.put("IsControlPrecision", "false");
|
|
|
|
|
result.put("ValidateRepeatJson", "false");
|
|
|
|
|
|
|
|
|
|
model.put("FID", KingdeeConfig.FID);
|
|
|
|
|
model.put("FBillTypeID", KingdeeConfig.getFBillTypeIDPurchase()); //单据类型(必填项)
|
|
|
|
|
model.put("FApplicationDate", KingdeeConfig.FApplicationDate); //申请日期(必填项)
|
|
|
|
|
model.put("FRequestType", KingdeeConfig.FRequestType); //申请类型(必填项)
|
|
|
|
|
model.put("FApplicationOrgId", KingdeeConfig.getFApplicationOrgId()); //申请组织(必填项)
|
|
|
|
|
model.put("F_TOND_Base", KingdeeConfig.getF_TOND_Base()); //京源项目(必填项)
|
|
|
|
|
// model.put("FCurrencyId", KingdeeConfig.getFCurrencyId());
|
|
|
|
|
// model.put("FExchangeTypeId", KingdeeConfig.getFExchangeTypeId());
|
|
|
|
|
// model.put("FISPRICEEXCLUDETAX", true); //价外税
|
|
|
|
|
// model.put("FIsConvert", false); //是否是单据转换
|
|
|
|
|
// model.put("FACCTYPE", "Q"); //验收方式
|
|
|
|
|
// JSONObject FMobBillHead = new JSONObject();
|
|
|
|
|
// FMobBillHead.put("FIsMobBill", false);
|
|
|
|
|
// FMobBillHead.put("FMobIsPending", false);
|
|
|
|
|
// model.put("FMobBillHead", FMobBillHead); //移动单据
|
|
|
|
|
|
|
|
|
|
result.put("Model", model);
|
|
|
|
|
try {
|
|
|
|
|
return result.toJSONString();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ERP通用提交接口
|
|
|
|
|
*
|
|
|
|
|
* @param params
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String genericCommitInterface(JSONObject params) throws Exception {
|
|
|
|
|
JSONObject requestParams = new JSONObject();
|
|
|
|
|
//业务对象标识
|
|
|
|
|
String formId = params.getString("formId");
|
|
|
|
|
requestParams.put("Ids", params.get("Ids"));//单据内码集合
|
|
|
|
|
// requestParams.put("Numbers", params.get("Numbers"));//单据编码集合
|
|
|
|
|
// requestParams.put("CreateOrgId", 0);
|
|
|
|
|
// requestParams.put("IgnoreInterationFlag", "");
|
|
|
|
|
// requestParams.put("InterationFlags", "");
|
|
|
|
|
// requestParams.put("IsVerifyProcInst", "true");
|
|
|
|
|
// requestParams.put("NetworkCtrl", "true");
|
|
|
|
|
// requestParams.put("UseBatControlTimes", "false");
|
|
|
|
|
// requestParams.put("UseOrgId", 0);
|
|
|
|
|
//调用接口
|
|
|
|
|
String s = requestParams.toJSONString();
|
|
|
|
|
System.out.println(s);
|
|
|
|
|
String submit = client.submit(formId, requestParams.toJSONString());
|
|
|
|
|
logger.error("genericCommitInterface|formId:" + formId + "|请求参数:" + requestParams.toJSONString() + "|返回结果:" + submit);
|
|
|
|
|
return submit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ERP通用审核接口
|
|
|
|
|
*
|
|
|
|
|
* @param params
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String genericAuditInterface(JSONObject params) throws Exception {
|
|
|
|
|
JSONObject requestParams = new JSONObject();
|
|
|
|
|
//业务对象标识
|
|
|
|
|
String formId = params.getString("formId");
|
|
|
|
|
requestParams.put("Ids", params.get("Ids"));//单据内码集合
|
|
|
|
|
//调用接口
|
|
|
|
|
String audit = client.audit(formId, requestParams.toJSONString());
|
|
|
|
|
logger.error("genericAuditInterface|formId:" + formId + "|请求参数:" + requestParams.toJSONString() + "|返回结果:" + audit);
|
|
|
|
|
return audit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* ERP通用查看接口
|
|
|
|
|
*
|
|
|
|
|
* @param params
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String genericViewInterface(JSONObject params) throws Exception {
|
|
|
|
|
JSONObject requestParams = new JSONObject();
|
|
|
|
|
//业务对象标识
|
|
|
|
|
String formId = params.getString("formId");
|
|
|
|
|
requestParams.put("Id", params.get("Id"));//单据内码集合
|
|
|
|
|
//调用接口
|
|
|
|
|
String audit = client.view(formId, requestParams.toJSONString());
|
|
|
|
|
System.out.println(("genericAuditInterface|formId:" + formId + "|请求参数:" + requestParams.toJSONString() + "|返回结果:" + audit));
|
|
|
|
|
return audit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 测试组装实体
|
|
|
|
|
*
|
|
|
|
|
* @param params
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public String testAssemblyEntity(String params) {
|
|
|
|
|
JSONObject model = new JSONObject();
|
|
|
|
|
String result = this.saveGenericAssemblyEntity(model);
|
|
|
|
|
System.out.println(result);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|