Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

caozj пре 2 година
родитељ
комит
81c8e061e4
19 измењених фајлова са 342 додато и 60 уклоњено
  1. 12 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java
  2. 0 1
      hx-supply/src/main/java/com/fjhx/supply/service/supplier/impl/SupplierPriceServiceImpl.java
  3. 20 4
      hx-wms/src/main/java/com/fjhx/wms/controller/monthly/MonthlyInventoryReportController.java
  4. 9 7
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitController.java
  5. 44 0
      hx-wms/src/main/java/com/fjhx/wms/entity/monthly/MonthlyInventoryReportExcel.java
  6. 15 0
      hx-wms/src/main/java/com/fjhx/wms/entity/monthly/dto/MonthlyInventoryReportSelectDto.java
  7. 20 0
      hx-wms/src/main/java/com/fjhx/wms/entity/monthly/vo/MonthlyInventoryReportVo.java
  8. 1 1
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java
  9. 0 5
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java
  10. 6 1
      hx-wms/src/main/java/com/fjhx/wms/mapper/monthly/MonthlyInventoryReportMapper.java
  11. 11 0
      hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java
  12. 12 0
      hx-wms/src/main/java/com/fjhx/wms/service/monthly/MonthlyInventoryReportService.java
  13. 104 19
      hx-wms/src/main/java/com/fjhx/wms/service/monthly/impl/MonthlyInventoryReportServiceImpl.java
  14. 2 2
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitService.java
  15. 1 1
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  16. 5 1
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java
  17. 60 2
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java
  18. 7 2
      hx-wms/src/main/resources/mapper/monthly/MonthlyInventoryReportMapper.xml
  19. 13 14
      hx-wms/src/main/resources/mapper/stock/StockMapper.xml

+ 12 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java

@@ -76,4 +76,16 @@ public class MyPurchaseServiceImpl implements MyPurchaseService {
         ArrivalDetailPo arrivalDetailPo = BeanUtil.copyProperties(arrivalDetail, ArrivalDetailPo.class);
         return arrivalDetailPo;
     }
+
+    @Override
+    public List<ArrivalDetailPo> getArrivalDetailList(List<Long> ids) {
+        List<ArrivalDetail> arrivalDetailList = arrivalDetailService.list(q -> q.in(ArrivalDetail::getId, ids));
+        return BeanUtil.copyToList(arrivalDetailList, ArrivalDetailPo.class);
+    }
+
+    @Override
+    public List<PurchaseDetailPo> getPurchaseDetailList(List<Long> ids) {
+        List<PurchaseDetail> arrivalDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getId, ids));
+        return BeanUtil.copyToList(arrivalDetailList, PurchaseDetailPo.class);
+    }
 }

+ 0 - 1
hx-supply/src/main/java/com/fjhx/supply/service/supplier/impl/SupplierPriceServiceImpl.java

@@ -133,7 +133,6 @@ public class SupplierPriceServiceImpl extends ServiceImpl<SupplierPriceMapper, S
                 SupplierPrice existSupplierPrice = map.get(supplierPrice.getProductInfoId());
                 if (existSupplierPrice != null) {
                     supplierPrice.setId(existSupplierPrice.getId());
-                    supplierPrice.setPrice(existSupplierPrice.getPrice());
                 }
             }
             saveOrUpdateBatch(supplierPriceList);

+ 20 - 4
hx-wms/src/main/java/com/fjhx/wms/controller/monthly/MonthlyInventoryReportController.java

@@ -5,10 +5,10 @@ import com.fjhx.wms.entity.monthly.dto.MonthlyInventoryReportSelectDto;
 import com.fjhx.wms.entity.monthly.vo.MonthlyInventoryReportVo;
 import com.fjhx.wms.service.monthly.MonthlyInventoryReportService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 
 /**
@@ -34,4 +34,20 @@ public class MonthlyInventoryReportController {
         return monthlyInventoryReportService.getPage(dto);
     }
 
+    /**
+     * 获取日报已有年份列表
+     */
+    @GetMapping("/getYearList")
+    public List<String> getYearList() {
+        return monthlyInventoryReportService.getYearList();
+    }
+
+    /**
+     * Excel导出
+     */
+    @PostMapping("/exportExcel")
+    public void exportExcel(@RequestBody MonthlyInventoryReportSelectDto dto, HttpServletResponse httpServletResponse) {
+        monthlyInventoryReportService.exportExcel(dto, httpServletResponse);
+    }
+
 }

+ 9 - 7
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitController.java

@@ -1,16 +1,19 @@
 package com.fjhx.wms.controller.stock;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockWaitVo;
-import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockWaitVo;
 import com.fjhx.wms.service.stock.StockWaitService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
@@ -74,10 +77,9 @@ public class StockWaitController {
      */
     @PostMapping("/addByWdly")
     public void addByWdly(@RequestBody StockWaitDto stockWaitDto) {
-        stockWaitService.addByWdly(stockWaitDto);
+        stockWaitService.add1(stockWaitDto);
     }
 
-
     /**
      * 待出入库编辑
      */

+ 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;
+}

+ 15 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/monthly/dto/MonthlyInventoryReportSelectDto.java

@@ -14,4 +14,19 @@ import lombok.Setter;
 @Setter
 public class MonthlyInventoryReportSelectDto extends BaseSelectDto {
 
+    /**
+     * 年过滤
+     */
+    private Integer year;
+
+    /**
+     * 月过滤
+     */
+    private Integer month;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
 }

+ 20 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/monthly/vo/MonthlyInventoryReportVo.java

@@ -13,5 +13,25 @@ import lombok.Setter;
 @Getter
 @Setter
 public class MonthlyInventoryReportVo extends MonthlyInventoryReport {
+    /**
+     * 仓库名称
+     */
+    private String warehouseName;
+    /**
+     * 物品编号
+     */
+    private String productCode;
+    /**
+     * 物品名称
+     */
+    private String productName;
+    /**
+     * 物品规格
+     */
+    private String productSpec;
+    /**
+     * 物品单位
+     */
+    private String productUnit;
 
 }

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java

@@ -43,6 +43,6 @@ public class Stock extends BasePo {
     /**
      * 结存单价
      */
-    private BigDecimal unitPriceOfBalance;
+    private BigDecimal unitPrice;
 
 }

+ 0 - 5
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java

@@ -106,11 +106,6 @@ public class StockVo extends Stock {
     private BigDecimal defectiveQuantity;
 
     /**
-     * 结存单价
-     */
-    private BigDecimal unitPrice;
-
-    /**
      * 产品分类名称列表
      */
     private List<String> productClassifyNameGroup;

+ 6 - 1
hx-wms/src/main/java/com/fjhx/wms/mapper/monthly/MonthlyInventoryReportMapper.java

@@ -32,8 +32,13 @@ public interface MonthlyInventoryReportMapper extends BaseMapper<MonthlyInventor
     List<StockJournalDetailsVo> getLastMonthStockJournal();
 
     /**
-     * 获取上个月的报表
+     * 获取上个月的报表
      */
     List<MonthlyInventoryReportVo> getLastMonthMonthlyInventoryReport();
 
+    /**
+     * 获取日报已有年份列表
+     */
+    List<String> getYearList();
+
 }

+ 11 - 0
hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java

@@ -4,6 +4,7 @@ import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchasePo;
 
+import java.util.List;
 import java.util.Map;
 
 public interface MyPurchaseService {
@@ -27,4 +28,14 @@ public interface MyPurchaseService {
      * 获取到货明细信息
      */
     ArrivalDetailPo getArrivalDetailInfo(Long id);
+
+    /**
+     * 获取到货明细列表
+     */
+    List<ArrivalDetailPo> getArrivalDetailList(List<Long> ids);
+
+    /**
+     * 获取采购明细列表
+     */
+    List<PurchaseDetailPo> getPurchaseDetailList(List<Long> ids);
 }

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

@@ -6,6 +6,9 @@ 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;
+import java.util.List;
+
 
 /**
  * <p>
@@ -22,4 +25,13 @@ public interface MonthlyInventoryReportService extends BaseService<MonthlyInvent
      */
     Page<MonthlyInventoryReportVo> getPage(MonthlyInventoryReportSelectDto dto);
 
+    /**
+     * Excel导出
+     */
+    void exportExcel(MonthlyInventoryReportSelectDto dto, HttpServletResponse httpServletResponse);
+
+    /**
+     * 获取日报已有年份列表
+     */
+    List<String> getYearList();
 }

+ 104 - 19
hx-wms/src/main/java/com/fjhx/wms/service/monthly/impl/MonthlyInventoryReportServiceImpl.java

@@ -1,8 +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;
@@ -11,15 +21,16 @@ import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
 import com.fjhx.wms.mapper.monthly.MonthlyInventoryReportMapper;
 import com.fjhx.wms.service.monthly.MonthlyInventoryReportService;
 import com.fjhx.wms.service.stock.StockService;
+import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
+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;
 
 
@@ -35,22 +46,54 @@ import java.util.stream.Collectors;
 public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInventoryReportMapper, MonthlyInventoryReport> implements MonthlyInventoryReportService {
     @Autowired
     private StockService stockService;
+    @Autowired
+    private ProductInfoService productInfoService;
+    @Autowired
+    private WarehouseService warehouseService;
+    @Autowired
+    private DictTenantDataService dictTenantDataService;
 
     @Override
     public Page<MonthlyInventoryReportVo> getPage(MonthlyInventoryReportSelectDto dto) {
         IWrapper<MonthlyInventoryReport> wrapper = getWrapper();
+        wrapper.eq("date_format(mir.daily_report_date,'%Y')", dto.getYear());
+        wrapper.eq("date_format(mir.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("mir", MonthlyInventoryReport::getId);
         Page<MonthlyInventoryReportVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<MonthlyInventoryReportVo> records = page.getRecords();
+        //赋值产品名称
+        productInfoService.attributeAssign(records, MonthlyInventoryReportVo::getProductId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductName(productInfo.getName());
+            item.setProductSpec(productInfo.getSpec());
+            item.setProductUnit(productInfo.getUnit());
+        });
+        //赋值仓库名称
+        warehouseService.attributeAssign(records, MonthlyInventoryReportVo::getWarehouseId, (item, warehouse) -> {
+            item.setWarehouseName(warehouse.getName());
+        });
+
         return page;
     }
 
     /**
-     * 每月1日0点自动生成上月报表
+     * 每月1号的0:10:00执行自动生成上月报表
      */
+    @Scheduled(cron = "0 10 0 1 * ?")
+    @Transactional
     public void generateReport() {
         List<MonthlyInventoryReport> monthlyInventoryReportList = new ArrayList<>();
 
-        //获取上月的报表获取初期数量
+        //获取上上月的报表的 结存数量为上月报表的初期数量
         List<MonthlyInventoryReportVo> olDmonthlyInventoryReportList = baseMapper.getLastMonthMonthlyInventoryReport();
 
         List<StockJournalDetailsVo> lastMonthStockJournal = baseMapper.getLastMonthStockJournal();
@@ -58,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();
@@ -79,7 +114,7 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
             monthlyInventoryReport.setProductId(stock.getProductId());
             monthlyInventoryReport.setInitialQuantity(BigDecimal.ZERO);//初期数量
             if (ObjectUtil.isNotEmpty(initialQuantityList)) {
-                //初期数量=上月日报 结存数量
+                //初期数量=上上月报表的结存数量
                 monthlyInventoryReport.setInitialQuantity(initialQuantityList.get(0).getBalanceQuantity());
             }
             monthlyInventoryReport.setReceiptQuantity(receiptQuantity);//入库数量
@@ -89,7 +124,7 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
                 monthlyInventoryReport.setBalanceQuantity(stock.getQuantity());//结存数量
             }
             monthlyInventoryReport.setBalanceUnitPrice(BigDecimal.ZERO);//结存单价
-            BigDecimal unitPriceOfBalance = stock.getUnitPriceOfBalance();
+            BigDecimal unitPriceOfBalance = stock.getUnitPrice();
             if (ObjectUtil.isNotEmpty(unitPriceOfBalance)) {
                 monthlyInventoryReport.setBalanceUnitPrice(unitPriceOfBalance);//结存单价
             }
@@ -108,4 +143,54 @@ 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);
+    }
+
+    /**
+     * 获取日报已有年份列表
+     */
+    public List<String> getYearList() {
+        return baseMapper.getYearList();
+    }
+
 }

+ 2 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitService.java

@@ -45,9 +45,9 @@ public interface StockWaitService extends BaseService<StockWait> {
     void add(StockWaitDetailsDto stockWaitDetailsDto);
 
     /**
-     * 待出入库新增 维多利亚
+     * 待出入库新增
      */
-    void addByWdly(StockWaitDto stockWaitDto);
+    void add1(StockWaitDto stockWaitDto);
 
     /**
      * 待出入库编辑

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -93,7 +93,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
             item.setProductDefinition(productInfo.getDefinition());
             item.setProductCustomCode(productInfo.getCustomCode());
             //赋值结存单价
-            item.setUnitPrice(productInfo.getUnitPrice());
+//            item.setUnitPrice(productInfo.getUnitPrice());
         });
         //赋值产品分类
         productClassifyService.attributeAssign(stockVos, StockVo::getProductClassifyId, (item, productClassify) -> {

+ 5 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -116,6 +117,7 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> stockWaitDetailsMap = this.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));
 
+        List<StockWaitDetails> newStockWaitDetailsList = new ArrayList<>();
         for (StockWaitDetailsDto stockWaitDetailsDto : stockWaitDetailsDtoList1) {
             //更新已入库数量 根据明细id
             StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockWaitDetailsDto.getId());
@@ -131,8 +133,10 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
             } else {
                 stockWaitDetails.setStatus(1);
             }
-            updateById(stockWaitDetails);
+
+            newStockWaitDetailsList.add(stockWaitDetails);
         }
+        updateBatchById(newStockWaitDetailsList);
 
         //更新待出库记录状态
         int statusFlag = 0;

+ 60 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -12,8 +12,10 @@ import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
@@ -213,7 +215,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         StockWaitDto stockWaitDto = BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDto.class);
         stockWaitDto.setId(stockWaitDetails.getStockWaitId());
         stockWaitDto.setStockWaitDetailsList(Collections.singletonList(BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDetails.class)));
-        this.addByWdly(stockWaitDto);
+        this.add1(stockWaitDto);
 
         //如果是采购退货 修改采购退货状态
         StockWait stockWait = this.getById(stockWaitDto.getId());
@@ -226,7 +228,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
 
     @DSTransactional
     @Override
-    public void addByWdly(StockWaitDto stockWaitDto) {
+    public void add1(StockWaitDto stockWaitDto) {
         Assert.notEmpty(stockWaitDto.getId(), "待出入库id不能为空");
         Assert.notEmpty(stockWaitDto.getWarehouseId(), "仓库id不能为空");
 
@@ -245,6 +247,62 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         stockWait.setVictoriatouristJson(JSONObject.toJSONString(json, JSONWriter.Feature.WriteLongAsString));
         updateById(stockWait);
 
+        //如果业务类型是 采购到货入库 计算结存单价[结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)]
+        if (StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockWait.getBusinessType())) {
+            //获取待入库明细信息
+            List<Long> swdId = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
+            List<StockWaitDetails> oldStockWaitDetailsList = stockWaitDetailsService.listByIds(swdId);
+            Map<Long, StockWaitDetails> oldStockWaitDetailsMap = oldStockWaitDetailsList.stream()
+                    .collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
+
+            List<Long> productIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getProductId).collect(Collectors.toList());
+            //获取库存消息
+            Map<Long, Stock> stockMap = stockService.mapKEntity(Stock::getProductId, q -> q
+                    .eq(Stock::getWarehouseId, stockWaitDto.getWarehouseId())
+                    .in(Stock::getProductId, productIds));
+            //获取到货明细信息
+            List<Long> arrivalDetailsIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getBusinessDetailsId).collect(Collectors.toList());
+            List<ArrivalDetailPo> arrivalDetailList = myPurchaseService.getArrivalDetailList(arrivalDetailsIds);
+            Assert.notEmpty(arrivalDetailList, "到货明细信息为空");
+            Map<Long, ArrivalDetailPo> arrivalDetailPoMap = arrivalDetailList.stream().collect(Collectors.toMap(ArrivalDetailPo::getId, Function.identity()));
+            //获取采购明细信息
+            List<Long> purchaseDetailIds = arrivalDetailList.stream().map(ArrivalDetailPo::getPurchaseDetailId).collect(Collectors.toList());
+            List<PurchaseDetailPo> purchaseDetailList = myPurchaseService.getPurchaseDetailList(purchaseDetailIds);
+            Assert.notEmpty(arrivalDetailList, "采购明细信息为空");
+            Map<Long, PurchaseDetailPo> purchaseDetailPoMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetailPo::getId, Function.identity()));
+
+            List<Stock> stockList1 = new ArrayList<>();
+            for (StockWaitDetails stockWaitDetails : stockWaitDetailsDtoList) {
+                StockWaitDetails oldStockWaitDetails = oldStockWaitDetailsMap.get(stockWaitDetails.getId());
+                Assert.notEmpty(oldStockWaitDetails, "查询不到待入库明细信息");
+                //获取到货信息
+                ArrivalDetailPo arrivalDetailPo = arrivalDetailPoMap.get(oldStockWaitDetails.getBusinessDetailsId());
+                Assert.notEmpty(arrivalDetailPo, "查询不到到货明细信息");
+                //获取采购信息
+                PurchaseDetailPo purchaseDetailPo = purchaseDetailPoMap.get(arrivalDetailPo.getPurchaseDetailId());
+                Assert.notEmpty(arrivalDetailPo, "查询不到采购明细信息");
+                //获取库存信息
+                Stock stock = stockMap.get(oldStockWaitDetails.getProductId());
+                if (ObjectUtil.isEmpty(stock)) {
+                    stock = new Stock();
+                    stock.setWarehouseId(stockWaitDto.getWarehouseId());
+                    stock.setProductId(oldStockWaitDetails.getProductId());
+                    stock.setQuantity(BigDecimal.ZERO);
+                    stock.setUnitPrice(BigDecimal.ZERO);
+                }
+                //计算结存单价 结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
+                BigDecimal multiply = stock.getUnitPrice().multiply(stock.getQuantity());//结存单价*库存数量
+                BigDecimal multiply1 = purchaseDetailPo.getPrice().multiply(stockWaitDetails.getQuantity());//采购单价*入库数量
+                BigDecimal add = multiply.add(multiply1);//(结存单价*库存数量+采购单价*入库数量)
+                BigDecimal add1 = stock.getQuantity().add(stockWaitDetails.getQuantity());//库存数量+入库数量
+                BigDecimal divide = add.divide(add1, 4, BigDecimal.ROUND_HALF_UP);//(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
+                stock.setUnitPrice(divide);
+
+                stockList1.add(stock);
+            }
+            stockService.saveOrUpdateBatch(stockList1);
+        }
+
         //操作库存
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> oldStockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));

+ 7 - 2
hx-wms/src/main/resources/mapper/monthly/MonthlyInventoryReportMapper.xml

@@ -14,7 +14,8 @@
                mir.create_user,
                mir.create_time,
                mir.update_user,
-               mir.update_time
+               mir.update_time,
+               mir.daily_report_date
         from monthly_inventory_report mir
             ${ew.customSqlSegment}
     </select>
@@ -43,7 +44,11 @@
                mir.update_user,
                mir.update_time
         from monthly_inventory_report mir
-        where DATE_FORMAT(mir.daily_report_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m')
+        where DATE_FORMAT(mir.daily_report_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE - INTERVAL 2 MONTH, '%Y-%m')
+    </select>
+    <select id="getYearList" resultType="java.lang.String">
+        SELECT DISTINCT date_format(daily_report_date, '%Y')
+        FROM monthly_inventory_report
     </select>
 
 </mapper>

+ 13 - 14
hx-wms/src/main/resources/mapper/stock/StockMapper.xml

@@ -2,20 +2,19 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockMapper">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockVo">
-        SELECT
-            s.id,
-            pi.definition,
-            s.warehouse_id,
-            s.product_id,
-            s.quantity,
-            s.create_user,
-            s.create_time,
-            s.update_user,
-            s.update_time,
-            s.victoriatourist_json
-        FROM
-            stock s
-                LEFT JOIN bytesailing_item.product_info pi ON s.product_id = pi.id
+        SELECT s.id,
+               pi.definition,
+               s.warehouse_id,
+               s.product_id,
+               s.quantity,
+               s.create_user,
+               s.create_time,
+               s.update_user,
+               s.update_time,
+               s.victoriatourist_json,
+               s.unit_price
+        FROM stock s
+                 LEFT JOIN bytesailing_item.product_info pi ON s.product_id = pi.id
             ${ew.customSqlSegment}
     </select>
     <select id="pageByProduct" resultType="com.fjhx.wms.entity.stock.vo.StockVo">