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

1、展开查询接口,增加区分是否展开接口的标识

2、导出excel数据接口
上级 fb479ece
package com.link.bi.controller.query; package com.link.bi.controller.query;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.link.bi.pojo.request.FinanceSelectCommonVo;
import com.link.bi.pojo.request.FinanceCostVo; import com.link.bi.pojo.request.FinanceCostVo;
import com.link.bi.pojo.request.FinanceSelectCommonVo;
import com.link.bi.pojo.response.FinanceBaseProductListDto; import com.link.bi.pojo.response.FinanceBaseProductListDto;
import com.link.bi.pojo.response.FinanceZbjTypeListDto; import com.link.bi.pojo.response.FinanceZbjTypeListDto;
import com.link.bi.service.FinanceBaseProductService; import com.link.bi.service.FinanceBaseProductService;
...@@ -13,6 +13,7 @@ import com.sfa.common.security.annotation.RequiresPermissions; ...@@ -13,6 +13,7 @@ import com.sfa.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
/** /**
...@@ -93,4 +94,18 @@ public class FinanceOrderQueryController extends BaseController { ...@@ -93,4 +94,18 @@ public class FinanceOrderQueryController extends BaseController {
return baseZbjTypeService.baseZbjTypeAllList(commonVo); return baseZbjTypeService.baseZbjTypeAllList(commonVo);
} }
@RequiresPermissions("bi:finance:list")
@PostMapping("/cost/subList")
public PageInfo selectBiFinanceCostSubList(@RequestBody FinanceCostVo financeCostVo) {
return detailService.selectBiFinanceCostList(financeCostVo);
}
@RequiresPermissions("bi:finance:list")
@PostMapping("/cost/export")
public void exportBiFinanceCostList(@RequestBody FinanceCostVo financeCostVo, HttpServletResponse response) {
detailService.exportBiFinanceCostList(financeCostVo,response);
}
} }
package com.link.bi.domain.dao.impl; package com.link.bi.domain.dao.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.link.bi.domain.dao.IFinanceOrderDetailDao; import com.link.bi.domain.dao.IFinanceOrderDetailDao;
import com.link.bi.domain.entity.FinanceOrderDetail; import com.link.bi.domain.entity.FinanceOrderDetail;
import com.link.bi.domain.mapper.FinanceOrderDetailMapper; import com.link.bi.domain.mapper.FinanceOrderDetailMapper;
import com.link.bi.domain.wq.FinanceCostWq; import com.link.bi.domain.wq.FinanceCostWq;
import com.sfa.common.core.web.page.TableSupport;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -33,8 +31,7 @@ public class FinanceOrderDetailDaoImpl implements IFinanceOrderDetailDao { ...@@ -33,8 +31,7 @@ public class FinanceOrderDetailDaoImpl implements IFinanceOrderDetailDao {
@Override @Override
public PageInfo<FinanceOrderDetail> selectBiFinanceCostList(FinanceCostWq wq) { public PageInfo<FinanceOrderDetail> selectBiFinanceCostList(FinanceCostWq wq) {
// 查询分页数据 // 查询分页数据
Page<Object> objectPage = TableSupport.pageI(); PageHelper.startPage(wq.getPageNum(), wq.getPageSize());
PageHelper.startPage((int) objectPage.getCurrent(), (int) objectPage.getSize());
List<FinanceOrderDetail> financeOrderDetails = detailMapper.selectBiFinanceCostList( wq); List<FinanceOrderDetail> financeOrderDetails = detailMapper.selectBiFinanceCostList( wq);
PageInfo<FinanceOrderDetail> pageInfo = new PageInfo<>(financeOrderDetails); PageInfo<FinanceOrderDetail> pageInfo = new PageInfo<>(financeOrderDetails);
......
...@@ -23,9 +23,22 @@ public class FinanceCostWq { ...@@ -23,9 +23,22 @@ public class FinanceCostWq {
private List<String> specName; private List<String> specName;
private List<String> series; private List<String> series;
private List<String> goodsName; private List<String> goodsName;
private Integer pageNum ;
private Integer pageSize ;
private Integer pageNum;
private Integer pageSize;
// 可以按照直播间类型和系列展开 null 不是展开查询 0 直播间类 1 系列
private Integer subType;
// 聚合的维度
// 直播间类型
private Boolean zbjQdTypeAll;
// 入参 口味
private Boolean flavorAll;
// 入参 规格
private Boolean specNameAll;
// 入参 系列
private Boolean seriesAll;
// 入参 商品名称
private Boolean goodsNameAll;
} }
...@@ -26,5 +26,19 @@ public class FinanceCostVo { ...@@ -26,5 +26,19 @@ public class FinanceCostVo {
private List<String> series; private List<String> series;
// 入参 商品名称 // 入参 商品名称
private List<String> goodsName; private List<String> goodsName;
// 聚合的维度
// 直播间类型
private Boolean zbjQdTypeAll;
// 入参 口味
private Boolean flavorAll;
// 入参 规格
private Boolean specNameAll;
// 入参 系列
private Boolean seriesAll;
// 入参 商品名称
private Boolean goodsNameAll;
// 可以按照直播间类型和系列展开 null 不是展开查询 0 直播间类 1 系列
private Integer subType;
} }
...@@ -13,10 +13,12 @@ import java.math.BigDecimal; ...@@ -13,10 +13,12 @@ import java.math.BigDecimal;
public class FinanceBiListDto { public class FinanceBiListDto {
// 前端展示用 // 前端展示用
private String uid; private String uid;
// 主播渠道类型--来自备注字段 // 主播渠道类型--来自备注字段
private String zbjQdType; private String zbjQdType;
// 分销商id
private String fenxiaoId;
// 分销商name
private String fenxiaoName;
// 货品名称 // 货品名称
private String goodsName; private String goodsName;
// 货品编号 // 货品编号
...@@ -25,14 +27,12 @@ public class FinanceBiListDto { ...@@ -25,14 +27,12 @@ public class FinanceBiListDto {
private String specNameErp; private String specNameErp;
// ERP口味 --来自T100的定义 // ERP口味 --来自T100的定义
private String flavorErp; private String flavorErp;
// 分摊后总价
private BigDecimal shareAmountSum; private BigDecimal shareAmountSum;
// 实际成本
private BigDecimal actualCostSum; private BigDecimal actualCostSum;
// 标准成本
private BigDecimal standardCostSum; private BigDecimal standardCostSum;
// 实际成本毛利 // 实际成本毛利
private BigDecimal actualCostGrossProfitSum; private BigDecimal actualCostGrossProfitSum;
// 标准成本毛利 // 标准成本毛利
......
package com.link.bi.pojo.response;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 财务订单明细聚合查询DTO
* @date : 2025-01-15 15:30:05
* @author : lvbencai
*/
@Data
public class FinanceExportBiListDto {
// 前端展示用
@ExcelProperty(value = "唯一值")
private String uid;
// 主播渠道类型--来自备注字段
@ExcelProperty("主播间分类")
private String zbjQdType;
// 分销商id
@ExcelProperty("分销商id")
private String fenxiaoId;
// 分销商name
@ExcelProperty("分销商名称")
private String fenxiaoName;
// 货品名称
@ExcelProperty("商品名称")
private String goodsName;
// 货品编号
@ExcelProperty("商品编号")
private String goodsNo;
// ERP规格名称 --来自T100的定义
@ExcelProperty("规格")
private String specNameErp;
// ERP口味 --来自T100的定义
@ExcelProperty("口味")
private String flavorErp;
// 分摊后总价
@ExcelProperty("分摊后总价")
private BigDecimal shareAmountSum;
// 实际成本
@ExcelProperty("实际成本")
private BigDecimal actualCostSum;
// 标准成本
@ExcelProperty("标准成本")
private BigDecimal standardCostSum;
// 实际成本毛利
@ExcelProperty("实际成本毛利")
private BigDecimal actualCostGrossProfitSum;
// 标准成本毛利
@ExcelProperty("标准成本毛利")
private BigDecimal standardCostGrossProfitSum;
}
...@@ -7,8 +7,12 @@ import com.link.bi.pojo.request.FinanceCostVo; ...@@ -7,8 +7,12 @@ import com.link.bi.pojo.request.FinanceCostVo;
import com.link.bi.pojo.response.FinanceBiListDto; import com.link.bi.pojo.response.FinanceBiListDto;
import com.link.bi.pojo.response.FinanceOrderDetailListDto; import com.link.bi.pojo.response.FinanceOrderDetailListDto;
import javax.servlet.http.HttpServletResponse;
public interface FinanceOrderDetailService extends IService<FinanceOrderDetail> { public interface FinanceOrderDetailService extends IService<FinanceOrderDetail> {
PageInfo<FinanceBiListDto> selectBiFinanceCostList(FinanceCostVo financeCostVo); PageInfo<FinanceBiListDto> selectBiFinanceCostList(FinanceCostVo financeCostVo);
PageInfo<FinanceOrderDetailListDto> selectBiFinanceCostDetailPage(FinanceCostVo financeCostVo); PageInfo<FinanceOrderDetailListDto> selectBiFinanceCostDetailPage(FinanceCostVo financeCostVo);
void exportBiFinanceCostList(FinanceCostVo financeCostVo, HttpServletResponse response);
} }
...@@ -2,6 +2,12 @@ package com.link.bi.service.impl; ...@@ -2,6 +2,12 @@ package com.link.bi.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.link.bi.domain.dao.IFinanceOrderDetailDao; import com.link.bi.domain.dao.IFinanceOrderDetailDao;
...@@ -10,14 +16,24 @@ import com.link.bi.domain.mapper.FinanceOrderDetailMapper; ...@@ -10,14 +16,24 @@ import com.link.bi.domain.mapper.FinanceOrderDetailMapper;
import com.link.bi.domain.wq.FinanceCostWq; import com.link.bi.domain.wq.FinanceCostWq;
import com.link.bi.pojo.request.FinanceCostVo; import com.link.bi.pojo.request.FinanceCostVo;
import com.link.bi.pojo.response.FinanceBiListDto; import com.link.bi.pojo.response.FinanceBiListDto;
import com.link.bi.pojo.response.FinanceExportBiListDto;
import com.link.bi.pojo.response.FinanceOrderDetailListDto; import com.link.bi.pojo.response.FinanceOrderDetailListDto;
import com.link.bi.service.FinanceOrderDetailService; import com.link.bi.service.FinanceOrderDetailService;
import com.sfa.common.core.utils.DateUtils; import com.sfa.common.core.utils.DateUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaTypeFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.MimeType;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -36,34 +52,10 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai ...@@ -36,34 +52,10 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
@Autowired @Autowired
IFinanceOrderDetailDao detailDao; IFinanceOrderDetailDao detailDao;
// @Autowired
// WangdiantongOrderService wangdiantongOrderService;
// private static final int CORE_POOL_SIZE = 5; // 核心线程数
// private static final int MAX_POOL_SIZE = 10; // 最大线程数
// private static final int KEEP_ALIVE_TIME = 60; // 线程空闲时间
//
// private ExecutorService executorService = Executors.newFixedThreadPool(CORE_POOL_SIZE);
// @Autowired
// private Executor customThreadPool;
// @Autowired
// private ThreadPoolConfig threadPoolConfig;
@Override @Override
public PageInfo<FinanceBiListDto> selectBiFinanceCostList(FinanceCostVo financeCostVo) { public PageInfo<FinanceBiListDto> selectBiFinanceCostList(FinanceCostVo financeCostVo) {
FinanceCostWq qw = new FinanceCostWq(); FinanceCostWq qw = covertFinanceCostWq(financeCostVo);
BeanUtils.copyProperties(financeCostVo, qw);
// 初始化开始日期和结束日期
if (ObjectUtil.isAllNotEmpty(qw.getStartDate(),qw.getEndDate())) {
qw.setStartDate(DateUtils.dateStart(DateUtils.dateStart(qw.getStartDate())));
qw.setEndDate(DateUtils.dateStart(DateUtils.dateStart(DateUtils.addDays(qw.getEndDate(), 1))));
}else{
//默认 t-1 天的数据查询
qw.setStartDate(DateUtils.dateStart(new Date()));
qw.setEndDate(DateUtils.dateStart(DateUtils.addDays(new Date(),-1)));
}
PageInfo<FinanceOrderDetail> orderDetailPageInfo = detailDao.selectBiFinanceCostList(qw); PageInfo<FinanceOrderDetail> orderDetailPageInfo = detailDao.selectBiFinanceCostList(qw);
PageInfo<FinanceBiListDto> pageInfo = new PageInfo<>(); PageInfo<FinanceBiListDto> pageInfo = new PageInfo<>();
BeanUtils.copyProperties(orderDetailPageInfo, pageInfo); BeanUtils.copyProperties(orderDetailPageInfo, pageInfo);
...@@ -78,6 +70,21 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai ...@@ -78,6 +70,21 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
return pageInfo; return pageInfo;
} }
private FinanceCostWq covertFinanceCostWq(FinanceCostVo financeCostVo) {
FinanceCostWq qw = new FinanceCostWq();
BeanUtils.copyProperties(financeCostVo, qw);
// 初始化开始日期和结束日期
if (ObjectUtil.isAllNotEmpty(qw.getStartDate(), qw.getEndDate())) {
qw.setStartDate(DateUtils.dateStart(DateUtils.dateStart(qw.getStartDate())));
qw.setEndDate(DateUtils.dateStart(DateUtils.dateStart(DateUtils.addDays(qw.getEndDate(), 1))));
} else {
//默认 t-1 天的数据查询
qw.setEndDate(DateUtils.dateStart(new Date()));
qw.setStartDate(DateUtils.dateStart(DateUtils.addDays(new Date(), -1)));
}
return qw;
}
@Override @Override
public PageInfo<FinanceOrderDetailListDto> selectBiFinanceCostDetailPage(FinanceCostVo financeCostVo) { public PageInfo<FinanceOrderDetailListDto> selectBiFinanceCostDetailPage(FinanceCostVo financeCostVo) {
FinanceCostWq qw = new FinanceCostWq(); FinanceCostWq qw = new FinanceCostWq();
...@@ -95,6 +102,62 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai ...@@ -95,6 +102,62 @@ public class FinanceOrderDetailServiceImpl extends ServiceImpl<FinanceOrderDetai
return pageInfo; return pageInfo;
} }
/**
* 导出数据
*/
@Override
public void exportBiFinanceCostList(FinanceCostVo financeCostVo, HttpServletResponse response) {
// 导出查询的数据
financeCostVo.setPageNum(1);
financeCostVo.setPageSize(1000000);
PageInfo<FinanceBiListDto> financeBiListDtoPageInfo = this.selectBiFinanceCostList(financeCostVo);
// easyExcel导出数据
String fileNameOri = "王小卤订单明细成本核算信息.xlsx";
// 文件名中文名需要转义
String fileName = null;
try {
fileName = URLEncoder.encode(fileNameOri, "UTF-8");
String contentType = MediaTypeFactory.getMediaType(fileName).map(MimeType::toString).orElse("application/vnd.ms-excel");
response.setContentType(contentType);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 这里需要设置不关闭流
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
//设置背景颜色
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short) 11);
headWriteCellStyle.setWriteFont(headWriteFont);
//内容策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
WriteFont contentWriteFont = new WriteFont();
// 字体大小
contentWriteFont.setFontHeightInPoints((short) 10);
contentWriteCellStyle.setWriteFont(contentWriteFont);
//设置 水平居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
Collection<?> dataList = financeBiListDtoPageInfo.getList();
EasyExcel.write(response.getOutputStream(), FinanceExportBiListDto.class)
.autoCloseStream(Boolean.FALSE)
.excelType(ExcelTypeEnum.XLSX)
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())//自动列宽策略
// .registerWriteHandler(new SalesOrderExcelWriteHandler())
.sheet("成本信息")
//获取数据填充
.doWrite(dataList);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/** /**
* 采集旺店通接口订单明细数据 * 采集旺店通接口订单明细数据
......
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
</if> </if>
<if test="wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() "> <if test="wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() ">
zbj_qd_type, zbj_qd_type,
<if test="wq.subType!= null and wq.subType == 0 ">
fenxiao_id, fenxiao_name,
</if>
</if> </if>
<if test="wq.goodsName!= null and !wq.goodsName.isEmpty() "> <if test="wq.goodsName!= null and !wq.goodsName.isEmpty() ">
goods_no,goods_name, goods_no,goods_name,
...@@ -27,39 +30,41 @@ ...@@ -27,39 +30,41 @@
</if> </if>
<if test="wq.series!= null and !wq.series.isEmpty() "> <if test="wq.series!= null and !wq.series.isEmpty() ">
series, series,
<if test="wq.subType!= null and wq.subType == 0 ">
goods_no,goods_name,
</if>
</if> </if>
sum(share_amount) as share_amount_sum, sum(share_amount) as share_amount_sum,
sum(actual_cost) as actual_cost_sum, sum(actual_cost) as actual_cost_sum,
sum(standard_cost) as standard_cost_sum sum(standard_cost) as standard_cost_sum
from finance_order_detail fod from finance_order_detail fod
<where> <where>
<if test="wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() "> <if test="(wq.zbjQdTypeAll == null or wq.zbjQdTypeAll == false) and (wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() )">
and fod.zbj_qd_type in and fod.zbj_qd_type in
<foreach collection="wq.zbjQdType" item="item" index="index" open="(" separator="," close=")"> <foreach collection="wq.zbjQdType" item="item" index="index" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="wq.goodsName!= null and !wq.goodsName.isEmpty() ">
<if test="(wq.goodsNameAll == null or wq.goodsNameAll == false) and (wq.goodsName!= null and !wq.goodsName.isEmpty())">
and fod.goods_name in and fod.goods_name in
<foreach collection="wq.goodsName" item="item" index="index" open="(" separator="," close=")"> <foreach collection="wq.goodsName" item="item" index="index" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="wq.specName!= null and !wq.specName.isEmpty() "> <if test="(wq.specNameAll ==null or wq.specNameAll == false )and (wq.specName!= null and !wq.specName.isEmpty() )">
and fod.spec_name_erp in and fod.spec_name_erp in
<foreach collection="wq.specName" item="item" index="index" open="(" separator="," close=")"> <foreach collection="wq.specName" item="item" index="index" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="wq.flavor!= null and !wq.flavor.isEmpty() "> <if test="(wq.flavorAll == null or wq.flavorAll == false) and (wq.flavor!= null and !wq.flavor.isEmpty())">
and fod.flavor_erp in and fod.flavor_erp in
<foreach collection="wq.flavor" item="item" index="index" open="(" separator="," close=")"> <foreach collection="wq.flavor" item="item" index="index" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="wq.series!= null and !wq.series.isEmpty() "> <if test="( wq.seriesAll == null or wq.seriesAll == false ) and (wq.series!= null and !wq.series.isEmpty() )">
and fod.series in and fod.series in
<foreach collection="wq.series" item="item" index="index" open="(" separator="," close=")"> <foreach collection="wq.series" item="item" index="index" open="(" separator="," close=")">
#{item} #{item}
...@@ -83,6 +88,9 @@ ...@@ -83,6 +88,9 @@
</if> </if>
<if test="wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() "> <if test="wq.zbjQdType!= null and !wq.zbjQdType.isEmpty() ">
zbj_qd_type, zbj_qd_type,
<if test="wq.subType!= null and wq.subType == 0 ">
fenxiao_id, fenxiao_name,
</if>
</if> </if>
<if test="wq.goodsName!= null and !wq.goodsName.isEmpty() "> <if test="wq.goodsName!= null and !wq.goodsName.isEmpty() ">
goods_no ,goods_name, goods_no ,goods_name,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论