| 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.entity.Order; | 
| 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 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.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); | 
|     } | 
|   | 
|   | 
| } |