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

修改百分比,没有小数点的,清掉

上级 c124c1b1
package com.ruoyi.web.controller.dealer; package com.ruoyi.web.controller.dealer;
import cn.hutool.core.io.FileUtil;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.dealer.domain.dto.DealerBigScreenDynamicRes; import com.ruoyi.dealer.domain.dto.*;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupListRes;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes;
import com.ruoyi.dealer.domain.dto.DealerRoundDetailListRes;
import com.ruoyi.dealer.service.DealerRoundInfoService; import com.ruoyi.dealer.service.DealerRoundInfoService;
import com.ruoyi.dealer.service.IDealerBaseInfoService; import com.ruoyi.dealer.service.IDealerBaseInfoService;
import com.ruoyi.dealer.service.IDealerRoundResultService; import com.ruoyi.dealer.service.IDealerRoundResultService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List; import java.util.List;
/** /**
...@@ -23,6 +27,7 @@ import java.util.List; ...@@ -23,6 +27,7 @@ import java.util.List;
* @author ruoyi * @author ruoyi
*/ */
@RestController @RestController
@Slf4j
@RequestMapping("/dealer/bigScreen") @RequestMapping("/dealer/bigScreen")
public class DealerBigScreenController extends BaseController { public class DealerBigScreenController extends BaseController {
@Autowired @Autowired
...@@ -44,6 +49,8 @@ public class DealerBigScreenController extends BaseController { ...@@ -44,6 +49,8 @@ public class DealerBigScreenController extends BaseController {
/** /**
* 第一列 按照分组 A B C 获取前几名 * 第一列 按照分组 A B C 获取前几名
* 大屏个人分组接口--右侧 鲲鹏组 青龙组 麒麟组
*
* @param CategoryName * @param CategoryName
* @return * @return
*/ */
...@@ -56,7 +63,6 @@ public class DealerBigScreenController extends BaseController { ...@@ -56,7 +63,6 @@ public class DealerBigScreenController extends BaseController {
/** /**
* 第二轮 按照分组获取分组合计的 * 第二轮 按照分组获取分组合计的
*
*/ */
@GetMapping("/group/region") @GetMapping("/group/region")
public AjaxResult groupTotalList() { public AjaxResult groupTotalList() {
...@@ -66,17 +72,51 @@ public class DealerBigScreenController extends BaseController { ...@@ -66,17 +72,51 @@ public class DealerBigScreenController extends BaseController {
/** /**
* 按照轮次查询轮次结果 * 按照轮次查询轮次结果
*
*/ */
@GetMapping("/result/round/{roundTime}") @GetMapping("/result/round/{roundTime}")
public AjaxResult groupRoundList(@PathVariable("roundTime") Integer roundTime, String phone, String dealerName) { public AjaxResult groupRoundList(@PathVariable("roundTime") Integer roundTime, String phone, String dealerName) {
List<DealerRoundDetailListRes> list = resultService.groupRoundList(roundTime,phone,dealerName); List<DealerRoundDetailListRes> list = resultService.groupRoundList(roundTime, phone, dealerName);
return success(list); return success(list);
} }
@GetMapping("/result/totalResult")
public AjaxResult totalResult() {
List<DealerBigScreenTotalResultRes> list = resultService.totalResult();
return success(list);
}
@GetMapping("/zip/download")
public void downloadZip(HttpServletResponse response) {
// 分组导出 写入到多个excel,并合并到zip文件导出
try {
String zipFilePath = resultService.downloadZip(); // 调用服务层
File zipFile = new File(zipFilePath);
// 设置响应头
response.setContentType("application/zip");
String encodedFileName = URLEncoder.encode("竞拍分组结果.zip", "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
// 输出 ZIP 文件内容到浏览器
try (FileInputStream fis = new FileInputStream(zipFile);
OutputStream os = response.getOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
}
// 清理资源
FileUtil.del(zipFile); // 删除 ZIP 文件
} catch (Exception e) {
log.error("导出 ZIP 失败", e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
} }
...@@ -7,7 +7,7 @@ ruoyi: ...@@ -7,7 +7,7 @@ ruoyi:
# 版权年份 # 版权年份
copyrightYear: 2025 copyrightYear: 2025
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: D:/ruoyi/uploadPath profile: /home/ruoyi/uploadPath
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证 # 验证码类型 math 数字计算 char 字符验证
...@@ -74,7 +74,7 @@ token: ...@@ -74,7 +74,7 @@ token:
# 令牌密钥 # 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期(默认30分钟) # 令牌有效期(默认30分钟)
expireTime: 30 expireTime: 300
# MyBatis配置 # MyBatis配置
#mybatis: #mybatis:
......
package com.ruoyi.common.utils;
/**
* 处理结果中的百分比计算,处理小数点问题
*/
public class NumberUtil {
}
package com.ruoyi.framework.web.service; package com.ruoyi.framework.web.service;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
...@@ -22,10 +13,20 @@ import eu.bitwalker.useragentutils.UserAgent; ...@@ -22,10 +13,20 @@ import eu.bitwalker.useragentutils.UserAgent;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/** /**
* token验证处理 * token验证处理
* *
* @author ruoyi * @author ruoyi
*/ */
@Component @Component
...@@ -45,6 +46,9 @@ public class TokenService ...@@ -45,6 +46,9 @@ public class TokenService
@Value("${token.expireTime}") @Value("${token.expireTime}")
private int expireTime; private int expireTime;
/**
*
*/
protected static final long MILLIS_SECOND = 1000; protected static final long MILLIS_SECOND = 1000;
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
...@@ -56,7 +60,7 @@ public class TokenService ...@@ -56,7 +60,7 @@ public class TokenService
/** /**
* 获取用户身份信息 * 获取用户身份信息
* *
* @return 用户信息 * @return 用户信息
*/ */
public LoginUser getLoginUser(HttpServletRequest request) public LoginUser getLoginUser(HttpServletRequest request)
...@@ -107,7 +111,7 @@ public class TokenService ...@@ -107,7 +111,7 @@ public class TokenService
/** /**
* 创建令牌 * 创建令牌
* *
* @param loginUser 用户信息 * @param loginUser 用户信息
* @return 令牌 * @return 令牌
*/ */
...@@ -126,7 +130,7 @@ public class TokenService ...@@ -126,7 +130,7 @@ public class TokenService
/** /**
* 验证令牌有效期,相差不足20分钟,自动刷新缓存 * 验证令牌有效期,相差不足20分钟,自动刷新缓存
* *
* @param loginUser 登录信息 * @param loginUser 登录信息
* @return 令牌 * @return 令牌
*/ */
...@@ -142,7 +146,7 @@ public class TokenService ...@@ -142,7 +146,7 @@ public class TokenService
/** /**
* 刷新令牌有效期 * 刷新令牌有效期
* *
* @param loginUser 登录信息 * @param loginUser 登录信息
*/ */
public void refreshToken(LoginUser loginUser) public void refreshToken(LoginUser loginUser)
...@@ -156,7 +160,7 @@ public class TokenService ...@@ -156,7 +160,7 @@ public class TokenService
/** /**
* 设置用户代理信息 * 设置用户代理信息
* *
* @param loginUser 登录信息 * @param loginUser 登录信息
*/ */
public void setUserAgent(LoginUser loginUser) public void setUserAgent(LoginUser loginUser)
......
...@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableId; ...@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
...@@ -75,7 +74,7 @@ public class DealerRoundResult { ...@@ -75,7 +74,7 @@ public class DealerRoundResult {
/** /**
* 预付款达成的百分比 * 预付款达成的百分比
*/ */
private BigDecimal paymentPercentage; private String paymentPercentage;
private Integer version; private Integer version;
......
...@@ -10,6 +10,7 @@ public class DealerBigScreenGroupResultRes { ...@@ -10,6 +10,7 @@ public class DealerBigScreenGroupResultRes {
private Integer roundTime; private Integer roundTime;
private String groupName; private String groupName;
private String salesRegionGroupName;
private Integer paymentTtl; private Integer paymentTtl;
private Integer goalTtlAct; private Integer goalTtlAct;
......
...@@ -21,5 +21,6 @@ public class DealerRoundDetailListRes { ...@@ -21,5 +21,6 @@ public class DealerRoundDetailListRes {
private String paymentPercentage; private String paymentPercentage;
private Integer paymentTtl; private Integer paymentTtl;
private Integer goalTtlAct; private Integer goalTtlAct;
private String salesRegionGroupName;
} }
...@@ -25,7 +25,6 @@ public interface DealerRoundResultMapper extends BaseMapper<DealerRoundResult> { ...@@ -25,7 +25,6 @@ public interface DealerRoundResultMapper extends BaseMapper<DealerRoundResult> {
"order by payment_percentage desc limit 4") "order by payment_percentage desc limit 4")
List<DealerBigScreenGroupResultRes> getGroupList(String categoryName); 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 " + @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 " +
"where round_time = 2 " +
"group by round_time ,result.sales_region_group_name order by payment_percentage desc ") "group by round_time ,result.sales_region_group_name order by payment_percentage desc ")
// 手动指定映射:column(数据库字段)→ property(Java属性) // 手动指定映射:column(数据库字段)→ property(Java属性)
@Results({ @Results({
......
...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.dealer.domain.DealerRoundResult; import com.ruoyi.dealer.domain.DealerRoundResult;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupListRes; import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupListRes;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes; import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes;
import com.ruoyi.dealer.domain.dto.DealerBigScreenTotalResultRes;
import com.ruoyi.dealer.domain.dto.DealerRoundDetailListRes; import com.ruoyi.dealer.domain.dto.DealerRoundDetailListRes;
import java.util.List; import java.util.List;
...@@ -21,5 +22,9 @@ public interface IDealerRoundResultService extends IService<DealerRoundResult> { ...@@ -21,5 +22,9 @@ public interface IDealerRoundResultService extends IService<DealerRoundResult> {
List<DealerRoundDetailListRes> groupRoundList(Integer roundTime, String phone, String dealerName); List<DealerRoundDetailListRes> groupRoundList(Integer roundTime, String phone, String dealerName);
int initRoundInfo(); int initRoundInfo();
String downloadZip();
List<DealerBigScreenTotalResultRes> totalResult();
// 自定义业务方法声明(可选) // 自定义业务方法声明(可选)
} }
...@@ -92,8 +92,11 @@ public class DealerBaseInfoImpl extends ServiceImpl<DealerBaseInfoMapper, Dealer ...@@ -92,8 +92,11 @@ public class DealerBaseInfoImpl extends ServiceImpl<DealerBaseInfoMapper, Dealer
} }
private String getPercentage(Integer paymentTtl, Integer goalTtlAct) { private String getPercentage(Integer paymentTtl, Integer goalTtlAct) {
return new BigDecimal(paymentTtl).multiply(new BigDecimal(100)).divide(new BigDecimal(goalTtlAct),2,RoundingMode.HALF_UP ) return new BigDecimal(paymentTtl)
.toString(); .multiply(new BigDecimal(100))
.divide(new BigDecimal(goalTtlAct),2,RoundingMode.HALF_UP )
.stripTrailingZeros()
.toPlainString();
} }
} }
...@@ -80,7 +80,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe ...@@ -80,7 +80,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
//更新结果表数据 //更新结果表数据
DealerRoundResult resultInfo = new DealerRoundResult(); DealerRoundResult resultInfo = new DealerRoundResult();
resultInfo.setDealerId(dealerRoundInfoReq.getDealerId()); resultInfo.setDealerId(userId);
resultInfo.setDealerName(dealerRoundInfoReq.getDealerName()); resultInfo.setDealerName(dealerRoundInfoReq.getDealerName());
// 手机号传输 是脱敏手机号 // 手机号传输 是脱敏手机号
...@@ -88,7 +88,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe ...@@ -88,7 +88,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
resultInfo.setRoundTime(dealerRoundInfoReq.getRoundTime()); resultInfo.setRoundTime(dealerRoundInfoReq.getRoundTime());
resultInfo.setPaymentTtl(dealerRoundInfoReq.getPaymentTtlNew()); resultInfo.setPaymentTtl(dealerRoundInfoReq.getPaymentTtlNew());
resultInfo.setPaymentTtlPre(dealerRoundInfoReq.getPaymentTtl()); resultInfo.setPaymentTtlPre(dealerRoundInfoReq.getPaymentTtl());
resultInfo.setPaymentPercentage(new BigDecimal(getPercentage(dealerRoundInfoReq.getPaymentTtl(), dealerRoundInfoReq.getGoalTtlAct(),4))); resultInfo.setPaymentPercentage(getPercentage(dealerRoundInfoReq.getPaymentTtlNew(), dealerRoundInfoReq.getGoalTtlAct(),4) + "%");
resultInfo.setGoalTtlAct(dealerRoundInfoReq.getGoalTtlAct()); resultInfo.setGoalTtlAct(dealerRoundInfoReq.getGoalTtlAct());
resultInfo.setDealerCategory(dealerRoundInfoReq.getDealerCategory()); resultInfo.setDealerCategory(dealerRoundInfoReq.getDealerCategory());
...@@ -142,7 +142,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe ...@@ -142,7 +142,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
res.setPaymentTtl(info.getPaymentTtlNew()); res.setPaymentTtl(info.getPaymentTtlNew());
res.setPhone(info.getPhone()); res.setPhone(info.getPhone());
res.setPaymentChange(info.getPaymentTtlNew() > info.getPaymentTtlPre() ? "up" : "down"); res.setPaymentChange(info.getPaymentTtlNew() > info.getPaymentTtlPre() ? "up" : "down");
res.setPaymentPercentage(new BigDecimal(info.getPaymentTtlNew()).multiply(new BigDecimal(100)).divide(new BigDecimal(info.getGoalTtlAct()), 0, BigDecimal.ROUND_HALF_UP) + "%"); res.setPaymentPercentage(getPercentage(info.getPaymentTtlNew(), info.getGoalTtlAct(),2) + "%");
res.setRoundId(info.getRoundId()); res.setRoundId(info.getRoundId());
return res; return res;
...@@ -171,6 +171,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe ...@@ -171,6 +171,7 @@ public class DealerRoundInfoServiceImpl extends ServiceImpl<DealerRoundInfoMappe
return new BigDecimal(paymentTtl) return new BigDecimal(paymentTtl)
.multiply(new BigDecimal(100)) .multiply(new BigDecimal(100))
.divide(new BigDecimal(goalTtlAct),scale, RoundingMode.HALF_UP) .divide(new BigDecimal(goalTtlAct),scale, RoundingMode.HALF_UP)
.toString(); .stripTrailingZeros()
.toPlainString();
} }
} }
// 文件路径:ruoyi-system/src/main/java/com/ruoyi/dealer/service/impl/DealerRoundResultServiceImpl.java // 文件路径:ruoyi-system/src/main/java/com/ruoyi/dealer/service/impl/DealerRoundResultServiceImpl.java
package com.ruoyi.dealer.service.impl; package com.ruoyi.dealer.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ZipUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.DealerBaseInfo;
import com.ruoyi.dealer.domain.DealerRoundResult; import com.ruoyi.dealer.domain.DealerRoundResult;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupListRes; import com.ruoyi.dealer.domain.dto.*;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultDto;
import com.ruoyi.dealer.domain.dto.DealerBigScreenGroupResultRes;
import com.ruoyi.dealer.domain.dto.DealerRoundDetailListRes;
import com.ruoyi.dealer.mapper.DealerRoundResultMapper; import com.ruoyi.dealer.mapper.DealerRoundResultMapper;
import com.ruoyi.dealer.service.IDealerBaseInfoService; import com.ruoyi.dealer.service.IDealerBaseInfoService;
import com.ruoyi.dealer.service.IDealerRoundResultService; import com.ruoyi.dealer.service.IDealerRoundResultService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 经销商轮次结果 Service 实现类 * 经销商轮次结果 Service 实现类
...@@ -29,6 +34,12 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM ...@@ -29,6 +34,12 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
@Autowired @Autowired
private IDealerBaseInfoService dealerBaseInfoService; private IDealerBaseInfoService dealerBaseInfoService;
/**
* 大屏 个人分组查询
* 大屏个人分组接口--右侧 鲲鹏组 青龙组 麒麟组
* @param CategoryName
* @return
*/
@Override @Override
public List<DealerBigScreenGroupListRes> groupList(String CategoryName) { public List<DealerBigScreenGroupListRes> groupList(String CategoryName) {
// 查询第一列分组的前几名 // 查询第一列分组的前几名
...@@ -50,7 +61,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM ...@@ -50,7 +61,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
res.setGoalTtlAct(item.getGoalTtlAct()); res.setGoalTtlAct(item.getGoalTtlAct());
res.setPaymentTtl(item.getPaymentTtl()); res.setPaymentTtl(item.getPaymentTtl());
res.setPaymentPercentage(getPercentage(item.getPaymentTtl(), item.getGoalTtlAct(), 4) + "%"); res.setPaymentPercentage(getPercentage(item.getPaymentTtl(), item.getGoalTtlAct(), 2)+"%");
list.add(res); list.add(res);
}); });
...@@ -65,10 +76,11 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM ...@@ -65,10 +76,11 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
DealerBigScreenGroupResultRes res = new DealerBigScreenGroupResultRes(); DealerBigScreenGroupResultRes res = new DealerBigScreenGroupResultRes();
res.setRoundTime(item.getRoundTime()); res.setRoundTime(item.getRoundTime());
res.setGroupName(item.getGroupName()); res.setGroupName(item.getGroupName());
res.setSalesRegionGroupName(item.getGroupName());
res.setPaymentTtl(item.getPaymentTtl()); res.setPaymentTtl(item.getPaymentTtl());
res.setGoalTtlAct(item.getGoalTtlAct()); res.setGoalTtlAct(item.getGoalTtlAct());
res.setPaymentPercentage(new BigDecimal(item.getPaymentPercentage()).setScale(4, RoundingMode.HALF_UP).toString() + "%"); res.setPaymentPercentage(getPercentage(item.getPaymentTtl(), item.getGoalTtlAct(), 2) + "%");
list.add(res); list.add(res);
}); });
return list; return list;
...@@ -86,6 +98,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM ...@@ -86,6 +98,7 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
DealerRoundDetailListRes res = new DealerRoundDetailListRes(); DealerRoundDetailListRes res = new DealerRoundDetailListRes();
res.setRoundTime(item.getRoundTime()); res.setRoundTime(item.getRoundTime());
res.setGroupName(item.getGroupName()); res.setGroupName(item.getGroupName());
res.setSalesRegionGroupName(item.getSalesRegionGroupName());
res.setDealerCategory(item.getDealerCategory()); res.setDealerCategory(item.getDealerCategory());
res.setDealerName(item.getDealerName()); res.setDealerName(item.getDealerName());
...@@ -116,28 +129,73 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM ...@@ -116,28 +129,73 @@ public class DealerRoundResultServiceImpl extends ServiceImpl<DealerRoundResultM
// 复制所有数据 // 复制所有数据
List<DealerRoundResult> roundResults = new ArrayList<>(); List<DealerRoundResult> roundResults = new ArrayList<>();
// 先清空id // 先清空id
roundResults.forEach(item -> { resultList.forEach(baseInfo -> {
DealerRoundResult item = new DealerRoundResult();
item.setRoundTime(1); item.setRoundTime(1);
item.setDealerId(item.getDealerId()); item.setDealerCategory(baseInfo.getDealerCategory());
item.setResultId(null); item.setGroupName(baseInfo.getGroupName());
item.setDealerName(item.getDealerName()); item.setSalesRegionGroupName(baseInfo.getSalesRegionGroupName());
item.setDealerCategory(item.getDealerCategory());
item.setPhone(item.getPhone()); item.setDealerId(baseInfo.getDealerId());
item.setGoalTtlAct(item.getGoalTtlAct());
item.setPaymentTtl(item.getPaymentTtl()); item.setDealerName(baseInfo.getDealerName());
item.setPaymentPercentage(item.getPaymentPercentage()); item.setDealerCategory(baseInfo.getDealerCategory());
item.setPhone(baseInfo.getPhone());
// 覆盖字段 item.setGoalTtlAct(baseInfo.getGoalTtlAct());
item.setSalesRegionGroupName(item.getSalesRegionGroupName()); item.setPaymentTtlPre(baseInfo.getPaymentTtl());
item.setPaymentTtl(baseInfo.getPaymentTtl());
item.setPaymentPercentage(getPercentage(baseInfo.getPaymentTtl(), baseInfo.getGoalTtlAct(), 2));
roundResults.add(item);
}); });
this.saveBatch(roundResults); this.saveOrUpdateBatch(roundResults);
return resultList.size(); return resultList.size();
} }
@Override
public String downloadZip() {
List<DealerRoundResult> roundResults = this.list(new LambdaQueryWrapper<DealerRoundResult>()
.eq(DealerRoundResult::getRoundTime, 1)
);
Map<String, List<DealerRoundResult>> map = roundResults.stream().collect(Collectors.groupingBy(DealerRoundResult::getSalesRegionGroupName));
// 按照key 生成不同的excel文件
List<String> excelFilePaths = new ArrayList<>();
// 生成每个分组的 Excel 文件
for (Map.Entry<String, List<DealerRoundResult>> entry : map.entrySet()) {
String groupName = entry.getKey();
List<DealerRoundResult> groupData = entry.getValue();
ExcelUtil<DealerRoundResult> util = new ExcelUtil<>(DealerRoundResult.class);
String excelFileName = "分组结果_" + groupName + ".xlsx";
File excelFile = FileUtil.createTempFile(); // 创建临时文件
util.init(groupData, "分组结果", groupName, Excel.Type.EXPORT);
util.exportExcelFile(excelFile); // 导出到临时文件
excelFilePaths.add(excelFile.getAbsolutePath());
}
// 生成 ZIP 文件
File zipFile = FileUtil.createTempFile();
InputStream[] inputStreams =new InputStream[excelFilePaths.size()];
File zip = ZipUtil.zip(zipFile, excelFilePaths.toArray(new String[0]), inputStreams);// 打包所有 Excel 文件
// 返回 ZIP 文件路径
return zipFile.getAbsolutePath();
}
@Override
public List<DealerBigScreenTotalResultRes> totalResult() {
return null;
}
private String getPercentage(Integer paymentTtl, Integer goalTtlAct,Integer scale) { private String getPercentage(Integer paymentTtl, Integer goalTtlAct,Integer scale) {
if(null == paymentTtl || null == goalTtlAct){
return "0";
}
return new BigDecimal(paymentTtl) return new BigDecimal(paymentTtl)
.multiply(new BigDecimal(100)) .multiply(new BigDecimal(100))
.divide(new BigDecimal(goalTtlAct),scale, RoundingMode.HALF_UP) .divide(new BigDecimal(goalTtlAct),scale, RoundingMode.HALF_UP)
.toString(); .stripTrailingZeros()
.toPlainString();
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论