提交 ac325b15 authored 作者: 窦馨雨's avatar 窦馨雨

合并分支 'dxy' 到 'qa'

增加档期陈列的导出部分代码 查看合并请求 !98
......@@ -65,8 +65,23 @@ public class SalesPermissionAspect {
*/
private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
if (loginUser == null || loginUser.getSysUser() == null) {
throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
}
// 安全获取 ancestors 和 roles
String ancestors = "";
if (loginUser.getSysUser().getDept() != null) {
ancestors = loginUser.getSysUser().getDept().getAncestors();
if (ancestors == null) {
ancestors = "";
}
}
List<SysRole> roles = loginUser.getSysUser().getRoles();
if (roles == null) {
roles = new ArrayList<>();
}
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
......@@ -97,8 +112,23 @@ public class SalesPermissionAspect {
private void checkPermissionDept(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
if (loginUser == null || loginUser.getSysUser() == null) {
return;
}
// 安全获取 ancestors 和 roles
String ancestors = "";
if (loginUser.getSysUser().getDept() != null) {
ancestors = loginUser.getSysUser().getDept().getAncestors();
if (ancestors == null) {
ancestors = "";
}
}
List<SysRole> roles = loginUser.getSysUser().getRoles();
if (roles == null) {
roles = new ArrayList<>();
}
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
......@@ -107,7 +137,15 @@ public class SalesPermissionAspect {
// 是区域销售部的人员按部门查询
String empNo = loginUser.getUsername();
if (loginUser.getSysUser().getDept() == null) {
return;
}
String deptName = loginUser.getSysUser().getDept().getDeptNameSale();
if (deptName == null) {
deptName = "";
}
salesApRequest.setDeptNames("000889".equals(empNo) ? Arrays.asList(deptName, "北京特区") : Arrays.asList(deptName));
}
}
package com.sfa.operation.domain.sales.dao;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.operation.domain.sales.entity.SalesApPromotion;
import com.sfa.operation.domain.sales.wq.SalesApWq;
import com.sfa.operation.pojo.sales.response.SalesApPromotionDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2025-09-17 15
......@@ -13,4 +16,11 @@ public interface ISalesApPromotionDao {
PageInfo page(SalesApWq salesApWq);
void updateById(SalesApPromotionDto dto);
/**
* 导出 - 根据条件查询导出数据
* @param build 条件
* @return List<SalesApPromotion>
*/
List<SalesApPromotion> queryPromotionDisplayByCondition(SalesApWq build);
}
......@@ -19,7 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
......@@ -69,6 +71,17 @@ public class SalesApPromotionImplDao implements ISalesApPromotionDao {
salesApPromotionMapper.putById(salesApPromotion);
}
/**
* 导出 - 根据条件查询导出数据
* @param build 条件
* @return 查询结果列表
*/
@Override
public List<SalesApPromotion> queryPromotionDisplayByCondition(SalesApWq build) {
LambdaQueryWrapper<SalesApPromotion> queryWrapper = buildWq(build);
return salesApPromotionMapper.selectList(queryWrapper);
}
private LambdaQueryWrapper<SalesApPromotion> buildWq(SalesApWq salesApWq) {
LambdaQueryWrapper<SalesApPromotion> qw = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(salesApWq.getDealerCode())) {
......
......@@ -28,7 +28,11 @@ public enum ExportAPType {
/**
* 六小金刚策略
*/
SIX_KINGkONG_EXPORT("sixKingKongExportStrategy");
SIX_KINGkONG_EXPORT("sixKingKongExportStrategy"),
/**
* 档期陈列策略
*/
PROMOTION_DISPLAY_EXPORT("promotionDisplayExportStrategy");
private final String strategy;
ExportAPType(String strategy) {
......
......@@ -28,7 +28,11 @@ public enum ImportApType {
/**
* 六小金刚导入策略
*/
SIX_KINGkONG_IMPORT("sixKingKongImportStrategy");
SIX_KINGkONG_IMPORT("sixKingKongImportStrategy"),
/**
* 档期陈列导入策略
*/
PROMOTION_DISPLAY_IMPORT("promotionDisplayImportStrategy");
private final String importStrategy;
ImportApType(String importStrategy) {
......
......@@ -2,6 +2,8 @@ package com.sfa.operation.service.sales;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.operation.domain.sales.entity.SalesApDisplay;
import com.sfa.operation.domain.sales.entity.SalesApPromotion;
import com.sfa.operation.domain.sales.entity.SalesApSnacksDisplay;
import com.sfa.operation.pojo.sales.excel.SalesApDisplayImportExcelDto;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
......@@ -32,4 +34,18 @@ public interface IApDisplayQueryService {
Object queryDistAPReport(SalesApRequest request);
List<SalesApDisplay> queryDataListByCondition(SalesApRequest build);
List<SalesApDisplay> queryByCondition(List<SalesApDisplayImportExcelDto> queryParam);
/**
* 导出 - 根据条件查询零食陈列
* @param salesApRequest 查询条件
* @return 返回根据条件查询的结果列表
*/
List<SalesApSnacksDisplay> querySnackByCondition(SalesApRequest salesApRequest);
/**
* 导出- 根据条件查询数据结果集
* @param salesApRequest 查询条件
* @return 返回根据条件查询的结果列表
*/
List<SalesApPromotion> queryPromotionDisplayByCondition(SalesApRequest salesApRequest);
}
......@@ -6,12 +6,16 @@ import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.operation.domain.sales.dao.*;
import com.sfa.operation.domain.sales.entity.SalesApDisplay;
import com.sfa.operation.domain.sales.entity.SalesApPromotion;
import com.sfa.operation.domain.sales.entity.SalesApSnacksDisplay;
import com.sfa.operation.domain.sales.wq.SalesApWq;
import com.sfa.operation.pojo.sales.excel.SalesApDisplayImportExcelDto;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.sales.IApDisplayQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
......@@ -79,16 +83,41 @@ public class ApDisplayQueryServiceImpl implements IApDisplayQueryService {
return salesApDisplayDao.queryDistAPReport(build(request));
}
/**
* 导入导出根据条件查询
* @param request 请求参数
* @return List
*/
@Override
public List<SalesApDisplay> queryDataListByCondition(SalesApRequest request) {
return salesApDisplayDao.queryDataListByCondition(build(request));
}
/**
* 导入数据时 根据DTO的内容批量查询数据
* @param validDtoList
* @return
*/
@Override
public List<SalesApDisplay> queryByCondition(List<SalesApDisplayImportExcelDto> validDtoList) {
return salesApDisplayDao.queryByCondition(validDtoList);
}
/**
* 根据条件查询零食陈列
* @param request
* @return List
*/
@Override
public List<SalesApSnacksDisplay> querySnackByCondition(SalesApRequest request) {
return salesapsnackdsDisplayDao.querySnackByCondition(build(request));
}
@Override
public List<SalesApPromotion> queryPromotionDisplayByCondition(SalesApRequest request) {
return salesApPromotionDao.queryPromotionDisplayByCondition(build(request));
}
private SalesApWq build(SalesApRequest salesApRequest){
SalesApWq salesApWq = new SalesApWq();
BeanUtils.copyProperties(salesApRequest,salesApWq);
......
package com.sfa.operation.strategy.impl.exports;
import com.sfa.operation.config.ExportColumnConfig;
import com.sfa.operation.domain.sales.dao.ISalesApPromotionDao;
import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.sales.IApDisplayQueryService;
import com.sfa.operation.strategy.IExportApExcelStrategy;
import com.sfa.operation.util.excel.ExcelStyleUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @Author: DouXinYu
* @Date: 2025-12-16 13:28
* @Description: 档期陈列导出策略实现类
*/
@Component("promotionDisplayExportStrategy")
public class PromotionDisplayExportStrategyImpl implements IExportApExcelStrategy {
private static final String FILE_NAME_PREFIX = "档期陈列";
private static final String SHEET_NAME = "档期陈列";
@Autowired
private IApDisplayQueryService apDisplayQueryService;
@Override
public List<ExportColumnConfig> getExportColumnConfig() {
List<ExportColumnConfig> column = new ArrayList<>();
//特殊列处理
//实际端架数量
ExportColumnConfig actualEndCapQty = new ExportColumnConfig("actualEndCapQty", "端架数量(实际)", "", ExcelStyleUtils.ExcelStyle.LIGHT_BLUE_BG);
actualEndCapQty. setValidationValidOptions(Arrays.asList("0","0.5","1","2"));
actualEndCapQty.setValidationErrorTitle("输入错误");
actualEndCapQty.setValidationErrorMsg("端架数量必须是“0、0.5、1、2”之一!");
actualEndCapQty.setConditionalStyling(true);
//实际地堆平米数
ExportColumnConfig actualFloorStackArea = new ExportColumnConfig("actualFloorStackArea", "地堆平米数(实际)", "", ExcelStyleUtils.ExcelStyle.LIGHT_BLUE_BG);
actualFloorStackArea.setValidationValidOptions(Arrays.asList("0","0.5","0.8","1","2","3","4","5"));
actualFloorStackArea.setValidationErrorTitle("输入错误");
actualFloorStackArea.setValidationErrorMsg("地堆平米数必须是“0、0.5、0.8、1、2、3、4、5”之一!");
actualFloorStackArea.setConditionalStyling(true);
//实际地堆数量
ExportColumnConfig actualFloorStackQty = new ExportColumnConfig("actualFloorStackQty", "地堆数量(实际)", "", ExcelStyleUtils.ExcelStyle.LIGHT_BLUE_BG);
actualFloorStackQty.setNumberValidation(true);
actualFloorStackQty.setValidationNumberMin(0.0);
actualFloorStackQty.setValidationNumberMax(99999999999999999.999999999999999999);
actualFloorStackQty.setValidationErrorTitle("输入错误");
actualFloorStackQty.setValidationErrorMsg("地堆数量必须是大于0的数字!");
actualFloorStackQty.setConditionalStyling(true);
//实际其他陈列数量+形式
ExportColumnConfig actualOtherDisplay = new ExportColumnConfig("actualOtherDisplay", "其他陈列数量+形式(实际)", "", ExcelStyleUtils.ExcelStyle.LIGHT_BLUE_BG);
actualOtherDisplay.setValidationValidOptions(Arrays.asList("执行与计划一致","执行与计划不一致"));
actualOtherDisplay.setValidationErrorTitle("输入错误");
actualOtherDisplay.setValidationPromptMsg("其他陈列数量+形式(实际)必须输入“执行与计划一致”或“执行与计划不一致”!");
actualOtherDisplay.setConditionalStyling(true);
column.add(new ExportColumnConfig("sapdId", "程序编号-请忽略", "", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("salesMonth", "计划月份", "YYYY-MM", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("regionName", "销售大区", "", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("districtName", "销售战区", "", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("dealerCode","经销商代码","@", ExcelStyleUtils.ExcelStyle.CHANGE_TEXT_STYLE));
column.add(new ExportColumnConfig("dealerName", "经销商名称", "", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("lineName", "系统名称", "", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("storeCode","门店编码","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("store_name","门店名称","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(new ExportColumnConfig("plannedEndCapQty","端架数量(计划)","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(actualEndCapQty);
column.add(new ExportColumnConfig("plannedFloorStackArea","地堆平米数(计划)","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(actualFloorStackArea);
column.add(new ExportColumnConfig("plannedFloorStackQty","地堆数量(计划)","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(actualFloorStackQty);
column.add(new ExportColumnConfig("plannedOtherDisplay","其他陈列数量+形式(计划)","", ExcelStyleUtils.ExcelStyle.UNMODIFIABLE));
column.add(actualOtherDisplay);
column.add(new ExportColumnConfig("remark","备注","", ExcelStyleUtils.ExcelStyle.DEFAULT_STYLE));
return column;
}
@Override
public List<?> queryData(SalesApRequest salesApRequest) {
return apDisplayQueryService.queryPromotionDisplayByCondition(salesApRequest);
}
@Override
public String getExportSheetName() {
return SHEET_NAME;
}
@Override
public String getExportFileNamePrefix() {
return FILE_NAME_PREFIX;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论