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

1、成本分析页面增加页面列表导出和订单明细导出

2、财务分析基础数据-直播间分类列表查询接口
上级 bef7e2f4
package com.link.bi.config.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.link.bi.domain.entity.FinanceBaseZbjType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* 直播间分类导入监听
* @author lvbcai
* @date 2025年01月07日10:04:25
*/
@Data
@Slf4j
public class FinanceBaseZbjTypeListener extends AnalysisEventListener<FinanceBaseZbjType> {
// 存储解析后的数据
private List<FinanceBaseZbjType> dataList = new ArrayList<>();
@Override
public void invoke(FinanceBaseZbjType data, AnalysisContext context) {
// 每解析一行数据就会调用该方法
dataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 解析完所有数据后调用该方法
}
public List<FinanceBaseZbjType> getDataList() {
return dataList;
}
}
package com.link.bi.controller.query;
import com.link.bi.pojo.request.FinanceSelectCommonVo;
import com.link.bi.pojo.response.FinanceZbjTypeListDto;
import com.link.bi.service.FinanceBaseZbjTypeService;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 财务分析-直播间分类基础数据
*
* @author admin
* @date 2024-12-19
*/
@RestController
@RequestMapping("/finance/baseZbjType")
public class FinanceBaseZbjTypeController extends BaseController {
@Autowired
private FinanceBaseZbjTypeService baseZbjTypeService;
/**
* 直播间分类的页面查询
* @param commonVo
* @return
*/
@RequiresPermissions("bi:livecate:list")
@GetMapping("/list")
public List<FinanceZbjTypeListDto> baseZbjTypeAllList(FinanceSelectCommonVo commonVo) {
return baseZbjTypeService.baseZbjTypeAllList(commonVo);
}
@RequiresPermissions("bi:livecate:list")
@PostMapping("/import")
public void importData(@RequestParam("file") MultipartFile file) {
baseZbjTypeService.importData(file);
}
}
...@@ -83,16 +83,7 @@ public class FinanceOrderQueryController extends BaseController { ...@@ -83,16 +83,7 @@ public class FinanceOrderQueryController extends BaseController {
} }
/**
* 直播间分类的页面查询
* @param commonVo
* @return
*/
@RequiresPermissions("bi:finance:list")
@GetMapping("/baseZbjType/list")
public List<FinanceZbjTypeListDto> baseZbjTypeAllList(FinanceSelectCommonVo commonVo) {
return baseZbjTypeService.baseZbjTypeAllList(commonVo);
}
@RequiresPermissions("bi:finance:list") @RequiresPermissions("bi:finance:list")
......
package com.link.bi.pojo.request;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class FinanceBaseZbjTypeVo {
// 入参 分页当前页
private Integer pageNum = 1;
// 入参 分页大小
private Integer pageSize =10;
// 入参 时间开始时间
private Date startDate;
// 入参 时间结束时间
private Date endDate;
// 直播间类型
private List<String> zbjQdType;
// 入参 口味
private List<String> flavor;
// 入参 规格
private List<String> specName;
// 入参 系列
private List<String> series;
// 入参 商品名称
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;
// 查询详情时 过滤数据
private String fenxiaoId;
// 下载类型 1 达人子分类 2、分销商分类 3、订单详情
private String type;
private String typeName;
}
...@@ -18,8 +18,6 @@ public class FinanceCostVo { ...@@ -18,8 +18,6 @@ public class FinanceCostVo {
private Date endDate; private Date endDate;
// 直播间类型 // 直播间类型
private List<String> zbjQdType; private List<String> zbjQdType;
// 入参 口味 // 入参 口味
private List<String> flavor; private List<String> flavor;
// 入参 规格 // 入参 规格
...@@ -44,5 +42,8 @@ public class FinanceCostVo { ...@@ -44,5 +42,8 @@ public class FinanceCostVo {
private Integer subType; private Integer subType;
// 查询详情时 过滤数据 // 查询详情时 过滤数据
private String fenxiaoId; private String fenxiaoId;
// 下载类型 1 达人子分类 2、分销商分类 3、订单详情
private String type;
private String typeName;
} }
package com.link.bi.pojo.response;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 财务聚合后查看的详情信息,来自订单明细DTO
* @author : lvbencai
* @date : 2025-01-15 17:01:00
*/
@Data
public class FinanceExportOrderDetailListDto {
/**
* 订单编号
*/
@ExcelProperty("订单编号")
private String tradeNo;
/**
* 店铺名称
*/
@ExcelProperty("店铺名称")
private String shopName;
/**
* 原始单号
*/
@ExcelProperty("原始单号")
private String srcTid;
/**
* 原始子单号
*/
@ExcelProperty("原始子单号")
private String srcOid;
/**
* 订单状态
*/
@ExcelProperty("订单状态")
private String tradeStatus;
/**
* 交易时间
*/
@ExcelProperty("交易时间")
private String tradeTime;
/**
* 付款时间
*/
@ExcelProperty("付款时间")
private Date payTime;
/**
* 发货时间
*/
@ExcelProperty("发货时间")
private Date consignTime;
/**
* 省市县(收货地区)
*/
@ExcelProperty("收货地区(省市县)")
private String receiverArea;
/**
* 备注
*/
@ExcelProperty("备注")
private String remark;
/**
* 应收金额
*/
@ExcelProperty("应收金额")
private BigDecimal receivable;
/**
* 货品编号
*/
@ExcelProperty("货品编号")
private String goodsNo;
/**
* 货品名称
*/
@ExcelProperty("货品名称")
private String goodsName;
/**
* 规格名称
*/
@ExcelProperty("规格名称")
private String specName;
/**
* 分类(货品类型)
*/
@ExcelProperty("货品类型")
private Integer goodsType;
/**
* 数量
*/
@ExcelProperty("数量")
private BigDecimal num;
/**
* 优惠
*/
@ExcelProperty("优惠金额")
private BigDecimal discount;
/**
* 分摊后总价
*/
@ExcelProperty("分摊后总价")
private BigDecimal shareAmount;
/**
* 组合装编码
*/
@ExcelProperty("组合装编码")
private String suiteNo;
/**
* 组合装名称
*/
@ExcelProperty("组合装名称")
private String suiteName;
/**
* 组合装数量
*/
@ExcelProperty("组合装数量")
private BigDecimal suiteNum;
/**
* 赠品方式
*/
@ExcelProperty("赠品方式")
private Integer giftType;
/**
* 分销商名称
*/
@ExcelProperty("分销商名称")
private String fenxiaoName;
/**
* 分销商编号
*/
@ExcelProperty("分销商编号")
private String fenxiaoId;
/**
* 平台货品名称
*/
@ExcelProperty("平台货品名称")
private String apiGoodsName;
}
...@@ -21,7 +21,7 @@ public class FinanceOrderDetailListDto { ...@@ -21,7 +21,7 @@ public class FinanceOrderDetailListDto {
// 原始子单号 // 原始子单号
private String srcOid; private String srcOid;
// 订单状态 // 订单状态
private Integer tradeStatus; private String tradeStatus;
// 交易时间 // 交易时间
private String tradeTime; private String tradeTime;
// 付款时间 // 付款时间
......
...@@ -10,6 +10,9 @@ import lombok.Data; ...@@ -10,6 +10,9 @@ import lombok.Data;
*/ */
@Data @Data
public class FinanceZbjTypeListDto { public class FinanceZbjTypeListDto {
// 分销商名称
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long fbztId;
// 分销商名称 // 分销商名称
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
......
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.link.bi.domain.entity.FinanceBaseZbjType; import com.link.bi.domain.entity.FinanceBaseZbjType;
import com.link.bi.pojo.request.FinanceSelectCommonVo; import com.link.bi.pojo.request.FinanceSelectCommonVo;
import com.link.bi.pojo.response.FinanceZbjTypeListDto; import com.link.bi.pojo.response.FinanceZbjTypeListDto;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -19,4 +20,6 @@ public interface FinanceBaseZbjTypeService extends IService<FinanceBaseZbjType> ...@@ -19,4 +20,6 @@ public interface FinanceBaseZbjTypeService extends IService<FinanceBaseZbjType>
List<FinanceZbjTypeListDto> baseZbjTypeList(FinanceSelectCommonVo commonVo); List<FinanceZbjTypeListDto> baseZbjTypeList(FinanceSelectCommonVo commonVo);
List<FinanceZbjTypeListDto> baseZbjTypeAllList(FinanceSelectCommonVo commonVo); List<FinanceZbjTypeListDto> baseZbjTypeAllList(FinanceSelectCommonVo commonVo);
String importData(MultipartFile file);
} }
package com.link.bi.service.impl; package com.link.bi.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.link.bi.config.listener.FinanceBaseZbjTypeListener;
import com.link.bi.domain.entity.FinanceBaseZbjType; import com.link.bi.domain.entity.FinanceBaseZbjType;
import com.link.bi.domain.mapper.FinanceBaseZbjTypeMapper; import com.link.bi.domain.mapper.FinanceBaseZbjTypeMapper;
import com.link.bi.pojo.request.FinanceSelectCommonVo; import com.link.bi.pojo.request.FinanceSelectCommonVo;
...@@ -15,7 +19,11 @@ import com.link.bi.service.FinanceBaseZbjTypeService; ...@@ -15,7 +19,11 @@ import com.link.bi.service.FinanceBaseZbjTypeService;
import com.sfa.common.core.utils.bean.BeanUtils; import com.sfa.common.core.utils.bean.BeanUtils;
import com.sfa.common.core.web.page.TableSupport; import com.sfa.common.core.web.page.TableSupport;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -41,8 +49,6 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp ...@@ -41,8 +49,6 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
return map; return map;
} }
/** /**
* 分页查询 * 分页查询
* *
...@@ -98,8 +104,75 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp ...@@ -98,8 +104,75 @@ public class FinanceBaseZbjTypeServiceImpl extends ServiceImpl<FinanceBaseZbjTyp
list.forEach(item -> { list.forEach(item -> {
FinanceZbjTypeListDto dto = new FinanceZbjTypeListDto(); FinanceZbjTypeListDto dto = new FinanceZbjTypeListDto();
BeanUtils.copyProperties(item, dto); BeanUtils.copyProperties(item, dto);
// 如果fenxiaoName为空,设置为- 2025年02月07日10:35:25
if(ObjectUtil.isEmpty(dto.getFenxiaoName())){
dto.setFenxiaoName("-");
}
result.add(dto); result.add(dto);
}); });
return result; return result;
} }
/**
* 执行Excel数据全量同步
* @param file 上传的Excel文件
*/
@Transactional(rollbackFor = Exception.class)
@Override
public String importData(MultipartFile file) {
if (file.isEmpty()) {
return "文件为空,请选择有效的 Excel 文件上传。";
}
try (InputStream inputStream = file.getInputStream()) {
FinanceBaseZbjTypeListener listener = new FinanceBaseZbjTypeListener();
EasyExcel.read(inputStream, FinanceBaseZbjType.class, listener).sheet().doRead();
List<FinanceBaseZbjType> dataList = listener.getDataList();
// 3. 删除数据库中不存在于Excel的数据
deleteAbsentProducts(dataList);
// 4. 批量保存或更新数据
batchUpsertProducts(dataList);
return "文件解析并更新数据成功。";
} catch (IOException e) {
e.printStackTrace();
return "文件解析失败,请检查文件格式或内容。";
}
}
public void deleteAbsentProducts(List<FinanceBaseZbjType> dataList) {
// 获取 Excel 中所有数据的 fbztId
List<Long> excelIds = dataList.stream().map(FinanceBaseZbjType::getFbztId).collect(Collectors.toList());
// 查询数据库中所有数据
List<FinanceBaseZbjType> allDbRecords = this.list();
// 找出数据库中存在但 Excel 中不存在的记录的 fbztId
List<Long> idsToDelete = new ArrayList<>();
for (FinanceBaseZbjType dbRecord : allDbRecords) {
if (!excelIds.contains(dbRecord.getFbztId())) {
idsToDelete.add(dbRecord.getFbztId());
}
}
// 删除这些记录
if (!idsToDelete.isEmpty()) {
this.removeByIds(idsToDelete);
}
}
public void batchUpsertProducts(List<FinanceBaseZbjType> dataList) {
for (FinanceBaseZbjType data : dataList) {
if (data.getFbztId() != null) {
// 如果 fbztId 不为空,尝试更新
UpdateWrapper<FinanceBaseZbjType> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("fbzt_id", data.getFbztId());
this.update(data, updateWrapper);
} else {
// 如果 fbztId 为空,进行保存
this.save(data);
}
}
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论