Эх сурвалжийг харах

质检-同步合同段-上报记录表单html历史,重签先查询是否存在html历史有就使用历史,保存删除html历史

LHB 1 сар өмнө
parent
commit
a00f4902a7
15 өөрчлөгдсөн 318 нэмэгдсэн , 1 устгасан
  1. 56 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContractOldHtml.java
  2. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  3. 23 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractOldHtmlClient.java
  4. 27 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  5. 79 0
      blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java
  6. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  7. 4 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  8. 24 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractOldHtmlClientImpl.java
  9. 18 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractOldHtmlMapper.java
  10. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractOldHtmlMapper.xml
  11. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  12. 13 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/WbsTreeContractOldHtmlService.java
  13. 10 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  14. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractOldHtmlServiceImpl.java
  15. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 56 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContractOldHtml.java

@@ -0,0 +1,56 @@
+package org.springblade.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 合同段表单上报之前的html记录
+ * @author LHB
+ * @TableName m_wbs_tree_contract_old_html
+ */
+@TableName(value ="m_wbs_tree_contract_old_html")
+@Data
+public class WbsTreeContractOldHtml {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 合同WBS的p_key_id
+     */
+    private Long contractFormId;
+
+    /**
+     * 上报之前的html表单
+     */
+    private String oldHtmlUrl;
+
+    /**
+     *  是否删除(0-正常,1-已删除)
+     */
+    private Integer isDeleted;
+
+    /**
+     *  创建时间
+     */
+    private Date createTime;
+
+    /**
+     *  创建人
+     */
+    private Long createUser;
+
+    /**
+     *  修改时间
+     */
+    private Date updateTime;
+
+    /**
+     *  修改人
+     */
+    private Long updateUser;
+}

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -205,4 +205,7 @@ public interface WbsTreeContractClient {
 
     @GetMapping(API_PREFIX + "/findIsExistTreeNode")
     Integer findIsExistTreeNode(List<String> processNodeList);
+
+    @GetMapping(API_PREFIX + "/queryListByPIds")
+    List<WbsTreeContract> queryListByPIds(List<Long> pIds);
 }

+ 23 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractOldHtmlClient.java

@@ -0,0 +1,23 @@
+package org.springblade.manager.feign;
+
+import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.WbsTreeContractOldHtml;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+@FeignClient(value = APPLICATION_NAME_PREFIX + "manager")
+public interface WbsTreeContractOldHtmlClient {
+    /**
+     * 接口前缀
+     */
+    String API_PREFIX = "/api/manager/WbsTreeContractOldHtml";
+
+    @PostMapping(API_PREFIX + "/save")
+    Boolean save(@RequestBody List<WbsTreeContractOldHtml> data);
+
+}

+ 27 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
@@ -105,6 +106,7 @@ public class InformationWriteQueryController extends BladeController {
     private final ContractClient contractClient;
 
     private final WbsTreeContractClient wbsTreeContractClient;
+    private final WbsTreeContractOldHtmlClient wbsTreeContractOldHtmlClient;
 
     private final WbsTreePrivateClient wbsTreePrivateClient;
 
@@ -1034,8 +1036,33 @@ public class InformationWriteQueryController extends BladeController {
                 return R.data(300, false, "未查询到填报信息,上报失败");
             }
         } else { //质检
+            //记录选中节点的所有表单旧html
+            List<Long> list = Arrays.stream(startTaskVO.getIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
+            List<WbsTreeContract> wbsTreeContracts =  wbsTreeContractClient.queryListByPIds(list);
+
+
             businessData = this.informationQueryService.getOne(Wrappers.<InformationQuery>lambdaQuery().eq(InformationQuery::getWbsId, startTaskVO.getIds().replaceAll(",", "")).eq(InformationQuery::getClassify, startTaskVO.getClassify().toString()).eq(InformationQuery::getType, 1).last("order by id desc limit 1"));
             if (businessData != null) {
+
+                //处理html 复制之后记录在新表中w
+                if (CollectionUtils.isNotEmpty(wbsTreeContracts)) {
+                    List<WbsTreeContractOldHtml> data = new ArrayList<>();
+                    try {
+                        for (WbsTreeContract wbsTreeContract : wbsTreeContracts) {
+                            WbsTreeContractOldHtml oldHtml = new WbsTreeContractOldHtml();
+                            oldHtml.setId(SnowFlakeUtil.getId());
+                            oldHtml.setCreateUser(getUser().getUserId());
+                            String htmlUrl = wbsTreeContract.getHtmlUrl();
+                            String s = FileUtils.copyFileWithAbsolutePath(htmlUrl);
+                            oldHtml.setOldHtmlUrl(FileUtils.copyFileWithAbsolutePath(htmlUrl));
+                            data.add(oldHtml);
+                        }
+                        wbsTreeContractOldHtmlClient.save(data);
+                    } catch (Exception e) {
+                        throw new ServiceException(e.getMessage());
+                    }
+                }
+
                 //设置业务数据ID
                 startTaskVO.setIds(businessData.getId().toString());
                 return this.batchTask(startTaskVO);

+ 79 - 0
blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java

@@ -17,6 +17,7 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SystemUtils;
 import org.springblade.common.vo.DataVO;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.system.cache.ParamCache;
 
@@ -31,6 +32,7 @@ import java.awt.image.AffineTransformOp;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URLEncoder;
+import java.nio.file.*;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
@@ -366,4 +368,81 @@ public class FileUtils {
         String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path2, "");
         return path;
     }
+
+    /**
+     * 获取文件绝对路径并复制文件
+     * @param sourcePath 源文件路径(相对或绝对)
+     */
+    public static String copyFileWithAbsolutePath(String sourcePath) {
+        try {
+            // 1. 获取源文件的绝对路径
+            File sourceFile = new File(sourcePath);
+            String absolutePath = sourceFile.getAbsolutePath();
+            System.out.println("源文件绝对路径: " + absolutePath);
+
+            // 2. 验证文件存在且可读
+            if (!sourceFile.exists()) {
+                System.err.println("错误: 源文件不存在");
+                throw new ServiceException("错误: 源文件不存在");
+            }
+            if (!sourceFile.canRead()) {
+                System.err.println("错误: 无法读取源文件");
+
+                throw new ServiceException("错误: 源文件不存在");
+            }
+
+            // 3. 创建目标文件路径(在相同目录,文件名添加 _copy)
+            String parentDir = sourceFile.getParent();
+            String fileName = sourceFile.getName();
+
+            // 提取文件名和扩展名
+            String baseName;
+            String extension = "";
+            int dotIndex = fileName.lastIndexOf('.');
+            if (dotIndex > 0) {
+                baseName = fileName.substring(0, dotIndex);
+                extension = fileName.substring(dotIndex);
+            } else {
+                baseName = fileName;
+            }
+
+            // 生成唯一的目标文件名(避免覆盖)
+            File destFile;
+            int copyCounter = 1;
+            do {
+                String newFileName = baseName + "_copy" +
+                        (copyCounter > 1 ? "_" + copyCounter : "") +
+                        extension;
+                destFile = new File(parentDir, newFileName);
+                copyCounter++;
+            } while (destFile.exists());
+
+            System.out.println("目标文件路径: " + destFile.getAbsolutePath());
+
+            // 4. 执行文件复制(使用NIO方法)
+            Path source = sourceFile.toPath();
+            Path destination = destFile.toPath();
+
+            // 复制文件并保留属性
+            Files.copy(source, destination,
+                    StandardCopyOption.COPY_ATTRIBUTES,
+                    StandardCopyOption.REPLACE_EXISTING);
+
+            System.out.println("文件复制成功!");
+            return destFile.getAbsolutePath();
+        } catch (InvalidPathException e) {
+            System.err.println("路径无效: " + e.getMessage());
+            throw new ServiceException("路径无效");
+        } catch (FileAlreadyExistsException e) {
+            System.err.println("文件已存在: " + e.getMessage());
+            throw new ServiceException("文件已存在");
+        } catch (AccessDeniedException e) {
+            System.err.println("访问被拒绝: " + e.getMessage());
+            throw new ServiceException("访问被拒绝");
+        } catch (IOException e) {
+            System.err.println("IO错误: " + e.getMessage());
+            e.printStackTrace();
+            throw new ServiceException("IO错误");
+        }
+    }
 }

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -160,6 +160,7 @@ public class ExcelTabController extends BladeController {
 
     private final  SignFtpUtil signFtpUtil;
 
+    private final WbsTreeContractOldHtmlService wbsTreeContractOldHtmlService;
 
     @Autowired
     StringRedisTemplate RedisTemplate;
@@ -2011,6 +2012,13 @@ public class ExcelTabController extends BladeController {
             R.success("数据未发生变化");
         }
         executionTime.info("----公式填充执行完毕----");
+
+        //删除旧html数据
+        List<String> collect = tableInfoList.stream().map(TableInfo::getPkeyId).collect(Collectors.toList());
+        boolean update = wbsTreeContractOldHtmlService.update(Wrappers.<WbsTreeContractOldHtml>update().lambda()
+                .set(WbsTreeContractOldHtml::getIsDeleted, 1)
+                .in(WbsTreeContractOldHtml::getContractFormId, collect));
+
         //保存数据到数据库
         R<Object> result = this.excelTabService.saveOrUpdateInfo(tableInfoList);
         RandomNumberHolder.RandomTemplateTypeclear();

+ 4 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -496,5 +496,8 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return wbsTreeContractService.findIsExistTreeNode(ids);
     }
 
-
+    @Override
+    public List<WbsTreeContract> queryListByPIds(List<Long> pIds) {
+        return wbsTreeContractService.queryListByPIds(pIds);
+    }
 }

+ 24 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractOldHtmlClientImpl.java

@@ -0,0 +1,24 @@
+package org.springblade.manager.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.manager.entity.WbsTreeContractOldHtml;
+import org.springblade.manager.service.WbsTreeContractOldHtmlService;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author LHB
+ */
+@RestController
+@AllArgsConstructor
+public class WbsTreeContractOldHtmlClientImpl implements WbsTreeContractOldHtmlClient {
+    @Resource
+    private WbsTreeContractOldHtmlService wbsTreeContractOldHtmlService;
+
+    @Override
+    public Boolean save(List<WbsTreeContractOldHtml> data) {
+        return wbsTreeContractOldHtmlService.saveBatch(data);
+    }
+}

+ 18 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractOldHtmlMapper.java

@@ -0,0 +1,18 @@
+package org.springblade.manager.mapper;
+
+import org.springblade.manager.entity.WbsTreeContractOldHtml;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author LHB
+* @description 针对表【m_wbs_tree_contract_old_html(合同段表单上报之前的html记录)】的数据库操作Mapper
+* @createDate 2025-07-01 17:37:36
+* @Entity generator.domain.MWbsTreeContractOldHtml
+*/
+public interface WbsTreeContractOldHtmlMapper extends BaseMapper<WbsTreeContractOldHtml> {
+
+}
+
+
+
+

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractOldHtmlMapper.xml

@@ -0,0 +1,22 @@
+<?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="org.springblade.manager.mapper.WbsTreeContractOldHtmlMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.manager.entity.WbsTreeContractOldHtml">
+            <id property="id" column="id" />
+            <result property="contractFormId" column="contract_form_id" />
+            <result property="oldHtmlUrl" column="old_html_url" />
+            <result property="isDeleted" column="is_deleted" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,contract_form_id,old_html_url,is_deleted,create_time,create_user,
+        update_time,update_user
+    </sql>
+</mapper>

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -90,4 +90,6 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
     EKeyDto getEKey(String contractId, Long pKeyId, String wbsId);
 
     Integer findIsExistTreeNode(List<String> ids);
+
+    List<WbsTreeContract> queryListByPIds(List<Long> pIds);
 }

+ 13 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/WbsTreeContractOldHtmlService.java

@@ -0,0 +1,13 @@
+package org.springblade.manager.service;
+
+import org.springblade.manager.entity.WbsTreeContractOldHtml;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author LHB
+* @description 针对表【m_wbs_tree_contract_old_html(合同段表单上报之前的html记录)】的数据库操作Service
+* @createDate 2025-07-01 17:37:36
+*/
+public interface WbsTreeContractOldHtmlService extends IService<WbsTreeContractOldHtml> {
+
+}

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -126,6 +126,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     private final TableInfoServiceImpl tableInfoService;
     private final INodeBaseInfoService nodeBaseInfoService;
     private final TrialSelfInspectionRecordClient trialSelfInspectionRecordClient;
+    private final WbsTreeContractOldHtmlService wbsTreeContractOldHtmlService;
 
 
     @Autowired
@@ -1432,6 +1433,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         String keyNameList="";
         // 匹配关联
         try {
+            // 这里先从旧html表中获取  如果有用旧的html m_wbs_tree_contract_old_html
+            WbsTreeContractOldHtml oldHtml = wbsTreeContractOldHtmlService.getOne(Wrappers.<WbsTreeContractOldHtml>lambdaQuery()
+                    .eq(WbsTreeContractOldHtml::getContractFormId, pkeyId)
+                    .eq(WbsTreeContractOldHtml::getIsDeleted, 0)
+                    .last("limit 1"));
+            if(oldHtml != null){
+                wbsTreeContract.setHtmlUrl(oldHtml.getOldHtmlUrl());
+            }
+
             InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
             String htmlString = IoUtil.readToString(inputStreamByUrl);
             Document doc = Jsoup.parse(htmlString);

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractOldHtmlServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.manager.entity.WbsTreeContractOldHtml;
+import org.springblade.manager.service.WbsTreeContractOldHtmlService;
+import org.springblade.manager.mapper.WbsTreeContractOldHtmlMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author LHB
+* @description 针对表【m_wbs_tree_contract_old_html(合同段表单上报之前的html记录)】的数据库操作Service实现
+* @createDate 2025-07-01 17:37:36
+*/
+@Service
+public class WbsTreeContractOldHtmlServiceImpl extends ServiceImpl<WbsTreeContractOldHtmlMapper, WbsTreeContractOldHtml>
+    implements WbsTreeContractOldHtmlService {
+
+}
+
+
+
+

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -3895,4 +3895,11 @@ public static boolean hasConflictingCodes(List<ImportTreeDto> list) {
         }
         return false;
     }
+
+    @Override
+    public List<WbsTreeContract> queryListByPIds(List<Long> pIds) {
+        return baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                .in(WbsTreeContract::getPId, pIds)
+                .eq(WbsTreeContract::getIsDeleted, 0));
+    }
 }