自动化立体仓库 - WMS系统
lty
8 小时以前 9905847295d326134d50fe7f005522cdfafe2763
#erp商品档案同步
1个文件已删除
10个文件已修改
1个文件已添加
477 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/entity/param/InFormIdParam.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/entity/param/LoginParam.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/entity/param/MatLoadParam.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java
@@ -6,6 +6,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Slf4j
@@ -17,7 +18,7 @@
    @Value("${erp.switch.LoginAuthenticationSwitch}")
    private boolean LoginAuthenticationSwitch;
    //@Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    void login(){
        if(!LoginAuthenticationSwitch){
            return;
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
@@ -32,7 +32,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java
@@ -34,7 +34,7 @@
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Scheduled(cron = "0/3 * * * * ? ")
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -10,10 +10,11 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.ErpSecretServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.erp.kingdee.entity.param.InFormIdParam;
import com.zy.erp.kingdee.entity.param.MatLoadParam;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.utils.KingDeeUtil;
@@ -23,7 +24,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -65,45 +68,48 @@
    @Autowired
    private LocOwnerService locOwnerService;
    @Autowired
    private ErpSecretServiceImpl erpSecretService;
    @Value("${erp.login.accountId}")
    private String accountId;
    @Value("${erp.login.xAcfwIdentity}")
    private String xAcfwIdentity;
    @Transactional
    public synchronized ReturnT<String> start() {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //登录金蝶
        ReturnT<String> start = loginAuthenticationHandler.start();
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
        //读取token
        ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
        for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
            InFormIdParam inFormIdParam = new InFormIdParam();
            MatLoadParam matLoadParam = new MatLoadParam();
            DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
            if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")){
                docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1));
            }
            inFormIdParam.setFormId(kingDeeUtilType.formId);
            inFormIdParam.setLimit(100);
            inFormIdParam.setStartRow("0");
            String FDocumentStatus=null;
            //条件和需要获得的结果拼接
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("FormId", inFormIdParam.getFormId());
            jsonObject.put("Limit", inFormIdParam.getLimit());
            jsonObject.put("StartRow", inFormIdParam.getStartRow());
            //物料档案查询
            if(kingDeeUtilType.formId.equals("BD_MATERIAL")){
                Tag tag = tagService.selectByName("全部", 1);
                //物料状态 FUseOrgId .FNumber
                FDocumentStatus="C";
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(tag.getUpdateTime())+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='100'");
                jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
                // FName : 物料名称 ;
                // FNumber :物料编号;
                // FCreateDate :物料创建时间;
                // FSpecification :物料规格;
                // FDocumentStatus :物料状态
                jsonObject.put("id", null);//id
                jsonObject.put("number", null);//编码
                jsonObject.put("createorg_number", null);//创建组织
                jsonObject.put("start_createtime", "2025-01-01 00:00:00");//创建起始
                jsonObject.put("end_createtime", sdf1.format(new Date()));//创建截止
                jsonObject.put("start_modifytime", "2025-01-01 00:00:00");//更新起始
                jsonObject.put("end_modifytime", sdf1.format(new Date()));//更新截止
                jsonObject.put("start_approvedate", "2025-01-01");//审核起始
                jsonObject.put("end_approvedate", sdf2.format(new Date()));//审核截止
                jsonObject.put("status", Arrays.asList("B", "C"));//数据状态 [A:暂存, B:已提交, C:已审核]
            }else{
                //获取最新时间
                //单据状态
                FDocumentStatus="B";
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"'"+" and FStockId.Fname='立库'"+" and FDocumentStatus='"+FDocumentStatus+"'");
                jsonObject.put("FilterString", "FCreateDate>'"+sdf1.format(docType.getCreateTime())+"'"+" and FStockId.Fname='立库'"+" and FDocumentStatus='"+FDocumentStatus+"'");
                jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+kingDeeUtilType.anfme+",FDocumentStatus");
                // FBillNo :单据编号;
                // FCreateDate :单据创建时间;
@@ -116,14 +122,18 @@
            }
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("data", jsonObject);
            jsonObject1.put("pageSize", 10);
            jsonObject1.put("pageNo", 1);
            String add = jsonObject1.toJSONString();
            //上报
            String response = "";
            boolean success = false;
            try {
                //获取Cookie值
                HashMap<String, Object> headers = new HashMap<>();
                headers.put("Cookie", start.getContent());
                headers.put("accesstoken", erpSecret.getAccessToken());
                headers.put("x-acgw-identity", xAcfwIdentity);  // 自定义请求头
                response = new HttpHandler.Builder()
                        .setHeaders(headers)
                        .setUri(URL)
@@ -131,45 +141,98 @@
                        .setJson(add)
                        .build()
                        .doPost();
                JSONArray data = JSON.parseArray(response);
                JSONObject jsonResponse = JSON.parseObject(response);
                if(jsonResponse.getString("errorCode").equals("401")){
                    log.error("检索失败错误信息:{}", jsonResponse.getString("message"));
                    loginAuthenticationHandler.start();
                    continue;
                }
                JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                if(data.size()<=0)  continue;
                if (data.getJSONArray(0).get(0).toString().length()>=20) continue;
                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {//物料档案
                //商品档案同步
                if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
                    Tag tag = tagService.selectByName("全部", 1);
                    for (int j = 0; j < data.size(); j++) {
                        JSONArray jsonArray = data.getJSONArray(j);
                        //对美国时间进行转换
                        Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
                        //生成商品档案
                        //商品编号
                        Mat mat = matService.selectByMatnr(jsonArray.get(1).toString());
                        if (mat == null) {
                            mat = new Mat();
                            mat.setMatnr(jsonArray.get(1).toString());
                            mat.setMaktx(jsonArray.get(0).toString());
                            mat.setSpecs(jsonArray.get(3).toString());//规格
                            mat.setTagId(tag.getId());
                            mat.setCreateTime(jsonDate);//商品创建时间
                            mat.setUpdateTime(new Date());
                            mat.setStatus(1);
                            //最新抓取商品时间
                            if (!matService.insert(mat)) {
//                                throw new CoolException("服务器内部错误,请联系管理员");
                                callApiLogSaveMat(mat,kingDeeUtilType, "同步新物料出错!!!"+mat, false);
                                log.info("同步新物料出错!!!参数:[{}]、[{}]",mat,jsonArray);
                    // 处理分页:根据返回的totalCount和pageSize计算页数
                    int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
                    int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
                    int totalPages = (int) Math.ceil((double) totalCount / pageSize);
                    for (int page = 1; page <= totalPages; page++) {
                        jsonObject1.put("pageNo", page);
                        add = jsonObject1.toJSONString();
                        // 重新发起请求以获取该页的数据
                        response = new HttpHandler.Builder()
                                .setHeaders(headers)
                                .setUri(URL)
                                .setPath(inaddress)
                                .setJson(add)
                                .build()
                                .doPost();
                        jsonResponse = JSON.parseObject(response);
                        data = jsonResponse.getJSONObject("data").getJSONArray("rows");
                        for (int j = 0; j < data.size(); j++) {
                            JSONObject jsonObjectNew = data.getJSONObject(j);
                            Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
                            String matnr = jsonObjectNew.get("number").toString();
                            String name = jsonObjectNew.get("name").toString();
                            String createtime = jsonObjectNew.get("createtime").toString();
                            Double grossweight = jsonObjectNew.get("grossweight") != null ? new BigDecimal(jsonObjectNew.get("grossweight").toString()).doubleValue() : 0.0;
                            Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("height").toString()).doubleValue() : 0.0;
                            Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("width").toString()).doubleValue() : 0.0;
                            Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("length").toString()).doubleValue() : 0.0;
                            // 生成商品档案
                            Mat mat = matService.selectByMatnr(matnr);
                            if (mat == null) {
                                mat = new Mat();
                                mat.setMatnr(matnr);
                                mat.setMaktx(name);
                                mat.setTagId(tag.getId());
                                mat.setWeight(grossweight);
                                mat.setManLength(length);
                                mat.setHeight(height);
                                mat.setWidth(width);
                                mat.setCreateTime(sdf1.parse(createtime));
                                mat.setUpdateTime(modifyTime);
                                mat.setStatus(1);
                                if (!matService.insert(mat)) {
                                    callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料出错!" + mat, false);
                                    log.info("同步新物料出错!参数:[{}]、[{}]", mat, jsonObjectNew);
                                } else {
                                    callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料成功!", true);
                                }
                            } else {
                                callApiLogSaveMat(mat,kingDeeUtilType, "同步新物料!", true);
//                                log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                            }
                        }else {
                            if (!jsonDate.equals(tag.getUpdateTime())){
                                callApiLogSaveMat(mat,kingDeeUtilType, "商品编号重复:"+mat.getMatnr(), false);
                                log.info("同步新物料[商品编号:{}],商品编号重复!!!", mat.getMatnr());
                                boolean isUpdated = false;
                                if (mat.getUpdateTime().compareTo(modifyTime) != 0) {
                                    // 更新字段
                                    if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
                                    if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
                                    if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length);
                                    if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height);
                                    if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width);
                                    if (mat.getCreateTime().compareTo(sdf1.parse(createtime)) != 0)
                                        mat.setCreateTime(sdf1.parse(createtime));
                                    mat.setUpdateTime(modifyTime);
                                    isUpdated = true;
                                }
                                // 执行更新操作
                                if (isUpdated) {
                                    mat.setUpdateTime(new Date());
                                    if (!matService.updateById(mat)) {
                                        callApiLogSaveMat(mat, kingDeeUtilType, "更新物料出错!" + mat, false);
                                        log.info("更新物料[商品编号:{}], 更新失败!", mat.getMatnr());
                                    } else {
                                        callApiLogSaveMat(mat, kingDeeUtilType, "更新物料成功!", true);
                                        log.info("更新物料[商品编号:{}]", mat.getMatnr());
                                    }
                                }
                            }
                        }
                        tag.setUpdateTime(jsonDate);
                    }
                    tagService.updateById(tag);
                }else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){
                } else {
                    for (int j = 0; j < data.size(); j++) {
                        JSONArray jsonArray = data.getJSONArray(j);
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
@@ -3,10 +3,13 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.ErpSecret;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.impl.ErpSecretServiceImpl;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
@@ -18,6 +21,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@Service
@@ -33,24 +38,27 @@
    //登录地址
    private String loginaddress;
    @Value("${erp.login.acctID}")
    //账号ID
    private String acctID;
    @Value("${erp.login.clientId}")
    //WMS端ID
    private String clientId;
    @Value("${erp.login.clientSecret}")
    //账号密钥
    private String clientSecret;
    @Value("${erp.login.username}")
    //账号
    private String username;
    @Value("${erp.login.password}")
    //密码
    private String password;
    @Value("${erp.login.accountId}")
    private String accountId;
    @Value("${erp.login.lcid}")
    //
    private Integer lcid;
    @Value("${erp.login.xAcfwIdentity}")
    private String xAcfwIdentity;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private ErpSecretServiceImpl erpSecretService;
    /**
     * 45分钟登录一次金蝶系统
@@ -58,57 +66,68 @@
     */
    @Transactional
    public synchronized ReturnT<String> start() {
        ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
        String time = String.valueOf(System.currentTimeMillis());
        // 创建请求参数
        JSONObject requestPayload = new JSONObject();
        requestPayload.put("client_id", clientId);
        requestPayload.put("client_secret", clientSecret);
        requestPayload.put("username", username);
        requestPayload.put("accountId", accountId);
        requestPayload.put("nonce", erpSecret.getRefreshToken());//刷新token
        requestPayload.put("timestamp", time);
        requestPayload.put("language", "zh_CN");
        LoginParam loginParam =new LoginParam();
        loginParam.setAcctID(acctID);
        loginParam.setUsername(username);
        loginParam.setPassword(password);
        loginParam.setLcid(lcid);
        //上报
        // 创建请求头
        Map<String, Object> headers = new HashMap<>();
        headers.put("x-acgw-identity", xAcfwIdentity);  // 自定义请求头
        headers.put("Content-Type", "application/json;charset=UTF-8");
        String response = "";
        String cookie = "";
        boolean success = false;
        String accessToken = "";
        try {
            // 使用 HttpHandler 发起请求
            response = new HttpHandler.Builder()
                    .setUri(URL)
                    .setPath(loginaddress)
                    .setJson(JSON.toJSONString(loginParam))
                    .setPath(loginaddress)  // 登录接口路径
                    .setJson(requestPayload.toJSONString())  // 请求体
                    .setHeaders(headers)  // 设置请求头
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Object sessionId = findValueByKey(JSON.parseObject(response), "SessionId");
            cookie="ASP.NET_SessionId="+sessionId+";"+"kdservice-sessionid="+jsonObject.getString("KDSVCSessionId");
            if (Cools.isEmpty(jsonObject.getString("Message"))) {
                    .doPost();  // 执行POST请求
            // 解析返回结果
            JSONObject jsonResponse = JSON.parseObject(response);
            // 判断请求是否成功
            if (jsonResponse.getBooleanValue("status")) {
                accessToken = jsonResponse.getJSONObject("data").getString("access_token");
                String refreshToken = jsonResponse.getJSONObject("data").getString("refresh_token");
                success = true;
                erpSecret.setRefreshToken(refreshToken);
                erpSecret.setAccessToken(accessToken);
                if(erpSecretService.saveErpSecret(erpSecret)){
                    log.info("获取更新Token成功: {}", accessToken);
                }
            } else {
                callApiLogSaveLog(JSON.toJSONString(loginParam),false);
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+loginaddress, JSON.toJSONString(loginParam), response);
//                throw new CoolException("登录金蝶失败");
                log.error("获取Token失败,错误信息:{}", jsonResponse.getString("message"));
                callApiLogSaveLog(requestPayload.toJSONString(), false);
            }
        } catch (Exception e) {
            log.error("fail", e);
            callApiLogSaveLog(JSON.toJSONString(loginParam),false);
            log.error("请求接口失败!!!url:{};request:{};response:{}", URL+loginaddress, JSON.toJSONString(loginParam), response);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.error("获取Token失败,异常信息:", e);
            callApiLogSaveLog(requestPayload.toJSONString(), false);
            return FAIL.setMsg(e.getMessage());
        } finally {
//            try {
//                // 保存接口日志
//                apiLogService.save(
//                        "登录金蝶",
//                        URL + loginaddress,
//                        null,
//                        "127.0.0.1",
//                        JSON.toJSONString(loginParam),
//                        response,
//                        success
//                );
//            } catch (Exception e) { log.error("", e); }
        }
        return SUCCESS.setContent(cookie);
        if (!success) {
            return FAIL.setMsg("Token获取失败");
        }
        return SUCCESS.setContent(accessToken);
    }
    /**
     * 递归查找JSON中的指定字段
     */
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
@@ -117,15 +136,15 @@
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                for (int i = 0; i < size; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
            } else if (v instanceof JSONObject) {
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                if (result != null) {
                    return result;
                }
            }
@@ -133,14 +152,12 @@
        return null;
    }
    /**
     * 保存API日志
     */
    public void callApiLogSaveLog(String response, Boolean bool) {
        apiLogService.save("登录金蝶失败", URL, "null", loginaddress,
                "套账ID:"+acctID+"、账号:"+username+"、密码:"+password,
        apiLogService.save("登录金蝶失败", URL, "端口", loginaddress,
                "账号Id:"+accountId+"、用户端Id:"+clientId+"、用户密钥:"+clientSecret+"、username:"+username+"、refresh_token:",
                response, bool);
    }
}
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
        generator.url="10.10.10.235:1433;databasename=jshdasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="asr_bas_rgv_error_log";
        generator.table="sys_erp_secret";
        generator.packagePath="com.zy.asrs";
        generator.build();
    }
src/main/java/com/zy/common/service/CommonService.java
@@ -166,10 +166,10 @@
            int[] params = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
            curRow = params[1];
            int crnNo = params[2];
            if (!basCrnpService.checkSiteError(crnNo, true)) {
                attempt++;
                continue;
            }
//            if (!basCrnpService.checkSiteError(crnNo, true)) {
//                attempt++;
//                continue;
//            }
            int rowCount = params[0];
            int nearRow = params[3];
src/main/java/com/zy/erp/kingdee/entity/param/InFormIdParam.java
File was deleted
src/main/java/com/zy/erp/kingdee/entity/param/LoginParam.java
@@ -4,16 +4,16 @@
@Data
public class LoginParam {
    //账号ID
    private String acctID;
    //服务端
    private String appId;
    //账号
    private String username;
    //账号密钥
    private String appSecret;
    //密码
    private String password;
    //账户id
    private String accountId;
    //
    private Integer lcid;
    private String tenantid;
}
src/main/java/com/zy/erp/kingdee/entity/param/MatLoadParam.java
New file
@@ -0,0 +1,59 @@
package com.zy.erp.kingdee.entity.param;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
@Data
public class MatLoadParam {
    // id 字段,包含多个 id
    private ArrayList<String> id;
    // 编码字段,包含多个编码
    private ArrayList<String> number;
    // 创建组织编码,包含多个组织编码
    private ArrayList<String> createorgNumber;
    // 创建起始日期
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startCreatetime;
    // 创建截止日期
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endCreatetime;
    // 修改起始日期
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startModifytime;
    // 修改截止日期
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endModifytime;
    // 审核起始日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startApprovedate;
    // 审核截止日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endApprovedate;
    // 数据状态 [A:暂存, B:已提交, C:已审核],包含多个状态
    private ArrayList<String> status;
    // 分页参数,分页数量
    private Integer pageSize;
    // 分页参数,查询页码
    private Integer pageNo;
    public MatLoadParam() {
        this.pageSize = 10; // 默认分页数量
        this.pageNo = 1;    // 默认查询页码
    }
}
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
@@ -2,7 +2,9 @@
public enum KingDeeUtilType {
    BD_MATERIAL(0, "物料档案","BD_MATERIAL","","","",1),
//    STK_InStock(1, "采购入库单","STK_InStock","FRealQty","","",1),
//    BD_RRGANIZATION(1, "货主","BD_MATERIAL","","","",1),
    //    STK_InStock(1, "采购入库单","STK_InStock","FRealQty","","",1),
//    PUR_MRB(2, "采购退料单","PUR_MRB","FRMREALQTY","","",1),
//    PRD_PickMtrl(3, "生产领料单","PRD_PickMtrl","FActualQty","","",1),
//    PRD_ReturnMtrl(4, "生产退料单","PRD_ReturnMtrl","FQty","","",1),
@@ -15,14 +17,14 @@
//    SP_ReturnMtrl(11, "简单生产退料单","SP_ReturnMtrl","FQty","","",1),
//    SAL_OUTSTOCK(12, "销售出库单","SAL_OUTSTOCK","FRealQty","","",1),
//    SAL_RETURNSTOCK(13, "销售退货单","SAL_RETURNSTOCK","FRealQty","","",1),
    SAL_DELIVERYNOTICE(14, "发货通知单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0),
    STK_MISCELLANEOUS(15, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    SAL_DELIVERYNOTICE(14, "发货通知单","SAL_DELIVERYNOTICE","FQty","销售出库单","SAL_OUTSTOCK",0),
//    STK_MISCELLANEOUS(15, "其他入库单","STK_MISCELLANEOUS","FQty","其他入库单","STK_MISCELLANEOUS",1),
//    BD_Supplier(16, "供应商","BD_Supplier","","","",1),
    PUR_ReceiveBill(17, "收料通知单","PUR_ReceiveBill","FPOQTY","采购入库单","STK_InStock",1),
    PRD_MORPT(18, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    PUR_ReceiveBill(17, "收料通知单","PUR_ReceiveBill","FPOQTY","采购入库单","STK_InStock",1),
//    PRD_MORPT(18, "生产汇报单","PRD_MORPT","FFinishQty","生产入库单","PRD_INSTOCK",1),
//    PRD_INSTOCK(19, "生产入库单","PRD_INSTOCK","","","",1),
    SAL_RETURNNOTICE(20, "退货通知单","SAL_RETURNNOTICE","FBaseJunkedQty","销售退货单","SAL_RETURNSTOCK",1),
    STK_OutStockApply(21, "出库申请单","STK_OutStockApply","FTotalSecQty","其他出库单","STK_MisDelivery",0),
//    SAL_RETURNNOTICE(20, "退货通知单","SAL_RETURNNOTICE","FBaseJunkedQty","销售退货单","SAL_RETURNSTOCK",1),
//    STK_OutStockApply(21, "出库申请单","STK_OutStockApply","FTotalSecQty","其他出库单","STK_MisDelivery",0),
    ;
    public Integer id;
    public String desc;
src/main/resources/application.yml
@@ -10,8 +10,8 @@
    enabled: false
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://127.0.0.1:49847;databasename=jshdasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jshdasrs
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jshdasrs
    url: jdbc:sqlserver://10.10.10.235;databasename=jshdasrs
#    url: jdbc:sqlserver://192.168.4.191:50948;databasename=jshdasrs
    username: sa
    password: sa@123
@@ -92,20 +92,20 @@
  #  开关
  switch:
    #计时器上报开关
    ErpReportOld: true
    ErpReportOld: false
    #获取单据开关
    InboundOrderSwitch: false
    InboundOrderSwitch: true
    #登录接口开关
    LoginAuthenticationSwitch: false
    LoginAuthenticationSwitch: true
    #上报、审核单据开关
    ReviewOrderSwitch: false
  #  地址
  address:
    URL: http://58.210.10.90:28090
    URL: https://shyucheng.test.kdgalaxy.com/
    #登录地址
    loginaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
    #单据,商品档案地址
    inaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
    loginaddress: /kapi/oauth2/getToken
    #商品档案地址
    inaddress: /kapi/v2/basedata/bd_material/batchQuery
    #结果上报(保存)单地址
    outaddressSave: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
    #结果上报(提交)单地址
@@ -114,7 +114,8 @@
    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
  #  登录账号管理
  login :
    acctID: "647e849ab6fa0f"
    username: "llw"
    password: "666666"
    lcid: 2052
    xAcfwIdentity: "djF8MTlhNTNhZjJhOWEwMWRlODhlMDF8NDkxNTk0MDU4MTQxNXwus9WaEHKRh0daJe1TWmVoMkv3zQY2knNTZRzaOhRgwnw"
    clientId: "WMS"
    clientSecret: "123456789Asd!@123456789"
    accountId: "2182793143735298048"
    username: "admin"