Browse Source

备件报表001

guarantee-lsq 2 years ago
parent
commit
70f9b7a4ce

+ 15 - 0
platform-dao/src/main/java/com/platform/dao/dto/sqarepartmanage/SparePartUsedDTO.java

@@ -125,5 +125,20 @@ public class SparePartUsedDTO extends BaseDTO implements Serializable {
 
     private String spareName;
 
+    /**
+     * 搜索开始时间
+     */
+    private LocalDate searchStartTime;
+
+    /**
+     * 搜索结束时间
+     */
+    private LocalDate searchEndTime;
+
+    /**
+     * 消耗来源
+     * 参照SparePartUsedSourceEnum
+     */
+    private Integer usedSource;
 
 }

+ 7 - 1
platform-dao/src/main/java/com/platform/dao/entity/sqarepartmanage/SparePartUsed.java

@@ -73,7 +73,7 @@ public class SparePartUsed implements Serializable {
      */
     private LocalDate startDate;
     /**
-     * 使用状态:1-未出库;2-已出库
+     * 使用状态: 0 历史 1 使用中
      */
     private Integer status;
     /**
@@ -105,6 +105,12 @@ public class SparePartUsed implements Serializable {
      */
     private LocalDateTime updateTime;
 
+    /**
+     * 消耗来源
+     * 参照SparePartUsedSourceEnum
+     */
+    private Integer usedSource;
+
     /**
      * 创建人
      */

+ 27 - 0
platform-dao/src/main/java/com/platform/dao/enums/SparePartUsedSourceEnum.java

@@ -0,0 +1,27 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 设备状态
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2019,安徽阡陌网络科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum SparePartUsedSourceEnum {
+
+    /**
+     * 维修
+     */
+    REPAIR(1),
+    /**
+     * 保养
+     */
+    POLLING_CHECK(2)
+    ;
+    private final Integer value;
+
+}

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/enums/SparePartUsedStatusEnum.java

@@ -17,7 +17,7 @@ public enum SparePartUsedStatusEnum {
      */
     IN_USE(1),
     /**
-     * 已废弃
+     * 已废弃 (历史数据)
      */
     REPLACEMENTED(2),
     /**

+ 83 - 0
platform-dao/src/main/java/com/platform/dao/vo/export/sqarepartmanage/ExportSparePartUsedReportVO.java

@@ -0,0 +1,83 @@
+package com.platform.dao.vo.export.sqarepartmanage;
+
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 备件使用表导出VO
+ * @Author liuyu
+ * @Date 2020-05-03 13:02:01
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+public class ExportSparePartUsedReportVO implements Serializable {
+
+  /**
+   * 设备
+   */
+  @Excel(name = "设备名称", orderNum = "1")
+  private String sbName;
+
+  /**
+   * 部件
+   */
+  @Excel(name = "部件", orderNum = "2")
+  private String partName;
+
+  /**
+   * 备件
+   */
+  @Excel(name = "备件名称", orderNum = "3")
+  private String spareName;
+
+  /**
+   * 投用日期
+   */
+  @Excel(name = "投用日期", orderNum = "4")
+  private LocalDate startDate;
+
+  /**
+   * 预计报废日期
+   */
+  @Excel(name = "预计报废日期", orderNum = "5")
+  private LocalDate changeDate;
+
+  /**
+   * 更换数目
+   */
+  @Excel(name = "更换数目", orderNum = "6")
+  private Integer num;
+
+  /**
+   * 备件价值(元)
+   */
+  @Excel(name = "备件价值(元)", orderNum = "7")
+  private BigDecimal price;
+
+    /**
+   * 当前状态:1-使用中;2-已替换
+   */
+  @Excel(name = "当前状态:1-使用中;2-已替换", orderNum = "8")
+  private Integer status;
+
+  /**
+   * 更换场景
+   */
+  @Excel(name = "更换场景: 1-维修 2-保养", orderNum = "9")
+  private String usedSource;
+
+  /**
+   * 备注
+   */
+  @Excel(name = "备注", orderNum = "10")
+  private String remark;
+
+
+}

+ 45 - 0
platform-dao/src/main/java/com/platform/dao/vo/report/SparePartInfoReportVO.java

@@ -0,0 +1,45 @@
+package com.platform.dao.vo.report;
+
+import com.platform.dao.vo.query.check.CheckJobVO;
+import com.platform.dao.vo.spare.SparePartUsedVO;
+import com.platform.office.annotation.Excel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author cyz
+ */
+@Data
+@Accessors(chain = true)
+public class SparePartInfoReportVO 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 BigDecimal totalNum;
+    /**
+     * 每月总金额
+     */
+    @Excel(name = "总金额", orderNum = "4")
+    private BigDecimal totalPrice;
+
+    /**
+     * 明细列表
+     */
+    List<SparePartUsedVO> detailList;
+}

+ 12 - 0
platform-dao/src/main/java/com/platform/dao/vo/spare/SparePartUsedVO.java

@@ -130,4 +130,16 @@ public class SparePartUsedVO extends BaseVO implements Serializable {
 
     private Integer month;
 
+    /**
+     * 消耗来源
+     * 参照SparePartUsedSourceEnum
+     */
+    private Integer usedSource;
+
+    /**
+     * 消耗来源
+     */
+    private String usedSourceName;
+
+
 }

+ 13 - 2
platform-dao/src/main/resources/mapper/sqarepartmanage/SparePartUsedMapper.xml

@@ -11,6 +11,7 @@
         <result column="repair_no" jdbcType="VARCHAR" property="repairNo"/>
         <result column="start_date" jdbcType="DATE" property="startDate"/>
         <result column="status" jdbcType="SMALLINT" property="status"/>
+        <result column="used_source" jdbcType="SMALLINT" property="usedSource"/>
         <result column="num" jdbcType="DECIMAL" property="num"/>
         <result column="price" jdbcType="DECIMAL" property="price"/>
         <result column="total_price" jdbcType="DECIMAL" property="totalPrice"/>
@@ -39,10 +40,10 @@
         repair_no
     </sql>
     <sql id="Left_Column">
-        used.id, used.store_id, used.sb_id,
+        used.id, used.store_id, used.sb_id,used.price,
         used.part_id, used.spare_id, used.start_date,
         used.status, used.change_date,
-        used.num,
+        used.num,used.used_source,
         used.real_change_date,
         used.repair_id,
         used.repair_no,
@@ -79,6 +80,16 @@
             <if test="partId != null and partId != ''">
                 and used.part_id = #{partId}
             </if>
+            <!-- 新增报表查询条件 -->
+            <if test="searchStartTime != null">
+                and used.start_date <![CDATA[ >= ]]> #{searchStartTime}
+            </if>
+            <if test="searchEndTime != null">
+                and used.start_date <![CDATA[ <= ]]> #{searchEndTime}
+            </if>
+            <if test="usedSource != null">
+                and used.used_source = #{usedSource}
+            </if>
         </where>
     </select>
     <select id="selectById" parameterType="java.lang.Object" resultType="com.platform.dao.vo.spare.SparePartUsedVO">

+ 88 - 0
platform-rest/src/main/java/com/platform/rest/controller/report/SparePartInfoReportController.java

@@ -0,0 +1,88 @@
+package com.platform.rest.controller.report;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.DateUtils;
+import com.platform.common.util.R;
+import com.platform.dao.dto.sqarepartmanage.SparePartUsedDTO;
+import com.platform.dao.util.ExcelUtil;
+import com.platform.dao.vo.export.sqarepartmanage.ExportSparePartUsedReportVO;
+import com.platform.dao.vo.report.SparePartInfoReportVO;
+import com.platform.dao.vo.spare.SparePartUsedVO;
+import com.platform.rest.log.annotation.SysLog;
+import com.platform.service.sqarepartmanage.SparePartUsedService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @Description 备件报表 控制器
+ * @Author liuyu
+ * @Date 2020-05-29 10:39:40
+ * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/report/spare-part/infos")
+public class SparePartInfoReportController {
+
+    private final SparePartUsedService sparePartUsedService;
+
+    /**
+     * 备件每月统计报表导出
+     *
+     * @param dto  查询条件
+     * @param year 查询年份
+     * @return R
+     */
+    @SysLog("备件月度报表")
+    @GetMapping("")
+    public R getMonthReportByYear(SparePartUsedDTO dto, @RequestParam(required = false) Integer year, @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth) {
+        return new R(sparePartUsedService.getMonthReport(dto, year, startMonth, endMonth));
+    }
+
+    /**
+     * 备件每月统计报表导出
+     *
+     * @param dto  查询条件
+     * @param year 查询年份
+     * @return R
+     */
+    @GetMapping("/export")
+    @SysLog("备件月度报表导出")
+    public void export(HttpServletResponse response, SparePartUsedDTO dto, @RequestParam(required = false) Integer year, @RequestParam(required = false) LocalDate startMonth, @RequestParam(required = false) LocalDate endMonth) {
+        List<SparePartInfoReportVO> list = sparePartUsedService.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, SparePartInfoReportVO.class, list, fileName);
+    }
+
+    /**
+     * 备件每月统计报表导出
+     *
+     * @param dto  查询条件
+     * @param year 查询年份
+     * @return R
+     */
+    @GetMapping("/export/month")
+    @SysLog("备件每月明细导出")
+    public void export(HttpServletResponse response, SparePartUsedDTO dto, @RequestParam(required = false) Integer year,
+                       @RequestParam(required = false) Integer month) {
+        List<SparePartUsedVO> list = sparePartUsedService.getMonthReportMonth(dto,year,month);
+        String fileName = "";
+        fileName = year + "-" + month + "-备件统计明细";
+        if (CollectionUtil.isNotEmpty(list)) {
+            ExcelUtil.exportResponseDict(response, ExportSparePartUsedReportVO.class, BeanConverterUtil.copyListProperties(list, ExportSparePartUsedReportVO.class), fileName);
+        }
+    }
+}

+ 4 - 4
platform-rest/src/main/java/com/platform/rest/controller/sqarepartmanage/SparePartUsedController.java

@@ -71,17 +71,17 @@ public class SparePartUsedController {
     @SysLog("新增维修单-维修项目关联")
     @PostMapping("/batch")
     public R save(@Validated({AddGroup.class}) @RequestBody List<SparePartUsedDTO> sparePartUsedDTOList) throws Exception {
-        for(SparePartUsedDTO sparePartUsedDTO:sparePartUsedDTOList ){
-          /*  SparePartUsedDTO d = new SparePartUsedDTO();
+        /*for(SparePartUsedDTO sparePartUsedDTO:sparePartUsedDTOList ){
+            SparePartUsedDTO d = new SparePartUsedDTO();
             d.setRepairId(sparePartUsedDTO.getRepairId());
             d.setSpareId(sparePartUsedDTO.getSpareId());
             d.setSbId(sparePartUsedDTO.getSbId());
             int count = sparePartUsedService.getCountByDTO(d);
             if(count != 0){
                 throw new BusinessException("已经存在该备件,修改即可,无需添加");
-            }*/
+            }
             sparePartUsedDTO.setId(IdGeneratorUtils.getObjectId());
-        }
+        }*/
         sparePartUsedService.saveModelListByDTO(sparePartUsedDTOList);
         return new R<>("添加成功");
     }

+ 21 - 1
platform-service/src/main/java/com/platform/service/sqarepartmanage/SparePartUsedService.java

@@ -2,11 +2,12 @@ package com.platform.service.sqarepartmanage;
 
 import com.platform.dao.bean.MyVOPage;
 import com.platform.dao.dto.sqarepartmanage.SparePartUsedDTO;
-import com.platform.dao.dto.store.OutStoreFormDTO;
 import com.platform.dao.entity.sqarepartmanage.SparePartUsed;
+import com.platform.dao.vo.report.SparePartInfoReportVO;
 import com.platform.dao.vo.spare.SparePartUsedVO;
 import com.platform.service.base.IBaseService;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -65,4 +66,23 @@ public interface SparePartUsedService extends IBaseService<SparePartUsed, SpareP
     MyVOPage<SparePartUsedVO> statisticsByGroupBySparePage(SparePartUsedDTO model, int pageNum, int pageSize);
 
     List<SparePartUsedVO> selectSparePartUsedListByRepairId(String repairId);
+
+    /**
+     * 报表数据
+     * @param sparePartUsedDTO
+     * @param searchYear
+     * @param startMonth
+     * @param endMonth
+     * @return
+     */
+    List<SparePartInfoReportVO> getMonthReport(SparePartUsedDTO sparePartUsedDTO, Integer searchYear, LocalDate startMonth, LocalDate endMonth);
+
+    /**
+     * 每月详细数据
+     * @param sparePartUsedDTO
+     * @param year
+     * @param month
+     * @return
+     */
+    List<SparePartUsedVO> getMonthReportMonth(SparePartUsedDTO sparePartUsedDTO, Integer year, Integer month);
 }

+ 76 - 7
platform-service/src/main/java/com/platform/service/sqarepartmanage/impl/SparePartUsedServiceImpl.java

@@ -4,32 +4,30 @@ import cn.hutool.core.util.ObjectUtil;
 import com.github.pagehelper.PageHelper;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
-import com.platform.common.util.BeanConverterUtil;
-import com.platform.common.util.BigDecimalUtil;
-import com.platform.common.util.IdGeneratorUtils;
-import com.platform.common.util.SecurityUtils;
+import com.platform.common.util.*;
 import com.platform.dao.bean.MyVOPage;
 import com.platform.dao.dto.sqarepartmanage.SparePartUsedDTO;
-import com.platform.dao.dto.store.OutStoreFormDTO;
 import com.platform.dao.entity.sqarepartmanage.SparePartUsed;
 import com.platform.dao.entity.store.SpareStore;
-import com.platform.dao.enums.DelFlagEnum;
 import com.platform.dao.enums.SparePartUsedStatusEnum;
 import com.platform.dao.mapper.sqarepartmanage.SparePartUsedMapper;
 import com.platform.dao.mapper.store.SpareStoreMapper;
 import com.platform.dao.mapper.store.SpareStoreSecondMapper;
+import com.platform.dao.vo.report.SparePartInfoReportVO;
 import com.platform.dao.vo.spare.SparePartUsedVO;
 import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.sqarepartmanage.SparePartUsedService;
-import com.platform.service.store.SpareStoreService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import tk.mybatis.mapper.weekend.Weekend;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 备件使用表 service 实现类
@@ -155,4 +153,75 @@ public class SparePartUsedServiceImpl extends BaseServiceImpl<SparePartUsedMappe
     public List<SparePartUsedVO> selectSparePartUsedListByRepairId(String repairId) {
         return mapper.selectSparePartUsedListByRepairId(repairId);
     }
+
+    @Override
+    public List<SparePartInfoReportVO> getMonthReport(SparePartUsedDTO sparePartUsedDTO, Integer searchYear, LocalDate startMonth, LocalDate endMonth) {
+        List<Map<String, LocalDateTime>> monthStartAndEndList = null;
+        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);
+        }
+
+        // 总数
+        sparePartUsedDTO.setSearchStartTime(searchStartTime.toLocalDate());
+        sparePartUsedDTO.setSearchEndTime(searchEndTime.toLocalDate());
+        List<SparePartUsedVO> list = mapper.selectVOList(sparePartUsedDTO);
+
+        List<SparePartInfoReportVO> result = new ArrayList<>();
+        for(Map<String, LocalDateTime> map: monthStartAndEndList){
+            SparePartInfoReportVO vo = new SparePartInfoReportVO();
+            List<SparePartUsedVO> detailList = new ArrayList<>();
+            vo.setYear(map.get("searchStartTimeMonth").getYear());
+            vo.setMonth(map.get("searchStartTimeMonth").getMonthValue());
+            BigDecimal totalNum = new BigDecimal(0);  // 更换数目
+            BigDecimal totalPrice = new BigDecimal(0.0); // 更换金额
+            for(SparePartUsedVO useVO: list){
+                if(useVO.getStartDate().isAfter(map.get("searchStartTimeMonth").toLocalDate()) &&
+                        useVO.getStartDate().isBefore(map.get("searchEndTimeMonth").toLocalDate())){
+                    totalNum = totalNum.add(useVO.getNum());
+                    totalPrice = totalPrice.add(useVO.getPrice());
+                    detailList.add(useVO);
+                }
+            }
+            vo.setTotalNum(totalNum);
+            vo.setTotalPrice(totalPrice);
+            vo.setDetailList(detailList);
+            result.add(vo);
+        }
+        return result;
+    }
+
+    @Override
+    public List<SparePartUsedVO> getMonthReportMonth(SparePartUsedDTO sparePartUsedDTO, Integer year, Integer month) {
+        LocalDateTime searchStartTimeMonth = DateUtils.getFirstDayOfMonth(year, month);
+        LocalDateTime searchEndTimeMonth = DateUtils.getLastDayOfMonth(year, month);
+        // 总数
+        sparePartUsedDTO.setSearchStartTime(searchStartTimeMonth.toLocalDate());
+        sparePartUsedDTO.setSearchEndTime(searchEndTimeMonth.toLocalDate());
+        return mapper.selectVOList(sparePartUsedDTO);
+    }
+
+    public static void main(String[] args) {
+        LocalDate localDate = LocalDate.now();
+        int year = localDate.getYear();
+        // 如2021-10-15号码,则month=10,需要计算到11月份,需要加1
+        int month = localDate.getMonthValue();
+        System.out.println(month);
+    }
 }