cnas-manage/src/main/java/com/ruoyi/manage/service/impl/ManageDocumentListServiceImpl.java
@@ -22,9 +22,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** inspect-server/src/main/resources/lib/aspose-words-15.12.0-jdk16.jarBinary files differ
inspect-server/src/main/resources/lib/license.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <License> <Data> <Products> <Product>Aspose.Total for Java</Product> <Product>Aspose.Words for Java</Product> </Products> <EditionType>Enterprise</EditionType> <SubscriptionExpiry>20991231</SubscriptionExpiry> <LicenseExpiry>20991231</LicenseExpiry> <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber> </Data> <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature> </License> inspect-server/src/main/resources/static/report-template.docxBinary files differ
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/CustomController.java
@@ -30,7 +30,7 @@ @ApiOperation(value = "è·å客æ·å表") @GetMapping("/selectCustomPageList") public Result<IPage<Custom>> selectCustomPageList(Page page, Custom custom) throws Exception { public Result<IPage<Custom>> selectCustomPageList(Page page, Custom custom) { return Result.success(customService.selectCustomPageList(page, custom)); } @ApiOperation(value = "å é¤å®¢æ·ä¿¡æ¯") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UserController.java
@@ -2,13 +2,18 @@ import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.core.dto.PersonDto; import com.ruoyi.system.service.UserService; import com.ruoyi.web.controller.dto.UpdateUserDto; import com.ruoyi.web.controller.system.api.HeaderToken; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** @@ -23,6 +28,9 @@ @Resource private UserService userService; @Autowired private HeaderToken headerToken; /** * todo: type : 1: è·åæ£æµäººåä¿¡æ¯ @@ -70,6 +78,23 @@ } @ApiOperation(value = "æ¥ç人äºç³»ç»ç»ç»æ¶æ") @GetMapping(value = "/selectCompaniesList") public Result<List<Company>> selectCompaniesList() { return Result.success(headerToken.companyUrl()); } @ApiOperation("è·å人äºç³»ç»ç»ç»ä¸ç人å") @GetMapping(value = "/selectSimpleList") public Result<?> selectSimpleList(String companyId) { return Result.success(headerToken.userUrl(companyId)); } @ApiOperation("å°äººäºç³»ç»å¾éçå å®¹è½¬ç§»å°æ¬ç³»ç»") @PostMapping(value = "/addPersonUser") public Result<?> addPersonUser(@RequestBody PersonDto personDto) { return Result.success(userService.addPersonUser(personDto)); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/api/AuthApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.ruoyi.web.controller.system.api; public class AuthApi { /** * æµè¯å°å * */ // private String code = "https://ztt-sso.asuncloud.net/oauth2/token"; /** * æ£å¼å°å * */ public static String code = "https://ztt-sso.ztt.cn/oauth2/token"; /** * æ²³å£äººäºæµè¯åº * */ // private String appId = "8b2f2c7e-2ab9-4718-8193-c0c636dceba8"; // private String appSecret = "db59b70d28ab1865aafe4008f59d4760"; /** * æ²³å£äººäºæ£å¼åº * */ public static String appId = "f6f3d70f-3666-4d3d-b9c5-430de3f6007c"; public static String appSecret = "a18923496542302066b0a7bec993a4e2"; /** * è£ å¤äººäºæµè¯åº * */ // private String appId = "0acf9b63-31e3-45c4-99c1-af1aac88b985"; // private String appSecret = "7fb7a4026c71619345c31fa12ba31f4f"; /** * è£ å¤äººäºæ£å¼åº * */ // private String appId = "6f5f6a0c-2a01-4ef6-9e75-c8a6f0c2f044"; // private String appSecret = "89b9c4735b1e5ee9d6a8544b9b38bb03"; /** * æ¥è¯¢ç»ç»æ¶æ */ public static String companies = "https://ztt-connector.ztt.cn/api/org/v1/companies"; public static String simple="https://ztt-connector.ztt.cn/api/org/v1/employees/simple?companyId="; /** * è·åææäººå */ public static String employees = "https://ztt-connector.ztt.cn/api/org/v1/employees"; /** * 人åå¯ç è·å * */ public static String password = "https://ztt-connector.ztt.cn/api/org/v1/employees/original_pwd/"; public static String department = "https://ztt-connector.ztt.cn/api/org/v1/companies/companyId/departments"; public static String person = "https://ztt-connector.ztt.cn/api/org/v1/employees/simple/"; } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/api/HeaderToken.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,191 @@ package com.ruoyi.web.controller.system.api; import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.log.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.Person; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.system.mapper.UserMapper; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component public class HeaderToken { @Resource private RedisTemplate redisTemplate; @Resource private UserMapper userMapper; public String fetchNewAccessToken() { HttpRequest request = HttpRequest.post(AuthApi.code) .header("Content-Type", "application/x-www-form-urlencoded") .form("grant_type", "client_credentials") .form("client_id", AuthApi.appId) .form("client_secret", AuthApi.appSecret); HttpResponse response = request.execute(); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode; try { jsonNode = objectMapper.readTree(response.body()); String accessToken = jsonNode.get("access_token").asText(); Log.get().info("è·å人äºç³»ç»tokenï¼"+accessToken); redisTemplate.opsForValue().set("access_token",accessToken,jsonNode.get("expires_in").asInt() - 60,TimeUnit.SECONDS); return accessToken; } catch (Exception e) { throw new ErrorException(e.getMessage()); } } //夿æ¯å¦åå¨ public String getAccessToken() { String accessToken; if (!redisTemplate.hasKey("access_token")) { accessToken = fetchNewAccessToken(); }else{ accessToken = redisTemplate.opsForValue().get("access_token")+""; } return accessToken; } //è°ç¨ public List<Company> companyUrl() { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.companies) .header("Authorization", "Bearer " + accessToken); List<Company> companies; try { companies = JSON.parseArray(request.execute().body(), Company.class); }catch (Exception e){ throw new ErrorException(e.getMessage()); } return companies.stream().filter(ob->{ if(Objects.equals(ob.getStatus(), "enabled")) return true; return false; }).collect(Collectors.toList()); // return companies; } public List<Person> userUrl(String companyId) { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.simple+companyId) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); List<Person> person; try { person = JSON.parseArray(request.execute().body(), Person.class); }catch (Exception e){ throw new ErrorException(e.getMessage()); } List<JSONObject> department = getDepartment(companyId); return person.stream().filter(ob->{ if(Objects.equals(ob.getStatus(), "enabled")) { ob.setIsLive(userMapper.selectCount(Wrappers.<User>lambdaQuery().eq(User::getAccount, ob.getEmployeeID()))); ob.setDepartment(getDepartmentStr(department, ob.getDepartmentCode()).replaceFirst("/", "")); return true; } return false; }).collect(Collectors.toList()); } public String getDepartmentStr(List<JSONObject> department, String code){ String str = ""; Optional<JSONObject> depart = department.stream().filter(a -> code.equals(a.get("departmentCode"))).findFirst(); str = "/" + depart.get().get("departmentName") + str; if(depart.get().get("parentDepartmentCode") != null){ str = getDepartmentStr(department, depart.get().get("parentDepartmentCode").toString()) + str; } return str; } public String getPassword(String employeeId) { String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.password + employeeId) .header("Authorization", "Bearer " + accessToken); System.out.println(AuthApi.password + employeeId); System.out.println(request.execute().body()); return JSON.parseObject(request.execute().body()).get("originalPwd").toString(); } public List<JSONObject> getDepartment(String companyId){ String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.department.replace("companyId", companyId)) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); List<JSONObject> list; try { list = JSON.parseArray(request.execute().body()); }catch (Exception e){ throw new ErrorException(e.getMessage()); } return list.stream().filter(ob->{ if(Objects.equals(ob.get("status"), "enabled")) return true; return false; }).collect(Collectors.toList()); } public Person selectPersonUser(String code){ String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.person + code) .header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); Person person; try { person = JSON.parseObject(request.execute().body(), Person.class); if(BeanUtil.isEmpty(person))return null; }catch (Exception e){ throw new ErrorException(e.getMessage()); } List<JSONObject> department = getDepartment(person.getCompanyId()); person.setDepartment(getDepartmentStr(department, person.getDepartmentCode()).replaceFirst("/", "")); person.setIsLive(userMapper.selectCount(Wrappers.<User>lambdaQuery().eq(User::getAccount, person.getEmployeeID()))); return person; } // è·åææäººåä¿¡æ¯ public List<Map> getEmployees() { // è·åtoken String accessToken = getAccessToken(); HttpRequest request = HttpRequest.get(AuthApi.employees).header("Authorization", "Bearer " + accessToken) .header("Content-Type", "application/form-data"); String body = request.execute().body(); List<Map> maps = JSONArray.parseArray(body, Map.class); return maps; } // è·å人åä¿¡æ¯ public Map getEmployee(String employeeId) { // è·åtoken String accessToken = getAccessToken(); System.out.println("token " + accessToken); String url = AuthApi.employees + "/" + employeeId; HttpRequest request = HttpRequest.get(url).header("Authorization", "Bearer " + accessToken); String body = request.execute().body(); ObjectMapper objectMapper = new ObjectMapper(); Map map = new HashMap<>(); try { map = objectMapper.readValue(body, Map.class); } catch (JsonProcessingException e) { throw new RuntimeException(e); } return map; } } ruoyi-admin/src/main/resources/application.yml
@@ -64,7 +64,7 @@ devtools: restart: # çé¨ç½²å¼å ³ enabled: true enabled: false # redis é ç½® redis: # å°å ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Company.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.common.core.domain.entity; import lombok.Data; @Data public class Company { private String companyId; private String companyName; private String parentCompanyId; private String description; private String status; } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/Person.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.common.core.domain.entity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class Person { private String name; //人åç¼å·ï¼å ¨å±å¯ä¸ private String employeeID; //å²ä½ private String position; //å²ä½ç¼ç private String positionCode; //ææºå·ç private String phoneNumber; //æ§å« 1:ç· 2:女 private Integer gender; //ç»ç»ç¶æ enable:å¨è disabled:离è private String status; //æå±ç»ç»ç¼ç private String companyId; //å ¬å¸é®ç®±(å¯ç¨äºé®ç®±ç³»ç») private String companyEmail; //å ¥èå ¬å¸æ¶é´ private String dateOfJoiningTheCompany; //ç»ç»å çé¨é¨ç¼ç private String departmentCode; @ApiModelProperty(">1ï¼åå¨ =0ï¼ä¸åå¨") private Long isLive; private String department; } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -69,6 +69,32 @@ /** åèå */ private List<SysMenu> children = new ArrayList<SysMenu>(); /** æ¯å¦å¯ä»¥éæ©ä» çæ, 0:å¦, 1:æ¯ */ private Integer isRersonalButton; /** ä» çæ, 0:å¦, 1:æ¯ */ private Integer isRersonal; public Integer getIsRersonalButton() { return isRersonalButton; } public void setIsRersonalButton(Integer isRersonalButton) { this.isRersonalButton = isRersonalButton; } public Integer getIsRersonal() { return isRersonal; } public void setIsRersonal(Integer isRersonal) { this.isRersonal = isRersonal; } public Long getMenuId() { return menuId; @@ -269,6 +295,7 @@ .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .append("isRersonalButton", getIsRersonalButton()) .toString(); } } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/User.java
@@ -96,5 +96,8 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "æå±ç»ç»ç¼ç ") private String companyId; } ruoyi-common/src/main/java/com/ruoyi/common/core/dto/PersonDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.common.core.dto; import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.Person; import lombok.Data; import java.util.List; @Data public class PersonDto { private List<Person> person; private List<Company> company; private Integer roleId; } ruoyi-system/src/main/java/com/ruoyi/system/service/UserService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.core.dto.PersonDto; import java.util.List; @@ -38,5 +39,6 @@ int delUserDepardLimsId(Integer id); int addPersonUser(PersonDto personDto); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java
@@ -1,14 +1,21 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.entity.Custom; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.core.dto.PersonDto; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.mapper.UserMapper; import com.ruoyi.system.service.CustomService; import com.ruoyi.system.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import java.time.LocalDateTime; import java.util.List; @@ -21,6 +28,10 @@ */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private CustomService customService; /** * æ ¹æ®æ¡ä»¶è·åç¨æ·å表 * @param user @@ -60,5 +71,44 @@ public int delUserDepardLimsId(Integer id) { return baseMapper.update(null, Wrappers.<User>lambdaUpdate().eq(User::getId, id).set(User::getDepartLimsId, null).set(User::getUpdateTime, LocalDateTime.now()).set(User::getUpdateBy, SecurityUtils.getUsername())); } @Override @Transactional(rollbackFor = Exception.class) public int addPersonUser(PersonDto personDto) { personDto.getPerson().forEach(person -> { User user = baseMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getAccount, person.getEmployeeID())); String companyName = personDto.getCompany().stream().filter(a -> a.getCompanyId().equals(person.getCompanyId())).findFirst().get().getCompanyName(); Custom custom = customService.getCustomId(companyName); if (BeanUtil.isEmpty(user)) { user = new User(); user.setName(person.getName()); user.setNameEn("not write"); user.setAccount(person.getEmployeeID()); user.setPhone(person.getPhoneNumber()); user.setEmail(person.getCompanyEmail()); user.setIsCustom(person.getCompanyId().equals("SC2463") ? 0 : 1); // user.setPassword(DigestUtils.md5DigestAsHex(headerToken.getPassword(person.getEmployeeID()).getBytes())); user.setPassword(SecurityUtils.encryptPassword("zttZTT123!")); user.setCompany(BeanUtil.isNotEmpty(custom) ? (custom.getId() + "") : companyName); // user.setAddress("æªå¡«å"); // user.setRoleId(personDto.getRoleId() > 10000 ? 0 : personDto.getRoleId()); user.setCompanyId(person.getCompanyId()); baseMapper.insert(user); } else { user.setName(person.getName()); user.setPhone(person.getPhoneNumber()); user.setEmail(person.getCompanyEmail()); user.setIsCustom(0); user.setCompany(BeanUtil.isNotEmpty(custom) ? (custom.getId() + "") : companyName); // user.setCreateUser(null); // user.setCreateTime(null); // user.setUpdateUser(null); // user.setUpdateTime(null); user.setCompanyId(person.getCompanyId()); baseMapper.updateById(user); } }); return 1; } } ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -26,6 +26,7 @@ <result property="updateTime" column="update_time" /> <result property="updateBy" column="update_by" /> <result property="remark" column="remark" /> <result property="isRersonalButton" column="is_rersonal_button"/> </resultMap> <sql id="selectMenuVo"> ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -69,6 +69,9 @@ <if test="userName != null and userName != ''"> AND u.account like concat('%', #{userName}, '%') </if> <if test="nickName != null and nickName != ''"> AND u.name like concat('%', #{nickName}, '%') </if> <if test="status != null and status != ''"> AND u.status = #{status} </if>