自动化立体仓库 - WMS系统
#
LSH
2023-12-11 26d4eef329bf4418d9c588981b5cffbce669f64f
#
15个文件已添加
1个文件已修改
1342 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java 133 ●●●●● 补丁 | 查看 | 原始文档 | 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 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/utils/KingDeeUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/kingdee/utils/PostMesDataUtils.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/InboundOrderScheduler.java
New file
@@ -0,0 +1,26 @@
package com.zy.asrs.task.kingdee;
import com.zy.asrs.task.kingdee.handler.InboundOrderHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class InboundOrderScheduler {
    @Autowired
    private InboundOrderHandler inboundOrderHandler;
    @Value("${erp.switch.InboundOrderSwitch}")
    private boolean InboundOrderSwitch;
//    @Scheduled(cron = "0/3 * * * * ? ")
    void login(){
        if(!InboundOrderSwitch){
            return;
        }
        inboundOrderHandler.start();
    }
}
src/main/java/com/zy/asrs/task/kingdee/LoginAuthenticationScheduler.java
New file
@@ -0,0 +1,25 @@
package com.zy.asrs.task.kingdee;
import com.zy.asrs.task.kingdee.handler.LoginAuthenticationHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class LoginAuthenticationScheduler {
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Value("${erp.switch.LoginAuthenticationSwitch}")
    private boolean LoginAuthenticationSwitch;
    //@Scheduled(cron = "0/3 * * * * ? ")
    void login(){
        if(!LoginAuthenticationSwitch){
            return;
        }
        loginAuthenticationHandler.start();
    }
}
src/main/java/com/zy/asrs/task/kingdee/ReviewOrderSyncScheduler.java
New file
@@ -0,0 +1,46 @@
package com.zy.asrs.task.kingdee;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.ReviewOrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by vincent on 2023/10/21
 */
@Slf4j
@Component
public class ReviewOrderSyncScheduler {
    @Autowired
    private ReviewOrderSyncHandler reviewOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
            return;
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = reviewOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]向erp审核失败", order.getOrderNo());
            }
        }
    }
}
src/main/java/com/zy/asrs/task/kingdee/SaveOrderSyncScheduler.java
New file
@@ -0,0 +1,46 @@
package com.zy.asrs.task.kingdee;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.SubmitOrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2023.10.21
 */
@Slf4j
@Component
public class SaveOrderSyncScheduler {
    @Autowired
    private SubmitOrderSyncHandler submitOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if (1==1) return;
        if(!ReviewOrderSwitch){
            return;
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = submitOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]提交至erp失败", order.getOrderNo());
            }
        }
    }
}
src/main/java/com/zy/asrs/task/kingdee/SubmitOrderSyncScheduler.java
New file
@@ -0,0 +1,46 @@
package com.zy.asrs.task.kingdee;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.kingdee.handler.SaveOrderSyncHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by Monkey D. Luffy on 2023.10.21
 */
@Slf4j
@Component
public class SubmitOrderSyncScheduler {
    @Autowired
    private SaveOrderSyncHandler saveOrderSyncHandler;
    @Autowired
    private OrderService orderService;
    @Value("${erp.switch.ReviewOrderSwitch}")
    private boolean ReviewOrderSwitch;
//    @Scheduled(cron = "0/3 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        if(!ReviewOrderSwitch){
            return;
        }
        List<Order> orders = orderService.selectComplete();
        for (Order order : orders) {
            ReturnT<String> result = saveOrderSyncHandler.start(order);
            if (!result.isSuccess()) {
                log.error("单据[orderNo={}]保存至erp失败", order.getOrderNo());
            }
        }
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
New file
@@ -0,0 +1,289 @@
package com.zy.asrs.task.kingdee.handler;
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.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.entity.param.InFormIdParam;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import com.zy.erp.kingdee.utils.KingDeeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@Service
@Slf4j
public class InboundOrderHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.inaddress}")
    //单据,商品档案地址
    private String inaddress;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Autowired
    private MatService matService;
    @Autowired
    private TagService tagService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Transactional
    public synchronized ReturnT<String> start() {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //登录金蝶
        ReturnT<String> start = loginAuthenticationHandler.start();
        for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
            InFormIdParam inFormIdParam = new InFormIdParam();
            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 :物料状态
            }else{
                //获取最新时间
                //单据状态
                FDocumentStatus="B";
                jsonObject.put("FilterString", "FCreateDate>'"+sdf.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 :单据创建时间;
                // FMaterialId.FNumber : 物料编码;
                // FMaterialName :物料名称;
                // FMaterialId.FSpecification:物料规格
                // anfme : 物料数量
                // FDocumentStatus :单据状态;
            }
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("data", jsonObject);
            String add = jsonObject1.toJSONString();
            //上报
            String response = "";
            boolean success = false;
            try {
                //获取Cookie值
                HashMap<String, Object> headers = new HashMap<>();
                headers.put("Cookie", start.getContent());
                response = new HttpHandler.Builder()
                        .setHeaders(headers)
                        .setUri(URL)
                        .setPath(inaddress)
                        .setJson(add)
                        .build()
                        .doPost();
                JSONArray data = JSON.parseArray(response);
                if(data.size()<=0)  continue;
                if (data.getJSONArray(0).get(0).toString().length()>=20) continue;
                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);
                            } 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());
                            }
                        }
                        tag.setUpdateTime(jsonDate);
                    }
                    tagService.updateById(tag);
                } else {
                    for (int j = 0; j < data.size(); j++) {
                        JSONArray jsonArray = data.getJSONArray(j);
                        //最新抓取时间
                        Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(1).toString());
                        docType.setCreateTime(jsonDate);
                        Order order = orderService.selectByNo(jsonArray.get(0).toString());
                        if (Cools.isEmpty(order)) {
                            Date now = new Date();
                            // 单据主档
                            order = new Order(
                                    String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                                    jsonArray.get(0).toString(),    // 订单编号
                                    DateUtils.convert(now),    // 单据日期
                                    docType.getDocId(),    // 单据类型
                                    null,    // 项目编号
                                    null,    //
                                    null,    // 调拨项目编号
                                    null,    // 初始票据号
                                    null,    // 票据号
                                    null,    // 客户编号
                                    null,    // 客户
                                    null,    // 联系方式
                                    null,    // 操作人员
                                    null,    // 合计金额
                                    null,    // 优惠率
                                    null,    // 优惠金额
                                    null,    // 销售或采购费用合计
                                    null,    // 实付金额
                                    null,    // 付款类型
                                    null,    // 业务员
                                    null,    // 结算天数
                                    null,    // 邮费支付类型
                                    null,    // 邮费
                                    null,    // 付款时间
                                    null,    // 发货时间
                                    null,    // 物流名称
                                    null,    // 物流单号
                                    1L,    // 订单状态
                                    1,    // 状态
                                    9527L,    // 添加人员
                                    now,    // 添加时间
                                    9527L,    // 修改人员
                                    now,    // 修改时间
                                    null    // 备注
                            );
                            if (!orderService.insert(order)) {
                                if (!jsonDate.equals(docType.getCreateTime())){
                                    callApiLogSaveOrder(order,kingDeeUtilType, "生成单据主档失败,请联系管理员"+order, false);
                                }
                                continue;
//                                throw new CoolException("生成单据主档失败,请联系管理员");
                            }
                        }
                        //物料编码
                        Mat mat = matService.selectByMatnr(jsonArray.get(2).toString());
                        if (Cools.isEmpty(mat)) {
                            if (!jsonDate.equals(docType.getCreateTime())){
                                callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+jsonArray.get(2).toString(), false);
                            }
                            continue;
                        }
                        OrderDetl orderDetl1 = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", jsonArray.get(0).toString()).eq("matnr", jsonArray.get(2).toString()));
                        if (!Cools.isEmpty(orderDetl1)) {
                            continue;
                        }
                        OrderDetl orderDetl = new OrderDetl();
                        orderDetl.sync(mat);
                        orderDetl.setBatch(null);
                        orderDetl.setAnfme(Double.parseDouble(jsonArray.get(5).toString()));
                        orderDetl.setOrderId(order.getId());
                        orderDetl.setOrderNo(order.getOrderNo());
                        orderDetl.setCreateBy(9527L);
                        orderDetl.setCreateTime(new Date());
                        orderDetl.setUpdateBy(9527L);
                        orderDetl.setUpdateTime(new Date());
                        orderDetl.setStatus(1);
                        orderDetl.setQty(0.0D);
                        if (!orderDetlService.insert(orderDetl)) {
                            callApiLogSaveOrder(order,kingDeeUtilType, "生成单据明细失败,请联系管理员!订单号:"+order.getOrderNo(), false);
//                            throw new CoolException("生成单据明细失败,请联系管理员");
                        }
                    }
                    docTypeService.updateById(docType);
                }
            } catch (Exception e) {
                log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
//                try {
//                    // 保存接口日志
//                    apiLogService.save(
//                            "轮询数据",
//                            URL + inaddress,
//                            null,
//                            "127.0.0.1",
//                            add,
//                            response,
//                            success
//                    );
//                } catch (Exception e) {
//                    log.error("", e);
//                }
            }
        }
        return SUCCESS;
    }
    public void callApiLogSaveMat(Mat mat, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
        apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
                "物料编号:" + mat.getMatnr() + "、物料名称:" + mat.getName() + "、类型:" + mat.getTagId$() + "、状态:" + mat.getStatus$(),
                response, bool);
    }
    public void callApiLogSaveOrder(Order order, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
        apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
                "单据编号:" + order.getId() +  "、状态:" + order.getStatus$(),
                response, bool);
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/LoginAuthenticationHandler.java
New file
@@ -0,0 +1,143 @@
package com.zy.asrs.task.kingdee.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.entity.param.LoginParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Set;
@Service
@Slf4j
@Transactional
public class LoginAuthenticationHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.loginaddress}")
    //登录地址
    private String loginaddress;
    @Value("${erp.login.acctID}")
    //账号ID
    private String acctID;
    @Value("${erp.login.username}")
    //账号
    private String username;
    @Value("${erp.login.password}")
    //密码
    private String password;
    @Value("${erp.login.lcid}")
    //
    private Integer lcid;
    @Autowired
    private ApiLogService apiLogService;
    /**
     * 45分钟登录一次金蝶系统
     * @return
     */
    @Transactional
    public synchronized ReturnT<String> start() {
        LoginParam loginParam =new LoginParam();
        loginParam.setAcctID(acctID);
        loginParam.setUsername(username);
        loginParam.setPassword(password);
        loginParam.setLcid(lcid);
        //上报
        String response = "";
        String cookie = "";
        boolean success = false;
        try {
            response = new HttpHandler.Builder()
                    .setUri(URL)
                    .setPath(loginaddress)
                    .setJson(JSON.toJSONString(loginParam))
                    .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"))) {
                success = true;
            } else {
                callApiLogSaveLog(JSON.toJSONString(loginParam),false);
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+loginaddress, JSON.toJSONString(loginParam), response);
//                throw new CoolException("登录金蝶失败");
            }
        } 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();
            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);
    }
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
    public void callApiLogSaveLog(String response, Boolean bool) {
        apiLogService.save("登录金蝶失败", URL, "null", loginaddress,
                "套账ID:"+acctID+"、账号:"+username+"、密码:"+password,
                response, bool);
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/ReviewOrderSyncHandler.java
New file
@@ -0,0 +1,134 @@
package com.zy.asrs.task.kingdee.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by vincent on 2023/10/21
 */
@Slf4j
@Service
public class ReviewOrderSyncHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.outaddressAudit}")
    //审核地址
    private String outaddressAudit;
    @Autowired
    private OrderService orderService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Transactional
    public ReturnT<String> start(Order order) {
        //登录金蝶r
        ReturnT<String> start = loginAuthenticationHandler.start();
        DocType docType = docTypeService.selectById(order.getDocType());
        if (null == docType) {
            return SUCCESS;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        //条件拼接
        JSONObject dataJsonObject = new JSONObject();
        dataJsonObject.put("Numbers",order.getOrderNo());
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("data", dataJsonObject);
        jsonObject.put("FormId",kingDeeUtilType.formId);
        String add = jsonObject.toJSONString();
        //上报
        String response = "";
        boolean success = false;
        try {
            //获取Cookie值
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Cookie", start.getContent());
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(URL)
                    .setPath(outaddressAudit)
                    .setJson(add)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            //审核完成原订单4转6  6.上报完成
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "审核",
                        URL+ outaddressAudit,
                        null,
                        "127.0.0.1",
                        add,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return SUCCESS;
    }
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/SaveOrderSyncHandler.java
New file
@@ -0,0 +1,133 @@
package com.zy.asrs.task.kingdee.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by Monkey D. Luffy on 2023.10.21
 */
@Slf4j
@Service
public class SaveOrderSyncHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.outaddressSave}")
    //保存地址
    private String outaddressSave;
    @Autowired
    private OrderService orderService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Transactional
    public ReturnT<String> start(Order order) {
        //登录金蝶r
        ReturnT<String> start = loginAuthenticationHandler.start();
        DocType docType = docTypeService.selectById(order.getDocType());
        if (null == docType) {
            return SUCCESS;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        //条件拼接
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Numbers",order.getOrderNo());
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("data", jsonObject);
        jsonObject1.put("FormId",kingDeeUtilType.correspondingFormId);
        String add = jsonObject1.toJSONString();
        //上报
        String response = "";
        boolean success = false;
        try {
            //获取Cookie值
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Cookie", start.getContent());
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(URL)
                    .setPath(outaddressSave)
                    .setJson(add)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            //保存完成原订单8转6
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "保存",
                        URL+ outaddressSave,
                        null,
                        "127.0.0.1",
                        add,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return SUCCESS;
    }
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
}
src/main/java/com/zy/asrs/task/kingdee/handler/SubmitOrderSyncHandler.java
New file
@@ -0,0 +1,133 @@
package com.zy.asrs.task.kingdee.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Set;
/**
 * Created by Monkey D. Luffy on 2023.10.21
 */
@Slf4j
@Service
public class SubmitOrderSyncHandler extends AbstractHandler<String> {
    @Value("${erp.address.URL}")
    //端口
    private String URL;
    @Value("${erp.address.outaddressSubmit}")
    //提交地址
    private String outaddressSubmit;
    @Autowired
    private OrderService orderService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private LoginAuthenticationHandler loginAuthenticationHandler;
    @Transactional
    public ReturnT<String> start(Order order) {
        //登录金蝶r
        ReturnT<String> start = loginAuthenticationHandler.start();
        DocType docType = docTypeService.selectById(order.getDocType());
        if (null == docType) {
            return SUCCESS;
        }
        KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
        //条件拼接
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Numbers",order.getOrderNo());
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("data", jsonObject);
        jsonObject1.put("FormId",kingDeeUtilType.correspondingFormId);
        String add = jsonObject1.toJSONString();
        //上报
        String response = "";
        boolean success = false;
        try {
            //获取Cookie值
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Cookie", start.getContent());
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(URL)
                    .setPath(outaddressSubmit)
                    .setJson(add)
                    .build()
                    .doPost();
            JSONObject data = JSON.parseObject(response);
            Object IsSuccess = findValueByKey(JSON.parseObject(response), "IsSuccess");
            String bool=IsSuccess.toString();
            //提交完成原订单8转6
            if(bool.equals("true")){
                success = true;
                order.setSettle(6L);
                orderService.update(order,new EntityWrapper<Order>().eq("order_no",order.getOrderNo()));
            }
        } catch (Exception e) {
            log.error("fail", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "提交",
                        URL+ outaddressSubmit,
                        null,
                        "127.0.0.1",
                        add,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return SUCCESS;
    }
    public static Object findValueByKey(JSONObject json, String key) {
        Set<String> keySet = json.keySet();
        for (String k : keySet) {
            Object v = json.get(k);
            if (k.equals(key)) {
                return v;
            } else if (v instanceof JSONArray) {
                int size = ((JSONArray) v).size();
                for (int i = 0; i <= size - 1; i++) {
                    Object result = findValueByKey((JSONObject) ((JSONArray) v).get(i), key);
                    if (result != null){
                        return result;
                    }
                }
            } else if (v instanceof JSONObject){
                Object result = findValueByKey((JSONObject) v, key);
                if (result != null){
                    return result;
                }
            }
        }
        return null;
    }
}
src/main/java/com/zy/erp/kingdee/entity/param/InFormIdParam.java
New file
@@ -0,0 +1,38 @@
package com.zy.erp.kingdee.entity.param;
import lombok.Data;
@Data
public class InFormIdParam {
    //查找表单唯一标识
    private String FormId;
    //最多允许查询的数量,0或者不要此属性标识不限制
    private String TopRowCount;
    private Integer Limit;
    private String StartRow;
    //过滤条件(eg:\"FNumber>'0301010120001' and FCreateDate>'2023-07-05' \")
    //1、Left:左括号
    //3、Compare:比较运算符,如 大于">"、小于"<"、等于"="、包含"like"、左包含"llike"、右包含"rlike"
    //4、Value:比较值
    //5、Right:右括号
    //6、Logic:逻辑运算符,如 "and"、"or"
    private Integer Filterstring;
    //排序条件
    private Integer OrderString;
    //待查询表单的字段列(期望返回值)
    private Integer FieldKeys;
}
src/main/java/com/zy/erp/kingdee/entity/param/LoginParam.java
New file
@@ -0,0 +1,19 @@
package com.zy.erp.kingdee.entity.param;
import lombok.Data;
@Data
public class LoginParam {
    //账号ID
    private String acctID;
    //账号
    private String username;
    //密码
    private String password;
    //
    private Integer lcid;
}
src/main/java/com/zy/erp/kingdee/enums/KingDeeUtilType.java
New file
@@ -0,0 +1,91 @@
package com.zy.erp.kingdee.enums;
public enum KingDeeUtilType {
    BD_MATERIAL(0, "物料档案","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),
//    PRD_FeedMtrl(5, "生产补料单","PRD_FeedMtrl","FActualQty","","",1),
//    STK_TransferDirect(6, "直接调拨单","STK_TransferDirect","","FQty","",1),
//    STK_StockCountGain(7, "盘盈单","STK_StockCountGain","FGainQty","","",1),
//    STK_StockCountLoss(8, "盘亏单","STK_StockCountLoss","FLossQty","","",1),
//    STK_MisDelivery(9, "其他出库单","STK_MisDelivery","FQty","","",1),
//    SP_PickMtrl(10, "简单生产领料单","SP_PickMtrl","FActualQty","","",1),
//    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),
//    BD_Supplier(16, "供应商","BD_Supplier","","","",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),
    //米多青岛
    STK_OutStockApply30(30, "试用品发货通知单","","","研发样品出库单","",0),
    STK_OutStockApply31(31, "试用品发货通知单","","","研发样品出库单","",0),
    STK_OutStockApply32(32, "试用品发货通知单","","","研发样品出库单","",0),
    STK_OutStockApply33(33, "试用品发货通知单","","","研发样品出库单","",0),
    STK_OutStockApply34(34, "试用品发货通知单","","","研发样品出库单","",0),
    STK_OutStockApply35(35, "试用品发货通知单","","","研发样品出库单","",0),
    ;
    public Integer id;
    public String desc;
    public String formId;
    public String anfme;
    public String correspondingName;
    public String correspondingFormId;
    public Integer pakIn;
    KingDeeUtilType(Integer id, String desc,String formId,String anfme,String correspondingName,String correspondingFormId,int pakIn){
        this.id = id;
        this.desc = desc;
        this.formId = formId;
        this.anfme = anfme;
        this.correspondingName = correspondingName;
        this.correspondingFormId = correspondingFormId;
        this.pakIn = pakIn;   //1入库  0出库
    }
    public static KingDeeUtilType get(Short id) {
        if (null == id) {
            return null;
        }
        for (KingDeeUtilType type : KingDeeUtilType.values()) {
            if (type.id.equals(id.intValue())) {
                return type;
            }
        }
        return null;
    }
    public static KingDeeUtilType get(String desc) {
        if (null == desc) {
            return null;
        }
        for (KingDeeUtilType type : KingDeeUtilType.values()) {
            if (type.desc.equals(desc)) {
                return type;
            }
        }
        return null;
    }
    public static KingDeeUtilType get(KingDeeUtilType type) {
        if (null == type) {
            return null;
        }
        for (KingDeeUtilType crnLiftPosType : KingDeeUtilType.values()) {
            if (crnLiftPosType == type) {
                return crnLiftPosType;
            }
        }
        return null;
    }
}
src/main/java/com/zy/erp/kingdee/utils/KingDeeUtil.java
New file
@@ -0,0 +1,24 @@
package com.zy.erp.kingdee.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class KingDeeUtil {
    //对美国时间进行转换
    public static Date KingDeeDate(String jsonArrayDate) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime dateTime = LocalDateTime.parse(jsonArrayDate, formatter);
        String format = dateFormat.format(dateTime);
        return sdf.parse(format);
    }
}
src/main/java/com/zy/erp/kingdee/utils/PostMesDataUtils.java
New file
@@ -0,0 +1,119 @@
package com.zy.erp.kingdee.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
@Slf4j
public class PostMesDataUtils extends AbstractHandler<String> {
    public ReturnT<String> postMesData(String name, String URL, String mesPath, Object combParam){
//        if (true){
//            System.out.println("name:"+name+",URL:"+URL+",mesPath:"+mesPath+",combParam:"+combParam);
//            return SUCCESS;
//        }
        if(combParam != null){
            String response = "";
            boolean success = false;
            try {
//                Map<String, Object> map = new HashMap<>()
//                map.put("appkey","ea1f0459efc02a79f046f982767939ae");
                response = new HttpHandler.Builder()
//                        .setHeaders(map)
                        .setUri(URL)
                        .setPath(mesPath)
                        .setJson(JSON.toJSONString(combParam))
                        .build()
                        .doPost();
                System.out.println("response:"+response);
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    success = true;
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报"+name);
                }
            } catch (Exception e) {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
//                      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                    apiLogService.save(
                            "上报"+name,
                            URL +"/"+ mesPath,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(combParam),
                            response,
                            success
                    );
                } catch (Exception e) {
                    log.error("", e); }
            }
        }
        return SUCCESS;
    }
    public ReturnT<String> postMesData(String name, String URL, String mesPath, Object combParam, Map<String, Object> map){
//        if (true){
//            System.out.println("name:"+name+",URL:"+URL+",mesPath:"+mesPath+",combParam:"+combParam);
//            return SUCCESS;
//        }
        if(combParam != null){
            String response = "";
            boolean success = false;
            try {
//                Map<String, Object> map = new HashMap<>();
//                map.put("appkey","ea1f0459efc02a79f046f982767939ae");
                response = new HttpHandler.Builder()
                        .setHeaders(map)
                        .setUri(URL)
                        .setPath(mesPath)
                        .setJson(JSON.toJSONString(combParam))
                        .build()
                        .doPost();
                System.out.println("response:"+response);
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    success = true;
                } else {
                    log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
                    throw new CoolException("上报"+name);
                }
            } catch (Exception e) {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response);
//                      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg(e.getMessage());
            } finally {
                try {
                    // 保存接口日志
                    ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class);
                    apiLogService.save(
                            "上报"+name,
                            URL +"/"+ mesPath,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(combParam),
                            response,
                            success
                    );
                } catch (Exception e) {
                    log.error("", e); }
            }
        }
        return SUCCESS;
    }
}
src/main/resources/application.yml
@@ -57,6 +57,34 @@
  # 一个堆垛机负责的货架排数
  groupCount: 4
#erp
#金蝶erp对接
erp:
  #  开关
  switch:
    #获取单据开关  米多无用
    InboundOrderSwitch: false
    #登录接口开关
    LoginAuthenticationSwitch: false
    #上报单据开关
    ReviewOrderSwitch: false
  #  地址
  address:
    URL: http://58.210.10.90:28090
    #登录地址
    loginaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
    #单据,商品档案地址
    inaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc
    #结果上报(保存)单地址  米多无用
    outaddressSave: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
    #结果上报(提交)单地址  米多无用
    outaddressSubmit: K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc
    #结果上报(审核)单地址
    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
  #  登录账号管理
  login :
    acctID: "65712e41a21468"
    username: "13465800579"
    password: "a.111111"
    lcid: 2052
#  速腾对接 已废弃  保持false
  enable: false