Procházet zdrojové kódy

提交登录新增财务配置

chenxiaofei před 2 měsíci
rodič
revize
d1cc67a926

+ 30 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java

@@ -119,4 +119,34 @@ public class TradeOrderListSelectDTO {
     private Long transportEntId;
     @Schema(description = "贸易合同")
     private Long contractId;
+
+    /**
+     * 是否启用数据权限过滤
+     */
+    private Boolean dataPermissionFilter;
+
+    /**
+     * 数据权限是否全部企业可见
+     */
+    private Boolean dataPermissionAllVisible;
+
+    /**
+     * 是否启用个人数据权限
+     */
+    private Boolean dataPermissionPersonal;
+
+    /**
+     * 数据权限用户ID
+     */
+    private Long dataPermissionUserId;
+
+    /**
+     * 数据权限可见企业ID集合
+     */
+    private List<Long> dataPermissionEntIds;
+
+    /**
+     * 数据权限是否强制返回空结果
+     */
+    private Boolean dataPermissionForceEmpty;
 }

+ 63 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -75,7 +75,9 @@ import com.sckw.stream.model.SckwMessage;
 import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
+import com.sckw.system.api.feign.DataPermissionFeignService;
 import com.sckw.system.api.model.dto.req.ActualDisPatchDto;
+import com.sckw.system.api.model.dto.req.DataPermissionFilterReqDto;
 import com.sckw.system.api.model.dto.res.*;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.param.AddLogisticOrderParam;
@@ -83,6 +85,7 @@ import com.sckw.transport.api.model.param.LogisticInfo;
 import com.sckw.transport.api.model.param.OrderFinishParam;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.vo.LogisticContractVo;
+import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -151,6 +154,8 @@ public class KwoTradeOrderService {
     private final KwoTradeOrderAmountService tradeOrderAmountService;
     private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
     private final KwoTradeOrderUnitRepository kwoTradeOrderUnitRepository;
+    @Resource
+    private DataPermissionFeignService dataPermissionFeignService;
     @Value("${url.order.list.valet.pc}")
     private String pcValetListUrl;
 
@@ -1591,12 +1596,68 @@ public class KwoTradeOrderService {
      */
     public PageResult tradeOrderSelect(TradeOrderListSelectParam params) {
         TradeOrderListSelectDTO dto = buildSelectParam(params);
+        //数据权限过滤
+        applyTradeOrderDataPermission(dto);
         PageHelper.startPage(params.getPage(), params.getPageSize());
         List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList(), null);
         return buildResult(list, params.getPageSize());
 
     }
 
+    /**
+     * 应用贸易订单数据权限过滤
+     * 根据当前用户的数据权限配置,设置DTO中的权限过滤参数
+     *
+     * @param dto 贸易订单列表查询DTO
+     */
+    private void applyTradeOrderDataPermission(TradeOrderListSelectDTO dto) {
+        DataPermissionDTO perm = fetchDataPermissionForCurrentUser();
+        // 如果获取权限失败或不需要过滤,则直接返回
+        if (perm == null || !perm.needFilter()) {
+            return;
+        }
+        // 设置基础权限过滤标识
+        dto.setDataPermissionFilter(Boolean.TRUE);
+        dto.setDataPermissionAllVisible(perm.isAllVisible());
+        dto.setDataPermissionPersonal(perm.isPersonalDataEnabled());
+        dto.setDataPermissionUserId(perm.getUserId());
+        // 设置可见企业ID列表,若为空则设为空列表
+        dto.setDataPermissionEntIds(CollectionUtils.isEmpty(perm.getVisibleEntIds()) ? Collections.emptyList() : new ArrayList<>(perm.getVisibleEntIds()));
+
+        // 如果不是全部可见且没有指定可见企业ID,则强制结果为空
+        if (!perm.isAllVisible() && CollectionUtils.isEmpty(perm.getVisibleEntIds())) {
+            dto.setDataPermissionFilter(Boolean.FALSE);
+            dto.setDataPermissionForceEmpty(Boolean.TRUE);
+            return;
+        }
+        // 如果开启了个人数据权限但未获取到用户ID,则强制结果为空
+        if (perm.isPersonalDataEnabled() && perm.getUserId() == null) {
+            dto.setDataPermissionFilter(Boolean.FALSE);
+            dto.setDataPermissionForceEmpty(Boolean.TRUE);
+        }
+    }
+
+    /**
+     * 获取当前用户的数据权限信息
+     * 通过Feign调用远程服务获取数据权限过滤条件
+     *
+     * @return 数据权限DTO,获取失败时返回null
+     */
+    private DataPermissionDTO fetchDataPermissionForCurrentUser() {
+        try {
+            DataPermissionFilterReqDto reqDto = new DataPermissionFilterReqDto();
+            // 设置当前登录用户的ID、角色ID和管理员标识
+            reqDto.setUserId(LoginUserHolder.getUserId());
+            reqDto.setRoleId(LoginUserHolder.getCurrentRoleId());
+            reqDto.setManager(LoginUserHolder.isManager());
+            return dataPermissionFeignService.getDataPermissionFilter(reqDto);
+        } catch (Exception e) {
+            // 记录警告日志,权限获取失败时跳过过滤,避免影响主业务流程
+            log.warn("获取贸易订单数据权限失败,跳过本接口数据权限过滤: {}", e.getMessage());
+            return null;
+        }
+    }
+
     /**
      * @param list
      * @param pageSize
@@ -1762,6 +1823,8 @@ public class KwoTradeOrderService {
         TableStatisticRes res = new TableStatisticRes();
         TradeOrderListSelectDTO dto = buildSelectParam(params);
         dto.setStatus(null);
+        //数据权限过滤
+        applyTradeOrderDataPermission(dto);
         List<TableTop> tableTops = kwoTradeOrderMapper.tradeOrderStatistic(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
         Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         if (CollUtil.isNotEmpty(tableTops)) {

+ 41 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -128,6 +128,26 @@
             <if test="query.contractId != null">
                 and f.contract_id = #{query.contractId}
             </if>
+            <if test="query.dataPermissionForceEmpty != null and query.dataPermissionForceEmpty">
+                and 1 = 0
+            </if>
+            <if test="query.dataPermissionFilter != null and query.dataPermissionFilter">
+                and exists (
+                    select 1
+                    from kwc_contract_trade ct
+                    where ct.id = f.contract_id
+                      and ct.del_flag = 0
+                    <if test="query.dataPermissionAllVisible != null and !query.dataPermissionAllVisible">
+                        and ct.ent_id in
+                        <foreach collection="query.dataPermissionEntIds" item="entId" open="(" close=")" separator=",">
+                            #{entId}
+                        </foreach>
+                    </if>
+                    <if test="query.dataPermissionPersonal != null and query.dataPermissionPersonal">
+                        and ct.salesman_id = #{query.dataPermissionUserId}
+                    </if>
+                )
+            </if>
             <if test="query.saleEntId != null">
                 and e.ent_id = #{query.saleEntId}
             </if>
@@ -461,6 +481,7 @@
                  LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
                  LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
                  LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
             <choose>
@@ -501,6 +522,26 @@
             <if test="query.saleEntId != null">
                 and e.ent_id = #{query.saleEntId}
             </if>
+            <if test="query.dataPermissionForceEmpty != null and query.dataPermissionForceEmpty">
+                and 1 = 0
+            </if>
+            <if test="query.dataPermissionFilter != null and query.dataPermissionFilter">
+                and exists (
+                    select 1
+                    from kwc_contract_trade ct
+                    where ct.id = f.contract_id
+                      and ct.del_flag = 0
+                    <if test="query.dataPermissionAllVisible != null and !query.dataPermissionAllVisible">
+                        and ct.ent_id in
+                        <foreach collection="query.dataPermissionEntIds" item="entId" open="(" close=")" separator=",">
+                            #{entId}
+                        </foreach>
+                    </if>
+                    <if test="query.dataPermissionPersonal != null and query.dataPermissionPersonal">
+                        and ct.salesman_id = #{query.dataPermissionUserId}
+                    </if>
+                )
+            </if>
             <if test="query.status != null">
                 and a.status = #{query.status}
             </if>