Merge remote-tracking branch 'origin/dev_20230216' into dev_20230216

This commit is contained in:
SUNJIABIN
2023-04-10 16:48:33 +08:00
6 changed files with 394 additions and 1 deletions
@@ -75,6 +75,8 @@ public class SarBussStandAttrInfo extends BaseEntity {
@ApiModelProperty(value = "原文件")
@TableField("FBGBUSS")
private String fbgbuss;
private String fbgbussNmae;
//
// @TableField("SVPPS")
// private String svpps;
@@ -274,6 +274,8 @@ public class SarBussionessStandServiceImpl extends ServiceImpl<SarBussionessStan
@Autowired
private TsInstitutionDao tsInstitutionDao;
@Autowired
private IAttFileEOService iAttFileEOService;
@Override
public SarBussionessStand getStandInfoByReviseStatus(String reviseStatus,String standSort,String taskId){
@@ -4433,6 +4435,8 @@ public class SarBussionessStandServiceImpl extends ServiceImpl<SarBussionessStan
@Override
public ResponseMessage selectByIdAtt(String id) {
SarBussStandAttrInfo sarBussStandAttrInfo = sarBussStandAttrInfoService.selectByIdAtt(id);
AttFileEO byId = iAttFileEOService.getFileInfo(sarBussStandAttrInfo.getFbgbuss());
sarBussStandAttrInfo.setFbgbussNmae(byId.getOldFileName());
return Result.success(sarBussStandAttrInfo);
}
@@ -1,6 +1,10 @@
package com.adc.da.slrs.sarStandItems.controller;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.adc.da.common.FileUnZip;
import com.adc.da.common.SplitTableInfo;
import com.adc.da.http.PageInfo;
import com.adc.da.http.ResponseMessage;
import com.adc.da.http.Result;
@@ -8,18 +12,32 @@ import com.adc.da.http.Result;
import com.adc.da.slrs.sarLawsAttrDetailedList.entity.LawsDto;
import com.adc.da.slrs.sarStandItems.entity.*;
import com.adc.da.slrs.sarStandItems.service.impl.SarStandItemsServiceImpl;
import com.adc.da.slrs.standardSplit.dto.SarFileSplitItemsImportDto;
import com.adc.da.slrs.standardSplit.entity.SarFileSplitInfoEO;
import com.adc.da.slrs.standardSplit.entity.SarFileSplitItemsEO;
import com.adc.da.slrs.standardSplit.service.SarFileSplitItemsEOService;
import com.adc.da.util.UUIDUtils;
import com.adc.da.utils.util.POIReadExcelToHtml;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import com.adc.da.base.web.BaseController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.util.*;
import static com.adc.da.utils.util.ExcelUtil.checkObjAllFieldsIsNull;
/**
* <p>
* 前端控制器
@@ -36,6 +54,12 @@ public class SarStandItemsController extends BaseController<SarStandItems> {
@Autowired
private SarStandItemsServiceImpl ServiceImpl;
@Autowired
private SarFileSplitItemsEOService sarFileSplitItemsEOService;
@Value("${file.path}")
private String filePath;
@ApiOperation(value = "分解单查询")
@GetMapping("/findAllItems")
public ResponseMessage findAllItems( @RequestParam("type") String type,@RequestParam("ids") String ids){
@@ -152,4 +176,6 @@ public class SarStandItemsController extends BaseController<SarStandItems> {
List<SarStandItemsDto> ItemDto = ServiceImpl.findTermsConditions(idList);
return Result.success("200",ItemDto);
}
}
@@ -85,7 +85,7 @@ public class SarFileSplitItemsEOController extends BaseController<SarFileSplitIt
// @RequiresPermissions("lawss:sarFileSplitItems:page")
public ResponseMessage<PageInfo<SarFileSplitItemsEO>> page(SarFileSplitItemsEOPage page) throws Exception {
//6-18 端哥已做修改
sarFileSplitItemsEOService.selectByName(page.getItemsName());
//sarFileSplitItemsEOService.selectByName(page.getItemsName());
Map<String,Object> map = sarFileSplitItemsEOService.getByPage(page);
page.getPager().setRowCount((Integer) map.get("count"));
return Result.success(getPageInfo(page.getPager(), (List<SarFileSplitItemsEO>) map.get("list")));
@@ -509,6 +509,7 @@ public class SarFileSplitItemsEOController extends BaseController<SarFileSplitIt
}
}
@ApiOperation(value = "|SarFileSplitItemsEO|导入")
@PostMapping(value = "/importSplitItemsZip")
public ResponseMessage<SarFileSplitItemsEO> importSplitItemsZip(@RequestParam(value = "file", required = false) MultipartFile file,
@@ -694,4 +695,132 @@ public class SarFileSplitItemsEOController extends BaseController<SarFileSplitIt
throw new AdcDaBaseException("下载文件失败,请重试");
}
}
@ApiOperation(value = "|SarFileSplitItemsEO|导入")
@PostMapping(value = "/importSplitItemsInfoZip")
public com.adc.da.util.http.ResponseMessage<SarFileSplitItemsEO> importSplitItemsInfoZip(@RequestParam(value = "file", required = false) MultipartFile file,
SarFileSplitInfoEO sarFileSplitInfoEO) throws Exception {
//验证文件名是否合格
/* 截取后缀名 */
sarFileSplitInfoEO.setFileName(file.getOriginalFilename());
int pos = file.getOriginalFilename().lastIndexOf(".");
String str = file.getOriginalFilename().substring(pos+1).toLowerCase();
String filenameorg = file.getOriginalFilename().substring(0,pos);
//判断上传文件必须是zip
if (!str.equals("zip")) {
return com.adc.da.util.http.Result.error("fail", "请上传zip文件");
}
String path = filePath + "/modal/"+filenameorg;
File saveDirectory = new File(path);
if(!saveDirectory.isDirectory()){
saveDirectory.mkdir();
}
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path +"/"+ file.getOriginalFilename()));
try{
//解压缩
String zipEntryName = FileUnZip.unZipFiles(path +"/"+ file.getOriginalFilename(),path);
// 数据相关处理,
// 1.获取其中的Excel,
List<File> excelfilelist = FileUnZip.readExcelFile(zipEntryName);
if(excelfilelist.size()<1){
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "压缩包内没有上传Excel数据");
} else if (excelfilelist.size()>1) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "压缩包内有多个Excel数据源");
}
File excelfile = excelfilelist.get(0);
// 导入参数设置,默认即可
ImportParams params = new ImportParams();
try {
String fields[] = {"条款号", "条款名称","条款内容"};
params.setImportFields(fields);
// params.setReadSingleCell(false);
List<SarFileSplitItemsImportDto> result = new ArrayList<>();
result = ExcelImportUtil.importExcel(excelfile, SarFileSplitItemsImportDto.class, params);
Long getExcelInfo = System.currentTimeMillis();
//excel读取到的数据
List<SarFileSplitItemsImportDto> datas = result;
if(datas!=null &&!datas.isEmpty()){
try {
//获取全部sheet页中表格
Workbook workbook = WorkbookFactory.create(new FileInputStream(excelfile));
//XSSFWorkbook workbook=new XSSFWorkbook(new FileInputStream(excelfile));
Sheet sheet=null;
List<SplitTableInfo> getSheetTableList = new ArrayList();
for (int i = 1; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表
sheet = workbook.getSheetAt(i);
SplitTableInfo splitTableInfo = new SplitTableInfo();
splitTableInfo.setTableName(sheet.getSheetName());
String tableHtml = POIReadExcelToHtml.readExcelToHtml(workbook,i,false);
splitTableInfo.setTableHtml(tableHtml);
getSheetTableList.add(splitTableInfo);
}
int i = 0 ;
List<SarFileSplitItemsImportDto> datasUpdate = new ArrayList<>();
//2019.05.14 当读取exceL出现空行过多时,空行数为20以上时中断读取,将数据清洗为新的list
for(SarFileSplitItemsImportDto sarStandImportDto :datas){
if(i>20){
break;
}
//判断此行数据是否全部为空
if(checkObjAllFieldsIsNull(sarStandImportDto)){
i++;
//是则不读取
continue;
}
//判断此行数据是否全部为空
if(org.apache.commons.lang.StringUtils.isNotBlank(sarStandImportDto.getItemsNum())) {
if (sarStandImportDto.getItemsNum().contains("模板说明")) {
i++;
//是则不读取
continue;
}
}
//添加换行
// if(StringUtils.isBlank(sarStandImportDto.getItemsNum()) && StringUtils.isBlank(sarStandImportDto.getItemsName())) {
// if(StringUtils.isNotBlank(sarStandImportDto.getItermsConditions())){
// sarStandImportDto.setItermsConditions("<p>"+sarStandImportDto.getItermsConditions());
// }
// }
i = 0;
datasUpdate.add(sarStandImportDto);
}
String unzipfilepath = zipEntryName;
com.adc.da.util.http.ResponseMessage<SarFileSplitItemsEO> message = sarFileSplitItemsEOService.importSplitItemsInfo
(datasUpdate,unzipfilepath,sarFileSplitInfoEO,getSheetTableList);
workbook.close();
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return message;
} catch (Exception e) {
e.printStackTrace();
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", e.getMessage());
}
}else{
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "没有可导入的数据,请检查!");
}
} catch (NoSuchElementException e){
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "没有可导入的数据,请检查!");
} catch (Exception e) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "读取失败,请严格按照模板文件导入数据");
}
} catch (Exception e) {
//删除原上传文件
FileUnZip.deleteDir(saveDirectory);
return com.adc.da.util.http.Result.error("fail", "读取失败,请严格按照模板文件导入数据");
}
}
}
@@ -50,4 +50,7 @@ public interface SarFileSplitItemsEOService {
List<SarFileSplitItemsEO> queryByList2(SarFileSplitItemsEOPage page);
void selectByName(String itemsName);
ResponseMessage<SarFileSplitItemsEO> importSplitItemsInfo(List<SarFileSplitItemsImportDto> datasUpdate, String unzipfilepath, SarFileSplitInfoEO sarFileSplitInfoEO, List<SplitTableInfo> getSheetTableList);
}
@@ -6,6 +6,8 @@ import com.adc.da.att.vo.AttFileVo;
import com.adc.da.common.FileUnZip;
import com.adc.da.common.SplitTableInfo;
import com.adc.da.login.util.UserUtils;
import com.adc.da.slrs.sarStandItems.dao.SarStandItemsDao;
import com.adc.da.slrs.sarStandItems.entity.SarStandItems;
import com.adc.da.slrs.standardSplit.dao.*;
import com.adc.da.slrs.standardSplit.dto.*;
import com.adc.da.slrs.standardSplit.entity.*;
@@ -76,6 +78,9 @@ public class SarFileSplitItemsEOServiceImpl implements SarFileSplitItemsEOServic
@Value("${elasticsearch.img}")
private String elasticsearchImg;//图片拆分自调地址
@Autowired
private SarStandItemsDao sarStandItemsDao;
@Override
public Map<String, Object> getByPage(SarFileSplitItemsEOPage page) {
@@ -872,6 +877,230 @@ public class SarFileSplitItemsEOServiceImpl implements SarFileSplitItemsEOServic
sarFileSplitItemsEODao.selectByName(itemsName);
}
@Override
@Transactional
public ResponseMessage<SarFileSplitItemsEO> importSplitItemsInfo(List<SarFileSplitItemsImportDto> list, String filepath,
SarFileSplitInfoEO sarFileSplitInfoEO, List<SplitTableInfo> getSheetTableList) {
//此处需要做各种验证,数据库操作
try {
String infoId = null;
if (StringUtils.isNotBlank(sarFileSplitInfoEO.getInfoId())){
infoId = sarFileSplitInfoEO.getInfoId();
sarFileSplitInfoEO.setInfoId(null);
}else {
infoId = UUIDUtils.randomUUID20();
}
Map map = validateImportDatas(list,filepath);
boolean isOk = (boolean) map.get("result");
if (!isOk) {
//验证没有通过
String message = (String) map.get("message");
return Result.error("fail", message);
}
//将导入数据循环合并整理后 新增至相应表
list = (List<SarFileSplitItemsImportDto>) map.get("resultList");
int countSuccess = 0;
// 最终添加的数据
List<SarFileSplitItemsEO> addItemsEOList = new ArrayList<>();
int itemNum = 0;
String firstId = UUIDUtils.randomUUID20();
String menuid = sarFileSplitInfoEO.getMenuId();
if (null == menuid) {
SarFileSplitItemsEO firstItem = new SarFileSplitItemsEO();
firstItem.setId(firstId);
firstItem.setItemsNum("总目录");
firstItem.setValidFlag(0);
firstItem.setCreationTime(new Date());
firstItem.setModifyTime(new Date());
addItemsEOList.add(firstItem); //新的总目录家在了添加的list中 当前仅一条
}
for (SarFileSplitItemsImportDto importDto : list) { //遍历传入的值
//判断此行数据是否全部为空,是则不读取
if(checkObjAllFieldsIsNull(importDto)){
continue;
}
SarFileSplitItemsEO sarFileSplitItemsEO = new SarFileSplitItemsEO();
BeanUtils.copyProperties(importDto, sarFileSplitItemsEO);
sarFileSplitItemsEO.setInfoId(infoId);
List<SarFileSplitItemsValEO> addItemValList = new ArrayList<>();
if (addItemsEOList != null && !addItemsEOList.isEmpty()) {
SarFileSplitItemsEO oldItems = addItemsEOList.get(addItemsEOList.size()-1);
if (itemNum > 0 && sarFileSplitItemsEO.getItemsNum().equals(oldItems.getItemsNum())
&& sarFileSplitItemsEO.getItemsName().equals(oldItems.getItemsName())) {
addItemValList = oldItems.getItemValEOList();
String itemContent = oldItems.getItermsConditions()+sarFileSplitItemsEO.getItermsConditions();
oldItems.setItermsConditions(itemContent);
if(StringUtils.isBlank(sarFileSplitItemsEO.getItermsConditions())){
continue;
}
String[] valArr = sarFileSplitItemsEO.getItermsConditions().split("\n");
if (valArr != null && valArr.length > 0) {
for (int i=0;i<valArr.length;i++) {
SarFileSplitItemsValEO valEO = new SarFileSplitItemsValEO();
boolean isText = true;
if (getSheetTableList != null && !getSheetTableList.isEmpty()) {
for (SplitTableInfo splitTableInfo : getSheetTableList) {
if (splitTableInfo.getTableName().equals(valArr[i])) {
isText = false;
valEO.setType("TABLE");
valEO.setItemContent(splitTableInfo.getTableHtml());
}
}
}
List<File> nowfilelist = FileUnZip.readFileByFilename(filepath, valArr[i]);
if (nowfilelist != null && !nowfilelist.isEmpty()) {
AttFileVo attFileVo = attFileEOService.saveFileInfo(nowfilelist.get(0));
if (attFileVo != null) {
isText = false;
//String path = "E:/data/slrs/file" + attFileVo.getFilePath()+attFileVo.getOldFileName();
String pathSrc = elasticsearchImg + "/api/att/attFile/getFileInfo?fileId=" + attFileVo.getId();
String imgCon = "<img class=\'wordImg\' src=\'" + pathSrc + "\'>";
valEO.setType("IMG");
valEO.setItemContent("<p>"+imgCon+"<p>");
}
}
if (isText) {
valEO.setType("TEXT");
valEO.setItemContent(valArr[i]);
}
addItemValList.add(valEO);
}
}
oldItems.setItemValEOList(addItemValList);
}else {
String[] valArr = sarFileSplitItemsEO.getItermsConditions().split("\n");
if (valArr != null && valArr.length > 0) {
for (int i=0;i<valArr.length;i++) {
SarFileSplitItemsValEO valEO = new SarFileSplitItemsValEO();
boolean isText = true;
if (getSheetTableList != null && !getSheetTableList.isEmpty()) {
for (SplitTableInfo splitTableInfo : getSheetTableList) {
if (splitTableInfo.getTableName().equals(valArr[i])) {
isText = false;
valEO.setType("TABLE");
valEO.setItemContent(splitTableInfo.getTableHtml());
}
}
}
List<File> nowfilelist = FileUnZip.readFileByFilename(filepath, valArr[i]);
if (nowfilelist != null && !nowfilelist.isEmpty()) {
AttFileVo attFileVo = attFileEOService.saveFileInfo(nowfilelist.get(0));
if (attFileVo != null) {
isText = false;
//String path = "E:/data/slrs/file" + attFileVo.getFilePath()+attFileVo.getOldFileName();
String pathSrc = elasticsearchImg + "/api/att/attFile/getFileInfo?fileId=" + attFileVo.getId();
String imgCon = "<img class=\'wordImg\' src=\'" + pathSrc + "\'>";
valEO.setType("IMG");
valEO.setItemContent("<p>"+imgCon+"<p>");
}
}
if (isText) {
valEO.setType("TEXT");
valEO.setItemContent(valArr[i]);
}
addItemValList.add(valEO);
}
}
sarFileSplitItemsEO.setItemValEOList(addItemValList);
addItemsEOList.add(sarFileSplitItemsEO);
}
} else {
String[] valArr = sarFileSplitItemsEO.getItermsConditions().split("\n");
if (valArr != null && valArr.length > 0) {
for (int i=0;i<valArr.length;i++) {
SarFileSplitItemsValEO valEO = new SarFileSplitItemsValEO();
boolean isText = true;
if (getSheetTableList != null && !getSheetTableList.isEmpty()) {
for (SplitTableInfo splitTableInfo : getSheetTableList) {
if (splitTableInfo.getTableName().equals(valArr[i])) {
isText = false;
valEO.setType("TABLE");
valEO.setItemContent(splitTableInfo.getTableHtml());
}
}
}
List<File> nowfilelist = FileUnZip.readFileByFilename(filepath, valArr[i]);
if (nowfilelist != null && !nowfilelist.isEmpty()) {
AttFileVo attFileVo = attFileEOService.saveFileInfo(nowfilelist.get(0));
if (attFileVo != null) {
isText = false;
//String path = "E:/data/slrs/file" + attFileVo.getFilePath()+attFileVo.getOldFileName();
String pathSrc = elasticsearchImg + "/api/att/attFile/getFileInfo?fileId=" + attFileVo.getId();
String imgCon = "<img class=\'wordImg\' src=\'" + pathSrc + "\'>";
valEO.setType("IMG");
valEO.setItemContent("<p>"+imgCon+"<p>");
}
}
if (isText) {
valEO.setType("TEXT");
valEO.setItemContent(valArr[i]);
}
addItemValList.add(valEO);
}
}
sarFileSplitItemsEO.setItemValEOList(addItemValList);
addItemsEOList.add(sarFileSplitItemsEO);
}
itemNum++;
}
//导入拆分结果前首先新增拆分条目
if (StringUtils.isBlank(menuid)) {
sarFileSplitInfoEO.setCreationTime(new Date());
sarFileSplitInfoEO.setModifyTime(new Date());
sarFileSplitInfoEO.setId(infoId);
sarFileSplitInfoEO.setValidFlag(0);
sarFileSplitInfoEO.setResult("1");
sarFileSplitInfoEO.setModifyUser(LoginUserUtil.getUserId());
sarFileSplitInfoEO.setStandId(sarFileSplitInfoEO.getStandId());
sarFileSplitInfoEOService.insertSelective(sarFileSplitInfoEO);
}
Map<String, String> menuPidMap = new HashMap<>();
//默认为总目录了
if (StringUtils.isBlank(menuid)) {
menuPidMap.put("总目录", firstId);
}else{
menuPidMap.put("总目录",menuid );
}
for (SarFileSplitItemsEO itemsEO : addItemsEOList) {
List<SarFileSplitItemsValEO> itemValEOList = itemsEO.getItemValEOList();
if(itemValEOList!=null){
String tupian = "";
for (SarFileSplitItemsValEO data : itemValEOList){
tupian = tupian+data.getItemContent();
}
itemsEO.setItermsConditions(tupian);
}
String menuIdT = createItemsInfo(itemsEO,infoId,countSuccess,menuPidMap);
menuPidMap.put(itemsEO.getItemsNum(),menuIdT);
countSuccess++;
}
//加入的里面
for (SarFileSplitItemsEO itemsEO : addItemsEOList){
if(itemsEO.getItemsNum().equals("总目录")) {
continue;
}
SarStandItems sarStandItems = new SarStandItems();
sarStandItems.setFileType(sarFileSplitInfoEO.getFileType());
sarStandItems.setStandId(sarFileSplitInfoEO.getStandId());
sarStandItems.setItemsNum(itemsEO.getItemsNum());
sarStandItems.setItemsName(itemsEO.getItemsName());
sarStandItems.setTermsConditions(itemsEO.getItermsConditions());
sarStandItems.setDutyEngineer(itemsEO.getDutyEngineer());
sarStandItems.setId(UUIDUtils.randomUUID20());
sarStandItemsDao.insert(sarStandItems);
}
//统计成功结果需要去掉总目录这条数据
String msg = "成功导入" + (countSuccess-1) + "";
return Result.success("0", msg, null);
} catch (Exception e) {
logger.error(e.getMessage(),e);
return Result.error("导入失败");
}
}
public void changeInfos (StringBuilder resultContent,String reaultItemId,List<String> delMenuIds,List<String> delIds,List<SarFileSplitItemsValEO> resultValList) {
//1.更新最终合并的条款内容
if (resultContent != null) {