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);
|
}
|
|
|
}
|