提交 e1c815cb authored 作者: 吕本才's avatar 吕本才

增加标识,是否重复出现过预付款,超过数据库最大值的,出先特效,赋值0

2、增加大区分组结果记录
上级 fa56632c
......@@ -71,7 +71,8 @@ public class DealerBigScreenController extends BaseController {
}
/**
* 按照轮次查询轮次结果
* 后台的按照轮次查询轮次结果
*
*/
@GetMapping("/result/round/{roundTime}")
public AjaxResult groupRoundList(@PathVariable("roundTime") Integer roundTime, String phone, String dealerName) {
......@@ -85,7 +86,9 @@ public class DealerBigScreenController extends BaseController {
return success(res);
}
@GetMapping("/zip/download")
@GetMapping("/download/zip")
public void downloadZip(HttpServletResponse response) {
// 分组导出 写入到多个excel,并合并到zip文件导出
try {
......@@ -117,6 +120,10 @@ public class DealerBigScreenController extends BaseController {
}
@GetMapping("/download/excel")
public void downloadexcle(HttpServletResponse response, String group) {
resultService.downloadExcel(response,group);
}
}
package com.ruoyi.dealer.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 经销商轮次填写结果
* 对应表:dealer_round_result
*/
@Data
@TableName("dealer_result")
public class DealerResult {
/**
* 主键id
*/
@TableId(type = IdType.AUTO)
@Excel(name = "序号")
private Long resultId;
/**
* 当前轮次
*/
@Excel(name = "经销商名称")
private Integer roundTime;
/**
* 增加的预付款万
*/
@Excel(name = "预付款")
private Integer paymentTtl;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 第一轮分组+第二列分组
* 分组名称
*/
// @Excel(name = "经销商分组")
// private String groupName;
@Excel(name = "经销商目标")
private Integer goalTtlAct;
/**
* 预付款达成的百分比
*/
@Excel(name = "经销商达成率")
private String paymentPercentage;
/**
* 销售大区分组名称
* 第二轮分组使用,例如:华东组、华南组、华北一组、华北二组、华中组、西南组、西北组
*
*/
@Excel(name = "经销商大区分组")
private String salesRegionGroupName;
}
......@@ -47,5 +47,12 @@ public class DealerBigScreenDynamicRes {
* 轮次id
*/
private Long roundId;
/**
* 是否重复出现特效
* 0 没出现过特效,需要展现特效
* 1 已出现过特效,不需要展现特效
*
*/
private Integer repetition;
}
// 文件路径:ruoyi-system/src/main/java/com/ruoyi/dealer/mapper/DealerRoundResultMapper.java
package com.ruoyi.dealer.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.dealer.domain.DealerResult;
import org.apache.ibatis.annotations.Mapper;
/**
* 经销商轮次结果 Mapper 接口
*/
@Mapper
public interface DealerResultMapper extends BaseMapper<DealerResult> {
}
......@@ -4,7 +4,6 @@ package com.ruoyi.dealer.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.dealer.domain.DealerRoundResult;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultDto;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes;
import com.ruoyi.dealer.domain.dto.DealerBigScreenTotalResultRes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
......@@ -18,13 +17,7 @@ import java.util.List;
*/
@Mapper
public interface DealerRoundResultMapper extends BaseMapper<DealerRoundResult> {
/**
* 查询组内达成率排前四名经销商列表
* @param categoryName
*/
@Select("select * from dealer_round_result where dealer_category = #{categoryName} and round_time = 1 " +
"order by payment_percentage desc limit 4")
List<DealerBigScreenGroupResultRes> getGroupList(String categoryName);
@Select("select result.round_time, result.sales_region_group_name as group_Name , sum(result.payment_ttl) as payment_ttl,sum(result.goal_ttl_act) as goal_ttl_act , 100*sum(result.payment_ttl)/sum(result.goal_ttl_act) as payment_percentage from dealer_round_result result " +
"group by round_time ,result.sales_region_group_name order by payment_percentage desc ")
// 手动指定映射:column(数据库字段)→ property(Java属性)
......
......@@ -16,8 +16,6 @@ import java.util.List;
* @date 2025-10-xx
*/
public interface DealerRoundInfoService extends IService<DealerRoundInfo> {
DealerRoundInfo getByDealerId(Long dealerBaseInfoId);
int saveRoundInfo(WechatDealerRoundInfoReq dealerRoundInfoReq);
List<DealerBigScreenDynamicRes> dynamicList(Integer roundId);
......
// 文件路径:ruoyi-system/src/main/java/com/ruoyi/dealer/service/IDealerRoundResultService.java
package com.ruoyi.dealer.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.dealer.domain.DealerResult;
/**
* 经销商轮次结果 Service 接口
*/
public interface IDealerResultService extends IService<DealerResult> {
}
......@@ -8,6 +8,7 @@ import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes;
import com.ruoyi.dealer.domain.dto.DealerBigScreenTotalResultRes;
import com.ruoyi.dealer.domain.dto.DealerRoundDetailListRes;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
......@@ -26,5 +27,7 @@ public interface IDealerRoundResultService extends IService<DealerRoundResult> {
String downloadZip();
DealerBigScreenTotalResultRes totalResult();
void downloadExcel(HttpServletResponse response, String group);
// 自定义业务方法声明(可选)
}
......@@ -41,25 +41,13 @@ public class DealerBaseInfoImpl extends ServiceImpl<DealerBaseInfoMapper, Dealer
@Override
public List<DealerBaseInfo> queryList(DealerBaseInfo sysStudent) {
// 注意:mybatis-plus lambda 模式不支持 eclipse 的编译器
// LambdaQueryWrapper<SysStudent> queryWrapper = Wrappers.lambdaQuery();
// queryWrapper.eq(SysStudent::getStudentName, sysStudent.getStudentName());
QueryWrapper<DealerBaseInfo> queryWrapper = Wrappers.query();
// if (StringUtils.isNotEmpty(sysStudent.getStudentName())) {
// queryWrapper.eq("student_name", sysStudent.getStudentName());
// }
// if (StringUtils.isNotNull(sysStudent.getStudentAge())) {
// queryWrapper.eq("student_age", sysStudent.getStudentAge());
// }
// if (StringUtils.isNotEmpty(sysStudent.getStudentHobby())) {
// queryWrapper.eq("student_hobby", sysStudent.getStudentHobby());
// }
return this.list(queryWrapper);
}
@Override
public WechatDealerRoundInfoRes getDealerRoundInfoByDealerId(Long dealerId) {
// String config = configService.selectConfigByKeyFromDb(Constants.DEALER_ROUND_OVER);
String roundConfig = configService.selectConfigByKeyFromDb(Constants.DEALER_ROUND);
Integer round = Integer.parseInt(roundConfig);
......
// 文件路径:ruoyi-system/src/main/java/com/ruoyi/dealer/service/impl/DealerRoundResultServiceImpl.java
package com.ruoyi.dealer.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.dealer.domain.DealerResult;
import com.ruoyi.dealer.mapper.DealerResultMapper;
import com.ruoyi.dealer.service.IDealerResultService;
import org.springframework.stereotype.Service;
/**
* 经销商轮次结果 Service 实现类
*/
@Service
public class DealerResultServiceImpl extends ServiceImpl<DealerResultMapper, DealerResult> implements IDealerResultService {
}
......@@ -8,6 +8,7 @@ import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.dealer.domain.DealerBaseInfo;
import com.ruoyi.dealer.domain.DealerResult;
import com.ruoyi.dealer.domain.DealerRoundResult;
import com.ruoyi.dealer.domain.dto.DealerBigScreenDynamicRes;
import com.ruoyi.dealer.domain.dto.DealerRoundInfo;
......@@ -16,6 +17,7 @@ import com.ruoyi.dealer.domain.dto.WechatDealerRoundInfoReq;
import com.ruoyi.dealer.mapper.DealerRoundInfoMapper;
import com.ruoyi.dealer.service.DealerRoundInfoService;
import com.ruoyi.dealer.service.IDealerBaseInfoService;
import com.ruoyi.dealer.service.IDealerResultService;
import com.ruoyi.dealer.service.IDealerRoundResultService;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
......@@ -25,6 +27,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
......@@ -44,11 +47,9 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
@Autowired
private IDealerBaseInfoService dealerBaseInfoService;
@Override
public DealerRoundInfo getByDealerId(Long dealerBaseInfoId) {
//
return null;
}
@Autowired
private IDealerResultService resultService;
@Override
public int saveRoundInfo(WechatDealerRoundInfoReq dealerRoundInfoReq) {
......@@ -96,8 +97,8 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
// 手机号传输 是脱敏手机号
resultInfo.setPhone(dealerRoundInfoReq.getPhone());
resultInfo.setRoundTime(dealerRoundInfoReq.getRoundTime());
resultInfo.setPaymentTtl(dealerRoundInfoReq.getPaymentTtlNew());
resultInfo.setPaymentTtlPre(dealerRoundInfoReq.getPaymentTtl());
resultInfo.setPaymentTtl(dealerRoundInfoReq.getPaymentTtlNew());
resultInfo.setGoalTtlAct(dealerRoundInfoReq.getGoalTtlAct());
resultInfo.setDealerCategory(dealerRoundInfoReq.getDealerCategory());
......@@ -156,6 +157,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
res.setPaymentPercentage(getPercentage(info.getPaymentTtlNew(), info.getGoalTtlAct(),2) + "%");
res.setRoundId(info.getRoundId());
res.setRepetition(info.getRepetition());
return res;
}).collect(Collectors.toList());
......@@ -175,6 +177,25 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
List<SysConfig> list = new ArrayList<>();
list.add(sysConfigRound);
list.add(sysConfigRoundOver);
// 第1轮结束的时候,更新的下汇总的结果表
if (turnRoundInfoReq.getRoundTime() == 1 && turnRoundInfoReq.getRoundOver()) {
// 查询结果数据
// List<DealerRoundResult> roundResults = roundResultService.groupRoundList();
List<DealerRoundResult> roundResults = new ArrayList<>();
Collection<DealerResult> resultList = roundResults.stream().map(result -> {
DealerResult item = new DealerResult();
item.setResultId(result.getResultId());
item.setRoundTime(result.getRoundTime());
item.setPaymentTtl(result.getPaymentTtl());
item.setGoalTtlAct(result.getGoalTtlAct());
item.setPaymentPercentage(result.getPaymentPercentage());
item.setSalesRegionGroupName(result.getSalesRegionGroupName());
return item;
}).collect(Collectors.toList());
resultService.saveOrUpdateBatch(resultList);
}
return list;
}
......
......@@ -9,18 +9,23 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dealer.domain.DealerBaseInfo;
import com.ruoyi.dealer.domain.DealerResult;
import com.ruoyi.dealer.domain.DealerRoundResult;
import com.ruoyi.dealer.domain.dto.*;
import com.ruoyi.dealer.mapper.DealerRoundResultMapper;
import com.ruoyi.dealer.service.IDealerBaseInfoService;
import com.ruoyi.dealer.service.IDealerResultService;
import com.ruoyi.dealer.service.IDealerRoundResultService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -31,12 +36,15 @@ import java.util.stream.Collectors;
*/
@Service
public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultMapper, DealerRoundResult> implements IDealerRoundResultService {
@Autowired
@Autowired
private IDealerBaseInfoService dealerBaseInfoService;
@Autowired
private IDealerResultService resultService;
/**
* 大屏 个人分组查询
* 大屏个人分组接口--右侧 鲲鹏组 青龙组 麒麟组
*
* @param CategoryName
* @return
*/
......@@ -61,7 +69,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
res.setGoalTtlAct(item.getGoalTtlAct());
res.setPaymentTtl(item.getPaymentTtl());
res.setPaymentPercentage(getPercentage(item.getPaymentTtl(), item.getGoalTtlAct(), 2)+"%");
res.setPaymentPercentage(getPercentage(item.getPaymentTtl(), item.getGoalTtlAct(), 2) + "%");
list.add(res);
});
......@@ -86,6 +94,15 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
return list;
}
/**
*
* 按照轮次查询轮次结果
* @param roundTime
* @param phone
* @param dealerName
* @return
*/
@Override
public List<DealerRoundDetailListRes> groupRoundList(Integer roundTime, String phone, String dealerName) {
List<DealerRoundResult> dealerBigScreenGroupResultRes = this.list(new LambdaQueryWrapper<DealerRoundResult>()
......@@ -121,13 +138,13 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
List<DealerRoundResult> round1Results = this.list(new LambdaQueryWrapper<DealerRoundResult>()
.eq(DealerRoundResult::getRoundTime, 1)
);
if(round1Results.size()>0){
if (round1Results.size() > 0) {
throw new RuntimeException("轮次数据已存在");
}
// 获取所有经销商信息
List<DealerBaseInfo> resultList = dealerBaseInfoService.list();
// 复制所有数据
List<DealerRoundResult> roundResults = new ArrayList<>();
List<DealerRoundResult> roundResults = new ArrayList<>();
// 先清空id
resultList.forEach(baseInfo -> {
DealerRoundResult item = new DealerRoundResult();
......@@ -166,9 +183,9 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
List<DealerRoundResult> groupData = entry.getValue();
ExcelUtil<DealerRoundResult> util = new ExcelUtil<>(DealerRoundResult.class);
String excelFileName = "分组结果_" + groupName ;
String excelFileName = "分组结果_" + groupName;
// 创建临时文件
File excelFile = FileUtil.createTempFile(excelFileName,".xlsx",true);
File excelFile = FileUtil.createTempFile(excelFileName, ".xlsx", true);
util.init(groupData, "分组结果", groupName, Excel.Type.EXPORT);
// 导出到excel文件
util.exportExcelFile(excelFile);
......@@ -178,7 +195,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
// 生成 ZIP 文件
File zipFile = FileUtil.createTempFile();
InputStream[] inputStreams =new InputStream[excelFilePaths.size()];
InputStream[] inputStreams = new InputStream[excelFilePaths.size()];
for (int i = 0; i < excelFilePaths.size(); i++) {
inputStreams[i] = FileUtil.getInputStream(excelFilePaths.get(i));
}
......@@ -190,19 +207,71 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
@Override
public DealerBigScreenTotalResultRes totalResult() {
List<DealerBigScreenTotalResultRes> roundResults = this.baseMapper.getTotalResult();
DealerBigScreenTotalResultRes res = roundResults.get(0);
res.setPaymentPercentage(getPercentage(res.getPaymentTtl(), res.getGoalTtlAct(), 2) + "%");
DealerBigScreenTotalResultRes res = null;
DealerResult total = resultService.getOne(new LambdaQueryWrapper<DealerResult>()
.eq(DealerResult::getSalesRegionGroupName, "total")
);
if (ObjectUtil.isNotEmpty(total)) {
res = new DealerBigScreenTotalResultRes();
res.setPaymentTtl(total.getPaymentTtl());
res.setGoalTtlAct(total.getGoalTtlAct());
res.setPaymentPercentage(new BigDecimal(res.getPaymentTtl())
.multiply(new BigDecimal(100))
.divide(new BigDecimal(res.getGoalTtlAct()), 2, RoundingMode.HALF_UP)
.toPlainString() + "%");
} else {
List<DealerBigScreenTotalResultRes> roundResults = this.baseMapper.getTotalResult();
res = roundResults.get(0);
res.setPaymentPercentage(new BigDecimal(res.getPaymentTtl())
.multiply(new BigDecimal(100))
.divide(new BigDecimal(res.getGoalTtlAct()), 2, RoundingMode.HALF_UP)
.toPlainString() + "%");
}
return res;
}
private String getPercentage(Integer paymentTtl, Integer goalTtlAct,Integer scale) {
if(null == paymentTtl || null == goalTtlAct){
@Override
public void downloadExcel(HttpServletResponse response, String group) {
if (group.equals("1")) {
// 从数据库查询数据
List<DealerRoundResult> roundResults = this.list(new LambdaQueryWrapper<DealerRoundResult>()
.eq(DealerRoundResult::getRoundTime, 1)
);
// 导出到excel文件
ExcelUtil<DealerRoundResult> util = new ExcelUtil<>(DealerRoundResult.class);
String encodedFileName = null;
try {
encodedFileName = URLEncoder.encode("个人分组明细.exls", "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
util.exportExcel(response, roundResults, "个人分组明细");
} else {
List<DealerResult> roundResults = resultService.list();
// 导出到excel文件
ExcelUtil<DealerResult> util = new ExcelUtil<>(DealerResult.class);
String encodedFileName = null;
try {
encodedFileName = URLEncoder.encode("团队汇总.exls", "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
util.exportExcel(response, roundResults, "团队汇总");
}
}
private String getPercentage(Integer paymentTtl, Integer goalTtlAct, Integer scale) {
if (null == paymentTtl || null == goalTtlAct) {
return "0";
}
return new BigDecimal(paymentTtl)
.multiply(new BigDecimal(100))
.divide(new BigDecimal(goalTtlAct),scale, RoundingMode.HALF_UP)
.divide(new BigDecimal(goalTtlAct), scale, RoundingMode.HALF_UP)
.stripTrailingZeros()
.toPlainString();
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论