diff --git a/db/20230905标准法规库.sql b/db/20230905标准法规库.sql index 3c49d3f7..5e2871c5 100644 --- a/db/20230905标准法规库.sql +++ b/db/20230905标准法规库.sql @@ -270,4 +270,38 @@ CREATE TABLE `laws_asms_open_api` alter table laws_asms_open_api comment '汽车标准数字化平台ASMS开放API接口管理'; +DROP TABLE IF EXISTS `laws_asms_domestic`; +CREATE TABLE `laws_asms_domestic` +( + `id` varchar(100) NOT NULL PRIMARY KEY COMMENT '主键ID', + `code` varchar(100) COMMENT '标准法规编号/标准号', + `name` varchar(100) COMMENT '标准法规名称/标准名称', + `english_name` varchar(100) COMMENT '法规英文名称', + `type` varchar(100) COMMENT '标准法规类别/标准类别', + `applicable_certification_list_string` varchar(100) COMMENT '适用认证', + `applicable_models_list_string` varchar(100) COMMENT '适用车型拼接名称', + `degree_adoption` varchar(100) COMMENT '采标程度', + `drafting_people` varchar(500) COMMENT '起草人', + `drafting_unit` varchar(500) COMMENT '起草单位', + `focal_point_name` varchar(100) COMMENT '标准领域名称', + `implementation_date` varchar(100) COMMENT '实施日期', + `international_standard` varchar(100) COMMENT '采用国际标准号', + `new_car_implementation_date` varchar(100) COMMENT '新车实施日期', + `new_register_car_implementation_date` varchar(100) COMMENT '新注册车实施日期', + `power_type_list_string` varchar(100) COMMENT '动力类型', + `production_car_implementation_date` varchar(100) COMMENT '在产车实施日期', + `proposing_department` varchar(100) COMMENT '提出部门', + `publish_date` varchar(100) COMMENT '发布日期', + `replace_code` varchar(100) COMMENT '代替标准号', + `scope_application` varchar(100) COMMENT '适用范围', + `standard_nature` varchar(100) COMMENT '标准性质', + `standard_status` varchar(100) COMMENT '标准状态', + `subcommittee` varchar(100) COMMENT '分标委', + `create_time` varchar(100) COMMENT '创建时间', + `update_time` varchar(100) COMMENT '更新时间', + `is_sync` varchar(5) COMMENT '是否同步(0未同步,1已同步)' +) COMMENT = 'ASMS国内法规'; +alter table laws_asms_domestic + comment 'ASMS国内法规'; + diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/util/FileUtils.java b/laws-base/laws-base-core/src/main/java/com/jero/common/util/FileUtils.java new file mode 100644 index 00000000..285fdccc --- /dev/null +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/util/FileUtils.java @@ -0,0 +1,53 @@ +/** + * @Author: Greyfus + * @Create: 2022-06-26 19:24 + * @Version: + * @Description: + */ +package com.jero.common.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; + +public class FileUtils { + + private FileUtils() { + throw new IllegalStateException("FileUtils class"); + } + private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class); + + /** + * 删除指定文件夹下文件 + * + * @param filePath + */ + public static void deleteFolders(String filePath) { + + Path path = Paths.get(filePath); + try { + Files.walkFileTree(path, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException { + Files.delete(file); + LOGGER.info("删除文件: {}", file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, + IOException exc) throws IOException { + Files.delete(dir); + LOGGER.info("文件夹被删除: {}", dir); + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/util/MinioUtil.java b/laws-base/laws-base-core/src/main/java/com/jero/common/util/MinioUtil.java index 8b193dd4..45099b0c 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/util/MinioUtil.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/util/MinioUtil.java @@ -11,12 +11,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.net.HttpURLConnection; -import java.net.ProtocolException; import java.net.URL; import java.net.URLDecoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -94,7 +92,7 @@ public class MinioUtil { orgName=file.getName(); } orgName = CommonUtils.getFileName(orgName); - String objectName = bizPath+File.separator + String objectName = bizPath+"/" +(!orgName.contains(".") ?orgName + "_" + System.currentTimeMillis() :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/util/ZipUtil.java b/laws-base/laws-base-core/src/main/java/com/jero/common/util/ZipUtil.java new file mode 100644 index 00000000..5ba03939 --- /dev/null +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/util/ZipUtil.java @@ -0,0 +1,309 @@ +package com.jero.common.util; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +@Slf4j +public class ZipUtil { + + private static final int BUFFER_SIZE = 2 * 1024; + + /** + * 压缩成ZIP 方法1 + * + * @param srcDir 压缩文件夹路径 + * @param out 压缩文件输出流 + * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws RuntimeException 压缩失败会抛出运行时异常 + */ + public static void toZip(String srcDir, OutputStream out, HttpServletResponse response, boolean KeepDirStructure) + throws RuntimeException { + + long start = System.currentTimeMillis(); + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(out); + File sourceFile = new File(srcDir); + compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure); + long end = System.currentTimeMillis(); + System.out.println("压缩完成,耗时:" + (end - start) + " ms"); + + + } catch (Exception e) { + throw new RuntimeException("zip error from ZipUtils", e); + } finally { + if (zos != null) { + try { + zos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + } + + /** + * 压缩成ZIP 方法2 + * + * @param srcFiles 需要压缩的文件列表 + * @param out 压缩文件输出流 + * @throws RuntimeException 压缩失败会抛出运行时异常 + */ + public static void toZip(List srcFiles, OutputStream out) throws RuntimeException { + long start = System.currentTimeMillis(); + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(out); + for (File srcFile : srcFiles) { + byte[] buf = new byte[BUFFER_SIZE]; + zos.putNextEntry(new ZipEntry(srcFile.getName())); + int len; + FileInputStream in = new FileInputStream(srcFile); + while ((len = in.read(buf)) != -1) { + zos.write(buf, 0, len); + } + zos.closeEntry(); + in.close(); + } + long end = System.currentTimeMillis(); + System.out.println("压缩完成,耗时:" + (end - start) + " ms"); + } catch (Exception e) { + throw new RuntimeException("zip error from ZipUtils", e); + } finally { + if (zos != null) { + try { + zos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + + /** + * 递归压缩方法 + * + * @param sourceFile 源文件 + * @param zos zip输出流 + * @param name 压缩后的名称 + * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构; + * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败) + * @throws Exception + */ + private static void compress(File sourceFile, ZipOutputStream zos, String name, + boolean KeepDirStructure) throws Exception { + byte[] buf = new byte[BUFFER_SIZE]; + if (sourceFile.isFile()) { + // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字 + zos.putNextEntry(new ZipEntry(name)); + // copy文件到zip输出流中 + int len; + FileInputStream in = new FileInputStream(sourceFile); + while ((len = in.read(buf)) != -1) { + zos.write(buf, 0, len); + } + // Complete the entry + zos.closeEntry(); + in.close(); + } else { + File[] listFiles = sourceFile.listFiles(); + if (listFiles == null || listFiles.length == 0) { + // 需要保留原来的文件结构时,需要对空文件夹进行处理 + if (KeepDirStructure) { + // 空文件夹的处理 + zos.putNextEntry(new ZipEntry(name + "/")); + // 没有文件,不需要文件的copy + zos.closeEntry(); + } + + } else { + for (File file : listFiles) { + // 判断是否需要保留原来的文件结构 + if (KeepDirStructure) { + // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠, + // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了 + compress(file, zos, name + "/" + file.getName(), KeepDirStructure); + } else { + compress(file, zos, file.getName(), KeepDirStructure); + } + + } + } + } + } + + /** + * 下载ZIP压缩包(会对下载后的压缩包进行删除) + * + * @param file zip压缩包文件 + * @param response 响应 + * @author liukai + */ + public static void downloadZip(File file, HttpServletResponse response) { + OutputStream toClient = null; + try { + // 以流的形式下载文件。 + BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath())); + byte[] buffer = new byte[fis.available()]; + fis.read(buffer); + fis.close(); + // 清空response + response.reset(); + toClient = new BufferedOutputStream(response.getOutputStream()); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); + toClient.write(buffer); + toClient.flush(); + } catch (Exception e) { + System.out.println("下载zip压缩包过程发生异常"); + } finally { + if (toClient != null) { + try { + toClient.close(); + } catch (IOException e) { + System.out.println("zip包下载关流失败"); + } + } + } + } + + + /** + * zip解压 + * + * @param srcFile zip源文件 + * @param destDirPath 解压后的目标文件夹 + * @throws RuntimeException 解压失败会抛出运行时异常 + */ + public static List unZip(File srcFile, String destDirPath) throws RuntimeException { + + //记录解压出来的所有文件名 + List filesName = new ArrayList<>(); + long start = System.currentTimeMillis(); + // 判断源文件是否存在 + if (!srcFile.exists()) { + throw new RuntimeException(srcFile.getPath() + "所指文件不存在"); + } + // 开始解压 + ZipFile zipFile = null; + try { + zipFile = new ZipFile(srcFile, Charset.forName("GBK")); + Enumeration entries = zipFile.entries(); + + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + + // System.out.println("解压文件:" + entry.getName()); + // 如果是文件夹,就创建个文件夹 + if (entry.isDirectory()) { + String dirPath = destDirPath + "/" + entry.getName(); + File dir = new File(dirPath); + dir.mkdirs(); + } else { + //添加进filesName + filesName.add(entry.getName()); + // 如果是文件,就先创建一个文件,然后用io流把内容copy过去 + File targetFile = new File(destDirPath + "/" + entry.getName()); + // 保证这个文件的父文件夹必须要存在 + if (!targetFile.getParentFile().exists()) { + targetFile.getParentFile().mkdirs(); + } + targetFile.createNewFile(); + // 将压缩文件内容写入到这个文件中 + InputStream is = zipFile.getInputStream(entry); + FileOutputStream fos = new FileOutputStream(targetFile); + int len; + byte[] buf = new byte[1024]; + while ((len = is.read(buf)) != -1) { + fos.write(buf, 0, len); + } + // 关流顺序,先打开的后关闭 + fos.close(); + is.close(); + } + } + long end = System.currentTimeMillis(); + System.out.println("解压完成,耗时:" + (end - start) + " ms"); + } catch (Exception e) { + throw new RuntimeException("unzip error from ZipUtils", e); + } finally { + if (zipFile != null) { + try { + zipFile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return filesName; + } + + + /** + * 删除文件 + * + * @param filePath + * @return + */ + public static boolean deleteFile(String filePath) { + boolean flag = false; + File file = new File(filePath); + if (!file.exists()) { + return flag; + } + if (!file.isDirectory()) { + return flag; + } + String[] tempList = file.list(); + File temp; + for (int i = 0; i < tempList.length; i++) { + if (filePath.endsWith(File.separator)) { + temp = new File(filePath + tempList[i]); + } else { + temp = new File(filePath + File.separator + tempList[i]); + } + if (temp.isFile()) { + temp.delete(); + } + if (temp.isDirectory()) { + // 先删除文件夹里面的文件 + deleteFile(filePath + "/" + tempList[i]); + // 再删除空文件夹 + deleteFile(filePath + "/" + tempList[i]); + flag = true; + } + } + return flag; + } + + /** + * 删除zip + * + * @param filePath + * @return + */ + public static void deleteZip(String filePath) { + File file = new File(filePath); + // zip文件 判断 是否存在 + if (file.getName().endsWith(".zip")) { + if (file.delete()) { + log.info("zip文件已经删除"); + } else { + log.info("zip文件删除失败"); + } + } + } +} \ No newline at end of file diff --git a/laws-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java index 2550fd6b..fdfea6b4 100644 --- a/laws-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java @@ -19,9 +19,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -169,22 +167,22 @@ public class OSSFileServiceImpl extends ServiceImpl impl } } + // 将文件上传至腾讯云 cos - MinioUtil.upload(mf, filePath); + String upload = MinioUtil.upload(mf, "/" + uploadCospath); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //存入文件表 oSSFile.setFileName(orgName); oSSFile.setId(UuidUtils.getUUID()); - oSSFile.setUrl(filePath); oSSFile.setCreateBy(loginUser.getUsername()); oSSFile.setCreateTime(new Date()); this.save(oSSFile); // 文件路径做特殊处理 // BASE64Encoder base64Encoder = new BASE64Encoder(); // String encode = base64Encoder.encode(filePath.getBytes(StandardCharsets.UTF_8)); - String imgUrl = splitUrl + filePath; - oSSFile.setUrl(imgUrl); + String imgUrl = upload.split("/")[1]; + oSSFile.setUrl(splitUrl + imgUrl); return oSSFile; } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/AsmsController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/AsmsController.java deleted file mode 100644 index 10f52ece..00000000 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/AsmsController.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.jero.modules.docking.asms.controller; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.jero.common.api.vo.Result; -import com.jero.modules.docking.asms.util.AsmsPostUtil; -import com.jero.modules.laws.common.constant.FieldCommon; -import io.swagger.annotations.Api; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.Map; - -/** - * @Author: liao - * @Date: 2023/10/17 17:36 - * @Description: - */ -@Api(tags="国内法规标准") -@RestController -@RequestMapping("/asms") -public class AsmsController { - @Autowired - private AsmsPostUtil asmsPostUtil; - @GetMapping(value = "/getInfo") - public Result getInfo(String uri, Map map) { - List> mapList = asmsPostUtil.sendGetReq(uri, map); - return Result.OK(mapList); - } -} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java new file mode 100644 index 00000000..c44234d9 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java @@ -0,0 +1,153 @@ +package com.jero.modules.docking.asms.controller; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Result; +import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; +import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; + + + /** + * @Description: ASMS国内法规 + * @Author: jero-boot + * @Date: 2023-10-20 + * @Version: V1.0 + */ +@Api(tags="ASMS国内法规") +@RestController +@RequestMapping("/docking/asms/lawsAsmsDomestic") +@Slf4j +public class LawsAsmsDomesticController extends JeroController { + @Autowired + private ILawsAsmsDomesticService lawsAsmsDomesticService; + + /** + * 分页列表查询 + * + * @param lawsAsmsDomestic + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "ASMS国内法规-分页列表查询") + @ApiOperation(value="ASMS国内法规-分页列表查询", notes="ASMS国内法规-分页列表查询") + @GetMapping(value = "/page") + public Result> queryPageList(LawsAsmsDomestic lawsAsmsDomestic, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + IPage pageList = lawsAsmsDomesticService.queryPage(lawsAsmsDomestic, pageNo, pageSize, req); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @param lawsAsmsDomestic + * @param req + * @return + */ + @AutoLog(value = "ASMS国内法规-列表查询") + @ApiOperation(value="ASMS国内法规-列表查询", notes="ASMS国内法规-列表查询") + @GetMapping(value = "/list") + public Result> queryList(LawsAsmsDomestic lawsAsmsDomestic, HttpServletRequest req) { + List list = lawsAsmsDomesticService.queryList(lawsAsmsDomestic, req); + return Result.OK(list); + } + + /** + * 添加 + * + * @param lawsAsmsDomestic + * @return + */ + @AutoLog(value = "ASMS国内法规-添加") + @ApiOperation(value="ASMS国内法规-添加", notes="ASMS国内法规-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody LawsAsmsDomestic lawsAsmsDomestic) { + lawsAsmsDomesticService.add(lawsAsmsDomestic); + return Result.OK("操作成功!"); + } + + /** + * 编辑 + * + * @param lawsAsmsDomestic + * @return + */ + @AutoLog(value = "ASMS国内法规-编辑") + @ApiOperation(value="ASMS国内法规-编辑", notes="ASMS国内法规-编辑") + @PostMapping(value = "/edit") + public Result edit(@Validated @RequestBody LawsAsmsDomestic lawsAsmsDomestic) { + lawsAsmsDomesticService.editById(lawsAsmsDomestic); + return Result.OK("操作成功!"); + } + + /** + * 通过id删除 + * + * @param map + * @return + */ + @AutoLog(value = "ASMS国内法规-通过id删除") + @ApiOperation(value="ASMS国内法规-通过id删除", notes="ASMS国内法规-通过id删除") + @PostMapping(value = "/delete") + public Result delete(@RequestBody Map map) { + if(!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))){ + return Result.error("请选择数据!"); + } + lawsAsmsDomesticService.deleteById(map.get("id")); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param map + * @return + */ + @AutoLog(value = "ASMS国内法规-批量删除") + @ApiOperation(value="ASMS国内法规-批量删除", notes="ASMS国内法规-批量删除") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestBody Map map) { + if(!map.containsKey("ids") || StringUtils.isEmpty(map.get("ids"))){ + return Result.error("请选择数据!"); + } + this.lawsAsmsDomesticService.deleteByIds(Arrays.asList(map.get("ids").split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "ASMS国内法规-通过id查询") + @ApiOperation(value="ASMS国内法规-通过id查询", notes="ASMS国内法规-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id") String id) { + LawsAsmsDomestic lawsAsmsDomestic = lawsAsmsDomesticService.queryById(id); + if(lawsAsmsDomestic==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(lawsAsmsDomestic); + } + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/controller/LawsAsmsOpenApiController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsOpenApiController.java similarity index 95% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/controller/LawsAsmsOpenApiController.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsOpenApiController.java index bd118ca8..93190ae7 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/controller/LawsAsmsOpenApiController.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsOpenApiController.java @@ -1,16 +1,14 @@ -package com.jero.modules.docking.asms.api.controller; +package com.jero.modules.docking.asms.controller; import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; import com.jero.common.api.vo.Result; -import com.jero.modules.docking.asms.api.entity.LawsAsmsOpenApi; -import com.jero.modules.docking.asms.api.service.ILawsAsmsOpenApiService; +import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi; +import com.jero.modules.docking.asms.service.ILawsAsmsOpenApiService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.modules.docking.asms.util.AsmsPostUtil; import lombok.extern.slf4j.Slf4j; @@ -18,7 +16,6 @@ import com.jero.common.system.base.controller.JeroController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.jero.common.aspect.annotation.AutoLog; diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsDomestic.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsDomestic.java new file mode 100644 index 00000000..8ccf50cd --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsDomestic.java @@ -0,0 +1,143 @@ +package com.jero.modules.docking.asms.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: ASMS国内法规 + * @Author: jero-boot + * @Date: 2023-10-20 + * @Version: V1.0 + */ +@Data +@TableName("laws_asms_domestic") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="laws_asms_domestic对象", description="ASMS国内法规") +public class LawsAsmsDomestic implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键ID*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private java.lang.String id; + /**标准法规编号/标准号*/ + @Excel(name = "标准法规编号/标准号", width = 15) + @ApiModelProperty(value = "标准法规编号/标准号") + private java.lang.String code; + /**标准法规名称/标准名称*/ + @Excel(name = "标准法规名称/标准名称", width = 15) + @ApiModelProperty(value = "标准法规名称/标准名称") + private java.lang.String name; + /**法规英文名称*/ + @Excel(name = "法规英文名称", width = 15) + @ApiModelProperty(value = "法规英文名称") + private java.lang.String englishName; + /**标准法规类别/标准类别*/ + @Excel(name = "标准法规类别/标准类别", width = 15) + @ApiModelProperty(value = "标准法规类别/标准类别") + private java.lang.String type; + /**适用认证*/ + @Excel(name = "适用认证", width = 15) + @ApiModelProperty(value = "适用认证") + private java.lang.String applicableCertificationListString; + /**适用车型拼接名称*/ + @Excel(name = "适用车型拼接名称", width = 15) + @ApiModelProperty(value = "适用车型拼接名称") + private java.lang.String applicableModelsListString; + /**采标程度*/ + @Excel(name = "采标程度", width = 15) + @ApiModelProperty(value = "采标程度") + private java.lang.String degreeAdoption; + /**起草人*/ + @Excel(name = "起草人", width = 15) + @ApiModelProperty(value = "起草人") + private java.lang.String draftingPeople; + /**起草单位*/ + @Excel(name = "起草单位", width = 15) + @ApiModelProperty(value = "起草单位") + private java.lang.String draftingUnit; + /**标准领域名称*/ + @Excel(name = "标准领域名称", width = 15) + @ApiModelProperty(value = "标准领域名称") + private java.lang.String focalPointName; + /**实施日期*/ + @Excel(name = "实施日期", width = 15) + @ApiModelProperty(value = "实施日期") + private java.lang.String implementationDate; + /**采用国际标准号*/ + @Excel(name = "采用国际标准号", width = 15) + @ApiModelProperty(value = "采用国际标准号") + private java.lang.String internationalStandard; + /**新车实施日期*/ + @Excel(name = "新车实施日期", width = 15) + @ApiModelProperty(value = "新车实施日期") + private java.lang.String newCarImplementationDate; + /**新注册车实施日期*/ + @Excel(name = "新注册车实施日期", width = 15) + @ApiModelProperty(value = "新注册车实施日期") + private java.lang.String newRegisterCarImplementationDate; + /**动力类型*/ + @Excel(name = "动力类型", width = 15) + @ApiModelProperty(value = "动力类型") + private java.lang.String powerTypeListString; + /**在产车实施日期*/ + @Excel(name = "在产车实施日期", width = 15) + @ApiModelProperty(value = "在产车实施日期") + private java.lang.String productionCarImplementationDate; + /**提出部门*/ + @Excel(name = "提出部门", width = 15) + @ApiModelProperty(value = "提出部门") + private java.lang.String proposingDepartment; + /**发布日期*/ + @Excel(name = "发布日期", width = 15) + @ApiModelProperty(value = "发布日期") + private java.lang.String publishDate; + /**代替标准号*/ + @Excel(name = "代替标准号", width = 15) + @ApiModelProperty(value = "代替标准号") + private java.lang.String replaceCode; + /**适用范围*/ + @Excel(name = "适用范围", width = 15) + @ApiModelProperty(value = "适用范围") + private java.lang.String scopeApplication; + /**标准性质*/ + @Excel(name = "标准性质", width = 15) + @ApiModelProperty(value = "标准性质") + private java.lang.String standardNature; + /**标准状态*/ + @Excel(name = "标准状态", width = 15) + @ApiModelProperty(value = "标准状态") + private java.lang.String standardStatus; + /**分标委*/ + @Excel(name = "分标委", width = 15) + @ApiModelProperty(value = "分标委") + private java.lang.String subcommittee; + /**创建时间*/ + @ApiModelProperty(value = "创建时间") + private java.lang.String createTimeString; + /**更新时间*/ + @ApiModelProperty(value = "更新时间") + private java.lang.String updateTimeString; + /**同步标识*/ + @Excel(name = "同步标识", width = 15) + @ApiModelProperty(value = "同步标识") + @Dict(dicCode = "sync_flag") + private java.lang.String syncFlag; +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/entity/LawsAsmsOpenApi.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsOpenApi.java similarity index 98% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/entity/LawsAsmsOpenApi.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsOpenApi.java index a93b5c06..a9c37f54 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/entity/LawsAsmsOpenApi.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/entity/LawsAsmsOpenApi.java @@ -1,4 +1,4 @@ -package com.jero.modules.docking.asms.api.entity; +package com.jero.modules.docking.asms.entity; import java.io.Serializable; import java.io.UnsupportedEncodingException; diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsDomesticMapper.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsDomesticMapper.java new file mode 100644 index 00000000..d3c880ea --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsDomesticMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.docking.asms.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ASMS国内法规 + * @Author: jero-boot + * @Date: 2023-10-20 + * @Version: V1.0 + */ +public interface LawsAsmsDomesticMapper extends BaseMapper { + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/LawsAsmsOpenApiMapper.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsOpenApiMapper.java similarity index 83% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/LawsAsmsOpenApiMapper.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsOpenApiMapper.java index 44c8bd94..e4b8ea69 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/LawsAsmsOpenApiMapper.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/LawsAsmsOpenApiMapper.java @@ -1,7 +1,7 @@ -package com.jero.modules.docking.asms.api.mapper; +package com.jero.modules.docking.asms.mapper; import org.apache.ibatis.annotations.Mapper; -import com.jero.modules.docking.asms.api.entity.LawsAsmsOpenApi; +import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsDomesticMapper.xml b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsDomesticMapper.xml new file mode 100644 index 00000000..2a1f457d --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsDomesticMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/xml/LawsAsmsOpenApiMapper.xml b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml similarity index 86% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/xml/LawsAsmsOpenApiMapper.xml rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml index 95a5c436..2af1a939 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/mapper/xml/LawsAsmsOpenApiMapper.xml +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml @@ -1,7 +1,7 @@ - - + + diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/IAsmsOpenApi.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/IAsmsOpenApi.java deleted file mode 100644 index e2c22c34..00000000 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/IAsmsOpenApi.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.jero.modules.docking.asms.service; - -/** - * @Author: liao - * @Date: 2023/10/17 14:51 - * @Description: 汽车标准数字化化平台ASMS - */ -public interface IAsmsOpenApi { -} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsDomesticService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsDomesticService.java new file mode 100644 index 00000000..a39c5442 --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsDomesticService.java @@ -0,0 +1,76 @@ +package com.jero.modules.docking.asms.service; + +import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; +import com.baomidou.mybatisplus.extension.service.IService; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.List; + +/** + * @Description: ASMS国内法规 + * @Author: jero-boot + * @Date: 2023-10-20 + * @Version: V1.0 + */ +public interface ILawsAsmsDomesticService extends IService { + + /** + * 分页查询 + * + * @param lawsAsmsDomestic + * @param pageNo + * @param pageSize + * @param req + * @return + */ + IPage queryPage(LawsAsmsDomestic lawsAsmsDomestic, Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 列表查询 + * + * @param lawsAsmsDomestic + * @param req + * @return + */ + List queryList(LawsAsmsDomestic lawsAsmsDomestic, HttpServletRequest req); + + /** + * 保存 + * + * @param lawsAsmsDomestic + * @return + */ + void add(LawsAsmsDomestic lawsAsmsDomestic); + + /** + * 更新 + * + * @param lawsAsmsDomestic + * @return + */ + void editById(LawsAsmsDomestic lawsAsmsDomestic); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + LawsAsmsDomestic queryById(String id); +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/ILawsAsmsOpenApiService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsOpenApiService.java similarity index 93% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/ILawsAsmsOpenApiService.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsOpenApiService.java index 78ae49bb..d40898c8 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/ILawsAsmsOpenApiService.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/ILawsAsmsOpenApiService.java @@ -1,6 +1,6 @@ -package com.jero.modules.docking.asms.api.service; +package com.jero.modules.docking.asms.service; -import com.jero.modules.docking.asms.api.entity.LawsAsmsOpenApi; +import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletRequest; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/AsmsOpenApiImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/AsmsOpenApiImpl.java deleted file mode 100644 index 34f34f5e..00000000 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/AsmsOpenApiImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.jero.modules.docking.asms.service.impl; - -import com.jero.modules.docking.asms.service.IAsmsOpenApi; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @Author: liao - * @Date: 2023/10/17 14:52 - * @Description: 汽车标准数字化化平台ASMS - */ -@Service -@Slf4j -public class AsmsOpenApiImpl implements IAsmsOpenApi { - -} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsDomesticServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsDomesticServiceImpl.java new file mode 100644 index 00000000..50e57a1b --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsDomesticServiceImpl.java @@ -0,0 +1,113 @@ +package com.jero.modules.docking.asms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; +import com.jero.modules.docking.asms.mapper.LawsAsmsDomesticMapper; +import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.jero.common.exception.JeroBootException; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.system.query.QueryGenerator; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + + +/** + * @Description: ASMS国内法规 + * @Author: jero-boot + * @Date: 2023-10-20 + * @Version: V1.0 + */ +@Service +@Transactional(rollbackFor = JeroBootException.class) +public class LawsAsmsDomesticServiceImpl extends ServiceImpl implements ILawsAsmsDomesticService { + + + /** + * 分页查询 + * + * @param lawsAsmsDomestic + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @Override + public IPage queryPage(LawsAsmsDomestic lawsAsmsDomestic, Integer pageNo, Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(lawsAsmsDomestic, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + return page(page, queryWrapper); + } + + /** + * 列表查询 + * + * @param lawsAsmsDomestic + * @param req + * @return + */ + @Override + public List queryList(LawsAsmsDomestic lawsAsmsDomestic, HttpServletRequest req) { + return list(QueryGenerator.initQueryWrapper(lawsAsmsDomestic, req.getParameterMap())); + } + + /** + * 保存 + * + * @param lawsAsmsDomestic + * @return + */ + @Override + public void add(LawsAsmsDomestic lawsAsmsDomestic) { + save(lawsAsmsDomestic); + } + + /** + * 更新 + * + * @param lawsAsmsDomestic + * @return + */ + @Override + public void editById(LawsAsmsDomestic lawsAsmsDomestic) { + saveOrUpdate(lawsAsmsDomestic); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public LawsAsmsDomestic queryById(String id) { + return getById(id); + } +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/impl/LawsAsmsOpenApiServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java similarity index 78% rename from laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/impl/LawsAsmsOpenApiServiceImpl.java rename to laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java index 75735135..5f839a81 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/api/service/impl/LawsAsmsOpenApiServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java @@ -1,13 +1,14 @@ -package com.jero.modules.docking.asms.api.service.impl; +package com.jero.modules.docking.asms.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.jero.common.api.vo.Result; -import com.jero.modules.docking.asms.api.entity.LawsAsmsOpenApi; -import com.jero.modules.docking.asms.api.mapper.LawsAsmsOpenApiMapper; -import com.jero.modules.docking.asms.api.service.ILawsAsmsOpenApiService; +import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; +import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi; +import com.jero.modules.docking.asms.mapper.LawsAsmsOpenApiMapper; +import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService; +import com.jero.modules.docking.asms.service.ILawsAsmsOpenApiService; import com.jero.modules.docking.asms.util.AsmsPostUtil; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.service.ISysDictItemService; @@ -20,7 +21,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jero.common.exception.JeroBootException; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; @@ -49,6 +49,8 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), map); if ("1".equals(lawsAsmsOpenApi.getApiType()) - && StringUtils.isNotBlank(lawsAsmsOpenApi.getDictId()) && !Objects.isNull(mapList)) { + && StringUtils.isNotBlank(lawsAsmsOpenApi.getDictId()) && CollectionUtils.isNotEmpty(mapList)) { // 如果是下拉字典(普通)、字典id不为空、返回的数据不为空,则进行数据字典同步操作 // 查询该字典全部数据项 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -225,8 +227,38 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl lawsAsmsDomesticList = new ArrayList(); + mapList.forEach(eMap -> { + LawsAsmsDomestic lawsAsmsDomestic = JSONObject.parseObject(JSONObject.toJSONString(eMap), LawsAsmsDomestic.class); + lawsAsmsDomestic.setId(lawsAsmsDomestic.getCode()); + lawsAsmsDomestic.setCreateTimeString(eMap.get("createTime")); + lawsAsmsDomestic.setUpdateTimeString(eMap.get("updateTime")); + lawsAsmsDomestic.setSyncFlag("A"); + lawsAsmsDomesticList.add(lawsAsmsDomestic); + }); + lawsAsmsDomesticService.saveOrUpdateBatch(lawsAsmsDomesticList); + } else { + // 为空则全部置0 + pageNo = 1; + // 已同步 + lawsAsmsOpenApi.setStatus("1"); + } + map.put("pageNo", pageNo.toString()); + String jsonString = JSON.toJSONString(map); + lawsAsmsOpenApi.setQueryParamJson(jsonString); } + log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), mapList.size()); }); // 同步接口的状态 updateBatchById(lawsAsmsOpenApiList); diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AsmsPostUtil.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AsmsPostUtil.java index 74fa4127..146712a1 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AsmsPostUtil.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AsmsPostUtil.java @@ -3,6 +3,8 @@ package com.jero.modules.docking.asms.util; import com.jero.common.api.vo.Result; import com.jero.common.exception.JeroBootException; import com.jero.common.util.RedisUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -13,10 +15,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * @Author: liao @@ -24,6 +23,7 @@ import java.util.Objects; * @Description: 远程调用 */ @Component +@Slf4j public class AsmsPostUtil { @Autowired @@ -62,6 +62,7 @@ public class AsmsPostUtil { token = resultMap.get("token"); // 将新获取的token存入redis redisUtil.set(ASMS_SYSTEM_AUTH_TOKEN, token, expire * 60 * 60); + log.info("new token is creating: {}", token); } return token; } @@ -75,9 +76,10 @@ public class AsmsPostUtil { **/ public List> sendGetReq(String uri, Map map) { // 准备请求头 + String token = getToken(); HttpHeaders headers = new HttpHeaders(); headers.set("Content-Type", "application/x-www-form-urlencoded"); - headers.set("X-Access-Token", getToken()); + headers.set("X-Access-Token", token); if (StringUtils.isBlank(uri)) { throw new JeroBootException("url不能为空"); @@ -91,19 +93,35 @@ public class AsmsPostUtil { url += "?" + s.substring(1); } - ResponseEntity responseEntity = restTemplate.exchange(url.toString(), - HttpMethod.GET, new HttpEntity<>(null, headers), Result.class); + ResponseEntity responseEntity; + try { + log.info("request url : {}", url); + responseEntity = restTemplate.exchange(url.toString(), + HttpMethod.GET, new HttpEntity<>(null, headers), Result.class); + } catch (Exception e) { + log.info("old token is deleting: {}", token); + redisUtil.del(ASMS_SYSTEM_AUTH_TOKEN); + e.printStackTrace(); + throw new JeroBootException("操作失败,请稍后重试"); + } if (!responseEntity.getBody().isSuccess()) { throw new JeroBootException("汽车标准数字化平台:请求发送失败"); } Map resultMap = (Map) responseEntity.getBody().getResult(); + if (Objects.isNull(resultMap)) { + throw new JeroBootException("返回数据为空"); + } List> mapList = (List>) resultMap.get("records"); - mapList.forEach(eMap -> { - StringBuilder sb = new StringBuilder(); - eMap.forEach((k, v) -> sb.append(k + ":" + v + ",")); - System.out.println(sb); - }); + if (CollectionUtils.isEmpty(mapList)) { + mapList = new ArrayList<>(); + Map result = (Map) responseEntity.getBody().getResult(); + if (result.containsKey("records")) { + return new ArrayList<>(); + } + mapList.add(result); + } + log.info("返回{}条数据", mapList.size()); return mapList; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java index 5751fe6f..9add1b25 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java @@ -89,6 +89,19 @@ public class WorkCenterController { return Result.OK(sentList); } + @ApiOperation(value = "查询全部流程") + @GetMapping("/getAllList") + public Result getAllList(ProcessAll processAll, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = getProcessAllQueryWrapper(processAll); + + Page page = new Page<>(pageNo, pageSize); + IPage sentList = processAllService.getAllList(page, queryWrapper); + return Result.OK(sentList); + } + @NotNull private QueryWrapper getProcessAllQueryWrapper(ProcessAll processAll) { String prcName = processAll.getPrcName(); @@ -105,7 +118,7 @@ public class WorkCenterController { return queryWrapper; } - @ApiOperation(value = "撤销流程") + @ApiOperation(value = "强制撤销") @PostMapping("/delete") public Result delete(@RequestBody Map map) { String processInstanceId = map.get("processInstanceId"); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java index 928af1fc..ccc9e67c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java @@ -1,5 +1,6 @@ package com.jero.modules.activiti.enums; +import com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl; import lombok.AllArgsConstructor; import lombok.Getter; @@ -13,11 +14,13 @@ public enum ProcessTypeEnum { /** * A */ - A("企标制修订流程", 1,"Process_17bj7d9"); + A("企标制修订流程", 1, "com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl"), + B("企标立项变更流程",2, "com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl"), + ; private String name; private Integer value; - private String key; + private String implClass; public static String getNameByValue(Integer value) { for (ProcessTypeEnum enumObject : values()) { @@ -28,9 +31,18 @@ public enum ProcessTypeEnum { return null; } - public static Integer getValueByKey(String key) { + public static String getClassByValue(Integer value) { for (ProcessTypeEnum enumObject : values()) { - if (enumObject.getKey().equals(key)) { + if (enumObject.getValue().equals(value)) { + return enumObject.getImplClass(); + } + } + return null; + } + + public static Integer getValueByName(String name) { + for (ProcessTypeEnum enumObject : values()) { + if (enumObject.getName().equals(name)) { return enumObject.getValue(); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java index aad51627..0204a165 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/StartListener.java @@ -1,24 +1,16 @@ package com.jero.modules.activiti.listener; -import java.util.List; - import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.enums.ProcessStatusEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.util.SpringContextUtil; -import org.activiti.bpmn.model.ActivitiListener; -import org.activiti.bpmn.model.FlowElement; import org.activiti.engine.*; import org.activiti.engine.delegate.DelegateExecution; -import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.ExecutionListener; -import org.activiti.engine.delegate.TaskListener; import org.activiti.engine.repository.ProcessDefinition; -import org.activiti.engine.runtime.NativeProcessInstanceQuery; -import org.activiti.engine.runtime.ProcessInstance; /** * @author liJiaRao @@ -45,7 +37,7 @@ public class StartListener implements ExecutionListener { //新增流程总表信息(剩余的内容在启动流程时填充) ProcessAll processAll = new ProcessAll(); processAll.setProcessInstanceId(processInstanceId); - processAll.setPrcType(ProcessTypeEnum.getValueByKey(key)); + processAll.setPrcType(ProcessTypeEnum.getValueByName(name)); processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue()); processAllService.save(processAll); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java index 0c0f713b..8b59f312 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java @@ -19,4 +19,6 @@ public interface ProcessAllMapper extends BaseMapper { IPage getCompletedList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); IPage getSentList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + IPage getAllList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml index 10965435..cf491696 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml @@ -17,7 +17,7 @@ ${ew.customSqlSegment} ) p left join process_approval_record par on p.process_instance_id = par.process_instance_id - WHERE par.finish_flag = 0 + WHERE par.finish_flag = 0 or par.id is null group by p.process_instance_id @@ -30,7 +30,20 @@ ${ew.customSqlSegment} ) p left join process_approval_record par on p.process_instance_id = par.process_instance_id - WHERE par.finish_flag = 0 + WHERE par.finish_flag = 0 or par.id is null + group by p.process_instance_id + + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/controller/ProcessCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/controller/ProcessCenterController.java index 39ac566e..f4227263 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/controller/ProcessCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/controller/ProcessCenterController.java @@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.common.controller; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; import com.jero.modules.activiti.process.common.entity.CenterQueryVO; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; import com.jero.modules.activiti.process.common.service.ProcessDraftService; @@ -97,6 +98,7 @@ public class ProcessCenterController { @AutoLog(value = "流程中心-办理") @ApiOperation(value="流程中心-办理", notes="流程中心-办理") @GetMapping("/handle") + @Translation public Result handle(@RequestParam("processInstanceId") String processInstanceId) { return Result.OK(actFlowCommonService.handleTask(processInstanceId)); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java new file mode 100644 index 00000000..90c32f1f --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java @@ -0,0 +1,79 @@ +package com.jero.modules.activiti.process.esAnnualInit.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; +import com.jero.modules.activiti.process.esAnnualInit.service.ProcessEsAnnualInitService; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.enmus.ExcelType; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Map; + +import static com.jero.common.system.base.controller.JeroController.*; + +/** + * @author: Mzaxd + * @Date: 2023/10/18 10:44 + */ +@Slf4j +@RestController +@Api(tags = "企标年度制修订标准化发起流程") +@RequestMapping("/process/es/annualInit") +public class ESAnnualInitController { + + @Resource + private ProcessEsAnnualInitService annualInitService; + + /** + * 导入模板下载 + */ + @GetMapping("/templateDownload") + @ApiOperation(value = "企标年度制修订标准化发起流程-模板下载", notes = "企标年度制修订标准化发起流程-模板下载", + produces = "application/octet-stream") + @AutoLog(value = "企标年度制修订标准化发起流程-模板下载") + public ModelAndView templateDownload() { + // AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + String title = "标准化发起导入模板"; + mv.addObject(FILE_NAME, title); + mv.addObject(CLASS, ProcessEsAnnualInit.class); + ExportParams exportParams = new ExportParams(title, title); + // 导出xlsx + exportParams.setType(ExcelType.XSSF); + mv.addObject(PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, new ArrayList()); + return mv; + } + + /** + * 通过excel导入数据 + * + * @return + */ + @PostMapping("/importExcel") + @ApiOperation(value = "企标年度制修订标准化发起流程-导入", notes = "企标年度制修订标准化发起流程-导入") + @AutoLog(value = "企标年度制修订标准化发起流程-导入") + @Translation + public Result importExcel(@ApiParam(value = "要上传的文件", required = true) @RequestParam("file") MultipartFile file) { + Map resultMap = annualInitService.importData(file); + Object flag = resultMap.get("flag"); + if (flag == YesOrNoEnum.YES.getValue()) { + return Result.OK(resultMap.get("dataList")); + } else { + return Result.error("导入失败", resultMap.get("msg")); + } + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java new file mode 100644 index 00000000..0d386f79 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java @@ -0,0 +1,319 @@ +package com.jero.modules.activiti.process.esAnnualInit.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelVerify; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; + +/** + * 企标-年度制修订计划-标准化发起 + * @TableName process_es_annual_init + */ +@TableName(value ="process_es_annual_init") +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="process_es_annual_init", description="企标-年度制修订计划-标准化发起") +public class ProcessEsAnnualInit implements Serializable { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private String id; + + /** + * 企标计划Id + */ + @ApiModelProperty(value = "企标计划Id") + private String espId; + + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 所属部门 + */ + @ApiModelProperty(value = "所属部门") + private String orgCode; + + /** + * 0表示未删除,1表示删除 + */ + @ApiModelProperty(value = "0表示未删除,1表示删除") + private Integer delFlag; + + /** + * 流程实例Id + */ + @ApiModelProperty(value = "流程实例Id") + private String processInstanceId; + + /** + * 申请类别 + */ + @Dict(dicCode = "esp_application_category") + @ApiModelProperty(value = "申请类别") + private String applicationCategory; + + /** + * 制修订类型 + */ + @Excel(name = "制修订类型", width = 15, orderNum = "1") + @Dict(dicCode = "esp_revision_type") + @ApiModelProperty(value = "制修订类型") + private String projectType; + + /** + * 原企标编号 + */ + @Excel(name = "原企标编号", width = 15, orderNum = "2") + @ApiModelProperty(value = "原企标编号") + private String originEnStandardNo; + + /** + * 新企标编号 + */ + @ApiModelProperty(value = "新企标编号") + private String newEnStandardNo; + + /** + * 原企标名称 + */ + @Excel(name = "原企标名称", width = 15, orderNum = "4") + @ApiModelProperty(value = "原企标名称") + private String originEnStandardName; + + /** + * 新企标名称 + */ + @Excel(name = "新企标名称", width = 15, orderNum = "5") + @ApiModelProperty(value = "新企标名称") + private String newEnStandardName; + + /** + * 企标英文名称 + */ + @ApiModelProperty(value = "企标英文名称") + private String enStandardEnglishName; + + /** + * 企标体系 + */ + @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") + @ApiModelProperty(value = "企标体系") + private String enStandardSystem; + + /** + * 企业标准代号 + */ + @Excel(name = "企业标准代号", width = 15, orderNum = "7") + @ApiModelProperty(value = "企业标准代号") + private String enStandardCode; + + /** + * 企业名称代号 + */ + @ApiModelProperty(value = "企业名称代号") + private String enNameCode; + + /** + * 标准类别代号 + */ + @ApiModelProperty(value = "标准类别代号") + private String standardCategoryCode; + + /** + * 年代号 + */ + @ApiModelProperty(value = "年代号") + private String decadeCode; + + /** + * 标准类型 + */ + @ApiModelProperty(value = "标准类型") + private String standardType; + + /** + * 企标等级分类 + */ + @ApiModelProperty(value = "企标等级分类") + private String enStandardClassification; + + /** + * 草稿计划完成日期 + */ + @Excel(name = "草稿计划完成日期", width = 20, orderNum = "13") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "草稿计划完成日期") + private Date draftPlannedCompleteDate; + + /** + * 征求意见稿计划完成日期 + */ + @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "14") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿计划完成日期") + private Date solicitationDraftPlanCompleteDate; + + /** + * 计划报批日期 + */ + @Excel(name = "计划报批日期", width = 15, orderNum = "15") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "计划报批日期") + private Date planApprovalDate; + + /** + * 项目状态 + */ + @ApiModelProperty(value = "项目状态") + private String projectStatus; + + /** + * 编制说明 + */ + @ApiModelProperty(value = "编制说明") + private String compilationDescription; + + /** + * 零部件名称 + */ + @ApiModelProperty(value = "零部件名称") + private String componentName; + + /** + * 主起草人 + */ + @Excel(name = "主起草人", width = 15, orderNum = "9") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @NotNull + @ApiModelProperty(value = "主起草人") + private String mainDraftingUser; + + /** + * 主起草单位 + */ + @Excel(name = "主起草单位", width = 15, orderNum = "10") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @NotNull + @ApiModelProperty(value = "主起草单位") + private String mainDraftingUnit; + + /** + * 主起草单位责任人 + */ + @Excel(name = "主起草单位责任人", width = 20, orderNum = "11") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "主起草单位责任人") + private String mainDraftingUnitResponsiblePerson; + + @Excel(name = "标准推进人", width = 15, orderNum = "12") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "标准推进人") + private String standardPromoter; + + /** + * 征求意见稿完成日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿完成日期") + private Date solicitationDraftCompletionDate; + + /** + * 变更状态 + */ + @Dict(dicCode = "esp_change_status") + @ApiModelProperty(value = "变更状态") + private String changeStatus; + + /** + * 上传附件 + */ + @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") + @ApiModelProperty(value = "上传附件") + private String uploadAttachment; + + /** + * 变更原因 + */ + @ApiModelProperty(value = "变更原因") + private String changeReason; + + /** + * 授权部门 + */ + @Excel(name = "授权部门", width = 15, orderNum = "6") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "授权部门") + private String authDept; + + /** + * 配合单位 + */ + @Excel(name = "配合单位", width = 15, orderNum = "8") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "配合单位") + private String cooperationUnit; + + /** + * 联络人 + */ + @Excel(name = "联络人", width = 15, orderNum = "17") + @ApiModelProperty(value = "联络人") + private String contactUser; + + /** + * 审批人 + */ + @ApiModelProperty(value = "审批人") + private String approvalUser; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @TableField(exist = false) + private String sort; +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/ProcessEsAnnualInitMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/ProcessEsAnnualInitMapper.java new file mode 100644 index 00000000..0a6895b9 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/ProcessEsAnnualInitMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.activiti.process.esAnnualInit.mapper; + +import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author ThinkBook +* @description 针对表【process_es_annual_init(企标立项变更流程)】的数据库操作Mapper +* @createDate 2023-10-18 10:01:44 +* @Entity com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit +*/ +public interface ProcessEsAnnualInitMapper extends BaseMapper { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/xml/ProcessEsAnnualInitMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/xml/ProcessEsAnnualInitMapper.xml new file mode 100644 index 00000000..6face39e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/mapper/xml/ProcessEsAnnualInitMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,esp_id,create_by, + create_time,update_by,update_time, + org_code,del_flag,process_instance_id, + application_category,project_type,origin_en_standard_no, + new_en_standard_no,origin_en_standard_name,new_en_standard_name, + en_standard_english_name,en_standard_system,en_standard_code, + en_name_code,standard_category_code,decade_code, + standard_type,en_standard_classification,draft_planned_complete_date, + solicitation_draft_plan_complete_date,plan_approval_date,project_status, + compilation_description,component_name,main_drafting_user, + main_drafting_unit,main_drafting_unit_responsible_person,standard_promoter, + solicitation_draft_completion_date,change_status,remarks, + upload_attachment,change_reason,auth_dept, + cooperation_unit,contact_user,approval_user + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/ProcessEsAnnualInitService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/ProcessEsAnnualInitService.java new file mode 100644 index 00000000..f1fd8cde --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/ProcessEsAnnualInitService.java @@ -0,0 +1,23 @@ +package com.jero.modules.activiti.process.esAnnualInit.service; + +import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** +* @author ThinkBook +* @description 针对表【process_es_annual_init(企标立项变更流程)】的数据库操作Service +* @createDate 2023-10-18 10:01:44 +*/ +public interface ProcessEsAnnualInitService extends IService { + + /** + * 导入数据,返回数据列表 + * @return + */ + Map importData(MultipartFile file); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java new file mode 100644 index 00000000..821a01c2 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java @@ -0,0 +1,297 @@ +package com.jero.modules.activiti.process.esAnnualInit.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.api.CommonAPI; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.system.vo.SysDictItemCore; +import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; +import com.jero.modules.activiti.process.esAnnualInit.service.ProcessEsAnnualInitService; +import com.jero.modules.activiti.process.esAnnualInit.mapper.ProcessEsAnnualInitMapper; +import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType; +import com.jero.modules.activiti.util.ExcelUtils; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; +import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; +import lombok.extern.slf4j.Slf4j; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author ThinkBook + * @description 针对表【process_es_annual_init(企标立项变更流程)】的数据库操作Service实现 + * @createDate 2023-10-18 10:01:44 + */ +@Slf4j +@Service +public class ProcessEsAnnualInitServiceImpl extends ServiceImpl + implements ProcessEsAnnualInitService { + + @Resource + private CommonAPI commonAPI; + + @Resource + private ExcelUtils excelUtils; + + @Resource + private ILawsEnterpriseStandardService enterpriseStandardService; + + @Override + public Map importData(MultipartFile file) { + List listDict = commonAPI.getDictItemAll(); + Map resultMap = new HashMap<>(); + List errorMsgs = new ArrayList<>(); + + // 获取Excel的header + List headers; + try { + headers = ExcelUtils.getHeaderFromExcel(file.getInputStream()); + } catch (Exception e) { + errorMsgs.add("上传模板错误,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + log.error(e.getMessage(), e); + return resultMap; // 返回错误信息 + } + + // 使用静态方法验证header + boolean isMatched = headers.equals(ExcelUtils.getSortedHeadersFromClass(ProcessEsAnnualInit.class)); + if (!isMatched) { + errorMsgs.add("上传模板错误,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + return resultMap; // 返回错误信息 + } + + ImportParams params = new ImportParams(); + params.setTitleRows(1); + params.setHeadRows(1); + params.setNeedSave(true); + + try { + List list = ExcelImportUtil.importExcel(file.getInputStream(), ProcessEsAnnualInit.class, params); + if (list.isEmpty()) { + errorMsgs.add("文件暂无数据,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + return resultMap; // 返回错误信息 + } + // 批量检查数据是否有效 + errorMsgs = this.validationList(list, listDict); + if (errorMsgs.size() > 0) { + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + } else { + resultMap.put("flag", YesOrNoEnum.YES.getValue()); + // 转换为字典值 + this.transToDictValue(list, listDict); + // 清洗 + this.cleanData(list); + resultMap.put("dataList", list); + } + } catch (Exception e) { + errorMsgs.add("文件导入异常:" + e.getMessage()); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultMap; + } + + private void cleanData(List list) { + list.forEach(item-> { + // 如果是制定则去除掉所有的原企标名称 原企标编号 + if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) { + item.setOriginEnStandardName(null); + item.setOriginEnStandardNo(null); + } + // 设置变更状态 制定是新增 修订是变更 + if (item.getProjectType().equals("制定")) { + item.setChangeStatus("新增"); + } else { + item.setChangeStatus("变更"); + } + }); + } + + private void transToDictValue(List list, List listDict) { + list.forEach(item -> { + item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict)); + item.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict)); + item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict)); + item.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict)); + item.setMainDraftingUser(excelUtils.translateDictValue("username", "id", "sys_user", item.getMainDraftingUser(), listDict)); + item.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict)); + item.setMainDraftingUnitResponsiblePerson(excelUtils.translateDictValue("username", "id", "sys_user", item.getMainDraftingUnitResponsiblePerson(), listDict)); + item.setStandardPromoter(excelUtils.translateDictValue("username", "id", "sys_user", item.getStandardPromoter(), listDict)); + item.setContactUser(excelUtils.translateDictValue("username", "id", "sys_user", item.getContactUser(), listDict)); + }); + } + + private List validationList(List list, List listDict) { + List esList = enterpriseStandardService.list(); + List errorMsgs = new ArrayList<>(); + + int i = 3; + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + ProcessEsAnnualInit plan = iterator.next(); + if (ExcelUtils.isEmptyRow(plan)) { + iterator.remove(); + continue; + } + plan.setSort(String.valueOf(i++)); + String enStandardCode = plan.getProjectType(); + String authDept = plan.getProjectType(); + String cooperationUnit = plan.getCooperationUnit(); + String mainDraftingUnit = plan.getMainDraftingUnit(); + String mainDraftingUser = plan.getProjectType(); + String mainDraftingUnitResponsiblePerson = plan.getMainDraftingUnitResponsiblePerson(); + String standardPromoter = plan.getStandardPromoter(); + String contactUser = plan.getContactUser(); + + StringBuilder errMsgHeader = new StringBuilder(); + StringBuilder errMsg = new StringBuilder(); + errMsgHeader.append("第").append(plan.getSort()).append("行"); + + // 检查制修订类型 编号 名称 + errMsg.append(validProjectType(plan, listDict, esList)); + // 检查所有数据字典校验的字段 + errMsg.append(validAuthDept(authDept, listDict)); + errMsg.append(validStandardCode(enStandardCode, listDict)); + errMsg.append(validCooperateUnit(cooperationUnit, listDict)); + errMsg.append(validMainDraftingUser(mainDraftingUser, listDict)); + errMsg.append(validMainDraftingUnit(mainDraftingUnit, listDict)); + errMsg.append(validMainDraftingUnitResponsiblePerson(mainDraftingUnitResponsiblePerson, listDict)); + errMsg.append(validStandardPromoter(standardPromoter, listDict)); + errMsg.append(validContactUser(contactUser, listDict)); + // 如果数据有问题,则将提示信息添加到 errorMsgs 中 + if (errMsg.length() > 0) { + errorMsgs.add(errMsgHeader.append(errMsg).toString()); + } + } + return errorMsgs; + } + + private String validAuthDept(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'授权部门'不能为空。"; + } + // 检查授权部门 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'授权部门'无效。"; + } + return ""; + } + private String validStandardCode(String value, List listDict) { + // 检查企业标准代号 + if (!excelUtils.validDict("enterprise_standard_code", value, null, null, true, listDict)) { + return "'企业标准代号'无效。"; + } + return ""; + } + private String validCooperateUnit(String value, List listDict) { // 非空检查 + if (StrUtil.isBlank(value)) { + return "'配合单位'不能为空。"; + } + // 检查配合单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'配合单位'无效。"; + } + return ""; + } + private String validMainDraftingUser(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草人'不能为空。"; + } + // 检查主起草人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草人'无效。"; + } + return ""; + } + private String validMainDraftingUnit(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位'不能为空。"; + } + // 检查主起草单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", true, listDict)) { + return "'主起草单位'无效。"; + } + return ""; + } + private String validMainDraftingUnitResponsiblePerson(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位负责人'不能为空。"; + } + // 检查主起草单位负责人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草单位负责人'无效。"; + } + return ""; + } + private String validStandardPromoter(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'标准推进人'不能为空。"; + } + // 检查标准推进人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'标准推进人'无效。"; + } + return ""; + } + private String validContactUser(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'联络人'不能为空。"; + } + // 检查联络人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'联络人'无效。"; + } + return ""; + } + + private String validProjectType(ProcessEsAnnualInit plan, List listDict, List esList) { + String projectType = plan.getProjectType(); + String originEnStandardNo = plan.getProjectType(); + String newEnStandardName = plan.getNewEnStandardName(); + if (StrUtil.isBlank(projectType)) { + return "'制修订类型'不能为空。"; + } + if (!excelUtils.validDict("esp_revision_type", projectType, null, null, true, listDict)) { + return "'制修订类型'无效。"; + } + // 修订 + if (projectType.equals(ESPProjectType.MODIFY.getValue())) { + // 检查企标编号是否有效 + if (StrUtil.isBlank(originEnStandardNo)) { + return "'原企标编号'不能为空。"; + } + if (!esList.stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList()).contains(originEnStandardNo)) { + return "'原企标编号'无效。"; + } + } + if (newEnStandardName.length() > 50) { + return "'新企标名称'过长(最多50字)。"; + } + return ""; + } + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java new file mode 100644 index 00000000..60aa2a8f --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java @@ -0,0 +1,81 @@ +package com.jero.modules.activiti.process.esAnnualReport.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.enmus.ExcelType; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Map; + +import static com.jero.common.system.base.controller.JeroController.*; + +/** + * @author: Mzaxd + * @Date: 2023/10/18 10:44 + */ +@Slf4j +@RestController +@Api(tags = "企标年度制修订主动上报流程") +@RequestMapping("/process/es/annualReport") +public class ESAnnualReportController { + + @Resource + private ProcessEsAnnualReportService annualReportService; + + /** + * 导入模板下载 + */ + @GetMapping("/templateDownload") + @ApiOperation(value = "企标年度制修订主动上报流程-导入模板下载", notes = "企标年度制修订主动上报流程-导入模板下载", + produces = "application/octet-stream") + @AutoLog(value = "企标年度制修订主动上报流程-导入模板下载") + public ModelAndView templateDownload() { + // AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + String title = "各部门主动上报导入模板"; + mv.addObject(FILE_NAME, title); + mv.addObject(CLASS, ProcessEsAnnualReport.class); + ExportParams exportParams = new ExportParams(title, title); + // 导出xlsx + exportParams.setType(ExcelType.XSSF); + mv.addObject(PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, new ArrayList()); + return mv; + } + + /** + * 通过excel导入数据 + * + * @return + */ + @PostMapping("/importExcel") + @ApiOperation(value = "企标年度制修订主动上报流程-导入", notes = "企标年度制修订主动上报流程-导入") + @AutoLog(value = "企标年度制修订主动上报流程-导入") + @Translation + public Result importExcel(@ApiParam(value = "要上传的文件", required = true) @RequestParam("file") MultipartFile file) { + Map resultMap = annualReportService.importData(file); + Object flag = resultMap.get("flag"); + if (flag == YesOrNoEnum.YES.getValue()) { + return Result.OK(resultMap.get("dataList")); + } else { + return Result.error("导入失败", resultMap.get("msg")); + } + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java new file mode 100644 index 00000000..05a693ca --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java @@ -0,0 +1,331 @@ +package com.jero.modules.activiti.process.esAnnualReport.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 企标-年度制修订计划-各部门主动上报 + * @TableName process_es_annual_report + */ +@Data +@TableName(value ="process_es_annual_report") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="process_es_annual_report对象", description="企标-年度制修订计划-各部门主动上报") +public class ProcessEsAnnualReport implements Serializable { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private String id; + + /** + * 企标计划Id + */ + @ApiModelProperty(value = "企标计划Id") + private String espId; + + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 所属部门 + */ + @ApiModelProperty(value = "所属部门") + private String orgCode; + + /** + * 0表示未删除,1表示删除 + */ + @ApiModelProperty(value = "0表示未删除,1表示删除") + private Integer delFlag; + + /** + * 流程实例Id + */ + @ApiModelProperty(value = "流程实例Id") + private String processInstanceId; + + /** + * 申请类别 + */ + @Dict(dicCode = "esp_application_category") + @ApiModelProperty(value = "申请类别") + private String applicationCategory; + + /** + * 项目类型 + */ + @Excel(name = "制修订类型", width = 15, orderNum = "1") + @Dict(dicCode = "esp_revision_type") + @ApiModelProperty(value = "制修订类型") + private String projectType; + + /** + * 原企标编号 + */ + @Excel(name = "原企标编号", width = 15, orderNum = "2") + @ApiModelProperty(value = "原企标编号") + private String originEnStandardNo; + + /** + * 新企标编号 + */ + @ApiModelProperty(value = "新企标编号") + private String newEnStandardNo; + + /** + * 原企标名称 + */ + @Excel(name = "原企标名称", width = 15, orderNum = "4") + @ApiModelProperty(value = "原企标名称") + private String originEnStandardName; + + /** + * 新企标名称 + */ + @Excel(name = "新企标名称", width = 15, orderNum = "5") + @ApiModelProperty(value = "新企标名称") + private String newEnStandardName; + + /** + * 企标英文名称 + */ + @ApiModelProperty(value = "企标英文名称") + private String enStandardEnglishName; + + /** + * 企标体系 + */ + @ApiModelProperty(value = "企标体系") + private String enStandardSystem; + + /** + * 企业标准代号 + */ + @Excel(name = "企业标准代号", width = 15, orderNum = "7") + @Dict(dicCode = "enterprise_standard_code") + @ApiModelProperty(value = "企业标准代号") + private String enStandardCode; + + /** + * 企业名称代号 + */ + @ApiModelProperty(value = "企业名称代号") + private String enNameCode; + + /** + * 标准类别代号 + */ + @ApiModelProperty(value = "标准类别代号") + private String standardCategoryCode; + + /** + * 年代号 + */ + @ApiModelProperty(value = "年代号") + private String decadeCode; + + /** + * 标准类型 + */ + @ApiModelProperty(value = "标准类型") + private String standardType; + + /** + * 企标等级分类 + */ + @ApiModelProperty(value = "企标等级分类") + private String enStandardClassification; + + /** + * 草稿计划完成日期 + */ + @Excel(name = "草稿计划完成日期", width = 20, orderNum = "13") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "草稿计划完成日期") + private Date draftPlannedCompleteDate; + + /** + * 征求意见稿计划完成日期 + */ + @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "14") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿计划完成日期") + private Date solicitationDraftPlanCompleteDate; + + /** + * 计划报批日期 + */ + @Excel(name = "计划报批日期", width = 15, orderNum = "15") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "计划报批日期") + private Date planApprovalDate; + + /** + * 项目状态 + */ + @ApiModelProperty(value = "项目状态") + private String projectStatus; + + /** + * 编制说明 + */ + @ApiModelProperty(value = "编制说明") + private String compilationDescription; + + /** + * 零部件名称 + */ + @ApiModelProperty(value = "零部件名称") + private String componentName; + /** + * 主起草人 + */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草人") + private String mainDraftingUser; + + /** + * 主起草单位 + */ + @Excel(name = "主起草单位", width = 15, orderNum = "9") + @ApiModelProperty(value = "主起草单位") + private String mainDraftingUnit; + + /** + * 主起草单位责任人 + */ + @Excel(name = "主起草单位责任人", width = 20, orderNum = "10") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "主起草单位责任人") + private String mainDraftingUnitResponsiblePerson; + + /** + * 标准推进人 + */ + @Excel(name = "标准推进人", width = 15, orderNum = "12") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") + @ApiModelProperty(value = "标准推进人") + private String standardPromoter; + + /** + * 草稿完成日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "草稿完成日期") + private Date draftCompletionDate; + + /** + * 提交草稿日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "提交草稿日期") + private Date draftSubmissionDate; + + /** + * 是否征求意见 + */ + @ApiModelProperty(value = "是否征求意见") + private String solicitationOpinionEnabled; + + /** + * 征求意见稿完成日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿完成日期") + private Date solicitationDraftCompletionDate; + + /** + * 变更状态 + */ + @Dict(dicCode = "esp_change_status") + @ApiModelProperty(value = "变更状态") + private String changeStatus; + + /** + * 上传附件 + */ + @ApiModelProperty(value = "上传附件") + private String uploadAttachment; + + /** + * 变更原因 + */ + @ApiModelProperty(value = "变更原因") + private String changeReason; + + /** + * 授权部门 + */ + @Excel(name = "授权部门", width = 15, orderNum = "6") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "授权部门") + private String authDept; + + /** + * 配合单位 + */ + @Excel(name = "配合单位", width = 15, orderNum = "8") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "配合单位") + private String cooperationUnit; + + /** + * 隶属工作组 + */ + @Excel(name = "隶属工作组", width = 15, orderNum = "11") + @Dict(dictTable = "laws_working_group", dicCode = "id", dicText = "name") + @ApiModelProperty(value = "隶属工作组") + private String workGroup; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + @TableField(exist = false) + private String sort; + +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/mapper/ProcessEsAnnualReportMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/mapper/ProcessEsAnnualReportMapper.java new file mode 100644 index 00000000..ae94bff8 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/mapper/ProcessEsAnnualReportMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.activiti.process.esAnnualReport.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; + +/** +* @author ThinkBook +* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Mapper +* @createDate 2023-10-18 09:52:41 +* @Entity com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualReport +*/ +public interface ProcessEsAnnualReportMapper extends BaseMapper { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java new file mode 100644 index 00000000..555a0b9b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/ProcessEsAnnualReportService.java @@ -0,0 +1,17 @@ +package com.jero.modules.activiti.process.esAnnualReport.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + +/** +* @author ThinkBook +* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service +* @createDate 2023-10-18 09:52:41 +*/ +public interface ProcessEsAnnualReportService extends IService { + + Map importData(MultipartFile file); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java new file mode 100644 index 00000000..d97dedf8 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java @@ -0,0 +1,294 @@ +package com.jero.modules.activiti.process.esAnnualReport.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.api.CommonAPI; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.SysDictItemCore; +import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; +import com.jero.modules.activiti.process.esAnnualReport.mapper.ProcessEsAnnualReportMapper; +import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService; +import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType; +import com.jero.modules.activiti.util.ExcelUtils; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; +import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** +* @author ThinkBook +* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service实现 +* @createDate 2023-10-18 09:52:41 +*/ +@Service +@Transactional(rollbackFor = JeroBootException.class) +public class ProcessEsAnnualReportServiceImpl extends ServiceImpl + implements ProcessEsAnnualReportService { + + @Resource + private CommonAPI commonAPI; + + @Resource + private ExcelUtils excelUtils; + + @Resource + private ILawsEnterpriseStandardService enterpriseStandardService; + + @Override + public Map importData(MultipartFile file) { + List listDict = commonAPI.getDictItemAll(); + Map resultMap = new HashMap<>(); + List errorMsgs = new ArrayList<>(); + + // 获取Excel的header + List headers; + try { + headers = ExcelUtils.getHeaderFromExcel(file.getInputStream()); + } catch (Exception e) { + errorMsgs.add("上传模板错误,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + log.error(e.getMessage(), e); + return resultMap; // 返回错误信息 + } + + // 使用静态方法验证header + boolean isMatched = headers.equals(ExcelUtils.getSortedHeadersFromClass(ProcessEsAnnualReport.class)); + if (!isMatched) { + errorMsgs.add("上传模板错误,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + return resultMap; // 返回错误信息 + } + + ImportParams params = new ImportParams(); + params.setTitleRows(1); + params.setHeadRows(1); + params.setNeedSave(true); + + try { + List list = ExcelImportUtil.importExcel(file.getInputStream(), ProcessEsAnnualReport.class, params); + if (list.isEmpty()) { + errorMsgs.add("文件暂无数据,请检查后重试。"); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + return resultMap; // 返回错误信息 + } + // 批量检查数据是否有效 + errorMsgs = this.validationList(list, listDict); + if (errorMsgs.size() > 0) { + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + } else { + resultMap.put("flag", YesOrNoEnum.YES.getValue()); + // 转换为字典值 + this.transToDictValue(list, listDict); + // 清洗 + this.cleanData(list); + resultMap.put("dataList", list); + } + } catch (Exception e) { + errorMsgs.add("文件导入异常:" + e.getMessage()); + resultMap.put("msg", errorMsgs); + resultMap.put("flag", YesOrNoEnum.NO.getValue()); + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultMap; + } + + private void cleanData(List list) { + list.forEach(item-> { + // 如果是制定则去除掉所有的原企标名称 原企标编号 + if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) { + item.setOriginEnStandardName(null); + item.setOriginEnStandardNo(null); + } + // 设置变更状态 制定是新增 修订是变更 + if (item.getProjectType().equals("制定")) { + item.setChangeStatus("新增"); + } else { + item.setChangeStatus("变更"); + } + }); + } + + private void transToDictValue(List list, List listDict) { + list.forEach(item -> { + item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict)); + item.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict)); + item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict)); + item.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict)); + item.setMainDraftingUser(excelUtils.translateDictValue("username", "id", "sys_user", item.getMainDraftingUser(), listDict)); + item.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict)); + item.setMainDraftingUnitResponsiblePerson(excelUtils.translateDictValue("username", "id", "sys_user", item.getMainDraftingUnitResponsiblePerson(), listDict)); + item.setStandardPromoter(excelUtils.translateDictValue("username", "id", "sys_user", item.getStandardPromoter(), listDict)); + item.setWorkGroup(excelUtils.translateDictValue("name", "id", "laws_working_group", item.getWorkGroup(), listDict)); + }); + } + + private List validationList(List list, List listDict) { + List esList = enterpriseStandardService.list(); + List errorMsgs = new ArrayList<>(); + + int i = 3; + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + ProcessEsAnnualReport plan = iterator.next(); + if (ExcelUtils.isEmptyRow(plan)) { + iterator.remove(); + continue; + } + plan.setSort(String.valueOf(i++)); + String enStandardCode = plan.getProjectType(); + String authDept = plan.getProjectType(); + String cooperationUnit = plan.getCooperationUnit(); + String mainDraftingUnit = plan.getMainDraftingUnit(); + String mainDraftingUser = plan.getProjectType(); + String mainDraftingUnitResponsiblePerson = plan.getMainDraftingUnitResponsiblePerson(); + String standardPromoter = plan.getStandardPromoter(); + String workGroup = plan.getWorkGroup(); + + StringBuilder errMsgHeader = new StringBuilder(); + StringBuilder errMsg = new StringBuilder(); + errMsgHeader.append("第").append(plan.getSort()).append("行"); + + // 检查制修订类型 编号 名称 + errMsg.append(validProjectType(plan, listDict, esList)); + // 检查所有数据字典校验的字段 + errMsg.append(validAuthDept(authDept, listDict)); + errMsg.append(validStandardCode(enStandardCode, listDict)); + errMsg.append(validCooperateUnit(cooperationUnit, listDict)); + errMsg.append(validMainDraftingUser(mainDraftingUser, listDict)); + errMsg.append(validMainDraftingUnit(mainDraftingUnit, listDict)); + errMsg.append(validMainDraftingUnitResponsiblePerson(mainDraftingUnitResponsiblePerson, listDict)); + errMsg.append(validStandardPromoter(standardPromoter, listDict)); + errMsg.append(validWorkGroup(workGroup, listDict)); + // 如果数据有问题,则将提示信息添加到 errorMsgs 中 + if (errMsg.length() > 0) { + errorMsgs.add(errMsgHeader.append(errMsg).toString()); + } + } + return errorMsgs; + } + + private String validAuthDept(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'授权部门'不能为空。"; + } + // 检查授权部门 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'授权部门'无效。"; + } + return ""; + } + private String validStandardCode(String value, List listDict) { + // 检查企业标准代号 + if (!excelUtils.validDict("enterprise_standard_code", value, null, null, true, listDict)) { + return "'企业标准代号'无效。"; + } + return ""; + } + private String validCooperateUnit(String value, List listDict) { // 非空检查 + if (StrUtil.isBlank(value)) { + return "'配合单位'不能为空。"; + } + // 检查配合单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'配合单位'无效。"; + } + return ""; + } + private String validMainDraftingUser(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草人'不能为空。"; + } + // 检查主起草人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草人'无效。"; + } + return ""; + } + private String validMainDraftingUnit(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位'不能为空。"; + } + // 检查主起草单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", true, listDict)) { + return "'主起草单位'无效。"; + } + return ""; + } + private String validMainDraftingUnitResponsiblePerson(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位负责人'不能为空。"; + } + // 检查主起草单位负责人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草单位负责人'无效。"; + } + return ""; + } + private String validStandardPromoter(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'标准推进人'不能为空。"; + } + // 检查标准推进人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'标准推进人'无效。"; + } + return ""; + } + private String validWorkGroup(String value, List listDict) { + // 检查工作组 + if (!excelUtils.validDict("name", value, "laws_working_group", "id", true, listDict)) { + return "'工作组'无效。"; + } + return ""; + } + + private String validProjectType(ProcessEsAnnualReport plan, List listDict, List esList) { + String projectType = plan.getProjectType(); + String originEnStandardNo = plan.getProjectType(); + String newEnStandardName = plan.getNewEnStandardName(); + if (StrUtil.isBlank(projectType)) { + return "'制修订类型'不能为空。"; + } + if (!excelUtils.validDict("esp_revision_type", projectType, null, null, true, listDict)) { + return "'制修订类型'无效。"; + } + // 修订 + if (projectType.equals(ESPProjectType.MODIFY.getValue())) { + // 检查企标编号是否有效 + if (StrUtil.isBlank(originEnStandardNo)) { + return "'原企标编号'不能为空。"; + } + if (!esList.stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList()).contains(originEnStandardNo)) { + return "'原企标编号'无效。"; + } + } + if (newEnStandardName.length() > 50) { + return "'新企标名称'过长(最多50字)。"; + } + return ""; + } +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/ProcessEsInitChange.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/ProcessEsInitChange.java index 9a373aaf..99a3ebf1 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/ProcessEsInitChange.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/ProcessEsInitChange.java @@ -8,7 +8,7 @@ import java.io.Serializable; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -17,7 +17,7 @@ import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; /** - * 企标计划 + * 企标立项变更计划 * @TableName process_es_init_change */ @Data @@ -33,86 +33,109 @@ public class ProcessEsInitChange implements Serializable { private String id; /** 企标计划ID */ + @ApiModelProperty(value = "企标计划ID") private String espId; /** * 标准计划Id1(合并流程字段) */ + @ApiModelProperty(value = "标准计划Id1(合并流程字段)") private String standardIdOne; /** * 标准编号1(合并流程字段) */ + @ApiModelProperty(value = "标准编号1(合并流程字段)") private String standardNoOne; /** * 标准名称1(合并流程字段) */ + @ApiModelProperty(value = "标准名称1(合并流程字段)") private String standardNameOne; /** * 制修订类型1(合并流程字段) */ + @Dict(dicCode = "esp_project_type") + @ApiModelProperty(value = "制修订类型1(合并流程字段)") private String projectTypeOne; + /** + * 制修订类型2(合并流程字段) + */ + @Dict(dicCode = "esp_project_type") + @ApiModelProperty(value = "制修订类型2(合并流程字段)") + private String projectTypeTwo; + /** * 标准计划Id2(合并流程字段) */ + @ApiModelProperty(value = "标准计划Id2(合并流程字段)") private String standardIdTwo; /** * 标准编号2(合并流程字段) */ + @ApiModelProperty(value = "标准编号2(合并流程字段)") private String standardNoTwo; /** * 标准名称2(合并流程字段) */ + @ApiModelProperty(value = "标准名称2(合并流程字段)") private String standardNameTwo; - /** - * 制修订类型2(合并流程字段) - */ - private String projectTypeTwo; - /** * 创建人 */ + @ApiModelProperty(value = "创建人") private String createBy; /** * 创建时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "创建时间") private Date createTime; /** * 更新人 */ + @ApiModelProperty(value = "更新人") private String updateBy; /** * 更新时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") private Date updateTime; /** * 所属部门 */ + @ApiModelProperty(value = "所属部门") private String orgCode; /** * 0表示未删除,1表示删除 */ + @ApiModelProperty(value = "0表示未删除,1表示删除") private Integer delFlag; /** * 流程名称 */ + @ApiModelProperty(value = "流程名称") private String processName; /** * 流程实例Id */ + @ApiModelProperty(value = "流程实例Id") private String processInstanceId; /** @@ -120,81 +143,99 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "截止日期") private Date deadlineDate; /** * 流程说明 */ + @ApiModelProperty(value = "流程说明") private String processDescription; /** * 申请类别 */ + @Dict(dicCode = "esp_application_category") + @ApiModelProperty(value = "申请类别") private String applicationCategory; /** * 项目类型 */ + @Dict(dicCode = "esp_project_type") + @ApiModelProperty(value = "项目类型") private String projectType; /** * 原企标编号 */ + @ApiModelProperty(value = "原企标编号") private String originEnStandardNo; /** * 新企标编号 */ + @ApiModelProperty(value = "新企标编号") private String newEnStandardNo; /** * 原企标名称 */ + @ApiModelProperty(value = "原企标名称") private String originEnStandardName; /** * 新企标名称 */ + @ApiModelProperty(value = "新企标名称") private String newEnStandardName; /** * 企标英文名称 */ + @ApiModelProperty(value = "企标英文名称") private String enStandardEnglishName; /** * 企标体系 */ + @ApiModelProperty(value = "企标体系") private String enStandardSystem; /** * 企业标准代号 */ + @ApiModelProperty(value = "企业标准代号") private String enStandardCode; /** * 企业名称代号 */ + @ApiModelProperty(value = "企业名称代号") private String enNameCode; /** * 标准类别代号 */ + @ApiModelProperty(value = "标准类别代号") private String standardCategoryCode; /** * 年代号 */ + @ApiModelProperty(value = "年代号") private String decadeCode; /** * 标准类型 */ + @ApiModelProperty(value = "标准类型") private String standardType; /** * 企标等级分类 */ + @ApiModelProperty(value = "企标等级分类") private String enStandardClassification; /** @@ -202,6 +243,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "原草稿计划完成日期") private Date originDraftPlannedCompleteDate; /** @@ -209,6 +251,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "原征求意见稿计划完成日期") private Date originSolicitationDraftPlanCompleteDate; /** @@ -216,14 +259,15 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "原计划报批日期") private Date originPlanApprovalDate; - /** * 草稿计划完成日期 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "草稿计划完成日期") private Date draftPlannedCompleteDate; /** @@ -231,6 +275,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿计划完成日期") private Date solicitationDraftPlanCompleteDate; /** @@ -238,82 +283,56 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "计划报批日期") private Date planApprovalDate; /** * 项目状态 */ + @ApiModelProperty(value = "项目状态") private String projectStatus; /** * 编制说明 */ + @ApiModelProperty(value = "编制说明") private String compilationDescription; /** * 零部件名称 */ + @ApiModelProperty(value = "零部件名称") private String componentName; - /** - * 主起草人 - */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草人") private String mainDraftingUser; - /** - * 主起草人 - */ - @TableField(exist = false) - @JsonProperty("mainDraftingUser_dictText") - private String mainDraftingUserDictText; - - /** - * 主起草单位 - */ + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "主起草单位") private String mainDraftingUnit; - /** - * 主起草单位 - */ - @TableField(exist = false) - @JsonProperty("mainDraftingUnit_dictText") - private String mainDraftingUnitDictText; - - /** - * 主起草单位责任人 - */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; - /** - * 主起草单位责任人 - */ - @TableField(exist = false) - @JsonProperty("mainDraftingUnitResponsiblePerson_dictText") - private String mainDraftingUnitResponsiblePersonDictText; - - /** * 新主起草单位负责人 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "新主起草单位负责人") private String newMainDraftingUnitResponsiblePerson; - /** - * 标准推进人 - */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "标准推进人") private String standardPromoter; - /** - * 标准推进人 - */ - @TableField(exist = false) - @JsonProperty("standardPromoter_dictText") - private String standardPromoterDictText; - /** * 草稿完成日期 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "草稿完成日期") private Date draftCompletionDate; /** @@ -321,11 +340,13 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "提交草稿日期") private Date draftSubmissionDate; /** * 是否征求意见 */ + @ApiModelProperty(value = "是否征求意见") private String solicitationOpinionEnabled; /** @@ -333,6 +354,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "征求意见稿完成日期") private Date solicitationDraftCompletionDate; /** @@ -340,6 +362,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "评审日期") private Date reviewDate; /** @@ -347,6 +370,7 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "报批日期") private Date approvalDate; /** @@ -354,140 +378,160 @@ public class ProcessEsInitChange implements Serializable { */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "发布日期") private Date releaseDate; /** * 变更状态 */ + @ApiModelProperty(value = "变更状态") private String changeStatus; /** * 立项背景、立项依据 */ + @ApiModelProperty(value = "立项背景、立项依据") private String projectBackground; /** * 国际、国家及行业同类标准分析 */ + @ApiModelProperty(value = "国家及行业同类标准分析") private String similarNaStandardsAnalysis; /** * 企业同类标准对比分析 */ + @ApiModelProperty(value = "企业同类标准对比分析") private String similarEnStandardsAnalysis; /** * 立项标准的领先性与必要性 */ + @ApiModelProperty(value = "立项标准的领先性与必要性") private String standardLeadingNecessity; /** * 立项目的及预期效果等 */ + @ApiModelProperty(value = "立项目的及预期效果等") private String projectExpectedEffects; /** * 备注 */ + @ApiModelProperty(value = "备注") private String remarks; /** * 上传附件 */ + @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") + @ApiModelProperty(value = "上传附件") private String uploadAttachment; /** * 附件 */ + @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") + @ApiModelProperty(value = "附件") private String attachment; - /** - * 是否为优质标准 - */ - private String qualityFlag; - /** * 变更原因 */ + @ApiModelProperty(value = "变更原因") private String changeReason; /** * 新主起草人 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "新主起草人") private String newMainDraftingUser; /** * 新主起草单位 */ + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "新主起草单位") private String newMainDraftingUnit; /** * 部所联络人 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "部所联络人") private String contactUser; /** * 标准专家 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "标准专家") private String standardExpert; /** * 主起草人主管级领导 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草人主管级领导") private String mainDraftUserLeader; - /** - * 主起草人主管级领导 - */ - @TableField(exist = false) - @JsonProperty("mainDraftingUserLeader_dictText") - private String mainDraftUserLeaderDictText; - /** * 主起草人主管级领导上级领导 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草人主管级领导上级领导") private String mainDraftUserLeaderLeader; - /** - * 主起草人主管级领导上级领导 - */ - @TableField(exist = false) - @JsonProperty("mainDraftingUserLeaderLeader_dictText") - private String mainDraftUserLeaderLeaderDictText; - /** * 标准化审批人 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "标准化审批人") private String standardizationApprovalUser; /** * 新主起草部门领导的领导 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "新主起草部门领导的领导") private String newMainDraftUserLeaderLeader; /** * 新主起草部门领导 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "新主起草部门领导") private String newMainDraftUserLeader; /** * 相关人员 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "相关人员") private String relatedUser; /** * 抄送人 */ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "抄送人") private String copyUser; /** * 授权部门 */ + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "授权部门") private String authDept; /** * 配合单位 */ + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "配合单位") private String cooperationUnit; @TableField(exist = false) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java index fca7d61b..3759cf17 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/service/impl/ProcessEsInitChangeServiceImpl.java @@ -97,67 +97,7 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(ProcessEsInitChange::getProcessInstanceId, processInstanceId); lambdaQueryWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue()); - return translateData(list(lambdaQueryWrapper)); - } - - /** - * 手动翻译数据 - * @return - */ - private List translateData(List initChangeList) { - List userIdList = new ArrayList<>(); - List departIdList = new ArrayList<>(); - - // 制作需要的Id集合 - for (ProcessEsInitChange initChange : initChangeList) { - userIdList.add(initChange.getMainDraftingUser()); - userIdList.add(initChange.getMainDraftingUnitResponsiblePerson()); - userIdList.add(initChange.getStandardPromoter()); - userIdList.add(initChange.getMainDraftUserLeader()); - userIdList.add(initChange.getMainDraftUserLeaderLeader()); - departIdList.add(initChange.getMainDraftingUnit()); - } - // 根据Id集合获取所需数据 - LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>(); - userLambdaQueryWrapper.in(SysUser::getId, userIdList); - List userList = sysUserService.list(userLambdaQueryWrapper); - // 转成Map - Map userMap = userList.stream().collect(Collectors.toMap(SysUser::getId, sysUser -> sysUser)); - - LambdaQueryWrapper deptLambdaQueryWrapper = new LambdaQueryWrapper<>(); - deptLambdaQueryWrapper.in(SysDepart::getId, departIdList); - List departList = sysDepartService.list(deptLambdaQueryWrapper); - // 转成Map - Map departMap = departList.stream().collect(Collectors.toMap(SysDepart::getId, sysDepart -> sysDepart)); - - // 翻译数据 - for (ProcessEsInitChange initChange : initChangeList) { - // 主起草人 - if (userMap.get(initChange.getMainDraftingUser()) != null) { - initChange.setMainDraftingUserDictText(userMap.get(initChange.getMainDraftingUser()).getUsername()); - } - // 起草单位负责人 - if (userMap.get(initChange.getMainDraftingUnitResponsiblePerson()) != null) { - initChange.setMainDraftingUnitResponsiblePersonDictText(userMap.get(initChange.getMainDraftingUnitResponsiblePerson()).getUsername()); - } - // 标准推进人 - if (userMap.get(initChange.getStandardPromoter()) != null) { - initChange.setStandardPromoterDictText(userMap.get(initChange.getStandardPromoter()).getUsername()); - } - // 主起草人上级领导 - if (userMap.get(initChange.getMainDraftUserLeader()) != null) { - initChange.setMainDraftUserLeaderDictText(userMap.get(initChange.getMainDraftUserLeader()).getUsername()); - } - // 主起草用户领导的领导 - if (userMap.get(initChange.getMainDraftUserLeaderLeader()) != null) { - initChange.setMainDraftUserLeaderLeaderDictText(userMap.get(initChange.getMainDraftUserLeaderLeader()).getUsername()); - } - // 主起草单位 - if (departMap.get(initChange.getMainDraftingUnit()) != null) { - initChange.setMainDraftingUnitDictText(departMap.get(initChange.getMainDraftingUnit()).getDepartName()); - } - } - return initChangeList; + return list(lambdaQueryWrapper); } @Override diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java index a6c862d9..1d550e4e 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.mapper.ProcessApprovalRecordMapper; import org.activiti.engine.RuntimeService; import org.springframework.stereotype.Service; @@ -46,13 +47,29 @@ public class ProcessAllService extends ServiceImpl } public void delete(String processInstanceId) { - runtimeService.deleteProcessInstance(processInstanceId,"撤销"); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId); - this.remove(wrapper); - + //activiti撤销 + runtimeService.deleteProcessInstance(processInstanceId,"强制撤销"); + //获得流程总表 + ProcessAll processAll = getByProcessInstanceId(processInstanceId); + //删除流程总表 + this.removeById(processAll.getId()); + //删除审批表 LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId,processInstanceId); processApprovalRecordMapper.delete(wrapper1); + //业务表修改为草稿 + Integer prcType = processAll.getPrcType(); + WorkCenterService classByValue = null; + try { + classByValue = (WorkCenterService) Class.forName(ProcessTypeEnum.getClassByValue(prcType)).newInstance(); + }catch (Exception e) { + log.error(e.getMessage(),e); + } + classByValue.changeToDraft(processAll.getProjectId()); + //todo 同步删除操作到统一待办 + } + + public IPage getAllList(Page page, QueryWrapper queryWrapper) { + return processAllMapper.getAllList(page,queryWrapper); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/WorkCenterService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/WorkCenterService.java new file mode 100644 index 00000000..d25f0f5a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/WorkCenterService.java @@ -0,0 +1,13 @@ +package com.jero.modules.activiti.service; + +/** + * @author liJiaRao + * @date 2023-10-19 15:22 + */ +public interface WorkCenterService { + /** + * 更改业务表为草稿 + * @param id + */ + void changeToDraft(String id); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java new file mode 100644 index 00000000..d36310b3 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java @@ -0,0 +1,209 @@ +package com.jero.modules.activiti.util; + +import com.jero.common.api.CommonAPI; +import com.jero.common.system.vo.SysDictItemCore; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDictItem; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.Resource; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author: Mzaxd + * @Date: 2023/8/18 15:50 + */ +@Component +public class ExcelUtils { + + @Resource + private CommonAPI commonAPI; + + public static Date excelSerialDateToJavaDate(double serialDate) { + // 首先,我们定义数据库支持的最早和最晚的日期。 + Calendar minDate = Calendar.getInstance(); + minDate.set(1000, Calendar.JANUARY, 1); // 这是MySQL的最小日期,可以根据需要修改 + + Calendar maxDate = Calendar.getInstance(); + maxDate.set(9999, Calendar.DECEMBER, 31); // 这是MySQL的最大日期,可以根据需要修改 + + Calendar baseDate = Calendar.getInstance(); + baseDate.set(1900, Calendar.JANUARY, 1); // Excel起始日期是1900-01-01 + baseDate.add(Calendar.DATE, (int) serialDate - 2); // 减2是因为Excel中1900年被错误地视为闰年 + + // 现在我们比较日期是否在有效范围内 + if (baseDate.before(minDate) || baseDate.after(maxDate)) { + throw new IllegalArgumentException("日期超出了有效范围: " + baseDate.getTime()); + } + return baseDate.getTime(); + } + + /** + * 获取HeadRow的文本内容 + * + * @param is 文件输入流 + * @return HeadRow的List + * @throws Exception + */ + public static List getHeaderFromExcel(InputStream is) throws Exception { + List headers = new ArrayList<>(); + + Workbook workbook = new XSSFWorkbook(is); + Sheet sheet = workbook.getSheetAt(0); + + // HeadRow在index 1 + for (int rowIndex = 1; rowIndex <= 1; rowIndex++) { + Row row = sheet.getRow(rowIndex); + for (Cell cell : row) { + headers.add(cell.getStringCellValue()); + } + } + return headers; + } + + /** + * 获取一个类的所有带@Excel注解的字段的name属性值,并按照orderNum正序排序。 + * + * @param clazz 要检查的类 + * @return 包含所有带@Excel注解字段的name属性值的列表 + */ + public static List getSortedHeadersFromClass(Class clazz) { + List annotatedFields = new ArrayList<>(); + Field[] fields = clazz.getDeclaredFields(); + + for (Field field : fields) { + if (field.isAnnotationPresent(Excel.class)) { + annotatedFields.add(field); + } + } + + // 根据orderNum正序排序 + annotatedFields.sort(new Comparator() { + @Override + public int compare(Field o1, Field o2) { + Excel excel1 = o1.getAnnotation(Excel.class); + Excel excel2 = o2.getAnnotation(Excel.class); + return Integer.compare(Integer.parseInt(excel1.orderNum()), Integer.parseInt(excel2.orderNum())); + } + }); + + // 提取排序后字段的name属性值 + List sortedHeaders = new ArrayList<>(); + for (Field field : annotatedFields) { + Excel excel = field.getAnnotation(Excel.class); + sortedHeaders.add(excel.name()); + } + return sortedHeaders; + } + + /** + * 检查一个对象的所有带@Excel注解的字段是否为空。 + * + * @param obj 要检查的对象 + * @return 如果所有带@Excel注解的字段都为空,则返回true,否则返回false。 + */ + public static boolean isEmptyRow(Object obj) { + boolean isEmpty = true; // 假设行是空的 + Field[] fields = obj.getClass().getDeclaredFields(); // 获取类的所有字段 + + for (Field field : fields) { + if (field.isAnnotationPresent(Excel.class)) { // 检查字段是否有@Excel注解 + field.setAccessible(true); // 允许访问私有字段 + try { + Object value = field.get(obj); // 获取字段的值 + if (value != null) { // 如果字段不为空 + isEmpty = false; // 行不是空的 + break; + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + return isEmpty; + } + + // 校验数据字典 + public boolean validDict(String dictCode, String dictValue, String dicTable, String dicText, boolean isSingle, List listDict) { + if (isSingle && dictValue.contains(",")) { + return false; + } + int count = dictValue.split(",").length; + String value = this.translateDictValue(dictCode, dicText, dicTable, dictValue, listDict); + return value != null && value.split(",").length == count; + } + + /** + * 翻译字典文本 + * + * @param code 编码 + * @param text 值 + * @param listDict 字典集合 + */ + public String translateDictValue(String code, String text, List listDict) { + StringBuilder textValue = new StringBuilder(); + String tmpValue = null; + List listNew = listDict.stream().filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemText(), text.trim())).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(listNew)) { + tmpValue = listNew.get(0).getItemValue(); + } + if (tmpValue != null) { + if (!"".contentEquals(textValue)) { + textValue.append(","); + } + textValue.append(tmpValue); + } + return textValue.toString(); + } + + /** + * 翻译字典文本 + * + * @param code 编码 + * @param text 值 + * @param table 表名 + * @param key 键 + * @param listDict 字典集合 + */ + public String translateDictValue(String code, String text, String table, String key, List listDict) { + if (oConvertUtils.isEmpty(key)) { + return null; + } + StringBuilder textValue = new StringBuilder(); + String[] keys = key.split(","); + for (String k : keys) { + String tmpValue = null; + if (k.trim().length() == 0) { + continue; //跳过循环 + } + if (!StringUtils.isEmpty(table)) { + tmpValue = commonAPI.queryTableDictTextByKey(table, text, code, k.trim()); + } else { + List listNew = listDict.stream().filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemValue(), k.trim())).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(listNew)) { + tmpValue = listNew.get(0).getItemText(); + } + } + + if (tmpValue != null) { + if (!"".contentEquals(textValue)) { + textValue.append(","); + } + textValue.append(tmpValue); + } + } + return textValue.toString(); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/compare/controller/SarFileCompareInfoController.java b/laws-modules/src/main/java/com/jero/modules/compare/controller/SarFileCompareInfoController.java index 96b54bb1..e01b00cc 100644 --- a/laws-modules/src/main/java/com/jero/modules/compare/controller/SarFileCompareInfoController.java +++ b/laws-modules/src/main/java/com/jero/modules/compare/controller/SarFileCompareInfoController.java @@ -125,8 +125,8 @@ public class SarFileCompareInfoController extends JeroController> bussDocumentLibraryEOList = bussDocumentLibraryEOService.getListBySerialNumber(leftInfo.getSerialNumber()); - if (CollectionUtil.isNotEmpty(bussDocumentLibraryEOList)) { - sarFileCompareInfo.setFileKeyLeft(bussDocumentLibraryEOList.get(0).get("id").toString()); - } +// List> bussDocumentLibraryEOList = bussDocumentLibraryEOService.getListBySerialNumber(leftInfo.getSerialNumber()); +// if (CollectionUtil.isNotEmpty(bussDocumentLibraryEOList)) { +// sarFileCompareInfo.setFileKeyLeft(bussDocumentLibraryEOList.get(0).get("id").toString()); +// } + sarFileCompareInfo.setFileKeyLeft(leftInfo.getStandardId()); sarFileCompareInfo.setFileNameLeft(leftInfo.getFileName()); sarFileCompareInfo.setTitleLeft(leftInfo.getTitle()); sarFileCompareInfo.setFileTypeLeft(leftInfo.getFileType()); @@ -252,11 +252,11 @@ public class SarFileCompareInfoServiceImpl extends ServiceImpl> bussDocumentLibraryEOList1 = bussDocumentLibraryEOService.getListBySerialNumber(rightInfo.getSerialNumber()); - if (CollectionUtil.isNotEmpty(bussDocumentLibraryEOList1)) { - sarFileCompareInfo.setFileKeyRight(bussDocumentLibraryEOList1.get(0).get("id").toString()); - } - sarFileCompareInfo.setFileKeyRight(rightInfo.getConnectId()); +// List> bussDocumentLibraryEOList1 = bussDocumentLibraryEOService.getListBySerialNumber(rightInfo.getSerialNumber()); +// if (CollectionUtil.isNotEmpty(bussDocumentLibraryEOList1)) { +// sarFileCompareInfo.setFileKeyRight(bussDocumentLibraryEOList1.get(0).get("id").toString()); +// } + sarFileCompareInfo.setFileKeyRight(rightInfo.getStandardId()); sarFileCompareInfo.setFileNameRight(rightInfo.getFileName()); sarFileCompareInfo.setFileTypeRight(rightInfo.getFileType()); sarFileCompareInfo.setTitleRight(rightInfo.getTitle()); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java index 2149018a..7d424e74 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java @@ -115,4 +115,17 @@ public class FieldCommon { // 稽查内容 public static final String CHECK_LIST = "checkList"; + // 发布稿(原文) + public static final String FILE_PUBLISH_OF_ORIGINAL = "publish_of_original"; + // 修改单 + public static final String FILE_MODIFICATION_LIST = "modification_list"; + // 报批稿 + public static final String FILE_DRAFT_FOR_REVIEW = "draft_for_review"; + // 送审稿 + public static final String FILE_DRAFT_FOR_APPROVAL = "draft_for_approval"; + // 征求意见稿 + public static final String FILE_DRAFT_FOR_COMMENT = "draft_for_comment"; + // 草案 + public static final String FILE_DRAFT = "draft"; + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index 1cf09101..570e9ac2 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -34,6 +34,8 @@ import com.jero.modules.personal.entity.LawsBrowsingHistory; import com.jero.modules.personal.entity.LawsStandardCollection; import com.jero.modules.personal.service.ILawsBrowsingHistoryService; import com.jero.modules.personal.service.ILawsStandardCollectionService; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.service.ISarFileSplitInfoService; import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; @@ -123,6 +125,8 @@ public class LawsCommonServiceImpl implements ILawsCommonService { private EnterpriseStandardAuthUserService esAuthUserService; @Resource private WaterMarkUtil waterMarkUtil; + @Autowired + private ISarFileSplitInfoService sarFileSplitInfoService; /** * @Author: liao @@ -170,6 +174,41 @@ public class LawsCommonServiceImpl implements ILawsCommonService { return infoPage; } + /** + * @Author: liao + * @Date: 2023/10/19 15:36 + * @Description: 标准拆分标识 + **/ + private void splitFlag(Map map) { + String id = (String) map.get("id"); + // 查询标准拆分表 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + // 标准id + queryWrapper.eq(SarFileSplitInfoEO::getStandardId, id); + // 拆分表发布标识 + queryWrapper.isNotNull(SarFileSplitInfoEO::getPublishBeforeId); + // 文件字段标识 + queryWrapper.isNotNull(SarFileSplitInfoEO::getFileType); + List sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper); + + Map flagMap = new HashMap<>(); + sarFileSplitInfoEOList.forEach(e -> flagMap.put(e.getFileType(), e.getId() + "," + e.getPublishBeforeId())); + + // 拆分的标识 + map.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_PUBLISH_OF_ORIGINAL)); + map.put(FieldCommon.FILE_MODIFICATION_LIST + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_MODIFICATION_LIST)); + map.put(FieldCommon.FILE_DRAFT_FOR_REVIEW + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_DRAFT_FOR_REVIEW)); + map.put(FieldCommon.FILE_DRAFT_FOR_APPROVAL + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_DRAFT_FOR_APPROVAL)); + map.put(FieldCommon.FILE_DRAFT_FOR_COMMENT + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_DRAFT_FOR_COMMENT)); + map.put(FieldCommon.FILE_DRAFT + FieldCommon._STANDARD_SPLIT, + flagMap.get(FieldCommon.FILE_DRAFT)); + } + @Override public IPage> getExportData(Map parameterMap, List fieldList) { // 获取操作模块 @@ -994,6 +1033,8 @@ public class LawsCommonServiceImpl implements ILawsCommonService { stringObjectMap.put("checkList", list); } + // 标准拆分标识 + splitFlag(stringObjectMap); // 对返回的字段做处理 return stringObjectMap; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java index 9fb9b580..200ce198 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java @@ -25,13 +25,21 @@ public class DocumentSplitCommon { */ public static final String DATE_FORMAT_END = " , '%Y-%m-%d') "; /** - * 模糊匹配 + * between */ - public static final String CONCAT_LIKE_BEGIN = " concat('%', ' "; + public static final String BETWEEN = "between "; /** * 模糊匹配 */ - public static final String CONCAT_LIKE_END = " ', '%') "; + public static final String CONCAT_LIKE_BEGIN = " concat('%', '"; + /** + * 模糊匹配 + */ + public static final String CONCAT_LIKE_END = "', '%') "; + /** + * 包含 + */ + public static final String INSTR_BEGIN = " instr("; /** * and */ diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java index 1490fcfa..3f2c0fbb 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java @@ -224,7 +224,7 @@ public class DocumentSplitController { @PostMapping("/editBatchDocumentSplitDetail") public Result editBatchDocumentSplitDetail(@RequestBody Map parameter) { documentSplitService.editBatchDocumentSplitDetail(parameter); - return Result.OK(DocumentSplitCommon.MEG_DEL_BATCH); + return Result.OK("批量编辑成功!"); } /** @@ -303,4 +303,16 @@ public class DocumentSplitController { public void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response) { documentSplitService.downloadImportTemplate(request, response); } + + /** + * 文档拆分详情-导出 + * @param request + * @param response + */ + @AutoLog(value = "文档拆分详情-导出") + @ApiOperation(value = "文档拆分详情-导出") + @GetMapping("/exportDocumentSplitDetail") + public void exportDocumentSplitDetail(@RequestBody Map parameter, HttpServletRequest request, HttpServletResponse response) { + documentSplitService.exportDocumentSplitDetail(parameter, request, response); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java index 728f05d4..eaa5d87f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java @@ -17,31 +17,51 @@ import javax.annotation.PostConstruct; @Component public class DateManyConditionImpl extends AbstractConditionBase { + /** + * 实现逻辑,多日期字符串字段(存储时前端从小到大排好序(必须)) + * 逗号拆分获取首位和末尾日期,来分别匹配是否符合查询参数的两个日期区间 + * 实现sql参考:(代码拼接中加入了date_format来格式化日期) + * select + * epr.* + * from + * event_plan_record epr + * where + * substring_index('epr.realStartTime', ',', 1) BETWEEN #{startDate} AND #{endDate} + * or substring_index('epr.realStartTime', ',', -1) BETWEEN #{startDate} AND #{endDate} + * or #{startDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1) + * or #{endDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1) + * @param fieldName + * @param value + * @return + */ @Override public String buildCondition(String fieldName, String value){ // 多日期查询 String substringBegin = "SUBSTRING_INDEX("; - String substringEnd = ", ',', 1)"; + String substringEndFirst = ", ',', 1)"; + String substringEndLast = ", ',', -1)"; String dateMany = DocumentSplitCommon.AND; if (value.contains(",")) { // 范围查询 String[] split = value.split(","); - dateMany += "(("; + dateMany += "("; String startDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[0] + "'" + DocumentSplitCommon.DATE_FORMAT_END; String endDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[1] + "'" + DocumentSplitCommon.DATE_FORMAT_END; - dateMany += - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + - DocumentSplitCommon.AND + - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + - DocumentSplitCommon.OR + "(" + - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + - DocumentSplitCommon.AND + - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + - DocumentSplitCommon.OR + "(" + - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + - DocumentSplitCommon.AND + - DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + "))"; - + dateMany += "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate + + ")" + + DocumentSplitCommon.OR + + "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate + + ")" + + DocumentSplitCommon.OR + + "(" + + startDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + + ")" + + DocumentSplitCommon.OR + + "(" + + endDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + + ")" + ")"; } else { dateMany += fieldName + DocumentSplitCommon.LIKE + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java index b9d659c5..f561c089 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java @@ -7,11 +7,13 @@ import com.jero.modules.laws.documenttool.handler.AbstractConditionBase; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.List; /** * @Author: yjz * @Date: 2023/10/13/17:05 - * @Description: in查询 + * @Description: 下拉框查询 */ @Component @@ -19,16 +21,17 @@ public class InConditionImpl extends AbstractConditionBase { @Override public String buildCondition(String fieldName, String value){ - // in查询 + // 下拉框查询 StringBuilder in = new StringBuilder(); - in.append(DocumentSplitCommon.AND).append(fieldName).append(DocumentSplitCommon.IN).append("("); - for (String s : value.split(",")) { - in.append("'").append(s).append("'"); - if (value.indexOf(s) != value.length() -1){ - in.append(","); + in.append(DocumentSplitCommon.AND).append("(("); + List list = Arrays.asList(value.split(",")); + for (String s : list) { + in.append(DocumentSplitCommon.INSTR_BEGIN).append(fieldName).append(",").append("'").append(s).append("'").append(")"); + if (list.indexOf(s) != list.size() -1){ + in.append(DocumentSplitCommon.OR); } } - in.append(")"); + in.append("))"); return in.toString(); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java index 6e5e74f4..571ec1e8 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java @@ -112,6 +112,12 @@ public interface DocumentSplitMapper { */ Map queryLawsDocumentSplitById(@Param("id") String id); + /** + * 文档拆分详情通过id范围查询 + * @param id + */ + Map queryLawsDocumentSplitInId(@Param("idList") String id); + /** * 文档拆分详情-新增 * @param insertField diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml index 971591c6..7e1b62ff 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml @@ -24,8 +24,8 @@ - insert into sar_file_split_info(id, create_by, create_time, update_by, update_time, sys_org_code, serial_number, title, file_type, file_name, split_result, file_id, connect_id, title_en, author, split_status, standard_id, del_flag) - values (#{id}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{sysOrgCode}, #{serialNumber}, #{title}, #{fileType}, #{fileName}, #{splitResult}, #{fileId}, #{connectId}, #{titleEn}, #{author}, #{splitStatus}, #{standardId}, #{delFlag}) + insert into sar_file_split_info(id, create_by, create_time, update_by, update_time, sys_org_code, serial_number, title, file_type, file_name, split_result, file_id, connect_id, title_en, author, split_status, standard_id, del_flag, publish_before_id) + values (#{id}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{sysOrgCode}, #{serialNumber}, #{title}, #{fileType}, #{fileName}, #{splitResult}, #{fileId}, #{connectId}, #{titleEn}, #{author}, #{splitStatus}, #{standardId}, #{delFlag}, #{publishBeforeId}) @@ -81,7 +81,7 @@ delete from sar_file_split_items_val where item_id in - + #{item} @@ -189,6 +189,15 @@ where valid_flag = 0 and item_id = #{itemId} + + UPDATE laws_document_split SET ${updateSet} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java index ed5e81e4..706205fa 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java @@ -149,4 +149,11 @@ public interface IDocumentSplitService { * @param parameter */ void revocation(Map parameter); + + /** + * 文档拆分详情-导出 + * @param request + * @param response + */ + void exportDocumentSplitDetail(Map parameter, HttpServletRequest request, HttpServletResponse response); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java index bb65dbf6..7e153b3f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java @@ -10,8 +10,10 @@ import com.jero.common.constant.enums.LanguageEnum; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.FileUtils; import com.jero.common.util.MessageUtils; import com.jero.common.util.UUIDUtils; +import com.jero.common.util.ZipUtil; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.common.mapper.LawsCommonMapper; import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; @@ -53,19 +55,20 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.OutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; -import static java.net.URLEncoder.encode; - /** * @Author: yjz * @Date: 2023/10/12/23:03 @@ -113,6 +116,9 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { this.sysDictItemService = sysDictItemService; } + @Value("${jero.path.exportExcelTempPath}") + private String exportExcelTempPath; + @Override public IPage queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) { // 构建查询条件 @@ -410,7 +416,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { // 条文解读更新 // 删除旧数据 - documentSplitMapper.deleteItemsValByItemIds((String) parameter.get(ID), DocumentSplitCommon.INTERPRETATION); + documentSplitMapper.deleteItemsValByItemIds((String) parameter.get("ids"), DocumentSplitCommon.INTERPRETATION); if (!Objects.isNull(articlesList) && !articlesList.isEmpty()){ // 添加新数据 documentSplitMapper.addBatchItemsVal(articlesList); @@ -560,6 +566,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { @Override public void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response) { try (Workbook workbook = new XSSFWorkbook()){ + String fileName = "拆分导入模版下载.xlsx"; // sheet页 XSSFSheet sheet = (XSSFSheet) workbook.createSheet("拆分导入模版"); // 列宽 @@ -574,7 +581,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { // 水平、垂直居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); - // 问本格式 + // 文本格式 cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@")); for (int i = 0; i < titleArr.length; i++) { @@ -602,20 +609,69 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { CellRangeAddress region = new CellRangeAddress(1, 1, 0, 2); sheet.addMergedRegion(region); - // 返回流 - response.setContentType("application/vnd.ms-excel;charset=UTF-8"); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Content-Disposition", "attachment;fileName=" + - encode("拆分导入模版下载.xlsx", "UTF-8")); - OutputStream outputStream = response.getOutputStream(); - workbook.write(outputStream); - outputStream.flush(); - outputStream.close(); + // excel临时保存到本地并在同级创建文件夹 + generateExcel(workbook, fileName); + + // 生成zip文件返回文件流 + ZipUtil.toZip(exportExcelTempPath, response.getOutputStream(), response, true); + + //删除指定文件夹 + FileUtils.deleteFolders(exportExcelTempPath); }catch (Exception e){ throw new JeroBootException("下载文件失败!"); } } + /** + * private static void returnOutPutStream(HttpServletResponse response, String fileName, String zipPath) throws IOException { + * ServletOutputStream outputStream = null; + * try (InputStream in = Files.newInputStream(Paths.get(zipPath));){ + * response.reset(); + * response.setContentType("application/ostet-stream"); + * response.setHeader("content-type", "application/octet-stream"); + * response.setContentType("application/octet-stream"); + * response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + new String((fileName + ".zip").getBytes("GB2312"), StandardCharsets.ISO_8859_1)); + * response.setCharacterEncoding("UTF-8"); + * outputStream = response.getOutputStream(); + * //创建存放文件内容的数组 + * byte[] buff = new byte[1024]; + * //所读取的内容使用n来接收 + * int n; + * //当没有读取完时,继续读取,循环 + * while ((n = in.read(buff)) != -1) { + * //将字节数组的数据全部写入到输出流中 + * outputStream.write(buff, 0, n); + * } + * //强制将缓存区的数据进行输出 + * outputStream.println(); + * } + * outputStream.close(); + * } + * + */ + + private void generateExcel(Workbook workbook, String fileName) throws IOException { + File saveFile = new File(exportExcelTempPath); + // 导出路径 没有则创建 + if (!saveFile.exists()) { + saveFile.mkdirs(); + } + // 生成excel文件路径 + String excelPath = exportExcelTempPath + File.separator + fileName; + // 写出excel文件 + try (FileOutputStream fos = new FileOutputStream(excelPath)){ + workbook.write(fos); + + // 同级创建文件夹 + File savePaperFile = new File(exportExcelTempPath+ File.separator + "外部资源"); + if (!savePaperFile.exists()) { + savePaperFile.mkdirs(); + } + }catch (Exception e){ + throw new JeroBootException(e.getMessage()); + } + } + @Override public List queryInterpretationArticlesList(String itemId) { return documentSplitMapper.queryItemsValByItemId(itemId, DocumentSplitCommon.INTERPRETATION); @@ -640,7 +696,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { splitMenuEOPage.setOrderBy("display_seq"); splitMenuEOPage.setInfoId(id); List sarFileSplitMenuEOS = sarFileSplitMenuEOService.queryByList(splitMenuEOPage); - lawsDocumentSplitView.setSarFileSplitMenuEO(sarFileSplitMenuEOS); + // 不需要总目录层级 + lawsDocumentSplitView.setSarFileSplitMenuEO(sarFileSplitMenuEOS.get(0).getChildren()); // 文档拆分详情 parameter.remove(ID); @@ -655,6 +712,15 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { String id = (String) parameter.get(ID); // 文档拆分信息(旧) DocumentSplitInfo oldInfo = documentSplitMapper.queryDocumentSplitInfoById(id); + // 判断是否发布过 + SarFileSplitInfoEO sarFileSplitInfoEO = sarFileSplitInfoService.getOne( + new QueryWrapper().lambda() + .eq(SarFileSplitInfoEO::getPublishBeforeId, id)); + if (!Objects.isNull(sarFileSplitInfoEO)){ + // 删除旧发布数据 + sarFileSplitInfoService.deleteById(sarFileSplitInfoEO.getId()); + } + // 修改发布状态 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(SarFileSplitInfoEO::getId, oldInfo.getId()); @@ -678,8 +744,6 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { oldMenuIdList.add(sarFileSplitMenu.getId()); String newId = UUID.randomUUID().toString().replace("-", ""); newMenuIdList.add(newId); - sarFileSplitMenu.setId(newId); - sarFileSplitMenu.setInfoId(newInfo.getId()); // 父子级关系处理 oldMenuList.stream() @@ -689,6 +753,9 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { return v; }) .forEach(v -> log.info(v.getParentId())); + + sarFileSplitMenu.setId(newId); + sarFileSplitMenu.setInfoId(newInfo.getId()); } // 新增数据 documentSplitMapper.insertBatchSarFileSplitMenuByInfoId(oldMenuList); @@ -741,7 +808,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { @Override public void revocation(Map parameter) { String id = (String) parameter.get(ID); - // 文档拆分信息(旧) + // 文档拆分信息 DocumentSplitInfo oldInfo = documentSplitMapper.queryDocumentSplitInfoById(id); // 修改发布状态 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -750,6 +817,56 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { sarFileSplitInfoService.update(updateWrapper); } + @Override + public void exportDocumentSplitDetail(Map parameter, HttpServletRequest request, HttpServletResponse response) { + try (Workbook workbook = new XSSFWorkbook()){ + // 文档拆分详情数据 + List> mapList = queryDocumentSplitDetailByList(parameter); + // 创建工作簿 + + // 创建sheet页 + Sheet sheet = workbook.createSheet("条款内容"); + // 字段名 + List keyList = new ArrayList<>(); + if(!Objects.isNull(mapList) && !mapList.isEmpty()){ + Map map = mapList.get(0); + keyList = map.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList()); + } + + // 样式1 + CellStyle cellStyleOne = workbook.createCellStyle(); + cellStyleOne.setWrapText(true); + cellStyleOne.setVerticalAlignment(VerticalAlignment.CENTER); + // 样式2 + CellStyle cellStyleTwo = workbook.createCellStyle(); + cellStyleTwo.setWrapText(true); + cellStyleTwo.setAlignment(HorizontalAlignment.CENTER); + // 样式3 + CellStyle cellStyleThree = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setColor(IndexedColors.LIGHT_BLUE.getIndex()); + cellStyleThree.setWrapText(true); + cellStyleThree.setVerticalAlignment(VerticalAlignment.CENTER); + + // 设置表头 + Row row = sheet.createRow(0); + for (int i = 0; i < keyList.size(); i++) { + // 创建列,应用样式 + Cell cell = row.createCell(i); + cell.setCellValue(new XSSFRichTextString(keyList.get(i))); + cell.setCellStyle(cellStyleOne); + + if("条文内容".equals(keyList.get(i))) { + sheet.setColumnWidth(i, 80 * 256); + } else { + sheet.setColumnWidth(i, 20 * 256); + } + } + }catch (Exception e){ + throw new JeroBootException("导出失败!"); + } + } + private void manageData(Map resultMap, StringBuilder fieldsBuilder, StringBuilder valuesBuilder) { // 所有key(字段名) resultMap.forEach((k, v) -> { @@ -843,7 +960,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { Optional lawsTag = fieldListCondition.stream().filter(o -> k.equals(o.getDbFieldName())).findFirst(); lawsTag.ifPresent(l -> { // 构建查询条件 (工厂 + 策略 设计模式) - String sqlCondition = ConditionMapFactory.getInvokeStrategy(l.getDbFieldName()).buildCondition(l.getDbFieldName(), (String) v); + String sqlCondition = ConditionMapFactory.getInvokeStrategy(l.getFieldShowType()).buildCondition(l.getDbFieldName(), (String) v); selectCondition.append(sqlCondition); }); }); @@ -918,7 +1035,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { // 拆分状态 queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), "split_status", documentSplitInfo.getSplitStatus()); // 编辑人 - queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "username", documentSplitInfo.getAuthor()); + queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "username", documentSplitInfo.getAuthor()); // 发布前id if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){ queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId()); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardPlan.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardPlan.java index 476b206e..e296a6e3 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardPlan.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardPlan.java @@ -1,12 +1,9 @@ package com.jero.modules.laws.enterprise.entity; -import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -93,6 +90,7 @@ public class EnterpriseStandardPlan implements Serializable { @ApiModelProperty(value = "企标英文名称") private String enStandardEnglishName; + @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") @ApiModelProperty(value = "企标体系") private String enStandardSystem; @@ -134,46 +132,32 @@ public class EnterpriseStandardPlan implements Serializable { @ApiModelProperty(value = "项目状态") private String projectStatus; + @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") @ApiModelProperty(value = "编制说明") private String compilationDescription; - @TableField(exist = false) - @ApiModelProperty(value = "附件文件名") - private String compilationFileName; - @ApiModelProperty(value = "零部件名称") private String componentName; @ApiModelProperty(value = "授权部门") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") private String authDept; + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "主起草人") private String mainDraftingUser; - @TableField(exist = false) - @ApiModelProperty(value = "主起草人用户名") - @JsonProperty("mainDraftingUser_dictText") - private String mainDraftingUserDictText; - @ApiModelProperty(value = "主起草单位Id") - private String mainDraftingUnit; + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "主起草单位") - @TableField(exist = false) - @JsonProperty("mainDraftingUnit_dictText") - private String mainDraftingUnitDictText; + private String mainDraftingUnit; - @ApiModelProperty(value = "主起草单位责任人Id") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; - @TableField(exist = false) - @ApiModelProperty(value = "主起草单位责任人用户名") - @JsonProperty("mainDraftingUnitResponsiblePerson_dictText") - private String mainDraftingUnitResponsiblePersonDictText; + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "标准推进人") private String standardPromoter; - @TableField(exist = false) - @ApiModelProperty(value = "标准推进人") - @JsonProperty("standardPromoter_dictText") - private String standardPromoterDictText; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @@ -231,17 +215,15 @@ public class EnterpriseStandardPlan implements Serializable { @ApiModelProperty(value = "备注") private String remarks; + @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") @ApiModelProperty(value = "上传附件") private String uploadAttachment; - @TableField(exist = false) - @ApiModelProperty(value = "附件文件名") - private String attachmentFileName; - @Dict(dicCode = "yn") @ApiModelProperty(value = "是否为优质标准") private String qualityFlag; + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "配合单位") private String cooperationUnit; diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/dto/ESPlanQueryDTO.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/dto/ESPlanQueryDTO.java index 2b711314..b189a9fc 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/dto/ESPlanQueryDTO.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/dto/ESPlanQueryDTO.java @@ -10,6 +10,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -93,15 +94,27 @@ public class ESPlanQueryDTO { @ApiModelProperty(value = "项目状态列表,流程中用") private List projectStatusList; - public void transIdsToList() { - if (StrUtil.isBlank(this.selections)) { - return; + @ApiModelProperty(value = "排除Id列表,流程中用") + private String excludeIds; + + @JSONField(serialize = false) + @ApiModelProperty(value = "排除Id列表,流程中用") + private List excludeIdList; + + public List transIdsToList(String values) { + if (StrUtil.isBlank(values)) { + return new ArrayList<>(); } - this.idList = StrUtil.split(this.selections, StrUtil.COMMA); + return StrUtil.split(values, StrUtil.COMMA); } public void setSelections(String selections) { this.selections = selections; - this.transIdsToList(); + this.idList = transIdsToList(selections); + } + + public void setExcludeIds(String excludeIds) { + this.excludeIds = excludeIds; + this.excludeIdList = transIdsToList(excludeIds); } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/vo/EnterpriseStandardPlanVo.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/vo/EnterpriseStandardPlanVo.java index e13e95bb..6037f5e9 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/vo/EnterpriseStandardPlanVo.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/vo/EnterpriseStandardPlanVo.java @@ -46,77 +46,67 @@ public class EnterpriseStandardPlanVo { @ApiModelProperty(value = "新企标名称") private String newEnStandardName; - @Excel(name = "授权部门", width = 15, orderNum = "1") + @Excel(name = "授权部门", width = 15, orderNum = "1", dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "授权部门") - private String authDeparts; + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + private String authDept; + + @Excel(name = "配合单位", width = 15, orderNum = "1", dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "配合单位") + private String cooperationUnit; @Excel(name = "企业标准代号", width = 15, orderNum = "1") @ApiModelProperty(value = "企业标准代号") private String enStandardCode; - @Excel(name = "配合单位", width = 15, orderNum = "1") - @ApiModelProperty(value = "配合单位") - private String cooperateDeparts; - - @ApiModelProperty(value = "主起草人Id") + @Excel(name = "主起草人", width = 15, orderNum = "1", dictTable = "sys_user", dicCode = "id", dicText = "username") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "主起草人") private String mainDraftingUser; - @Excel(name = "主起草人", width = 15, orderNum = "1") - @ApiModelProperty(value = "主起草人用户名") - @JsonProperty("mainDraftingUser_dictText") - private String mainDraftingUserDictText; - - @ApiModelProperty(value = "主起草单位Id") + @Excel(name = "主起草单位", width = 15, orderNum = "1") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "主起草单位") private String mainDraftingUnit; - @Excel(name = "主起草单位", width = 15, orderNum = "1") - @ApiModelProperty(value = "主起草单位名") - @JsonProperty("mainDraftingUnit_dictText") - private String mainDraftingUnitDictText; - + @Excel(name = "主起草单位责任人", width = 15, orderNum = "1", dictTable = "sys_user", dicCode = "id", dicText = "username") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; - @Excel(name = "主起草单位责任人", width = 15, orderNum = "1") - @ApiModelProperty(value = "主起草单位责任人用户名") - @JsonProperty("mainDraftingUnitResponsiblePerson_dictText") - private String mainDraftingUnitResponsiblePersonDictText; - - @ApiModelProperty(value = "标准推进人Id") + @Excel(name = "标准推进人", width = 15, orderNum = "1", dictTable = "sys_user", dicCode = "id", dicText = "username") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") + @ApiModelProperty(value = "标准推进人") private String standardPromoter; - @Excel(name = "标准推进人", width = 15, orderNum = "1") - @ApiModelProperty(value = "标准推进人用户名") - @JsonProperty("standardPromoter_dictText") - private String standardPromoterDictText; - @Excel(name = "草稿计划完成日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "草稿计划完成日期") private Date draftPlannedCompleteDate; @Excel(name = "征求意见稿计划完成日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "征求意见稿计划完成日期") private Date solicitationDraftPlanCompleteDate; @Excel(name = "计划报批日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "计划报批日期") private Date planApprovalDate; @Excel(name = "草稿完成日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "草稿完成日期") private Date draftCompletionDate; @Excel(name = "提交草稿日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "提交草稿日期") private Date draftSubmissionDate; @@ -126,26 +116,26 @@ public class EnterpriseStandardPlanVo { private String solicitationOpinionEnabled; @Excel(name = "征求意见稿完成日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "征求意见稿完成日期") private Date solicitationDraftCompletionDate; @Excel(name = "评审日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "评审日期") private Date reviewDate; @Excel(name = "报批日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "报批日期") private Date approvalDate; @Excel(name = "发布日期", width = 15, orderNum = "1", format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "发布日期") private Date releaseDate; diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/mapper/xml/EnterpriseStandardPlanMapper.xml b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/mapper/xml/EnterpriseStandardPlanMapper.xml index dc31f4b3..dc198108 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/mapper/xml/EnterpriseStandardPlanMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/mapper/xml/EnterpriseStandardPlanMapper.xml @@ -87,17 +87,13 @@ p.origin_en_standard_name, p.new_en_standard_no, p.new_en_standard_name, - ad.authDeparts, + p.auth_dept, p.en_standard_code, - cu.cooperateDeparts, - u1.id AS mainDraftingUser, - u1.username AS mainDraftingUserDictText, - d.id AS mainDraftingUnit, - d.depart_name AS mainDraftingUnitDictText, - u2.id AS mainDraftingUnitResponsiblePerson, - u2.username AS mainDraftingUnitResponsiblePersonDictText, - u3.id AS standardPromoter, - u3.username AS standardPromoterDictText, + p.cooperation_unit, + p.main_drafting_user, + p.main_drafting_unit, + p.main_drafting_unit_responsible_person, + p.standard_promoter, p.draft_planned_complete_date, p.solicitation_draft_plan_complete_date, p.plan_approval_date, @@ -116,20 +112,6 @@ LEFT JOIN sys_user AS u2 ON u2.id = p.main_drafting_unit_responsible_person LEFT JOIN sys_user AS u3 ON u3.id = p.standard_promoter LEFT JOIN sys_depart AS d ON d.id = p.main_drafting_unit - LEFT JOIN - (SELECT - ad.plan_id as id, - GROUP_CONCAT((d.depart_name) SEPARATOR ',') AS authDeparts - FROM - laws_enterprise_standard_plan_auth_dept AS ad - LEFT JOIN sys_depart AS d ON d.id = ad.dept_id) AS ad ON ad.id = p.id - LEFT JOIN - (SELECT - cu.plan_id as id, - GROUP_CONCAT((d.depart_name) SEPARATOR ',') AS cooperateDeparts - FROM - laws_enterprise_standard_plan_cooperate_unit AS cu - LEFT JOIN sys_depart AS d ON d.id = cu.dept_id) AS cu ON cu.id = p.id WHERE p.del_flag = 0 @@ -203,6 +185,12 @@ #{item} + + AND p.id NOT IN + + #{item} + + diff --git a/laws-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitItemsEO.java b/laws-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitItemsEO.java index fb1d7041..c8623397 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitItemsEO.java +++ b/laws-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitItemsEO.java @@ -24,13 +24,13 @@ public class SarFileSplitItemsEO implements Serializable { private String infoId; @ApiModelProperty(value = "条款号") - private String itemsNum; + private String itemNum; @ApiModelProperty(value = "条款名称") - private String itemsName; + private String itemTitle; @ApiModelProperty(value = "条款内容") - private String itermsConditions; + private String itemContent; @ApiModelProperty(value = "拆分目录id") private String menuId; diff --git a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java index 027fd027..48de88e7 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java +++ b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java @@ -238,7 +238,7 @@ public class FileSpiltService { String numberParent = p.getNumLevelText().substring(0, p.getNumLevelText().lastIndexOf(".")); if (numberMap.containsKey(numberParent)) { Integer numbernow = (Integer) numberMap.get(numberParent) + 1; - if (messageList != null && !messageList.isEmpty() && messageList.get(messageList.size() - 1).getItemsNum().equals(numberParent + "." + String.valueOf(numbernow))) { + if (messageList != null && !messageList.isEmpty() && messageList.get(messageList.size() - 1).getItemNum().equals(numberParent + "." + String.valueOf(numbernow))) { numberMap.put(numberParent, numbernow + 1); paragraphString = numberParent + "." + String.valueOf(numbernow + 1) + paragraphString; } else { @@ -265,7 +265,7 @@ public class FileSpiltService { documentTreeEO1.setPId(generalCatalogueId); documentTreeEO1.setInfoId(sarFileSplitInfoEO.getId()); documentTreeEO1.setDisplaySeq(treeListDisplay++); - documentTreeEO1.setName(message.getItemsNum()); + documentTreeEO1.setName(message.getItemNum()); documentTreeEO1.setValidFlag(0); // treeList.add(documentTreeEO1); @@ -346,8 +346,8 @@ public class FileSpiltService { ptest = Pattern.compile("^附录\\s{0,3}[A-Z]{1}"); matcher = ptest.matcher(paragraphString); // 获取当前最后一项num - String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; - if (matcher.find()&& !messageList.get(messageList.size() - 1).getItemsNum().equals("附录")) { + String appendixNum = messageList.get(messageList.size() - 1).getItemNum().split("\\.")[0]; + if (matcher.find()&& !messageList.get(messageList.size() - 1).getItemNum().equals("附录")) { if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { String itemName = "附录"; List clauseContent = new ArrayList<>(); @@ -789,10 +789,10 @@ public class FileSpiltService { public static SarFileSplitItemsEO getSarFileSplitItemsEO(String infoId, String itemsNum, String itemsName, List itemsCondi) { SarFileSplitItemsEO sarFileSplitItemsEO = new SarFileSplitItemsEO(); sarFileSplitItemsEO.setInfoId(infoId); - sarFileSplitItemsEO.setItemsNum(itemsNum); - sarFileSplitItemsEO.setItemsName(itemsName); + sarFileSplitItemsEO.setItemNum(itemsNum); + sarFileSplitItemsEO.setItemTitle(itemsName); sarFileSplitItemsEO.setItemsCondi(itemsCondi); - sarFileSplitItemsEO.setItermsConditions(""); + sarFileSplitItemsEO.setItemContent(""); sarFileSplitItemsEO.setId(UUIDUtils.randomUUID20()); sarFileSplitItemsEO.setValidFlag(0); sarFileSplitItemsEO.setCreationTime(new Date()); @@ -872,7 +872,7 @@ public class FileSpiltService { // 像每个条款中依次插入每一段的内容 public static void addItermsConditionsText(SarFileSplitItemsEO message, List itemsValList, String p) { message.getItemsCondi().add(p); - message.setItermsConditions(message.getItermsConditions() + "

" + p + "

"); + message.setItemTitle(message.getItemContent() + "

" + p + "

"); itemsValList.add(getSplitItemsValObject(message.getId(), SplitFilePragraTypeEnum.TEXT.getValue(), p, message.getItemsCondi().size(), null)); } @@ -911,7 +911,7 @@ public class FileSpiltService { rowNum++; }*/ message.getItemsCondi().add(table.getText()); - message.setItermsConditions(message.getItermsConditions() + tabaleStringNew); + message.setItemContent(message.getItemContent() + tabaleStringNew); itemsValList.add(getSplitItemsValObject(message.getId(), SplitFilePragraTypeEnum.TABLE.getValue(), tabaleStringNew.toString(), message.getItemsCondi().size(), null)); } @@ -929,7 +929,7 @@ public class FileSpiltService { String imgCon = path; String imgConVal = ""; message.getItemsCondi().add(imgConVal); - message.setItermsConditions(message.getItermsConditions() + imgConVal); + message.setItemContent(message.getItemContent() + imgConVal); itemsValList.add(getSplitItemsValObject(message.getId(), SplitFilePragraTypeEnum.IMG.getValue(), imgCon, message.getItemsCondi().size(), null)); } catch (Exception e) { e.printStackTrace(); diff --git a/laws-single-startup/src/main/resources/application-dev.yml b/laws-single-startup/src/main/resources/application-dev.yml index 84790955..d9b4245b 100644 --- a/laws-single-startup/src/main/resources/application-dev.yml +++ b/laws-single-startup/src/main/resources/application-dev.yml @@ -230,7 +230,9 @@ jero: webapp: D://opt//webapp uploadCos: 1 #导出pdf临时文件路径 设置 - exportPdfTempPath: D://opt//exportPdfTemp/ + exportPdfTempPath: D://opt//exportTemp/ + #导出excel临时文件路径 设置 + exportExcelTempPath: D://opt//exportExcelTemp #仿宋体字体文件路径 设置 simfangFontFilePath: D://opt//simfangFontFilePath//simfang.ttf shiro: