package com.ruoyi.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.MapUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.domain.ArchiveCategory; import com.ruoyi.domain.ArchiveRecords; import com.ruoyi.domain.DocumentMaterials; import com.ruoyi.domain.vo.*; import com.ruoyi.mapper.DocumentMaterialsMapper; import com.ruoyi.service.IDocumentMaterialsService; import com.ruoyi.util.ErrorcodeExceptionextends; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; /** * 【文件材料综合信息】Service业务层处理 * * @author ruoyi * @date 2025-07-26 */ @Service public class DocumentMaterialsServiceImpl extends ServiceImpl implements IDocumentMaterialsService { private LambdaQueryWrapper buildCondition(DocumentMaterials documentMaterials){ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.like(!StringUtils.isEmpty(documentMaterials.getCreator()), DocumentMaterials::getCreator, documentMaterials.getCreator()) .like(!StringUtils.isEmpty(documentMaterials.getStage()), DocumentMaterials::getStage, documentMaterials.getStage()) .like(!StringUtils.isEmpty(documentMaterials.getIsCanceled()), DocumentMaterials::getIsCanceled, documentMaterials.getIsCanceled()) .like(!StringUtils.isEmpty(documentMaterials.getIsAttachment()), DocumentMaterials::getIsAttachment, documentMaterials.getIsAttachment()) .like(!StringUtils.isEmpty(documentMaterials.getIsSensitive()), DocumentMaterials::getIsSensitive, documentMaterials.getIsSensitive()) .like(!StringUtils.isEmpty(documentMaterials.getPublicity()), DocumentMaterials::getPublicity, documentMaterials.getPublicity()) .like(!StringUtils.isEmpty(documentMaterials.getRetentionPeriod()), DocumentMaterials::getRetentionPeriod, documentMaterials.getRetentionPeriod()) .like(!StringUtils.isEmpty(documentMaterials.getSecurityLevel()), DocumentMaterials::getSecurityLevel, documentMaterials.getSecurityLevel()) .like(!StringUtils.isEmpty(documentMaterials.getTitle()), DocumentMaterials::getTitle, documentMaterials.getTitle()) .eq(documentMaterials.getDate()!=null, DocumentMaterials::getDate, documentMaterials.getDate()) .eq(documentMaterials.getRecordId()!=null, DocumentMaterials::getRecordId, documentMaterials.getRecordId()) .eq(documentMaterials.getPageNumber()!=null, DocumentMaterials::getPageNumber, documentMaterials.getPageNumber()); // .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()); // // .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()) // .like(!StringUtils.isEmpty(zfProperty.getRemark()), ZfProperty::getRemark, zfProperty.getRemark()) // .eq(zfProperty.getFamilyId()!=null,ZfProperty::getFamilyId,zfProperty.getFamilyId()) // .in(ZfProperty::getFamilyId,familyIdList) // .eq(zfProperty.getHappenTime()!=null,ZfProperty::getHappenTime,zfProperty.getHappenTime()) // .between(zfProperty.getHappenStartTime() != null && zfProperty.getHappenEndTime() != null, ZfProperty::getHappenTime, zfProperty.getHappenStartTime(), zfProperty.getHappenEndTime()); // lqw.orderByDesc(ZfProperty::getCreateTime); // lqw.orderByDesc(ArchiveRecords::isOwnData) lqw.orderByAsc(DocumentMaterials::getPageNumber); System.out.println("ssssssssssssddd0000000000000000"); return lqw; } @Override public AjaxResult selectDataList(DocumentMaterials documentMaterials, Integer pageNum, Integer pageSize) { LambdaQueryWrapper lqw = buildCondition(documentMaterials); Page zfClanPage = new Page<>(pageNum, pageSize); Page pageResult = page(zfClanPage, lqw); List beanRecords = pageResult.getRecords();//得到查询出来的数据 System.out.println(beanRecords); // beanRecords.forEach(record -> { // if (record.getUserId() != null) { // SysUser user = userMapper.selectUserById(record.getUserId()); // record.setSysUser(user); // 假设Archiverecordstouser中有setUser方法 // } // }); // List beanRecords = list(lqw); // log.info("从数据库中查到的为:{}", beanRecords); // return markOwnData(familyId, fatherFaId, motherFaId, beanRecords); HashMap data = MapUtils.getResult(pageResult, beanRecords); return AjaxResult.success(data); } @Override public DocumentMaterials selectDocumentMaterialsByMaterialId(String materialId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(materialId!=null, DocumentMaterials::getMaterialId, materialId); List records = list(lqw); if(!records.isEmpty()) return records.get(0); else return null; } @Override public List selectDocumentMaterialsList(DocumentMaterials documentMaterials) { LambdaQueryWrapper lambdaQueryWrapper = buildCondition(documentMaterials); List beanRecords = list(lambdaQueryWrapper); return beanRecords; } @Override public List selectDocumentMaterialsAllByRecordId(Long id) { return this.baseMapper.getDocumentMaterialsvoLarge(Math.toIntExact(id)); } @Override public List selectDocumentMaterialsFileList(Long id) { return this.baseMapper.getDocumentMaterialsFileList(Math.toIntExact(id)); } @Override public int insertDocumentMaterials(DocumentMaterials documentMaterials) { LocalDateTime time = LocalDateTime.now(); Date date = Date.from(time.atZone(ZoneId.systemDefault()).toInstant()); documentMaterials.setCreatedAt(date); System.out.println(documentMaterials.getFileStyle()); System.out.println(documentMaterials.getPageNumber()); // if(documentMaterials.getPageNumber()==null) // { // documentMaterials.setPageNumber(-1L); // } boolean res = false; try { res = this.save(documentMaterials); } catch (Exception e) { System.out.println(e); throw new ErrorcodeExceptionextends(500, "同一个案卷内,不允许页码重复!"); } if(res) return 1; else return 0; } @Override public List selectDocumentMaterialsByIds(Long[] ids) { // 获取当前用户ID Long userid = SecurityUtils.getUserId(); // 创建查询条件 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // 根据ids查询 lambdaQueryWrapper.in(DocumentMaterials::getMaterialId, Arrays.asList(ids)); lambdaQueryWrapper.orderByAsc(DocumentMaterials::getPageNumber); // 如果不是管理员,需要考虑权限过滤(可根据实际权限需求调整) if (userid != 1) { // 这里可以添加权限相关的过滤条件 } List beanRecords = list(lambdaQueryWrapper); return beanRecords; } @Override public int updateDocumentMaterials(DocumentMaterials documentMaterials) { boolean result = false; try { // //修改页号成功之后,要重新生成文件材料序号,页次 // //根据pageNumber拿到title,然后计算pageOrder // LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); // lqw.eq(documentMaterials.getRecordId()!=null, DocumentMaterials::getRecordId, documentMaterials.getRecordId()); // lqw.eq(documentMaterials.getPageNumber()!=null, DocumentMaterials::getPageNumber, documentMaterials.getPageNumber()); // List records = list(lqw); // // //计算pageOrder // Long pageOrder = 1L; // if(documentMaterials.getPageNumber().equals(1)) // pageOrder = 1L; // else { // Long maxPOrder = this.baseMapper.getMaxPageOrder(records.get(0).getTitle(), documentMaterials.getPageNumber(), records.get(0).getStage(), documentMaterials.getRecordId()); // if (maxPOrder != null) // pageOrder = maxPOrder + 1; // } // //设置pageOrder // documentMaterials.setPageOrder(pageOrder); // //计算fileNumber // Long fileNumber = this.getFiNum(documentMaterials.getPageNumber(), documentMaterials.getRecordId()); // documentMaterials.setFileNumber(fileNumber); //修改页号 result = updateById(documentMaterials); // //把剩下所有的的fileNumber和pageOrder都更新一遍 // LambdaQueryWrapper lqw1 = new LambdaQueryWrapper<>(); // lqw.eq(documentMaterials.getRecordId()!=null, DocumentMaterials::getRecordId, documentMaterials.getRecordId()); // // lqw.eq(documentMaterials.getPageNumber()!=null, DocumentMaterials::getPageNumber, documentMaterials.getPageNumber()); // List recordss = list(lqw1); // for(DocumentMaterials dt: recordss) // { // //计算pageOrder // Long pageOrder1 = 1L; // if(dt.getPageNumber().equals(1)) // pageOrder1 = 1L; // else { // Long maxPOrder1 = this.baseMapper.getMaxPageOrder(dt.getTitle(), dt.getPageNumber(), dt.getStage(), dt.getRecordId()); // if (maxPOrder1 != null) // pageOrder1 = maxPOrder1 + 1; // } // //设置pageOrder // dt.setPageOrder(pageOrder1); // //计算fileNumber // Long fileNumber1 = this.getFiNum(dt.getPageNumber(), dt.getRecordId()); // dt.setFileNumber(fileNumber1); // //修改页号 // updateById(dt); // } } catch (Exception e) { System.out.println(e); throw new ErrorcodeExceptionextends(500, "同一个案卷内,不允许页码重复!"); } if(result) return 1; else return 0; } @Override public int deleteDocumentMaterialsByMaterialIds(String[] materialIds) { if (this.removeByIds(Arrays.asList(materialIds))) { return 1; } else return 0; } @Override public int deleteDocumentMaterialsByMaterialId(String materialId) { return 0; } @Override public Long getFiNum(Long pageNumber, Long recordId) { return this.baseMapper.getFileNumber(pageNumber, recordId); } @Override public int updateByPageNumber(Long pageNumber, String sizeType, Long fileNumber, int width, int height, int horizontalResolution, int verticalResolution, double fileSize, String url, String format, Long recordId) { //根据pageNumber拿到title,然后计算pageOrder LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(recordId!=null, DocumentMaterials::getRecordId, recordId); lqw.eq(pageNumber!=null, DocumentMaterials::getPageNumber, pageNumber); List records = list(lqw); //计算pageOrder Long pageOrder = 1L; if(pageNumber.equals(1)) pageOrder = 1L; else { Long maxPOrder = this.baseMapper.getMaxPageOrder(records.get(0).getTitle(), pageNumber, records.get(0).getStage(), recordId); if (maxPOrder != null) pageOrder = maxPOrder + 1; } this.baseMapper.updateInfoByPageNumber(pageNumber, sizeType,fileNumber,pageOrder, width, height, horizontalResolution, verticalResolution, fileSize, url,format, recordId); return 0; } @Override public List findArchMInfo(String recordId) { return this.baseMapper.getArchiveMatInfo(Integer.parseInt(recordId)); } @Override public List findFileStyleInfo(int recordId) { return this.baseMapper.getFileStyleInfo(recordId); } @Override public AjaxResult importExcel(MultipartFile file, String recordId) { ExcelUtil util = new ExcelUtil<>(DocumentMaterialFileSmallVo.class); List dataList = null; try { dataList = util.importExcel(file.getInputStream()); } catch (Exception e) { throw new RuntimeException("没有按照规则导入数据"); } assert dataList != null; for (DocumentMaterialFileSmallVo archiveCategory : dataList) { // physcialService.mySave(physcial); DocumentMaterials documentMaterials = new DocumentMaterials(); BeanUtils.copyProperties(archiveCategory, documentMaterials); documentMaterials.setRecordId(Long.parseLong(recordId)); this.insertDocumentMaterials(documentMaterials); } return AjaxResult.success(); } @Override public DocumentMaterials selectByPageNumber(Long pageNumber, Integer recordId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(pageNumber!=null, DocumentMaterials::getPageNumber, pageNumber); lqw.eq(recordId!=null, DocumentMaterials::getRecordId, recordId); List ls = list(lqw); if(!ls.isEmpty()) return ls.get(0); else return null; } @Override public boolean isPageNumberIslegal(Integer recordId) { return this.baseMapper.isPageNumberLegal(recordId); } @Override public int getFileCount(Integer recordId) { return this.baseMapper.getCount(recordId); } @Override public AjaxResult addMiddleRecordsByPageNumbers(Long recordId, Long maxPageNumber) { try { // 获取指定recordId下的所有记录,按页号升序排列 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(DocumentMaterials::getRecordId, recordId); lqw.orderByAsc(DocumentMaterials::getPageNumber); List records = this.list(lqw); if (records == null || records.isEmpty()) { return AjaxResult.success("没有找到指定记录"); } List middleRecords = new ArrayList<>(); // 遍历记录,找出需要添加中间页号的位置 for (int i = 0; i < records.size() - 1; i++) { DocumentMaterials currentRecord = records.get(i); DocumentMaterials nextRecord = records.get(i + 1); long currentPage = currentRecord.getPageNumber(); long nextPage = nextRecord.getPageNumber(); // 如果当前页号和下一页号之间有间隔 if (nextPage - currentPage > 1) { // 添加中间页号的记录,信息与当前记录保持一致 for (long page = currentPage + 1; page < nextPage; page++) { DocumentMaterials newRecord = new DocumentMaterials(); // 复制当前记录的所有属性 BeanUtils.copyBeanProp(newRecord, currentRecord); // 设置新的页号 newRecord.setPageNumber(page); // 清除ID,确保是新记录 newRecord.setMaterialId(null); // 设置创建时间 newRecord.setCreatedAt(new Date()); // 重置文件材料序号为null,让系统自动生成 newRecord.setFileNumber(null); // 重置页次为null,让系统自动生成 newRecord.setPageOrder(null); // 重置图像相关字段,以便上传文件时更新 newRecord.setSizeType(null); newRecord.setWidth(null); newRecord.setHeight(null); newRecord.setHorizontalResolution(null); newRecord.setVerticalResolution(null); newRecord.setFileSize(null); newRecord.setFormat(null); newRecord.setUrl(null); // 添加到中间记录列表 middleRecords.add(newRecord); } } } // 处理最后一条记录到maxPageNumber之间的间隔 DocumentMaterials lastRecord = records.get(records.size() - 1); long lastPage = lastRecord.getPageNumber(); if (maxPageNumber > lastPage) { // 添加从lastPage+1到maxPageNumber之间的中间记录 for (long page = lastPage + 1; page <= maxPageNumber; page++) { DocumentMaterials newRecord = new DocumentMaterials(); // 复制最后一条记录的所有属性 BeanUtils.copyBeanProp(newRecord, lastRecord); // 设置新的页号 newRecord.setPageNumber(page); // 清除ID,确保是新记录 newRecord.setMaterialId(null); // 设置创建时间 newRecord.setCreatedAt(new Date()); // 重置文件材料序号为null,让系统自动生成 newRecord.setFileNumber(null); // 重置页次为null,让系统自动生成 newRecord.setPageOrder(null); // 重置图像相关字段,以便上传文件时更新 newRecord.setSizeType(null); newRecord.setWidth(null); newRecord.setHeight(null); newRecord.setHorizontalResolution(null); newRecord.setVerticalResolution(null); newRecord.setFileSize(null); newRecord.setFormat(null); newRecord.setUrl(null); // 添加到中间记录列表 middleRecords.add(newRecord); } } // 批量保存中间记录 if (!middleRecords.isEmpty()) { this.saveBatch(middleRecords); return AjaxResult.success("成功添加中间记录", "添加数量:" + middleRecords.size()); } else { return AjaxResult.success("没有需要添加的中间记录"); } } catch (Exception e) { e.printStackTrace(); return AjaxResult.error("添加中间记录失败:" + e.getMessage()); } } }