CZT
2023-08-16 2e121f643a6776e6063796c104c95647faa000a8
优化定时更新库存信息
已修改7个文件
已添加1个文件
309 ■■■■■ 文件已修改
igds-core/src/main/java/com/ld/igds/common/dto/DepotParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-core/src/main/java/com/ld/igds/common/impl/CommonDataServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-core/src/main/java/com/ld/igds/models/SecCamera.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-core/src/main/java/models/igds.model.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-core/src/main/resources/mapper/CommonMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/timer/DepotStoreScheduled.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-inout/src/main/java/com/ld/igds/timer/InoutScheduled.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-recir/src/main/java/com/ld/igds/models/DrugLogApply.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-core/src/main/java/com/ld/igds/common/dto/DepotParam.java
@@ -23,6 +23,9 @@
    @PropertyDef(label = "所属仓库", description = "仓库编号")
    private String depotId;
    @PropertyDef(label = "仓库状态", description = "仓库状态")
    private String depotStatus;
    private Double weight;//重量信息,单位需要调整为吨
}
igds-core/src/main/java/com/ld/igds/common/impl/CommonDataServiceImpl.java
@@ -330,6 +330,7 @@
            param.setCompanyId(store.getCompanyId());
            param.setDepotId(store.getDepotId());
            param.setWeight(store.getStorageReal());
            param.setDepotStatus(store.getDepotStatus());
            commonMapper.updateDepotStorage(param);
        }
igds-core/src/main/java/com/ld/igds/models/SecCamera.java
@@ -5,6 +5,7 @@
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
 * å®‰é˜²è§†é¢‘监控设备
@@ -106,6 +107,10 @@
    @PropertyDef(label = "监管自动抓拍")
    private String snapTag = Constant.YN_N;
    @Column(name = "UPDATE_TIME_", length = 1)
    @PropertyDef(label = "更新时间")
    private Date updateTime;
    public int getChanNum() {
        return chanNum;
    }
igds-core/src/main/java/models/igds.model.xml
@@ -344,6 +344,42 @@
    <PropertyDef name="country">
      <Property></Property>
      <Property name="label">国别</Property>
      <Property name="mapping">
        <Property name="keyProperty">key</Property>
        <Property name="valueProperty">value</Property>
        <Property name="mapValues">
          <Collection>
            <Entity>
              <Property name="key">156</Property>
              <Property name="value">中国</Property>
            </Entity>
            <Entity>
              <Property name="key">076</Property>
              <Property name="value">巴西</Property>
            </Entity>
            <Entity>
              <Property name="key">124</Property>
              <Property name="value">加拿大</Property>
            </Entity>
            <Entity>
              <Property name="key">036</Property>
              <Property name="value">澳大利亚</Property>
            </Entity>
            <Entity>
              <Property name="key">356</Property>
              <Property name="value">印度</Property>
            </Entity>
            <Entity>
              <Property name="key">764</Property>
              <Property name="value">泰国</Property>
            </Entity>
            <Entity>
              <Property name="key">840</Property>
              <Property name="value">美国</Property>
            </Entity>
          </Collection>
        </Property>
      </Property>
    </PropertyDef>
    <PropertyDef name="manageType">
      <Property></Property>
igds-core/src/main/resources/mapper/CommonMapper.xml
@@ -119,7 +119,8 @@
    <!--更新库存 -->
    <update id="updateDepotStorage" parameterType="com.ld.igds.common.dto.DepotParam">
        update D_DEPOT set
        STORAGE_REAL_ = #{param.weight}
        STORAGE_REAL_ = #{param.weight},
        DEPOT_STATUS_ = #{param.depotStatus}
        where COMPANY_ID_ =
        #{param.companyId}
        and ID_ = #{param.depotId}
igds-inout/src/main/java/com/ld/igds/timer/DepotStoreScheduled.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
package com.ld.igds.timer;
import com.bstek.bdf2.core.model.DefaultCompany;
import com.ld.igds.common.CoreCommonService;
import com.ld.igds.constant.DepotStatus;
import com.ld.igds.inout.InoutConstant;
import com.ld.igds.inout.dto.InoutData;
import com.ld.igds.inout.dto.InoutParam;
import com.ld.igds.inout.service.InoutService;
import com.ld.igds.models.DepotStore;
import com.ld.igds.models.InoutRecord;
import com.ld.igds.util.ContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Desc: åº“存定时管理 - æ¯æ—¥æœ‰å‡ºå…¥åº“、损益等数据时,生成1条库存数据,并更新库存
 * @author: czt
 * @update-time: 2023/08/14
 */
@Slf4j
@Component(DepotStoreScheduled.BEAN_ID)
public class DepotStoreScheduled {
    public static final String BEAN_ID = "inout.depotStoreScheduled";
    @Resource
    private InoutService inoutService;
    @Resource
    private CoreCommonService commonService;
    /**
     * æ¯å¤©æ™šä¸Š11点25分更新库存数据
     */
    @Scheduled(cron = "0 10 23 * * ?")
    public void scheduled1() {
        List<DefaultCompany> listCompany = commonService.getCompanyList();
        if (null == listCompany)
            return;
        // èŽ·å–å½“å¤©çš„å‡ºå…¥åº“è®°å½•ï¼Œå¦‚æžœæœ‰è®°å½•åˆ™æ‰§è¡Œï¼Œå¦‚æžœæ²¡æœ‰ï¼Œåˆ™æ— éœ€æ‰§è¡Œ
        InoutParam param = new InoutParam();
        param.setEnd(new Date());
        param.setStart(DateUtils.addDays(param.getEnd(), -1));
        List<InoutData> listRecord;
        for (DefaultCompany company : listCompany) {
            param.setCompanyId(company.getId());
            listRecord = inoutService.listRecordData(param);
            //根据出入库信息,同步库存信息
            sumDepotStoreExe(company.getId(), listRecord, param);
        }
    }
    /**
     * åŒæ­¥ä»“库库存,根据近期出入库记录,如果没有记录则表示无出入库操作,取消执行
     *
     * @param companyId
     * @param listRecord
     */
    private void sumDepotStoreExe(String companyId, List<InoutData> listRecord, InoutParam param) {
        if (null == listRecord || listRecord.isEmpty()) {
            log.info("-----------系统自动同步库存,近期无出入库记录,取消同步仓库库存……{}", companyId);
            return;
        }
        // èŽ·å–æœ‰å‡ºå…¥åº“è®°å½•çš„ä»“åº“
        Map<String, InoutRecord> map = new HashMap<>();
        String key;
        DepotStore lastStore;
        double sumRecordWeight = 0.0;
        for (InoutData data : listRecord) {
            key = data.getDepotId() + "_" + data.getType();
            if (null != map.get(key)) {
                continue;
            }
            map.put(key, data);
            // æ ¹æ®æœ€åŽä¸€è½¦è¿›è¡Œæ±‡æ€»ç»Ÿè®¡ï¼Œå¼€å§‹æ—¶é—´æ˜¯ä»“库库存最后一个时间截止到当前
            lastStore = commonService.getLastDepotStore(data.getDepotId());
            if (null == lastStore) {
                log.error("--------库存定时任务-----没有获取到仓库最后库存信息,取消自动统计,请核对业务逻辑--仓库-{}",
                        data.getDepotId());
                continue;
            }
            param.setDeptId(data.getDeptId());
            param.setDepotId(data.getDepotId());
            param.setCompanyId(data.getCompanyId());
            param.setType(data.getType());
            //获取出入库的重量信息
            sumRecordWeight = inoutService.sumRecordWeight(param);
            //新增一条库存记录
            lastStore.setRemark("系统定时生成记录");
            lastStore.setId(ContextUtil.getUUID());
            lastStore.setUpdateUser("系统管理员");
            lastStore.setUpdateDate(new Date());
            lastStore.setCreateDate(new Date());
            if(InoutConstant.TYPE_IN.equals(data.getType())){
                lastStore.setStorageReal(lastStore.getStorageReal() + sumRecordWeight);
                //设置仓库状态
                lastStore.setDepotStatus(DepotStatus.STATUS_2.getCode());
                //设置入库时间
                if(null == lastStore.getStoreDate()){
                    lastStore.setStoreDate(data.getCompleteTime());
                }
            }
            if(InoutConstant.TYPE_OUT.equals(data.getType())){
                lastStore.setStorageReal(lastStore.getStorageReal() - sumRecordWeight);
                lastStore.setDepotStatus(DepotStatus.STATUS_4.getCode());
                //设置入库时间
                if(null == lastStore.getStoreDate()){
                    lastStore.setStoreDate(data.getCompleteTime());
                }
                //若出库后数量为负数,则设置库存数为0.0
                if(lastStore.getStorageReal() < 0){
                    lastStore.setStorageReal(0.0);
                }
            }
            lastStore.setStorageSettle(lastStore.getStorageReal());
            commonService.addDepotStore(lastStore, true);
        }
    }
}
igds-inout/src/main/java/com/ld/igds/timer/InoutScheduled.java
@@ -1,26 +1,19 @@
package com.ld.igds.timer;
import com.bstek.bdf2.core.model.DefaultCompany;
import com.bstek.dorado.annotation.Expose;
import com.ld.igds.common.CoreCommonService;
import com.ld.igds.constant.DepotStatus;
import com.ld.igds.inout.InoutConstant;
import com.ld.igds.inout.dto.InoutData;
import com.ld.igds.inout.dto.InoutParam;
import com.ld.igds.inout.service.InoutService;
import com.ld.igds.m.service.InoutCommonService;
import com.ld.igds.models.*;
import com.ld.igds.util.ContextUtil;
import com.ld.igds.util.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Desc: å‡ºå…¥åº“定时任务。 1、通知单完成量统计 2、出入库库存管理统计
@@ -31,7 +24,7 @@
@Component(InoutScheduled.BEAN_ID)
public class InoutScheduled {
    public static final String BEAN_ID = "basic.inoutScheduled";
    public static final String BEAN_ID = "inout.inoutScheduled";
    @Resource
    private InoutCommonService inoutCommonService;
@@ -62,116 +55,8 @@
            param.setCompanyId(company.getId());
            listRecord = inoutService.listRecordData(param);
            //根据出入库信息同步通知单完成量
            noticeCompleteExe(company.getId(), listRecord);
            sumDepotStoreExe(company.getId(), listRecord);
        }
    }
    /**
     * basic.inoutScheduled#sumDepotStoreExeByHand
     * <p>
     * <p>
     * æ‰‹åŠ¨æ‰§è¡Œå‡ºå…¥åº“åº“å­˜ç»Ÿè®¡å…¥å£
     *
     * @param start
     * @return
     */
    @Expose
    public String sumDepotStoreExeByHand(Date start) {
        if (null == start)
            start = new Date();
        start = DateUtil.getCurZero(start);
        // èŽ·å–3天内的出入库记录,如果有记录则执行,如果没有,则无需执行
        start = DateUtil.getNewByDay(null, -3);
        String companyId = ContextUtil.getCompanyId();
        InoutParam param = new InoutParam();
        param.setStart(start);
        param.setCompanyId(companyId);
        List<InoutData> listRecord = inoutService.listRecordData(param);
        sumDepotStoreExe(companyId, listRecord);
        return "SUCCESS";
    }
    /**
     * åŒæ­¥ä»“库库存,根据近期出入库记录,如果没有记录则表示无出入库操作,取消执行
     *
     * @param companyId
     * @param listRecord
     */
    private void sumDepotStoreExe(String companyId, List<InoutData> listRecord) {
        if (null == listRecord || listRecord.isEmpty()) {
            log.info("-----------系统自动同步库存,近期无出入库记录,取消同步仓库库存……{}", companyId);
            return;
        }
        // èŽ·å–æœ‰å‡ºå…¥åº“è®°å½•çš„ä»“åº“
        Map<String, InoutRecord> map = new HashMap<>();
        String key;
        DepotStore lastStore;
        double sumRecordWeight = 0.0;
        InoutParam param;
        for (InoutData data : listRecord) {
            key = data.getDepotId() + "_" + data.getType();
            if (null != map.get(key))
                continue;
            map.put(key, data);
            // æ ¹æ®æœ€åŽä¸€è½¦è¿›è¡Œæ±‡æ€»ç»Ÿè®¡ï¼Œå¼€å§‹æ—¶é—´æ˜¯ä»“库库存最后一个时间截止到当前
            lastStore = commonService.getLastDepotStore(data.getDepotId());
            if (null == lastStore) {
                log.error(
                        "--------出入库定时任务-----没有获取到仓库最后库存信息,取消自动统计,请核对业务逻辑--仓库-{}",
                        data.getDepotId());
                continue;
            }
            // åªæœ‰å‡ºå…¥åº“状态的仓库才进行统计,其他状态表示出入库作业完成,不在执行统计
            if (DepotStatus.STATUS_2.getCode().equals(
                    lastStore.getDepotStatus())
                    || DepotStatus.STATUS_4.getCode().equals(
                            lastStore.getDepotStatus())) {
                param = new InoutParam();
                // param.setStart(lastStore.getCreateDate());
                param.setEnd(new Date());
                param.setDeptId(data.getDeptId());
                param.setDepotId(data.getDepotId());
                param.setCompanyId(data.getCompanyId());
                param.setType(data.getType());
                // å‡ºå…¥åº“重量合计
                sumRecordWeight = inoutService.sumRecordWeight(param);
                // æ–°å¢žä¸€æ¡åº“存记录
                lastStore.setRemark("系统定时生成记录");
                lastStore.setId(ContextUtil.getUUID());
                lastStore.setUpdateUser(null);
                lastStore.setUpdateDate(new Date());
                // lastStore.setCreateDate(new Date());
                if (InoutConstant.TYPE_IN.equals(data.getType())) {
                    lastStore.setStorageReal(lastStore.getStorageReal()
                            + sumRecordWeight);
                }
                if (InoutConstant.TYPE_OUT.equals(data.getType())) {
                    lastStore.setStorageReal(lastStore.getStorageReal()
                            - sumRecordWeight);
                }
                commonService.addDepotStore(lastStore, true);
            }
        }
    }
igds-recir/src/main/java/com/ld/igds/models/DrugLogApply.java
@@ -10,7 +10,7 @@
import java.util.List;
/**
 * ç†è’¸ä½œä¸šä¸»è¡¨ä¿¡æ¯
 * ç†è’¸å¤‡æ¡ˆä¸»è¡¨ä¿¡æ¯
 *
 * @Author:YAN
 */