wangjinhao_branch
wangjinhao 9 months ago
parent bee0c07210
commit a597835462

@ -0,0 +1,309 @@
/*
* Copyright (c) 2018-2999 广 All rights reserved.
*
* https://www.mall4j.com/
*
*
*
*
*/
package com.yami.shop.admin.controller; // 定义类所在的包
import cn.hutool.core.date.DatePattern; // 引入Hutool工具类库中的日期格式化工具类
import cn.hutool.core.date.DateUtil; // 引入Hutool工具类库中的日期工具类
import cn.hutool.core.io.IORuntimeException; // 引入Hutool工具类库中的IO运行时异常类
import cn.hutool.core.io.IoUtil; // 引入Hutool工具类库中的IO工具类
import cn.hutool.poi.excel.ExcelUtil; // 引入Hutool工具类库中的Excel工具类
import cn.hutool.poi.excel.ExcelWriter; // 引入Hutool工具类库中的Excel写入工具类
import com.baomidou.mybatisplus.core.metadata.IPage; // 引入MyBatis-Plus的分页接口
import com.google.common.base.Objects; // 引入Google Guava库中的Objects工具类
import com.yami.shop.bean.enums.OrderStatus; // 引入订单状态枚举类
import com.yami.shop.bean.model.Order; // 引入订单模型类
import com.yami.shop.bean.model.OrderItem; // 引入订单项模型类
import com.yami.shop.bean.model.UserAddrOrder; // 引入用户地址订单模型类
import com.yami.shop.bean.param.DeliveryOrderParam; // 引入发货订单参数类
import com.yami.shop.bean.param.OrderParam; // 引入订单参数类
import com.yami.shop.common.exception.YamiShopBindException; // 引入自定义异常类
import com.yami.shop.common.response.ServerResponseEntity; // 引入服务器响应实体类
import com.yami.shop.common.util.PageParam; // 引入分页参数工具类
import com.yami.shop.security.admin.util.SecurityUtils; // 引入安全工具类
import com.yami.shop.service.*; // 引入各种服务类
import jakarta.servlet.ServletOutputStream; // 引入Servlet输出流类
import jakarta.servlet.http.HttpServletResponse; // 引入HTTP响应类
import lombok.extern.slf4j.Slf4j; // 引入Lombok的日志记录注解
import org.apache.poi.ss.usermodel.Sheet; // 引入Apache POI的Sheet类
import org.springframework.beans.factory.annotation.Autowired; // 引入Spring的@Autowired注解
import org.springframework.format.annotation.DateTimeFormat; // 引入Spring的日期时间格式化注解
import org.springframework.security.access.prepost.PreAuthorize; // 引入Spring Security的PreAuthorize注解
import org.springframework.web.bind.annotation.*; // 引入Spring Web的注解
import java.io.IOException; // 引入Java的IO异常类
import java.util.Arrays; // 引入Java的Arrays工具类
import java.util.Date; // 引入Java的Date类
import java.util.List; // 引入Java的List接口
/**
* OrderController
* @ lgh on 2018/09/15.
*/
@Slf4j // 标注这是一个需要日志记录的类
@RestController // 标注这是一个控制器类并且其返回结果直接写入HTTP响应体中而不是视图名称
@RequestMapping("/order/order") // 定义请求路径的根地址为/order/order
public class OrderController {
@Autowired
private OrderService orderService; // 自动注入订单服务类
@Autowired
private OrderItemService orderItemService; // 自动注入订单项服务类
@Autowired
private UserAddrOrderService userAddrOrderService; // 自动注入用户地址订单服务类
@Autowired
private ProductService productService; // 自动注入商品服务类
@Autowired
private SkuService skuService; // 自动注入SKU服务类
/**
*
* @param orderParam
* @param page
* @return
*/
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('order:order:page')") // 权限检查
public ServerResponseEntity<IPage<Order>> page(OrderParam orderParam, PageParam<Order> page) {
Long shopId = SecurityUtils.getSysUser().getShopId();
orderParam.setShopId(shopId);
IPage<Order> orderPage = orderService.pageOrdersDetailByOrderParam(page, orderParam);
return ServerResponseEntity.success(orderPage); // 返回分页结果
}
/**
*
* @param orderNumber
* @return
*/
@GetMapping("/orderInfo/{orderNumber}")
@PreAuthorize("@pms.hasPermission('order:order:info')") // 权限检查
public ServerResponseEntity<Order> info(@PathVariable("orderNumber") String orderNumber) {
Long shopId = SecurityUtils.getSysUser().getShopId();
Order order = orderService.getOrderByOrderNumber(orderNumber);
if (!Objects.equal(shopId, order.getShopId())) {
throw new YamiShopBindException("您没有权限获取该订单信息");
}
List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(orderNumber);
order.setOrderItems(orderItems);
UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
order.setUserAddrOrder(userAddrOrder);
return ServerResponseEntity.success(order);
}
/**
*
* @param deliveryOrderParam
* @return
*/
@PutMapping("/delivery")
@PreAuthorize("@pms.hasPermission('order:order:delivery')") // 权限检查
public ServerResponseEntity<Void> delivery(@RequestBody DeliveryOrderParam deliveryOrderParam) {
Long shopId = SecurityUtils.getSysUser().getShopId();
Order order = orderService.getOrderByOrderNumber(deliveryOrderParam.getOrderNumber());
if (!Objects.equal(shopId, order.getShopId())) {
throw new YamiShopBindException("您没有权限修改该订单信息");
}
Order orderParam = new Order();
orderParam.setOrderId(order.getOrderId());
orderParam.setDvyId(deliveryOrderParam.getDvyId());
orderParam.setDvyFlowId(deliveryOrderParam.getDvyFlowId());
orderParam.setDvyTime(new Date());
orderParam.setStatus(OrderStatus.CONSIGNMENT.value());
orderParam.setUserId(order.getUserId());
orderService.delivery(orderParam);
List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(deliveryOrderParam.getOrderNumber());
for (OrderItem orderItem : orderItems) {
productService.removeProductCacheByProdId(orderItem.getProdId());
skuService.removeSkuCacheBySkuId(orderItem.getSkuId(), orderItem.getProdId());
}
return ServerResponseEntity.success();
}
/**
*
* @param order
* @param consignmentName
* @param consignmentMobile
* @param consignmentAddr
* @param startTime
* @param endTime
* @param response HTTP
*/
* @param order
* @param startTime
* @param endTime
* @param response HTTP
*/
@GetMapping("/waitingConsignmentExcel")
@PreAuthorize("@pms.hasPermission('order:order:waitingConsignmentExcel')") // 权限检查
public void waitingConsignmentExcel(Order order, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime, String consignmentName, String consignmentMobile,
String consignmentAddr, HttpServletResponse response) {
Long shopId = SecurityUtils.getSysUser().getShopId();
order.setShopId(shopId);
order.setStatus(OrderStatus.PADYED.value());
List<Order> orders = orderService.listOrdersDetailByOrder(order, startTime, endTime);
// 通过工具类创建ExcelWriter
ExcelWriter writer = ExcelUtil.getBigWriter();
Sheet sheet = writer.getSheet();
sheet.setColumnWidth(0, 20 * 256);
sheet.setColumnWidth(1, 20 * 256);
sheet.setColumnWidth(2, 20 * 256);
sheet.setColumnWidth(3, 60 * 256);
sheet.setColumnWidth(4, 60 * 256);
sheet.setColumnWidth(7, 60 * 256);
sheet.setColumnWidth(8, 60 * 256);
sheet.setColumnWidth(9, 60 * 256);
// 待发货
String[] hearder = {"订单编号", "收件人", "手机", "收货地址", "商品名称", "数量", "发件人姓名", "发件人手机号", "发货地址", "备注"};
writer.merge(hearder.length - 1, "发货信息整理");
writer.writeRow(Arrays.asList(hearder));
int row = 1;
for (Order dbOrder : orders) {
UserAddrOrder addr = dbOrder.getUserAddrOrder();
String addrInfo = addr.getProvince() + addr.getCity() + addr.getArea() + addr.getAddr();
List<OrderItem> orderItems = dbOrder.getOrderItems();
row++;
for (OrderItem orderItem : orderItems) {
// 第0列开始
int col = 0;
writer.writeCellValue(col++, row, dbOrder.getOrderNumber());
writer.writeCellValue(col++, row, addr.getReceiver());
writer.writeCellValue(col++, row, addr.getMobile());
writer.writeCellValue(col++, row, addrInfo);
writer.writeCellValue(col++, row, orderItem.getProdName());
writer.writeCellValue(col++, row, orderItem.getProdCount());
writer.writeCellValue(col++, row, consignmentName);
writer.writeCellValue(col++, row, consignmentMobile);
writer.writeCellValue(col++, row, consignmentAddr);
writer.writeCellValue(col++, row, dbOrder.getRemarks());
}
}
writeExcel(response, writer);
}
/**
*
* @param order
* @param startTime
* @param endTime
* @param response HTTP
*/
@GetMapping("/soldExcel")
@PreAuthorize("@pms.hasPermission('order:order:soldExcel')") // 权限检查
public void soldExcel(Order order, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime, HttpServletResponse response) {
Long shopId = SecurityUtils.getSysUser().getShopId();
order.setShopId(shopId);
order.setIsPayed(1);
List<Order> orders = orderService.listOrdersDetailByOrder(order, startTime, endTime);
// 通过工具类创建ExcelWriter
ExcelWriter writer = ExcelUtil.getBigWriter();
String[] hearder = {"订单编号", "下单时间", "收件人", "手机", "收货地址", "商品名称", "数量", "订单应付", "订单运费", "订单实付"};
Sheet sheet = writer.getSheet();
sheet.setColumnWidth(0, 20 * 256);
sheet.setColumnWidth(1, 20 * 256);
sheet.setColumnWidth(3, 20 * 256);
sheet.setColumnWidth(4, 60 * 256);
sheet.setColumnWidth(5, 60 * 256);
writer.merge(hearder.length - 1, "销售信息整理");
writer.writeRow(Arrays.asList(hearder));
int row = 1;
for (Order dbOrder : orders) {
UserAddrOrder addr = dbOrder.getUserAddrOrder();
String addrInfo = addr.getProvince() + addr.getCity() + addr.getArea() + addr.getAddr();
List<OrderItem> orderItems = dbOrder.getOrderItems();
int firstRow = row + 1;
int lastRow = row + orderItems.size();
int col = -1;
// 订单编号
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getOrderNumber());
// 下单时间
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getCreateTime());
// 收件人
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addr.getReceiver());
// 手机
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addr.getMobile());
// 收货地址
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addrInfo);
int prodNameCol = ++col;
int prodCountCol = ++col;
for (OrderItem orderItem : orderItems) {
row++;
// 商品名称
writer.writeCellValue(prodNameCol, row, orderItem.getProdName());
// 数量
writer.writeCellValue(prodCountCol, row, orderItem.getProdCount());
}
// 订单应付
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getTotal());
// 订单运费
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getFreightAmount());
// 订单实付
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getActualTotal());
}
writeExcel(response, writer);
}
/**
*
* @param writer ExcelWriter
* @param firstRow
* @param lastRow
* @param firstColumn
* @param lastColumn
* @param content
*/
private void mergeIfNeed(ExcelWriter writer, int firstRow, int lastRow, int firstColumn, int lastColumn, Object content) {
if (content instanceof Date) {
content = DateUtil.format((Date) content, DatePattern.NORM_DATETIME_PATTERN);
}
if (lastRow - firstRow > 0 || lastColumn - firstColumn > 0) {
writer.merge(firstRow, lastRow, firstColumn, lastColumn, content, false);
} else {
writer.writeCellValue(firstColumn, firstRow, content);
}
}
/**
* Excel
* @param response HTTP
* @param writer ExcelWriter
*/
private void writeExcel(HttpServletResponse response, ExcelWriter writer) {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=1.xls");
ServletOutputStream servletOutputStream = null;
try {
servletOutputStream = response.getOutputStream();
writer.flush(servletOutputStream);
servletOutputStream.flush();
} catch (IORuntimeException | IOException e) {
log.error("写出Excel错误", e);
} finally {
IoUtil.close(writer);
}
}
}
Loading…
Cancel
Save