瀏覽代碼

仓库图表->添加仓库根据时间判断入库数量接口

caifc 3 年之前
父節點
當前提交
d11ad17b63

+ 14 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warehouse/warehouseBusiness/TWarehousebillsitemsController.java

@@ -3,8 +3,10 @@ package com.ruoyi.web.controller.warehouse.warehouseBusiness;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
 import com.ruoyi.warehouseBusiness.service.ITWarehousebillsitemsService;
@@ -98,4 +100,16 @@ public class TWarehousebillsitemsController extends BaseController {
         List<Map<String, Object>> maps = tWarehousebillsitemsService.selectStorageFeeItemfTruckNo();
         return AjaxResult.success(maps);
     }
+
+    /**
+     * 计算仓库时间范围内入库比较
+     */
+    @PostMapping("/warehouseComparison")
+    public AjaxResult warehouseComparison(@RequestBody WarehouseDTO warehouseDto) {
+        if (StringUtils.isEmpty(warehouseDto.getQueryType()) || StringUtils.isNull(warehouseDto.getQueryTime())) {
+            return AjaxResult.error("未找到查寻类型与日期");
+        }
+        return tWarehousebillsitemsService.warehouseComparison(warehouseDto);
+    }
+
 }

+ 37 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/enums/WarehouseEnum.java

@@ -0,0 +1,37 @@
+package com.ruoyi.common.core.domain.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * @author caifc
+ * @date 2021-10-22 17:19
+ */
+@Getter
+@AllArgsConstructor
+public enum WarehouseEnum {
+
+    // 计算入库时间区间类型
+
+    BY_YEAR("year", "按照年"),
+    BY_MONTH("month", "按照月"),
+    BY_WEEK("week", "按照周"),
+
+
+    ;
+
+    private final String type;
+    private final String name;
+
+    public static WarehouseEnum fromType(String tp) {
+        for (WarehouseEnum type : WarehouseEnum.values()) {
+            if (Objects.equals(type.getType(), tp)) {
+                return type;
+            }
+        }
+        throw new IllegalArgumentException("warehouse type not exist");
+    }
+
+}

+ 27 - 4
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -245,7 +245,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
      *  获取当前月份第一天与最后一天
      * @return
      */
-    public static List<String> getMonth()
+    public static List<String> getMonthList()
     {
         List<String> stringList = new ArrayList<>();
         Calendar cale = null;
@@ -339,7 +339,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
      * @param date
      * @return
      */
-    public static Date dateConversionMax(Date date) {
+    public static Date dateConversionMax(Date date)
+    {
         LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
         LocalDateTime startOfDay = localDateTime.with(LocalTime.MAX);
         return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
@@ -350,7 +351,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
      * @param date
      * @return
      */
-    public static Date dateConversionMin(Date date) {
+    public static Date dateConversionMin(Date date)
+    {
         LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
         LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
         return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
@@ -361,8 +363,29 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
      * @param date
      * @return
      */
-    public static String dateToString (Date date){
+    public static String dateToString (Date date)
+    {
         return parseDateToStr(YYYY_MM_DD_HH_MM_SS, date);
     }
 
+    /**
+     *  获取传入日期年份
+     * @param date
+     * @return
+     */
+    public static String getYear (Date date)
+    {
+        return parseDateToStr(YYYY, date);
+    }
+
+    /**
+     *  获取传入日期月份
+     * @param date
+     * @return
+     */
+    public static String getMonth (Date date)
+    {
+        return parseDateToStr(MM, date);
+    }
+
 }

+ 1 - 1
ruoyi-fleet/src/main/java/com/ruoyi/orderPlan/service/impl/FtmsorderbillscarsServiceImpl.java

@@ -233,7 +233,7 @@ public class FtmsorderbillscarsServiceImpl implements IftmsorderbillscarsService
         // 月份
         Ftmsorderbillscars ftmsorderbillscars = new Ftmsorderbillscars();
         ftmsorderbillscars.setDriverTel(phoneNumber);
-        ftmsorderbillscars.setMonthList(DateUtils.getMonth());
+        ftmsorderbillscars.setMonthList(DateUtils.getMonthList());
         Map<String, Object> map = ftmsorderbillscarsMapper.selectMonthlyOrder(ftmsorderbillscars);
         map.put("count", count);
         return AjaxResult.success(map);

+ 25 - 22
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/TWarehousebillsModify.java

@@ -1,12 +1,11 @@
 package com.ruoyi.warehouseBusiness.domain;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
-import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 仓库主(出入库)对象 t_warehousebills_modify
@@ -97,10 +96,18 @@ public class TWarehousebillsModify extends BaseEntity {
     /**
      * 客户信息
      */
-    @TableField(exist = false)
-    @Excel(name = "客户信息")
     private String corpName;
 
+    /**
+     * 制单时间
+     */
+    private List<String> createTimeList;
+
+    /**
+     * 业务时间
+     */
+    private List<String> bstimeList;
+
     public Long getfId() {
         return fId;
     }
@@ -213,23 +220,19 @@ public class TWarehousebillsModify extends BaseEntity {
         this.corpName = corpName;
     }
 
-    @Override
-    public String toString() {
-        return "TWarehousebillsModify{" +
-                "fId=" + fId +
-                ", fPid=" + fPid +
-                ", fBillno='" + fBillno + '\'' +
-                ", fCorpid=" + fCorpid +
-                ", fBilltype='" + fBilltype + '\'' +
-                ", fDc='" + fDc + '\'' +
-                ", fMblno='" + fMblno + '\'' +
-                ", fGoodsid=" + fGoodsid +
-                ", fMarks='" + fMarks + '\'' +
-                ", fWarehouseid=" + fWarehouseid +
-                ", fStatus='" + fStatus + '\'' +
-                ", fBstime=" + fBstime +
-                ", delFlag='" + delFlag + '\'' +
-                ", corpName='" + corpName + '\'' +
-                '}';
+    public List<String> getCreateTimeList() {
+        return createTimeList;
+    }
+
+    public void setCreateTimeList(List<String> createTimeList) {
+        this.createTimeList = createTimeList;
+    }
+
+    public List<String> getBstimeList() {
+        return bstimeList;
+    }
+
+    public void setBstimeList(List<String> bstimeList) {
+        this.bstimeList = bstimeList;
     }
 }

+ 30 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/dto/WarehouseDTO.java

@@ -0,0 +1,30 @@
+package com.ruoyi.warehouseBusiness.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author caifc
+ * @date 2021-11-12 11:12
+ */
+@Data
+public class WarehouseDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    // 查询类型(按照年、按照月、按照周)
+    private String queryType;
+
+    // 查询参考时间
+    private Date queryTime;
+
+    // 查询的仓库类型
+    private String warehouseType;
+
+    // 查询时间区间
+    private List<String> timeList;
+
+}

+ 33 - 0
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/domain/vo/WarehouseTimeIntervalVO.java

@@ -0,0 +1,33 @@
+package com.ruoyi.warehouseBusiness.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author caifc
+ * @date 2021-11-12 11:12
+ */
+@Data
+public class WarehouseTimeIntervalVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // 仓库id
+    private Long warehouseId;
+
+    // 仓库名称
+    private String warehouseName;
+
+    // 总数量
+    private Long sumQty = 0L;
+
+    // 上次数量
+    private Long lastQty = 0L;
+
+    // 本次数量
+    private Long thisQty = 0L;
+
+    // 差值数量
+    private Long difference = 0L;
+
+}

+ 11 - 1
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/mapper/TWarehousebillsitemsMapper.java

@@ -4,7 +4,9 @@ package com.ruoyi.warehouseBusiness.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
 import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
 import com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO;
+import com.ruoyi.warehouseBusiness.domain.vo.WarehouseTimeIntervalVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -270,10 +272,18 @@ public interface TWarehousebillsitemsMapper extends BaseMapper<TWarehousebillsit
     List<TWarehousebillsitems> selectByBsDateList(@Param("starDate") Date starDate, @Param("endDate") Date endDate);
 
     /**
-     *  根据客户id、时间区间、状态查询仓储明细
+     * 根据客户id、时间区间、状态查询仓储明细
+     *
      * @param tWarehouseBills
      * @return
      */
     List<TWarehousebillsitems> selectListByCorpId(@Param("bills") TWarehouseBills tWarehouseBills);
 
+    /**
+     * 根据日期区间计算 仓库入库数量比较
+     *
+     * @param warehouseDto
+     * @return
+     */
+    List<WarehouseTimeIntervalVO> selectInboundQtyByTime(@Param("dto") WarehouseDTO warehouseDto);
 }

+ 11 - 1
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/ITWarehousebillsitemsService.java

@@ -1,8 +1,9 @@
 package com.ruoyi.warehouseBusiness.service;
 
 
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
 import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -74,4 +75,13 @@ public interface ITWarehousebillsitemsService {
      * @return
      */
     public List<Map<String,Object>> selectStorageFeeItemfTruckNo();
+
+
+    /**
+     *  根据日期区间计算 仓库入库数量比较
+     * @param warehouseDto  查询条件
+     * @return
+     */
+    AjaxResult warehouseComparison(WarehouseDTO warehouseDto);
+
 }

+ 133 - 3
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/impl/TWarehousebillsitemsServiceImpl.java

@@ -1,15 +1,23 @@
 package com.ruoyi.warehouseBusiness.service.impl;
 
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.ruoyi.basicData.mapper.TWarehouseMapper;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.TWarehouse;
+import com.ruoyi.common.core.domain.enums.WarehouseEnum;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
+import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
+import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
+import com.ruoyi.warehouseBusiness.domain.vo.WarehouseTimeIntervalVO;
 import com.ruoyi.warehouseBusiness.mapper.TWarehousebillsitemsMapper;
 import com.ruoyi.warehouseBusiness.service.ITWarehousebillsitemsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 仓库明细从表Service业务层处理
@@ -20,6 +28,9 @@ import java.util.Map;
 @Service
 public class TWarehousebillsitemsServiceImpl implements ITWarehousebillsitemsService {
     @Autowired
+    private TWarehouseMapper warehouseMapper;
+
+    @Autowired
     private TWarehousebillsitemsMapper tWarehousebillsitemsMapper;
 
     /**
@@ -92,11 +103,130 @@ public class TWarehousebillsitemsServiceImpl implements ITWarehousebillsitemsSer
 
     @Override
     public int warehouseItemfItemstatus(Long fPid, Long fItemstatus) {
-        return tWarehousebillsitemsMapper.warehouseItemfItemstatus(fPid,fItemstatus);
+        return tWarehousebillsitemsMapper.warehouseItemfItemstatus(fPid, fItemstatus);
     }
 
     @Override
     public List<Map<String, Object>> selectStorageFeeItemfTruckNo() {
         return tWarehousebillsitemsMapper.selectStorageFeeItemfTruckNo();
     }
+
+    /**
+     * 根据日期区间计算 仓库入库数量比较
+     *
+     * @param warehouseDto 查询条件
+     * @return
+     */
+    @Override
+    public AjaxResult warehouseComparison(WarehouseDTO warehouseDto) {
+        warehouseDto.setWarehouseType(WarehouseTypeEnum.SJRK.getType());
+        Date queryTime = warehouseDto.getQueryTime();
+        List<String> newTimeList = new ArrayList<>();
+        List<String> timeList = new ArrayList<>();
+        // 结果
+        List<WarehouseTimeIntervalVO> firstItemsList;
+        List<WarehouseTimeIntervalVO> secondItemsList;
+        // 按照年
+        if (WarehouseEnum.BY_YEAR.getType().equals(warehouseDto.getQueryType())) {
+            // 获取上一年
+            String year = DateUtils.getYear(queryTime);
+            timeList.add(year + "-01-01");
+            timeList.add(year + "-12-31");
+            warehouseDto.setTimeList(timeList);
+            firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+            // 获取当前年
+            Date newDate = DateUtils.addYears(queryTime, 1);
+            String newYear = DateUtils.getYear(newDate);
+            newTimeList.add(newYear + "-01-01");
+            newTimeList.add(newYear + "-12-31");
+            warehouseDto.setTimeList(newTimeList);
+            secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+            return queryWarehouseQty(firstItemsList, secondItemsList);
+        } else
+            // 按照月
+            if (WarehouseEnum.BY_MONTH.getType().equals(warehouseDto.getQueryType())) {
+                // 获取年
+                String year = DateUtils.getYear(queryTime);
+                // 获取月
+                String month = DateUtils.getMonth(queryTime);
+                timeList.add(DateUtils.getFirstDay(Integer.parseInt(year), Integer.parseInt(month)));
+                timeList.add(DateUtils.getLastDay(Integer.parseInt(year), Integer.parseInt(month)));
+                warehouseDto.setTimeList(timeList);
+                firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+                Date newDate = DateUtils.addMonths(queryTime, 1);
+                // 获取年
+                String newYear = DateUtils.getYear(newDate);
+                // 获取月
+                String newMonth = DateUtils.getMonth(newDate);
+                newTimeList.add(DateUtils.getFirstDay(Integer.parseInt(newYear), Integer.parseInt(newMonth)));
+                newTimeList.add(DateUtils.getLastDay(Integer.parseInt(newYear), Integer.parseInt(newMonth)));
+                warehouseDto.setTimeList(newTimeList);
+                secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+                return queryWarehouseQty(firstItemsList, secondItemsList);
+            } else
+                // 按照周
+                if (WarehouseEnum.BY_WEEK.getType().equals(warehouseDto.getQueryType())) {
+                    // 上周
+                    Date date = DateUtils.addDays(queryTime, -7);
+                    timeList.add(DateUtils.dateTime(date));
+                    timeList.add(DateUtils.dateTime(queryTime));
+                    warehouseDto.setTimeList(timeList);
+                    firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+                    // 本周
+                    Date newDate = DateUtils.addDays(queryTime, 1);
+                    newTimeList.add(DateUtils.dateTime(newDate));
+                    newTimeList.add(DateUtils.dateTime(DateUtils.addDays(newDate, 6)));
+                    warehouseDto.setTimeList(newTimeList);
+                    secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
+                    return queryWarehouseQty(firstItemsList, secondItemsList);
+                }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 查询数量
+     *
+     * @param firstItemsList  上次
+     * @param secondItemsList 本次
+     * @return
+     */
+    private AjaxResult queryWarehouseQty(List<WarehouseTimeIntervalVO> firstItemsList,
+                                         List<WarehouseTimeIntervalVO> secondItemsList) {
+        // 如果都为空
+        if (CollectionUtils.isEmpty(firstItemsList) && CollectionUtils.isEmpty(secondItemsList)) {
+            return AjaxResult.error();
+        }
+        if (CollectionUtils.isNotEmpty(firstItemsList)) {
+            List<Long> warehouseIds = firstItemsList.stream().filter(li -> Objects.nonNull(li.getWarehouseId())).map(WarehouseTimeIntervalVO::getWarehouseId)
+                    .distinct().collect(Collectors.toList());
+
+            List<TWarehouse> warehouseList = warehouseMapper.selectByIds(warehouseIds);
+            firstItemsList.forEach(li -> {
+                li.setLastQty(li.getSumQty());
+                Optional<TWarehouse> warehouseFirst = warehouseList.stream().filter(ware -> Objects.equals(ware.getfId(), li.getWarehouseId())).findFirst();
+                warehouseFirst.ifPresent(tWarehouse -> li.setWarehouseName(tWarehouse.getfName()));
+
+                Optional<WarehouseTimeIntervalVO> first = secondItemsList.stream().filter(second -> Objects.equals(li.getWarehouseId(), second.getWarehouseId()))
+                        .findFirst();
+                if (first.isPresent()) {
+                    li.setThisQty(first.get().getSumQty());
+                    li.setDifference(li.getThisQty() - li.getLastQty());
+                } else {
+                    li.setDifference(li.getLastQty() * -1);
+                }
+            });
+            return AjaxResult.success(firstItemsList);
+        }
+        List<Long> warehouseIds = firstItemsList.stream().filter(li -> Objects.nonNull(li.getWarehouseId())).map(WarehouseTimeIntervalVO::getWarehouseId)
+                .distinct().collect(Collectors.toList());
+        List<TWarehouse> warehouseList = warehouseMapper.selectByIds(warehouseIds);
+        secondItemsList.forEach(li -> {
+            li.setThisQty(li.getSumQty());
+            li.setDifference(li.getLastQty());
+            Optional<TWarehouse> warehouseFirst = warehouseList.stream().filter(ware -> Objects.equals(ware.getfId(), li.getWarehouseId())).findFirst();
+            warehouseFirst.ifPresent(tWarehouse -> li.setWarehouseName(tWarehouse.getfName()));
+        });
+        return AjaxResult.success(secondItemsList);
+    }
+
 }

+ 2 - 1
ruoyi-warehouse/src/main/resources/mapper/warehouseBusiness/TWarehousebillsModifyMapper.xml

@@ -41,7 +41,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fMarks != null  and fMarks != ''"> and f_marks = #{fMarks}</if>
             <if test="fWarehouseid != null "> and f_warehouseid = #{fWarehouseid}</if>
             <if test="fStatus != null "> and f_status = #{fStatus}</if>
-            <if test="fBstime != null "> and f_bstime = #{fBstime}</if>
+            <if test="bstimeList != null and bstimeList[0] != null and bstimeList[0] != ''"> and f_bstime BETWEEN #{bstimeList[0]} and #{bstimeList[1]}</if>
+            <if test="createTimeList != null and createTimeList[0] != null and createTimeList[0] != ''"> and create_time BETWEEN #{createTimeList[0]} and #{createTimeList[1]}</if>
         </where>
         order by f_id desc
     </select>

+ 15 - 1
ruoyi-warehouse/src/main/resources/mapper/warehouseBusiness/TWarehousebillsitemsMapper.xml

@@ -73,7 +73,12 @@
         <result property="isCalculateStorageFees"    column="is_calculate_storage_fees"    />
     </resultMap>
 
-    <resultMap type="com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO" id="StorageFeesInfoResult">
+    <resultMap type="WarehouseTimeIntervalVO" id="WarehouseTimeIntervalResult">
+        <result property="sumQty"    column="f_qty"    />
+        <result property="warehouseId"    column="f_warehouseid"    />
+    </resultMap>
+
+    <resultMap type="CalculateStorageFeesInfoVO" id="StorageFeesInfoResult">
         <result property="warehouse" column="f_warehouseid"/>
         <result property="fId" column="f_id"/>
         <result property="warehouse" column="f_warehouseid"/>
@@ -917,6 +922,15 @@
         <if test="bills.fMblno != null and bills.fMblno != ''">and item.f_mblno like concat('%',#{bills.fMblno},'%')</if>
     </select>
 
+    <select id="selectInboundQtyByTime" resultMap="WarehouseTimeIntervalResult">
+        SELECT w.f_warehouseid, sum(item.f_qty) f_qty
+        FROM t_warehousebills w LEFT JOIN t_warehousebillsitems item ON item.f_pid = w.f_id
+        WHERE
+            item.f_billtype = #{dto.warehouseType}
+            and item.f_bsdate between #{dto.timeList[0]} and #{dto.timeList[1]}
+        GROUP BY w.f_warehouseid;
+    </select>
+
     <update id="updateItemStorageFeeDeadlineByPId">
         UPDATE t_warehousebillsitems
         SET f_storage_fee_deadline = #{time}