zouyu
8 天以前 8790f1ea7960c2209f6c919c732d7b2184edc4af
浪潮对接单点登录:财务系统调整
已添加7个文件
已修改4个文件
339 ■■■■■ 文件已修改
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/aspect/CustomStorageWarningAspect.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/CustomStorageWarningRecordController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageWarningRecordMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorageWarningRecord.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/CustomStorageWarningRecordService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/CustomStorageWarningRecordServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/CustomStorageWarningRecordMapper.xml 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
@@ -35,5 +35,6 @@
        IGNORE_TABLES.add("sys_job_log");
        IGNORE_TABLES.add("gen_table");
        IGNORE_TABLES.add("gen_table_column");
        IGNORE_TABLES.add("custom_storage_warning_record");
    }
}
src/main/java/com/ruoyi/procurementrecord/aspect/CustomStorageWarningAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.procurementrecord.aspect;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
import com.ruoyi.procurementrecord.mapper.CustomStorageMapper;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
/**
 * åº“存预警切面
 */
@Aspect
@Slf4j
@Component
public class CustomStorageWarningAspect {
    @Autowired
    private ProcurementRecordService procurementRecordService;
    @Autowired
    private CustomStorageWarningRecordService customStorageWarningRecordService;
    @AfterReturning(value = "execution(* com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl.stockout(*)) || execution(* com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl.updateManagementByCustom(*))")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void doAfterReturning(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        if(Objects.nonNull(args) && args.length>0) {
            ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
            BeanUtil.copyProperties(args[0],procurementRecordOutAdd);
            //查询库存数量
            List<CustomStorage> records = procurementRecordService.listPageCopyByCustom(new Page<>(-1, -1), new CustomStorage()).getRecords();
            if(CollUtil.isNotEmpty(records)){
                CustomStorage customStorage = records.stream().filter(f -> Objects.equals(f.getId(), procurementRecordOutAdd.getId())).findFirst().orElse(new CustomStorage());
                //判断库存是否到达预警值
                if(ObjectUtils.anyNotNull(customStorage.getInboundNum0(),customStorage.getWarnNum())&&customStorage.getInboundNum0().compareTo(customStorage.getWarnNum())<0){
                    CustomStorageWarningRecord customStorageWarningRecord = new CustomStorageWarningRecord();
                    customStorageWarningRecord.setCustomStorageId(customStorage.getId());
                    customStorageWarningRecordService.saveRecord(customStorageWarningRecord);
                }
            }
        }
    }
}
src/main/java/com/ruoyi/procurementrecord/controller/CustomStorageWarningRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.procurementrecord.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/customStorageWarning")
@RestController
@Api(value = "仓储物流-库存预警")
public class CustomStorageWarningRecordController {
    @Autowired
    private CustomStorageWarningRecordService customStorageWarningRecordService;
    @GetMapping("/pageList")
    @Log(title = "仓储物流-库存预警-分页查询", businessType = BusinessType.OTHER)
    public AjaxResult pageList(Page page, ProcurementPageDto dto){
        return AjaxResult.success(customStorageWarningRecordService.listPage(page,dto));
    }
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
@@ -38,4 +38,6 @@
    private Integer id;
    private Integer salesLedgerProductId;
    private BigDecimal warnNum;
}
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageWarningRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.procurementrecord.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.dto.ProcurementDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Mapper
* @createDate 2026-01-19 17:29:31
* @Entity com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord
*/
public interface CustomStorageWarningRecordMapper extends BaseMapper<CustomStorageWarningRecord> {
    IPage<CustomStorage> selectCustomStorageWarning(@Param("page") Page page, @Param("req") ProcurementPageDto dto);
}
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -125,4 +126,10 @@
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    /**
     * é¢„警数量
     */
    @ApiModelProperty("预警数量")
    private BigDecimal warnNum;
}
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorageWarningRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.procurementrecord.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
/**
 * åº“存预警表
 * @TableName custom_storage_warning_record
 */
@TableName(value ="custom_storage_warning_record")
@Data
public class CustomStorageWarningRecord {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * åº“存信息关联id
     */
    private Integer customStorageId;
    /**
     * é¢„警级别
     */
    private String warningLevel;
    /**
     * é¢„警状态
     */
    private String warningStatus;
    /**
     * é¢„警时间
     */
    private LocalDateTime warningTime;
    /**
     * é¢„计缺货时间
     */
    private LocalDateTime expectedshortagetime;
    private Long tenantId;
}
src/main/java/com/ruoyi/procurementrecord/service/CustomStorageWarningRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.procurementrecord.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Service
* @createDate 2026-01-19 17:29:31
*/
public interface CustomStorageWarningRecordService extends IService<CustomStorageWarningRecord> {
    IPage<CustomStorage> listPage(Page page, ProcurementPageDto dto);
    boolean saveRecord(CustomStorageWarningRecord customStorageWarningRecord);
}
src/main/java/com/ruoyi/procurementrecord/service/impl/CustomStorageWarningRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.ruoyi.procurementrecord.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.procurementrecord.dto.ProcurementDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import com.ruoyi.procurementrecord.mapper.CustomStorageWarningRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Service实现
* @createDate 2026-01-19 17:29:31
*/
@Service
public class CustomStorageWarningRecordServiceImpl extends ServiceImpl<CustomStorageWarningRecordMapper, CustomStorageWarningRecord>
    implements CustomStorageWarningRecordService{
    @Autowired
    private ProcurementRecordOutMapper procurementRecordOutMapper;
    @Override
    public IPage<CustomStorage> listPage(Page page, ProcurementPageDto procurementPageDto) {
        IPage<CustomStorage> pageList = baseMapper.selectCustomStorageWarning(page, procurementPageDto);
        List<CustomStorage> procurementPageDtoCopyList = pageList.getRecords();
        // è®¡ç®—待入库数量
        // æŸ¥è¯¢é‡‡è´­è®°å½•已入库数量
        List<Integer> collect = procurementPageDtoCopyList.stream().map(CustomStorage::getId).collect(Collectors.toList());
        if(CollectionUtils.isEmpty( collect)){
            return pageList;
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 3);
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            return pageList;
        }
        for (CustomStorage dto : procurementPageDtoCopyList) {
            // æ ¹æ®é‡‡è´­å°è´¦ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .collect(Collectors.toList());
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
            // è®¡ç®—已出库数量总和,并设置待出库数量
            BigDecimal totalInboundNum = collect1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            // å‡ºåº“数量 = æ€»æ•°é‡ - å¾…出库数量
            dto.setTotalInboundNum(totalInboundNum);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // åº“存价值
            if(dto.getTaxInclusiveUnitPrice() != null){
                dto.setTaxInclusiveTotalPrice(dto.getInboundNum0().multiply(dto.getTaxInclusiveUnitPrice()));
            }
        }
        pageList.setRecords(procurementPageDtoCopyList);
        return pageList;
    }
    @Override
    public boolean saveRecord(CustomStorageWarningRecord customStorageWarningRecord) {
        return baseMapper.insert(customStorageWarningRecord)>0;
    }
}
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -635,6 +635,7 @@
        CustomStorage one = new CustomStorage();
        one.setTaxInclusiveUnitPrice(procurementDto.getTaxInclusiveUnitPrice());
        one.setTaxInclusiveTotalPrice(procurementDto.getTaxInclusiveTotalPrice());
        one.setWarnNum(procurementDto.getWarnNum());
        return customStorageMapper.update(one,customStorageLambdaQueryWrapper);
    }
src/main/resources/mapper/CustomStorageWarningRecordMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.procurementrecord.mapper.CustomStorageWarningRecordMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="customStorageId" column="custom_storage_id" jdbcType="INTEGER"/>
            <result property="warningLevel" column="warning_level" jdbcType="VARCHAR"/>
            <result property="warningStatus" column="warning_status" jdbcType="VARCHAR"/>
            <result property="warningTime" column="warning_time" jdbcType="TIMESTAMP"/>
            <result property="expectedshortagetime" column="expectedShortageTime" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,custom_storage_id,warning_level,
        warning_status,warning_time,expectedShortageTime
    </sql>
    <select id="selectCustomStorageWarning" resultType="com.ruoyi.procurementrecord.pojo.CustomStorage">
        select t1.*,
        sum(t1.tax_inclusive_total_price) as totalPrice,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS availableStock
        from custom_storage t1
        left join procurement_record_out t2 on t1.id = t2.procurement_record_storage_id and t2.type = 3
        inner join custom_storage_warning_record cswr on t1.id = cswr.custom_storage_id
        <where>
            t2.type = 3
            <if test="req.productCategory != null and req.productCategory != ''">
                and t1.product_category like  concat('%',#{req.productCategory},'%')
            </if>
            <if test="req.supplierName !=null and req.supplierName != ''">
                and t1.supplier_name like concat('%',#{req.supplierName},'%')
            </if>
            <if test="req.specificationModel !=null and req.specificationModel != ''">
                and t1.specification_model like concat('%',#{specificationModel},'%')
            </if>
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.inbound_date like concat('%',#{req.timeStr},'%')
            </if>
        </where>
        group by t1.product_category, t1.specification_model, t1.tax_inclusive_unit_price
        order by t1.inbound_date desc
    </select>
</mapper>