添加文档对比信息查看和全文对比接口

This commit is contained in:
gaosong
2022-08-02 16:59:44 +08:00
parent 0c1cc892ed
commit 1c2bea8bac
28 changed files with 2053 additions and 0 deletions
+19
View File
@@ -201,6 +201,25 @@
</exclusion>
</exclusions>
</dependency>
<!--中文分词工具包-->
<dependency>
<groupId>com.janeluo</groupId>
<artifactId>ikanalyzer</artifactId>
<version>2012_u6</version>
</dependency>
<!--HTML解析器-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<!--语言处理-->
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.7.5</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,196 @@
package com.jero.modules.compare.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.common.system.query.QueryGenerator;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.jero.modules.compare.service.ISarFileCompareInfoService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
/**
* @Description: 文档对比信息表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Api(tags = "文档对比信息表")
@RestController
@RequestMapping("/compare/sarFileCompareInfo")
@Slf4j
public class SarFileCompareInfoController extends JeroController<SarFileCompareInfo, ISarFileCompareInfoService> {
@Autowired
private ISarFileCompareInfoService sarFileCompareInfoService;
/**
* 分页列表查询
*
* @param sarFileCompareInfo
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "文档对比信息表-分页列表查询")
@ApiOperation(value = "文档对比信息表-分页列表查询", notes = "文档对比信息表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(SarFileCompareInfo sarFileCompareInfo,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<SarFileCompareInfo> queryWrapper = QueryGenerator.initQueryWrapper(sarFileCompareInfo, req.getParameterMap());
Page<SarFileCompareInfo> page = new Page<SarFileCompareInfo>(pageNo, pageSize);
IPage<SarFileCompareInfo> pageList = sarFileCompareInfoService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "文档对比信息表-列表查询")
@ApiOperation(value = "文档对比信息表-列表查询", notes = "文档对比信息表-列表查询")
@GetMapping(value = "/list")
public Result<List<SarFileCompareInfo>> queryList() {
List<SarFileCompareInfo> list = sarFileCompareInfoService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param sarFileCompareInfo
* @return
*/
@AutoLog(value = "文档对比信息表-添加")
@ApiOperation(value = "文档对比信息表-添加", notes = "文档对比信息表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody SarFileCompareInfo sarFileCompareInfo) {
sarFileCompareInfoService.add(sarFileCompareInfo);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param sarFileCompareInfo
* @return
*/
@AutoLog(value = "文档对比信息表-编辑")
@ApiOperation(value = "文档对比信息表-编辑", notes = "文档对比信息表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody SarFileCompareInfo sarFileCompareInfo) {
sarFileCompareInfoService.editById(sarFileCompareInfo);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "文档对比信息表-通过id删除")
@ApiOperation(value = "文档对比信息表-通过id删除", notes = "文档对比信息表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
sarFileCompareInfoService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "文档对比信息表-批量删除")
@ApiOperation(value = "文档对比信息表-批量删除", notes = "文档对比信息表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.sarFileCompareInfoService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "文档对比信息表-通过id查询")
@ApiOperation(value = "文档对比信息表-通过id查询", notes = "文档对比信息表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
SarFileCompareInfo sarFileCompareInfo = sarFileCompareInfoService.queryById(id);
if (sarFileCompareInfo == null) {
return Result.error("未找到对应数据");
}
return Result.OK(sarFileCompareInfo);
}
/**
* 导出excel
*
* @param request
* @param sarFileCompareInfo
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SarFileCompareInfo sarFileCompareInfo) {
return super.exportXls(request, sarFileCompareInfo, SarFileCompareInfo.class, "文档对比信息表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, SarFileCompareInfo.class);
}
/**
* 发起文档对比
*
* @param leftStandard
* @param rightStandard
* @param remark
* @return
*/
@AutoLog(value = "发起文档对比")
@ApiOperation(value = "发起文档对比", notes = "发起文档对比")
@RequestMapping(value = "/fullTextComparison", method = RequestMethod.POST)
public Result<?> fullTextComparison(@RequestParam(name = "leftStandard", required = true) String leftStandard,
@RequestParam(name = "rightStandard", required = true) String rightStandard,
@RequestParam(name = "remark", required = true) String remark) {
try {
Map<String, Object> resMap = sarFileCompareInfoService.fullTextComparison(leftStandard, rightStandard, remark);
return Result.OK(resMap);
} catch (Exception ex) {
log.error("发起文档对比失败:" + ex.getMessage());
return Result.OK("发起文档对比失败!");
}
}
}
@@ -0,0 +1,170 @@
package com.jero.modules.compare.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.jero.modules.compare.service.ISarFileCompareItemService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
/**
* @Description: 文档对比信息条款表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Api(tags="文档对比信息条款表")
@RestController
@RequestMapping("/compare/sarFileCompareItem")
@Slf4j
public class SarFileCompareItemController extends JeroController<SarFileCompareItem, ISarFileCompareItemService> {
@Autowired
private ISarFileCompareItemService sarFileCompareItemService;
/**
* 分页列表查询
*
* @param sarFileCompareItem
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "文档对比信息条款表-分页列表查询")
@ApiOperation(value="文档对比信息条款表-分页列表查询", notes="文档对比信息条款表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(SarFileCompareItem sarFileCompareItem,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<SarFileCompareItem> queryWrapper = QueryGenerator.initQueryWrapper(sarFileCompareItem, req.getParameterMap());
Page<SarFileCompareItem> page = new Page<SarFileCompareItem>(pageNo, pageSize);
IPage<SarFileCompareItem> pageList = sarFileCompareItemService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "文档对比信息条款表-列表查询")
@ApiOperation(value="文档对比信息条款表-列表查询", notes="文档对比信息条款表-列表查询")
@GetMapping(value = "/list")
public Result<List<SarFileCompareItem>> queryList() {
List<SarFileCompareItem> list = sarFileCompareItemService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param sarFileCompareItem
* @return
*/
@AutoLog(value = "文档对比信息条款表-添加")
@ApiOperation(value="文档对比信息条款表-添加", notes="文档对比信息条款表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody SarFileCompareItem sarFileCompareItem) {
sarFileCompareItemService.add(sarFileCompareItem);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param sarFileCompareItem
* @return
*/
@AutoLog(value = "文档对比信息条款表-编辑")
@ApiOperation(value="文档对比信息条款表-编辑", notes="文档对比信息条款表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody SarFileCompareItem sarFileCompareItem) {
sarFileCompareItemService.editById(sarFileCompareItem);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "文档对比信息条款表-通过id删除")
@ApiOperation(value="文档对比信息条款表-通过id删除", notes="文档对比信息条款表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
sarFileCompareItemService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "文档对比信息条款表-批量删除")
@ApiOperation(value="文档对比信息条款表-批量删除", notes="文档对比信息条款表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.sarFileCompareItemService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "文档对比信息条款表-通过id查询")
@ApiOperation(value="文档对比信息条款表-通过id查询", notes="文档对比信息条款表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
SarFileCompareItem sarFileCompareItem = sarFileCompareItemService.queryById(id);
if(sarFileCompareItem==null) {
return Result.error("未找到对应数据");
}
return Result.OK(sarFileCompareItem);
}
/**
* 导出excel
*
* @param request
* @param sarFileCompareItem
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SarFileCompareItem sarFileCompareItem) {
return super.exportXls(request, sarFileCompareItem, SarFileCompareItem.class, "文档对比信息条款表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, SarFileCompareItem.class);
}
}
@@ -0,0 +1,129 @@
package com.jero.modules.compare.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
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: 文档对比信息表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Data
@TableName("sar_file_compare_info")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="sar_file_compare_info对象", description="文档对比信息表")
public class SarFileCompareInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.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 java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**文档1*/
@Excel(name = "文档1", width = 15)
@ApiModelProperty(value = "文档1")
private String fileIdLeft;
/**编号1*/
@Excel(name = "编号1", width = 15)
@ApiModelProperty(value = "编号1")
private String serialNumberLeft;
/**标题1*/
@Excel(name = "标题1", width = 15)
@ApiModelProperty(value = "标题1")
private String titleLeft;
/**文本状态1*/
@Excel(name = "文本状态1", width = 15)
@ApiModelProperty(value = "文本状态1")
private String fileTypeLeft;
/**文件名称1*/
@Excel(name = "文件名称1", width = 15)
@ApiModelProperty(value = "文件名称1")
private String fileNameLeft;
/**文档2*/
@Excel(name = "文档2", width = 15)
@ApiModelProperty(value = "文档2")
private String fileIdRight;
/**编号2*/
@Excel(name = "编号2", width = 15)
@ApiModelProperty(value = "编号2")
private String serialNumberRight;
/**标题2*/
@Excel(name = "标题2", width = 15)
@ApiModelProperty(value = "标题2")
private String titleRight;
/**文本状态2*/
@Excel(name = "文本状态2", width = 15)
@ApiModelProperty(value = "文本状态2")
private String fileTypeRight;
/**文件名称2*/
@Excel(name = "文件名称2", width = 15)
@ApiModelProperty(value = "文件名称2")
private String fileNameRight;
/**发布状态*/
@Excel(name = "发布状态", width = 15)
@ApiModelProperty(value = "发布状态")
private String releaseState;
/**备注*/
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private String remark;
/**评论*/
@Excel(name = "评论", width = 15)
@ApiModelProperty(value = "评论")
private String comments;
}
@@ -0,0 +1,109 @@
package com.jero.modules.compare.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
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: 文档对比信息条款表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Data
@TableName("sar_file_compare_item")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="sar_file_compare_item对象", description="文档对比信息条款表")
public class SarFileCompareItem implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.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 java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**文档对比信息id*/
@Excel(name = "文档对比信息id", width = 15)
@ApiModelProperty(value = "文档对比信息id")
private String infoId;
/**条款id*/
@Excel(name = "条款id", width = 15)
@ApiModelProperty(value = "条款id")
private String itemsId;
/**条款名称*/
@Excel(name = "条款名称", width = 15)
@ApiModelProperty(value = "条款名称")
private String itemsName;
/**条款编号*/
@Excel(name = "条款编号", width = 15)
@ApiModelProperty(value = "条款编号")
private String itemsNum;
/**条款正文*/
@Excel(name = "条款正文", width = 15)
@ApiModelProperty(value = "条款正文")
private String itemsText;
/**条款展示编号*/
@Excel(name = "条款展示编号", width = 15)
@ApiModelProperty(value = "条款展示编号")
private Integer itemsDisplayNum;
/**目标位置*/
@Excel(name = "目标位置", width = 15)
@ApiModelProperty(value = "目标位置")
private Integer targetStand;
/**条款位置*/
@Excel(name = "条款位置", width = 15)
@ApiModelProperty(value = "条款位置")
private String leftOrRight;
/**备注*/
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private String remark;
}
@@ -0,0 +1,22 @@
package com.jero.modules.compare.enums;
public enum ValidFlagEnum {
VALID_TRUE(0, "有效"), VALID_FALSE(1, "无效");
private int value;
private String lable;
private ValidFlagEnum(int value, String lable) {
this.value = value;
this.lable = lable;
}
public int getValue() {
return value;
}
public String getLable() {
return lable;
}
}
@@ -0,0 +1,17 @@
package com.jero.modules.compare.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 文档对比信息表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
public interface SarFileCompareInfoMapper extends BaseMapper<SarFileCompareInfo> {
}
@@ -0,0 +1,17 @@
package com.jero.modules.compare.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 文档对比信息条款表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
public interface SarFileCompareItemMapper extends BaseMapper<SarFileCompareItem> {
}
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.compare.mapper.SarFileCompareInfoMapper">
<resultMap id="SarFileCompareInfoResultMap" type="com.jero.modules.compare.entity.SarFileCompareInfo">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="file_id_left" property="fileIdLeft" />
<result column="serial_number_left" property="serialNumberLeft" />
<result column="title_left" property="titleLeft" />
<result column="file_type_left" property="fileTypeLeft" />
<result column="file_name_left" property="fileNameLeft" />
<result column="file_id_right" property="fileIdRight" />
<result column="serial_number_right" property="serialNumberRight" />
<result column="title_right" property="titleRight" />
<result column="file_type_right" property="fileTypeRight" />
<result column="file_name_right" property="fileNameRight" />
<result column="release_state" property="releaseState" />
<result column="remark" property="remark" />
<result column="comments" property="comments" />
</resultMap>
</mapper>
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.compare.mapper.SarFileCompareItemMapper">
<resultMap id="SarFileCompareItemResultMap" type="com.jero.modules.compare.entity.SarFileCompareItem">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="info_id" property="infoId" />
<result column="items_id" property="itemsId" />
<result column="items_name" property="itemsName" />
<result column="items_num" property="itemsNum" />
<result column="items_text" property="itemsText" />
<result column="items_display_num" property="itemsDisplayNum" />
<result column="target_stand" property="targetStand" />
<result column="left_or_right" property="leftOrRight" />
<result column="remark" property="remark" />
</resultMap>
</mapper>
@@ -0,0 +1,73 @@
package com.jero.modules.compare.service;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* @Description: 文档对比信息表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
public interface ISarFileCompareInfoService extends IService<SarFileCompareInfo> {
/**
* 保存
*
* @param sarFileCompareInfo
* @return
*/
void add(SarFileCompareInfo sarFileCompareInfo);
/**
* 更新
*
* @param sarFileCompareInfo
* @return
*/
void editById(SarFileCompareInfo sarFileCompareInfo);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
SarFileCompareInfo queryById(String id);
/**
* 列表查询
*
* @return
*/
List<SarFileCompareInfo> queryList();
/**
* 发起全文对比
*
* @param leftStandard
* @param rightStandard
* @param remark
* @return
*/
Map<String, Object> fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception;
}
@@ -0,0 +1,61 @@
package com.jero.modules.compare.service;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: 文档对比信息条款表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
public interface ISarFileCompareItemService extends IService<SarFileCompareItem> {
/**
* 保存
*
* @param sarFileCompareItem
* @return
*/
void add(SarFileCompareItem sarFileCompareItem);
/**
* 更新
*
* @param sarFileCompareItem
* @return
*/
void editById(SarFileCompareItem sarFileCompareItem);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
SarFileCompareItem queryById(String id);
/**
* 列表查询
*
* @return
*/
List<SarFileCompareItem> queryList();
}
@@ -0,0 +1,348 @@
package com.jero.modules.compare.service.impl;
import com.jero.modules.compare.entity.SarFileCompareInfo;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.jero.modules.compare.enums.ValidFlagEnum;
import com.jero.modules.compare.mapper.SarFileCompareInfoMapper;
import com.jero.modules.compare.service.ISarFileCompareInfoService;
import com.jero.modules.compare.service.ISarFileCompareItemService;
import com.jero.modules.compare.utils.CompHanLPUtils;
import com.jero.modules.compare.utils.treeTool.Tree;
import com.jero.modules.compare.utils.treeTool.TreeNode;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
import com.jero.modules.split.entity.SarFileSplitItemsEO;
import com.jero.modules.split.entity.SarFileSplitItemsValEO;
import com.jero.modules.split.entity.SarFileSplitMenuEO;
import com.jero.modules.split.page.SarFileSplitItemsEOPage;
import com.jero.modules.split.page.SarFileSplitItemsValEOPage;
import com.jero.modules.split.page.SarFileSplitMenuEOPage;
import com.jero.modules.split.service.IFileSplitItemsEOService;
import com.jero.modules.split.service.ISarFileSplitInfoService;
import com.jero.modules.split.service.ISarFileSplitItemsValEOService;
import com.jero.modules.split.service.ISarFileSplitMenuEOService;
import com.jero.modules.system.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 文档对比信息表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Service
public class SarFileCompareInfoServiceImpl extends ServiceImpl<SarFileCompareInfoMapper, SarFileCompareInfo> implements ISarFileCompareInfoService {
@Autowired
private ISarFileSplitMenuEOService sarFileSplitMenuEOService;
@Autowired
private IFileSplitItemsEOService sarFileSplitItemsEOService;
@Autowired
private ISarFileSplitItemsValEOService sarFileSplitItemsValEOService;
@Autowired
private ISarFileSplitInfoService sarFileSplitInfoEOService;
@Autowired
private ISarFileCompareItemService sarFileCompareItemService;
/**
* 保存
*
* @param sarFileCompareInfo
* @return
*/
@Override
public void add(SarFileCompareInfo sarFileCompareInfo) {
Date now = new Date();
sarFileCompareInfo.setCreateTime(now);
sarFileCompareInfo.setUpdateTime(now);
save(sarFileCompareInfo);
}
/**
* 更新
*
* @param sarFileCompareInfo
* @return
*/
@Override
public void editById(SarFileCompareInfo sarFileCompareInfo) {
Date now = new Date();
sarFileCompareInfo.setUpdateTime(now);
saveOrUpdate(sarFileCompareInfo);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public SarFileCompareInfo queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<SarFileCompareInfo> queryList() {
return list();
}
/**
* 全文对比
*
* @param leftStandard
* @param rightStandard
* @return
* @throws Exception
*/
public Map<String, Object> fullTextComparison(String leftStandard, String rightStandard, String remark) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
List<Map<String, Object>> leftMapList = fullTextComparePackageData(leftStandard);
List<Map<String, Object>> rightMapList = fullTextComparePackageData(rightStandard);
List<Map<String, Object>> resLeftMapList = null;
List<Map<String, Object>> resRightMapList = null;
if (leftMapList != null && !leftMapList.isEmpty() && rightMapList != null && !rightMapList.isEmpty()) {
//双重循环找到相似度最高的条款做关联
for (int i = 0; i < leftMapList.size(); i++) {
String leftTxt = leftMapList.get(i).get("itemsText").toString();
//定义初始化的相似度
double compareSimilarity = 0.0;
if (!leftTxt.isEmpty()) {
for (int j = 0; j < rightMapList.size(); j++) {
String rightTxt = rightMapList.get(j).get("itemsText").toString();
double similarity = CompHanLPUtils.findSimilarity(leftTxt.trim(), rightTxt.trim());
//如果相似度超过0.6 并且该相似度比之前的相似度还高,那么该条款目前相似度最高
if (similarity >= 0.6 && compareSimilarity < similarity) {
compareSimilarity = similarity;
leftMapList.get(i).put("targetStand", j);
if (rightMapList.get(j).get("targetStand") == null) {
rightMapList.get(j).put("targetStand", i);
}
}
}
}
}
//循环对比结束,开始填充html代码
resLeftMapList = writeResultHtml(leftMapList);
resultMap.put("resLeftMapList", resLeftMapList);
resRightMapList = writeResultHtml(rightMapList);
resultMap.put("resRightMapList", resRightMapList);
}
//往全文比对历史表中添加数据
addStandCompareHis(leftStandard, rightStandard, remark, resLeftMapList, resRightMapList);
return resultMap;
}
/**
* 组装条款数据
*
* @param standardId
* @return
* @throws Exception
*/
public List<Map<String, Object>> fullTextComparePackageData(String standardId) throws Exception {
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
//调用查询条款接口
SarFileSplitItemsEOPage sarFileSplitItemsEOPage = new SarFileSplitItemsEOPage();
sarFileSplitItemsEOPage.setInfoId(standardId);
sarFileSplitItemsEOPage.setValidFlag(String.valueOf(ValidFlagEnum.VALID_TRUE.getValue()));
sarFileSplitItemsEOPage.setOrderBy("SAR_FILE_SPLIT_MENU.display_seq asc");
if (StringUtils.isNotEmpty(sarFileSplitItemsEOPage.getMenuId())) {
List<SarFileSplitMenuEO> sarFileSplitMenuEOList = sarFileSplitMenuEOService.queryByList(new SarFileSplitMenuEOPage());
Tree tree = new Tree<>(sarFileSplitMenuEOList);
TreeNode treeNode = tree.getTreeNode(sarFileSplitItemsEOPage.getMenuId());
List<String> menuIds = new ArrayList<>();
menuIds.add(treeNode.getNodeId());
for (TreeNode node : treeNode.getAllChildren()) {
menuIds.add(node.getNodeId());
}
sarFileSplitItemsEOPage.setMenuIdList(menuIds);
}
List<SarFileSplitItemsEO> itemList = sarFileSplitItemsEOService.queryByList(sarFileSplitItemsEOPage);
if (itemList != null && !itemList.isEmpty()) {
for (SarFileSplitItemsEO sarFileSplitItemsEO : itemList) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("itemsNum", sarFileSplitItemsEO.getItemsNum());
map.put("itemsName", sarFileSplitItemsEO.getItemsName());
map.put("itemsId", sarFileSplitItemsEO.getId());
//(内容1\n内容2\n格式)
String txt = "";
//调用条款内容详情表查询条款内容
SarFileSplitItemsValEOPage sarFileSplitItemsValEOPage = new SarFileSplitItemsValEOPage();
sarFileSplitItemsValEOPage.setItemId(sarFileSplitItemsEO.getId());
sarFileSplitItemsValEOPage.setValidFlag(String.valueOf(ValidFlagEnum.VALID_TRUE.getValue()));
sarFileSplitItemsValEOPage.setType("TEXT");
List<SarFileSplitItemsValEO> leftValList = sarFileSplitItemsValEOService.queryByList(sarFileSplitItemsValEOPage);
if (leftValList != null && !leftValList.isEmpty()) {
for (SarFileSplitItemsValEO sarFileSplitItemsValEO : leftValList) {
txt += "<p>" + sarFileSplitItemsValEO.getItemContent() + "</p>";
}
}
map.put("itemsText", txt);
map.put("targetStand", null);
map.put("menuId", sarFileSplitItemsEO.getMenuId());
mapList.add(map);
}
}
return mapList;
}
/**
* 填充html代码,返回结果
*
* @param resMapList
* @return
*/
public List<Map<String, Object>> writeResultHtml(List<Map<String, Object>> resMapList) throws Exception {
List<Map<String, Object>> resultMapList = new ArrayList<>();
for (Map resMap : resMapList) {
Map<String, Object> map = new HashMap<>();
StringBuilder stringBuilder = new StringBuilder();
Object itemsNum = resMap.get("itemsNum");
if (null != itemsNum) {
stringBuilder.append(itemsNum.toString());
} else {
stringBuilder.append("undefined");
}
stringBuilder.append("&nbsp;");
Object itemsName = resMap.get("itemsName");
if (null != itemsName) {
stringBuilder.append(itemsName.toString());
} else {
stringBuilder.append("undefined");
}
stringBuilder.append("<div>");
Object itemsTxt = resMap.get("itemsTxt");
if (null != itemsTxt) {
stringBuilder.append(itemsTxt.toString());
}
stringBuilder.append("</div>");
map.put("resultHtml", stringBuilder.toString());
Object targetStand = resMap.get("targetStand");
int targetStandInt = 0;
if (null != targetStand) {
targetStand = (Integer) targetStand;
}
map.put("targetStand", targetStand);
Object itemsId = resMap.get("itemsId");
String itemsIdStr = "undefined";
if (null != itemsId) {
itemsIdStr = itemsId.toString();
}
map.put("itemsId", itemsIdStr);
resultMapList.add(map);
}
return resMapList;
}
/**
* 保存比对历史
*
* @param leftStandId
* @param rightStandId
* @param remark
* @param resLeftMapList
* @param resRightMapList
* @throws Exception
*/
public void addStandCompareHis(String leftStandId, String rightStandId, String remark, List<Map<String, Object>> resLeftMapList, List<Map<String, Object>> resRightMapList) throws Exception {
SarFileSplitInfoEO leftInfo = sarFileSplitInfoEOService.queryById(leftStandId);
SarFileSplitInfoEO rightInfo = sarFileSplitInfoEOService.queryById(rightStandId);
//保存标准比对历史表数据
SarFileCompareInfo sarFileCompareInfo = new SarFileCompareInfo();
sarFileCompareInfo.setId(UUID.randomUUID().toString());
sarFileCompareInfo.setFileIdLeft(leftInfo.getFileId());
sarFileCompareInfo.setFileNameLeft(leftInfo.getFileName());
sarFileCompareInfo.setFileTypeLeft(leftInfo.getFileType());
sarFileCompareInfo.setSerialNumberLeft(leftInfo.getSerialNumber());
sarFileCompareInfo.setFileIdRight(rightInfo.getFileId());
sarFileCompareInfo.setFileNameRight(rightInfo.getFileName());
sarFileCompareInfo.setFileTypeRight(rightInfo.getFileType());
sarFileCompareInfo.setSerialNumberRight(rightInfo.getSerialNumber());
sarFileCompareInfo.setRemark(remark);
this.add(sarFileCompareInfo);
//保存标准的所有条款比对的历史数据
if (resLeftMapList != null && !resLeftMapList.isEmpty()) {
setStandCompareHisEO(resLeftMapList, sarFileCompareInfo.getId(), "LEFT");
}
if (resRightMapList != null && !resRightMapList.isEmpty()) {
setStandCompareHisEO(resRightMapList, sarFileCompareInfo.getId(), "RIGHT");
}
}
public void setStandCompareHisEO(List<Map<String, Object>> mapList, String id, String leftOrRight) throws Exception {
for (int i = 0; i < mapList.size(); i++) {
SarFileCompareItem sarFileCompareItem = new SarFileCompareItem();
sarFileCompareItem.setItemsId(id);
sarFileCompareItem.setItemsDisplayNum(i);
sarFileCompareItem.setLeftOrRight(leftOrRight);
Object itemsId = mapList.get(i).get("itemsId");
if (null != itemsId) {
sarFileCompareItem.setItemsId(itemsId.toString());
}
Object itemsName = mapList.get(i).get("itemsName");
if (null != itemsName) {
sarFileCompareItem.setItemsName(itemsName.toString());
}
Object itemsNum = mapList.get(i).get("itemsNum");
if (null != itemsNum) {
sarFileCompareItem.setItemsNum(itemsNum.toString());
}
Object itemsText = mapList.get(i).get("itemsText");
if (null != itemsText) {
sarFileCompareItem.setItemsText(itemsText.toString());
}
Object targetStand = mapList.get(i).get("targetStand");
if (targetStand != null) {
sarFileCompareItem.setTargetStand((int) targetStand);
}
sarFileCompareItemService.add(sarFileCompareItem);
}
}
}
@@ -0,0 +1,89 @@
package com.jero.modules.compare.service.impl;
import com.jero.modules.compare.entity.SarFileCompareItem;
import com.jero.modules.compare.mapper.SarFileCompareItemMapper;
import com.jero.modules.compare.service.ISarFileCompareItemService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 文档对比信息条款表
* @Author: jero-boot
* @Date: 2022-08-02
* @Version: V1.0
*/
@Service
public class SarFileCompareItemServiceImpl extends ServiceImpl<SarFileCompareItemMapper, SarFileCompareItem> implements ISarFileCompareItemService {
/**
* 保存
*
* @param sarFileCompareItem
* @return
*/
@Override
public void add(SarFileCompareItem sarFileCompareItem) {
Date now = new Date();
sarFileCompareItem.setCreateTime(now);
sarFileCompareItem.setUpdateTime(now);
save(sarFileCompareItem);
}
/**
* 更新
*
* @param sarFileCompareItem
* @return
*/
@Override
public void editById(SarFileCompareItem sarFileCompareItem) {
Date now = new Date();
sarFileCompareItem.setUpdateTime(now);
saveOrUpdate(sarFileCompareItem);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public SarFileCompareItem queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<SarFileCompareItem> queryList() {
return list();
}
}
@@ -0,0 +1,266 @@
package com.jero.modules.compare.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.tokenizer.Result;
import cn.hutool.extra.tokenizer.TokenizerEngine;
import cn.hutool.extra.tokenizer.TokenizerUtil;
import cn.hutool.extra.tokenizer.Word;
import cn.hutool.extra.tokenizer.engine.hanlp.HanLPEngine;
import cn.hutool.extra.tokenizer.engine.jieba.JiebaEngine;
import com.hankcs.hanlp.HanLP;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import java.io.IOException;
import java.io.StringReader;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class CompHanLPUtils {
/**
* 通过Ik 进行将句子分词
*
* @param text
* @return
*/
public static Vector<String> participleIk(String text) {
//对输入进行分词
Vector<String> str = new Vector<>();
try {
StringReader reader = new StringReader(text);
//当为true时,分词器进行最大词长切分
IKSegmenter ik = new IKSegmenter(reader, true);
Lexeme lexeme = null;
while ((lexeme = ik.next()) != null) {
str.add(lexeme.getLexemeText());
}
if (str.size() == 0) {
return null;
}
//分词后
log.info("str分词后:" + str);
} catch (IOException e) {
log.error(e.getMessage());
}
return str;
}
/**
* 结巴分词
*
* @param text
* @return
*/
public static Vector<String> participleJieBa(String text) {
JiebaEngine engine = new JiebaEngine();
Result results = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String result = CollUtil.join((Iterator<Word>) results, ",");
return new Vector<>(Arrays.asList(result.split(",")));
}
/**
* 中文分词
*
* @param text
* @return
*/
public static Vector<String> participleChinese(String text) {
//自动根据用户引入的分词库的jar来自动选择使用的引擎
TokenizerEngine engine = TokenizerUtil.createEngine();
//解析文本
//String text = "这两个方法的区别在于返回值";
Result results = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String result = CollUtil.join((Iterator<Word>) results, ",");
return new Vector<>(Arrays.asList(result.split(",")));
}
/**
* 采用 HanLP 进行自定义分词
*/
public static Vector<String> participleHanLP(String text) {
TokenizerEngine engine = new HanLPEngine();
//解析文本
//String text = "这两个方法的区别在于返回值";
Result results = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String result = CollUtil.join((Iterator<Word>) results, ",");
return new Vector<>(Arrays.asList(result.split(",")));
}
/**
* Java利用hanlp完成语句相似度分析
*
* @param sentenceOne
* @param sentenceTwo
* @return
*/
public static double findSimilarity(String sentenceOne, String sentenceTwo) {
List<String> sentOneWords = getSplitWords(sentenceOne);
List<String> sentTwoWords = getSplitWords(sentenceTwo);
List<String> allWords = mergeList(sentOneWords, sentTwoWords);
int[] statisticOne = statistic(allWords, sentOneWords);
int[] statisticTwo = statistic(allWords, sentTwoWords);
double dividend = 0;
double divisor1 = 0;
double divisor2 = 0;
int length = statisticOne.length;
for (int i = 0; i < length; i++) {
dividend += statisticOne[i] * statisticTwo[i];
divisor1 += Math.pow(statisticOne[i], 2);
divisor2 += Math.pow(statisticTwo[i], 2);
}
return dividend / (Math.sqrt(divisor1) * Math.sqrt(divisor2));
}
private static int[] statistic(List<String> allWords, List<String> sentWords) {
int[] result = new int[allWords.size()];
int size = allWords.size();
for (int i = 0; i < size; i++) {
result[i] = Collections.frequency(sentWords, allWords.get(i));
}
return result;
}
/**
* 去重
*
* @param listOne
* @param listTwo
* @return
*/
private static List<String> mergeList(List<String> listOne, List<String> listTwo) {
List<String> result = new ArrayList<>();
result.addAll(listOne);
result.addAll(listTwo);
return result.stream().distinct().collect(Collectors.toList());
}
/**
* 过滤标签
*
* @param sentence
* @return
*/
private static List<String> getSplitWords(String sentence) {
// 去除掉html标签
sentence = Jsoup.parse(sentence.replace(" ", "")).body().text();
// 标点符号会被单独分为一个Term,去除之
return HanLP.segment(sentence).stream().map(a -> a.word).filter(s -> !"`~!@#$^&*()=|{}':;',\\[\\].<>/?~@#¥……&*()——|{}【】‘;:”“'。,、? ".contains(s)).collect(Collectors.toList());
}
public static void main(String[] args) {
String str1 = "6转向系\n" +
"6.1汽车(三轮汽车除外)的方向盘应设置于左侧,其他机动车的方向盘不得设置于右侧;专项作业车、教练车按需要可设置左右两个方向盘。有驾驶室的正三轮摩托车如使用方向盘转向,则方向盘中心立柱距车辆纵向中心平面的水平距离应小于等于200 mm;其他摩托车不得使用方向盘转向。\n" +
"6.2机动车的方向盘(或方向把)应转动灵活,操纵方便,无卡滞现象。机动车应设置转向限位装置。转向系统在任何操作位置上,不得与其他部件有干涉现象。\n" +
"6.3机动车(摩托车、三轮汽车、手扶拖拉机运输机组除外)正常行驶时,转向轮转向后应有一定的回正能力(允许有残余角),以使机动车具有稳定的直线行驶能力。\n" +
"6.4机动车方向盘的最大自由转动量应小于或等于:\n" +
"a) 最大设计车速大于或等于100 km/h 的机动车:15°\n" +
"b) 三轮汽车:35°;\n" +
"c) 其他机动车:25° 。\n" +
"6.5汽车(三轮汽车除外)应具有适度的不足转向特性。\n" +
"6.6三轮汽车、摩托车的转向轮向左或向右转角应小于等于:\n" +
"a\t三轮汽车、三轮摩托车、正三轮轻便摩托车:45°;\n" +
"6\t\t两轮普通摩托车、两轮轻便摩托车:48°。\n" +
"6.6机动车在平坦、硬实、干燥和清洁的道路上行驶不应跑偏,其方向盘(或方向把)不应有摆振、路感不灵或其他异常现象。\n" +
"6.8机动车在平坦、硬实、干燥和清洁的水泥或沥青道路上行驶,以10 km/h的速度在5 s之内沿螺旋线从直线行驶过渡到外圆直径为25 m的车辆通道圆行驶,施加于方向盘外缘的最大切向力应小于等于245 N。\n" +
"6.9专用校车应采用转向助力装置;其他机动车转向轴最大设计轴荷大于4 000 kg时,也应采用转向助力装置。装有转向助力装置的机动车,转向时其转向助力功能不得出现时有时无的现象,且转向助力装置失效时仍应具有用方向盘控制机动车的能力。装有电动转向助力装置的汽车,在产品使用说明书规定的正常使用状态下,应保证转向助力装置的电能供应。\n" +
"6.10汽车和汽车列车(不计具有作业功能的专用装置的突出部分)、轮式拖拉机运输机组应能在同一个车辆通道圆内通过,车辆通道圆的外圆直径认为25.00 m,车辆通道圆的内圆直径D2为10.60 m。 汽车和汽车列车、轮式拖拉机运输机组由直线行驶过渡到上述圆周运动时,任何部分超出直线行驶时的 车辆外侧面垂直面的值(外摆值)应小于等于0.80 m(对铰接客车和铰接式无轨电车外摆值应小于等于 1.20 m),其试验方法见GB 1589。\n" +
"6.11汽车(三轮汽车除外)的车轮定位应与该车型的技术要求一致。对前轴采用非独立悬架的汽车(前轴采用双转向轴时除外),其转向轮的横向侧滑量,用侧滑台检验时侧滑量值应在±5 m/km之间。\n" +
"6.12转向节及臂,转向横、直拉杆及球销不得有裂纹和损伤,并且转向球销不应松旷。对机动车进行改装或修理时横、直拉杆不得拼焊。\n" +
"6.13三轮汽车、摩托车的前减振器、上下联板和方向把不应有变形和裂损。\n";
String str2 = "6转向系\n" +
"6.1汽车(三轮汽车除外)的方向盘应设置于左侧,其他机动车的方向盘不应设置于右侧;专项作业车、教练车按需要可设置左右两个方向盘。装有两个后轮、有驾驶室的正三轮摩托车如使用方向盘转向,则方向盘中心立柱距车辆纵向中心平面的水平距离应小于或等于200 mm ;其他摩托车不应使用方向盘转向。\n" +
"6.2机动车的方向盘(或方向把)应转动灵活,无卡滞现象。机动车应设置转向限位装置。转向系统在任何操作位置上,不应与其他部件有干涉现象。\n" +
"6.3机动车(摩托车、三轮汽车、手扶拖拉机运输机组除外〉正常行驶时,转向轮转向后应有一定的回正能力(允许有残余角),以使机动车具有稳定的直线行驶能力0\n" +
"6.4机动车方向盘的最大自由转动量应小于或等于:\n" +
"a) 最大设计车速大于或等于100 km/h 的机动车:15°\n" +
"b) 三轮汽车:35°;\n" +
"c) 其他机动车:25° 。\n" +
"6.5汽车(三轮汽车除外)应具有适度的不足转向特性。\n" +
"6.6三轮汽车、摩托车的转向轮向左或向右转角应小于或等于:\n" +
"a) 三轮汽车、三轮摩托车、正三轮轻便摩托车:45°;\n" +
"b)两轮普通摩托车、两轮轻便摩托车:48°0\n" +
"6.7机动车在平坦、硬实、干燥和清洁的道路上行驶不应跑偏,其方向盘(或方向把)不应有摆振等异常现象。\n" +
"6.8机动车在平坦、硬实、干燥和清洁的水泥或沥青道路上行驶,以10 km/h 的速度在5 s 之内沿螺旋线从直线行驶过渡到外圆直径为25m 的车辆通道圆行驶,施加于方向盘外缘的最大切向力应小于或等于245 N。\n" +
"6.9汽车(三轮汽车除外)的车轮定位应与该车型的技术要求一致。对前轴采用非独立悬架的汽车(前轴采用双转向轴时除外),其转向轮的横向侧滑量,用侧滑台检验时侧滑量值应小于或等于5 m/km。\n" +
"6.10 专用校车应采用转向助力装置;其他机动车转向轴最大设计轴荷大于4 000 kg 时,也应采用转向助力装置。装有转向助力装置的机动车,转向时其转向助力功能不应出现时有时无的现象,且转向助力装置失效时仍应具有用方向盘控制机动车的能力。\n" +
"6.11转向节及臂,转向横、直拉杆及球销应连接可靠,且不应有裂纹和损伤,并且转向球销不应松旷。对机动车进行改装或修理时横、直拉杆不应拼焊。\n" +
"6.12三轮汽车、摩托车的前减振器、上下联板和方向把不应有变形和裂损。";
String str3 = "\n" +
"5车辆识别代号的标示位置\n" +
"5.1每辆车辆都应具有唯一的车辆识别代号,并永久保持地标示在车辆上,同一车辆上标示的所有的 车辆识别代号的字码构成与排列顺序应相同。除第9章规定的情况外,不得对已标示的车辆识别代号 进行变更。\n" +
"5.2车辆应在产品标牌上标示车辆识别代号(L1、L3类车辆可除外),产品标牌的型式、标示位置、标示要求应符合GB/T 18411的规定。\n" +
"5.3车辆应至少有一个车辆识别代号直接打刻在车架(无车架的车辆为车身主要承载且不能拆卸的部件)能防止锈烛、磨损的部位上。其中:\n" +
"a\tM1类车辆的车辆识别代号应打刻在发动机舱内能防止替换的车辆结构件上,或打刻在车门 立柱上,如受结构限制没有打刻空间时也可打刻在右侧除行李舱外的车辆其他结构件上;\n" +
"b\t最大设计总质量大于或等于12000 kg的货车及所有牵引杆挂车,车辆识别代号应打刻在右前轮纵向中心线前端纵梁外侧,如受结构限制也可打刻在右前轮纵向中心线附近纵梁外侧;\n" +
"c\t半挂车和中置轴挂车的车辆识别代号应打刻在右前支腿前端纵梁外侧(无纵梁车辆除外);\n" +
"d\t其他汽车和无纵梁挂车的车辆识别代号应打刻在车辆右侧前部的车辆结构件上,如受结构限 制也可打刻在右侧其他车辆结构件上。\n" +
"打刻车辆识别代号的部件不应采用打磨、挖补、垫片、凿改、重新涂漆(设计和制造上为保护打刻的 车辆识别代号而采取涂漆工艺的情形除外)等方式处理,从上(前)方观察时,打刻区域周边足够大面积 的表面不应有任何覆盖物,如有覆盖物,该覆盖物的表面应明确标示“车辆识别代号”或“VIN”字样,且覆盖物在不使用任何专用工具的情况下能直接取下(或揭开)及复原,以方便地观察到足够大的包括打刻区域的表面。\n" +
"注1:打刻区域周边足够大面积的表面(足够大的包括打刻区域的表面)是指打刻车辆识别代号的部件的全部表面,但所暴露表面能满足查看打刻车辆识别代号的部件有无挖补、重新焊接、粘贴等痕迹的需要时,也应视为满足要求。\n" +
"注2:对摩托车,打刻的车辆识别代号在不举升车辆的情形下可观察、拓印的,视为满足要求。\n" +
"打刻的车辆识别代号从上(前)方应易于观察、拓印,对于汽车和挂车还应能拍照。\n" +
"5.4具有电子控制单元的汽车,其至少有一个电子控制单元应不可篡改地存储车辆识别代号。\n" +
"5.5 M1、N1类车辆应在靠近风窗立柱的位置标示车辆识别代号,该车辆识别代号在白天不需移动任何部件从车外即能清晰识读。\n" +
"5.6除按照5.2、5.3、5.4、5.5规定标示车辆识别代号之外,类车辆还应在行李舱的易见部位标示车辆识别代号;且若车辆制造厂选取车辆识别代号作为车辆及部件识别标记的标识信息,还应按照GB 30509的规定,标示车辆识别代号。\n" +
"5.7除按照5.2、5.3、5.4规定标示车辆识别代号之外,最大设计总质量大于或等于12000 kg的栏板式、仓栅式、自卸式、罐式货车及最大设计总质量大于或等于10000 kg的栏板式、仓栅式、自卸式、罐式挂车还应在其货箱或常压罐体(或设计和制造上固定在货箱或常压罐体上且用于与车架连接的结构件)上打刻至少两个车辆识别代号。打刻的车辆识别代号应位于货箱(常压罐体)左、右两侧或前端面且易于拍照;且若打刻在货箱(常压罐体)左、右两侧时,打刻的车辆识别代号距货箱(常压罐体)前端面的距离应小于或等于1 000 mm,若打刻在左、右两侧连接结构件时应尽量靠近货箱(常压罐体)前端面。\n" +
"5.8车辆制造厂应至少在一种随车文件中标示车辆识别代号。";
String str4 = "\n" +
"5.3车辆的驱动\n" +
"5.3.1车辆不应靠自身动力驱动。\n" +
"5.3.2在碰撞瞬间,车辆应不冉承受任何附加转向或驱动装置的作用。\n" +
"5.3.3车辆到达壁障的路线在横向任一方向偏离理论轨迹均不应超过150 mm。\n" +
"5.4 试验速度\n" +
"在碰撞瞬间,车辆速度应为504 km/h。如果试验在更高的碰撞速度下进行并且车辆符合要求,也认为试验合格。\n" +
"5.5对前排座椅假人的测量\n" +
"5.5.1为确定性能指标必需的所有测量,均应采用符合附录D要求的测量系统。\n" +
"5.5.2不同的参数应通过具备下列CFC(通道的频率等级)的独立数据通道来记录。\n" +
"5.5.2.1对假人头部的测量\n" +
"重心处的加速度(a)由加速度的二维分量计算得出。加速度分量测量时,CFC为1000。\n" +
"5.5.2.2对假人颈部的测量\n" +
"5.5.2.2.1在头颈连接处测量的轴向张力和前后剪切力,CFC为1000。\n" +
"5.5.2.2.2在头颈连接处测量的对Y轴的弯矩,CFC为600。\n" +
"5.5.2.3对假人胸部的测量\n" +
"胸部变形测量时,CFC为180。\n" +
"5.5.2.4对假人大腿的测量\n" +
"轴向压缩力测量时,CFC为600。";
double similarity = CompHanLPUtils.findSimilarity(str1, str2);
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMaximumIntegerDigits(2);//小数点前保留几位
nf.setMinimumFractionDigits(2);// 小数点后保留几位
String similarityDegree = nf.format(similarity);
System.out.println(similarityDegree);
System.out.println("======================================================");
double similarity1 = CompHanLPUtils.findSimilarity(str1, str3);
System.out.println(similarity1);
System.out.println("======================================================");
double similarity2 = CompHanLPUtils.findSimilarity(str1, str4);
System.out.println(similarity2);
System.out.println("======================================================");
double similarity3 = CompHanLPUtils.findSimilarity(str3, str4);
System.out.println(similarity3);
}
}
@@ -0,0 +1,21 @@
package com.jero.modules.compare.utils.treeTool;
import java.util.Comparator;
/**
* List 排序 Comparator
* @author david
*/
public class OrdNamComparator implements Comparator<TreeNode> {
@Override
public int compare(TreeNode t1, TreeNode t2) {
if (t1.getOrderNum() > t2.getOrderNum()) {
return 1;
}
if (t1.getOrderNum() < t2.getOrderNum()) {
return -1;
}
return t1.getNodeName().compareTo(t2.getNodeName());
}
}
@@ -0,0 +1,174 @@
package com.jero.modules.compare.utils.treeTool;
import com.jero.modules.compare.utils.treeTool.annotation.*;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;
import java.util.*;
/**
* 构建树形建构
*
* @author David
*/
public class Tree<T> {
/**
* 用于存放treeNode的Map
*/
private LinkedHashMap<String, TreeNode> treeNodesMap = new LinkedHashMap<>();
/**
* 用于存放treeNode的list
*/
private List<TreeNode> treeNodesList = new ArrayList<>();
/**
* 构造方法
*
* @param list
*/
public Tree(List<T> list) {
initTreeNodeMap(list);
initTreeNodeList();
}
/**
* 将List对象数据转为TreeNodeMap
*
* @param list
*/
private void initTreeNodeMap(List<T> list) {
TreeNode treeNode;
for (Object item : list) {
treeNode = new TreeNode();
treeNode.setNodeId(getFieldValue(item, "TreeNodeId"));
treeNode.setNodeName(getFieldValue(item, "TreeNodeName"));
treeNode.setParentNodeId(getFieldValue(item, "TreeNodeParentId"));
if(StringUtils.isEmpty(getFieldValue(item, "TreeNodeLevel"))) {
treeNode.setLevel(0);
} else {
treeNode.setLevel(Integer.parseInt(getFieldValue(item, "TreeNodeLevel")));
}
if(StringUtils.isEmpty(getFieldValue(item, "TreeNodeOrder"))) {
treeNode.setOrderNum(0);
} else {
treeNode.setOrderNum(Integer.parseInt(getFieldValue(item, "TreeNodeOrder")));
}
treeNode.setLastNodeNum(1);
treeNode.setData(item);
treeNodesMap.put(treeNode.getNodeId(), treeNode);
}
Iterator<TreeNode> iterator = treeNodesMap.values().iterator();
TreeNode parentTreeNode;
while (iterator.hasNext()) {
treeNode = iterator.next();
if (StringUtils.isEmpty(treeNode.getParentNodeId())) {
continue;
}
parentTreeNode = treeNodesMap.get(treeNode.getParentNodeId());
if (parentTreeNode != null) {
treeNode.setParent(parentTreeNode);
parentTreeNode.addChild(treeNode);
// 按照orderNum排序
Collections.sort(parentTreeNode.getChildren(), new OrdNamComparator());
// 判断这个节点是否是最子节点
if (treeNode.getChildren().size() == 0) {
treeNode.setLastNode(true);
}
// 计算每一个节点的最子节点的数量
List<TreeNode> children = parentTreeNode.getChildren();
if (children.size() > 0) {
int sum = 0;
for (TreeNode treeNode2 : children) {
sum += treeNode2.getLastNodeNum();
}
parentTreeNode.setLastNodeNum(sum);
}
}
}
}
private String getFieldValue(Object obj, String type) {
Class clz = obj.getClass();
Field[] fields = clz.getDeclaredFields();
String value = null;
try {
for(Field field : fields){
field.setAccessible(true);
switch (type){
case "TreeNodeId":
if(field.isAnnotationPresent(TreeNodeId.class)) {
value = String.valueOf(field.get(obj));
}
break;
case "TreeNodeParentId":
if(field.isAnnotationPresent(TreeNodeParentId.class)) {
value = String.valueOf(field.get(obj));
}
break;
case "TreeNodeName":
if(field.isAnnotationPresent(TreeNodeName.class)) {
value = String.valueOf(field.get(obj));
}
break;
case "TreeNodeOrder":
if(field.isAnnotationPresent(TreeNodeOrder.class)) {
value = String.valueOf(field.get(obj));
}
break;
case "TreeNodeLevel":
if(field.isAnnotationPresent(TreeNodeLevel.class)) {
value = String.valueOf(field.get(obj));
}
break;
default:
break;
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return value;
}
/**
* 根据treeNodesMap转为treeNodesList
*/
private void initTreeNodeList() {
if (treeNodesList.size() > 0) {
return;
}
if (treeNodesMap.size() == 0) {
return;
}
Iterator<TreeNode> iterator = treeNodesMap.values().iterator();
TreeNode treeNode;
while (iterator.hasNext()) {
treeNode = iterator.next();
if (treeNode.getParent() == null) {
this.treeNodesList.add(treeNode);
this.treeNodesList.addAll(treeNode.getAllChildren());
}
}
}
public List<TreeNode> getTree() {
return this.treeNodesList;
}
public List<TreeNode> getRoot() {
List<TreeNode> rootList = new ArrayList<>();
if (this.treeNodesList.size() > 0) {
for (TreeNode node : treeNodesList) {
if (node.getParent() == null) {
rootList.add(node);
Collections.sort(rootList, new OrdNamComparator());
}
}
}
return rootList;
}
public TreeNode getTreeNode(String nodeId) {
return this.treeNodesMap.get(nodeId);
}
}
@@ -0,0 +1,202 @@
package com.jero.modules.compare.utils.treeTool;
import com.alibaba.fastjson.annotation.JSONField;
import java.util.ArrayList;
import java.util.List;
/**
* @author David
*/
public class TreeNode {
/**
* 树节点ID
*/
@JSONField(ordinal = 1)
private String nodeId;
/**
* 树节点名称
*/
@JSONField(ordinal = 2)
private String nodeName;
/**
* 父节点ID
*/
@JSONField(ordinal = 3)
private String parentNodeId;
/**
* 节点在树中的排序号
*/
@JSONField(ordinal = 4)
private int orderNum;
/**
* 节点所在的层级
*/
@JSONField(ordinal = 5)
private int level;
/**
* 最子节点的数量
*/
@JSONField(ordinal = 6)
private int lastNodeNum;
/**
* 是否是最子节点
*/
@JSONField(ordinal = 7)
private boolean lastNode;
private Object data;
/**
* 当前节点的儿子节点
*/
@JSONField(ordinal = 8)
private List<TreeNode> children = new ArrayList<>();
/**
* 当前节点的完整路径
*/
@JSONField(ordinal = 9)
private String completeName;
/**
* 当前节点的父级节点
* 转json的时候忽略此属性,因为此属性到前端无作用
*/
@JSONField(serialize = false)
private TreeNode parent;
/**
* 当前节点的子孙节点
* 转json的时候忽略此属性,因为此属性到前端无作用
*/
@JSONField(serialize = false)
private List<TreeNode> allChildren = new ArrayList<>();
private int standFlag;
public TreeNode(TreeNode obj) {
this.orderNum = obj.getOrderNum();
this.level = obj.getLevel();
this.lastNodeNum = obj.getLastNodeNum();
}
public TreeNode() {
}
public void addChild(TreeNode treeNode) {
this.children.add(treeNode);
}
public void removeChild(TreeNode treeNode) {
this.children.remove(treeNode);
}
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getParentNodeId() {
return parentNodeId;
}
public void setParentNodeId(String parentNodeId) {
this.parentNodeId = parentNodeId;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public int getOrderNum() {
return orderNum;
}
public void setOrderNum(int orderNum) {
this.orderNum = orderNum;
}
public int getLastNodeNum() {
return lastNodeNum;
}
public void setLastNodeNum(int lastNodeNum) {
this.lastNodeNum = lastNodeNum;
}
public boolean isLastNode() {
return lastNode;
}
public void setLastNode(boolean lastNode) {
this.lastNode = lastNode;
}
public List<TreeNode> getAllChildren() {
if (this.allChildren.isEmpty()) {
for (TreeNode treeNode : this.children) {
this.allChildren.add(treeNode);
this.allChildren.addAll(treeNode.getAllChildren());
}
}
return this.allChildren;
}
public String getCompleteName() {
return completeName;
}
public void setCompleteName(String completeName) {
this.completeName = completeName;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public int getStandFlag() {
return standFlag;
}
public void setStandFlag(int standFlag) {
this.standFlag = standFlag;
}
}
@@ -0,0 +1,12 @@
package com.jero.modules.compare.utils.treeTool.annotation;
import java.lang.annotation.*;
/**
* @author david
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface TreeNodeId {
}
@@ -0,0 +1,12 @@
package com.jero.modules.compare.utils.treeTool.annotation;
import java.lang.annotation.*;
/**
* @author david
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface TreeNodeLevel {
}
@@ -0,0 +1,12 @@
package com.jero.modules.compare.utils.treeTool.annotation;
import java.lang.annotation.*;
/**
* @author david
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface TreeNodeName {
}
@@ -0,0 +1,12 @@
package com.jero.modules.compare.utils.treeTool.annotation;
import java.lang.annotation.*;
/**
* @author david
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface TreeNodeOrder {
}
@@ -0,0 +1,12 @@
package com.jero.modules.compare.utils.treeTool.annotation;
import java.lang.annotation.*;
/**
* @author david
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
public @interface TreeNodeParentId {
}
@@ -3,6 +3,7 @@ package com.jero.modules.split.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.split.entity.SarFileSplitItemsEO;
import com.jero.modules.split.page.SarFileSplitItemsEOPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -65,4 +66,6 @@ public interface FileSplitItemsEOMapper extends BaseMapper<SarFileSplitItemsEO>
int deleteByMenuIds(@Param("idList") List<String> idList);
int insertForeach(List<SarFileSplitItemsEO> list);
List<SarFileSplitItemsEO> queryByList(SarFileSplitItemsEOPage page);
}
@@ -118,4 +118,21 @@
</foreach>
</insert>
<select id="queryByList" resultType="com.jero.modules.split.entity.SarFileSplitItemsEO" parameterType="com.jero.modules.split.page.SarFileSplitItemsEOPage">
select * from SAR_FILE_SPLIT_ITEMS
left join SAR_FILE_SPLIT_MENU on SAR_FILE_SPLIT_ITEMS.MENU_ID = SAR_FILE_SPLIT_MENU.id
<if test="infoId != null" >
and SAR_FILE_SPLIT_ITEMS.info_id ${infoIdOperator} #{infoId}
</if>
<if test="menuId != null">
and SAR_FILE_SPLIT_ITEMS.MENU_ID in
<foreach collection="menuIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="pager.orderCondition != null and pager.orderCondition != ''" >
${pager.orderCondition}
</if>
</select>
</mapper>
@@ -63,6 +63,7 @@ public class SarFileSplitItemsEOPage extends BasePage {
private String modifyUserOperator = "=";
private String sMenuId;
private List<String> idList;
private List<String> menuIdList;
private int tableIndex = 1;
private int imgIndex = 1;
@@ -83,4 +83,6 @@ public interface IFileSplitItemsEOService extends IService<SarFileSplitItemsEO>
int insertForeach(List<SarFileSplitItemsEO> messageList); // 拆分已入库文件专用
List<Map<String, Object>> getHeader(String flag, String cut);
List<SarFileSplitItemsEO> queryByList(SarFileSplitItemsEOPage page);
}
@@ -3731,4 +3731,15 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
}
return list;
}
/**
* 查找拆分列表
* @param page
* @return
*/
@Override
public List<SarFileSplitItemsEO> queryByList(SarFileSplitItemsEOPage page){
return dao.queryByList(page);
}
}