Ver código fonte

库存报表导出

yzc 2 anos atrás
pai
commit
7aa53bb1a8

+ 10 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/monthly/MonthlyInventoryReportController.java

@@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletResponse;
+
 
 /**
  * <p>
@@ -34,4 +36,12 @@ public class MonthlyInventoryReportController {
         return monthlyInventoryReportService.getPage(dto);
     }
 
+    /**
+     * Excel导出
+     */
+    @PostMapping("/exportExcel")
+    public void exportExcel(@RequestBody MonthlyInventoryReportSelectDto dto, HttpServletResponse httpServletResponse) {
+        monthlyInventoryReportService.exportExcel(dto, httpServletResponse);
+    }
+
 }

+ 44 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/monthly/MonthlyInventoryReportExcel.java

@@ -0,0 +1,44 @@
+package com.fjhx.wms.entity.monthly;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class MonthlyInventoryReportExcel {
+    @ColumnWidth(15)
+    @ExcelProperty("仓库名称")
+    private String warehouseName;
+    @ColumnWidth(15)
+    @ExcelProperty("物品编码")
+    private String productCode;
+    @ColumnWidth(20)
+    @ExcelProperty("物品名称")
+    private String productName;
+    @ColumnWidth(15)
+    @ExcelProperty("规格型号")
+    private String productSpec;
+    @ColumnWidth(15)
+    @ExcelProperty("单位")
+    private String productUnit;
+    @ColumnWidth(15)
+    @ExcelProperty("初期数量")
+    private String initialQuantity;
+    @ColumnWidth(15)
+    @ExcelProperty("入库数量")
+    private String receiptQuantity;
+    @ColumnWidth(15)
+    @ExcelProperty("出库数量")
+    private String outboundQuantity;
+    @ColumnWidth(15)
+    @ExcelProperty("结存数量")
+    private String balanceQuantity;
+    @ColumnWidth(15)
+    @ExcelProperty("结存单价")
+    private String balanceUnitPrice;
+    @ColumnWidth(15)
+    @ExcelProperty("结存金额")
+    private String balanceAmount;
+}

+ 6 - 0
hx-wms/src/main/java/com/fjhx/wms/service/monthly/MonthlyInventoryReportService.java

@@ -6,6 +6,8 @@ import com.fjhx.wms.entity.monthly.po.MonthlyInventoryReport;
 import com.fjhx.wms.entity.monthly.vo.MonthlyInventoryReportVo;
 import com.ruoyi.common.core.service.BaseService;
 
+import javax.servlet.http.HttpServletResponse;
+
 
 /**
  * <p>
@@ -22,4 +24,8 @@ public interface MonthlyInventoryReportService extends BaseService<MonthlyInvent
      */
     Page<MonthlyInventoryReportVo> getPage(MonthlyInventoryReportSelectDto dto);
 
+    /**
+     * Excel导出
+     */
+    void exportExcel(MonthlyInventoryReportSelectDto dto, HttpServletResponse httpServletResponse);
 }

+ 59 - 20
hx-wms/src/main/java/com/fjhx/wms/service/monthly/impl/MonthlyInventoryReportServiceImpl.java

@@ -1,10 +1,18 @@
 package com.fjhx.wms.service.monthly.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.item.util.excel.util.ExcelUtil;
+import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
+import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
+import com.fjhx.tenant.service.dict.DictTenantDataService;
+import com.fjhx.wms.entity.monthly.MonthlyInventoryReportExcel;
 import com.fjhx.wms.entity.monthly.dto.MonthlyInventoryReportSelectDto;
 import com.fjhx.wms.entity.monthly.po.MonthlyInventoryReport;
 import com.fjhx.wms.entity.monthly.vo.MonthlyInventoryReportVo;
@@ -20,11 +28,9 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -44,6 +50,8 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
     private ProductInfoService productInfoService;
     @Autowired
     private WarehouseService warehouseService;
+    @Autowired
+    private DictTenantDataService dictTenantDataService;
 
     @Override
     public Page<MonthlyInventoryReportVo> getPage(MonthlyInventoryReportSelectDto dto) {
@@ -54,11 +62,7 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
 
         //关键字搜索
         if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
-            List<Long> productInfoIds = productInfoService.listObject(ProductInfo::getId, q -> q
-                    .like(ProductInfo::getCode, dto.getKeyword())
-                    .or().like(ProductInfo::getName, dto.getKeyword())
-                    .or().like(ProductInfo::getSpec, dto.getKeyword())
-            );
+            List<Long> productInfoIds = productInfoService.listObject(ProductInfo::getId, q -> q.like(ProductInfo::getCode, dto.getKeyword()).or().like(ProductInfo::getName, dto.getKeyword()).or().like(ProductInfo::getSpec, dto.getKeyword()));
             productInfoIds.add(null);//插入一个空元素防止为空in条件被忽略
             wrapper.in(MonthlyInventoryReport::getProductId, productInfoIds);
         }
@@ -97,20 +101,12 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
         List<Stock> stockList = stockService.list();
         for (Stock stock : stockList) {
             //计算初期数量
-            List<MonthlyInventoryReport> initialQuantityList = olDmonthlyInventoryReportList.stream()
-                    .filter(it -> stock.getWarehouseId().equals(it.getWarehouseId()))
-                    .filter(it -> stock.getProductId().equals(it.getProductId())).collect(Collectors.toList());
+            List<MonthlyInventoryReport> initialQuantityList = olDmonthlyInventoryReportList.stream().filter(it -> stock.getWarehouseId().equals(it.getWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).collect(Collectors.toList());
             //计算入库数量
-            List<StockJournalDetailsVo> receiptQuantityList = lastMonthStockJournal.stream()
-                    .filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId()))
-                    .filter(it -> stock.getProductId().equals(it.getProductId()))
-                    .filter(it -> it.getOpType() == 1).collect(Collectors.toList());
+            List<StockJournalDetailsVo> receiptQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 1).collect(Collectors.toList());
             BigDecimal receiptQuantity = receiptQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
             //计算出库数量
-            List<StockJournalDetailsVo> outboundQuantityList = lastMonthStockJournal.stream()
-                    .filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId()))
-                    .filter(it -> stock.getProductId().equals(it.getProductId()))
-                    .filter(it -> it.getOpType() == 2).collect(Collectors.toList());
+            List<StockJournalDetailsVo> outboundQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 2).collect(Collectors.toList());
             BigDecimal outboundQuantity = outboundQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
 
             MonthlyInventoryReport monthlyInventoryReport = new MonthlyInventoryReport();
@@ -147,4 +143,47 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
         this.saveBatch(monthlyInventoryReportList);
     }
 
+    @Override
+    public void exportExcel(MonthlyInventoryReportSelectDto dto, HttpServletResponse httpServletResponse) {
+        IWrapper<MonthlyInventoryReport> wrapper = getWrapper();
+        wrapper.eq("date_format(daily_report_date,'%Y')", dto.getYear());
+        wrapper.eq("date_format(daily_report_date,'%m')", dto.getMonth());
+        wrapper.eq(MonthlyInventoryReport::getWarehouseId, dto.getWarehouseId());
+
+        //关键字搜索
+        if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            List<Long> productInfoIds = productInfoService.listObject(ProductInfo::getId, q -> q.like(ProductInfo::getCode, dto.getKeyword()).or().like(ProductInfo::getName, dto.getKeyword()).or().like(ProductInfo::getSpec, dto.getKeyword()));
+            productInfoIds.add(null);//插入一个空元素防止为空in条件被忽略
+            wrapper.in(MonthlyInventoryReport::getProductId, productInfoIds);
+        }
+
+        wrapper.orderByDesc(MonthlyInventoryReport::getId);
+
+        //获取单位字典
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        DictTenantDataSelectDto dto1 = new DictTenantDataSelectDto();
+        dto1.setDictCode("unit");
+        List<DictTenantDataVo> dataVoList = dictTenantDataService.getList(dto1);
+        Map<String, String> unitMap = dataVoList.stream().collect(Collectors.toMap(DictTenantDataVo::getDictKey, DictTenantDataVo::getDictValue));
+        DynamicDataSourceContextHolder.poll();
+
+        List<MonthlyInventoryReport> list = this.list(wrapper);
+        List<MonthlyInventoryReportVo> monthlyInventoryReportVos = BeanUtil.copyToList(list, MonthlyInventoryReportVo.class);
+        //赋值产品名称
+        productInfoService.attributeAssign(monthlyInventoryReportVos, MonthlyInventoryReportVo::getProductId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductName(productInfo.getName());
+            item.setProductSpec(productInfo.getSpec());
+            item.setProductUnit(unitMap.get(productInfo.getUnit()));
+        });
+        //赋值仓库名称
+        warehouseService.attributeAssign(monthlyInventoryReportVos, MonthlyInventoryReportVo::getWarehouseId, (item, warehouse) -> {
+            item.setWarehouseName(warehouse.getName());
+        });
+
+        //导出
+        List<MonthlyInventoryReportExcel> monthlyInventoryReportExcels = BeanUtil.copyToList(monthlyInventoryReportVos, MonthlyInventoryReportExcel.class);
+        ExcelUtil.export(httpServletResponse, monthlyInventoryReportExcels, MonthlyInventoryReportExcel.class);
+    }
+
 }