Przeglądaj źródła

档案初检相关

qianxb 1 rok temu
rodzic
commit
58c279a318

+ 5 - 0
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/NewIOSSClient.java

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.InputStream;
 import java.util.List;
 
 @FeignClient(value = AppConstant.APPLICATION_RESOURCE_NAME)
@@ -18,6 +19,7 @@ public interface NewIOSSClient {
     String UPLOAD_FILE_INFO = API_PREFIX + "/uploadFileInfo";
     String UPLOAD_FILE_INFO_BYTE = API_PREFIX + "/uploadFileInfoByte";
     String UPLOAD_FILE_INFO_INPUT_STREAM = API_PREFIX + "/uploadFileInfoInputStream";
+    String UPLOAD_FILE_INFO_INPUT_STREAM2 = API_PREFIX + "/uploadFileInfoInputStream2";
     String REMOVE_PDF_FILE = API_PREFIX + "/remove-file";
     String REMOVE_PDF_FILES = API_PREFIX + "/remove-files";
     String UPLOAD_FILE_INFO_WITH_PATH = API_PREFIX + "/uploadFileInfoWithPath";
@@ -25,6 +27,9 @@ public interface NewIOSSClient {
     @PostMapping(value = UPLOAD_FILE_INFO_INPUT_STREAM, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     BladeFile uploadFileByInputStream(MultipartFile file);
 
+    @PostMapping(value = UPLOAD_FILE_INFO_INPUT_STREAM2)
+    BladeFile uploadFileByInputStream2(@RequestParam String OriginalFilename,@RequestParam InputStream inputStream);
+
     @PostMapping(UPLOAD_FILE_INFO)
     BladeFile uploadFile(@RequestParam String fileName, @RequestParam String localFileUrl);
 

+ 10 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/NewIOSSClientImpl.java

@@ -38,6 +38,16 @@ public class NewIOSSClientImpl implements NewIOSSClient {
         return null;
     }
 
+    @Override
+    public BladeFile uploadFileByInputStream2(String OriginalFilename, InputStream inputStream) {
+        try {
+            return this.ossBuilder.template().putFile(OriginalFilename, inputStream);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     @Override
     public BladeFile updateFile(byte[] fileByte, String fileName) {
         try {

+ 40 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ArchiveConclusion.java

@@ -0,0 +1,40 @@
+package org.springblade.archive.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Param   档案结论表
+ * @Author wangwl
+ * @Date 2023/11/22 11:15
+ **/
+@Data
+@TableName("u_archive_conclusion")
+public class ArchiveConclusion implements Serializable {
+
+    @ApiModelProperty("主键id")
+    @TableId(
+            value = "id",
+            type = IdType.ASSIGN_ID
+    )
+    private Long id;
+
+    @ApiModelProperty("项目id")
+    private Long projectId;
+
+    @ApiModelProperty("专家id")
+    private Long expertId;
+
+    @ApiModelProperty("文档地址")
+    private String worldUrl;
+
+    @ApiModelProperty("文档PDF地址")
+    private String worldPdfUrl;
+
+
+}

+ 2 - 1
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/CheckoutVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.archive.entity.ArchivesAuto;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -12,7 +13,7 @@ import java.util.List;
  * @Date 2023/8/23 14:52
  **/
 @Data
-public class CheckoutVO {
+public class CheckoutVO implements Serializable {
 
     @ApiModelProperty("节点名称")
     private String nodeName;

+ 2 - 1
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ProjectInspectStatVO.java

@@ -3,6 +3,7 @@ package org.springblade.archive.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -11,7 +12,7 @@ import java.util.List;
  * @Date 2023/11/17 14:31
  **/
 @Data
-public class ProjectInspectStatVO {
+public class ProjectInspectStatVO implements Serializable {
     @ApiModelProperty("预警提示")
     private String tips;
 

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ExcelEditCallback.java

@@ -20,4 +20,6 @@ public class ExcelEditCallback {
     // 返回码
     private Integer error;
 
+    private Long projectId;
+
 }

+ 30 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -25,6 +25,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 
 import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
@@ -33,6 +34,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.message.BasicNameValuePair;
 import org.springblade.archive.dto.SaveApplyDTO;
+import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ExpertInspection;
 import org.springblade.archive.service.IArchiveAutoPdfService;
 import org.springblade.archive.utils.CallBgrsjk;
@@ -49,6 +51,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ExcelEditCallback;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ArchiveTreeContractClient;
 import org.springblade.manager.feign.ContractClient;
@@ -878,6 +881,33 @@ public class ArchivesAutoController extends BladeController {
 		return R.data(vo);
 	}
 
+	/**
+	 * 在线验收-编写报告
+	 */
+	@GetMapping("/getArchiveConclusion")
+	@ApiOperationSupport(order = 36)
+	@ApiOperation(value = "在线验收-编写报告", notes = "当前专家存在草稿则返回草稿,不存在则返回模板")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true)
+	})
+	public R<ArchiveConclusion> getArchiveConclusion(@RequestParam Long projectId) {
+		ArchiveConclusion vo = archivesAutoService.getArchiveConclusion(projectId);
+		return R.data(vo);
+	}
+
+	/**
+	 * 在线excel 档案修改回调
+	 */
+	@PostMapping(value = "/callbackSave")
+	@ApiOperation(value = "onlyOffice保存回调", notes = "onlyOffice保存回调")
+	@ApiOperationSupport(order = 37)
+	@ResponseBody
+	public ExcelEditCallback callbackSave(@RequestBody ExcelEditCallback callback, HttpServletRequest request) {
+		String projectId = request.getParameter("projectId");
+		callback.setProjectId(Long.parseLong(projectId));
+		return archivesAutoService.callbackSave(callback);
+	}
+
 
 
 }

+ 16 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveConclusionMapper.java

@@ -0,0 +1,16 @@
+package org.springblade.archive.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.archive.entity.ArchiveConclusion;
+import org.springblade.archive.entity.ArchiveProjectConfig;
+
+/**
+ * <p>
+ * Mapper 接口
+ * </p>
+ *
+ * @since 2023-04-09
+ */
+public interface ArchiveConclusionMapper extends BaseMapper<ArchiveConclusion> {
+
+}

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -20,6 +20,7 @@ import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.archive.dto.ArchivesAutoDTO;
+import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -183,4 +184,7 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	IPage<ExpertInspectionVO> getUserInspectInfo(IPage<ExpertInspectionVO> page,@Param("projectId") Long projectId,@Param("userId") Long userId);
 
     List<ArchivesAutoVO3> getAllInspectArchive(@Param("projectId")Long projectId);
+
+    ArchiveConclusion getArchiveConclusion(@Param("projectId") Long projectId,@Param("userId") Long userId);
+
 }

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1051,6 +1051,10 @@
                uaa.*
         from u_archives_auto uaa WHERE project_id = #{projectId} and is_deleted = 0 and is_apply = 1
     </select>
+    <select id="getArchiveConclusion" resultType="org.springblade.archive.entity.ArchiveConclusion">
+        select * from u_archive_conclusion where project_id = #{projectId} and expert_id = #{userId}
+    </select>
+
 
 
     <update id="splitFiles">

+ 5 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -17,6 +17,7 @@
 package org.springblade.archive.service;
 
 import org.springblade.archive.dto.SaveApplyDTO;
+import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.entity.ExpertInspection;
 import org.springblade.archive.vo.*;
@@ -26,6 +27,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.entity.ExcelEditCallback;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.user.entity.User;
 import org.springframework.web.multipart.MultipartFile;
@@ -137,4 +139,7 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	ExpertInspectionVO getArchiveFileOpinion(Long fileId, Long projectId);
 
 
+    ArchiveConclusion getArchiveConclusion(Long projectId);
+
+	ExcelEditCallback callbackSave(ExcelEditCallback callback);
 }

+ 82 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -32,9 +32,11 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.dto.SaveApplyDTO;
+import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ArchiveProjectConfig;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.entity.ExpertInspection;
+import org.springblade.archive.mapper.ArchiveConclusionMapper;
 import org.springblade.archive.service.*;
 import org.springblade.archive.utils.ArchiveTreeUtil;
 import org.springblade.archive.utils.FileTransJavaDemo;
@@ -63,9 +65,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.manager.entity.ArchiveTreeContract;
-import org.springblade.manager.entity.ContractInfo;
-import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.ArchiveTreeContractClient;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
@@ -93,6 +93,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -137,6 +138,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	private final IExpertInspectionService inspectionService;
 
+	private final ArchiveConclusionMapper conclusionMapper;
+
 
 
 
@@ -3009,6 +3012,82 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		return vo;
 	}
 
+	/**
+	 * 在线验收-编写报告
+	 */
+	@Override
+	public ArchiveConclusion getArchiveConclusion(Long projectId) {
+		Long userId = AuthUtil.getUserId();
+		ArchiveConclusion conclusion = baseMapper.getArchiveConclusion(projectId, userId);
+		//如果为空返回模板
+		if (conclusion == null){
+			//当保存的时候发现key为5代表是模板
+			ArchiveConclusion archiveConclusion = new ArchiveConclusion();
+			Long id = SnowFlakeUtil.getId();
+			archiveConclusion.setId(id);
+			archiveConclusion.setWorldUrl("https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20231122/377ab5022240b55f9b63e2f4e3aae437.docx");
+			return archiveConclusion;
+		}
+		//否则返回草稿
+		return conclusion;
+	}
+
+	/**
+	 * 在线excel 档案修改回调
+	 */
+	@Override
+	public ExcelEditCallback callbackSave(ExcelEditCallback callback) {
+		ExcelEditCallback editCallback = new ExcelEditCallback();
+		editCallback.setError(0); //初始化返回值
+		int status = callback.getStatus();
+		//status=6,表示点击保存按钮
+		if (status == 3 || status == 6)
+		{
+			//获取url
+			String downloadUri = callback.getUrl();
+			downloadUri = downloadUri.replaceAll("amp;", "");
+			try {
+				//获取onlyOffice缓存中的文件流
+				URL url = new URL(downloadUri);
+				java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
+				connection.setRequestMethod("GET");
+				connection.setConnectTimeout(5 * 1000);
+				InputStream inputStream = connection.getInputStream();
+				if (inputStream == null) {
+					throw new Exception("文件为空");
+				}
+				//判断当前key是否存在,不存在则新增,存在则修改
+				String id = callback.getKey();
+				if (StringUtils.isBlank(id)){
+					throw new Exception("key不能为null");
+				}
+//				id = id.substring(0, id.lastIndexOf("_"));
+//				ArchiveConclusion conclusion = conclusionMapper.selectById(id);
+				ArchiveConclusion conclusion = conclusionMapper.selectOne(new LambdaQueryWrapper<ArchiveConclusion>().eq(ArchiveConclusion::getExpertId,AuthUtil.getUserId()));
+				//上传新文件到文件服务器
+				BladeFile bladeFile = iossClient.uploadFileByInputStream2("结论.docx",inputStream);
+				if (bladeFile == null || StringUtils.isBlank(bladeFile.getLink())){
+					throw new Exception("文件上传失败");
+				}
+				if (conclusion == null){
+					ArchiveConclusion archiveConclusion = new ArchiveConclusion();
+					archiveConclusion.setWorldUrl(bladeFile.getLink());
+					archiveConclusion.setId(SnowFlakeUtil.getId());
+					archiveConclusion.setExpertId(AuthUtil.getUserId());
+					archiveConclusion.setProjectId(callback.getProjectId());
+					conclusionMapper.insert(archiveConclusion);
+				}else {
+					conclusion.setWorldUrl(bladeFile.getLink());
+					conclusionMapper.updateById(conclusion);
+				}
+				inputStream.close();
+			} catch (Exception e) {
+				editCallback.setError(1);
+				e.printStackTrace();
+			}
+		}
+		return editCallback;
+	}
 
 
 	public void deleteFile(String defaultDir,Long id){

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

@@ -421,7 +421,7 @@ public class FileUtils {
         if (SystemUtils.isMacOs()) {
             file_path = "/Users/hongchuangyanfa/Desktop/";
         } else if (SystemUtils.isWindows()) {
-            file_path = "C://upload";
+            file_path = "C://upload//";
         }
         return file_path;
     }