liyabo 3 anni fa
parent
commit
2c19ea7650

+ 3 - 1
eladmin-system/src/main/java/me/zhengjie/modules/dm/user/repository/DmUserRepository.java

@@ -32,15 +32,17 @@ public interface DmUserRepository extends JpaRepository<DmUser, String>, JpaSpec
 
     /**
      * 查询未绑定账户的用户
+     *
      * @param userId
      * @return
      */
     @Query(value = "SELECT u.* FROM dm_user u WHERE " +
-            "u.id not in (select dm_user_id from sys_user where dm_user_id is not null and if(:userId != '',user_id != :userId,1=1))",nativeQuery = true)
+            "u.id not in (select dm_user_id from sys_user where dm_user_id is not null and if(:userId != '',user_id != :userId,1=1))", nativeQuery = true)
     List<DmUser> findNotBindUser(@Param("userId") String userId);
 
     /**
      * 根据邮箱查询
+     *
      * @param email 邮箱
      * @return /
      */

+ 8 - 5
eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/ErpDataSyncTask.java

@@ -29,10 +29,13 @@ import me.zhengjie.modules.system.domain.Job;
 import me.zhengjie.modules.system.domain.Role;
 import me.zhengjie.modules.system.domain.User;
 import me.zhengjie.modules.system.service.DeptService;
+import me.zhengjie.modules.system.service.JobService;
+import me.zhengjie.modules.system.service.RoleService;
 import me.zhengjie.modules.system.service.UserService;
 import me.zhengjie.modules.system.service.dto.DeptDto;
 import me.zhengjie.modules.system.service.dto.UserDto;
 import me.zhengjie.utils.StringUtils;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Component;
 
 import java.util.HashSet;
@@ -56,10 +59,11 @@ public class ErpDataSyncTask {
     private final DeptService deptService;
     private final UserService userService;
     private final DmUserService dmUserService;
+    private final PasswordEncoder passwordEncoder;
 
     public void run() {
         log.info("deptsync 执行开始");
-//        deptsync();
+        deptsync();
         log.info("deptsync 执行结束");
 
         log.info("usersync 执行开始");
@@ -168,7 +172,6 @@ public class ErpDataSyncTask {
             UserDto userDto;
             Dept dept;
             DmUser dmUser;
-            DmCompany dmCompany;
             DmUserDto dmUserDto;
             for (int i = 0; i < datas.size(); i++) {
                 item = datas.getJSONObject(i);
@@ -186,7 +189,7 @@ public class ErpDataSyncTask {
 
                 user.setEmail(item.getString("email"));
                 user.setPhone(item.getString("mobile"));
-                user.setPassword("12345678");
+                user.setPassword(passwordEncoder.encode("12345678"));
                 user.setEnabled(item.getInteger("userStatus") == 1);
                 user.setIsAdmin(false);
                 user.setOrgPassword("12345678");
@@ -204,11 +207,11 @@ public class ErpDataSyncTask {
                 user.setJobs(jobs);
 
                 Set<Role> roles = new HashSet<Role>();
+
                 Role role = new Role();
-                role.setId("2");
+                role.setId("2");//普通用户
                 roles.add(role);
                 user.setRoles(roles);
-
                 dmUser = new DmUser();
                 dmUser.setDept(dept);
                 dmUser.setId(user.getId());

+ 247 - 0
eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/ZkDataSyncTask.java

@@ -0,0 +1,247 @@
+/*
+ *  Copyright 2019-2020 Zheng Jie
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package me.zhengjie.modules.quartz.task;
+
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.zhengjie.modules.dm.user.domain.DmUser;
+import me.zhengjie.modules.dm.user.service.DmUserService;
+import me.zhengjie.modules.dm.user.service.dto.DmUserDto;
+import me.zhengjie.modules.system.domain.Dept;
+import me.zhengjie.modules.system.domain.Job;
+import me.zhengjie.modules.system.domain.Role;
+import me.zhengjie.modules.system.domain.User;
+import me.zhengjie.modules.system.service.DeptService;
+import me.zhengjie.modules.system.service.UserService;
+import me.zhengjie.modules.system.service.dto.DeptDto;
+import me.zhengjie.modules.system.service.dto.UserDto;
+import me.zhengjie.utils.StringUtils;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+/**
+ * ERP 数据同步
+ * @author Sky
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Component
+public class ZkDataSyncTask {
+
+    private final String erpApiUrl = "http://121.31.41.88:29312";
+    private final String sign = "e34b2f59-0e9d-45ed-a32a-f4abd4381000";
+    private final String header_key = "X_AUTO_USER_INFO_HEAD";
+    private final String header_value = "{\"id\":\"anonymous\",\"tenantId\":\"caih\"}";
+
+    private final DeptService deptService;
+    private final UserService userService;
+    private final DmUserService dmUserService;
+    private final PasswordEncoder passwordEncoder;
+
+    public void run() {
+        log.info("deptsync 执行开始");
+        deptsync();
+        log.info("deptsync 执行结束");
+
+        log.info("usersync 执行开始");
+        usersync();
+        log.info("usersync 执行结束");
+    }
+
+    private JSONObject getDatas(String api, int pagenum, int pagesize) {
+        String res = HttpRequest.get(erpApiUrl + api)
+                .header(header_key, header_value)
+                .body("{\n" +
+                        "    \"formData\":{\n" +
+                        "        \"pageNum\":" + pagenum + ",\n" +
+                        "        \"pageSize\":" + pagesize + "\n" +
+                        "    },\n" +
+                        "    \"product\":\"17\",\n" +
+                        "    \"sign\":\"" + sign + "\"\n" +
+                        "}").execute().body();
+        JSONObject json = JSONObject.parseObject(res);
+        return json;
+    }
+
+    private int gettotal(String api) {
+        JSONObject json = getDatas(api, 0, 100);
+        return json.getJSONObject("page").getInteger("totalCount");
+    }
+
+    /**
+     * 部门数据同步
+     */
+    private void deptsync() {
+        String api = "/api-third-party/busi/comm/usky/queryGroup";
+
+        //计算总页数
+        int total = gettotal(api);
+        int pagesize = 100;
+        int pagetotal = (total / pagesize);
+        if (total % pagesize != 0) {
+            pagetotal++;
+        }
+
+        //按页获取
+        for (int k = 0; k < pagetotal; k++) {
+            JSONObject json = getDatas(api, k, pagesize);
+            JSONArray datas = json.getJSONArray("data");
+            JSONObject item;
+            Dept dept;
+            for (int i = 0; i < datas.size(); i++) {
+                item = datas.getJSONObject(i);
+                dept = new Dept();
+
+                if (StringUtils.isBlank(item.getString("groupId"))) {
+                    dept.setId(UUID.randomUUID().toString());
+                } else {
+                    dept.setId(item.getString("groupId"));
+                }
+                dept.setName(item.getString("groupName"));
+
+                if (item.getString("parentId").equals("~")) {
+                    dept.setPid(null);
+                } else {
+                    dept.setPid(item.getString("parentId"));
+                }
+                dept.setDeptSort(item.getInteger("sort"));
+                dept.setEnabled(item.getBoolean("groupStatus"));
+                dept.setTreeNames(item.getString("groupNamePath"));
+                dept.setTreeIds(item.getString("groupIdPath"));
+                dept.setDeptType(item.getInteger("groupType"));
+                dept.setDescription(item.getString("groupName"));
+
+                try {
+                    DeptDto deptDto = deptService.findById(item.getString("groupId"));
+                    if (deptDto != null) {
+                        deptService.update(dept);
+                    } else {
+                        deptService.create(dept);
+                    }
+                } catch (Exception ex) {
+                    System.out.println(JSONObject.toJSON(dept));
+                }
+            }
+        }
+    }
+
+    /**
+     * 人员数据同步
+     */
+    private void usersync() {
+
+        String api = "/api-third-party/busi/comm/usky/queryUser";
+
+        //计算总页数
+        int total = gettotal(api);
+        int pagesize = 100;
+        int pagetotal = (total / pagesize);
+        if (total % pagesize != 0) {
+            pagetotal++;
+        }
+
+        //按页获取
+        for (int k = 0; k < pagetotal; k++) {
+            JSONObject json = getDatas(api, k, pagesize);
+            JSONArray datas = json.getJSONArray("data");
+            JSONObject item;
+            User user;
+            UserDto userDto;
+            Dept dept;
+            DmUser dmUser;
+            DmUserDto dmUserDto;
+            for (int i = 0; i < datas.size(); i++) {
+                item = datas.getJSONObject(i);
+                user = new User();
+                user.setId(item.getString("userId"));
+                user.setUsercode(item.getString("usercode"));
+                user.setNickName(item.getString("userName"));
+                user.setUsername(item.getString("userAccount"));
+
+                if(StringUtils.isBlank(item.getString("sex"))){
+                    user.setGender("");
+                }else{
+                    user.setGender(item.getString("sex").equals("m") ? "男" : "女");
+                }
+
+                user.setEmail(item.getString("email"));
+                user.setPhone(item.getString("mobile"));
+                user.setPassword(passwordEncoder.encode("12345678"));
+                user.setEnabled(item.getInteger("userStatus") == 1);
+                user.setIsAdmin(false);
+                user.setOrgPassword("12345678");
+                dept = new Dept();
+                dept.setId(item.getString("userGroupId"));
+                if (StringUtils.isBlank(dept.getId())) {
+                    dept.setId("0001T110000000000UKL");
+                }
+                user.setDept(dept);
+
+                Set<Job> jobs = new HashSet<Job>();
+                Job job = new Job();
+                job.setId("10");
+                jobs.add(job);
+                user.setJobs(jobs);
+
+                Set<Role> roles = new HashSet<Role>();
+
+                Role role = new Role();
+                role.setId("2");//普通用户
+                roles.add(role);
+                user.setRoles(roles);
+                dmUser = new DmUser();
+                dmUser.setDept(dept);
+                dmUser.setId(user.getId());
+                dmUser.setEmail(user.getEmail());
+                dmUser.setContacts(user.getPhone());
+                dmUser.setName(user.getNickName());
+                dmUser.setSex(user.getGender());
+                dmUser.setUsercode(user.getUsercode());
+                dmUser.setJobs(jobs);
+                dmUser.setRoles(roles);
+
+                try {
+                    //1、入用户库
+                    dmUserDto = dmUserService.findById(dmUser.getId());
+
+                    if (dmUserDto != null) {
+                        dmUserService.update(dmUser);
+                    } else {
+                        dmUserService.create(dmUser);
+                    }
+                    user.setDmUser(dmUser);
+
+                    //2、入账户库并与用户库关联
+                    userDto = userService.findById(user.getId());
+                    if (userDto != null) {
+                        userService.update(user);
+                    } else {
+                        userService.create(user);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

+ 2 - 1
eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java

@@ -25,6 +25,7 @@ import org.springframework.security.core.GrantedAuthority;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -97,7 +98,7 @@ public interface RoleService {
      * @param pageable 分页参数
      * @return /
      */
-    Object queryAll(RoleQueryCriteria criteria, Pageable pageable);
+    Map<String, Object> queryAll(RoleQueryCriteria criteria, Pageable pageable);
 
     /**
      * 查询全部

+ 2 - 2
eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java

@@ -76,9 +76,9 @@ public class RoleServiceImpl implements RoleService {
     }
 
     @Override
-    public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) {
+    public Map<String, Object> queryAll(RoleQueryCriteria criteria, Pageable pageable) {
         Page<Role> page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
-        return PageUtil.toPage(page.map(roleMapper::toDto));
+        return PageUtil.toPage(page.map(roleMapper::toDto).getContent(), page.getTotalElements());
     }
 
     @Override

+ 95 - 8
eladmin-system/src/main/java/me/zhengjie/modules/thirdparty/v1/UserApiController.java

@@ -12,30 +12,40 @@ import me.zhengjie.annotation.rest.AnonymousGetMapping;
 import me.zhengjie.annotation.rest.AnonymousPostMapping;
 import me.zhengjie.base.BaseResponse;
 import me.zhengjie.base.QueryPageParams;
+import me.zhengjie.exception.BadRequestException;
 import me.zhengjie.modules.dm.user.service.DmUserService;
 import me.zhengjie.modules.dm.user.service.dto.DmUserDto;
 import me.zhengjie.modules.dm.user.service.dto.DmUserQueryCriteria;
-import me.zhengjie.modules.system.service.DataService;
-import me.zhengjie.modules.system.service.DeptService;
-import me.zhengjie.modules.system.service.UserService;
-import me.zhengjie.modules.system.service.dto.DeptDto;
-import me.zhengjie.modules.system.service.dto.DeptQueryCriteria;
-import me.zhengjie.modules.system.service.dto.DeptQueryNoAuthCriteria;
+import me.zhengjie.modules.security.config.bean.LoginProperties;
+import me.zhengjie.modules.security.config.bean.SecurityProperties;
+import me.zhengjie.modules.security.security.TokenProvider;
+import me.zhengjie.modules.security.service.OnlineUserService;
+import me.zhengjie.modules.security.service.dto.JwtUserDto;
+import me.zhengjie.modules.system.service.*;
+import me.zhengjie.modules.system.service.dto.*;
 import me.zhengjie.utils.SecurityUtils;
+import me.zhengjie.utils.StringUtils;
 import org.hibernate.Criteria;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -46,8 +56,19 @@ import java.util.Map;
 public class UserApiController {
     private final DmUserService dmUserService;
     private final UserService userService;
-    private final DataService dataService;
     private final DeptService deptService;
+    private final JobService jobService;
+    private final RoleService roleService;
+    private final TokenProvider tokenProvider;
+    private final AuthenticationManagerBuilder authenticationManagerBuilder;
+    private final OnlineUserService onlineUserService;
+    private final SecurityProperties properties;
+    @Resource
+    private LoginProperties loginProperties;
+
+    private final PasswordEncoder passwordEncoder;
+
+    private final String erpapiUrl = "http://222.84.157.37:30170";
 
     @Log("获取ERP用户数据")
     @ApiOperation("获取ERP用户数据")
@@ -69,10 +90,56 @@ public class UserApiController {
         return new ResponseEntity<>(json, HttpStatus.OK);
     }
 
+    @Log("单点登录")
+    @ApiOperation("单点登录")
+    @AnonymousGetMapping(value = "/sso")
+    public ResponseEntity<Object> sso(HttpServletRequest request) {
+        String token = request.getParameter("token");
+        String url = request.getParameter("url");
+
+        if (StringUtils.isBlank(token) || StringUtils.isBlank(url)) {
+            throw new BadRequestException("参数错误");
+        }
+
+        String res = HttpRequest.get(erpapiUrl + "/api-third-party/busi/comm/authLogin/api/verifyToken?token=" + token).execute().body();
+        JSONObject json = JSONObject.parseObject(res);
+
+        if (json != null) {
+            JSONObject data = json.getJSONObject("data");
+
+            if (data != null) {
+
+                UserDto userDto = userService.findByName(data.getString("username"));
+
+                if (userDto != null) {
+                    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(data.getString("username"), userDto.getPassword());
+                    Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
+                    SecurityContextHolder.getContext().setAuthentication(authentication);
+                    // 生成令牌
+                    String n_token = tokenProvider.createToken(authentication);
+                    final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
+                    // 保存在线信息
+                    onlineUserService.save(jwtUserDto, n_token, request);
+                    // 返回 token 与 用户信息
+                    Map<String, Object> authInfo = new HashMap<String, Object>(2) {{
+                        put("token", properties.getTokenStartWith() + n_token);
+                        put("user", jwtUserDto);
+                    }};
+                    if (loginProperties.isSingleLogin()) {
+                        //踢掉之前已经登录的token
+                        onlineUserService.checkLoginOnUser(data.getString("username"), n_token);
+                    }
+                    return ResponseEntity.ok(authInfo);
+                }
+            }
+        }
+        throw new BadRequestException("认证失败");
+    }
+
     @Log("获取用户数据")
     @ApiOperation("获取用户数据")
     @AnonymousPostMapping(value = "/getzkusers")
-    public BaseResponse<Object> getzkusers(@RequestBody QueryPageParams<DmUserQueryCriteria> params, Pageable pageable)  {
+    public BaseResponse<Object> getzkusers(@RequestBody QueryPageParams<DmUserQueryCriteria> params, Pageable pageable) {
         SecurityUtils.CheckApiAuth(params);
         Map<String, Object> list = dmUserService.queryAll(params.getQuery(), pageable);
 
@@ -88,4 +155,24 @@ public class UserApiController {
 
         return new BaseResponse<>(list);
     }
+
+    @Log("获取岗位数据")
+    @ApiOperation("获取岗位数据")
+    @AnonymousPostMapping(value = "/getzkjobs")
+    public BaseResponse<Object> getzkjobs(@RequestBody QueryPageParams<JobQueryCriteria> params, Pageable pageable) {
+        SecurityUtils.CheckApiAuth(params);
+        Map<String, Object> list = jobService.queryAll(params.getQuery(), pageable);
+
+        return new BaseResponse<>(list);
+    }
+
+    @Log("获取角色数据")
+    @ApiOperation("获取角色数据")
+    @AnonymousPostMapping(value = "/getzkroles")
+    public BaseResponse<Object> getzkroles(@RequestBody QueryPageParams<RoleQueryCriteria> params, Pageable pageable) {
+        SecurityUtils.CheckApiAuth(params);
+        Map<String, Object> list = roleService.queryAll(params.getQuery(), pageable);
+
+        return new BaseResponse<>(list);
+    }
 }

+ 4 - 4
eladmin-system/src/main/resources/config/application.yml

@@ -25,10 +25,10 @@ spring:
   redis:
     #数据库索引
     database: ${REDIS_DB:2}
-    host: ${REDIS_HOST:172.16.159.48}
-    port: ${REDIS_PORT:6386}
-#    host: ${REDIS_HOST:127.0.0.1}
-#    port: ${REDIS_PORT:6379}
+#    host: ${REDIS_HOST:172.16.159.48}
+#    port: ${REDIS_PORT:6386}
+    host: ${REDIS_HOST:127.0.0.1}
+    port: ${REDIS_PORT:6379}
     password: ${REDIS_PWD:}
     #连接超时时间
     timeout: 5000ms