Просмотр исходного кода

1、报销信息列表数据权限

dongpo 6 месяцев назад
Родитель
Сommit
b2db068dbf

+ 1 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/ExpenseInfoController.java

@@ -25,6 +25,7 @@ import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.PostApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.dept.dto.PostRespDTO;
+import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;

+ 7 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/controller/admin/expenseinfo/vo/ExpenseInfoPageReqVO.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.expense.controller.admin.expenseinfo.vo;
 
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -45,4 +46,10 @@ public class ExpenseInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "数据权限")
+    private DeptDataPermissionRespDTO deptDataPermission;
+
+    @Schema(description = "用户id")
+    private Long userId;
+
 }

+ 13 - 3
yudao-module-finance/yudao-module-expense-biz/src/main/java/cn/iocoder/yudao/module/expense/service/expenseinfo/ExpenseInfoServiceImpl.java

@@ -20,6 +20,8 @@ import cn.iocoder.yudao.module.expense.dal.dataobject.expenseinfo.ExpenseInfoObj
 import cn.iocoder.yudao.module.expense.dal.mysql.expenseinfo.ExpenseInfoMapper;
 import cn.iocoder.yudao.module.expense.dal.mysql.expenseinfo.ExpenseInfoObjMapper;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
+import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -52,6 +54,9 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private PermissionApi permissionApi;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createInfo(ExpenseInfoSaveReqVO createReqVO) {
@@ -72,7 +77,7 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
         List<ExpenseInfoObjDO> oaExpenseObjs = createReqVO.getExpenseInfoObjs();
         for (ExpenseInfoObjDO oaExpenseObj : oaExpenseObjs) {
             // 设置费用明细的创建人
-            oaExpenseObj.setCreator(String.valueOf(loginEmployee.getId()));
+            // oaExpenseObj.setCreator(String.valueOf(loginEmployee.getId()));
             oaExpenseObj.setMoney(oaExpenseObj.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP));
             oaExpenseObj.setExpenseObjUuid(IdUtil.fastSimpleUUID());
 
@@ -116,7 +121,7 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
         info.setStatus("0");
         info.setUserId(loginUserId);
         info.setCreateEmployeeId(loginEmployee.getId());
-        info.setCreator(String.valueOf(loginEmployee.getId()));
+        // info.setCreator(String.valueOf(loginEmployee.getId()));
         // 插入费用主表数据
         infoMapper.insert(info);
 
@@ -150,7 +155,7 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
         List<ExpenseInfoObjDO> oaExpenseObjs = updateReqVO.getExpenseInfoObjs();
         for (ExpenseInfoObjDO oaExpenseObj : oaExpenseObjs) {
             // 设置费用明细的创建人
-            oaExpenseObj.setCreator(String.valueOf(loginEmployee.getId()));
+            // oaExpenseObj.setCreator(String.valueOf(loginEmployee.getId()));
             oaExpenseObj.setMoney(oaExpenseObj.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP));
             oaExpenseObj.setExpenseObjUuid(IdUtil.fastSimpleUUID());
 
@@ -231,6 +236,11 @@ public class ExpenseInfoServiceImpl implements ExpenseInfoService {
 
     @Override
     public PageResult<ExpenseInfoRespVO> getInfoPage(ExpenseInfoPageReqVO pageReqVO) {
+        // 数据权限
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(loginUserId);
+        pageReqVO.setDeptDataPermission(deptDataPermission);
+        pageReqVO.setUserId(loginUserId);
 
         pageReqVO.setPageNo((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize());
 

+ 31 - 0
yudao-module-finance/yudao-module-expense-biz/src/main/resources/mapper/expenseinfo/ExpenseInfoMapper.xml

@@ -9,6 +9,35 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <sql id="deptDataPermission">
+        <choose>
+            <when test="page.deptDataPermission.all">
+                <!-- 全部数据权限 -->
+            </when>
+            <when test="page.deptDataPermission.deptIds != null and page.deptDataPermission.deptIds.size() > 0 and page.deptDataPermission.self">
+                AND (
+                fei.dept_id IN
+                <foreach collection="page.deptDataPermission.deptIds" item="deptId" open="(" separator="," close=")">
+                    #{deptId}
+                </foreach>
+                OR fei.creator = #{page.userId}
+                )
+            </when>
+            <when test="page.deptDataPermission.deptIds != null and page.deptDataPermission.deptIds.size() > 0">
+                AND fei.dept_id IN
+                <foreach collection="page.deptDataPermission.deptIds" item="deptId" open="(" separator="," close=")">
+                    #{deptId}
+                </foreach>
+            </when>
+            <when test="page.deptDataPermission.self">
+                AND fei.creator = #{page.userId}
+            </when>
+            <otherwise>
+                AND 1 = 2
+            </otherwise>
+        </choose>
+    </sql>
+
     <select id="selectPageCount" resultType="java.lang.Long">
         SELECT COUNT(fei.id)
         FROM
@@ -43,6 +72,7 @@
         <if test="page.createTime != null and page.createTime.length > 0">
             AND fei.create_time BETWEEN #{page.createTime[0]} AND #{page.createTime[1]}
         </if>
+        <include refid="deptDataPermission" />
     </select>
 
     <select id="selectPageList"
@@ -99,6 +129,7 @@
         <if test="page.createTime != null and page.createTime.length > 0">
             AND fei.create_time BETWEEN #{page.createTime[0]} AND #{page.createTime[1]}
         </if>
+        <include refid="deptDataPermission" />
         ORDER BY fei.create_time DESC
         <if test="page.pageSize != -1">
             LIMIT #{page.pageNo}, #{page.pageSize}