Bladeren bron

仓库报表

3254194295 3 jaren geleden
bovenliggende
commit
fc38aaf648

+ 10 - 0
platform-dao/src/main/java/com/platform/dao/dto/store/InStoreFormDTO.java

@@ -29,6 +29,16 @@ public class InStoreFormDTO extends BaseDTO implements Serializable {
      */
     @Transient
     private String useCompany;
+
+    /**
+     * 搜索开始时间
+     */
+    private LocalDateTime searchStartTime;
+
+    /**
+     * 搜索结束时间
+     */
+    private LocalDateTime searchEndTime;
     /**
      * 使用项目部
      */

+ 10 - 0
platform-dao/src/main/java/com/platform/dao/dto/store/OutStoreFormDTO.java

@@ -29,6 +29,16 @@ public class OutStoreFormDTO extends BaseDTO implements Serializable {
      */
     @Transient
     private String useCompany;
+
+    /**
+     * 搜索开始时间
+     */
+    private LocalDateTime searchStartTime;
+
+    /**
+     * 搜索结束时间
+     */
+    private LocalDateTime searchEndTime;
     /**
      * 使用项目部
      */

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/dto/store/StoreCheckJobDTO.java

@@ -31,6 +31,7 @@ public class StoreCheckJobDTO extends BaseDTO implements Serializable {
     @Id
     private String id;
 
+
     /**
      * 计划id
      */

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/mapper/store/InStoreDetailMapper.java

@@ -30,5 +30,6 @@ public interface InStoreDetailMapper extends MyMapper<InStoreDetail> {
      */
     List<InStoreDetailVO> selectReportList(InStoreDetailDTO dto);
 
+
     void updateBatch(List<InStoreDetail> updateDetailList);
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/util/TreeUtil.java

@@ -16,6 +16,7 @@ import com.platform.dao.entity.upms.SysDict;
 import com.platform.dao.entity.upms.SysMenu;
 import com.platform.dao.pojo.CommonTree;
 import com.platform.dao.pojo.TreeNode;
+import com.platform.dao.vo.query.store.StoreVO;
 import com.platform.dao.vo.sb.SbTypeVO;
 import lombok.experimental.UtilityClass;
 

+ 63 - 0
platform-dao/src/main/java/com/platform/dao/vo/report/StoreInAndOutReportVO.java

@@ -0,0 +1,63 @@
+package com.platform.dao.vo.report;
+
+import com.platform.dao.vo.query.check.CheckJobVO;
+import com.platform.dao.vo.query.store.InStoreDetailVO;
+import com.platform.dao.vo.query.store.InStoreFormVO;
+import com.platform.dao.vo.query.store.OutStoreDetailVO;
+import com.platform.dao.vo.query.store.OutStoreFormVO;
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author cyz
+ */
+@Data
+@Accessors(chain = true)
+public class StoreInAndOutReportVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 月份
+     */
+    @Excel(name = "年", orderNum = "1")
+    private Integer year;
+    /**
+     * 月份
+     */
+    @Excel(name = "月份", orderNum = "2")
+    private Integer month;
+    /**
+     * 入库数量
+     */
+    @Excel(name = "入库数量", orderNum = "3")
+    private Integer inStoreNum;
+    /**
+     * 出库数量
+     */
+    @Excel(name = "出库数量", orderNum = "4")
+    private Integer outStoreNum;
+    /**
+     * 入库金额
+     */
+    @Excel(name = "入库金额", orderNum = "5")
+    private Double inStorePrice;
+    /**
+     * 出库金额
+     */
+    @Excel(name = "出库金额", orderNum = "6")
+    private Double outStorePrice;
+
+    /**
+     * 入库明细列表
+     */
+    List<InStoreDetailVO> inDetailList;
+
+    /**
+     * 出库明细列表
+     */
+    List<OutStoreDetailVO> outDetailList;
+
+}

+ 6 - 0
platform-dao/src/main/resources/mapper/store/InStoreFormMapper.xml

@@ -106,6 +106,12 @@
         <if test="updateTime != null">
             and instoreform.update_time = #{updateTime}
         </if>
+        <if test="searchStartTime != null">
+            and instoreform.created_time <![CDATA[ >= ]]> #{searchStartTime}
+        </if>
+        <if test="searchEndTime != null">
+            and instoreform.created_time <![CDATA[ <= ]]> #{searchEndTime}
+        </if>
         <if test="keyword != null and keyword != ''">
             and (
             store.name like concat('%',#{keyword},'%')

+ 6 - 0
platform-dao/src/main/resources/mapper/store/OutStoreFormMapper.xml

@@ -92,6 +92,12 @@
         <if test="keyword != null and keyword != ''">
             and outstoreform.out_no like concat('%',#{keyword},'%')
         </if>
+        <if test="searchStartTime != null">
+            and outstoreform.created_time <![CDATA[ >= ]]> #{searchStartTime}
+        </if>
+        <if test="searchEndTime != null">
+            and outstoreform.created_time <![CDATA[ <= ]]> #{searchEndTime}
+        </if>
     </sql>
     <select id="selectList" parameterType="com.platform.dao.dto.store.OutStoreFormDTO"
             resultType="com.platform.dao.vo.query.store.OutStoreFormVO">

+ 92 - 2
platform-rest/src/main/java/com/platform/rest/controller/report/StoreReportController.java

@@ -1,23 +1,34 @@
 package com.platform.rest.controller.report;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.DateUtils;
 import com.platform.common.util.R;
-import com.platform.dao.dto.store.InStoreDetailDTO;
-import com.platform.dao.dto.store.SpareStoreDTO;
+import com.platform.dao.dto.check.CheckJobDTO;
+import com.platform.dao.dto.store.*;
 import com.platform.dao.entity.store.InStoreDetail;
 import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.check.ExportCheckJobVO;
 import com.platform.dao.vo.export.store.ExportInStoreDetailVO;
+import com.platform.dao.vo.export.store.ExportOutStoreDetailVO;
+import com.platform.dao.vo.query.check.CheckJobVO;
 import com.platform.dao.vo.query.store.InStoreDetailVO;
+import com.platform.dao.vo.query.store.InStoreFormVO;
+import com.platform.dao.vo.query.store.OutStoreDetailVO;
 import com.platform.dao.vo.query.store.StoreVO;
+import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.StoreInAndOutReportVO;
 import com.platform.rest.log.annotation.SysLog;
 import com.platform.service.store.InStoreDetailService;
 import com.platform.service.store.SpareStoreService;
+import com.platform.service.store.StoreMonthReportService;
 import lombok.AllArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -32,6 +43,7 @@ import java.util.List;
 public class StoreReportController {
 
   private final SpareStoreService spareStoreService;
+  private final StoreMonthReportService storeMonthReportService;
 
   /**
    * 根据传入类别,进行数据查询
@@ -46,4 +58,82 @@ public class StoreReportController {
       return new R<>(spareStoreService.selectFinanceReportList(projectId, spareStoreDTO, type));
   }
 
+  @GetMapping("/export")
+  @SysLog("出库入库每月统计报表导出")
+  public void export(HttpServletResponse response, InStoreFormDTO dto, @RequestParam(required = false) Integer year, @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth) {
+    List<StoreInAndOutReportVO> list = storeMonthReportService.getMonthReport(dto, year, startMonth, endMonth);
+    String fileName = "";
+    if (year == null) {
+      fileName = DateUtils.dateToString(startMonth, DateUtils.PATTERN_YMD) + "-" + DateUtils.dateToString(endMonth, DateUtils.PATTERN_YMD) + "-出库入库数据统计报表";
+    } else {
+      fileName = year + "年-出库入库数据统计报表";
+    }
+    ExcelUtil.exportResponseDict(response, StoreInAndOutReportVO.class, list, fileName);
+  }
+
+  @GetMapping("/export/in/month")
+  @SysLog("仓库每月明细导出")
+  public void export(HttpServletResponse response, InStoreFormDTO dto, @RequestParam(required = false) Integer year,
+                     @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth,
+                     @RequestParam(required = false) Integer month,@RequestParam(required = false) Integer number) {
+    List<StoreInAndOutReportVO> list = storeMonthReportService.getMonthReport(dto, year, startMonth, endMonth);
+    String fileName = "";
+    if (CollectionUtil.isNotEmpty(list)) {
+      for (StoreInAndOutReportVO vo : list) {
+        if (vo.getMonth() == month) {
+          if(number.equals(1)){
+            fileName = year + "-" + month + "-入库数据统计明细";
+            List<InStoreDetailVO> detailList = vo.getInDetailList();
+            if (CollectionUtil.isNotEmpty(detailList)) {
+              ExcelUtil.exportResponseDict(response, ExportInStoreDetailVO.class, BeanConverterUtil.copyListProperties(detailList, ExportInStoreDetailVO.class), fileName);
+            }
+          }else {
+            fileName = year + "-" + month + "-出库数据统计明细";
+            List<OutStoreDetailVO> detailList = vo.getOutDetailList();
+            if (CollectionUtil.isNotEmpty(detailList)) {
+              ExcelUtil.exportResponseDict(response, ExportOutStoreDetailVO.class, BeanConverterUtil.copyListProperties(detailList, ExportOutStoreDetailVO.class), fileName);
+            }
+          }
+
+        }
+      }
+    }
+  }
+
+//  @GetMapping("/export/out/month")
+//  @SysLog("仓库每月出库明细导出")
+//  public void exportOut(HttpServletResponse response, InStoreFormDTO dto, @RequestParam(required = false) Integer year,
+//                     @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth,
+//                     @RequestParam(required = false) Integer month) {
+//    List<StoreInAndOutReportVO> list = storeMonthReportService.getMonthReport(dto, year, startMonth, endMonth);
+//    String fileName = "";
+//    fileName = year + "-" + month + "-出库数据统计明细";
+//    if (CollectionUtil.isNotEmpty(list)) {
+//      for (StoreInAndOutReportVO vo : list) {
+//        if (vo.getMonth() == month) {
+//          List<OutStoreDetailVO> detailList = vo.getOutDetailList();
+//          if (CollectionUtil.isNotEmpty(detailList)) {
+//            ExcelUtil.exportResponseDict(response, ExportOutStoreDetailVO.class, BeanConverterUtil.copyListProperties(detailList, ExportOutStoreDetailVO.class), fileName);
+//          }
+//        }
+//      }
+//    }
+//  }
+
+
+  /**
+   * 仓库每月入库总数量以及金额报表
+   *
+   * @param dto  查询条件
+   * @param year 查询年份
+   * @return R
+   */
+  @SysLog("仓库入库总数量以及金额报表")
+  @GetMapping("")
+  public R getMonthReportByYear(InStoreFormDTO inStoreFormDTO, @RequestParam(required = false) Integer year, @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth) {
+    return new R(storeMonthReportService.getMonthReport(inStoreFormDTO, year, startMonth, endMonth));
+  }
+
+
+
 }

+ 7 - 2
platform-service/src/main/java/com/platform/service/store/StoreMonthReportService.java

@@ -1,14 +1,17 @@
 package com.platform.service.store;
 
 import com.platform.common.bean.AbstractPageResultBean;
-import com.platform.dao.dto.store.StoreDTO;
-import com.platform.dao.dto.store.StoreMonthReportDTO;
+import com.platform.dao.dto.check.CheckJobDTO;
+import com.platform.dao.dto.store.*;
 import com.platform.dao.entity.store.Store;
 import com.platform.dao.entity.store.StoreMonthReport;
 import com.platform.dao.vo.query.store.StoreVO;
+import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.StoreInAndOutReportVO;
 import com.platform.service.base.IBaseService;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -22,4 +25,6 @@ public interface StoreMonthReportService extends IBaseService<StoreMonthReport,
     void genTask();
 
     AbstractPageResultBean<StoreMonthReport> selectPageList(StoreMonthReportDTO storeDTO, int pageNum, int pageSize);
+    List<StoreInAndOutReportVO> getMonthReport(InStoreFormDTO inStoreFormDTO, Integer month, LocalDate startMonth, LocalDate endMonth);
+
 }

+ 4 - 0
platform-service/src/main/java/com/platform/service/store/impl/InStoreDetailServiceImpl.java

@@ -15,6 +15,7 @@ import com.platform.dao.enums.DeptNatureEnum;
 import com.platform.dao.mapper.store.InStoreDetailMapper;
 import com.platform.dao.mapper.upms.SysDeptMapper;
 import com.platform.dao.vo.query.store.InStoreDetailVO;
+import com.platform.dao.vo.query.store.InStoreFormVO;
 import com.platform.dao.vo.query.upms.SysDeptVO;
 import com.platform.service.store.InStoreDetailService;
 import com.platform.service.upms.SysDeptService;
@@ -48,6 +49,9 @@ public class InStoreDetailServiceImpl extends BaseServiceImpl<InStoreDetailMappe
         return 1;
     }
 
+
+
+
     @Override
     public AbstractPageResultBean<InStoreDetailVO> selectPageList(InStoreDetailDTO record, int pageNum, int pageSize) {
         // 登录人自己负责的项目列表

+ 115 - 18
platform-service/src/main/java/com/platform/service/store/impl/StoreMonthReportServiceImpl.java

@@ -6,41 +6,34 @@ import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.enums.DataFilterTypeEnum;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
-import com.platform.common.util.DateUtils;
-import com.platform.common.util.IdGeneratorUtils;
-import com.platform.common.util.SecurityUtils;
-import com.platform.common.util.StringUtils;
+import com.platform.common.util.*;
 import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.check.CheckJobDTO;
 import com.platform.dao.dto.sqarepartmanage.SpareTypeDTO;
-import com.platform.dao.dto.store.StoreDTO;
-import com.platform.dao.dto.store.StoreMonthReportDTO;
+import com.platform.dao.dto.store.*;
 import com.platform.dao.dto.upms.SysDeptDTO;
 import com.platform.dao.entity.sqarepartmanage.SpareType;
-import com.platform.dao.entity.store.SpareBackDetail;
-import com.platform.dao.entity.store.SpareStore;
-import com.platform.dao.entity.store.Store;
-import com.platform.dao.entity.store.StoreMonthReport;
+import com.platform.dao.entity.store.*;
 import com.platform.dao.entity.upms.ScheduleJobLog;
 import com.platform.dao.entity.upms.SysDept;
 import com.platform.dao.entity.upms.SysUser;
 import com.platform.dao.entity.upms.SysUserDept;
-import com.platform.dao.enums.DeptNatureEnum;
-import com.platform.dao.enums.StoreLevelEnum;
+import com.platform.dao.enums.*;
 import com.platform.dao.mapper.sqarepartmanage.SpareTypeMapper;
-import com.platform.dao.mapper.store.SpareStoreMapper;
-import com.platform.dao.mapper.store.StoreMapper;
-import com.platform.dao.mapper.store.StoreMonthReportMapper;
+import com.platform.dao.mapper.store.*;
 import com.platform.dao.mapper.upms.ScheduleJobLogMapper;
 import com.platform.dao.mapper.upms.SysDeptMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.util.CustomExcelImportUtil;
 import com.platform.dao.util.UserUtil;
-import com.platform.dao.vo.query.store.StoreVO;
+import com.platform.dao.vo.query.check.CheckJobVO;
+import com.platform.dao.vo.query.store.*;
 import com.platform.dao.vo.query.upms.SysDeptVO;
+import com.platform.dao.vo.report.CheckJobReportVO;
+import com.platform.dao.vo.report.StoreInAndOutReportVO;
 import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.sqarepartmanage.SpareTypeService;
-import com.platform.service.store.StoreMonthReportService;
-import com.platform.service.store.StoreService;
+import com.platform.service.store.*;
 import com.platform.service.upms.SysDeptService;
 import com.platform.service.upms.SysUserDeptService;
 import com.platform.service.util.ExecuteSql;
@@ -53,10 +46,12 @@ import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 仓库信息 service 实现类
@@ -72,6 +67,11 @@ public class StoreMonthReportServiceImpl extends BaseServiceImpl<StoreMonthRepor
     private SysDeptMapper sysDeptMapper;
     private SpareTypeService spareTypeService;
     private ScheduleJobLogMapper ScheduleJobLogMapper;
+    private InStoreFormMapper inStoreFormMapper;
+    private OutStoreFormMapper outStoreFormMapper;
+    private  InStoreDetailMapper inStoreDetailMapper;
+    private OutStoreDetailMapper outStoreDetailMapper;
+
     /**
      * 每月1号凌晨1分开始统计,统计当前库存总额,统计
      */
@@ -222,4 +222,101 @@ public class StoreMonthReportServiceImpl extends BaseServiceImpl<StoreMonthRepor
         PageHelper.startPage(pageNum, pageSize);
         return new MyPage(mapper.selectList(storeDTO));
     }
+
+    @Override
+    public List<StoreInAndOutReportVO> getMonthReport(InStoreFormDTO inStoreFormDTO, Integer searchYear , LocalDate startMonth, LocalDate endMonth) {
+        List<Map<String, LocalDateTime>> monthStartAndEndList = new ArrayList<Map<String, LocalDateTime>>();
+        LocalDateTime searchStartTime = null;
+        LocalDateTime searchEndTime = null;
+        if(searchYear != null){
+            LocalDate localDate = LocalDate.now();
+            int year = localDate.getYear();
+            // 如2021-10-15号码,则month=10,需要计算到11月份,需要加1
+            int month = localDate.getMonthValue();
+            if(searchYear<year){
+                month = 12;
+                year = searchYear;
+            }
+            monthStartAndEndList = DateUtils.getMonthStartAndEndByYear(year, month);
+            // 当前年份只统计到当前月,历史年份统计全年
+            searchStartTime = DateUtils.getFirstDayOfThisYear(year);
+            searchEndTime = DateUtils.getLastDayOfMonth(year, month);
+        }else{
+            monthStartAndEndList = DateUtils.getMonthStartAndEndByYear(startMonth, endMonth);
+            searchStartTime = DateUtils.getFirstDayOfMonth(startMonth);
+            searchEndTime = DateUtils.getLastDayOfMonth(endMonth);
+        }
+
+        // 总数
+        inStoreFormDTO.setSearchStartTime(searchStartTime);
+        inStoreFormDTO.setSearchEndTime(searchEndTime);
+//        inStoreFormDTO.setType(CheckStandardTypeEnum.POLLING.getValue());
+        List<InStoreFormVO> inStoreFormVOList = inStoreFormMapper.selectList(inStoreFormDTO);
+        OutStoreFormDTO outStoreFormDTO=new OutStoreFormDTO();
+        outStoreFormDTO.setStoreId(inStoreFormDTO.getStoreId());
+        outStoreFormDTO.setSearchEndTime(inStoreFormDTO.getSearchEndTime());
+        outStoreFormDTO.setSearchStartTime(inStoreFormDTO.getSearchStartTime());
+        List<OutStoreFormVO> outStoreFormVOList = outStoreFormMapper.selectList(outStoreFormDTO);
+
+
+        List<StoreInAndOutReportVO> result = new ArrayList<StoreInAndOutReportVO>();
+        for(Map<String, LocalDateTime> map: monthStartAndEndList){
+            StoreInAndOutReportVO vo = new StoreInAndOutReportVO();
+            List<InStoreDetailVO> inStoreDetailVOS = new ArrayList<InStoreDetailVO>();
+            List<OutStoreDetailVO> outStoreDetailVOS = new ArrayList<OutStoreDetailVO>();
+            vo.setYear(map.get("searchStartTimeMonth").getYear());
+            vo.setMonth(map.get("searchStartTimeMonth").getMonthValue());
+            int inStoreNum = 0;
+            Double inStorePrice=0.0;
+            for(InStoreFormVO inStoreForm: inStoreFormVOList){
+                if(inStoreForm.getCreatedTime().toLocalDate().isAfter(map.get("searchStartTimeMonth").toLocalDate()) && inStoreForm.getCreatedTime().toLocalDate().isBefore(map.get("searchEndTimeMonth").toLocalDate()) && inStoreForm.getStatus().equals(InStoreStatusEnum.EXECUTING.getValue())){
+                    InStoreDetailDTO inStoreDetailDTO=new InStoreDetailDTO();
+                    inStoreDetailDTO.setInNo(inStoreForm.getInNo());
+                    List<InStoreDetailVO> inStoreDetailVOList=inStoreDetailMapper.selectList(inStoreDetailDTO);
+                    if(inStoreDetailVOList!=null){
+                        for(InStoreDetailVO ISVO:inStoreDetailVOList){
+                            inStoreDetailVOS.add(ISVO);
+                        }
+                    }
+                    inStoreNum ++;
+                    BigDecimal s=inStoreForm.getTotalPrice();
+                    if(inStoreForm.getTotalPrice()==null){
+                        s=new BigDecimal(0);
+                    }
+
+                    inStorePrice+=s.doubleValue();
+                }
+            }
+            int outStoreNum = 0;
+            Double outStorePrice=0.0;
+            for(OutStoreFormVO outStoreForm: outStoreFormVOList){
+                if(outStoreForm.getCreatedTime().toLocalDate().isAfter(map.get("searchStartTimeMonth").toLocalDate()) && outStoreForm.getCreatedTime().toLocalDate().isBefore(map.get("searchEndTimeMonth").toLocalDate()) && outStoreForm.getStatus().equals(OutStoreStatusEnum.EXECUTING.getValue())){
+                    outStoreNum ++;
+                    OutStoreDetailDTO outStoreDetailDTO=new OutStoreDetailDTO();
+                    outStoreDetailDTO.setOutNo(outStoreForm.getOutNo());
+                    List<OutStoreDetailVO> outStoreDetailVOList=outStoreDetailMapper.selectList(outStoreDetailDTO);
+                    if(outStoreDetailVOList!=null){
+                        for(OutStoreDetailVO OSVO:outStoreDetailVOList){
+                            outStoreDetailVOS.add(OSVO);
+                        }
+                    }
+                    BigDecimal s=outStoreForm.getTotalPrice();
+                    if(outStoreForm.getTotalPrice()==null){
+                        s=new BigDecimal(0);
+                    }
+
+                    outStorePrice+=s.doubleValue();
+                }
+            }
+            vo.setInStoreNum(inStoreNum);
+            vo.setInStorePrice(inStorePrice);
+            vo.setOutStoreNum(outStoreNum);
+            vo.setOutStorePrice(outStorePrice);
+            vo.setInDetailList(inStoreDetailVOS);
+            vo.setOutDetailList(outStoreDetailVOS);
+
+            result.add(vo);
+        }
+        return result;
+    }
 }