From 1e73d7e8eee34ec67e9df6942405e660a851acc4 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Wed, 3 Jun 2026 23:17:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=86=E6=B6=A6=EF=BC=8C=E8=AE=A8?= =?UTF-8?q?=E8=AE=BA=E5=90=8E=EF=BC=8C=E5=8F=91=E7=8E=B0=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasicProfitSharingRecordController.java | 54 +++++++++++++++---- .../BasicProfitSharingRecordServiceImpl.java | 10 ++++ .../resources/mapper/AquPayOrderMapper.xml | 34 +++++++----- .../mapper/BasicProfitSharingRecordMapper.xml | 5 +- .../mapper/BasicProfitSharingUserMapper.xml | 1 - .../com/limap/quartz/task/ProfitTask.java | 23 ++++++-- 6 files changed, 97 insertions(+), 30 deletions(-) diff --git a/fishery-admin/src/main/java/com/limap/controller/manager/BasicProfitSharingRecordController.java b/fishery-admin/src/main/java/com/limap/controller/manager/BasicProfitSharingRecordController.java index a7fb1c1..23a562f 100644 --- a/fishery-admin/src/main/java/com/limap/controller/manager/BasicProfitSharingRecordController.java +++ b/fishery-admin/src/main/java/com/limap/controller/manager/BasicProfitSharingRecordController.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.Map; import javax.servlet.http.HttpServletResponse; +import com.limap.common.core.domain.entity.SysUser; import com.limap.common.core.domain.entity.SysRole; import com.limap.common.utils.StringUtils; import com.limap.core.basic.service.IBasicUserWithdrawService; @@ -40,6 +41,10 @@ import com.limap.core.basic.vo.SharingRecordSearchVo; @RestController @RequestMapping("/basic/sharingRecord") public class BasicProfitSharingRecordController extends BaseController { + private static final String DATA_SCOPE_ALL = "1"; + private static final String DATA_SCOPE_DEPT = "3"; + private static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + @Autowired private IBasicProfitSharingRecordService basicProfitSharingRecordService; @Autowired @@ -53,10 +58,7 @@ public class BasicProfitSharingRecordController extends BaseController { @GetMapping("/list") public TableDataInfo list(BasicProfitSharingRecord basicProfitSharingRecord) { startPage(); - List roles = getLoginUser().getUser().getRoles(); - if(roles.stream().noneMatch(role -> role.getRoleId().compareTo(100L) <0)){ - basicProfitSharingRecord.setUserId(getUserId()); - } + applySharingRecordDataScope(basicProfitSharingRecord); List list = basicProfitSharingRecordService.selectBasicProfitSharingRecordList(basicProfitSharingRecord); return getDataTable(list); } @@ -66,12 +68,7 @@ public class BasicProfitSharingRecordController extends BaseController { @PreAuthorize("@ss.hasPermi('basic:sharingRecord:list')") @GetMapping("/report") public AjaxResult reportData(SharingRecordSearchVo searchVo) { - List roles = getLoginUser().getUser().getRoles(); - if(roles.stream().noneMatch(role -> role.getRoleId().compareTo(100L) >=0)){ - searchVo.setUserId(getUserId()); - }else{ - searchVo.setDeptId(getDeptId()); - } + applySharingRecordDataScope(searchVo); Map resultMap = basicProfitSharingRecordService.getReportData(searchVo); return success(resultMap); } @@ -84,6 +81,7 @@ public class BasicProfitSharingRecordController extends BaseController { @Log(title = "分润记录", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, BasicProfitSharingRecord basicProfitSharingRecord) { + applySharingRecordDataScope(basicProfitSharingRecord); List list = basicProfitSharingRecordService.selectBasicProfitSharingRecordList(basicProfitSharingRecord); ExcelUtil util = new ExcelUtil(BasicProfitSharingRecord.class); util.exportExcel(response, list, "分润记录数据"); @@ -149,4 +147,40 @@ public class BasicProfitSharingRecordController extends BaseController { public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(basicProfitSharingRecordService.removeByIds(Arrays.asList(ids))); } + + private void applySharingRecordDataScope(BasicProfitSharingRecord record) { + SysUser user = getLoginUser().getUser(); + if (user == null || user.isAdmin() || hasDataScope(user.getRoles(), DATA_SCOPE_ALL)) { + return; + } + if (hasDataScope(user.getRoles(), DATA_SCOPE_DEPT_AND_CHILD)) { + record.getParams().put("scopeType", "deptAndChild"); + record.getParams().put("scopeDeptId", getDeptId()); + } else if (hasDataScope(user.getRoles(), DATA_SCOPE_DEPT)) { + record.getParams().put("scopeType", "dept"); + record.getParams().put("scopeDeptId", getDeptId()); + } else { + record.setUserId(getUserId()); + } + } + + private void applySharingRecordDataScope(SharingRecordSearchVo searchVo) { + SysUser user = getLoginUser().getUser(); + if (user == null || user.isAdmin() || hasDataScope(user.getRoles(), DATA_SCOPE_ALL)) { + return; + } + if (hasDataScope(user.getRoles(), DATA_SCOPE_DEPT_AND_CHILD)) { + searchVo.setDeptId(getDeptId()); + searchVo.getParams().put("scopeType", "deptAndChild"); + } else if (hasDataScope(user.getRoles(), DATA_SCOPE_DEPT)) { + searchVo.setDeptId(getDeptId()); + searchVo.getParams().put("scopeType", "dept"); + } else { + searchVo.setUserId(getUserId()); + } + } + + private boolean hasDataScope(List roles, String dataScope) { + return roles != null && roles.stream().anyMatch(role -> dataScope.equals(role.getDataScope())); + } } diff --git a/fishery-core/src/main/java/com/limap/core/basic/service/impl/BasicProfitSharingRecordServiceImpl.java b/fishery-core/src/main/java/com/limap/core/basic/service/impl/BasicProfitSharingRecordServiceImpl.java index 5817374..48ee125 100644 --- a/fishery-core/src/main/java/com/limap/core/basic/service/impl/BasicProfitSharingRecordServiceImpl.java +++ b/fishery-core/src/main/java/com/limap/core/basic/service/impl/BasicProfitSharingRecordServiceImpl.java @@ -91,6 +91,16 @@ public class BasicProfitSharingRecordServiceImpl extends ServiceImpl params = basicProfitSharingRecord.getParams(); + String scopeType = (String) params.get("scopeType"); + Long scopeDeptId = (Long) params.get("scopeDeptId"); + if (StringUtils.isNotNull(scopeDeptId)) { + if ("deptAndChild".equals(scopeType)) { + queryWrapper.inSql(BasicProfitSharingRecord::getDeptId, + "SELECT dept_id FROM sys_dept WHERE dept_id = " + scopeDeptId + " OR find_in_set(" + scopeDeptId + ", ancestors)"); + } else if ("dept".equals(scopeType)) { + queryWrapper.eq(BasicProfitSharingRecord::getDeptId, scopeDeptId); + } + } String beginTime = (String) params.get("beginTime"); String endTime = (String) params.get("endTime"); if (StringUtils.isNotEmpty(beginTime) && StringUtils.isNotEmpty(endTime)) { diff --git a/fishery-core/src/main/resources/mapper/AquPayOrderMapper.xml b/fishery-core/src/main/resources/mapper/AquPayOrderMapper.xml index 361bdda..b802a84 100644 --- a/fishery-core/src/main/resources/mapper/AquPayOrderMapper.xml +++ b/fishery-core/src/main/resources/mapper/AquPayOrderMapper.xml @@ -21,22 +21,28 @@ - + diff --git a/fishery-core/src/main/resources/mapper/BasicProfitSharingRecordMapper.xml b/fishery-core/src/main/resources/mapper/BasicProfitSharingRecordMapper.xml index 7fc7939..bc41a8d 100644 --- a/fishery-core/src/main/resources/mapper/BasicProfitSharingRecordMapper.xml +++ b/fishery-core/src/main/resources/mapper/BasicProfitSharingRecordMapper.xml @@ -27,7 +27,10 @@ AND user_id = #{userId} - + + and dept_id = #{deptId} + + and dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = #{deptId} or find_in_set( #{deptId} , ancestors )) diff --git a/fishery-core/src/main/resources/mapper/BasicProfitSharingUserMapper.xml b/fishery-core/src/main/resources/mapper/BasicProfitSharingUserMapper.xml index 450cbbd..f91cd1e 100644 --- a/fishery-core/src/main/resources/mapper/BasicProfitSharingUserMapper.xml +++ b/fishery-core/src/main/resources/mapper/BasicProfitSharingUserMapper.xml @@ -21,7 +21,6 @@ FROM basic_profit_sharing_user bpsu LEFT JOIN sys_user su ON bpsu.user_id = su.user_id LEFT JOIN basic_user_bind_info bibi ON bpsu.user_id = bibi.user_id - WHERE bibi.device_name IS NOT NULL diff --git a/fishery-quartz/src/main/java/com/limap/quartz/task/ProfitTask.java b/fishery-quartz/src/main/java/com/limap/quartz/task/ProfitTask.java index b9b273c..134cf2c 100644 --- a/fishery-quartz/src/main/java/com/limap/quartz/task/ProfitTask.java +++ b/fishery-quartz/src/main/java/com/limap/quartz/task/ProfitTask.java @@ -304,7 +304,7 @@ public class ProfitTask { Map> result = new HashMap<>(); collect.forEach((k, v) -> { - List distinctList = v.stream().distinct().collect(Collectors.toList()); + List distinctList = distinctByUserId(v); List newList = new ArrayList<>(); for (SharingUserTaskVo e : distinctList) { if (e != null && e.getParentId() != null) { @@ -313,7 +313,7 @@ public class ProfitTask { newList.add(e); } } - result.put(k, newList.stream().distinct().collect(Collectors.toList())); + result.put(k, distinctByUserId(newList)); }); return result; @@ -325,8 +325,8 @@ public class ProfitTask { // 预处理数据,提高查找效率 Map userTaskMap = sharingUserTaskVos.stream() - .filter(f -> f != null && f.getDeptId() != null) - .collect(Collectors.toMap(SharingUserTaskVo::getDeptId, f -> f, (existing, replacement) -> existing)); + .filter(f -> f != null && f.getUserId() != null) + .collect(Collectors.toMap(SharingUserTaskVo::getUserId, f -> f, (existing, replacement) -> existing)); Set visited = new HashSet<>(); // 防止循环引用导致的无限循环 @@ -354,4 +354,19 @@ public class ProfitTask { return resultList; } + + private List distinctByUserId(List list) { + Map map = new LinkedHashMap<>(); + for (SharingUserTaskVo item : list) { + if (item == null) { + continue; + } + Long userId = item.getUserId(); + if (userId == null) { + continue; + } + map.putIfAbsent(userId, item); + } + return new ArrayList<>(map.values()); + } }