czt
2026-02-26 181252cf8ba494441b1fdb3873da7afa90ff0813
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/InoutRecordService.java
@@ -4,8 +4,10 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.bill.InoutBill;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.FoodLevel;
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;
@@ -14,6 +16,7 @@
import com.fzzy.igds.mapper.InoutRecordMapper;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.utils.DateUtil;
import com.fzzy.igds.utils.MoneyUtil;
import com.fzzy.igds.utils.NumberUtil;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.redis.RedisCache;
@@ -21,8 +24,11 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;
@@ -49,14 +55,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);
@@ -65,13 +72,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);
@@ -81,6 +89,7 @@
    /**
     * 封装查询条件
     *
     * @param param
     */
    public QueryWrapper<InoutRecord> getQueryWrapper(InoutParam param) {
@@ -89,7 +98,7 @@
            queryWrapper.eq("company_id", param.getCompanyId());
        }
        if (StringUtils.isNotBlank(param.getDeptId())) {
            queryWrapper.eq("dept_id", param.getDeptId());
            queryWrapper.likeRight("dept_id", param.getDeptId());
        }
        if (StringUtils.isNotBlank(param.getCustomerName())) {
            queryWrapper.like("customer_name", param.getCustomerName());
@@ -124,28 +133,53 @@
        if (StringUtils.isNotBlank(param.getType())) {
            queryWrapper.eq("type", param.getType());
        }
        if (StringUtils.isNotBlank(param.getSettleTag())) {
            queryWrapper.eq("settle_tag", param.getSettleTag());
        }
        if (null != param.getStart()) {
            queryWrapper.ge("create_time", DateUtil.getCurZero(param.getStart()));
        }
        if (null != param.getEnd()) {
            queryWrapper.le("create_time", DateUtil.getNextZero(param.getEnd()));
        }
        queryWrapper.eq("record_status", Constant.RECORD_STATUS_NORMAL); //正常状态的单子
        queryWrapper.or();
        queryWrapper.eq("record_status", Constant.RECORD_STATUS_ADD); //补录单子的单子
        queryWrapper.ne("record_status", Constant.RECORD_STATUS_DEL); //不是删除的单子,即正常的单子
        queryWrapper.orderByDesc("create_time");
        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);
@@ -155,6 +189,7 @@
    /**
     * 验证车牌号是否在流程中
     *
     * @param companyId
     * @param plateNum
     * @return
@@ -168,15 +203,13 @@
        queryWrapper.eq("company_id", companyId);
        queryWrapper.eq("plate_num", plateNum);
        queryWrapper.ne("progress", Constant.PROGRESS_RECORD);
        queryWrapper.eq("record_status", "NORMAL");
        queryWrapper.or();
        queryWrapper.eq("record_status", Constant.RECORD_STATUS_ADD); //补录单子的单子
        return inoutRecordMapper.selectCount(queryWrapper);
    }
    /**
     * 手动补单
     *
     * @param data
     * @return
     */
@@ -185,7 +218,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();
@@ -227,6 +260,24 @@
    /**
     * 新增出入库记录
     *
     * @param list
     * @return
     */
    public String addInoutRecordList(List<InoutRecord> list) {
        if (null == list || list.isEmpty()) {
            return "新增失败";
        }
        for (InoutRecord inoutRecord : list) {
            addInoutRecord(inoutRecord);
        }
        return null;
    }
    /**
     * 新增出入库记录
     *
     * @param data
     * @return
     */
@@ -238,7 +289,7 @@
                data.setId("R_" + id);
            } else if (Constant.TYPE_OUT.equals(data.getType())) {
                data.setId("C_" + id);
            }else {
            } else {
                data.setId("M_" + id);
            }
        }
@@ -249,9 +300,9 @@
        int num = inoutRecordMapper.insert(data);
        //TODO 更新缓存
        //updateInoutCache(data);
        return num;
    }
    /**
@@ -273,7 +324,241 @@
    }
    /**
     * 数据修改,保留修改记录
     *
     * @param updateData
     * @return
     */
    public int checkAndUpdate(InoutRecord updateData) {
        //获取原来的数据
        InoutParam param = new InoutParam();
        param.setId(updateData.getId());
        InoutRecord record = this.selectOne(param);
        String updateLog = checkRemarks(updateData, record);
        updateData.setUpdateLog(updateLog);
        return updateInoutRecord(updateData);
    }
    /**
     * 校验修改信息
     *
     * @param updateData 修改数据
     * @param record     原始数据
     * @return
     */
    public String checkRemarks(InoutRecord updateData, InoutRecord record) {
        String updateLog0 = "【" + ContextUtil.getLoginUserName() + "】于[" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "]修改数据:";
        String updateLog = "";
        boolean updateTag = false;
        //校验仓库信息
        if (null != updateData.getDepotId() && null != record.getDepotId()) {
            updateTag = !updateData.getDepotId().equals(record.getDepotId());
            if (updateTag) {
                updateLog += "[仓库编码](" + record.getDepotId() + ")修改为(" + updateData.getDepotId() + "),";
            }
        }
        //校验品种信息
        if (null != updateData.getFoodVariety() && null != record.getFoodVariety()) {
            updateTag = !updateData.getFoodVariety().equals(record.getFoodVariety());
            if (updateTag) {
                updateLog += "[品种](" + FoodVariety.getMsg(record.getFoodVariety()) + ")修改为(" + FoodVariety.getMsg(updateData.getFoodVariety()) + "),";
            }
        }
        //粮食产地
        if (null != updateData.getFoodLocation() && null != record.getFoodLocation()) {
            updateTag = !updateData.getFoodLocation().equals(record.getFoodLocation());
            if (updateTag) {
                updateLog += "[粮食产地](" + record.getFoodLocation() + ")修改为(" + updateData.getFoodLocation() + "),";
            }
        }
        //粮食等级
        if (null != updateData.getFoodLevel() && null != record.getFoodLevel()) {
            updateTag = !updateData.getFoodLevel().equals(record.getFoodLevel());
            if (updateTag) {
                updateLog += "[粮食等级](" + FoodLevel.getMsg(record.getFoodLevel()) + ")修改为(" + FoodLevel.getMsg(updateData.getFoodLevel()) + "),";
            }
        }
        //粮食年份
        if (null != updateData.getFoodYear() && null != record.getFoodYear()) {
            updateTag = !updateData.getFoodYear().equals(record.getFoodYear());
            if (updateTag) {
                updateLog += "[粮食年份](" + record.getFoodYear() + ")修改为(" + updateData.getFoodYear() + "),";
            }
        }
        //承运人
        if (null != updateData.getUserName() && null != record.getUserName()) {
            updateTag = !updateData.getUserName().equals(record.getUserName());
            if (updateTag) {
                updateLog += "[承运人](" + record.getUserName() + ")修改为(" + updateData.getUserName() + "),";
            }
        }
        //校验通知单信息
        if (null != updateData.getNoticeId() && null != record.getNoticeId()) {
            updateTag = !updateData.getNoticeId().equals(record.getNoticeId());
            if (updateTag) {
                updateLog += "[通知单编码](" + record.getNoticeId() + ")修改为(" + updateData.getNoticeId() + "),";
            }
        }
        //校验往来单位信息
        if (null != updateData.getCustomerName() && null != record.getCustomerName()) {
            updateTag = !updateData.getCustomerName().equals(record.getCustomerName());
            if (updateTag) {
                updateLog += "[往来单位](" + record.getCustomerName() + ")修改为(" + updateData.getCustomerName() + "),";
            }
        }
        //单价
        if (null != updateData.getPrice() && null != record.getPrice()) {
            updateTag = !updateData.getPrice().equals(record.getPrice());
            if (updateTag) {
                updateLog += "[单价](" + record.getPrice() + ")修改为(" + updateData.getPrice() + "),";
            }
        }
        //结算金额
        if (null != updateData.getSettleMoney() && null != record.getSettleMoney()) {
            updateTag = !updateData.getSettleMoney().equals(record.getSettleMoney());
            if (updateTag) {
                updateLog += "[结算金额](" + record.getSettleMoney() + ")修改为(" + updateData.getSettleMoney() + "),";
            }
        }
        //水分
        if (null != updateData.getPerWet() && null != record.getPerWet()) {
            updateTag = !updateData.getPerWet().equals(record.getPerWet());
            if (updateTag) {
                updateLog += "[水分](" + record.getPerWet() + ")修改为(" + updateData.getPerWet() + "),";
            }
        }
        //杂质
        if (null != updateData.getPerImpurity() && null != record.getPerImpurity()) {
            updateTag = !updateData.getPerImpurity().equals(record.getPerImpurity());
            if (updateTag) {
                updateLog += "[杂质](" + record.getPerImpurity() + ")修改为(" + updateData.getPerImpurity() + "),";
            }
        }
        //毛重
        if (null != updateData.getFullWeight() && null != record.getFullWeight()) {
            updateTag = !updateData.getFullWeight().equals(record.getFullWeight());
            if (updateTag) {
                updateLog += "[毛重](" + record.getFullWeight() + ")修改为(" + updateData.getFullWeight() + "),";
            }
        }
        //皮重
        if (null != updateData.getEmptyWeight() && null != record.getEmptyWeight()) {
            updateTag = !updateData.getEmptyWeight().equals(record.getEmptyWeight());
            if (updateTag) {
                updateLog += "[皮重](" + record.getEmptyWeight() + ")修改为(" + updateData.getEmptyWeight() + "),";
            }
        }
        //扣重
        if (null != updateData.getDeOther() && null != record.getDeOther()) {
            updateTag = !updateData.getDeOther().equals(record.getDeOther());
            if (updateTag) {
                updateLog += "[扣重](" + record.getDeOther() + ")修改为(" + updateData.getDeOther() + "),";
            }
        }
        //结算重量
        if (null != updateData.getSettleWeight() && null != record.getSettleWeight()) {
            updateTag = !updateData.getSettleWeight().equals(record.getSettleWeight());
            if (updateTag) {
                updateLog += "[结算重量](" + record.getSettleWeight() + ")修改为(" + updateData.getSettleWeight() + "),";
            }
        }
        //出入库重量
        if (null != updateData.getRecordWeight() && null != record.getRecordWeight()) {
            updateTag = !updateData.getRecordWeight().equals(record.getRecordWeight());
            if (updateTag) {
                updateLog += "[出入库重量](" + record.getRecordWeight() + ")修改为(" + updateData.getRecordWeight() + "),";
            }
        }
        //登记时间
        if (null != updateData.getRegisterTime() && null != record.getRegisterTime()) {
            updateTag = !updateData.getRegisterTime().equals(record.getRegisterTime());
            if (updateTag) {
                updateLog += "[登记时间](" + DateFormatUtils.format(record.getRegisterTime(), "yyyy-MM-dd HH:mm:ss") + ")修改为(" + DateFormatUtils.format(updateData.getRegisterTime(), "yyyy-MM-dd HH:mm:ss") + "),";
            }
        }
        //满车时间
        if (null != updateData.getFullWeightTime() && null != record.getFullWeightTime()) {
            updateTag = !updateData.getFullWeightTime().equals(record.getFullWeightTime());
            if (updateTag) {
                updateLog += "[满车时间](" + DateFormatUtils.format(record.getFullWeightTime(), "yyyy-MM-dd HH:mm:ss") + ")修改为(" + DateFormatUtils.format(updateData.getFullWeightTime(), "yyyy-MM-dd HH:mm:ss") + "),";
            }
        }
        //空车时间
        if (null != updateData.getEmptyWeightTime() && null != record.getEmptyWeightTime()) {
            updateTag = !updateData.getEmptyWeightTime().equals(record.getEmptyWeightTime());
            if (updateTag) {
                updateLog += "[空车时间](" + DateFormatUtils.format(record.getEmptyWeightTime(), "yyyy-MM-dd HH:mm:ss") + ")修改为(" + DateFormatUtils.format(updateData.getEmptyWeightTime(), "yyyy-MM-dd HH:mm:ss") + "),";
            }
        }
        //完成时间
        if (null != updateData.getCompleteTime() && null != record.getCompleteTime()) {
            updateTag = !updateData.getCompleteTime().equals(record.getCompleteTime());
            if (updateTag) {
                updateLog += "[完成时间](" + DateFormatUtils.format(record.getCompleteTime(), "yyyy-MM-dd HH:mm:ss") + ")修改为(" + DateFormatUtils.format(updateData.getCompleteTime(), "yyyy-MM-dd HH:mm:ss") + "),";
            }
        }
        //满车称重人
        if (null != updateData.getFullWeightUser() && null != record.getFullWeightUser()) {
            updateTag = !updateData.getFullWeightUser().equals(record.getFullWeightUser());
            if (updateTag) {
                updateLog += "[满车称重人](" + record.getFullWeightUser() + ")修改为(" + updateData.getFullWeightUser() + "),";
            }
        }
        //空车称重人
        if (null != updateData.getEmptyWeightUser() && null != record.getEmptyWeightUser()) {
            updateTag = !updateData.getEmptyWeightUser().equals(record.getEmptyWeightUser());
            if (updateTag) {
                updateLog += "[空车称重人](" + record.getEmptyWeightUser() + ")修改为(" + updateData.getEmptyWeightUser() + "),";
            }
        }
        //备注说明
        if (null != updateData.getRemarks() && null != record.getRemarks()) {
            updateTag = !updateData.getRemarks().equals(record.getRemarks());
            if (updateTag) {
                updateLog += "[备注说明](" + record.getRemarks() + ")修改为(" + updateData.getRemarks() + "),";
            }
        }
        if (StringUtils.isBlank(updateLog)) {
            return record.getUpdateLog() == null ? "" : record.getUpdateLog();
        }
        updateLog0 = updateLog0 + updateLog;
        return record.getUpdateLog() == null ? updateLog0 : (record.getUpdateLog() + ";" + updateLog0);
    }
    /**
     * 异常终止
     *
     * @param data
     * @return
     */
@@ -297,15 +582,16 @@
        //TODO 删除缓存
        if(i > 0){
        if (i > 0) {
            return null;
        }else {
        } else {
            return "操作失败!";
        }
    }
    /**
     * 出入库流程ID创建 202001030001 202001030001
     *
     * @param registerTime
     * @param companyId
     * @return
@@ -369,6 +655,7 @@
    /**
     * 查询最大id号,为空则返回null
     *
     * @param companyId
     * @param timeKey
     * @return
@@ -385,9 +672,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();
        }
    }
@@ -401,7 +688,7 @@
    public String inWeightBill(InoutRecord data) {
        // 获取表单数据
        InoutPrintBill bill = this.createBillData(data, "入库划码单");
        InoutPrintBill bill = this.createBillData(data, "-入库单");
        // 调整模版数据并返回
        String htmlStr = InoutBill.IN_WEIGHT_DEFAULT;
@@ -453,7 +740,7 @@
        htmlStr = htmlStr.replace("impurity", bill.getImpurity() + "");
        htmlStr = htmlStr.replace("checkStatus", bill.getCheckStatus());
        htmlStr = htmlStr.replace("remark", bill.getRemark());
        htmlStr = htmlStr.replace("remark", "");
        htmlStr = htmlStr.replace("moneyName", bill.getMoneyName());
        htmlStr = htmlStr.replace("unitName", bill.getUnitName());
@@ -483,7 +770,7 @@
     */
    public String outWeightBill(InoutRecord data) {
        // 获取表单数据
        InoutPrintBill bill = this.createBillData(data, "出库划码单");
        InoutPrintBill bill = this.createBillData(data, "-出库单");
        //默认模版
        String htmlStr = InoutBill.OUT_WEIGHT_DEFAULT;
@@ -516,7 +803,7 @@
                new DecimalFormat("0.00").format(bill.getNetWeight()));
        htmlStr = htmlStr.replace("dePackage",
                new DecimalFormat("0.00").format(bill.getDePackage()));
        htmlStr = htmlStr.replace("remark", bill.getRemark());
        htmlStr = htmlStr.replace("remark", "");
        htmlStr = htmlStr.replace("settleWeight",
                new DecimalFormat("0.00").format(bill.getSettleWeight()));
@@ -649,4 +936,71 @@
        return bill;
    }
    /**
     * 获取结算单
     *
     * @param
     * @return
     */
    public String printPay(InoutRecord data) {
        // 调整模版数据并返回
        String htmlStr = InoutBill.IN_SETTLE_DEFAULT;
        //标题
        //清远出发货单位及标题,使用公司名
        String billTitle = data.getType().equals("IN") ? "入库结算单" : "出库结算单";
        htmlStr = htmlStr.replace("[billTitle]", billTitle);
        //库区名称
        SysDept dept = sysDeptService.getCacheDept(data.getCompanyId(), data.getDeptId());
        if (dept != null) {
            htmlStr = htmlStr.replace("[deptId]", null == data.getDeptId() ? "" : dept.getDeptName());
        } else {
            htmlStr = htmlStr.replace("[deptId]", "");
        }
        //业务单号
        htmlStr = htmlStr.replace("[id]", data.getId());
        //打印时间
        htmlStr = htmlStr.replace("[payTime]", null == data.getSettleTime() ? "" : DateFormatUtils.format(data.getSettleTime(), "yyyy年MM月dd日"));
        //客户名称
        htmlStr = htmlStr.replace("[customerName]", null == data.getCustomerName() ? "" : data.getCustomerName());
        //承运人
        htmlStr = htmlStr.replace("[userName]", null == data.getUserName() ? "" : data.getUserName());
        //承运人联系电话
        htmlStr = htmlStr.replace("[userContact]", null == data.getUserContact() ? "" : data.getUserContact());
        //承运人身份证号
        htmlStr = htmlStr.replace("[userId]", null == data.getUserId() ? "" : data.getUserId());
        //承运人车牌号
        htmlStr = htmlStr.replace("[plateNum]", null == data.getPlateNum() ? "" : data.getPlateNum());
        //获取仓库信息
        Depot depot = depotService.getCacheDepot(data.getCompanyId(), data.getDepotId());
        if (null != depot) {
            //货位信息
            htmlStr = htmlStr.replace("[depotId]", depot.getName());
        }
        //粮食名称
        htmlStr = htmlStr.replace("[foodVariety]", null == data.getFoodVariety() ? "" : FoodVariety.getMsg(data.getFoodVariety()));
        //备注
        htmlStr = htmlStr.replace("[remark]", null == data.getRemarks() ? "" : data.getRemarks());
        //毛重
        htmlStr = htmlStr.replace("[fullWeight]", null == data.getFullWeight() ? "" : String.format("%.2f", data.getFullWeight()));
        //皮重
        htmlStr = htmlStr.replace("[emptyWeight]", null == data.getEmptyWeight() ? "" : String.format("%.2f", data.getEmptyWeight()));
        //扣重
        htmlStr = htmlStr.replace("[deOther]", null == data.getDeOther() ? "" : String.format("%.2f", data.getDeOther()));
        //粮油价格
        htmlStr = htmlStr.replace("[payPrice]", null == data.getPrice() ? "" : String.format("%.3f", data.getPrice()));
        //结算重量
        htmlStr = htmlStr.replace("[settleWeight]", String.format("%.2f", data.getSettleWeight()));
        //结算金额
        htmlStr = htmlStr.replace("[payMoney]", null == data.getSettleMoney() ? "" : String.format("%.3f", data.getSettleMoney()));
        //结算重量名称
        htmlStr = htmlStr.replace("[payMoneyName]", MoneyUtil.formatToCN(new BigDecimal(String.format("%.2f", data.getSettleMoney()))));
        return htmlStr;
    }
}