| src/main/java/com/zy/asrs/task/GhlnScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/GhlnHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/LoginAuthHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/erp/ghln/GhlnErp.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | 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