提交 7d02f8b2 authored 作者: 000516's avatar 000516

销售人员店内执行数据查询,看板查询;多controller下使用注解形式达成通用条件判断

package com.sfa.operation.aspect;
import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.annotation.SalesPermissionCheck;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.config.ConstantValue;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.system.api.domain.SysRole;
import com.sfa.system.api.model.LoginUser;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* @author : liqiulin
* @date : 2025-12-10 11
* @describe :
*/
@Aspect
@Component
public class SalesPermissionAspect {
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
@Autowired
private ConstantValue constantValue;
@Around("@annotation(salesPermissionCheck)")
public Object checkPermission(ProceedingJoinPoint joinPoint, SalesPermissionCheck salesPermissionCheck) throws Throwable {
// 获取请求参数
Object[] args = joinPoint.getArgs();
SalesApRequest salesApRequest = null;
for (Object arg : args) {
if (arg instanceof SalesApRequest) {
salesApRequest = (SalesApRequest) arg;
break;
}
}
if (salesApRequest != null) {
if (salesPermissionCheck.value() == SalesPermissionCheck.CheckType.USER) {
checkPermission(salesApRequest);
}
if (salesPermissionCheck.value() == SalesPermissionCheck.CheckType.DEPT) {
checkPermissionDept(salesApRequest);
}
}
return joinPoint.proceed();
}
/**
* 判断登录人权限
* 判断是否存在人客关系,存在:根据负责经销商查询数据;不存在:判断是否是销售部人员。是:根据部门查询;不是:返回全部数据
*/
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员:1、销售查看人客关系;2、大区TM查看当前部门下所有数据
// 判断是否是大区TM
String empNo = loginUser.getUsername();
Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey())).findFirst();
if (first.isPresent()) {
ArrayList<String> deptNames = new ArrayList<>();
deptNames.add(loginUser.getSysUser().getDept().getDeptNameSale());
if ("000889".equals(empNo)){
deptNames.add("北京特区");
}
return;
}
// 不是大区TM,判断是否是销售人员(人客关系)
List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
if (dealerCodes.isEmpty()) {
throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
}
// salesApRequest.setNickName(loginUser.getNickName());
salesApRequest.setDealerCodes(dealerCodes);
}
private void checkPermissionDept(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员按部门查询
String empNo = loginUser.getUsername();
String deptName = loginUser.getSysUser().getDept().getDeptNameSale();
salesApRequest.setDeptNames("000889".equals(empNo) ? Arrays.asList(deptName, "北京特区") : Arrays.asList(deptName));
}
}
......@@ -33,7 +33,6 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_display/core/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDetail(@PathVariable("id") Long sadId, @RequestBody SalesApRequest request){
// checkPermission();
request.setSadId(sadId);
apDisplayCoreService.updateDetail(request);
}
......@@ -44,7 +43,6 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_display/core_pro/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putProDisplayDetail(@PathVariable("id") Long sapdId, @RequestBody SalesApRequest request){
// checkPermission();
request.setSapdId(sapdId);
apDisplayCoreService.putProDisplayDetail(request);
}
......@@ -55,7 +53,6 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_display/core_snack/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putSnackDisplayDetail(@PathVariable("id") Long sasdId, @RequestBody SalesApRequest request){
// checkPermission();
request.setSasdId(sasdId);
apDisplayCoreService.putSnackDisplayDetail(request);
}
......@@ -66,7 +63,6 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_display/core_s/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDisplaySDetail(@PathVariable("id") Long sadsId, @RequestBody SalesApRequest request){
// checkPermission();
request.setSadsId(sadsId);
apDisplayCoreService.putDisplaySDetail(request);
}
......@@ -77,7 +73,6 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_display/core_j/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDisplayJDetail(@PathVariable("id") Long sadjId, @RequestBody SalesApRequest request){
// checkPermission();
request.setSadjId(sadjId);
apDisplayCoreService.putDisplayJDetail(request);
}
......@@ -89,30 +84,8 @@ public class ApDisplayCoreController {
@PutMapping("/sales/ap_promotion/core/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putPromotionDetail(@PathVariable("id") Long sapId, @RequestBody SalesApRequest request) {
// checkPermission();
request.setSapId(sapId);
apDisplayCoreService.putPromotionDetail(request);
}
// @Autowired
// private IQinceMarketEmployeeService qinceMarketEmployeeService;
// private void checkPermission(){
// // 是区域销售部的人员,查看人客关系
// LoginUser loginUser = SecurityUtils.getLoginUser();
// // 只有销售(促销AP管理:cxapgl)、大区TM(大区TM促销AP管理:dqtmcxapgl)两种角色才可以修改
// List<SysRole> roles = loginUser.getSysUser().getRoles();
// Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey()) || RoleConstants.OPERATION_AP_MANAGER.equals(role.getRoleKey())).findFirst();
// if (!first.isPresent()) {
// throw new CheckedException(ECode.ZZ_PRODUCT_QUALITY_AP_ERROR);
// }
//
//// String empNo = loginUser.getUsername();
//// List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
//// if (dealerCodes.isEmpty()){
//// throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
//// }
// }
}
package com.sfa.operation.controller.sales.query;
import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.annotation.Logical;
import com.sfa.common.security.annotation.RequiresRoles;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.config.ConstantValue;
import com.sfa.common.security.annotation.SalesPermissionCheck;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApDisplayQueryService;
import com.sfa.system.api.domain.SysRole;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* @author : liqiulin
* @date : 2025-12-01 15
......@@ -31,17 +21,12 @@ import java.util.Optional;
public class APReportQueryController {
@Autowired
private IApDisplayQueryService apDisplayQueryService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
@Autowired
private ConstantValue constantValue;
/**
* 店内执行-城市经理
*/
@GetMapping("/store_cm")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public Object queryStoreAPReport(SalesApRequest request) {
checkPermission(request);
return apDisplayQueryService.queryStoreAPReport(request);
}
......@@ -50,52 +35,9 @@ public class APReportQueryController {
*/
@GetMapping("/dept_cm")
@RequiresRoles(value = {RoleConstants.OPERATION_CENTER_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.DEPT)
public Object queryDeptAPReport(SalesApRequest request) {
checkPermissionDept(request);
return apDisplayQueryService.queryDeptAPReport(request);
}
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员:1、销售查看人客关系;2、大区TM查看当前部门下所有数据
// 判断是否是大区TM
String empNo = loginUser.getUsername();
Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey())).findFirst();
if (first.isPresent()) {
String deptName = loginUser.getSysUser().getDept().getDeptName();
salesApRequest.setDeptNames("000889".equals(empNo) ? Arrays.asList(deptName,"北京特区") : Arrays.asList(deptName));
return;
}
// 不是大区TM,判断是否是销售人员(人客关系)
List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
if (dealerCodes.isEmpty()) {
throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
}
// salesApRequest.setNickName(loginUser.getNickName());
salesApRequest.setDealerCodes(dealerCodes);
}
private void checkPermissionDept(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员按部门查询
String empNo = loginUser.getUsername();
String deptName = loginUser.getSysUser().getDept().getDeptName();
salesApRequest.setDeptNames("000889".equals(empNo) ? Arrays.asList(deptName, "北京特区") : Arrays.asList(deptName));
}
}
package com.sfa.operation.controller.sales.query;
import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.security.annotation.RequiresPermissions;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.config.ConstantValue;
import com.sfa.common.security.annotation.SalesPermissionCheck;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApDisplayQueryService;
import com.sfa.system.api.domain.SysRole;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* @author : liqiulin
* @date : 2025-09-08 13
......@@ -36,17 +22,13 @@ import java.util.Optional;
public class ApDisplayQueryController {
@Autowired
private IApDisplayQueryService apDisplayQueryService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
@Autowired
private ConstantValue constantValue;
/**
* 常规陈列
*/
@GetMapping("/sales/ap_display/query/page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo page(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.page(salesApRequest);
}
......@@ -54,8 +36,8 @@ public class ApDisplayQueryController {
* 档期陈列
*/
@GetMapping("/sales/ap_display/query/pro_page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo proPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.proPage(salesApRequest);
}
......@@ -63,8 +45,8 @@ public class ApDisplayQueryController {
* 零食陈列
*/
@GetMapping("/sales/ap_display/query/snack_page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo snackPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.snackPage(salesApRequest);
}
......@@ -72,8 +54,8 @@ public class ApDisplayQueryController {
* 三米两秒
*/
@GetMapping("/sales/ap_display/query/sl_page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo slPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.slPage(salesApRequest);
}
......@@ -81,8 +63,8 @@ public class ApDisplayQueryController {
* 六小金刚
*/
@GetMapping("/sales/ap_display/query/jg_page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo jgPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.jgPage(salesApRequest);
}
......@@ -90,43 +72,8 @@ public class ApDisplayQueryController {
* 档期计划
*/
@GetMapping("/sales/ap_promotion/query/page")
@SalesPermissionCheck(value = SalesPermissionCheck.CheckType.USER)
public PageInfo promotionPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
return apDisplayQueryService.promotionPage(salesApRequest);
}
/**
* 判断登录人权限
* 判断是否存在人客关系,存在:根据负责经销商查询数据;不存在:判断是否是销售部人员。是:根据部门查询;不是:返回全部数据
*/
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员:1、销售查看人客关系;2、大区TM查看当前部门下所有数据
// 判断是否是大区TM
String empNo = loginUser.getUsername();
Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey())).findFirst();
if (first.isPresent()) {
ArrayList<String> deptNames = new ArrayList<>();
deptNames.add(loginUser.getSysUser().getDept().getDeptName());
if ("000889".equals(empNo)){
deptNames.add("北京特区");
}
return;
}
// 不是大区TM,判断是否是销售人员(人客关系)
List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
if (dealerCodes.isEmpty()) {
throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
}
// salesApRequest.setNickName(loginUser.getNickName());
salesApRequest.setDealerCodes(dealerCodes);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论