添加导出结算单功能

This commit is contained in:
lifenlong 2021-08-13 18:16:13 +08:00
parent 7941b74efb
commit 7aa99497e5
8 changed files with 255 additions and 5 deletions

View File

@ -52,10 +52,10 @@ public class StoreFlow {
@ApiModelProperty(value = "售后SN")
private String refundSn;
@ApiModelProperty(value = "商家id")
@ApiModelProperty(value = "店铺id")
private String storeId;
@ApiModelProperty(value = "商家名称 ")
@ApiModelProperty(value = "店铺名称 ")
private String storeName;
@ApiModelProperty(value = "会员id")

View File

@ -1,7 +1,15 @@
package cn.lili.modules.order.order.mapper;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO;
import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 商家订单流水数据处理层
@ -10,4 +18,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @since 2020/11/17 7:35 下午
*/
public interface StoreFlowMapper extends BaseMapper<StoreFlow> {
@Select("SELECT * FROM li_store_flow ${ew.customSqlSegment}")
List<StoreFlowPayDownloadVO> getStoreFlowPayDownloadVO(@Param(Constants.WRAPPER) Wrapper<StoreFlow> queryWrapper);
@Select("SELECT * FROM li_store_flow ${ew.customSqlSegment}")
List<StoreFlowRefundDownloadVO> getStoreFlowRefundDownloadVO(@Param(Constants.WRAPPER) Wrapper<StoreFlow> queryWrapper);
}

View File

@ -0,0 +1,61 @@
package cn.lili.modules.store.entity.vos;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 店铺流水下载
* @author Bulbasaur
* @date: 2021/8/13 4:14 下午
*
*/
@Data
public class StoreFlowPayDownloadVO {
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间", hidden = true)
private Date createTime;
@ApiModelProperty(value = "订单sn")
private String orderSn;
@ApiModelProperty(value = "店铺名称 ")
private String storeName;
@ApiModelProperty(value = "商品名称")
private String goodsName;
@ApiModelProperty(value = "销售量")
private Integer num;
@ApiModelProperty(value = "流水金额")
private Double finalPrice;
@ApiModelProperty(value = "平台收取交易佣金")
private Double commissionPrice;
@ApiModelProperty(value = "平台优惠券 使用金额")
private Double siteCouponPrice;
@ApiModelProperty(value = "单品分销返现支出")
private Double distributionRebate;
@ApiModelProperty(value = "积分活动商品结算价格")
private Double pointSettlementPrice;
@ApiModelProperty(value = "砍价活动商品结算价格")
private Double kanjiaSettlementPrice;
@ApiModelProperty(value = "最终结算金额")
private Double billPrice;
}

View File

@ -0,0 +1,64 @@
package cn.lili.modules.store.entity.vos;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 店铺流水下载
* @author Bulbasaur
* @date: 2021/8/13 4:14 下午
*
*/
@Data
public class StoreFlowRefundDownloadVO {
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间", hidden = true)
private Date createTime;
@ApiModelProperty(value = "订单sn")
private String orderSn;
@ApiModelProperty(value = "售后SN")
private String refundSn;
@ApiModelProperty(value = "店铺名称 ")
private String storeName;
@ApiModelProperty(value = "商品名称")
private String goodsName;
@ApiModelProperty(value = "销售量")
private Integer num;
@ApiModelProperty(value = "流水金额")
private Double finalPrice;
@ApiModelProperty(value = "平台收取交易佣金")
private Double commissionPrice;
@ApiModelProperty(value = "平台优惠券 使用金额")
private Double siteCouponPrice;
@ApiModelProperty(value = "单品分销返现支出")
private Double distributionRebate;
@ApiModelProperty(value = "积分活动商品结算价格")
private Double pointSettlementPrice;
@ApiModelProperty(value = "砍价活动商品结算价格")
private Double kanjiaSettlementPrice;
@ApiModelProperty(value = "最终结算金额")
private Double billPrice;
}

View File

@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.cache.annotation.CacheConfig;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
/**
@ -92,4 +93,9 @@ public interface BillService extends IService<Bill> {
*/
Integer billNum(BillStatusEnum billStatusEnum);
/**
* 下载结算单
* @param id 结算单ID
*/
void download(HttpServletResponse response, String id);
}

View File

@ -2,26 +2,32 @@ package cn.lili.modules.store.serviceimpl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.utils.SnowFlake;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
import cn.lili.modules.order.order.entity.enums.FlowTypeEnum;
import cn.lili.modules.order.order.mapper.StoreFlowMapper;
import cn.lili.modules.order.order.service.StoreFlowService;
import cn.lili.modules.store.entity.dos.Bill;
import cn.lili.modules.store.entity.dto.BillSearchParams;
import cn.lili.modules.store.entity.enums.BillStatusEnum;
import cn.lili.modules.store.entity.vos.BillListVO;
import cn.lili.modules.store.entity.vos.StoreDetailVO;
import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO;
import cn.lili.modules.store.mapper.BillMapper;
import cn.lili.modules.store.service.BillService;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -32,7 +38,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
/**
* 结算单业务层实现
@ -54,6 +65,8 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
*/
@Autowired
private StoreFlowService storeFlowService;
@Resource
private StoreFlowMapper storeFlowMapper;
@Override
public void createBill(String storeId, Date startTime, DateTime endTime) {
@ -210,4 +223,85 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
return this.count(lambdaUpdateWrapper);
}
public void download(HttpServletResponse response, String id) {
Bill bill = this.getById(id);
ExcelWriter writer = ExcelUtil.getWriterWithSheet("入账订单");
writer.setSheet("入账订单");
writer.addHeaderAlias("createTime", "入账时间");
writer.setColumnWidth(0, 20);
writer.addHeaderAlias("orderSn", "订单编号");
writer.setColumnWidth(1, 35);
writer.addHeaderAlias("storeName", "店铺名称");
writer.setColumnWidth(2, 20);
writer.addHeaderAlias("goodsName", "商品名称");
writer.setColumnWidth(3, 70);
writer.addHeaderAlias("num", "销售量");
writer.addHeaderAlias("finalPrice", "订单金额");
writer.addHeaderAlias("commissionPrice", "平台分佣");
writer.addHeaderAlias("siteCouponPrice", "平台优惠券");
writer.setColumnWidth(7, 12);
writer.addHeaderAlias("distributionRebate", "分销金额");
writer.addHeaderAlias("pointSettlementPrice", "积分结算金额");
writer.setColumnWidth(9, 12);
writer.addHeaderAlias("kanjiaSettlementPrice", "砍价结算金额");
writer.setColumnWidth(10, 12);
writer.addHeaderAlias("billPrice", "应结金额");
writer.setColumnWidth(11, 20);
//存放入账列表
LambdaQueryWrapper<StoreFlow> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId());
lambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime());
lambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name());
List<StoreFlowPayDownloadVO> storeFlowList = storeFlowMapper.getStoreFlowPayDownloadVO(lambdaQueryWrapper);
writer.write(storeFlowList, true);
writer.setSheet("退款订单");
writer.addHeaderAlias("createTime", "入账时间");
writer.setColumnWidth(0, 20);
writer.addHeaderAlias("orderSn", "订单编号");
writer.setColumnWidth(1, 35);
writer.addHeaderAlias("refundSn", "售后单号");
writer.setColumnWidth(2, 35);
writer.addHeaderAlias("storeName", "店铺名称");
writer.setColumnWidth(3, 20);
writer.addHeaderAlias("goodsName", "商品名称");
writer.setColumnWidth(4, 70);
writer.addHeaderAlias("num", "销售量");
writer.addHeaderAlias("finalPrice", "退款金额");
writer.addHeaderAlias("commissionPrice", "平台分佣");
writer.addHeaderAlias("siteCouponPrice", "平台优惠券");
writer.setColumnWidth(8, 12);
writer.addHeaderAlias("distributionRebate", "分销金额");
writer.addHeaderAlias("pointSettlementPrice", "积分结算金额");
writer.setColumnWidth(10, 12);
writer.addHeaderAlias("kanjiaSettlementPrice", "砍价结算金额");
writer.setColumnWidth(11, 12);
writer.addHeaderAlias("billPrice", "结算金额");
writer.setColumnWidth(12, 20);
//存放入账列表
LambdaQueryWrapper<StoreFlow> storeFlowlambdaQueryWrapper = Wrappers.lambdaQuery();
storeFlowlambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId());
storeFlowlambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime());
storeFlowlambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name());
storeFlowList = storeFlowMapper.getStoreFlowPayDownloadVO(storeFlowlambdaQueryWrapper);
writer.write(storeFlowList, true);
ServletOutputStream out = null;
try {
//设置公共属性列表名称
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(bill.getStoreName() + "-" + bill.getSn(), "UTF8") + ".xls");
out = response.getOutputStream();
writer.flush(out, true);
} catch (Exception e) {
log.error("下载结算单错误", e);
} finally {
writer.close();
IoUtil.close(out);
}
}
}

View File

@ -1,5 +1,6 @@
package cn.lili.controller.trade;
import cn.lili.common.context.ThreadContextHolder;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
@ -16,6 +17,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
* 店铺端,结算单接口
*
@ -69,4 +72,14 @@ public class BillStoreController {
billService.check(id);
return ResultUtil.success();
}
@ApiOperation(value = "下载结算单",produces="application/octet-stream")
@ApiImplicitParam(name = "id", value = "结算单ID", required = true, paramType = "path", dataType = "String")
@GetMapping(value = "/downLoad/{id}")
public void downLoadDeliverExcel(@PathVariable String id) {
HttpServletResponse response = ThreadContextHolder.getHttpResponse();
billService.download(response,id);
}
}

View File

@ -150,8 +150,6 @@ public class OrderStoreController {
//下载订单批量发货Excel
this.orderService.getBatchDeliverList(response,logisticsName);
//return ResultUtil.success(ResultCode.SUCCESS);
}
@PostMapping(value = "/batchDeliver", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)