提交 a9d230af authored 作者: 000516's avatar 000516

AP查询、填报权限规则整理

package com.sfa.operation.controller.sales.core;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApDisplayCoreService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-09-16 15
......@@ -15,11 +22,14 @@ import org.springframework.web.bind.annotation.*;
public class ApDisplayCoreController {
@Autowired
private IApDisplayCoreService apDisplayCoreService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
/**
* 常规陈列 根据id更新
*/
@PutMapping("/core/{id}")
public void putDetail(@PathVariable("id") Long sadId, @RequestBody SalesApRequest request){
checkPermission();
request.setSadId(sadId);
apDisplayCoreService.updateDetail(request);
}
......@@ -29,6 +39,7 @@ public class ApDisplayCoreController {
*/
@PutMapping("/core_pro/{id}")
public void putProDisplayDetail(@PathVariable("id") Long sapdId, @RequestBody SalesApRequest request){
checkPermission();
request.setSapdId(sapdId);
apDisplayCoreService.putProDisplayDetail(request);
}
......@@ -38,8 +49,19 @@ public class ApDisplayCoreController {
*/
@PutMapping("/core_snack/{id}")
public void putSnackDisplayDetail(@PathVariable("id") Long sasdId, @RequestBody SalesApRequest request){
checkPermission();
request.setSasdId(sasdId);
apDisplayCoreService.putSnackDisplayDetail(request);
}
private void checkPermission(){
// 是区域销售部的人员,查看人客关系
LoginUser loginUser = SecurityUtils.getLoginUser();
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.core;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApPromotionCoreService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-09-17 15
......@@ -15,9 +22,22 @@ import org.springframework.web.bind.annotation.*;
public class ApPromotionCoreController {
@Autowired
private IApPromotionCoreService apPromotionCoreService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
@PutMapping("/{id}")
public void putDetail(@PathVariable("id") Long sapId, @RequestBody SalesApRequest request) {
checkPermission();
request.setSapId(sapId);
apPromotionCoreService.updateDetail(request);
}
private void checkPermission(){
// 是区域销售部的人员,查看人客关系
LoginUser loginUser = SecurityUtils.getLoginUser();
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.context.UserRoles;
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.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApDisplayQueryService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Set;
import java.util.List;
/**
* @author : liqiulin
......@@ -28,11 +28,12 @@ import java.util.Set;
public class ApDisplayQueryController {
@Autowired
private IApDisplayQueryService apDisplayQueryService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
/**
* 常规陈列
*/
// @RequiresPermissions("promotion:display_schedule:list")
@GetMapping("/page")
public PageInfo page(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
......@@ -42,7 +43,6 @@ public class ApDisplayQueryController {
/**
* 档期陈列
*/
// @RequiresPermissions("promotion:display_schedule:list")
@GetMapping("/pro_page")
public PageInfo proPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
......@@ -52,7 +52,6 @@ public class ApDisplayQueryController {
/**
* 零食陈列
*/
// @RequiresPermissions("promotion:display_schedule:list")
@GetMapping("/snack_page")
public PageInfo snackPage(SalesApRequest salesApRequest){
checkPermission(salesApRequest);
......@@ -61,18 +60,27 @@ public class ApDisplayQueryController {
/**
* 判断登录人权限
* 判断是否存在人客关系,存在:根据负责经销商查询数据;不存在:判断是否是销售部人员。是:根据部门查询;不是:返回全部数据
*/
private void checkPermission(SalesApRequest salesApRequest){
// 判断登录人权限
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Set<String> roles = loginUser.getRoles();
// 促销AP管理角色,可查看所有数据
if (!roles.contains(UserRoles.PROMOTION_AP_MANAGER) && !SecurityUtils.isAdmin(loginUser.getUserid())) {
// 查询当前人员部门、姓名
String ancestors = loginUser.getSysUser().getDept().getAncestors();
// todo 不是区域销售部的人员,可以查看所有
if (!ancestors.contains("2732")) {
return;
}
// 是区域销售部的人员,查看人客关系
String empNo = loginUser.getUsername();
List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
// 没有人客关系,根据部门查询
if (dealerCodes.isEmpty()) {
String deptName = loginUser.getSysUser().getDept().getDeptName();
String nickname = loginUser.getNickName();
salesApRequest.setDeptName(deptName)
.setNickName(nickname);
salesApRequest.setDeptName(deptName);
return;
}
// 有人客关系,根据负责经销商查询
salesApRequest.setDealerCodes(dealerCodes);
}
}
......@@ -5,6 +5,7 @@ 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.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import com.sfa.operation.service.sales.IApPromotionQueryService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
/**
......@@ -24,22 +26,39 @@ import java.util.Set;
public class ApPromotionQueryController {
@Autowired
private IApPromotionQueryService apPromotionQueryService;
@Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService;
@RequiresPermissions("promotion:display_schedule:list")
@GetMapping("/page")
public PageInfo page(SalesApRequest salesApRequest){
// 判断登录人权限
checkPermission(salesApRequest);
return apPromotionQueryService.page(salesApRequest);
}
/**
* 判断登录人权限
* 判断是否存在人客关系,存在:根据负责经销商查询数据;不存在:判断是否是销售部人员。是:根据部门查询;不是:返回全部数据
*/
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Set<String> roles = loginUser.getRoles();
// 促销AP管理角色,可查看所有数据
if (!roles.contains(UserRoles.PROMOTION_AP_MANAGER) && !SecurityUtils.isAdmin(loginUser.getUserid())) {
// 查询当前人员部门、姓名
String ancestors = loginUser.getSysUser().getDept().getAncestors();
// todo 不是区域销售部的人员,可以查看所有
if (!ancestors.contains("2732")) {
return;
}
// 是区域销售部的人员,查看人客关系
String empNo = loginUser.getNickName();
List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
// 没有人客关系,根据部门查询
if (dealerCodes.isEmpty()) {
String deptName = loginUser.getSysUser().getDept().getDeptName();
String nickname = loginUser.getNickName();
salesApRequest.setDeptName(deptName)
.setNickName(nickname);
salesApRequest.setDeptName(deptName);
return;
}
return apPromotionQueryService.page(salesApRequest);
// 有人客关系,根据负责经销商查询
salesApRequest.setDealerCodes(dealerCodes);
}
}
package com.sfa.operation.domain.feishu.dao;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-10-22 16
* @describe :
*/
public interface IQinceMarketEmployeeDao {
/**
* 人客关系,工号查询经销商编码
* @param empNo 飞书员工编号
* @return 关联的经销商编码列表
*/
List<String> dealerCodesByEmpNo(String empNo);
}
package com.sfa.operation.domain.feishu.dao.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.sfa.operation.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.operation.domain.feishu.mapper.QinceMarketEmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-10-22 16
* @describe :
*/
@DS("promotion")
@Service
public class QinceMarketEmployeeDaoImpl implements IQinceMarketEmployeeDao {
@Autowired
private QinceMarketEmployeeMapper qinceMarketEmployeeMapper;
@Override
public List<String> dealerCodesByEmpNo(String empNo) {
return qinceMarketEmployeeMapper.dealerCodesByEmpNo(empNo);
}
}
package com.sfa.operation.domain.feishu.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 勤策-经销商人客关系表,来源:https://wangxiaolu.feishu.cn/sheets/QIYlsvCL9hwmBJtJ7v5ctYVsnDF?sheet=3eadb4
* @TableName qince_market_employee
*/
@TableName(value ="qince_market_employee")
@Data
public class QinceMarketEmployee implements Serializable {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
private Integer id;
/**
* 经销商代码
*/
private String dealerCode;
/**
* 经销商名称
*/
private String dealerName;
/**
* 大区部门编码
*/
private String dqDeptCode;
/**
* 战区部门编码
*/
private String zqDeptCode;
/**
* 大区总工号
*/
private String dqEmpNo;
/**
* 战区经理工号
*/
private String zqEmpNo;
/**
* 城市经理工号
*/
private String csEmpNo;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date modifyTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.operation.domain.feishu.mapper;
import com.sfa.operation.domain.feishu.entity.QinceMarketEmployee;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author a02200059
* @description 针对表【qince_market_employee(勤策-经销商人客关系表,来源:https://wangxiaolu.feishu.cn/sheets/QIYlsvCL9hwmBJtJ7v5ctYVsnDF?sheet=3eadb4)】的数据库操作Mapper
* @createDate 2025-10-22 16:34:40
* @Entity com.sfa.operation.domain.feishu.entity.QinceMarketEmployee
*/
@Repository
public interface QinceMarketEmployeeMapper extends BaseMapper<QinceMarketEmployee> {
List<String> dealerCodesByEmpNo(String empNo);
}
......@@ -8,12 +8,14 @@ import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.core.web.page.TableSupport;
import com.sfa.operation.domain.sales.dao.ISalesApDisplayDao;
import com.sfa.operation.domain.sales.entity.SalesApDisplay;
import com.sfa.operation.domain.sales.entity.SalesApPromotion;
import com.sfa.operation.domain.sales.mapper.SalesApDisplayMapper;
import com.sfa.operation.domain.sales.wq.SalesApWq;
import com.sfa.operation.pojo.sales.response.SalesApDisplayDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
......@@ -48,6 +50,9 @@ public class SalesApDisplayDaoImpl implements ISalesApDisplayDao {
if (StringUtils.isNotBlank(salesApWq.getDealerCode())) {
qw.eq(SalesApDisplay::getDealerCode, salesApWq.getDealerCode());
}
if (!CollectionUtils.isEmpty(salesApWq.getDealerCodes())) {
qw.in(SalesApDisplay::getDealerCode, salesApWq.getDealerCodes());
}
if (StringUtils.isNotBlank(salesApWq.getCityManager())) {
qw.eq(SalesApDisplay::getCityManager, salesApWq.getCityManager());
}
......
......@@ -7,6 +7,7 @@ import com.sfa.common.core.utils.StringUtils;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.core.web.page.TableSupport;
import com.sfa.operation.domain.sales.dao.ISalesApPromotionDisplayDao;
import com.sfa.operation.domain.sales.entity.SalesApDisplay;
import com.sfa.operation.domain.sales.entity.SalesApPromotionDisplay;
import com.sfa.operation.domain.sales.mapper.SalesApPromotionDisplayMapper;
import com.sfa.operation.domain.sales.wq.SalesApWq;
......@@ -14,6 +15,7 @@ import com.sfa.operation.pojo.sales.response.SalesApPromotionDisplayDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
......@@ -46,6 +48,9 @@ public class SalesApPromotionDisplayDaoImpl implements ISalesApPromotionDisplayD
if (Objects.nonNull(salesApWq.getSalesMonth())){
qw.eq(SalesApPromotionDisplay::getSalesMonth, salesApWq.getSalesMonth());
}
if (!CollectionUtils.isEmpty(salesApWq.getDealerCodes())) {
qw.in(SalesApPromotionDisplay::getDealerCode, salesApWq.getDealerCodes());
}
if (StringUtils.isNotBlank(salesApWq.getDeptName())){
qw.and(
wrapper -> wrapper.eq(SalesApPromotionDisplay::getRegionName, salesApWq.getDeptName())
......
......@@ -17,7 +17,10 @@ import com.sfa.operation.pojo.sales.response.SalesApPromotionDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Objects;
......@@ -72,6 +75,9 @@ public class SalesApPromotionImplDao implements ISalesApPromotionDao {
if (StringUtils.isNotBlank(salesApWq.getDealerCode())) {
qw.eq(SalesApPromotion::getDealerCode, salesApWq.getDealerCode());
}
if (!CollectionUtils.isEmpty(salesApWq.getDealerCodes())) {
qw.in(SalesApPromotion::getDealerCode, salesApWq.getDealerCodes());
}
if (StringUtils.isNotBlank(salesApWq.getCityManager())) {
qw.eq(SalesApPromotion::getCityManager, salesApWq.getCityManager());
}
......
......@@ -7,6 +7,7 @@ import com.sfa.common.core.utils.StringUtils;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.core.web.page.TableSupport;
import com.sfa.operation.domain.sales.dao.ISalesApSnacksDisplayDao;
import com.sfa.operation.domain.sales.entity.SalesApPromotionDisplay;
import com.sfa.operation.domain.sales.entity.SalesApSnacksDisplay;
import com.sfa.operation.domain.sales.mapper.SalesApSnacksDisplayMapper;
import com.sfa.operation.domain.sales.wq.SalesApWq;
......@@ -14,6 +15,7 @@ import com.sfa.operation.pojo.sales.response.SalesApSnacksDisplayDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
......@@ -46,6 +48,9 @@ public class SalesApSnacksDisplayDaoImpl implements ISalesApSnacksDisplayDao {
if (Objects.nonNull(salesApWq.getSalesMonth())){
qw.eq(SalesApSnacksDisplay::getSalesMonth, salesApWq.getSalesMonth());
}
if (!CollectionUtils.isEmpty(salesApWq.getDealerCodes())) {
qw.in(SalesApSnacksDisplay::getDealerCode, salesApWq.getDealerCodes());
}
if (StringUtils.isNotBlank(salesApWq.getDeptName())){
qw.and(
wrapper -> wrapper.eq(SalesApSnacksDisplay::getRegionName, salesApWq.getDeptName())
......
......@@ -3,6 +3,7 @@ package com.sfa.operation.domain.sales.wq;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author : liqiulin
......@@ -16,4 +17,5 @@ public class SalesApWq {
private String cityManager;
private String deptName;
private String nickName;
private List<String> dealerCodes;
}
......@@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
/**
* @author : liqiulin
......@@ -22,6 +23,7 @@ public class SalesApRequest {
private String cityManager;
private String deptName;
private String nickName;
private List<String> dealerCodes;
// ######################## 通用查询 ########################
......
package com.sfa.operation.service.qc;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-10-22 19
* @describe :
*/
public interface IQinceMarketEmployeeService {
List<String> checkPermission(String empNo);
}
package com.sfa.operation.service.qc.impl;
import com.sfa.operation.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-10-22 19
* @describe :
*/
@Service
public class QinceMarketEmployeeServiceImpl implements IQinceMarketEmployeeService {
@Autowired
private IQinceMarketEmployeeDao qinceMarketEmployeeDao;
@Override
public List<String> checkPermission(String empNo) {
return qinceMarketEmployeeDao.dealerCodesByEmpNo(empNo);
}
}
......@@ -3,6 +3,8 @@ package com.sfa.operation.service.sales;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-09-08 14
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.operation.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.operation.domain.sales.dao.ISalesApDisplayDao;
import com.sfa.operation.domain.sales.dao.ISalesApPromotionDisplayDao;
import com.sfa.operation.domain.sales.dao.ISalesApSnacksDisplayDao;
......@@ -13,6 +14,9 @@ import com.sfa.operation.service.sales.IApDisplayQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.awt.dnd.Autoscroll;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-09-08 14
......@@ -26,6 +30,8 @@ public class ApDisplayQueryServiceImpl implements IApDisplayQueryService {
private ISalesApPromotionDisplayDao salesApPromotionDisplayDao;
@Autowired
private ISalesApSnacksDisplayDao salesapsnackdsDisplayDao;
@Override
public PageInfo page(SalesApRequest salesApRequest) {
SalesApWq salesApWq = new SalesApWq();
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sfa.operation.domain.feishu.mapper.QinceMarketEmployeeMapper">
<resultMap id="QinceMarketEmployeeBase" type="com.sfa.operation.domain.feishu.entity.QinceMarketEmployee">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="dealerCode" column="dealer_code" jdbcType="VARCHAR"/>
<result property="dealerName" column="dealer_name" jdbcType="VARCHAR"/>
<result property="dqDeptCode" column="dq_dept_code" jdbcType="VARCHAR"/>
<result property="zqDeptCode" column="zq_dept_code" jdbcType="VARCHAR"/>
<result property="dqEmpNo" column="dq_emp_no" jdbcType="VARCHAR"/>
<result property="zqEmpNo" column="zq_emp_no" jdbcType="VARCHAR"/>
<result property="csEmpNo" column="cs_emp_no" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
</resultMap>
<select id="dealerCodesByEmpNo" parameterType="java.lang.String" resultType="java.lang.String">
select dealer_code
from qince_market_employee
where dq_emp_no = #{empNo}
or zq_emp_no = #{empNo}
or cs_emp_no = #{empNo}
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论