自动化立体仓库 - WMS系统
pang.jiabao
2024-07-12 5f11cb1edd264cfae8bf47261a4449f576703227
调用金蝶同步物料信息
2个文件已添加
3个文件已修改
472 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/GhlnScheduler.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/GhlnHandler.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/LoginAuthHandler.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/erp/ghln/GhlnErp.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/GhlnScheduler.java
@@ -21,8 +21,14 @@
    private GhlnHandler ghlnHandler;
    // 出库到达出库目标站时,调用AGV开放出库接口
    @Scheduled(cron = "0/20 * * * * ? *")
    @Scheduled(cron = "0/30 * * * * ?")
    private void sendOutboundTaskToAGV(){
        ghlnHandler.sendOutboundTaskToAGV();
    }
    // 调用金蝶同步物料接口,增量同步每小时产生的新物料
    @Scheduled(cron = "0 0 0/1 * * ? ")
    private void syncMat(){
        ghlnHandler.syncMat();
    }
}
src/main/java/com/zy/asrs/task/handler/GhlnHandler.java
@@ -4,12 +4,12 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.constant.MesConstant;
import com.zy.common.constant.OpenApiAddressConstant;
import com.zy.common.utils.HttpHandler;
@@ -18,9 +18,9 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
 * @author pang.jiabao
@@ -42,6 +42,12 @@
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private LoginAuthHandler loginAuthHandler;
    @Resource
    private MatService matService;
    /**
     * 出库到达出库目标站时,调用AGV开放出库接口
@@ -133,4 +139,94 @@
        }
    }
    /**
     * 调用金蝶同步物料接口,增量同步每小时产生的新物料
     */
    public void syncMat() {
        //登录金蝶
        ReturnT<String> start = loginAuthHandler.start();
        //条件和需要获得的结果拼接
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("FormId", "BD_MATERIAL");
        jsonObject.put("OrderString","");
        jsonObject.put("TopRowCount",0);
        jsonObject.put("Limit", 3000);
        jsonObject.put("StartRow", "0");
        jsonObject.put("SubSystemId", "");
        // 获取当前时间
        LocalDateTime currentDateTime = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 获取当前时间的前一小时整点时间
        LocalDateTime oneHourAgo = currentDateTime.minusHours(1).withMinute(0).withSecond(0).withNano(0);
        jsonObject.put("FilterString", "FCreateDate >= '"+oneHourAgo.format(formatter)+"' and FUseOrgId .FNumber='10004'");
        jsonObject.put("FieldKeys", "FNumber,FName,FCreateDate,FTypeID");
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("data", jsonObject);
        String add = jsonObject1.toJSONString();
        String response = "";
        boolean success = false;
        String url = "http://192.168.16.7";
        String address = "K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
        try {
            //获取Cookie值
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Cookie", start.getContent());
            response = new HttpHandler.Builder()
                    .setHeaders(headers)
                    .setUri(url)
                    .setPath(address)
                    .setJson(add)
                    .build()
                    .doPost();
            String[] tempstr;
            if (!"[]".equals(response)) {
                String[] returnstr = response.split("],");
                int count = 0;
                log.info("--------调用金蝶同步物料信息开始--------");
                for (int i = 0; i < returnstr.length; i++) {
                    Mat mat = new Mat();
                    tempstr = returnstr[i].split(",");
                    if (i == 0) {
                        mat.setMatnr(tempstr[0].substring(2));  //物料编码
                    } else {
                        mat.setMatnr(tempstr[0].substring(1));  //物料编码
                    }
                    mat.setMaktx(tempstr[1]); //  物料名称
                    mat.setTagId(Long.valueOf(tempstr[3])); // 物料分类
                    mat.setCreateTime(new Date());//商品创建时间
                    mat.setUpdateTime(new Date());
                    mat.setStatus(1);
                    try {
                        matService.insert(mat);
                        count++;
                    }catch (Exception e){
                        log.error("金蝶同步物料异常:{}", mat);
                    }
                }
                log.info("----调用金蝶同步物料信息结果:总{},成{}--------",returnstr.length, count);
                success = true;
            }
        } catch (Exception e) {
            log.error("fail", e);
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "请求金蝶同步物料信息",
                        url + address,
                        null,
                        "127.0.0.1",
                        add,
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("", e);
            }
        }
    }
}
src/main/java/com/zy/asrs/task/handler/LoginAuthHandler.java
New file
@@ -0,0 +1,137 @@
package com.zy.asrs.task.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.common.Cools;
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 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 LoginAuthHandler 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 {
                log.error("请求接口失败!!!url:{};request:{};response:{}", URL + loginaddress, JSON.toJSONString(loginParam), response);
                throw new CoolException("登录金蝶失败");
            }
        } catch (Exception e) {
            log.error("fail", e);
//            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;
    }
}
src/main/java/com/zy/erp/ghln/GhlnErp.java
New file
@@ -0,0 +1,209 @@
package com.zy.erp.ghln;
import com.alibaba.fastjson.JSON;
import com.zy.common.utils.HttpHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * @author pang.jiabao
 * @description
 * @createDate 2024/7/10 19:46
 */
public class GhlnErp {
    public static final String servelUrl = "http://192.168.16.7/K3Cloud";
    private static Logger logger = LoggerFactory.getLogger(GhlnErp.class);
    private static String dbid ;  //测试环境TEST3为6353684490aa2b   正式环境为 655f026e8f0a03  TEST1测试环境为63985a1d80ae72
    private static String userName="Administrator";  //测试环境和正式环境都是一样的
    private static String passWord="a123456.";  //测试环境和正式环境都是一样的
    private static int  lang=2052;
    static {
        boolean addressEnabled = false;  //获取正式环境数据为true  测试环境就为false
        if(addressEnabled){
            dbid="655f026e8f0a03";
        }else{
            dbid="63985a1d80ae72";
        }
    }
//    @Scheduled(fixedRate=200000)
    public static String login() throws IOException {
        logger.info("dbid"+dbid);
        // id号  用户名 和 密码
        // String loginParam = buildLogin("6269114ac9aeb1", "demo", "a123456.", 2052);   高科测试  6295eb8010ec7f    正式环境账套ID  62de03297091ce
        String loginParam = buildLogin(dbid, userName, passWord, lang);
        System.out.println(loginParam);
        String url = "/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
        String response= new HttpHandler.Builder()
                .setUri(servelUrl)
                .setPath(url)
                .setJson(loginParam)
                .build()
                .doPost();
//                HttpUtil.httpPost(url, loginParam);
        String login_cookie="";
//        if(response.getStatusCode()== HttpStatus.OK) {
//            Set<String> keys=response.getHeaders().keySet();
//            for(String key:keys){
//                if (key.equalsIgnoreCase("Set-Cookie")) {
//                    List<String> cookies = response.getHeaders().get(key);
//                    for(String cookie:cookies){
//                        if(cookie.startsWith("kdservice-sessionid")){
//                            login_cookie=cookie;
//                            RedisUtils.setCacheObject("loginedcookies", login_cookie,10, TimeUnit.MINUTES);
//
//                            System.out.println("登录K3成功啦:"+login_cookie);
//                            break;
//                        }
//                    }
//                }
//            }
//            System.out.println( response.getBody());
//        }
        return login_cookie;
    }
    public static void main(String[] args) throws IOException {
        String login = GhlnErp.login();
        System.out.println(login);
    }
    public static String buildLogin(String dbid, String userName, String password, int lang){
        Map<String,Object> param = new HashMap<>(4);
        param.put("acctID",dbid);
        param.put("username",userName);
        param.put("password",password);
        param.put("lcid",lang);
        return JSON.toJSONString(param);
    }
//    获取半成品母卷查询接口:
//    public static ArrayList<ObtainInforMasterRollMaterVo> GetJxFMaterialIdByFMaterialName(){
//        Long beginTime = new Date().getTime();
//        ArrayList<ObtainInforMasterRollMaterVo> masterlist= new ArrayList<>();
//        try{
//            String url = servelUrl+"/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
//            String  formId="BD_MATERIAL";
//            String cookie=""
////                    RedisUtils.getCacheObject("loginedcookies");
//            if( cookie == null){
//                cookie = login();
//            }
//            String residuelength="{\n" +
//                    "    \"FormId\": \"BD_MATERIAL\",\n" +
//                    "    \"FieldKeys\": \"FNumber,FName,FSpecification,FUseOrgId.fnumber,FDocumentStatus,FBaseUnitId.fnumber\",\n" +
//                    "    \"FilterString\": \"FUseOrgId.fnumber='10004' and fnumber like '02%'\",\n" +
//                    "    \"OrderString\": \"\",\n" +
//                    "    \"TopRowCount\": 0,\n" +
//                    "    \"StartRow\": 0,\n" +
//                    "    \"Limit\": 2000,\n" +
//                    "    \"SubSystemId\": \"\"\n" +
//                    "}";
//            String queryinfo = "";
////                    buildMaterial(residuelength,formId) ;
//            Map<String, Object> header = new HashMap<>();
//            header.put("Cookie",cookie);
//            String results =
//                    HttpUtil.httpPost(url, header, queryinfo);
//            String[] tempstr=null;
//            if(!"[]".equals(results)) {
//                String[] returnstr=results.split("],");
//                if (returnstr.length > 0) {
//                    for(int i=0; i<returnstr.length;i++){
//                        ObtainInforMasterRollMaterVo obtaininfor=new ObtainInforMasterRollMaterVo();
//                        tempstr = returnstr[i].split(",");
//                        if (i == 0) {
//                            obtaininfor.setMaterialNo(tempstr[0].substring(2, tempstr[0].length()));  //物料编码
//                        } else {
//                            obtaininfor.setMaterialNo(tempstr[0].substring(1, tempstr[0].length()));  //物料编码
//                        }
//                        obtaininfor.setFmaterialName(tempstr[1]); //  物料名称
//                        obtaininfor.setFSpecification(tempstr[2]); //  规格
//                        obtaininfor.setFUseOrgId(tempstr[3]);  //  使用组织
//                        obtaininfor.setFDocumentStatus(tempstr[4]);  // 数据状态
//                        if (returnstr.length == 1) {
//                            obtaininfor.setFBaseUnitId(tempstr[5].substring(0, tempstr[5].length() - 2));  // 基本单位
//                        } else if (returnstr.length > 1) {
//                            if (i == returnstr.length - 1) {
//                                obtaininfor.setFBaseUnitId(tempstr[5].substring(0, tempstr[5].length() - 2));
//
//                            } else {
//                                obtaininfor.setFBaseUnitId(tempstr[5].substring(0, tempstr[5].length()));
//                            }
//                        }
//                        StringUtils.removeReg(obtaininfor);
//                        masterlist.add(obtaininfor);
//                    }
//                }
//            }
//        }catch (Exception e){
//            logger.error("调用物料查询接口获取母卷物料信息报错--JX");
//            logger.error(e.getMessage());
//            throw new RuntimeException("调用物料查询接口获取母卷物料信息报错--JX");
//        }
//        Long opetime =new Date().getTime()-beginTime;
//        logger.info("调用物料查询接口获取母卷物料信息--jx 调用接口耗时 "+opetime);
//        return masterlist;
//    }
//
//    public static  String  GetJxFMaterialIdByFMaterialName(String  materialno){
//        Long beginTime = new Date().getTime();
//        String matername="";
//        try{
//            String url = servelUrl+"/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
//            String  formId="BD_MATERIAL";
//            String cookie=RedisUtils.getCacheObject("loginedcookies");
//            if( cookie == null){
//                cookie = login();
//            }
//            String residuelength="{\n" +
//                    "    \"FormId\": \"BD_MATERIAL\",\n" +
//                    "    \"FieldKeys\": \"FName\",\n" +
//                    "    \"FilterString\": \"FUseOrgId.fnumber='10004' and fnumber='"+materialno+"'\",\n" +
//                    "    \"OrderString\": \"\",\n" +
//                    "    \"TopRowCount\": 0,\n" +
//                    "    \"StartRow\": 0,\n" +
//                    "    \"Limit\": 2000,\n" +
//                    "    \"SubSystemId\": \"\"\n" +
//                    "}";
//            String queryinfo =  buildMaterial(residuelength,formId) ;
//            Map<String, Object> header = new HashMap<>();
//            header.put("Cookie",cookie);
//            String results = HttpUtil.httpPost(url, header, queryinfo);
//            String[] tempstr=null;
//            if(!"[]".equals(results)) {
//                String[] returnstr=results.split("],");
//                if (returnstr.length > 0) {
//                    for(int i=0; i<returnstr.length;i++){
//                        ObtainInforMasterRollMaterVo obtaininfor=new ObtainInforMasterRollMaterVo();
//                        tempstr = returnstr[i].split(",");
//                        if (i == 0) {
//                            matername=tempstr[0].substring(2, tempstr[0].length()-2);  //物料名称
//                        }
//                        break;
//                        StringUtils.removeReg(matername);
//                    }
//                }
//            }
//        }catch (Exception e){
//            logger.error("调用物料查询接口获取母卷物料信息报错--JX");
//            logger.error(e.getMessage());
//            throw new RuntimeException("调用物料查询接口获取母卷物料信息报错--JX");
//        }
//        Long opetime =new Date().getTime()-beginTime;
//        logger.info("调用物料查询接口获取母卷物料信息--jx 调用接口耗时 "+opetime);
//        return matername;
//    }
}
src/main/resources/application.yml
@@ -85,7 +85,7 @@
    ReviewOrderSwitch: false
  #  地址
  address:
    URL: http://58.210.10.90:28090
    URL: http://192.168.16.7
    #登录地址
    loginaddress: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
    #单据,商品档案地址
@@ -98,7 +98,7 @@
    outaddressAudit: K3CLOUD/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
  #  登录账号管理
  login :
    acctID: "647e849ab6fa0f"
    username: "llw"
    password: "666666"
    acctID: "63985a1d80ae72"
    username: "Administrator"
    password: "123456"
    lcid: 2052