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.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 LoginAuthenticationHandler extends AbstractHandler { @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 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 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; } }