diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index 5083bb79..5d3a7d33 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -1,6 +1,7 @@ package cn.lili.event.impl; +import cn.hutool.core.convert.Convert; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.StringUtils; import cn.lili.event.AfterSaleStatusChangeEvent; @@ -98,6 +99,12 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //赠送会员积分 memberService.updateMemberPoint(point.longValue(), PointTypeEnum.INCREASE.name(), order.getMemberId(), "会员下单,赠送积分" + point + "分"); //取消订单恢复积分 + } else if (orderMessage.getNewStatus().equals(OrderStatusEnum.CANCELLED)) { + //根据订单编号获取订单数据,如果为积分订单则跳回 + Order order = orderService.getBySn(orderMessage.getOrderSn()); + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name()) && order.getPriceDetailDTO().getPayPoint() != null) { + memberService.updateMemberPoint(Convert.toLong(order.getPriceDetailDTO().getPayPoint()), PointTypeEnum.INCREASE.name(), order.getMemberId(), "订单取消,恢复积分:" + order.getPriceDetailDTO().getPayPoint() + "分"); + } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java index ba55c254..7123dcb0 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java @@ -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") diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/StoreFlowMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/StoreFlowMapper.java index faffdc4f..e1ce3885 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/StoreFlowMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/StoreFlowMapper.java @@ -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 { + + @Select("SELECT * FROM li_store_flow ${ew.customSqlSegment}") + List getStoreFlowPayDownloadVO(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + @Select("SELECT * FROM li_store_flow ${ew.customSqlSegment}") + List getStoreFlowRefundDownloadVO(@Param(Constants.WRAPPER) Wrapper queryWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowPayDownloadVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowPayDownloadVO.java new file mode 100644 index 00000000..e55b1532 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowPayDownloadVO.java @@ -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; +} diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java new file mode 100644 index 00000000..303745c1 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java @@ -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; +} diff --git a/framework/src/main/java/cn/lili/modules/store/service/BillService.java b/framework/src/main/java/cn/lili/modules/store/service/BillService.java index afba9cc1..3080378b 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/BillService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/BillService.java @@ -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 { */ Integer billNum(BillStatusEnum billStatusEnum); + /** + * 下载结算单 + * @param id 结算单ID + */ + void download(HttpServletResponse response, String id); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index 986f2734..6b4ee348 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -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 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 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 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 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 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); + } + } + } diff --git a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java b/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java index f027ea03..10d5e1eb 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java @@ -81,7 +81,7 @@ public class AfterSaleManagerController { @ApiImplicitParam(name = "remark", value = "备注", paramType = "query"), @ApiImplicitParam(name = "actualRefundPrice", value = "实际退款金额", paramType = "query") }) - @PutMapping(value = "/confirm/{afterSaleSn}") + @PutMapping(value = "/review/{afterSaleSn}") public ResultMessage review(@NotNull(message = "请选择售后单") @PathVariable String afterSaleSn, @NotNull(message = "请审核") String serviceStatus, String remark, diff --git a/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java index 8e18e1f4..da6753c5 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java @@ -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); + + } + } diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index f73bfec7..94775edd 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -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)