package com.hotent.project.manager.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; 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.hotent.baseInfo.manager.AuditedUnitManager; import com.hotent.baseInfo.manager.CostDocumentTemplateManager; import com.hotent.baseInfo.manager.CostDocumentWhManager; import com.hotent.baseInfo.model.AuditedUnit; import com.hotent.baseInfo.model.CostDocumentTemplate; import com.hotent.baseInfo.model.CostDocumentWh; import com.hotent.config.EipConfig; import com.hotent.constant.BaseConstant; import com.hotent.project.manager.CostProjectDocumentFileManager; import com.hotent.project.model.CostProjectDocument; import com.hotent.project.dao.CostProjectDocumentDao; import com.hotent.project.manager.CostProjectDocumentManager; import com.hotent.base.manager.impl.BaseManagerImpl; import com.hotent.project.model.CostProjectDocumentFile; import com.hotent.project.req.CostProjectDocumentPageReq; import com.hotent.project.req.CostProjectDocumentReq; import com.hotent.project.resp.CostProjectDocumentResp; import com.hotent.uc.exception.BaseException; import com.hotent.util.wordexcelutils.DocumentProcessor; import org.apache.commons.lang.StringUtils; import org.apache.tools.ant.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import com.hotent.util.FileUploadUtil; /** * 监审项目文书表 服务实现类 * * @author 超级管理员 * @company 山西清众科技股份有限公司 * @since 2025-09-26 */ @Service public class CostProjectDocumentManagerImpl extends BaseManagerImpl implements CostProjectDocumentManager { @Autowired private CostProjectDocumentFileManager costProjectDocumentFileManager; @Autowired private CostDocumentTemplateManager costDocumentTemplateManager; @Autowired private AuditedUnitManager auditedUnitManager; @Autowired private CostDocumentWhManager costDocumentWhManager; @Override public CostProjectDocument getDetail(String id) { CostProjectDocument costProjectDocument = this.get(id); return costProjectDocument; } @Override public void deleteByIds(List ids) { List costProjectDocuments = this.listByIds(ids); if (costProjectDocuments!=null){ costProjectDocuments.forEach(item -> { //逻辑删除 item.setIsDeleted( BaseConstant.DELETE_FLAG); }); this.updateBatchById(costProjectDocuments); } } @Override @Transactional public void createOrUpdate(CostProjectDocument costProjectDocument) { //新建或更新 this.saveOrUpdate(costProjectDocument); } @Override public IPage pageList(CostProjectDocumentPageReq req) { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); if (req.getDocumentType() != null) { // LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); // lambdaQueryWrapper.eq(CostDocumentTemplate::getId, req.getDocumentType()); // lambdaQueryWrapper.eq(CostDocumentTemplate::getIsWh, "0"); qw.eq(CostProjectDocument::getDocumentType, req.getDocumentType()); } qw.eq(CostProjectDocument::getProjectId, req.getProjectId()); IPage page = new Page<>(req.getPageNum(), req.getPageSize()); return this.page(page, qw); } // @Override // public void create(CostProjectDocument costProjectDocument) { // if (ObjectUtil.isEmpty(costProjectDocument.getDocumentId())) { // throw new BaseException("请选择文书模板"); // } // if (ObjectUtil.isEmpty(costProjectDocument.getProjectId())) { // throw new BaseException("请选择项目"); // } // if (ObjectUtil.isEmpty(costProjectDocument.getDocumentNumber())) { // throw new BaseException("请填写通知文号"); // } // if (ObjectUtil.isEmpty(costProjectDocument.getEnterpriseId())) { // throw new BaseException("请选择监审单位"); // } // costProjectDocument.setGenerateTime(LocalDateTime.now()); // costProjectDocument.setIsPushed("1"); // // CostDocumentTemplate costDocumentTemplate = this.costDocumentTemplateManager.get(costProjectDocument.getDocumentId()); // if (costDocumentTemplate == null || BaseConstant.DELETE_FLAG.equals(costDocumentTemplate.getIsDeleted())) { // throw new BaseException("文书模板不存在"); // } // costProjectDocument.setDocumentAlias(costDocumentTemplate.getAlias()); // AuditedUnit auditedUnit = auditedUnitManager.get(costProjectDocument.getEnterpriseId()); // if (auditedUnit == null || BaseConstant.DELETE_FLAG.equals(auditedUnit.getIsDeleted())) { // throw new BaseException("被监审单位不存在"); // } // CostDocumentWh costDocumentWh = costDocumentWhManager.get(costProjectDocument.getDocumentWhId()); // if (costDocumentWh == null || BaseConstant.DELETE_FLAG.equals(costDocumentWh.getIsDeleted())) { // throw new BaseException("文书文号不存在"); // } // // LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); // qw.eq(CostProjectDocument::getProjectId, costProjectDocument.getProjectId()); // qw.eq(CostProjectDocument::getDocumentId, costProjectDocument.getDocumentId()); // qw.eq(CostProjectDocument::getEnterpriseId, costProjectDocument.getEnterpriseId()); // if (this.count(qw) > 0) { // throw new BaseException("该项目监审单位已存在此文书"); // } // super.create(costProjectDocument); // // // } @Override public void create(CostProjectDocumentReq req) { if (ObjectUtil.isEmpty(req.getDocumentId())) { throw new BaseException("请选择文书模板"); } if (ObjectUtil.isEmpty(req.getProjectId())) { throw new BaseException("请选择项目"); } if (ObjectUtil.isEmpty(req.getDocumentNumber())) { throw new BaseException("请填写通知文号"); } if (ObjectUtil.isEmpty(req.getEnterpriseId())) { throw new BaseException("请选择监审单位"); } req.setGenerateTime(LocalDateTime.now()); req.setIsPushed("1"); CostDocumentTemplate costDocumentTemplate = this.costDocumentTemplateManager.get(req.getDocumentId()); if (costDocumentTemplate == null || BaseConstant.DELETE_FLAG.equals(costDocumentTemplate.getIsDeleted())) { throw new BaseException("文书模板不存在"); } req.setDocumentAlias(costDocumentTemplate.getAlias()); AuditedUnit auditedUnit = auditedUnitManager.get(req.getEnterpriseId()); if (auditedUnit == null || BaseConstant.DELETE_FLAG.equals(auditedUnit.getIsDeleted())) { throw new BaseException("被监审单位不存在"); } CostDocumentWh costDocumentWh = costDocumentWhManager.get(req.getDocumentWhId()); if (costDocumentWh == null || BaseConstant.DELETE_FLAG.equals(costDocumentWh.getIsDeleted())) { throw new BaseException("文书文号不存在"); } //返回文号 String whNo = costDocumentWh.getRulePattern().replace("{prefixText}", costDocumentWh.getPrefixText()) .replace("{year}", costDocumentWh.getYear()).replace("{currentValue}", costDocumentWh.getCurrentValue().toString()); LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); qw.eq(CostProjectDocument::getProjectId, req.getProjectId()); qw.eq(CostProjectDocument::getDocumentId, req.getDocumentId()); qw.eq(CostProjectDocument::getEnterpriseId, req.getEnterpriseId()); if (this.count(qw) > 0) { throw new BaseException("该项目监审单位已存在此文书"); } //类型转换 CostProjectDocument costProjectDocument = new CostProjectDocument(); BeanUtil.copyProperties(req, costProjectDocument); costProjectDocument.setDocumentNumber(whNo); costProjectDocument.setDocumentName(costDocumentTemplate.getDocumentName()); costProjectDocument.setDocumentType(costDocumentTemplate.getType()); super.create(costProjectDocument); //文件关联信息赋值 req.getCostProjectDocumentFiles().forEach(costProjectDocumentFile -> { costProjectDocumentFile.setDocumentId(costProjectDocument.getDocumentId()); costProjectDocumentFile.setProjectId(costProjectDocument.getProjectId()); //送达回证特殊处理字段 后期在说 if ("送达回证".equals(costProjectDocument.getDocumentName())) { if (costProjectDocumentFile.getPinyin().equals("SongDaWenShuMingCheng")){ costProjectDocumentFile.setDataValue(costDocumentTemplate.getDocumentName()); } if (costProjectDocumentFile.getPinyin().equals("SongDaWenShuWenHao")){ costProjectDocumentFile.setDataValue(whNo); } if (costProjectDocumentFile.getPinyin().equals("SongDaWenShuMingCheng")){ costProjectDocumentFile.setDataValue(costDocumentTemplate.getDocumentName()); } if (costProjectDocumentFile.getPinyin().equals("TongZhiSongDaShiJian")){ costProjectDocumentFile.setDataValue(DateUtils.format(new Date(),"yyyy-MM-dd")); } if (costProjectDocumentFile.getPinyin().equals("BeiJianShenDanWeiBanGongDiDian")){ costProjectDocumentFile.setDataValue(auditedUnit.getAddress()); } if (costProjectDocumentFile.getPinyin().equals("ShouSongDaRen")){ costProjectDocumentFile.setDataValue(auditedUnit.getContactName()); } } }); //保存解析出的文件内容 costProjectDocumentFileManager.saveBatch(req.getCostProjectDocumentFiles()); //更新文号值 costDocumentWhManager.updateCurrentValue(costDocumentWh.getId()); } @Override public List getDocumentFileList(String id) { CostProjectDocument costProjectDocument = this.get(id); if(costProjectDocument == null){ throw new BaseException("文书模板不存在"); } return null; } @Override public void updateProjectDocument(CostProjectDocumentReq req) { if (ObjectUtil.isEmpty(req.getId())) { throw new BaseException("请选择要修改的文书"); } if (ObjectUtil.isEmpty(req.getDocumentId())) { throw new BaseException("请选择文书模板"); } if (ObjectUtil.isEmpty(req.getProjectId())) { throw new BaseException("请选择项目"); } if (ObjectUtil.isEmpty(req.getDocumentNumber())) { throw new BaseException("请填写通知文号"); } if (ObjectUtil.isEmpty(req.getEnterpriseId())) { throw new BaseException("请选择监审单位"); } CostProjectDocument selectCostProjectDocument = this.get(req.getId()); if (selectCostProjectDocument == null) { throw new BaseException("请选择要修改的文书"); } req.setIsPushed("1"); CostDocumentTemplate costDocumentTemplate = this.costDocumentTemplateManager.get(req.getDocumentId()); if (costDocumentTemplate == null || BaseConstant.DELETE_FLAG.equals(costDocumentTemplate.getIsDeleted())) { throw new BaseException("文书模板不存在"); } req.setDocumentAlias(costDocumentTemplate.getAlias()); AuditedUnit auditedUnit = auditedUnitManager.get(req.getEnterpriseId()); if (auditedUnit == null || BaseConstant.DELETE_FLAG.equals(auditedUnit.getIsDeleted())) { throw new BaseException("被监审单位不存在"); } CostDocumentWh costDocumentWh = costDocumentWhManager.get(req.getDocumentWhId()); if (costDocumentWh == null || BaseConstant.DELETE_FLAG.equals(costDocumentWh.getIsDeleted())) { throw new BaseException("文书文号不存在"); } LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); qw.eq(CostProjectDocument::getProjectId, req.getProjectId()); qw.eq(CostProjectDocument::getDocumentId, req.getDocumentId()); qw.eq(CostProjectDocument::getEnterpriseId, req.getEnterpriseId()); if (this.count(qw) > 0) { throw new BaseException("该项目监审单位已存在此文书"); } selectCostProjectDocument.setDocumentWhId(req.getDocumentWhId()); selectCostProjectDocument.setDocumentId(req.getDocumentId()); selectCostProjectDocument.setEnterpriseId(req.getEnterpriseId()); selectCostProjectDocument.setElectronicDocumentUrl(""); // 类型转换 BeanUtil.copyProperties(req,selectCostProjectDocument); super.update(selectCostProjectDocument); costProjectDocumentFileManager.remove(new LambdaQueryWrapper().eq(CostProjectDocumentFile::getProjectId,selectCostProjectDocument.getProjectId())); List costProjectDocumentFiles = req.getCostProjectDocumentFiles(); if (costProjectDocumentFiles != null){ for (CostProjectDocumentFile costProjectDocumentFile : costProjectDocumentFiles) { costProjectDocumentFile.setDocumentId(selectCostProjectDocument.getDocumentId()); costProjectDocumentFile.setProjectId(selectCostProjectDocument.getProjectId()); } } costProjectDocumentFileManager.saveBatch(req.getCostProjectDocumentFiles()); } @Override public List getListByProjectId(String projectId) { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); qw.eq(CostProjectDocument::getProjectId, projectId); qw.eq(CostProjectDocument::getIsDeleted, BaseConstant.NORMAL_STATUS); List list = this.list(qw); if (ObjectUtil.isEmpty(list)) { return new ArrayList<>(); } return list; } @Override public CostProjectDocumentResp getByProjectId(String projectId){ //查询监审文书 LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); qw.eq(CostProjectDocument::getProjectId, projectId); qw.eq(CostProjectDocument::getIsDeleted, BaseConstant.NORMAL_STATUS); CostProjectDocument costProjectDocument = this.getOne(qw); //转换为返回类型 CostProjectDocumentResp costProjectDocumentResp = BeanUtil.copyProperties(costProjectDocument, CostProjectDocumentResp.class); //查询文书下的文书内容 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(CostProjectDocumentFile::getProjectId, costProjectDocument.getProjectId()); //获取文件内容返回 costProjectDocumentResp.setCostProjectDocumentFiles(costProjectDocumentFileManager.list(wrapper)); CostDocumentTemplate costDocumentTemplate = costDocumentTemplateManager.get(costProjectDocument.getDocumentId()); costProjectDocumentResp.setFullPath(EipConfig.getImgUrl()+costDocumentTemplate.getFileUrl()); return costProjectDocumentResp; } @Override public String createDocument(String id) { CostProjectDocument costProjectDocument = this.getDetail(id); List list = costProjectDocumentFileManager.getCostProjectDocumentFiles(costProjectDocument.getProjectId(),costProjectDocument.getDocumentId()); CostDocumentTemplate costDocumentTemplate = this.costDocumentTemplateManager.get(costProjectDocument.getDocumentId()); //生成文书 Map map = new HashMap<>(); list.stream().forEach(p->{ map.put("{"+p.getOriginalText()+"}",p.getDataValue()); }); //先处理一种文件 String templatePath = costDocumentTemplate.getFileUrl().replace(BaseConstant.RESOURCE_PREFIX,""); templatePath = EipConfig.getProfile()+templatePath; String fileExtension = FileUploadUtil.getFileExtension(costDocumentTemplate.getFileUrl()); String fileName = FileUploadUtil.generateFileName(costDocumentTemplate.getDocumentName()+"."+fileExtension); String outputPath = FileUploadUtil.generateSavePath(EipConfig.getUploadPath(), fileName, fileExtension); DocumentProcessor.processWordDocument(templatePath,outputPath,map,new LinkedHashMap<>()); return EipConfig.getImgUrl()+FileUploadUtil.getPathFileName(outputPath,fileName); } }