Browse Source

增加api接口

zhouy 3 months ago
parent
commit
c2ea3473a5

+ 21 - 0
src/main/java/com/uas/eis/controller/SSOController.java

@@ -0,0 +1,21 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.serviceImpl.NetEasyService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class SSOController {
+    @Autowired
+    private NetEasyService netEasyService;
+
+    @GetMapping("/api/ssoLogin/{accountName}")
+    public String login(@PathVariable("accountName") String accountName){
+        return netEasyService.ssoLogin(accountName);
+    }
+    @GetMapping("/api/getUnreadMsg/{accountName}")
+    public String getUnreadMsg(@PathVariable("accountName") String accountName){
+        return String.valueOf(netEasyService.getUnreadMsg(accountName));
+    }
+}

+ 28 - 0
src/main/java/com/uas/eis/controller/SyncController.java

@@ -0,0 +1,28 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.serviceImpl.ADSyncService;
+import com.uas.eis.serviceImpl.NetEasyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class SyncController {
+    @Autowired
+    private NetEasyService netEasyService;
+    @Autowired
+    private ADSyncService  adSyncService;
+
+    @PostMapping("/api/sync/netEasy")
+    public String syncNetEasy(){
+        netEasyService.syncNetEasyOrg();
+        netEasyService.syncEmployee();
+        return "同步成功";
+    }
+
+    @PostMapping("/api/sync/ad")
+    public String login(){
+       adSyncService.syncOrg();
+       adSyncService.syncUser();
+       return "同步成功";
+    }
+}

+ 0 - 163
src/main/java/com/uas/eis/controller/TestController.java

@@ -1,163 +0,0 @@
-package com.uas.eis.controller;
-
-import com.uas.eis.dao.BaseDao;
-import com.uas.eis.utils.JacksonUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.support.rowset.SqlRowSet;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.net.Socket;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by luhg on 2018/4/24.
- * 测试用
- */
-@RestController
-@Transactional
-public class TestController {
-
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Autowired
-    BaseDao baseDao;
-
-    @GetMapping(value = "/test/jdbc")
-    public String testJdbc(Integer id){
-        String res = "1";
-        SqlRowSet rs = baseDao.getJdbcTemplate().queryForRowSet("select pi_inoutno from prodinout where rownum=1");
-        if(rs.next()){
-            res = rs.getString("pi_inoutno");
-            System.out.println(res);
-        }
-        return res;
-    }
-
-    @GetMapping(value = "/test/socket")
-    public void testSocket(Integer id){
-        logger.error("test");
-        try{
-            Socket socket = new Socket("scope2015.oicp.net",1521);
-            System.out.println("connect success");
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-    }
-
-    @PostMapping(value = "/test/stock")
-    public Map<String,Object> testStock(@RequestBody String str){
-        System.out.println("request body:" + str);
-
-        Map<String,Object> res = new HashMap<>();
-
-        Map<String,Object> msg_json = new HashMap<>();
-        List<String> sno = new LinkedList<>();
-        List<String> fno = new LinkedList<>();
-        sno.add("YS180400051");
-        fno.add("2");
-        msg_json.put("s_no",sno);
-        msg_json.put("f_no",fno);
-
-        res.put("code",0);
-        res.put("message","test");
-        res.put("msg_json",msg_json);
-        return res;
-    }
-
-    @PostMapping(value = "/test/stockpost")
-    public Map<String,Object> testStockPost(@RequestBody String str){
-        System.out.println("request body:" + str);
-
-        Map<String,Object> res = new HashMap<>();
-
-        List<Map<String,Object>> data = new LinkedList<>();
-
-        Map<String,Object> code1 = new HashMap<>();
-        code1.put("outer_no","YS180400051");
-        code1.put("order_status",2);
-        code1.put("src_order_type","采购验收单");
-        data.add(code1);
-
-        Map<String,Object> code2 = new HashMap<>();
-        code2.put("outer_no","YS1803232");
-        code2.put("order_status",2);
-        code2.put("src_order_type","采购验退单");
-        data.add(code2);
-
-        res.put("code",132);
-        res.put("message","test");
-        res.put("total_count",100);
-        res.put("data",data);
-        return res;
-    }
-
-    @PostMapping(value = "/test/getoutstorage")
-    public Map<String,Object> getOutStorage(@RequestBody String str){
-        System.out.println("request body:" + str);
-
-        Map<String,Object> res = new HashMap<>();
-
-        List<Map<String,Object>> data = new LinkedList<>();
-
-        List<Map<String,Object>> detail = new LinkedList<>();
-        Map<String,Object> detailMap = new HashMap<>();
-        detailMap.put("spec_no","A.BA00002");
-        detailMap.put("goods_count",123);
-        detailMap.put("sell_price",100);
-        detailMap.put("id123",100);
-        detail.add(detailMap);
-
-        Map<String,Object> code1 = new HashMap<>();
-        code1.put("order_no","abc123");
-        code1.put("consign_time","2015-07-01 16:39:35");
-        code1.put("customer_no","2017070003");
-        code1.put("customer_name","创趣-华米分销商");
-        code1.put("details_list",detail);
-
-        data.add(code1);
-
-        res.put("code",0);
-        res.put("message","test");
-        res.put("total_count",100);
-        res.put("stockout_list",data);
-        return res;
-    }
-
-    @PostMapping(value = "/test/getoutrefund")
-    public Map<String,Object> getOutRefund(@RequestBody String str){
-        System.out.println("request body:" + str);
-
-        Map<String,Object> res = new HashMap<>();
-
-        List<Map<String,Object>> data = new LinkedList<>();
-
-        List<Map<String,Object>> detail = new LinkedList<>();
-        Map<String,Object> detailMap = new HashMap<>();
-        detailMap.put("tid","SS17060005");
-        detailMap.put("spec_no","A.AA00010");
-        detailMap.put("stockin_num",100);
-        detail.add(detailMap);
-
-        Map<String,Object> code1 = new HashMap<>();
-        code1.put("refund_no","abc123");
-        code1.put("warehouse_no","YD001");
-        code1.put("shop_n","2017070003");
-        code1.put("refund_orders_list",detail);
-        data.add(code1);
-
-        res.put("code",0);
-        res.put("message","test");
-        res.put("total_count",100);
-        res.put("data",data);
-        return res;
-    }
-}

+ 41 - 0
src/main/java/com/uas/eis/core/SSOTokenManager.java

@@ -0,0 +1,41 @@
+package com.uas.eis.core;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class SSOTokenManager {
+
+    // 线程安全的token缓存: key=用户名, value=TokenInfo
+    private static final ConcurrentHashMap<String, TokenInfo> tokenCache = new ConcurrentHashMap<>();
+    private static final ReentrantLock lock = new ReentrantLock();
+
+    // Token信息内部类
+    private static class TokenInfo {
+        String token;
+        long expirationTime; // 过期时间戳(毫秒)
+    }
+
+    /**
+     * 多线程安全的获取共享token方法
+     */
+    public static String getSsoAuthToken(String  ssoAuth) {
+        TokenInfo tokenInfo = tokenCache.get(ssoAuth);
+        if (tokenInfo == null || tokenInfo.expirationTime-60*5*1000 < System.currentTimeMillis()) {
+            return null;
+        }
+        return tokenInfo.token;
+    }
+    public static void setSsoAuthToken(String ssoAuth, String token, long expirationTime) {
+        TokenInfo tokenInfo = new TokenInfo();
+        tokenInfo.token = token;
+        tokenInfo.expirationTime = expirationTime;
+        System.out.println(System.currentTimeMillis()+"过期时间"+expirationTime);
+        lock.lock();
+        try {
+            tokenCache.put(ssoAuth, tokenInfo);
+        }finally {
+            lock.unlock();
+        }
+
+    }
+}

+ 0 - 56
src/main/java/com/uas/eis/core/support/SpringDynamicCronTask.java

@@ -1,56 +0,0 @@
-package com.uas.eis.core.support;
-
-
-
-import com.uas.eis.service.EDCBakService;
-import com.uas.eis.task.EDCBakTask;
-import com.uas.eis.task.ScheduleTask;
-import com.uas.eis.utils.ContextUtil;
-import com.uas.eis.utils.StringUtil;
-import org.apache.tomcat.util.buf.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.core.env.Environment;
-import org.springframework.scheduling.Trigger;
-import org.springframework.scheduling.TriggerContext;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.SchedulingConfigurer;
-import org.springframework.scheduling.config.ScheduledTaskRegistrar;
-import org.springframework.scheduling.config.TriggerTask;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-@Configuration
-@EnableScheduling
-public class SpringDynamicCronTask implements SchedulingConfigurer {
-
-	private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-
-	@Autowired
-	private Environment env;
-
-	@Autowired
-	private ScheduleTask scheduleTask;
-
-	@Override
-	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
-		String activeProFiles = env.getActiveProfiles()[0];
-		if(!"dev".equals(activeProFiles)) {
-			logger.info(String.format("运行环境:%s;注册TASK:%s",activeProFiles,env.getProperty("Task.Method")));
-			taskRegistrar.addCronTask(() -> {
-				//业务逻辑
-				try {
-					Method method = scheduleTask.getClass().getMethod(env.getProperty("Task.Method"));
-					method.invoke(scheduleTask);
-				}catch (Exception e){
-					e.printStackTrace();
-				}
-			}, env.getProperty("Task.Cron"));
-		}
-	}
-}

+ 28 - 1
src/main/java/com/uas/eis/sdk/NetEasySDK.java

@@ -1,9 +1,11 @@
 package com.uas.eis.sdk;
 
 import com.netease.qiye.qiyeopenplatform.common.dto.login.AppLoginResp;
+import com.netease.qiye.qiyeopenplatform.common.dto.login.SsoLoginResp;
 import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
 import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDKConfig;
 import com.netease.qiye.qiyeopenplatform.sdk.dto.R;
+import com.uas.eis.core.SSOTokenManager;
 import com.uas.eis.core.config.NetEasyConfig;
 import org.springframework.stereotype.Component;
 
@@ -16,6 +18,8 @@ public class NetEasySDK {
 
     private QiyeOpenPlatSDK sdkInstance;
 
+    private final String authSSOTokenKey = "NETEASY_SSO_TOKEN" ;
+
     public void initSDK() {
         QiyeOpenPlatSDKConfig qiyeOpenPlatSDKConfig = QiyeOpenPlatSDKConfig.builder()
                 //应用ID
@@ -40,5 +44,28 @@ public class NetEasySDK {
         return sdkInstance;
     }
 
-    //TODO: refreshToken
+    public String getSsoAuthToken () {
+        String ssoAuthToken = SSOTokenManager.getSsoAuthToken(authSSOTokenKey);
+        if (ssoAuthToken == null) {
+            QiyeOpenPlatSDKConfig qiyeOpenPlatSDKConfig = QiyeOpenPlatSDKConfig.builder()
+                    //应用ID
+                    .appId(netEasyConfig.getAppId())
+                    //企业OpenID
+                    .orgOpenId(netEasyConfig.getCropId())
+                    //服务地址信息
+                    .urlPrefix(netEasyConfig.getServerUrl())
+                    .build();
+
+            //创建SDK实例
+            this.sdkInstance= new QiyeOpenPlatSDK("dev", qiyeOpenPlatSDKConfig);
+            // 查看文档,应用获取token
+            R<SsoLoginResp> ssoLoginRespR = sdkInstance.ssoAuthToken(netEasyConfig.getAuthCode());
+            SsoLoginResp ssoLoginResp = ssoLoginRespR.getDataBean(SsoLoginResp.class);
+            SSOTokenManager.setSsoAuthToken(authSSOTokenKey, ssoLoginResp.getSsoAuthToken(), ssoLoginResp.getSsoAuthTokenExpiredTime().getTime());
+            return ssoLoginResp.getSsoAuthToken();
+        } else {
+            return ssoAuthToken;
+        }
+
+   }
 }

+ 14 - 6
src/main/java/com/uas/eis/serviceImpl/ADSyncService.java

@@ -44,7 +44,7 @@ public class ADSyncService {
     @Autowired
     private UasSyncService uasSyncService;
 
-    public void syncUser() throws IOException {
+    public void syncUser()  {
         LdapConnection connection = ldapConnectionManager.getConnection();
         List<Employee> employeeList = uasSyncService.getADUserList();
         //List<ADUser> adUserList = getUsers(connection);
@@ -188,7 +188,7 @@ public class ADSyncService {
         return null;
     }
 
-   public void syncOrg() throws IOException {
+   public void syncOrg() {
        LdapConnection connection = ldapConnectionManager.getConnection();
        List<HrOrg> orgList = uasSyncService.getADOrgList();
        logger.info("同步组织数量:{}",orgList.size());
@@ -307,7 +307,7 @@ public class ADSyncService {
     /**
      * 修改自定义description属性
      * */
-    public void updateOrgDescription(String orgName, String newDescription) throws IOException {
+    public void updateOrgDescription(String orgName, String newDescription) {
         LdapConnection connection = null;
         try {
             connection = ldapConnectionManager.getConnection();
@@ -322,7 +322,11 @@ public class ADSyncService {
             logger.info("updateOrgDescription 更新组织描述失败:{}",e.getMessage());
         }finally {
             if (connection != null) {
-                connection.close();
+                try {
+                    connection.close();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
             }
         }
     }
@@ -368,7 +372,7 @@ public class ADSyncService {
         return userPath.substring(userPath.indexOf(",")+1);
     }
 
-    public List<String> getOrganizations(LdapConnection connection) throws  IOException {
+    public List<String> getOrganizations(LdapConnection connection)  {
         if(connection==null || !connection.isConnected()){
             connection = ldapConnectionManager.getConnection();
         }
@@ -404,7 +408,11 @@ public class ADSyncService {
             throw new RuntimeException(e);
         } finally {
             if (connection != null) {
-                connection.close();
+                try {
+                    connection.close();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
             }
         }
 

+ 42 - 3
src/main/java/com/uas/eis/serviceImpl/NetEasyService.java

@@ -2,6 +2,7 @@ package com.uas.eis.serviceImpl;
 
 import com.netease.qiye.qiyeopenplatform.common.constant.ResultEnum;
 import com.netease.qiye.qiyeopenplatform.common.dto.open.account.AccountResp;
+import com.netease.qiye.qiyeopenplatform.common.dto.open.mailbox.MailBoxUnreadMsgResp;
 import com.netease.qiye.qiyeopenplatform.common.dto.open.unit.UnitAccountResp;
 import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
 import com.netease.qiye.qiyeopenplatform.sdk.dto.Q;
@@ -25,7 +26,6 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -43,6 +43,25 @@ public class NetEasyService {
     private BaseDao baseDao;
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    /**
+     * 单点登录
+     * */
+    public String ssoLogin(String accountName){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("accountName", accountName)
+                .addHeader("qiye-sso-auth-token", netEasySDK.getSsoAuthToken());
+
+        R<Map> mapR = instanceSDK.commonInvoke(q, "/api/sso/ssoSign");
+        if (!mapR.getCode().equals(ResultEnum.SUCCESS.getCode())) {
+            throw new RuntimeException("调用单点登录异常," + mapR.getCode() + ":" + mapR.getMessage());
+        }
+        String ssoSign = (String) mapR.getData().get("sign");
+        String endpoint = (String) mapR.getData().get("endpoint");
+        String lang = "0";
+        return endpoint + "?sso_token=" + ssoSign + "&lang=" + lang;
+    }
 
     /**
      * 同步人员资料
@@ -93,12 +112,14 @@ public class NetEasyService {
                 .addParam("name", employee.getEm_name())
                 .addParam("job", employee.getEm_position())
                 .addParam("jobNumber", employee.getEm_code())
-                .addParam("password", employee.getEm_password())
                 .addParam("unitId", employee.getOrneteasyid());
-        R r = instanceSDK.commonInvoke(q, "/api/open/account/createAccount");
+        if(employee.getEm_password().length() >=8){
+            q.addParam("password", employee.getEm_password());
+        }
         if(StringUtil.hasText(employee.getEm_mobile())){
             q.addParam("mobile", employee.getEm_mobile());
         }
+        R r = instanceSDK.commonInvoke(q, "/api/open/account/createAccount");
         if(StringUtil.hasText(employee.getEm_name())){}
         if(ResultEnum.SUCCESS.getCode() == r.getCode()){
             AccountResp accountResp = (AccountResp) r.getDataBean(AccountResp.class);
@@ -413,5 +434,23 @@ public class NetEasyService {
         }
     }
 
+    /**
+     * 待办邮件
+     * */
+    public Number getUnreadMsg(String accountName){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("accountName", accountName)
+                .addParam("fid",1)
+                .addParam("needAll",0)
+                .addParam("countByFolder",0);
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/mailbox/getUnreadMsg");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            MailBoxUnreadMsgResp getUnreadMsgResp = (MailBoxUnreadMsgResp) r2.getDataBean(MailBoxUnreadMsgResp.class);
+            return getUnreadMsgResp.getCount();
+        }
+        return 0;
+    }
 
 }

+ 2 - 3
src/main/resources/application.yml

@@ -39,10 +39,9 @@ server:
     tomcat:
         uri_encoding: UTF-8
     port: 8008
-    context-path: /EIS
+    context-path: /EIS_SSO
 action:
-    api_action: /EIS/api
-    public_actions: /EIS/logout,/EIS/hello1
+    api_action: /EIS_SSO/api
 logging:
   level:
     org:

+ 0 - 44
src/main/resources/log/logback-analyse.xml

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<appender name="FILE"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<File>logs/analyse/log.log</File>
-		<encoder>
-			<pattern>
-				%date{yyyy-MM-dd HH:mm:ss:SSS} [%relative ms] %-5level [%50.50(%logger{36}.%method:%line)] ---- %msg%n
-			</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<!-- daily rollover -->
-			<FileNamePattern>logs/analyse/log.%d{yyyy-MM-dd}.log</FileNamePattern>
-			<!-- keep 10 days' worth of history -->
-			<maxHistory>10</maxHistory>
-		</rollingPolicy>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>INFO</level>
-		</filter>
-	</appender>
-
-	<!-- Console output -->
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
-		<encoder>
-			<pattern>
-				%date{yyyy-MM-dd HH:mm:ss:SSS} [%relative ms] %-5level [%50.50(%logger{36}.%method:%line)] ---- %msg%n
-			</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<!-- Only log level WARN and above -->
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>INFO</level>
-		</filter>
-	</appender>
-
-	<!-- Enable FILE and STDOUT appenders for all log messages. By default, 
-		only log at level INFO and above. -->
-	<root level="INFO">
-		<appender-ref ref="FILE" />
-		<appender-ref ref="STDOUT" />
-	</root>
-</configuration>

+ 0 - 44
src/main/resources/log/logback-file.xml

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<appender name="FILE"
-		class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<File>logs/file/log.log</File>
-		<encoder>
-			<pattern>
-				%date{yyyy-MM-dd HH:mm:ss:SSS} [%relative ms] %-5level [%50.50(%logger{36}.%method:%line)] ---- %msg%n
-			</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<!-- daily rollover -->
-			<FileNamePattern>logs/file/log.%d{yyyy-MM-dd}.log</FileNamePattern>
-			<!-- keep 10 days' worth of history -->
-			<maxHistory>10</maxHistory>
-		</rollingPolicy>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>INFO</level>
-		</filter>
-	</appender>
-
-	<!-- Console output -->
-	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-		<!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
-		<encoder>
-			<pattern>
-				%date{yyyy-MM-dd HH:mm:ss:SSS} [%relative ms] %-5level [%50.50(%logger{36}.%method:%line)] ---- %msg%n
-			</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<!-- Only log level WARN and above -->
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>INFO</level>
-		</filter>
-	</appender>
-
-	<!-- Enable FILE and STDOUT appenders for all log messages. By default, 
-		only log at level INFO and above. -->
-	<root level="INFO">
-		<appender-ref ref="FILE" />
-		<appender-ref ref="STDOUT" />
-	</root>
-</configuration>

+ 4 - 0
src/test/java/com/uas/eis/NetEasyTest.java

@@ -27,4 +27,8 @@ public class NetEasyTest {
     public void syncEmp() throws Exception {
         netEasyService.syncEmployee();
     }
+    @Test
+    public void ssoLogin() throws Exception {
+        netEasyService.ssoLogin("zhuad");
+    }
 }