czt
2026-01-16 a99c35bb764b1208141541e32034a973c34a3cd1
库存定时统计功能
已删除1个文件
已修改11个文件
已添加1个文件
628 ■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutRecordService.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutStockChangeService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobDepotStoreService.java 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/init/SystemRunner.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/sys/init/SystemRunner.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/login.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/InoutLossOver.java
@@ -35,7 +35,7 @@
    @TableField("dept_id")
    private String deptId;
    @Column(name = "depot_id", columnDefinition = "varchar(40) COMMENT '入库仓库'")
    @Column(name = "depot_id", columnDefinition = "varchar(40) COMMENT '损益仓库'")
    @TableField("depot_id")
    private String depotId;
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.fzzy.igds.constant.RedisConst;
import com.fzzy.igds.domain.Depot;
import com.fzzy.igds.domain.DepotStore;
import com.fzzy.igds.mapper.DepotMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.ruoyi.common.core.redis.RedisCache;
@@ -58,6 +59,17 @@
    }
    /**
     * æ ¹æ®åº“存表信息,更新仓库库存
     * @param data
     */
    public void updateByDepotStore(DepotStore data) {
        UpdateWrapper<Depot> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", data.getDepotId()).set("storage_real", data.getStorageReal());
        depotMapper.update(null, updateWrapper);
    }
    /**
     * ä¿å­˜æ›´æ–°ä»“库信息
     *
     * @param depot
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java
@@ -1,18 +1,14 @@
package com.fzzy.igds.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.domain.Depot;
import com.fzzy.igds.domain.DepotStore;
import com.fzzy.igds.mapper.DepotMapper;
import com.fzzy.igds.mapper.DepotStoreMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.utils.DateUtil;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
@@ -28,9 +24,9 @@
public class DepotStoreService {
    @Resource
    private DepotStoreMapper depotStoreMapper;
    private DepotService depotService;
    @Resource
    private DepotMapper depotMapper;
    private DepotStoreMapper depotStoreMapper;
    public void listPageData(Page<DepotStore> page, IgdsBaseParam param) {
        QueryWrapper<DepotStore> queryWrapper = new QueryWrapper<>();
@@ -53,41 +49,23 @@
        depotStoreMapper.selectPage(page, queryWrapper);
    }
    /**
     * æ›´æ–°ä¿å­˜æ•°æ®
     *
     * @param data
     */
    public void saveDepotStore(DepotStore data) {
        if (StringUtils.isEmpty(data.getCompanyId())) {
            data.setCompanyId(ContextUtil.getCompanyId());
        }
        if (StringUtils.isEmpty(data.getDeptId())) {
            data.setDeptId(ContextUtil.subDeptId(null));
        }
        if (StringUtils.isEmpty(data.getId())) {
            data.setId(data.getDepotId() + "_" + DateFormatUtils.format(data.getStoreDate(), "yyyyMMddHHmmss") + "_" + DateFormatUtils.format(data.getUpdateTime(), "yyyyMMddHHmmss"));
            data.setCreateTime(new Date());
            data.setRemark("系统生成");
            data.setUpdateBy(ContextUtil.getLoginUserName());
            data.setUpdateTime(new Date());
            depotStoreMapper.insert(data);
        }else{
            data.setUpdateBy(ContextUtil.getLoginUserName());
            data.setUpdateTime(new Date());
            depotStoreMapper.updateById(data);
        }
    }
    /**
     * åˆ é™¤æ•°æ®
     *
     * å…ˆæ›´æ–°ï¼Œå¦‚果没有则新增
     * æ•°æ®å¤„理好,此方法不处理任何字段
     * @param data
     * @return
     */
    public String delDepotStore(DepotStore data) {
        depotStoreMapper.deleteById(data);
        return null;
    public void updateAndSave(DepotStore data) {
        int i = depotStoreMapper.updateById(data);
        if(i < 1){
            i = depotStoreMapper.insert(data);
        }
        if(i > 0){
            //更改到仓库表
            depotService.updateByDepotStore(data);
        }
    }
    /**
@@ -101,9 +79,8 @@
        QueryWrapper<DepotStore> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("depot_id", depotId);
        queryWrapper.ge("create_time", time);
        queryWrapper.le("create_time", time);
        queryWrapper.orderByDesc("create_time");
        queryWrapper.le("update_time", time);
        queryWrapper.orderByDesc("update_time");
        List<DepotStore> list = depotStoreMapper.selectList(queryWrapper);
@@ -111,19 +88,6 @@
            return null;
        }
        return list.get(0);
    }
    public void addDepotStore(DepotStore store, boolean updateDepot) {
        if (null == store.getUpdateTime()) store.setUpdateTime(new Date());
        if (null == store.getId()) store.setId(ContextUtil.generateId());
        depotStoreMapper.insert(store);
        if (updateDepot) {
            UpdateWrapper<Depot> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("id", store.getDepotId()).set("storage_real", store.getStorageReal());
            depotMapper.update(null, updateWrapper);
        }
    }
}
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutConfService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.RedisConst;
import com.fzzy.igds.domain.Dept;
import com.fzzy.igds.mapper.InoutConfMapper;
import com.fzzy.igds.mapper.InoutSysConfMapper;
import com.fzzy.igds.domain.InoutConf;
@@ -31,6 +32,8 @@
public class InoutConfService {
    @Resource
    private ISysDeptService iSysDeptService;
    @Resource
    private CoreDeptService deptService;
    @Resource
    private InoutConfMapper inoutConfMapper;
    @Resource
@@ -181,16 +184,16 @@
     * @return
     */
    public List<InoutConf> getInoutConfList(String companyId, String deptId) {
        QueryWrapper<InoutConf> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isEmpty(companyId)) {
            companyId = ContextUtil.getCompanyId();
        }
        if (StringUtils.isEmpty(deptId)) {
            deptId = ContextUtil.subDeptId(null);
        }
        QueryWrapper<InoutConf> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("dept_id", deptId);
        queryWrapper.eq("company_id", companyId);
        if (StringUtils.isNotEmpty(deptId)) {
            queryWrapper.eq("dept_id", deptId);
        }
        return inoutConfMapper.selectList(queryWrapper);
    }
@@ -244,12 +247,21 @@
     * è®¾ç½®ç¼“å­˜
     *
     * @param companyId
     * @param deptId
     */
    public void flushInoutConfCache(String companyId, String deptId) {
        List<InoutConf> list = this.getInoutConfList(companyId, deptId);
        String key = RedisConst.buildKey(companyId, Constant.CACHE_INOUT_CONF_LIST, deptId);
        redisCache.setCacheObject(key, list);
    public void flushInoutConfCache(String companyId) {
        List<Dept> depts = deptService.listDept(null, companyId, null);
        if(null == depts || depts.isEmpty()){
            return;
        }
        List<InoutConf> inoutConfList;
        for (Dept dept : depts) {
            inoutConfList = this.getInoutConfList(companyId, dept.getId());
            if(null == inoutConfList || inoutConfList.isEmpty()){
                continue;
            }
            String key = RedisConst.buildKey(companyId, Constant.CACHE_INOUT_CONF_LIST, dept.getId());
            redisCache.setCacheObject(key, inoutConfList);
        }
    }
    /**
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutLossOverService.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.domain.InoutLossOver;
import com.fzzy.igds.domain.InoutStockChange;
import com.fzzy.igds.mapper.InoutLossOverMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.utils.DateUtil;
@@ -53,21 +54,24 @@
        inoutLossOverMapper.selectPage(page, queryWrapper);
    }
    /**
     * æŸ¥è¯¢åº“区下所有信息
     * æ ¹æ®æ—¶é—´ç±»åž‹ï¼ŒèŽ·å–æ•°æ®
     * @param timeType
     * @param param
     * @return
     */
    public List<InoutLossOver> listData(String companyId, String deptId) {
    public List<InoutLossOver> getDataByTime(String timeType, IgdsBaseParam param) {
        if(StringUtils.isBlank(timeType)){
            return null;
        }
        QueryWrapper<InoutLossOver> queryWrapper = new QueryWrapper<>();
        if(StringUtils.isNotBlank(companyId)){
            queryWrapper.eq("company_id", companyId);
        }
        if(StringUtils.isNotBlank(deptId)){
            queryWrapper.eq("dept_id", deptId);
        }
        queryWrapper.orderByDesc("id");
        queryWrapper.likeRight("dept_id", param.getDeptId());
        queryWrapper.ge(timeType, param.getStart());
        queryWrapper.le(timeType, param.getEnd());
        queryWrapper.orderByAsc("loss_time");
        return inoutLossOverMapper.selectList(queryWrapper);
    }
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutRecordService.java
@@ -6,6 +6,7 @@
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.FoodVariety;
import com.fzzy.igds.constant.RedisConst;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.data.InoutData;
import com.fzzy.igds.data.InoutParam;
import com.fzzy.igds.data.InoutPrintBill;
@@ -23,6 +24,7 @@
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
@@ -51,14 +53,15 @@
    /**
     * åˆ†é¡µæŸ¥è¯¢æ•°æ®
     *
     * @param page
     * @param param
     */
    public void listPageInout(Page<InoutRecord> page, InoutParam param) {
        if(StringUtils.isBlank(param.getCompanyId())){
        if (StringUtils.isBlank(param.getCompanyId())) {
            param.setCompanyId(ContextUtil.getCompanyId());
        }
        if(StringUtils.isBlank(param.getDeptId())){
        if (StringUtils.isBlank(param.getDeptId())) {
            param.setDeptId(ContextUtil.subDeptId(null));
        }
        QueryWrapper<InoutRecord> queryWrapper = getQueryWrapper(param);
@@ -67,13 +70,14 @@
    /**
     * æŸ¥è¯¢æ•°æ®é›†åˆ
     *
     * @param param
     */
    public List<InoutRecord> listInout(InoutParam param) {
        if(StringUtils.isBlank(param.getCompanyId())){
        if (StringUtils.isBlank(param.getCompanyId())) {
            param.setCompanyId(ContextUtil.getCompanyId());
        }
        if(StringUtils.isBlank(param.getDeptId())){
        if (StringUtils.isBlank(param.getDeptId())) {
            param.setDeptId(ContextUtil.subDeptId(null));
        }
        QueryWrapper<InoutRecord> queryWrapper = getQueryWrapper(param);
@@ -83,6 +87,7 @@
    /**
     * å°è£…查询条件
     *
     * @param param
     */
    public QueryWrapper<InoutRecord> getQueryWrapper(InoutParam param) {
@@ -141,14 +146,37 @@
        return queryWrapper;
    }
    /**
     * æ ¹æ®æ—¶é—´ç±»åž‹ï¼ŒèŽ·å–å·²å®Œæˆçš„æ­£å¸¸å•æ®
     * @param timeType
     * @param param
     * @return
     */
    public List<InoutRecord> getCompleteInoutByTime(String timeType, IgdsBaseParam param) {
        if(StringUtils.isBlank(timeType)){
             return null;
        }
        QueryWrapper<InoutRecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("dept_id", param.getDeptId());
        queryWrapper.likeRight("progress", Constant.PROGRESS_RECORD); //已完成的单据
        queryWrapper.ne("record_status", Constant.RECORD_STATUS_DEL); //不是删除的单子,即正常的单子
        queryWrapper.ge(timeType, param.getStart());
        queryWrapper.le(timeType, param.getEnd());
        queryWrapper.orderByAsc("complete_time");
        return inoutRecordMapper.selectList(queryWrapper);
    }
    /**
     * æŸ¥è¯¢æ•°æ®
     *
     * @param param
     * @return
     */
    public InoutRecord selectOne(InoutParam param) {
        if(StringUtils.isBlank(param.getCompanyId())){
        if (StringUtils.isBlank(param.getCompanyId())) {
            param.setCompanyId(ContextUtil.getCompanyId());
        }
        QueryWrapper<InoutRecord> queryWrapper = getQueryWrapper(param);
@@ -158,6 +186,7 @@
    /**
     * éªŒè¯è½¦ç‰Œå·æ˜¯å¦åœ¨æµç¨‹ä¸­
     *
     * @param companyId
     * @param plateNum
     * @return
@@ -177,6 +206,7 @@
    /**
     * æ‰‹åŠ¨è¡¥å•
     *
     * @param data
     * @return
     */
@@ -185,7 +215,7 @@
        //补单数据直接到结果状态
        data.setRecordStatus(Constant.RECORD_STATUS_ADD);
        data.setProgress(Constant.PROGRESS_RECORD);
        if(null != data.getPerWet() && data.getPerWet() > 0){
        if (null != data.getPerWet() && data.getPerWet() > 0) {
            data.setCheckStatus(Constant.STATUS_CHECK);
        }
        String loginUser = ContextUtil.getLoginUserName();
@@ -238,7 +268,7 @@
                data.setId("R_" + id);
            } else if (Constant.TYPE_OUT.equals(data.getType())) {
                data.setId("C_" + id);
            }else {
            } else {
                data.setId("M_" + id);
            }
        }
@@ -251,7 +281,7 @@
        //TODO æ›´æ–°ç¼“å­˜
        //updateInoutCache(data);
        return num;
    }
    /**
@@ -274,6 +304,7 @@
    /**
     * å¼‚常终止
     *
     * @param data
     * @return
     */
@@ -297,15 +328,16 @@
        //TODO åˆ é™¤ç¼“å­˜
        if(i > 0){
        if (i > 0) {
            return null;
        }else {
        } else {
            return "操作失败!";
        }
    }
    /**
     * å‡ºå…¥åº“流程ID创建 202001030001 202001030001
     *
     * @param registerTime
     * @param companyId
     * @return
@@ -369,6 +401,7 @@
    /**
     * æŸ¥è¯¢æœ€å¤§id号,为空则返回null
     *
     * @param companyId
     * @param timeKey
     * @return
@@ -385,9 +418,9 @@
        queryWrapper.orderByDesc("create_time");
        List<InoutRecord> inoutRecords = inoutRecordMapper.selectList(queryWrapper);
        if(null == inoutRecords || inoutRecords.isEmpty()){
        if (null == inoutRecords || inoutRecords.isEmpty()) {
            return null;
        }else {
        } else {
            return inoutRecords.get(0).getId();
        }
    }
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutStockChangeService.java
@@ -2,6 +2,10 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.data.InoutParam;
import com.fzzy.igds.domain.InoutRecord;
import com.fzzy.igds.domain.InoutStockChange;
import com.fzzy.igds.mapper.InoutStockChangeMapper;
import com.fzzy.igds.utils.ContextUtil;
@@ -50,6 +54,28 @@
        inoutStockChangeMapper.selectPage(page, queryWrapper);
    }
    /**
     * æ ¹æ®æ—¶é—´ç±»åž‹ï¼ŒèŽ·å–æ•°æ®
     * @param timeType
     * @param param
     * @return
     */
    public List<InoutStockChange> getDataByTime(String timeType, IgdsBaseParam param) {
        if(StringUtils.isBlank(timeType)){
            return null;
        }
        QueryWrapper<InoutStockChange> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("dept_id", param.getDeptId());
        queryWrapper.ge(timeType, param.getStart());
        queryWrapper.le(timeType, param.getEnd());
        queryWrapper.orderByAsc("change_date");
        return inoutStockChangeMapper.selectList(queryWrapper);
    }
    /**
     * ä¿å­˜æ•°æ®
     * @param data
fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobDepotStoreService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,294 @@
package com.fzzy.igds.timer;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.domain.*;
import com.fzzy.igds.service.*;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.*;
/**
 * @Description åº“存定时统计入口:通过框架定时任务调用,默认每天凌晨1点执行,统计昨天的库存信息
 * @Author CZT
 * @Date 2026/1/14 10:42
 */
@Slf4j
@Service
public class JobDepotStoreService {
    @Resource
    private CoreDeptService deptService;
    @Resource
    private InoutRecordService inoutRecordService;
    @Resource
    private InoutStockChangeService stockChangeService;
    @Resource
    private InoutLossOverService lossOverService;
    @Resource
    private DepotStoreService depotStoreService;
    @Resource
    private DepotService depotService;
    public void timer() {
        doExe();
    }
    /**
     * å¼€å§‹æ‰§è¡Œåº“存统计
     */
    public void doExe() {
        Date time = DateUtil.getNewByDay(new Date(), -1);
        log.info("===============系统定时统计库存信息===============");
        //获取所有的库区信息
        List<Dept> listDept = deptService.listDept(null, ContextUtil.getCompanyId(), null);
        if (null == listDept || listDept.isEmpty()) {
            log.info("-----未获取到库区,不执行库存定时统计-----");
            return;
        }
        Date startTime = null; //出入库最早时间
        for (Dept dept : listDept) {
            startTime = getStartTime(time, dept);
            if (null == startTime) {
                log.info("-----{}在{}未有库存相关数量更新,不执行库存统计-----", dept.getKqmc(), DateFormatUtils.format(time, "yyyy-MM-dd"));
                continue;
            }
            //多天循环统计
            sumMoreDepotStore(startTime, time, dept);
        }
    }
    /**
     * å¤šå¤©å¾ªçŽ¯éåŽ†ç»Ÿè®¡åº“å­˜ä¿¡æ¯
     *
     * @param startTime
     * @param endTime
     * @param dept
     */
    public void sumMoreDepotStore(Date startTime, Date endTime, Dept dept) {
        log.info("-----统计库存信息,库区={},时间={}--->{}-----", dept.getKqmc(), DateFormatUtils.format(startTime, "yyyy-MM-dd"), DateFormatUtils.format(endTime, "yyyy-MM-dd"));
        //获取两个时间相差的天数
        LocalDate startDate = LocalDate.parse(DateFormatUtils.format(startTime, "yyyy-MM-dd"));
        LocalDate endDate = LocalDate.parse(DateFormatUtils.format(endTime, "yyyy-MM-dd"));
        //从最早天开始循环统计库存到当前天
        while (!startDate.isAfter(endDate)) {
            //统计库区库存
            sumDepotStore(startTime, dept);
            //对应时间加1天
            startTime = DateUtils.addDays(startTime, 1);
            //将日期加1天
            startDate = startDate.plusDays(1);
        }
    }
    /**
     * æ ¹æ®æ—¶é—´ï¼Œç»Ÿè®¡æ›´æ–°å½“天的库存信息
     *
     * @param time
     * @param dept
     */
    public void sumDepotStore(Date time, Dept dept) {
        //更改为当天的23点50分
        time = DateUtils.addMinutes(DateUtil.getNextZero(time), -10);
        log.info("-----统计库存信息,库区={},时间={}-----", dept.getKqmc(), DateFormatUtils.format(time, "yyyy-MM-dd"));
        //设置参数
        IgdsBaseParam param = new IgdsBaseParam();
        param.setStart(DateUtil.getCurZero(time));
        param.setEnd(DateUtil.getNextZero(time));
        param.setDeptId(dept.getId());
        //用于存放数量变动的仓库
        Set<String> set = new HashSet<>();
        //统计仓库的数量
        Map<String, Double> map1 = new HashMap<>();
        Map<String, Double> map2 = new HashMap<>();
        Map<String, Double> map3 = new HashMap<>();
        boolean inTag = false;
        boolean outTag = false;
        //获取出入库信息统计仓库数量
        List<InoutRecord> inoutRecords = inoutRecordService.getCompleteInoutByTime("complete_time", param);
        if (null != inoutRecords && !inoutRecords.isEmpty()) {
            for (InoutRecord inoutRecord : inoutRecords) {
                set.add(inoutRecord.getDepotId());
                map1.putIfAbsent(inoutRecord.getDepotId(), 0.0);
                //统计数量
                if (Constant.TYPE_IN.equals(inoutRecord.getType())) {
                    inTag = true;
                    map1.put(inoutRecord.getDepotId(), map1.get(inoutRecord.getDepotId()) + inoutRecord.getRecordWeight());
                }
                if (Constant.TYPE_OUT.equals(inoutRecord.getType())) {
                    outTag = true;
                    map1.put(inoutRecord.getDepotId(), map1.get(inoutRecord.getDepotId()) - inoutRecord.getRecordWeight());
                }
            }
        }
        //获取倒仓信息统计仓库数量
        List<InoutStockChange> stockChanges = stockChangeService.getDataByTime("change_date", param);
        if (null != stockChanges && !stockChanges.isEmpty()) {
            for (InoutStockChange stockChange : stockChanges) {
                set.add(stockChange.getDepotIdIn());
                set.add(stockChange.getDepotIdOut());
                map2.putIfAbsent(stockChange.getDepotIdIn(), 0.0);
                map2.putIfAbsent(stockChange.getDepotIdOut(), 0.0);
                //统计数量
                map2.put(stockChange.getDepotIdIn(), map2.get(stockChange.getDepotIdIn()) + stockChange.getNumber());
                map2.put(stockChange.getDepotIdOut(), map2.get(stockChange.getDepotIdOut()) - stockChange.getNumber());
            }
        }
        //获取损益信息统计仓库数量
        List<InoutLossOver> lossOvers = lossOverService.getDataByTime("loss_time", param);
        if (null != lossOvers && !lossOvers.isEmpty()) {
            for (InoutLossOver lossOver : lossOvers) {
                set.add(lossOver.getDepotId());
                map3.putIfAbsent(lossOver.getDepotId(), 0.0);
                //统计数量
                if (Constant.TYPE_LOSS.equals(lossOver.getType())) {
                    map1.put(lossOver.getDepotId(), map1.get(lossOver.getDepotId()) - lossOver.getAmount());
                }
                if (Constant.TYPE_OVER.equals(lossOver.getType())) {
                    map1.put(lossOver.getDepotId(), map1.get(lossOver.getDepotId()) + lossOver.getAmount());
                }
            }
        }
        Double sum = 0.0;
        Depot depot;
        for (String s : set) {
            sum = 0.0;
            if (null != map1.get(s)) {
                sum += map1.get(s);
            }
            if (null != map2.get(s)) {
                sum += map2.get(s);
            }
            if (null != map3.get(s)) {
                sum += map3.get(s);
            }
            //获取上一条数据
            DepotStore lastData = depotStoreService.getLastData(s, time);
            if (null == lastData) {
                lastData = new DepotStore();
                //主键ID规则:yyyyMMddHHmm_仓库编码
                lastData.setId(DateFormatUtils.format(time, "yyyyMMddHHmm") + "_" + s);
                lastData.setCompanyId(dept.getCompanyId());
                lastData.setDeptId(dept.getId());
                lastData.setDepotId(s);
                lastData.setStorageReal(0.0);
                lastData.setUpdateTime(time);
                lastData.setUpdateBy("系统定时统计");
                if (inTag) {
                    //设置入库时间
                    lastData.setStoreDate(time);
                }
                if (outTag) {
                    //设置出库时间
                    lastData.setOutDate(time);
                }
                //获取仓库信息
                depot = depotService.getCacheDepot(dept.getCompanyId(), s);
                if (null != depot) {
                    lastData.setDepotStatus(depot.getDepotStatus());
                    lastData.setFoodVariety(depot.getFoodVariety());
                    lastData.setFoodLevel(depot.getFoodLevel());
                    lastData.setFoodLocation(depot.getFoodLocation());
                    lastData.setFoodLocationId(depot.getFoodLocationId());
                    lastData.setFoodType(depot.getFoodType());
                    lastData.setFoodYear(depot.getFoodYear());
                }
            }
            lastData.setStorageReal(lastData.getStorageReal() + sum);
            lastData.setCreateTime(new Date()); //设置为最新时间,其他系统可以通过此时间查询数据是否有更新修改,同步到省平台接口。
            lastData.setCreateBy("系统定时统计");
            lastData.setRemark("系统统计" + DateFormatUtils.format(time, "yyyy-MM-dd") + "日库存");
            depotStoreService.updateAndSave(lastData);
        }
    }
    /**
     * æ ¹æ®æ—¶é—´ï¼Œç»Ÿè®¡æ›´æ–°å½“天的库存信息
     *
     * @param dept
     */
    public Date getStartTime(Date time, Dept dept) {
        Date startTime = time; //出入库最早时间
        Date time1 = null; //出入库最早时间
        Date time2 = null; //倒仓最早时间
        Date time3 = null; //损益最早时间
        //获取当天有更新的出入库信息
        IgdsBaseParam param = new IgdsBaseParam();
        param.setStart(DateUtil.getCurZero(time));
        param.setEnd(DateUtil.getNextZero(time));
        //获取当天有更新的出入库信息
        param.setDeptId(dept.getId());
        List<InoutRecord> inoutRecords = inoutRecordService.getCompleteInoutByTime("update_time", param);
        if (null != inoutRecords && !inoutRecords.isEmpty()) {
            time1 = inoutRecords.get(0).getCompleteTime();
        }
        //获取当天有更新的倒仓数据
        List<InoutStockChange> stockChanges = stockChangeService.getDataByTime("update_time", param);
        if (null != stockChanges && !stockChanges.isEmpty()) {
            time2 = stockChanges.get(0).getChangeDate();
        }
        //获取当天有更新的损益数据
        List<InoutLossOver> lossOvers = lossOverService.getDataByTime("update_time", param);
        if (null != lossOvers && !lossOvers.isEmpty()) {
            time3 = lossOvers.get(0).getLossTime();
        }
        if (null == time1 && null == time2 && null == time3) {
            return null;
        }
        if (null != time1 && time1.before(startTime)) {
            startTime = time1;
        }
        if (null != time2 && time2.before(startTime)) {
            startTime = time2;
        }
        if (null != time3 && time3.before(startTime)) {
            startTime = time3;
        }
        return startTime;
    }
}
fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutConfPR.java
@@ -65,7 +65,7 @@
     */
    @Expose
    public void flushCache(InoutConf data) {
        inoutConfService.flushInoutConfCache(data.getCompanyId(), data.getDeptId());
        inoutConfService.flushInoutConfCache(data.getCompanyId());
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/init/SystemRunner.java
@@ -2,6 +2,7 @@
import com.fzzy.igds.domain.Dept;
import com.fzzy.igds.service.*;
import com.ruoyi.system.domain.SysCompany;
import com.ruoyi.system.service.ISysCompanyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
@@ -46,11 +47,11 @@
    public void run(String... args) throws Exception {
        //组织信息放入缓存
        iSysCompanyService.resetCompanyCache();
        List<Dept> list = coreDeptService.listDept(null, null, null);
        List<SysCompany> list = iSysCompanyService.selectAll();
        for (Dept dept : list) {
        for (SysCompany company : list) {
            flushCache(dept.getCompanyId(),dept.getId(), "系统调用");
            flushCache(company.getCompanyId(), "系统调用");
        }
    }
@@ -60,7 +61,7 @@
     * @param companyId
     * @param name
     */
    public void flushCache(String companyId,String deptId, String name) {
    public void flushCache(String companyId, String name) {
        //初始化用户部门到内存
        sysDeptService.initUserDeptMap(companyId);
@@ -72,7 +73,7 @@
        inoutConfService.flushInoutSysConfCache();
        //初始设备配置
        inoutConfService.flushInoutConfCache(companyId, deptId);
        inoutConfService.flushInoutConfCache(companyId);
        //初始化仓库缓存
        depotService.flushCache(companyId);
fzzy-igdss-web/src/main/java/com/fzzy/sys/init/SystemRunner.java
ÎļþÒÑɾ³ý
fzzy-igdss-web/src/main/resources/templates/index.html
@@ -152,7 +152,7 @@
            </button>
            <nav class="page-tabs menuTabs">
                <div class="page-tabs-content">
                    <a th:href="@{/index}" class="active menuTab" th:data-id="${welcomeUrl}">欢迎</a>
                    <a href="javascript:void(0);" class="active menuTab" th:data-id="${welcomeUrl}">欢迎</a>
                </div>
            </nav>
            <button class="roll-nav roll-right tabRight">
fzzy-igdss-web/src/main/resources/templates/login.html
@@ -120,7 +120,7 @@
    <!--手机APP-->
    <div class="login2-ewm css-hand">
        <h3>
            <i class="i-icon"><img th:src="@{/login/images/login-app-code.png}"/></i>下载APP
<!--            <i class="i-icon"><img th:src="@{/login/images/login-app-code.png}"/></i>下载APP-->
        </h3>
    </div>