vip、天医币、实物订单报表

This commit is contained in:
wuchunlei
2025-09-19 16:48:52 +08:00
parent fc15ffa30d
commit 2135bcb9fc
14 changed files with 398 additions and 99 deletions

View File

@@ -5,8 +5,10 @@ import com.peanut.modules.common.entity.BuyOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.peanut.modules.book.vo.request.BuyOrderListRequestVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 订单表
@@ -17,6 +19,11 @@ import java.util.List;
*/
@Mapper
public interface BuyOrderDao extends MPJBaseMapper<BuyOrder> {
List<Map<String,Object>> getPhysicalBuyOrderTotal(@Param("date") String date);
List<Map<String,Object>> exportPhysicalBuyOrderInfo(@Param("date") String date);
List<BuyOrder> orderList(BuyOrderListRequestVo requestVo);
int orderListCount(BuyOrderListRequestVo requestVo);

View File

@@ -3,6 +3,10 @@ package com.peanut.modules.common.dao;
import com.peanut.modules.common.entity.TransactionDetailsEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 交易明细
@@ -13,5 +17,8 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface TransactionDetailsDao extends BaseMapper<TransactionDetailsEntity> {
List<Map<String,Object>> getTransactionDetailsTotal(@Param("date") String date);
List<Map<String,Object>> getTransactionDetailsInfo(@Param("date") String date);
}

View File

@@ -11,7 +11,7 @@ import java.util.Map;
@Mapper
public interface UserVipLogDao extends BaseMapper<UserVipLog> {
List<Map<String,Object>> getUserVipLogInfoList(@Param("date") String date);
List<Map<String,Object>> getUserVipLogInfo(@Param("date") String date);
Map<String,Object> getUserVipLogInfoTotal(@Param("date") String date);
}

View File

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.peanut.modules.common.entity.BuyOrder;
import com.peanut.modules.common.entity.ExpressQueryResponse;
import com.peanut.modules.common.to.PrepareOrderDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -21,4 +23,8 @@ public interface BuyOrderService extends IService<BuyOrder> {
ExpressQueryResponse commonExpressDetail(Map params);
void updateOrderStatus(Integer userId, String orderSn, String type);
List<Map<String,Object>> getPhysicalBuyOrderTotal(String date);
List<Map<String,Object>> exportPhysicalBuyOrderInfo(String date);
}

View File

@@ -3,5 +3,12 @@ package com.peanut.modules.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.peanut.modules.common.entity.TransactionDetailsEntity;
import java.util.List;
import java.util.Map;
public interface TransactionDetailsService extends IService<TransactionDetailsEntity> {
List<Map<String,Object>> getTransactionDetailsTotal(String date);
List<Map<String,Object>> getTransactionDetailsInfo(String date);
}

View File

@@ -16,7 +16,7 @@ public interface UserVipLogService extends IService<UserVipLog> {
BigDecimal countDayAmount(UserVipLog userVipLog);
List<Map<String,Object>> getUserVipLogInfoList(String date);
List<Map<String,Object>> getUserVipLogInfo(String date);
Map<String, Object> getUserVipLogInfoTotal(String date);

View File

@@ -220,6 +220,16 @@ public class BuyOrderServiceImpl extends ServiceImpl<BuyOrderDao, BuyOrder> impl
updateById(orderEntity);
}
@Override
public List<Map<String, Object>> getPhysicalBuyOrderTotal(String date) {
return this.baseMapper.getPhysicalBuyOrderTotal(date);
}
@Override
public List<Map<String, Object>> exportPhysicalBuyOrderInfo(String date) {
return this.baseMapper.exportPhysicalBuyOrderInfo(date);
}
@Override
public ExpressQueryResponse commonExpressDetail(Map params) {
LambdaQueryWrapper<ExpressOrder> expressOrderWrapper = new LambdaQueryWrapper<>();

View File

@@ -7,7 +7,19 @@ import com.peanut.modules.common.service.TransactionDetailsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Slf4j
@Service("commonTransactionDetailsService")
public class TransactionDetailsServiceImpl extends ServiceImpl<TransactionDetailsDao, TransactionDetailsEntity> implements TransactionDetailsService {
@Override
public List<Map<String, Object>> getTransactionDetailsTotal(String date) {
return this.baseMapper.getTransactionDetailsTotal(date);
}
@Override
public List<Map<String, Object>> getTransactionDetailsInfo(String date) {
return this.baseMapper.getTransactionDetailsInfo(date);
}
}

View File

@@ -51,8 +51,8 @@ public class UserVipLogServiceImpl extends ServiceImpl<UserVipLogDao, UserVipLog
}
@Override
public List<Map<String, Object>> getUserVipLogInfoList(String date) {
return this.baseMapper.getUserVipLogInfoList(date);
public List<Map<String, Object>> getUserVipLogInfo(String date) {
return this.baseMapper.getUserVipLogInfo(date);
}
@Override

View File

@@ -0,0 +1,250 @@
package com.peanut.modules.master.controller;
import com.peanut.common.utils.R;
import com.peanut.modules.common.service.BuyOrderService;
import com.peanut.modules.common.service.TransactionDetailsService;
import com.peanut.modules.common.service.UserVipLogService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* 报表管理
*/
@Slf4j
@RestController("masterStatistics")
@RequestMapping("master/statistics")
public class StatisticsController {
@Autowired
private UserVipLogService userVipLogService;
@Autowired
private BuyOrderService buyOrderService;
@Autowired
private TransactionDetailsService transactionDetailsService;
@RequestMapping("/getTransactionDetailsTotal")
public R getTransactionDetailsTotal(@RequestBody Map<String, Object> params) {
List<Map<String,Object>> list = transactionDetailsService.getTransactionDetailsTotal(params.get("date").toString());
return R.ok().put("total", list);
}
//导出实物订单明细
@RequestMapping("/getTransactionDetailsInfo")
public void getTransactionDetailsInfo(HttpServletResponse response, @RequestBody Map<String,Object> params){
List<Map<String,Object>> maps = transactionDetailsService.getTransactionDetailsInfo(params.get("date").toString());
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("天医币明细");
//创建第一行起始为0
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("时间");
titleRow.createCell(1).setCellValue("姓名");
titleRow.createCell(2).setCellValue("电话");
titleRow.createCell(3).setCellValue("类型");
titleRow.createCell(4).setCellValue("支付方式");
titleRow.createCell(5).setCellValue("订单编号");
titleRow.createCell(6).setCellValue("变动金额");
titleRow.createCell(7).setCellValue("备注");
titleRow.createCell(8).setCellValue("商品类型");
titleRow.createCell(9).setCellValue("商品名称");
//序号默认为1
int cell = 1;
//遍历
for (Map<String,Object> map : maps) {
Row row = sheet.createRow(cell);
row.createCell(0).setCellValue(map.get("createTime").toString());
row.createCell(1).setCellValue(map.get("name").toString());
row.createCell(2).setCellValue(map.get("tel").toString());
row.createCell(3).setCellValue(map.get("type").toString());
row.createCell(4).setCellValue(map.get("payType").toString());
row.createCell(5).setCellValue(map.get("orderSn").toString());
row.createCell(6).setCellValue(map.get("changeAmount").toString());
row.createCell(7).setCellValue(map.get("note").toString());
row.createCell(8).setCellValue(map.get("goodsType").toString());
row.createCell(9).setCellValue(map.get("productName").toString());
//序号自增
cell++;
}
String fileName = "天医币明细.xlsx";
OutputStream outputStream =null;
try {
//文件名编码格式
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置ContentType请求信息格式
response.setContentType("application/vnd.ms-excel");
//设置标头
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@RequestMapping("/getPhysicalBuyOrderInfoTotal")
public R getPhysicalBuyOrderInfoTotal(@RequestBody Map<String, Object> params) {
List<Map<String,Object>> list = buyOrderService.getPhysicalBuyOrderTotal(params.get("date").toString());
return R.ok().put("total", list);
}
//导出实物订单明细
@RequestMapping("/exportPhysicalBuyOrderInfo")
public void exportPhysicalBuyOrderInfo(HttpServletResponse response, @RequestBody Map<String,Object> params){
List<Map<String,Object>> maps = buyOrderService.exportPhysicalBuyOrderInfo(params.get("date").toString());
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("实物订单明细");
//创建第一行起始为0
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("时间");
titleRow.createCell(1).setCellValue("姓名");
titleRow.createCell(2).setCellValue("电话");
titleRow.createCell(3).setCellValue("订单号");
titleRow.createCell(4).setCellValue("订单状态");
titleRow.createCell(5).setCellValue("支付方式");
titleRow.createCell(6).setCellValue("订单金额");
titleRow.createCell(7).setCellValue("实物金额");
titleRow.createCell(8).setCellValue("商品名称");
//序号默认为1
int cell = 1;
//遍历
for (Map<String,Object> map : maps) {
Row row = sheet.createRow(cell);
row.createCell(0).setCellValue(map.get("createTime").toString());
row.createCell(1).setCellValue(map.get("name").toString());
row.createCell(2).setCellValue(map.get("tel").toString());
row.createCell(3).setCellValue(map.get("orderSn").toString());
row.createCell(4).setCellValue(map.get("orderStatus").toString());
row.createCell(5).setCellValue(map.get("payType").toString());
row.createCell(6).setCellValue(map.get("orderPrice").toString());
row.createCell(7).setCellValue(map.get("price").toString());
row.createCell(8).setCellValue(map.get("productName").toString());
//序号自增
cell++;
}
String fileName = "实物订单明细.xlsx";
OutputStream outputStream =null;
try {
//文件名编码格式
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置ContentType请求信息格式
response.setContentType("application/vnd.ms-excel");
//设置标头
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@RequestMapping("/getUserVipLogInfoTotal")
public R getUserVipLogInfoTotal(@RequestBody Map<String, Object> params) {
Map<String,Object> map = userVipLogService.getUserVipLogInfoTotal(params.get("date").toString());
return R.ok().put("total", map);
}
//导出vip记录明细
@RequestMapping("/exportUserVipLogInfo")
public void exportUserVipLogInfo(HttpServletResponse response, @RequestBody Map<String,Object> params){
List<Map<String,Object>> maps = userVipLogService.getUserVipLogInfo(params.get("date").toString());
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("vip记录明细");
//创建第一行起始为0
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("姓名");
titleRow.createCell(1).setCellValue("电话");
titleRow.createCell(2).setCellValue("VIP类型");
titleRow.createCell(3).setCellValue("开始时间");
titleRow.createCell(4).setCellValue("结束时间");
titleRow.createCell(5).setCellValue("订单号");
titleRow.createCell(6).setCellValue("支付方式");
titleRow.createCell(7).setCellValue("备注");
titleRow.createCell(8).setCellValue("金额");
titleRow.createCell(9).setCellValue("总天数");
titleRow.createCell(10).setCellValue("每日摊销");
titleRow.createCell(11).setCellValue("已摊销天数");
titleRow.createCell(12).setCellValue("当月摊销天数");
titleRow.createCell(13).setCellValue("未摊销天数");
titleRow.createCell(14).setCellValue("已摊销金额");
titleRow.createCell(15).setCellValue("当月摊销金额");
titleRow.createCell(16).setCellValue("剩余摊销金额");
//序号默认为1
int cell = 1;
//遍历
for (Map<String,Object> map : maps) {
Row row = sheet.createRow(cell);
row.createCell(0).setCellValue(map.get("name").toString());
row.createCell(1).setCellValue(map.get("tel").toString());
row.createCell(2).setCellValue(map.get("type").toString());
row.createCell(3).setCellValue(map.get("startTime").toString());
row.createCell(4).setCellValue(map.get("endTime").toString());
row.createCell(5).setCellValue(map.get("orderSn").toString());
row.createCell(6).setCellValue(map.get("payType").toString());
row.createCell(7).setCellValue(map.get("remark").toString());
row.createCell(8).setCellValue(map.get("fee").toString());
row.createCell(9).setCellValue(map.get("totalDays").toString());
row.createCell(10).setCellValue(map.get("dayAmount").toString());
row.createCell(11).setCellValue(map.get("alreadyDays").toString());
row.createCell(12).setCellValue(map.get("currentDays").toString());
row.createCell(13).setCellValue(map.get("notyetDays").toString());
row.createCell(14).setCellValue(map.get("alreadyTanxiao").toString());
row.createCell(15).setCellValue(map.get("currentTanxiao").toString());
row.createCell(16).setCellValue(map.get("notyetTanxiao").toString());
//序号自增
cell++;
}
String fileName = "vip记录明细.xlsx";
OutputStream outputStream =null;
try {
//文件名编码格式
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置ContentType请求信息格式
response.setContentType("application/vnd.ms-excel");
//设置标头
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -11,21 +11,14 @@ import com.peanut.modules.common.service.JfTransactionDetailsService;
import com.peanut.modules.common.service.UserVipLogService;
import com.peanut.modules.master.service.MyUserService;
import com.peanut.modules.master.service.UserVipService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.transaction.Transactional;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
/**
@@ -47,92 +40,6 @@ public class UserVipController {
@Autowired
private JfTransactionDetailsService jfTransactionDetailsService;
@RequestMapping("/getUserVipLogInfoTotal")
public R getUserVipLogInfoTotal(@RequestBody Map<String, Object> params) {
Map<String,Object> map = userVipLogService.getUserVipLogInfoTotal(params.get("date").toString());
return R.ok().put("total", map);
}
@RequestMapping("/getUserVipLogInfoList")
public R getUserVipLogInfoList(@RequestBody Map<String, Object> params) {
List<Map<String,Object>> maps = userVipLogService.getUserVipLogInfoList(params.get("date").toString());
return R.ok().put("list", maps);
}
//导出vip记录明细
@RequestMapping("/exportUserVipLogInfo")
public void exportUserVipLogInfo(HttpServletResponse response, @RequestBody Map<String,Object> params){
List<Map<String,Object>> maps = userVipLogService.getUserVipLogInfoList(params.get("date").toString());
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("vip记录明细");
//创建第一行起始为0
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("姓名");
titleRow.createCell(1).setCellValue("电话");
titleRow.createCell(2).setCellValue("VIP类型");
titleRow.createCell(3).setCellValue("开始时间");
titleRow.createCell(4).setCellValue("结束时间");
titleRow.createCell(5).setCellValue("订单号");
titleRow.createCell(6).setCellValue("支付方式");
titleRow.createCell(7).setCellValue("备注");
titleRow.createCell(8).setCellValue("金额");
titleRow.createCell(9).setCellValue("总天数");
titleRow.createCell(10).setCellValue("每日摊销");
titleRow.createCell(11).setCellValue("已摊销天数");
titleRow.createCell(12).setCellValue("当月摊销天数");
titleRow.createCell(13).setCellValue("未摊销天数");
titleRow.createCell(14).setCellValue("已摊销金额");
titleRow.createCell(15).setCellValue("当月摊销金额");
titleRow.createCell(16).setCellValue("剩余摊销金额");
//序号默认为1
int cell = 1;
//遍历
for (Map<String,Object> map : maps) {
Row row = sheet.createRow(cell);
row.createCell(0).setCellValue(map.get("name").toString());
row.createCell(1).setCellValue(map.get("tel").toString());
row.createCell(2).setCellValue(map.get("type").toString());
row.createCell(3).setCellValue(map.get("startTime").toString());
row.createCell(4).setCellValue(map.get("endTime").toString());
row.createCell(5).setCellValue(map.get("orderSn").toString());
row.createCell(6).setCellValue(map.get("payType").toString());
row.createCell(7).setCellValue(map.get("remark").toString());
row.createCell(8).setCellValue(map.get("fee").toString());
row.createCell(9).setCellValue(map.get("totalDays").toString());
row.createCell(10).setCellValue(map.get("dayAmount").toString());
row.createCell(11).setCellValue(map.get("alreadyDays").toString());
row.createCell(12).setCellValue(map.get("currentDays").toString());
row.createCell(13).setCellValue(map.get("notyetDays").toString());
row.createCell(14).setCellValue(map.get("alreadyTanxiao").toString());
row.createCell(15).setCellValue(map.get("currentTanxiao").toString());
row.createCell(16).setCellValue(map.get("notyetTanxiao").toString());
//序号自增
cell++;
}
String fileName = "vip记录明细.xlsx";
OutputStream outputStream =null;
try {
//文件名编码格式
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置ContentType请求信息格式
response.setContentType("application/vnd.ms-excel");
//设置标头
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@RequestMapping("/getUserVipList")
public R getUserVipList(@RequestBody Map<String, Object> params) {
MPJLambdaWrapper<MyUserEntity> wrapper = new MPJLambdaWrapper();
@@ -153,6 +60,9 @@ public class UserVipController {
if (params.containsKey("state")&& StringUtils.isNotEmpty(params.get("state").toString())) {
wrapper.eq(UserVip::getState,params.get("state"));
}
if (params.containsKey("isLog")&& StringUtils.isNotEmpty(params.get("isLog").toString())) {
wrapper.inSql(UserVip::getUserId,"select user_id from (select uv.*,uvl.id uvlid from user_vip uv left join user_vip_log uvl on uvl.user_vip_id = uv.id where uv.del_flag = 0 ) t where t.uvlid is null group by user_id");
}
wrapper.groupBy(UserVip::getUserId);
Page<MyUserEntity> page = userService.page(new Page<>(
Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())), wrapper);