fei
7 天以前 9f5127b6c58a297104bccc75a4c5125733f5ff4b
archiveManager/src/main/java/com/ruoyi/service/impl/ArchiveRecordsServiceImpl.java
@@ -3,6 +3,8 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -11,13 +13,20 @@
import com.ruoyi.common.utils.MapUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.domain.ArchiveRecords;
import com.ruoyi.domain.Archiverecordstouser;
import com.ruoyi.domain.vo.AnalysisResult;
import com.ruoyi.domain.vo.ArchiveInfoVo;
import com.ruoyi.domain.vo.ArchiveRecordSmall;
import com.ruoyi.mapper.ArchiveRecordsMapper;
import com.ruoyi.mapper.ArchiverecordstouserMapper;
import com.ruoyi.service.IArchiveRecordsService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
/**
 * 档案记录Service业务层处理
@@ -40,10 +49,78 @@
    private LambdaQueryWrapper<ArchiveRecords> buildCondition(ArchiveRecords archiveRecords, Long userId){
        LambdaQueryWrapper<ArchiveRecords> lqw = new LambdaQueryWrapper<>();
        lqw.like(!StringUtils.isEmpty(archiveRecords.getProjectName()), ArchiveRecords::getProjectName, archiveRecords.getProjectName())
                .like(!StringUtils.isEmpty(archiveRecords.getFilingNumber()), ArchiveRecords::getFilingNumber, archiveRecords.getFilingNumber())
                .like(!StringUtils.isEmpty(archiveRecords.getArchiveRoomNumber()), ArchiveRecords::getArchiveRoomNumber, archiveRecords.getArchiveRoomNumber())
                        .like(!StringUtils.isEmpty(archiveRecords.getRecordId()), ArchiveRecords::getRecordId, archiveRecords.getRecordId());
        // 根据开始和结束的categoryNumber生成连续的recordId
        String categoryNumberStart = archiveRecords.getCategoryNumberStart();
        String categoryNumberEnd = archiveRecords.getCategoryNumberEnd();
        if (!StringUtils.isEmpty(categoryNumberStart) && !StringUtils.isEmpty(categoryNumberEnd)) {
            try {
                // 解析开始和结束的编号,提取前缀和数字部分
                // 例如:B1.3-999-2024-1 -> 前缀: B1.3-999-2024-, 数字: 1
                int lastDashIndexStart = categoryNumberStart.lastIndexOf('-');
                int lastDashIndexEnd = categoryNumberEnd.lastIndexOf('-');
                if (lastDashIndexStart > 0 && lastDashIndexEnd > 0) {
                    String prefixStart = categoryNumberStart.substring(0, lastDashIndexStart + 1);
                    String prefixEnd = categoryNumberEnd.substring(0, lastDashIndexEnd + 1);
                    // 确保前缀相同,才生成连续编号
                    if (prefixStart.equals(prefixEnd)) {
                        int startNum = Integer.parseInt(categoryNumberStart.substring(lastDashIndexStart + 1));
                        int endNum = Integer.parseInt(categoryNumberEnd.substring(lastDashIndexEnd + 1));
                        // 生成连续的recordId列表,将数字格式化为5位(如00001, 00101)
                        List<String> recordIds = new ArrayList<>();
                        for (int i = startNum; i <= endNum; i++) {
                            // 使用String.format将数字格式化为5位,不足前面补0
                            String formattedNumber = String.format("%05d", i);
                            recordIds.add(prefixStart + formattedNumber);
                        }
                        // 添加到查询条件中
                        lqw.in(ArchiveRecords::getRecordId, recordIds);
                    }
                }
            } catch (Exception e) {
                // 如果解析失败,忽略此条件
                e.printStackTrace();
            }
        }
        System.out.println(archiveRecords.getIds());
        // 如果没有使用连续编号条件,才使用普通的like条件
        if (StringUtils.isEmpty(categoryNumberStart) || StringUtils.isEmpty(categoryNumberEnd)) {
            lqw.like(!StringUtils.isEmpty(archiveRecords.getRecordId()), ArchiveRecords::getRecordId, archiveRecords.getRecordId());
        }
        else {
                lqw.
            like(!StringUtils.isEmpty(archiveRecords.getInquiryNumber()), ArchiveRecords::getInquiryNumber, archiveRecords.getInquiryNumber())
                    .like(!StringUtils.isEmpty(archiveRecords.getCaseTitle()), ArchiveRecords::getCaseTitle, archiveRecords.getCaseTitle())
                    .like(!StringUtils.isEmpty(archiveRecords.getPublicAttribute()), ArchiveRecords::getPublicAttribute, archiveRecords.getPublicAttribute())
                    .like(!StringUtils.isEmpty(archiveRecords.getPreparationUnit()), ArchiveRecords::getPreparationUnit, archiveRecords.getPreparationUnit())
                    .like(!StringUtils.isEmpty(archiveRecords.getRetentionPeriod()), ArchiveRecords::getRetentionPeriod, archiveRecords.getRetentionPeriod())
                    .like(!StringUtils.isEmpty(archiveRecords.getSecurityClassification()), ArchiveRecords::getSecurityClassification, archiveRecords.getSecurityClassification())
                    .like(!StringUtils.isEmpty(archiveRecords.getFilingNumber()), ArchiveRecords::getFilingNumber, archiveRecords.getFilingNumber())
                    .like(!StringUtils.isEmpty(archiveRecords.getConstructionUnit()), ArchiveRecords::getConstructionUnit, archiveRecords.getConstructionUnit())
                    .like(!StringUtils.isEmpty(archiveRecords.getConstructionAddress()), ArchiveRecords::getConstructionAddress, archiveRecords.getConstructionAddress())
                    .like(!StringUtils.isEmpty(archiveRecords.getProjectName()), ArchiveRecords::getProjectName, archiveRecords.getProjectName())
                    .like(!StringUtils.isEmpty(archiveRecords.getProjectNumber()), ArchiveRecords::getProjectNumber, archiveRecords.getProjectNumber())
                    .like(!StringUtils.isEmpty(archiveRecords.getScanningCompany()), ArchiveRecords::getScanningCompany, archiveRecords.getScanningCompany())
                    .like(!StringUtils.isEmpty(archiveRecords.getArchiveRoomNumber()), ArchiveRecords::getArchiveRoomNumber, archiveRecords.getArchiveRoomNumber())
                    .like(!StringUtils.isEmpty(archiveRecords.getMicrofilmNumber()), ArchiveRecords::getMicrofilmNumber, archiveRecords.getMicrofilmNumber())
                    .like(!StringUtils.isEmpty(archiveRecords.getHistoricalReferenceNumber()), ArchiveRecords::getHistoricalReferenceNumber, archiveRecords.getHistoricalReferenceNumber())
                    .eq(!StringUtils.isEmpty(archiveRecords.getRecordStatus()), ArchiveRecords::getRecordStatus, archiveRecords.getRecordStatus())
                    .like(!StringUtils.isEmpty(archiveRecords.getEveryProjectName()), ArchiveRecords::getEveryProjectName, archiveRecords.getEveryProjectName())
                    .like(!StringUtils.isEmpty(archiveRecords.getRemarks()), ArchiveRecords::getRemarks, archiveRecords.getRemarks());
        }
        if(archiveRecords.getIds()!=null)
                lqw.in(ArchiveRecords::getId,new ArrayList<>(Arrays.asList(archiveRecords.getIds())));
        //                .like(!StringUtils.isEmpty(zfProperty.getLocation()), ZfProperty::getLocation, zfProperty.getLocation())
//                .like(!StringUtils.isEmpty(zfProperty.getHolder()), ZfProperty::getHolder, zfProperty.getHolder())
//                .like(!StringUtils.isEmpty(zfProperty.getAddress()), ZfProperty::getAddress, zfProperty.getAddress())
@@ -152,6 +229,27 @@
        return beanRecords;
    }
    @Override
    public List<ArchiveRecords> selectArchiveRecordsByIds(Long[] ids)
    {
        // 获取当前用户ID
        Long userid = SecurityUtils.getUserId();
        // 创建查询条件
        LambdaQueryWrapper<ArchiveRecords> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 根据ids查询
        lambdaQueryWrapper.in(ArchiveRecords::getId, Arrays.asList(ids));
        // 如果不是管理员,需要考虑权限过滤(可根据实际权限需求调整)
        if (userid != 1) {
            // 这里可以添加权限相关的过滤条件
        }
        List<ArchiveRecords> beanRecords = list(lambdaQueryWrapper);
        return beanRecords;
    }
    /**
     * 新增档案记录
@@ -166,7 +264,21 @@
        Date date = Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
        archiveRecords.setCreateTime(date);
        System.out.println(archiveRecords.getRecordId());
        //根据档号查询,是否已经有档号,有的话,就不让插入
        LambdaQueryWrapper<ArchiveRecords> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(!StringUtils.isEmpty(archiveRecords.getRecordId()), ArchiveRecords::getRecordId,
                archiveRecords.getRecordId());
        List<ArchiveRecords> lis = list(lambdaQueryWrapper);
        if(!lis.isEmpty())
        {
            return 0;
        }
        archiveRecords.setRecordStatus("未录入");
      //  archiveRecords
        boolean res = this.save(archiveRecords);
        //0表示失败,1表示成功
        if(res)
            return 1;
        else
@@ -198,11 +310,13 @@
    @Override
    public int deleteArchiveRecordsByIds(Long[] ids)
    {
        if (this.removeByIds(Arrays.asList(ids))) {
            return 1;
        Long res = 0L;
        for(Long id: ids)
        {
           this.baseMapper.updateAllInfoById(id);
        }
        else
            return 0;
        return 1;
    }
    /**
@@ -216,4 +330,98 @@
    {
        return 0;
    }
    @Override
    public ArchiveInfoVo selectByRecordId(Long id) {
        return this.baseMapper.findByRecordId(id);
    }
    @Override
    public AjaxResult importExcel(MultipartFile file) {
        ExcelUtil<ArchiveRecords> util = new ExcelUtil<>(ArchiveRecords.class);
        List<ArchiveRecords> dataList = null;
        try {
            dataList = util.importExcel(file.getInputStream());
        } catch (Exception e) {
            throw new RuntimeException("没有按照规则导入数据");
        }
        assert dataList != null;
        for (ArchiveRecords archiveRecords : dataList) {
           // physcialService.mySave(physcial);
            archiveRecords.setRecordStatus("未录入");
            LocalDateTime time = LocalDateTime.now();
            Date date = Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
            archiveRecords.setCreateTime(date);
            this.mySave(archiveRecords);
        }
        return AjaxResult.success();
    }
    @Override
    public List<AnalysisResult> statisticAya() {
        return this.baseMapper.statisticAyasis();
    }
    @Override
    public int updateArchiveById(String status, Long id) {
        this.baseMapper.updateStatusById(status, id);
        return 0;
    }
    @Override
    public int updateStatusByIds(Long[] ids) {
        for(Long id : ids)
            this.baseMapper.updateStatusById("录入完成",id);
        return 0;
    }
    @Override
    public List<ArchiveRecordSmall> findByIds(ArchiveRecords archiveRecords) {
        LambdaQueryWrapper<ArchiveRecords> lqw = new LambdaQueryWrapper<>();
        if(archiveRecords.getIds()!=null)
            lqw.in(ArchiveRecords::getId,new ArrayList<>(Arrays.asList(archiveRecords.getIds())));
        return this.baseMapper.selectByIds(lqw);
    }
    public AjaxResult mySave(ArchiveRecords archiveRecords) {
        //检查是否有重复数据插入
        LambdaQueryWrapper<ArchiveRecords> lqw = new LambdaQueryWrapper<>();
        lqw.eq(!StringUtils.isEmpty(archiveRecords.getRecordId()), ArchiveRecords::getRecordId,archiveRecords.getRecordId());
        List<ArchiveRecords> list = list(lqw);
        if (list.size() > 0) {
          //  throw new RuntimeException("请勿新增重复数据");
            //如果有重复数据,则根据recordId进行数据修改
         //   if()
                this.baseMapper.update(archiveRecords, lqw);
                return AjaxResult.success();
        }
        else {
        Long userid = SecurityUtils.getUserId();
        if(userid==1) {
            if (save(archiveRecords)) {
                return AjaxResult.success();
            } else {
                return AjaxResult.error();
            }
        }
             else
            return AjaxResult.error("档案号不存在!");
        }
    }
    @Override
    public boolean whether(@Param("recordId") Long recordId){
        return this.baseMapper.whether(recordId);
    }
}