Browse Source

用户登录调整

chenw 6 years ago
parent
commit
0fac2cf406

+ 1 - 1
bi-core/src/main/java/com/usoftchina/bi/core/utils/EncryUtil.java

@@ -73,7 +73,7 @@ public class EncryUtil {
 			String pass = getDesUtil().decrypt(password);
 			return removePasswordSalt(pass);
 		} catch (Exception e) {
-			e.printStackTrace();
+
 		}
 		return password;
 	}

+ 2 - 1
bi-server/src/main/java/com/usoftchina/bi/server/Application.java

@@ -9,13 +9,14 @@ import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Import;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 @SpringBootApplication
 @EnableSwagger2
 @Import({DynamicDataSourceRegister.class})
 @EnableCaching
-@AutoConfigureCache
+@EnableScheduling
 @ComponentScan("com.usoftchina.bi")
 public class Application {
     public static void main(String[] args) {

+ 4 - 7
bi-server/src/main/java/com/usoftchina/bi/server/controller/user/UserController.java

@@ -11,10 +11,7 @@ import com.usoftchina.bi.server.service.user.UserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -58,9 +55,9 @@ public class UserController {
     查询匹配用户
      */
     @ApiOperation(value = "查询匹配用户", notes = "查询匹配用户", response = RepEntity.class)
-    @PostMapping("/getNameList")
-    public RepEntity getNameList(@RequestBody String body){
-        return userService.getNameList(body);
+    @GetMapping("/getNameList")
+    public RepEntity getNameList(@RequestParam("condition") String condition, @RequestParam(value = "count", defaultValue = "20") Long count){
+        return userService.getNameList(condition, count);
     }
 
     /*

+ 47 - 10
bi-server/src/main/java/com/usoftchina/bi/server/dao/user/UserMapper.java

@@ -11,11 +11,47 @@ import java.util.List;
 @Repository
 public interface UserMapper {
 
+    /**
+     * 获取表记录数
+     * @return
+     */
+    @Select("SELECT COUNT(*) FROM bi_users")
+    int getCount();
+
+    /**
+     * 查询UAS的人员资料表数据
+     * @return
+     */
+    @Select("SELECT EM_DEFAULTHSNAME as department, EM_TYPE role, EM_DEPART as post, EM_NAME as name, EM_PASSWORD as passWord, "
+            + "EM_MOBILE as phone, EM_CODE as userName,EM_CLASS AS state FROM EMPLOYEE")
+    List<User> getUASEmployee();
+
+    /**
+     * 批量插入人员资料
+     * @param userList
+     */
+    @Insert("<script"
+            + "INSERT INTO BI_USERS(BU_ID, BU_NAME, BU_POST, USER_NAME, PASS_WORD, BU_DEPARTMENT, CREATE_DATE) "
+            + "SELECT BI_USERS_SEQ.NEXTVAL,M.* FROM ("
+            +   "<foreach collection=\"list\" item=\"item\" index=\"index\" separator=\"UNION ALL\">"
+            +       "SELECT "
+            +           "#{name, jdbcType=VARCHAR},"
+            +           "#{post, jdbcType=VARCHAR},"
+            +           "#{userName, jdbcType=VARCHAR},"
+            +           "#{passWord, jdbcType=VARCHAR},"
+            +           "#{department, jdbcType=VARCHAR},"
+            +           "SYSDATE"
+            +       "FROM DUAL"
+            +   "</foreach>"
+            + ")M"
+            + "</script>")
+    void batchInsert(@Param("list") List<User> userList);
+
     /*
     新增一条用户数据
      */
-    @Insert("insert into bi_users(bu_id, bu_name, BU_POST, USER_NAME, PASS_WORD, BU_DEPARTMENT, CREATE_DATE) values" +
-            "(#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{post,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{passWord,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss'))")
+    @Insert("insert into bi_users(bu_id, bu_name, BU_POST, USER_NAME, PASS_WORD, BU_DEPARTMENT, CREATE_DATE,BU_PHONE) values" +
+            "(#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{post,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{passWord,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss'), #{phone, jdbcType=VARCHAR})")
     @SelectKey(before=true,keyProperty="id",resultType=int.class,statement="SELECT bi_users_sequence.nextval from dual",keyColumn = "bu_id")
     void addUser(User user);
 
@@ -30,6 +66,7 @@ public interface UserMapper {
             " <if test=\"post != null\">BU_POST = #{post,jdbcType=VARCHAR}, </if>" +
             " <if test=\"department != null\">BU_DEPARTMENT = #{department,jdbcType=VARCHAR}, </if>" +
             " <if test=\"role != null\">BU_ROLE = #{role,jdbcType=VARCHAR}, </if>" +
+            " <if test=\"phone != null\">BU_ROLE = #{BU_PHONE,jdbcType=VARCHAR}, </if>" +
             "  updata_date = to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss')" +
             "  where bu_id = #{id,jdbcType=INTEGER}" +
             " </script>")
@@ -50,16 +87,16 @@ public interface UserMapper {
     /*
     查询uas用户信息
      */
-    @Select("select EM_DEFAULTHSNAME as department, EM_DEPART as post, EM_NAME as name, em_password as passWord," +
-            " em_mobile as phone, em_code as userName from EMPLOYEE where ${column} = #{userName}")
-    User getUserMess(@Param("userName") String userName, @Param("column") String column);
+    @Select("SELECT EM_DEFAULTHSNAME as department, EM_DEPART as post,EM_TYPE as role, EM_NAME as name, EM_PASSWORD as passWord," +
+            " EM_MOBILE as phone, EM_CODE as userName,EM_CLASS AS state FROM EMPLOYEE where EM_MOBILE = #{userName} OR EM_CODE = #{userName}")
+    User getUserMess(@Param("userName") String userName);
 
     /*
     获取用户信息
      */
-    @Select("select BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role," +
-            " user_name as userName, pass_word as passWord " +
-            "from bi_users where user_name = #{userName}")
+    @Select("SELECT BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role," +
+            " USER_NAME as userName, PASS_WORD as passWord, BU_PHONE as phone, BU_CLASS as state " +
+            "FROM BI_USERS WHERE USER_NAME = #{userName} OR BU_PHONE = #{userName}")
     User getLogin(String userName);
 
     /*
@@ -91,8 +128,8 @@ public interface UserMapper {
     匹配用户20个
      */
     @Select("select BU_ID as id, BU_NAME as name, BU_DEPARTMENT as department, BU_POST as post, BU_ROLE as role " +
-            "from bi_users where bu_name ${value} and rownum<21")
-    List<User> getNameList(String value);
+            "from bi_users where bu_name ${condition} and rownum < #{count, jdbcType=INTEGER}")
+    List<User> getNameList(@Param("condition") String condition, @Param("count") Long count);
 
     /*
     更新token

+ 12 - 0
bi-server/src/main/java/com/usoftchina/bi/server/model/po/User.java

@@ -11,9 +11,21 @@ public class User {
     private String post;
     private String role;
     private String phone;
+    /**
+     * 在职状态:  正式、试用、离职......
+     */
+    private String state;
     private Date createDate;
     private Date updateDate;
 
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 47 - 0
bi-server/src/main/java/com/usoftchina/bi/server/service/user/SynchronizeEmpInfo.java

@@ -0,0 +1,47 @@
+package com.usoftchina.bi.server.service.user;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 同步人员资料
+ * @Author chenwei
+ * @Date 2019-04-18
+ */
+@Component
+public class SynchronizeEmpInfo {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SynchronizeEmpInfo.class);
+
+    private String SQL = "MERGE INTO BI_USERS TARGETTABLE "
+                       + "USING EMPLOYEE SOURCETABLE "
+                       + "ON (SOURCETABLE.EM_CODE = TARGETTABLE.USER_NAME) "
+                       + "WHEN MATCHED THEN "
+                       + "  UPDATE  SET TARGETTABLE.BU_CLASS = SOURCETABLE.EM_CLASS, TARGETTABLE.PASS_WORD = SOURCETABLE.EM_PASSWORD, TARGETTABLE.BU_ROLE = SOURCETABLE.EM_TYPE"
+                       + "WHEN NOT MATCHED THEN"
+                       + "  INSERT (BU_ID,BU_NAME,BU_DEPARTMENT,BU_POST,BU_USER_GROUP,USER_NAME,PASS_WORD,BU_ROLE,CREATE_DATE,UPDATA_DATE,USER_TOKEN,BU_PHONE,BU_CLASS) "
+                       + "  VALUES (BI_USERS_SEQ.NEXTVAL,SOURCETABLE.EM_NAME,SOURCETABLE.EM_DEFAULTHSNAME,SOURCETABLE.EM_DEPART,NULL,SOURCETABLE.EM_CODE,SOURCETABLE.EM_PASSWORD,SOURCETABLE.EM_TYPE,SYSDATE,NULL,NULL,SOURCETABLE.EM_MOBILE,SOURCETABLE.EM_CLASS)";
+
+    @Scheduled(cron = "0 0 1 * * ?")
+    private void syncEmpInfo(){
+        LOGGER.info("同步人员资料任务执行开始!,时间={}", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        try {
+            jdbcTemplate.execute(SQL);
+        } catch (DataAccessException e) {
+            LOGGER.error("同步人员资料任务执行失败!原因={}", e.getCause().getMessage());
+        }
+        LOGGER.info("同步人员资料任务执行成功!");
+    }
+
+}

+ 49 - 25
bi-server/src/main/java/com/usoftchina/bi/server/service/user/UserService.java

@@ -16,6 +16,7 @@ import com.usoftchina.bi.server.model.vo.configVo.UserGroupSetInfo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -30,38 +31,68 @@ public class UserService {
     @Autowired
     ObjectMapper objectMapper;
 
+    /**
+     * 登录接口,涉及UAS用户同步:
+     *      1.登陆时,若此时BI_USERS表中没有数据,则将UASE中EMPLOYEE表数据同步至BI_USERS
+     *      2.登陆时,在EMPLOYEE表中查询此人的人员在职状态(EM_CLASS)。若离职,则不允许登录,同时更新BI中BI_USERS对应人员的在职状态
+     *      3.通过定时任务的方式每晚比对EMPLOYEE和BI_USERS,进行insert和update操作。
+     * @param loginInfo
+     * @return
+     */
     public RepEntity<TokenData> login(LoginInfo loginInfo){
-        String userName = loginInfo.getUserName();
-        String pws = loginInfo.getPassWord();
-        if ("".equals(userName) || "".equals(pws)){
+        String userName = loginInfo.getUserName(), pws = loginInfo.getPassWord();
+        if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(pws)){
             return new RepEntity(RepCode.NoUser);
         }
-        //1.校验用户名密码在BI中是否存在
+        //1.从UAS中将人员资料同步过来
+        copyUserFromUAS();
+        //2.校验用户名密码在BI中是否存在
         User user = userMapper.getLogin(userName);
         String password = "";
         if (null == user) {
-            //2.校验用户名密码在UAS中是否存在
+            //3.校验用户名密码在UAS中是否存在
             user = findUserFromUAS(userName, pws);
+            if ("离职".equals(user.getState())) {
+                throw new MyException(RepCode.NoUser);
+            }
             //插入
             userMapper.addUser(user);
         }else {
+            String role = user.getRole();
             password = user.getPassWord();
-            if (!pws.equals(password)){
-                //2.校验用户名密码在UAS中是否存在
-                user = findUserFromUAS(userName, pws);
+
+            user = findUserFromUAS(userName, pws);
+            user.setRole(role);
+            int userId = userMapper.getUserId(userName);
+            user.setId(userId);
+            if (!pws.equals(EncryUtil.decryptPassword(password))){
                 //更新密码
-                int userId = userMapper.getUserId(userName);
-                user.setId(userId);
                 userMapper.updateUser(user);
+            }else {
+                if ("离职".equals(user.getState())) {
+                    //更新离职状态
+                    userMapper.updateUser(user);
+                    throw new MyException(RepCode.NoUser);
+                }
             }
         }
-        user.setRole(userMapper.getRole(user.getId()));
         TokenData tokenData = jwtTokenUtil.createToke(user);
         tokenData.setUser(user);
-        //userMapper.updateToken(tokenData.getToken(),user.getId());
         return new RepEntity(RepCode.success, tokenData);
     }
 
+    /**
+     * 从UAS复制人员资料
+     */
+    private void copyUserFromUAS(){
+        int count = userMapper.getCount();
+        if (count == 0) {
+            List<User> userList = userMapper.getUASEmployee();
+            //userList.forEach(user -> user.setPassWord(EncryUtil.decryptPassword(user.getPassWord())));
+            userMapper.batchInsert(userList);
+        }
+    }
+
     /**
      * 在UAS中查找用户
      * @param userName
@@ -69,22 +100,15 @@ public class UserService {
      * @return
      */
     private User findUserFromUAS(String userName, String pws){
-        String column = "em_mobile";
-        User user = userMapper.getUserMess(userName, column);
+        User user = userMapper.getUserMess(userName);
         if (null == user) {
-            column = "em_code";
-            user = userMapper.getUserMess(userName, column);
-            if (user == null){
-                throw new MyException(RepCode.NoUser.getCode(), RepCode.NoUser.getMsg());
-            }
+            throw new MyException(RepCode.NoUser);
         }
         String password = user.getPassWord();
         String pw = EncryUtil.decryptPassword(password);
         if (!pws.equals(pw)){
-            throw new MyException(RepCode.NoUser.getCode(), RepCode.NoUser.getMsg());
+            throw new MyException(RepCode.NoUser);
         }
-        user.setPassWord(pw);
-        user.setUserName(userName);
         return user;
     }
 
@@ -130,18 +154,18 @@ public class UserService {
     /*
     查询匹配用户
      */
-    public RepEntity getNameList(String str){
+    public RepEntity getNameList(String condition, Long count){
         String value = null;
         String v = null;
         try {
-            v = objectMapper.readValue(str, String.class);
+            v = objectMapper.readValue(condition, String.class);
         } catch (IOException e) {
             e.printStackTrace();
         }
 
         value = "like '%" + v + "%'";
 
-        List<User> userName = userMapper.getNameList(value);
+        List<User> userName = userMapper.getNameList(value, count);
         return new RepEntity(RepCode.success, userName);
     }