diff --git a/.gitignore b/.gitignore index 71a7a3f..f21a676 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ HELP.md target/ -.idea +/.idea /test /src/rebel.xml diff --git a/src/com/engine/aisin/entity/AccessCustomPo.java b/src/com/engine/aisin/entity/AccessCustomPo.java new file mode 100644 index 0000000..6a0be2d --- /dev/null +++ b/src/com/engine/aisin/entity/AccessCustomPo.java @@ -0,0 +1,34 @@ +package com.engine.aisin.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Author liang.cheng + * @Date 2024/11/18 10:26 AM + * @Description: TODO + * @Version 1.0 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccessCustomPo { + + private String subCompanyId; + + private List checks; + + private List subCompanyIds; + + private List departmentIds; + + private List userIds; + + private List roleIds; +} diff --git a/src/com/engine/aisin/service/AccessCustomService.java b/src/com/engine/aisin/service/AccessCustomService.java index 77b6bb3..58e638e 100644 --- a/src/com/engine/aisin/service/AccessCustomService.java +++ b/src/com/engine/aisin/service/AccessCustomService.java @@ -1,5 +1,6 @@ package com.engine.aisin.service; + /** * @Author liang.cheng * @Date 2024/11/15 3:16 PM @@ -7,4 +8,12 @@ package com.engine.aisin.service; * @Version 1.0 */ public interface AccessCustomService { + + /** + * @Description: 通讯录列定制显示权限 + * @Author: liang.cheng + * @Date: 2024/11/15 3:35 PM + * @return: java.util.Map + */ + boolean customAccess(String userId); } diff --git a/src/com/engine/aisin/service/impl/AccessCustomServiceImpl.java b/src/com/engine/aisin/service/impl/AccessCustomServiceImpl.java index 34727f6..4f09d9f 100644 --- a/src/com/engine/aisin/service/impl/AccessCustomServiceImpl.java +++ b/src/com/engine/aisin/service/impl/AccessCustomServiceImpl.java @@ -1,7 +1,18 @@ package com.engine.aisin.service.impl; +import com.engine.aisin.entity.AccessCustomPo; import com.engine.aisin.service.AccessCustomService; +import com.engine.common.service.HrmCommonService; +import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.core.impl.Service; +import com.weaver.general.Util; +import lombok.SneakyThrows; +import weaver.conn.RecordSet; +import weaver.hrm.resource.ResourceComInfo; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** @@ -11,4 +22,86 @@ import com.engine.core.impl.Service; * @Version 1.0 */ public class AccessCustomServiceImpl extends Service implements AccessCustomService { + + @SneakyThrows + @Override + public boolean customAccess(String userId) { + boolean result; + + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); + + //1.根据userId获取人员相关信息 + String subCompanyId = rc.getSubCompanyID(userId); + + //2.判断该人员是否在需要控制权限的分部 + List accessSub = new ArrayList<>(); + rs.executeQuery("select xykzdfb,qxxz,fb,bm,ry,js from uf_txlxsldzqxkzgt where xykzdfb = ?",subCompanyId); + while (rs.next()) { + accessSub.add(AccessCustomPo.builder() + .checks(Arrays.asList(Util.null2String(rs.getString("qxxz")).split(","))) + .subCompanyIds(Arrays.asList(Util.null2String(rs.getString("fb")).split(","))) + .departmentIds(Arrays.asList(Util.null2String(rs.getString("bm")).split(","))) + .userIds(Arrays.asList(Util.null2String(rs.getString("ry")).split(","))) + .roleIds(Arrays.asList(Util.null2String(rs.getString("js")).split(","))) + .build()); + } + + if (accessSub.size() == 0) { + return true; + } + + //3.若存在,判断是否在可查看权限范围 + result = false; + String departmentId = rc.getDepartmentID(userId); + String roleIds = hrmCommonService.getRoleIds(Integer.parseInt(userId)); + + for (AccessCustomPo item : accessSub) { + List checks = item.getChecks(); + for (String e : checks) { + switch (e) { + case "0": + List subCompanyIds = item.getSubCompanyIds(); + boolean sub = subCompanyIds.stream() + .anyMatch(element -> element.equals(subCompanyId)); + if (sub) { + return true; + } + break; + case "1": + List departmentIds = item.getDepartmentIds(); + boolean dept = departmentIds.stream() + .anyMatch(element -> element.equals(departmentId)); + if (dept) { + return true; + } + break; + case "2": + List userIds = item.getUserIds(); + boolean user = userIds.stream() + .anyMatch(element -> element.equals(departmentId)); + if (user) { + return true; + } + break; + case "3": + List roleIdsT = item.getRoleIds(); + boolean role = roleIdsT.stream() + .anyMatch(roleIds::contains); + if (role) { + return true; + } + break; + default: + break; + } + } + } + + return result; + } + + + } diff --git a/src/com/engine/aisin/web/AccessCustomAction.java b/src/com/engine/aisin/web/AccessCustomAction.java index fcb1a2a..7500a4b 100644 --- a/src/com/engine/aisin/web/AccessCustomAction.java +++ b/src/com/engine/aisin/web/AccessCustomAction.java @@ -1,5 +1,25 @@ package com.engine.aisin.web; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.engine.aisin.service.AccessCustomService; +import com.engine.aisin.service.impl.AccessCustomServiceImpl; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + /** * @Author liang.cheng * @Date 2024/11/15 3:05 PM @@ -7,4 +27,25 @@ package com.engine.aisin.web; * @Version 1.0 */ public class AccessCustomAction { + + private AccessCustomService getService(User user) { + return ServiceUtil.getService(AccessCustomServiceImpl.class, user); + } + + + @GET + @Path("/custom/access") + @Produces(MediaType.TEXT_PLAIN) + public String customAccess(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("userId")String userId){ + Map data = new HashMap<>(8); + try { + User user = HrmUserVarify.getUser(request, response); + data.put("datas",getService(user).customAccess(userId)); + data.put("api_status", true); + } catch (Exception e) { + data.put("api_status", false); + data.put("msg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect); + } }