diff --git a/adc-da-activiti/src/main/java/com/adc/da/common/ActDefineStartMap.java b/adc-da-activiti/src/main/java/com/adc/da/common/ActDefineStartMap.java index 5a8c5231..e803ef0f 100644 --- a/adc-da-activiti/src/main/java/com/adc/da/common/ActDefineStartMap.java +++ b/adc-da-activiti/src/main/java/com/adc/da/common/ActDefineStartMap.java @@ -63,10 +63,18 @@ public class ActDefineStartMap { map.put("27","wdzxlc"); // 标准需求(翻译)申请流程 map.put("28","bzxqfy"); + // 内外部会议入库流程 + map.put("29","insideOutsideMeetingLibrary"); + // 政策课题入会流程 + map.put("30","policyResearchGroupEnrollment"); + // 政策课题参会流程 + map.put("31","policyResearchGroupAttendMeeting"); + // 政策法规资料入库流程 + map.put("32","PolicyLawsInformationLibrary"); // 政策征求意见流程 - map.put("29","PolicySolicitOpinionProcessWorkFlow"); + map.put("33","PolicySolicitOpinionProcessWorkFlow"); // 重点认证标准/政策合规性项目审查流程 - map.put("30","PolicyComplianceProgramReviewProcessWorkFlow"); + map.put("34","PolicyComplianceProgramReviewProcessWorkFlow"); return map.get(type); } diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarItemMeetingEOController.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarItemMeetingEOController.java new file mode 100644 index 00000000..e0cfee9d --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarItemMeetingEOController.java @@ -0,0 +1,39 @@ +package com.adc.da.workFlow.controller; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.workFlow.service.ActSarItemMeetingEOService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author tjzdw + * @description + * @date 2023/10/16 + */ + +@RestController +@RequestMapping("/${restPath}/lawss/meeting") +@Api(description = "|InsideOutsideMeeting|") +public class ActSarItemMeetingEOController { + + @Resource + private ActSarItemMeetingEOService meetingEOService; + + + @ApiOperation(value = "|SarLawsStandInfo|内外部会议入库") + @PostMapping("/processCreateMeeting") + public ResponseMessage processCreateMeeting(String infoJson) throws Exception { + if (StringUtils.isBlank(infoJson)) { + return Result.error("传入数据json不能为空"); + } + meetingEOService.processCreateMeeting(infoJson); + return Result.success("入库成功"); + } +} diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsInformationEOController.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsInformationEOController.java new file mode 100644 index 00000000..371a1e96 --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsInformationEOController.java @@ -0,0 +1,37 @@ +package com.adc.da.workFlow.controller; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.workFlow.service.ActSarLawsInformationEOService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author tjzdw + * @description + * @date 2023/10/27 + */ +@Api("政策法规资料") +@RestController +@RequestMapping("/${restPath}/lawss/sarLawsTopic") +public class ActSarLawsInformationEOController { + + @Resource + private ActSarLawsInformationEOService informationEOService; + + @ApiOperation("政策法规资料入库") + @PostMapping("/processLawsRegulatoryInformation") + public ResponseMessage processCreateLawsInformation(String infoJson) throws Exception { + if (StringUtils.isBlank(infoJson)) { + return Result.error("传入数据json不能为空"); + } + informationEOService.processCreateLawsInformation(infoJson); + return Result.success("入库成功"); + } +} diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsTopicEOController.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsTopicEOController.java new file mode 100644 index 00000000..3662df9e --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/ActSarLawsTopicEOController.java @@ -0,0 +1,48 @@ +package com.adc.da.workFlow.controller; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.workFlow.service.ActSarLawsTopicEOService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author tjzdw + * @description 政策课题流程 + * @date 2023/10/25 + */ + +@Api("政策课题") +@RestController +@RequestMapping("/${restPath}/lawss/sarLawsTopic") +public class ActSarLawsTopicEOController { + + @Resource + private ActSarLawsTopicEOService lawsTopicEOService; + + @ApiOperation("政策课题入会") + @PostMapping("/processLawsTopicMembership") + public ResponseMessage processLawsTopicMembership(String infoJson){ + if (StringUtils.isBlank(infoJson)) { + return Result.error("传入数据json不能为空"); + } + lawsTopicEOService.processLawsTopicMembership(infoJson); + return Result.success("入库成功"); + } + + @ApiOperation("政策课题参会") + @PostMapping("/processLawsTopicParticipation") + public ResponseMessage processLawsTopicParticipation(String infoJson){ + if (StringUtils.isBlank(infoJson)) { + return Result.error("传入数据json不能为空"); + } + lawsTopicEOService.processLawsTopicParticipation(infoJson); + return Result.success("入库成功"); + } +} diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemMeetingEOService.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemMeetingEOService.java new file mode 100644 index 00000000..52956a46 --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemMeetingEOService.java @@ -0,0 +1,38 @@ +package com.adc.da.workFlow.service; + +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.service.InsideOutsideMeetingService; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @author tjzdw + * @description + * @date 2023/10/16 + */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class ActSarItemMeetingEOService { + + @Resource + private InsideOutsideMeetingService meetingService; + + private static final Logger logger = LoggerFactory.getLogger(ActSarItemMeetingEOService.class); + + public void processCreateMeeting(String meetingInfo) { + InsideOutsideMeeting insideOutsideMeeting = JSONObject.parseObject(meetingInfo, InsideOutsideMeeting.class); + if (insideOutsideMeeting == null) { + throw new AdcDaBaseException("入库失败,会议信息出错"); + } + logger.info("内外部会议入库:" + insideOutsideMeeting); + meetingService.addMeetingInfo(insideOutsideMeeting); + } +} diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemsLawsEOService.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemsLawsEOService.java index 72f03988..100b9855 100644 --- a/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemsLawsEOService.java +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarItemsLawsEOService.java @@ -866,6 +866,7 @@ public class ActSarItemsLawsEOService { case "isRelateAccess": sarLawsStandInfo.setIsRelateAccess(valueStr); break; case "lawsYear": sarLawsStandInfo.setLawsYear(valueStr); break; case "lawsNotisyncNum": sarLawsStandInfo.setLawsNotisyncNum(valueStr); break; + case "notisyncNumLink": sarLawsStandInfo.setNotisyncNumLink(valueStr); break; case "lawsBulletin": sarLawsStandInfo.setLawsBulletin(valueStr); break; case "lawsLabel": sarLawsStandInfo.setLawsLabel(valueStr); break; case "lawsRemark": sarLawsStandInfo.setLawsRemark(valueStr); break; diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsInformationEOService.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsInformationEOService.java new file mode 100644 index 00000000..4a98ff62 --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsInformationEOService.java @@ -0,0 +1,48 @@ +package com.adc.da.workFlow.service; + +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsInformation.service.SarLawsInformationService; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * @author tjzdw + * @description + * @date 2023/10/27 + */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class ActSarLawsInformationEOService { + + @Resource + private SarLawsInformationService informationService; + + private static final Logger logger = LoggerFactory.getLogger(ActSarLawsInformationEOService.class); + + public void processCreateLawsInformation(String lawsInformationInfo) { + SarLawsInformation sarLawsInformation = JSONObject.parseObject(lawsInformationInfo, SarLawsInformation.class); + JSONObject jsonObject = JSONObject.parseObject(lawsInformationInfo); + String applyUserId = jsonObject.getString("applyUserId"); + String applyUserName = jsonObject.getString("applyUserName"); + String approverId = jsonObject.getString("approverId"); + String approverName = jsonObject.getString("approverName"); + String createAndApproveBy = ""; + // 判断发起人和审批人是否相同 + if (approverId.equals(applyUserId)) { + createAndApproveBy = applyUserName + "(" + applyUserId + ")"; + }else { + createAndApproveBy = applyUserName + "(" + applyUserId + ")," + approverName + "(" + approverId + ")"; + } + sarLawsInformation.setCreateAndApproveBy(createAndApproveBy); + sarLawsInformation.setDownloadableBy(createAndApproveBy); + sarLawsInformation.setViewableBy(createAndApproveBy); + logger.info("政策法规资料入库:" + sarLawsInformation); + informationService.addLawsInformation(sarLawsInformation); + } +} diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsTopicEOService.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsTopicEOService.java new file mode 100644 index 00000000..483548f3 --- /dev/null +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/service/ActSarLawsTopicEOService.java @@ -0,0 +1,41 @@ +package com.adc.da.workFlow.service; + +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsTopicService; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +/** + * @author tjzdw + * @description + * @date 2023/10/25 + */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class ActSarLawsTopicEOService { + + @Resource + private SarLawsTopicService lawsTopicService; + + private static final Logger logger = LoggerFactory.getLogger(ActSarLawsTopicEOService.class); + + public void processLawsTopicMembership(String lawsTopicInfo) { + SarLawsTopic sarLawsTopic = JSONObject.parseObject(lawsTopicInfo, SarLawsTopic.class); + if (sarLawsTopic == null) { + throw new AdcDaBaseException("入库失败,政策课题信息出错"); + } + logger.info("政策课题入会:" + sarLawsTopic); + lawsTopicService.addLawsTopicInfo(sarLawsTopic); + } + + public void processLawsTopicParticipation(String infoJson) { + + } +} diff --git a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java index c88e820c..51def962 100644 --- a/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java +++ b/adc-da-jwtLogin/src/main/java/com/adc/da/login/security/WebMvcConfig.java @@ -190,6 +190,13 @@ public class WebMvcConfig implements WebMvcConfigurer { // 标准法规库-企标计划导出接口 addInterceptor.excludePathPatterns("/api/esRevisePlan/es-revise-plan/exportEsRevisePlanInfoExcel"); + // 内外部会议导出接口 + addInterceptor.excludePathPatterns("/api/lawss/insideOutsideMeeting/exportMeetingInfo"); + + // 政策课题导出接口 + addInterceptor.excludePathPatterns("/api/lawss/sarLawsTopic/exportLawsTopicInfo"); + + addInterceptor.excludePathPatterns("/api/lawss/sarLawsInformation/exportLawsInformationInfo"); // // 添加自定义拦截器,并拦截对应 url addInterceptor.addPathPatterns("/**"); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/controller/InsideOutSideMeetingController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/controller/InsideOutSideMeetingController.java new file mode 100644 index 00000000..b0b3895a --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/controller/InsideOutSideMeetingController.java @@ -0,0 +1,219 @@ +package com.adc.da.slrs.InsideOntSideMeeting.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; +import com.adc.da.base.web.BaseController; +import com.adc.da.common.ReadExcel; +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.http.PageInfo; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO; +import com.adc.da.slrs.InsideOntSideMeeting.service.InsideOutsideMeetingService; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.text.ParseException; +import java.util.Arrays; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/10 + */ +@RestController +@RequestMapping("/${restPath}/lawss/insideOutsideMeeting") +public class InsideOutSideMeetingController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(InsideOutSideMeetingController.class); + + @Resource + private InsideOutsideMeetingService meetingService; + + @Value("${file.path}") + private String filePath; + + @ApiOperation(value = "根据会议ID查询会议信息") + @GetMapping("/getMeetingInfo") + public ResponseMessage getMeetingInfo(String meetingId){ + if (StringUtils.isBlank(meetingId)) { + return Result.error("会议ID为空!"); + } + InsideOutsideMeeting meetingInfo = meetingService.getMeetingInfo(meetingId); + return Result.success(meetingInfo); + } + + @ApiOperation(value = "分页查询") + @GetMapping("/page") + public ResponseMessage> page(InsideOutsideMeetingVO insideOutsideMeetingVO) { + List rows = meetingService.queryByPage(insideOutsideMeetingVO); + return Result.success(getPageInfo(insideOutsideMeetingVO.getPager(), rows)); + } + + @ApiOperation(value = "新增内外部会议") + @PostMapping(value = "/addMeetingInfo", consumes = "application/json;charset=UTF-8") + public ResponseMessage create(@RequestBody InsideOutsideMeeting insideOutSideMeeting) throws Exception { + meetingService.addMeetingInfo(insideOutSideMeeting); + return Result.success(); + } + + @ApiOperation("根据会议ID删除会议") + @DeleteMapping("/deleteMeetingInfo") + public ResponseMessage deleteMeeting(String meetingId) { + if (StringUtils.isBlank(meetingId)) { + return Result.error("删除失败,会议ID为空"); + } + meetingService.deleteMeetingById(meetingId); + return Result.success(); + } + + @ApiOperation("根据会议ID修改会议信息") + @PutMapping("/updateMeetingInfo") + public ResponseMessage updateMeetingInfo(@RequestBody InsideOutsideMeeting insideOutSideMeeting) { + if (ObjectUtils.isEmpty(insideOutSideMeeting)) { + return Result.error("更新失败,会议信息不存在"); + } + Boolean updateResult = meetingService.updateMeetingInfo(insideOutSideMeeting); + return updateResult ? Result.success() : Result.error("更新失败"); + } + + @ApiOperation("导出内外部会议信息") + @GetMapping("/exportMeetingInfo") + public ResponseMessage exportMeetingInfo(InsideOutsideMeetingVO insideOutsideMeetingVO, HttpServletResponse response, + HttpServletRequest request) { + OutputStream os = null; + Workbook workbook = null; + List datas; + try { + if(StringUtils.isEmpty(insideOutsideMeetingVO.getExportName())||insideOutsideMeetingVO.getExportName().equals("null")){ + insideOutsideMeetingVO.setExportName("内外部会议信息"); + } + response.setHeader("Content-Disposition", + "attachment; filename=" + ReadExcel.encodeFileName(insideOutsideMeetingVO.getExportName()+".xlsx", + request)); + // 导出数据,若指定了值则使用ids字段条件导出,否则根据条件导出 + if (StrUtil.isNotBlank(insideOutsideMeetingVO.getExportIds())) { + List idList = Arrays.asList(insideOutsideMeetingVO.getExportIds().split(",")); + datas = meetingService.queryMeetingById(idList); + } else { + // 导出所有数据 + datas = meetingService.queryAllMeeting(insideOutsideMeetingVO); + } + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setSheetName(insideOutsideMeetingVO.getExportName()); +// workbook = InsideOutsideMeetingExportUtil.exportDatas(datas); + workbook = ExcelExportUtil.exportExcel(exportParams, InsideOutsideMeetingVO.class, datas); + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + throw new AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + return Result.success(); + } + + @ApiOperation("Excel文件导入内外部会议信息") + @PostMapping("/importMeetingInfo") + public ResponseMessage importMeetingInfo(@RequestParam(value = "file",required = false) MultipartFile file) throws ParseException { + if (file == null) { + return Result.error("文件为空,请重新上传"); + } + return meetingService.importMeetingInfo(file); + } + + @ApiOperation(value = "内外部会议导入模板下载") + @GetMapping("/exportTemplateFile") + public void exportTemplateFile(String fileName,HttpServletResponse response, HttpServletRequest request)throws Exception{ + + OutputStream os = null; + OutputStream excelOS = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = "内外部会议导入模板"; + if (StringUtils.isNotEmpty(fileName)) { + fileOriName = fileName; + } + try{ + //创建临时文件夹 + String fileNowPath = filePath + "/tempZip/" + UUIDUtils.randomUUID20() + "/" + fileOriName; + File nowFile = new File(fileNowPath); + if (nowFile.exists()){ + nowFile.delete(); + } + nowFile.mkdirs(); + String fileName2 = "导入模板.xls"; + HSSFSheet sheetItems = workbook.createSheet("模板"); + sheetItems.setDefaultColumnWidth(13); + Row rowHeader = sheetItems.createRow(1);//开始创建标题行 + sheetItems.addMergedRegion(new CellRangeAddress(0, 0, 0, 13)); + Row row2 = sheetItems.createRow(0);//开始创建填写说明 + String exportFieldName = FieldConvertUtil.exportFieldNamesInsideOutsideMeeting + FieldConvertUtil.exportFieldNamesMeetingTopic; + if (StringUtils.isNotBlank(exportFieldName)) { + String[] headerArr = exportFieldName.split(","); + for (int i=0;i < headerArr.length; i++) { + rowHeader.createCell(i).setCellValue(headerArr[i]); + } + } + Cell cellA2 = row2.createCell(0); + cellA2.setCellValue(FieldConvertUtil.exportInsideOutsideMeetingDesc); + //sheetItems.setColumnWidth(0, 20 * 150); + row2.setHeight((short) (100 * 25)); + HSSFCellStyle cellStyle =workbook.createCellStyle(); + cellStyle.setAlignment(HorizontalAlignment.LEFT); + cellStyle.setVerticalAlignment(VerticalAlignment.TOP); + cellStyle.setWrapText(true); + cellA2.setCellStyle(cellStyle); + String repFileName = fileName2.replaceAll("/","_"); + excelOS = new FileOutputStream(fileNowPath + "/" + repFileName); + response.setHeader("Content-Disposition", + "attachment; filename=\""+ ReadExcel.encodeFileName(fileOriName+".zip", request) +"\""); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(excelOS); + excelOS.flush(); + excelOS.close(); + ZipUtil.zip(fileNowPath,fileNowPath+".zip"); + FileInputStream fis = new FileInputStream(fileNowPath+".zip"); + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + os.close(); // 后开先关 + fis.close(); // 先开后关 + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new com.adc.da.exception.AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + IOUtils.closeQuietly(excelOS); + } + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/InsideOutsideMeetingDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/InsideOutsideMeetingDao.java new file mode 100644 index 00000000..98537ae7 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/InsideOutsideMeetingDao.java @@ -0,0 +1,26 @@ +package com.adc.da.slrs.InsideOntSideMeeting.dao; + +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/10 + */ +@Mapper +public interface InsideOutsideMeetingDao extends BaseMapper { + + Integer queryByPageCount(InsideOutsideMeetingVO page); + + List queryByPage(InsideOutsideMeetingVO page); + + List queryMeetingById(@Param("exportIdList") List exportIdList); + + List queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/MeetingTopicDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/MeetingTopicDao.java new file mode 100644 index 00000000..ecae466a --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/dao/MeetingTopicDao.java @@ -0,0 +1,16 @@ +package com.adc.da.slrs.InsideOntSideMeeting.dao; + +import com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author tjzdw + * @description + * @date 2023/10/13 + */ +@Mapper +public interface MeetingTopicDao extends BaseMapper { + + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeeting.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeeting.java new file mode 100644 index 00000000..a45c1f00 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeeting.java @@ -0,0 +1,114 @@ +package com.adc.da.slrs.InsideOntSideMeeting.entity; + +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.base.entity.BaseEntity; +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 io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author tjzdw + * @description + * @date 2023/10/10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@ApiModel(value="inside_outside_meeting表对象", description="内外部会议") +@TableName("inside_outside_meeting") +public class InsideOutsideMeeting extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + @ApiModelProperty(value = "会议名称") + @TableField("MEETING_NAME") + private String meetingName; + + /** + * 课题名称,可通过调取功能从政策课题模块中获取 + */ + @ApiModelProperty(value = "课题名称") + @TableField("TOPIC_NAME") + private String topicName; + + @ApiModelProperty(value = "会议主办单位") + @TableField("MEETING_ORGANIZER") + private String meetingOrganizer; + + @ApiModelProperty(value = "会议时间") + @TableField("MEETING_TIME") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + private Date meetingTime; + + @ApiModelProperty(value = "会议地点") + @TableField("MEETING_ADDRESS") + private String meetingAddress; + + @ApiModelProperty(value = "参会人员") + @TableField("PARTICIPANTS") + private String participants; + + @ApiModelProperty(value = "会议纪要") + @TableField("MEETING_MINUTES") + private String meetingMinutes; + + @ApiModelProperty(value = "会议纪要文件列表") + @TableField(exist = false) + private List meetingMinutesList; + + @ApiModelProperty(value = "会议主要内容") + @TableField("MEETING_CONTENT") + private String meetingContent; + + @ApiModelProperty(value = "1级会议类别") + @TableField("FIRST_MEETING_TYPE") + private String firstMeetingType; + + @ApiModelProperty(value = "1级会议类别名称") + @TableField(exist = false) + private String firstMeetingTypeName; + + @ApiModelProperty(value = "2级会议类别") + @TableField("SECOND_MEETING_TYPE") + private String secondMeetingType; + + @ApiModelProperty(value = "2级会议类别名称") + @TableField(exist = false) + private String secondMeetingTypeName; + + @ApiModelProperty(value = "会议议题") + @TableField(exist = false) + private List meetingTopicList; + + /** + * 逻辑删除,0可用,1不可用 + */ + @ApiModelProperty(value = "逻辑删除") + @TableField("VALID_FLAG") + private Integer validFlag; + + @ApiModelProperty(value = "创建时间") + @TableField("CREATE_TIME") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty(value = "修改时间") + @TableField("MODIFY_TIME") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date modifyTime; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeetingVO.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeetingVO.java new file mode 100644 index 00000000..d4297649 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/InsideOutsideMeetingVO.java @@ -0,0 +1,100 @@ +package com.adc.da.slrs.InsideOntSideMeeting.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelCollection; +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.base.page.BasePage; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/12 + */ +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@Data +public class InsideOutsideMeetingVO extends BasePage { + + private String id; + + @Excel(name = "会议名称", needMerge = true) + private String meetingName; + + @Excel(name = "课题名称", needMerge = true) + private String topicName; + + @Excel(name = "会议主办单位", needMerge = true) + private String meetingOrganizer; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @Excel(name = "会议时间", exportFormat = "yyyy-MM-dd", needMerge = true) + private Date meetingTime; + + @Excel(name = "会议地点", needMerge = true) + private String meetingAddress; + + @Excel(name = "参会人员", needMerge = true) + private String participants; + private List participantsList; + + private String meetingMinutes; + + private List meetingMinutesList; + + @Excel(name = "会议主要内容", needMerge = true) + private String meetingContent; + + private String firstMeetingType; + + @Excel(name = "1级会议类别", needMerge = true) + private String firstMeetingTypeName; + + private String secondMeetingType; + + @Excel(name = "2级会议类别", needMerge = true) + private String secondMeetingTypeName; + + @ExcelCollection(name = "会议议题") + private List meetingTopicList; + + private String agendaName; + + private String agendaMaterials; + + private String reporter; + + private String reportingUnit; + + private String agendaContent; + + private Integer validFlag; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date modifyTime; + + private String sortField = "ID"; + + private String sortMode = "asc"; + + private String meetingTimeOperator = "="; + + // 导出使用字段 + // 被前端选中的记录的ids + private String exportIds; + + // 从ids转换过来的id集合 + private List exportIdList; + + // 导出的文件名 + private String exportName; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/MeetingTopic.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/MeetingTopic.java new file mode 100644 index 00000000..dd9435f5 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/entity/MeetingTopic.java @@ -0,0 +1,58 @@ +package com.adc.da.slrs.InsideOntSideMeeting.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.adc.da.base.entity.BaseEntity; +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 io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author tjzdw + * @description + * @date 2023/10/12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@ApiModel(value="meeting_topic表对象", description="会议议题表") +@TableName("meeting_topic") +public class MeetingTopic extends BaseEntity { + + @ApiModelProperty(value = "主键") + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + @ApiModelProperty(value = "内外部会议ID") + @TableField("MEETING_ID") + private String meetingId; + + @ApiModelProperty(value = "议题名称") + @TableField("AGENDA_NAME") + @Excel(name = "议题名称") + private String agendaName; + + @ApiModelProperty(value = "议题材料") + @TableField("AGENDA_MATERIALS") + private String agendaMaterials; + + @ApiModelProperty(value = "汇报人") + @TableField("REPORTER") + @Excel(name = "汇报人") + private String reporter; + + @ApiModelProperty(value = "汇报单位") + @TableField("REPORTING_UNIT") + @Excel(name = "汇报单位") + private String reportingUnit; + + @ApiModelProperty(value = "议题主要内容") + @TableField("AGENDA_CONTENT") + @Excel(name = "议题主要内容") + private String agendaContent; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/InsideOutsideMeetingService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/InsideOutsideMeetingService.java new file mode 100644 index 00000000..face3b6b --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/InsideOutsideMeetingService.java @@ -0,0 +1,34 @@ +package com.adc.da.slrs.InsideOntSideMeeting.service; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.text.ParseException; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/10 + */ +public interface InsideOutsideMeetingService extends IService { + + Integer addMeetingInfo(InsideOutsideMeeting insideOutSideMeeting); + + List queryByPage(InsideOutsideMeetingVO page); + + InsideOutsideMeeting getMeetingInfo(String meetingId); + + Boolean deleteMeetingById(String meetingId); + + Boolean updateMeetingInfo(InsideOutsideMeeting insideOutSideMeeting); + + List queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO); + + List queryMeetingById(List exportIdList); + + ResponseMessage importMeetingInfo(MultipartFile file) throws ParseException; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/MeetingTopicService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/MeetingTopicService.java new file mode 100644 index 00000000..ea79e3f9 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/MeetingTopicService.java @@ -0,0 +1,17 @@ +package com.adc.da.slrs.InsideOntSideMeeting.service; + +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/13 + */ +public interface MeetingTopicService extends IService { + + public List compareMeetingTopic(InsideOutsideMeeting oldTopic, InsideOutsideMeeting newTopic); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/InsideOutsideMeetingServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/InsideOutsideMeetingServiceImpl.java new file mode 100644 index 00000000..d3305cc3 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/InsideOutsideMeetingServiceImpl.java @@ -0,0 +1,512 @@ +package com.adc.da.slrs.InsideOntSideMeeting.service.impl; + +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.att.service.IAttFileEOService; +import com.adc.da.common.FileUnZip; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.InsideOntSideMeeting.dao.InsideOutsideMeetingDao; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO; +import com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic; +import com.adc.da.slrs.InsideOntSideMeeting.service.InsideOutsideMeetingService; +import com.adc.da.slrs.InsideOntSideMeeting.service.MeetingTopicService; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarUpdLog.entity.SarUpdLog; +import com.adc.da.slrs.sarUpdLog.service.ISarUpdLogService; +import com.adc.da.slrs.tsDictionaryType.entity.TsDicType; +import com.adc.da.slrs.tsDictionaryType.service.ITsDicTypeService; +import com.adc.da.util.LoginUserUtil; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author tjzdw + * @description + * @date 2023/10/10 + */ +@Service +public class InsideOutsideMeetingServiceImpl extends ServiceImpl implements InsideOutsideMeetingService { + + @Resource + private MeetingTopicService meetingTopicService; + @Resource + private IAttFileEOService attFileEOService; + @Resource + private ITsDicTypeService dicTypeService; + @Resource + private ISarUpdLogService updLogService; + + @Value("${file.path}") + private String filePath;//文件存储路径 + + @Override + public InsideOutsideMeeting getMeetingInfo(String meetingId){ + InsideOutsideMeeting insideOutsideMeeting = this.baseMapper.selectById(meetingId); + if (insideOutsideMeeting != null) { + // 获取会议纪要文件对象 + if (StringUtils.isNotBlank(insideOutsideMeeting.getMeetingMinutes())) { + List meetingMinutesList = new ArrayList<>(); + for (String attId : insideOutsideMeeting.getMeetingMinutes().split(",")) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + meetingMinutesList.add(fileInfo); + } + insideOutsideMeeting.setMeetingMinutesList(meetingMinutesList); + } + // 获取会议类别值 + getTypeByCode(insideOutsideMeeting); + // 获取会议课题列表 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MeetingTopic::getMeetingId, meetingId); + List meetingTopicList = meetingTopicService.list(wrapper); + insideOutsideMeeting.setMeetingTopicList(meetingTopicList); + } + return insideOutsideMeeting; + } + + @Transactional + @Override + public Boolean deleteMeetingById(String meetingId) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(InsideOutsideMeeting::getId, meetingId); + wrapper.set(InsideOutsideMeeting::getValidFlag,1); + boolean update = update(wrapper); + if (update) { + LambdaQueryWrapper topicWrapper = new LambdaQueryWrapper<>(); + topicWrapper.eq(MeetingTopic::getMeetingId, meetingId); + meetingTopicService.remove(topicWrapper); + } + return update; + } + + @Transactional + @Override + public Boolean updateMeetingInfo(InsideOutsideMeeting insideOutsideMeeting) { + if (StringUtils.isBlank(insideOutsideMeeting.getId())) { + return false; + } + InsideOutsideMeeting insideOutsideMeetingDB = this.baseMapper.selectById(insideOutsideMeeting.getId()); + List diffList = compareInsideOutsideMeeting(insideOutsideMeetingDB, insideOutsideMeeting); + if (diffList.size() > 0) { + insideOutsideMeeting.setModifyTime(new Date()); + int update = this.baseMapper.updateById(insideOutsideMeeting); + if (update > 0) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MeetingTopic::getMeetingId,insideOutsideMeeting.getId()); + // 先删除会议信息 + meetingTopicService.remove(wrapper); + // 再添加会议信息 + for (MeetingTopic meetingTopic : insideOutsideMeeting.getMeetingTopicList()) { + meetingTopic.setMeetingId(insideOutsideMeeting.getId()); + meetingTopicService.save(meetingTopic); + } + // 存储修改记录 + SarUpdLog sarUpdLogEO = new SarUpdLog(); + sarUpdLogEO.setId(UUIDUtils.randomUUID20()); + sarUpdLogEO.setSarId(insideOutsideMeetingDB.getId()); + sarUpdLogEO.setSarType("INSIDE_OUTSIDE_MEETING"); + sarUpdLogEO.setCreationTime(new Date()); + sarUpdLogEO.setCreationUser(LoginUserUtil.getUserId()); + sarUpdLogEO.setContent(insideOutsideMeetingDB.getMeetingName() + "," + String.join(",",diffList)); + updLogService.save(sarUpdLogEO); + } + } + return true; + } + + // 用于Excel文件导出 + @Override + public List queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO) { + List insideOutsideMeetingVOList = this.baseMapper.queryAllMeeting(insideOutsideMeetingVO); + for (InsideOutsideMeetingVO meetingVO : insideOutsideMeetingVOList) { + // 获取会议类别值 + getTypeByCode(meetingVO); + } + return insideOutsideMeetingVOList; + } + + @Override + public List queryMeetingById(List exportIdList) { + List insideOutsideMeetingVOList = this.baseMapper.queryMeetingById(exportIdList); + for (InsideOutsideMeetingVO meetingVO : insideOutsideMeetingVOList) { + getTypeByCode(meetingVO); + } + return insideOutsideMeetingVOList; + } + + @Transactional + @Override + public Integer addMeetingInfo(InsideOutsideMeeting insideOutsideMeeting) { + insideOutsideMeeting.setCreateTime(new Date()); + insideOutsideMeeting.setModifyTime(new Date()); + insideOutsideMeeting.setValidFlag(0); + int insert = this.baseMapper.insert(insideOutsideMeeting); + if (!insideOutsideMeeting.getMeetingTopicList().isEmpty()) { + for (MeetingTopic meetingTopic : insideOutsideMeeting.getMeetingTopicList()) { + meetingTopic.setMeetingId(insideOutsideMeeting.getId()); + meetingTopicService.save(meetingTopic); + } + } + return insert; + } + + @Override + public List queryByPage(InsideOutsideMeetingVO page){ + if (StringUtils.isNotBlank(page.getParticipants())) { + page.setParticipantsList(Arrays.asList(page.getParticipants().split(","))); + } + // 设置排序字段 + if (StringUtils.isNotBlank(page.getSortField())) { + // 小驼峰变成 ABC_DEF + String sortField = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(page.getSortField()),"_").toUpperCase(); + page.setSortField(sortField); + } else { + page.setSortField("ID"); + page.setSortMode("asc"); + } + Integer rowCount = this.baseMapper.queryByPageCount(page); + page.getPager().setRowCount(rowCount); + List insideOutsideMeetingVOList = this.baseMapper.queryByPage(page); + for (InsideOutsideMeetingVO insideOutsideMeeting : insideOutsideMeetingVOList) { + // 获取会议纪要文件对象 + if (StringUtils.isNotBlank(insideOutsideMeeting.getMeetingMinutes())) { + List meetingMinutesList = new ArrayList<>(); + for (String attId : insideOutsideMeeting.getMeetingMinutes().split(",")) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + meetingMinutesList.add(fileInfo); + } + insideOutsideMeeting.setMeetingMinutesList(meetingMinutesList); + } + // 获取会议类别值 + getTypeByCode(insideOutsideMeeting); + } + return insideOutsideMeetingVOList; + } + + @Override + public ResponseMessage importMeetingInfo(MultipartFile file) throws ParseException { + //获取文件全称 + String fileNameStr = file.getOriginalFilename(); + //获取最后.的位置 + assert fileNameStr != null; + int pos = fileNameStr.lastIndexOf("."); + //获取压缩文件名称并以小写显示 + String fileStr = fileNameStr.substring(pos + 1).toLowerCase(); + //校验是否是zip文件 + if (!fileStr.equals("zip")) { + return Result.error("请上传zip格式的文件"); + } + //进行拼接获取文件名称 + String fileName = fileNameStr.substring(0, pos); + //获取路径和文件名称 + String path = filePath + "/" + fileName; + + File saveDirectory = new File(path); + //判断saveDirectory中是否是文件夹 + if (!saveDirectory.isDirectory()) { + saveDirectory.mkdir(); + } + //将文件写入到指定路径中 + try { + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件存储失败!"); + } + //解压缩 + String zipEntryName = null; + try { + zipEntryName = FileUnZip.unZipFiles(path + "/" + fileNameStr, path); + FileUnZip.delete(new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件解压失败"); + } + //获取文件信息 + List fileList = readImpExcelFile(zipEntryName); + //判断获取到的文件数量 + if (fileList.size() != 1) { + return Result.error("上传的文件只能有一个"); + } + File importFile = fileList.get(0); + if (!importFile.getName().contains(".xls") && !importFile.getName().contains(".xlsx")) { + return Result.error("文件必须是EXCEL文件"); + } + Workbook workbook = null; + try { + workbook = WorkbookFactory.create(importFile); + } catch (IOException e) { + FileUnZip.deleteDir(saveDirectory); + return Result.error("导入失败,需要导入的数据有问题或导入的企标标号和企标名称已存在"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet == null) { + return Result.error("工作表为空"); + } + StringBuilder sb = new StringBuilder(); + List headerList = new ArrayList<>(); + // 获取excel表头 + Row headerRow = sheet.getRow(1); + for (int i = 0; i <= 12; i++) { + headerList.add(headerRow.getCell(i).getStringCellValue()); + } + + // 判断表头字段是否相同 + if (!String.join(",",headerList).equals(FieldConvertUtil.exportFieldNamesInsideOutsideMeeting + "," + FieldConvertUtil.exportFieldNamesMeetingTopic)) { + try { + workbook.close(); + } catch (IOException e) { + return Result.error("文件关闭出错"); + } + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("fail", "读取失败,请严格按照模板文件导入数据"); + } + // 获取总行数 + int rowNum = sheet.getPhysicalNumberOfRows(); + List> importDataList = new ArrayList<>(); + // 开始遍历表格行 + for (int rowIndex = 2; rowIndex < rowNum; rowIndex++) { + // 获取每一行 + Row row = sheet.getRow(rowIndex); + // 用于存储每行的键值对数据,对应一条数据 + Map rowMap = new LinkedHashMap<>(); + // 总列数 + int columnNum = 13; + // 遍历每个单元格 + for (int columnIndex = 0; columnIndex < columnNum; columnIndex++) { + // 获取单元格 + Cell cell = row.getCell(columnIndex); + // 获取表头单元格 + Cell headerCell = headerRow.getCell(columnIndex); + if (cell != null) { + if (CellType.NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + if (d.before(sdf.parse("1900-01-01")) || d.after(sdf.parse("2500-01-01"))) { + return Result.error("输入的日期异常,请按照实际日期填写"); + } + // 将单元格数据存入Map中 + rowMap.put(headerCell.getStringCellValue(), sdf.format(d)); + } else { + cell.setCellType(CellType.STRING); + if (cell.getStringCellValue().length() > 500) { + return Result.error("单元格输入过长"); + } + rowMap.put(headerCell.getStringCellValue(), cell.getStringCellValue()); + } + } else { + rowMap.put(headerCell.getStringCellValue(), ""); + } + } + importDataList.add(rowMap); + } + + // 获取需要校验的字段 + List firstMeetingTypeList = dicTypeService.selectAllDicTypeNameByDicCode("firstMeetingType"); + Set firstMeetingTypeNameSet = firstMeetingTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + List secondMeetingTypeList = dicTypeService.selectAllDicTypeNameByDicCode("secondMeetingType"); + Set secondMeetingTypeNameSet = secondMeetingTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + // 计数器,用于处理出现多条会议课题的情况 + int count = 0; +// InsideOutsideMeeting insideOutsideMeetingDB = null; + InsideOutsideMeeting insideOutsideMeeting = new InsideOutsideMeeting(); + List meetingTopicList = new ArrayList<>(); + for (Map dataMap : importDataList) { + String meetingName = dataMap.get("会议名称"); + // 如果会议名称为空,则表示该行为会议课题行,是之前会议的会议课题,不提交之前的会议信息。不为空则进入 + if (StringUtils.isNotBlank(meetingName)) { + // 如果计数器大于0,表示进入了新的会议信息中,提交之前的会议信息 + if (count > 0) { + insideOutsideMeeting.setMeetingTopicList(meetingTopicList); + addMeetingInfo(insideOutsideMeeting); + // 初始化会议课题列表 + meetingTopicList.clear(); + // 初始化会议对象 + insideOutsideMeeting = new InsideOutsideMeeting(); + // 计数器归零 + count = 0; + } + insideOutsideMeeting.setMeetingName(meetingName); + insideOutsideMeeting.setTopicName(dataMap.get("课题名称")); + insideOutsideMeeting.setMeetingOrganizer(dataMap.get("会议主办单位")); + insideOutsideMeeting.setMeetingTime(sdf.parse(dataMap.get("会议时间"))); + insideOutsideMeeting.setMeetingAddress(dataMap.get("会议地点")); + insideOutsideMeeting.setParticipants(dataMap.get("参会人员")); + insideOutsideMeeting.setMeetingContent(dataMap.get("会议主要内容")); + if (StringUtils.isNotBlank(dataMap.get("一级会议类别"))) { + if (!firstMeetingTypeNameSet.contains(dataMap.get("一级会议类别"))){ + return Result.error("一级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : firstMeetingTypeList) { + if (dataMap.get("一级会议类别").equals(tsDicType.getDicTypeName())) { + insideOutsideMeeting.setFirstMeetingType(tsDicType.getDicTypeCode()); + } + } + } + if (StringUtils.isNotBlank(dataMap.get("二级会议类别"))) { + if (!secondMeetingTypeNameSet.contains(dataMap.get("二级会议类别"))){ + return Result.error("二级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : secondMeetingTypeList) { + if (dataMap.get("二级会议类别").equals(tsDicType.getDicTypeName())) { + insideOutsideMeeting.setSecondMeetingType(tsDicType.getDicTypeCode()); + } + } + } + // 会议课题信息 + MeetingTopic meetingTopic = new MeetingTopic(); + meetingTopic.setAgendaName(dataMap.get("议题名称")); + meetingTopic.setReporter(dataMap.get("汇报人")); + meetingTopic.setReportingUnit(dataMap.get("汇报单位")); + meetingTopic.setAgendaContent(dataMap.get("议题主要内容")); + meetingTopicList.add(meetingTopic); + count++; + } else { + // 进入else 表示该行是会议课题行 + MeetingTopic meetingTopic = new MeetingTopic(); + meetingTopic.setAgendaName(dataMap.get("议题名称")); + meetingTopic.setReporter(dataMap.get("汇报人")); + meetingTopic.setReportingUnit(dataMap.get("汇报单位")); + meetingTopic.setAgendaContent(dataMap.get("议题主要内容")); + meetingTopicList.add(meetingTopic); + count++; + } + } + // 插入最后一条记录 + insideOutsideMeeting.setMeetingTopicList(meetingTopicList); + addMeetingInfo(insideOutsideMeeting); + return Result.success("导入完成"); + } + + private static List readImpExcelFile(String path) { + File file = new File(path); + List resultlist = new ArrayList<>(); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File fi : files) { + // 对文件进行过滤,读取所有文件 + String name = fi.getName(); + //文件不为空 添加 + if (name != null){ + resultlist.add(fi); + } + } + } + return resultlist; + } + + + /** + * 比较两个InsideOutSideMeeting 对象 + * @param oldMeeting 数据库中存储的对象 + * @param newMeeting 更新后的对象 + * @return 差异 + */ + public List compareInsideOutsideMeeting(InsideOutsideMeeting oldMeeting, InsideOutsideMeeting newMeeting) { + List changes = new ArrayList<>(); + // 不需要比较的字段 + String[] ignoreFields = {"id","validFlag","createTime","modifyTime", "firstMeetingTypeName", "secondMeetingTypeName"}; + List ignoreFieldList = Arrays.asList(ignoreFields); + // 获取SarLawsInformation类的所有字段 + Field[] fields = InsideOutsideMeeting.class.getDeclaredFields(); + for (Field field : fields) { + if (!ignoreFieldList.contains(field.getName())) { + try { + field.setAccessible(true); + String oldValue = String.valueOf(field.get(oldMeeting)); + String newValue = String.valueOf(field.get(newMeeting)); + if (!Objects.equals(oldValue, newValue)) { + if ("firstMeetingType".equals(field.getName()) || "secondMeetingType".equals(field.getName())) { + String typeName = ""; + if (StringUtils.isNotBlank(newValue)) { + typeName = dicTypeService.getDicTypeNameByDicCode(newValue); + } + // 获取资料类型名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = InsideOutsideMeeting.class.getMethod("get" + fieldName + "Name"); + Object oldTypeName = method.invoke(oldMeeting); + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldTypeName + "\"改为\"" + typeName + "\""); + } else if ("meetingMinutes".equals(field.getName())) { + List fileNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(newValue)) { + String[] split = newValue.split(","); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo.getOldFileName()); + } + } + // 获取资料类型名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = InsideOutsideMeeting.class.getMethod("get" + fieldName + "List"); + List oldFileList = (List)method.invoke(oldMeeting); + List oldFileNameList = new ArrayList<>(); + if (oldFileList != null && oldFileList.size() > 0) { + for (Object oldFile : oldFileList) { + AttFileEO oldFile1 = (AttFileEO) oldFile; + oldFileNameList.add(oldFile1.getOldFileName()); + } + } + // 获取字段名称 + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + String.join(",",oldFileNameList) + "\"改为\"" + String.join(",",fileNameList) + "\""); + } + else if ("meetingTopicList".equals(field.getName())) { + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "被变更"); + } + else { + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldValue + "\"改为\"" + newValue + "\""); + } + } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + // 处理异常 + e.printStackTrace(); + } + } + } + return changes; + } + + public void getTypeByCode(InsideOutsideMeetingVO meetingVO) { + // 获取会议类别值 + if (StringUtils.isNotBlank(meetingVO.getFirstMeetingType())) { + meetingVO.setFirstMeetingTypeName(dicTypeService.getDicTypeNameByDicCode(meetingVO.getFirstMeetingType())); + } + if (StringUtils.isNotBlank(meetingVO.getSecondMeetingType())) { + meetingVO.setSecondMeetingTypeName(dicTypeService.getDicTypeNameByDicCode(meetingVO.getSecondMeetingType())); + } + } + public void getTypeByCode(InsideOutsideMeeting meeting) { + // 获取会议类别值 + if (StringUtils.isNotBlank(meeting.getFirstMeetingType())) { + meeting.setFirstMeetingTypeName(dicTypeService.getDicTypeNameByDicCode(meeting.getFirstMeetingType())); + } + if (StringUtils.isNotBlank(meeting.getSecondMeetingType())) { + meeting.setSecondMeetingTypeName(dicTypeService.getDicTypeNameByDicCode(meeting.getSecondMeetingType())); + } + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/MeetingTopicServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/MeetingTopicServiceImpl.java new file mode 100644 index 00000000..96ceee6b --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/InsideOntSideMeeting/service/impl/MeetingTopicServiceImpl.java @@ -0,0 +1,79 @@ +package com.adc.da.slrs.InsideOntSideMeeting.service.impl; + +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.att.service.IAttFileEOService; +import com.adc.da.slrs.InsideOntSideMeeting.dao.MeetingTopicDao; +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeeting; +import com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic; +import com.adc.da.slrs.InsideOntSideMeeting.service.MeetingTopicService; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @author tjzdw + * @description + * @date 2023/10/13 + */ +@Service +public class MeetingTopicServiceImpl extends ServiceImpl implements MeetingTopicService { + + @Resource + private IAttFileEOService attFileEOService; + + @Override + public List compareMeetingTopic(InsideOutsideMeeting oldTopic, InsideOutsideMeeting newTopic) { + List changes = new ArrayList<>(); + // 不需要比较的字段 + String[] ignoreFields = {"id","meetingId"}; + List ignoreFieldList = Arrays.asList(ignoreFields); + // 获取SarLawsInformation类的所有字段 + Field[] fields = SarLawsInformation.class.getDeclaredFields(); + for (Field field : fields) { + if (!ignoreFieldList.contains(field.getName())) { + try { + field.setAccessible(true); + String oldValue = String.valueOf(field.get(oldTopic)); + String newValue = String.valueOf(field.get(newTopic)); + if (!Objects.equals(oldValue, newValue)) { + if ("agendaMaterials".equals(field.getName())) { + List fileNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(newValue)) { + String[] split = newValue.split(","); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo.getOldFileName()); + } + } + // 获取文件名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = SarLawsInformation.class.getMethod("get" + fieldName + "Name"); + Object oldTypeName = method.invoke(oldTopic); + // 获取字段名称 + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldTypeName + "\"改为\"" + String.join(",",fileNameList) + "\""); + } else { + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldValue + "\"改为\"" + newValue + "\""); + } + } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + // 处理异常 + e.printStackTrace(); + } + } + } + return changes; + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java index 2e040995..02168023 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java @@ -165,41 +165,41 @@ public class EsRevisePlanController extends BaseController { } } revisePlan.setArea(area); - //查评分 - if (ObjectUtils.isNotEmpty(revisePlan.getStandId())) { - List last = new ArrayList<>(); - List evaluations = qualityEvaluationDao.getEvaluationForm(new QueryWrapper().eq("law_id", revisePlan.getStandId()).eq("evaluation_type", "quality")); - for (QualityEvaluation evaluation : evaluations) { - Double score; - String value; - if (evaluation.getProcessNode()==null){ - value=""; - }else { - value=evaluation.getProcessNode(); - } - String evaluationScore = ObjectUtils.isEmpty(evaluation.getScore()) ? "0" : evaluation.getScore(); - switch (value){ - case "征求意见": - score=Double.valueOf(evaluationScore) * 0.3; - break; - case "技术委员会评审、评审意见修改": - score=Double.valueOf(evaluationScore) * 0.4; - break; - case "重新技术委员会评审、评审意见修改": - score=Double.valueOf(evaluationScore) * 0.4; - break; - case "标准化复审": - score=Double.valueOf(evaluationScore) * 0.15; - break; - case "标准法规部高级经理审核": - score=Double.valueOf(evaluationScore) * 0.15; - break; - default: score=Double.valueOf(evaluationScore); - } - last.add(score); - } - revisePlan.setScore(last.stream().mapToDouble(Double::doubleValue).sum()); - } +// //查评分 +// if (ObjectUtils.isNotEmpty(revisePlan.getStandId())) { +// List last = new ArrayList<>(); +// List evaluations = qualityEvaluationDao.getEvaluationForm(new QueryWrapper().eq("law_id", revisePlan.getStandId()).eq("evaluation_type", "quality")); +// for (QualityEvaluation evaluation : evaluations) { +// Double score; +// String value; +// if (evaluation.getProcessNode()==null){ +// value=""; +// }else { +// value=evaluation.getProcessNode(); +// } +// String evaluationScore = ObjectUtils.isEmpty(evaluation.getScore()) ? "0" : evaluation.getScore(); +// switch (value){ +// case "征求意见": +// score=Double.valueOf(evaluationScore) * 0.3; +// break; +// case "技术委员会评审、评审意见修改": +// score=Double.valueOf(evaluationScore) * 0.4; +// break; +// case "重新技术委员会评审、评审意见修改": +// score=Double.valueOf(evaluationScore) * 0.4; +// break; +// case "标准化复审": +// score=Double.valueOf(evaluationScore) * 0.15; +// break; +// case "标准法规部高级经理审核": +// score=Double.valueOf(evaluationScore) * 0.15; +// break; +// default: score=Double.valueOf(evaluationScore); +// } +// last.add(score); +// } +// revisePlan.setScore(last.stream().mapToDouble(Double::doubleValue).sum()); +// } } PageInfo pageInfo = getPageInfo(esRevisePlan.getPager(),esRevisePlans); return Result.success(pageInfo); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java index def59e5e..2a2fa022 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java @@ -15,6 +15,7 @@ import com.adc.da.slrs.esStandRelation.entity.EsStandRelation; import com.adc.da.slrs.esStandRelation.service.IEsStandRelationService; import com.adc.da.slrs.sarBussionessStand.entity.SarBussionessStand; import com.adc.da.slrs.sarBussionessStand.service.ISarBussionessStandService; +import com.adc.da.slrs.sarEnterpriseStandardEvaluation.service.IQualityEvaluationService; import com.adc.da.sys.entity.UserEO; import com.adc.da.util.UUIDUtils; import com.alibaba.fastjson.JSON; @@ -26,6 +27,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.RoundingMode; +import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -56,6 +60,9 @@ public class EsRevisePlanServiceImpl extends ServiceImpl getAllPlans(EsRevisePlan esRevisePlan) { Integer count = esRevisePlanDao.getTotal(); @@ -73,6 +80,17 @@ public class EsRevisePlanServiceImpl extends ServiceImpl esRevisePlans = esRevisePlanDao.queryAll(esRevisePlan); + // 获取质量评分 + NumberFormat nf = NumberFormat.getNumberInstance(); + nf.setMaximumFractionDigits(2); + nf.setRoundingMode(RoundingMode.UP); + for (EsRevisePlan revisePlan : esRevisePlans) { + if (StringUtils.isNotBlank(revisePlan.getStandId())) { + Map scoreMap = qualityEvaluationService.getScore(revisePlan.getStandId()); + String quality = nf.format(scoreMap.get("quality")); + revisePlan.setScore(Double.valueOf(quality)); + } + } return esRevisePlans; } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/controller/SarBussStandFileController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/controller/SarBussStandFileController.java index 5984cd8e..d9e266bf 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/controller/SarBussStandFileController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/controller/SarBussStandFileController.java @@ -83,4 +83,12 @@ public class SarBussStandFileController extends BaseController //非在线编辑文件可转换pdf return sarBussStandFileEOService.batchUpdateSarBussFileMQ(); } + + + @ApiOperation(value = "企标发布稿重复问题,去重处理") + @GetMapping("/batchUpdateSarBussFileRepeat") + public ResponseMessage batchUpdateSarBussFileRepeat() throws Exception { + String result = sarBussStandFileEOService.batchUpdateSarBussFileRepeat(); + return Result.success(result); + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/ISarBussStandFileService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/ISarBussStandFileService.java index 56c2d4f9..9225ee69 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/ISarBussStandFileService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/ISarBussStandFileService.java @@ -21,4 +21,6 @@ public interface ISarBussStandFileService extends IService { ResponseMessage> batchUpdateSarBussFile(); ResponseMessage> batchUpdateSarBussFileMQ(); + + String batchUpdateSarBussFileRepeat(); } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/impl/SarBussStandFileServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/impl/SarBussStandFileServiceImpl.java index 339249e0..bc40f93a 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/impl/SarBussStandFileServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarBussStandFile/service/impl/SarBussStandFileServiceImpl.java @@ -7,11 +7,15 @@ import com.adc.da.common.UseModuleEnum; import com.adc.da.http.ResponseMessage; import com.adc.da.http.Result; import com.adc.da.mq.CreateOnlineEditingFileMQService; +import com.adc.da.slrs.sarBussStandAttrInfo.entity.SarBussStandAttrInfo; +import com.adc.da.slrs.sarBussStandAttrInfo.service.ISarBussStandAttrInfoService; import com.adc.da.slrs.sarBussStandFile.entity.SarBussStandFile; import com.adc.da.slrs.sarBussStandFile.dao.SarBussStandFileDao; import com.adc.da.slrs.sarBussStandFile.service.ISarBussStandFileService; import com.adc.da.slrs.sarBussionessStand.service.impl.SarBussionessStandServiceImpl; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -20,7 +24,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; /** *

@@ -47,6 +56,9 @@ public class SarBussStandFileServiceImpl extends ServiceImpl selectFileByAttId(String attId) throws Exception{ return sarStandFileEODao.selectFileByAttId(attId); @@ -140,4 +152,47 @@ public class SarBussStandFileServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SarBussStandAttrInfo::getValidFlag,"0"); + wrapper.isNotNull(SarBussStandAttrInfo::getFbgbuss); + wrapper.ne(SarBussStandAttrInfo::getFbgbuss,""); + wrapper.select(SarBussStandAttrInfo::getStandId,SarBussStandAttrInfo::getFbgbuss); + List allStand = standAttrInfoService.list(wrapper); + // 转换为Map + Map fbBussMap = new HashMap<>(); + allStand.forEach(each -> fbBussMap.put(each.getStandId(),each.getFbgbuss())); + // 循环每条数据 + for (Map.Entry entry : fbBussMap.entrySet()) { + // 把发布告文件做分割 + List attIdList = Arrays.asList(entry.getValue().split(",")); + // 根据发布稿文件查询发布告的具体信息,获取原文件名 + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(SarBussStandFile::getValidFlag,"0"); + wrapper1.in(SarBussStandFile::getAttId, attIdList); + List sarBussStandFileList = sarStandFileEODao.selectList(wrapper1); + // 对文件名做去重 + List collect = sarBussStandFileList.stream() + .filter(distinctByKey(SarBussStandFile::getFileName)) +// .sorted(Comparator.comparing(SarBussStandFile::getCreationTime)) + .collect(Collectors.toList()); + // 如果长度不相等,说明执行了去重,需要修改,重新放回企标详情表中 + String fbgbuss = collect.stream().map(SarBussStandFile::getAttId).collect(Collectors.joining(",")); + if (fbgbuss.length() != entry.getValue().length()) { + LambdaUpdateWrapper wrapper2 = new LambdaUpdateWrapper<>(); + wrapper2.eq(SarBussStandAttrInfo::getStandId,entry.getKey()); + wrapper2.set(SarBussStandAttrInfo::getFbgbuss,fbgbuss); + standAttrInfoService.update(wrapper2); + logger.info("出现重复的企标:"+ entry.getKey() + ",去重后发布稿包含:" + fbgbuss + "---去重前发布稿包含:" + entry.getValue()); + } + } + return "去重成功"; + } + public static Predicate distinctByKey(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarEnterpriseStandardEvaluation/service/impl/QualityEvaluationServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarEnterpriseStandardEvaluation/service/impl/QualityEvaluationServiceImpl.java index bd46d2aa..56956419 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarEnterpriseStandardEvaluation/service/impl/QualityEvaluationServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarEnterpriseStandardEvaluation/service/impl/QualityEvaluationServiceImpl.java @@ -196,32 +196,32 @@ public class QualityEvaluationServiceImpl extends ServiceImpl countZQYJList = qualityEvaluationDao.selectCountZQYJ(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId()); if(!countZQYJList.isEmpty()){ countZQYJStr = countZQYJList.size(); } } - if(qualityEvaluations.getProcessNode().equals("技术委员会评审、评审意见修改")) { + if("技术委员会评审、评审意见修改".equals(qualityEvaluations.getProcessNode())) { List countJSWYList = qualityEvaluationDao.selectCountJSWY(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId()); if(!countJSWYList.isEmpty()){ countJSWYStr = countJSWYList.size(); } } - if(qualityEvaluations.getProcessNode().equals("重新技术委员会评审、评审意见修改")) { + if("重新技术委员会评审、评审意见修改".equals(qualityEvaluations.getProcessNode())) { List countCXJSWYList = qualityEvaluationDao.selectCXJSWY(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId()); if(!countCXJSWYList.isEmpty()){ countCXJSWYStr = countCXJSWYList.size(); } } - if(qualityEvaluations.getProcessNode().equals("标准化复审")) { + if("标准化复审".equals(qualityEvaluations.getProcessNode())) { List countBZHFSList = qualityEvaluationDao.selectBZHFS(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId()); if(!countBZHFSList.isEmpty()){ countBZHFSStr = countBZHFSList.size(); } } - if(qualityEvaluations.getProcessNode().equals("标准法规部高级经理审核")) { + if("标准法规部高级经理审核".equals(qualityEvaluations.getProcessNode())) { List countBZSHList = qualityEvaluationDao.selectBZSH(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId()); if(!countBZSHList.isEmpty()){ countBZSHStr = countBZSHList.size(); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/controller/SarLawsInformationController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/controller/SarLawsInformationController.java new file mode 100644 index 00000000..54b6a43d --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/controller/SarLawsInformationController.java @@ -0,0 +1,217 @@ +package com.adc.da.slrs.sarLawsInformation.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; +import com.adc.da.base.web.BaseController; +import com.adc.da.common.ReadExcel; +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.http.PageInfo; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsInformation.service.SarLawsInformationService; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.text.ParseException; +import java.util.Arrays; +import java.util.List; + +/** + * @author tjzdw + * @description 政策资料中心 + * @date 2023/10/23 + */ +@RestController +@RequestMapping("/${restPath}/lawss/sarLawsInformation") +public class SarLawsInformationController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(SarLawsInformationController.class); + + @Resource + private SarLawsInformationService informationService; + + @Value("${file.path}") + private String filePath; + + @ApiOperation(value = "根据政策资料ID查询资料信息") + @GetMapping("/getLawsInformationInfo") + public ResponseMessage getLawsInformationInfo(String id){ + if (StringUtils.isBlank(id)) { + return Result.error("会议ID为空!"); + } + SarLawsInformation sarLawsInformation = informationService.getLawsInformationInfo(id); + return Result.success(sarLawsInformation); + } + + @ApiOperation(value = "分页查询") + @GetMapping("/page") + public ResponseMessage> page(SarLawsInformation sarLawsInformation) { + List rows = informationService.queryByPage(sarLawsInformation); + return Result.success(getPageInfo(sarLawsInformation.getPager(), rows)); + } + + @ApiOperation(value = "新增政策资料") + @PostMapping(value = "/addLawsInformation", consumes = "application/json;charset=UTF-8") + public ResponseMessage create(@RequestBody SarLawsInformation sarLawsInformation) throws Exception { + informationService.addLawsInformation(sarLawsInformation); + return Result.success(); + } + + @ApiOperation("根据资料ID删除资料信息") + @DeleteMapping("/deleteLawsInformation") + public ResponseMessage deleteInformation(String id) { + if (StringUtils.isBlank(id)) { + return Result.error("删除失败,政策资料ID为空"); + } + informationService.deleteInformation(id); + return Result.success(); + } + + @ApiOperation("根据资料ID修改政策资料信息") + @PutMapping("/updateLawsInformationInfo") + public ResponseMessage updateLawsInformationInfo(@RequestBody SarLawsInformation lawsInformation) { + if (ObjectUtils.isEmpty(lawsInformation)) { + return Result.error("更新失败,政策资料信息不存在"); + } + Boolean updateResult = informationService.updateLawsInformationInfo(lawsInformation); + return updateResult ? Result.success() : Result.error("更新失败"); + } + + @ApiOperation("导出政策法规资料信息") + @GetMapping("/exportLawsInformationInfo") + public ResponseMessage exportLawsInformationInfo(SarLawsInformation sarLawsInformation, HttpServletResponse response, + HttpServletRequest request) { + OutputStream os = null; + Workbook workbook = null; + List datas; + try { + if(StringUtils.isEmpty(sarLawsInformation.getExportName())||sarLawsInformation.getExportName().equals("null")){ + sarLawsInformation.setExportName("政策法规资料信息"); + } + response.setHeader("Content-Disposition", + "attachment; filename=" + ReadExcel.encodeFileName(sarLawsInformation.getExportName()+".xlsx", + request)); + // 导出数据,若指定了值则使用ids字段条件导出,否则根据条件导出 + if (StrUtil.isNotBlank(sarLawsInformation.getExportIds())) { + List idList = Arrays.asList(sarLawsInformation.getExportIds().split(",")); + datas = informationService.getLawsInformationByIds(idList); + } else { + // 导出所有数据 + datas = informationService.getAllLawsInformation(sarLawsInformation); + } + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setSheetName(sarLawsInformation.getExportName()); + workbook = ExcelExportUtil.exportExcel(exportParams,SarLawsInformation.class,datas); + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + throw new AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + return Result.success(); + } + + @ApiOperation("Excel文件导入政策资料信息") + @PostMapping("/importLawsInformationInfo") + public ResponseMessage importLawsInformationInfo(@RequestParam(value = "file",required = false) MultipartFile file) throws ParseException { + if (file == null) { + return Result.error("文件为空,请重新上传"); + } + return informationService.importLawsInformationInfo(file); + } + + @ApiOperation(value = "政策法规资料导入模板下载") + @GetMapping("/exportTemplateFile") + public void exportTemplateFile(String fileName,HttpServletResponse response, HttpServletRequest request)throws Exception{ + + OutputStream os = null; + OutputStream excelOS = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = "政策法规资料导入模板"; + if (StringUtils.isNotEmpty(fileName)) { + fileOriName = fileName; + } + try{ + //创建临时文件夹 + String fileNowPath = filePath + "/tempZip/" + UUIDUtils.randomUUID20() + "/" + fileOriName; + File nowFile = new File(fileNowPath); + if (nowFile.exists()){ + nowFile.delete(); + } + nowFile.mkdirs(); + String fileName2 = "导入模板.xls"; + HSSFSheet sheetItems = workbook.createSheet("模板"); + sheetItems.setDefaultColumnWidth(13); + Row rowHeader = sheetItems.createRow(1);//开始创建标题行 + sheetItems.addMergedRegion(new CellRangeAddress(0, 0, 0, 8)); + Row row2 = sheetItems.createRow(0);//开始创建填写说明 + String exportFieldName = FieldConvertUtil.exportFieldLawsInformation; + if (StringUtils.isNotBlank(exportFieldName)) { + String[] headerArr = exportFieldName.split(","); + for (int i=0;i < headerArr.length; i++) { + rowHeader.createCell(i).setCellValue(headerArr[i]); + } + } + Cell cellA2 = row2.createCell(0); + cellA2.setCellValue(FieldConvertUtil.exportLawsInformationDesc); + //sheetItems.setColumnWidth(0, 20 * 150); + row2.setHeight((short) (100 * 25)); + HSSFCellStyle cellStyle =workbook.createCellStyle(); + cellStyle.setAlignment(HorizontalAlignment.LEFT); + cellStyle.setVerticalAlignment(VerticalAlignment.TOP); + cellStyle.setWrapText(true); + cellA2.setCellStyle(cellStyle); + String repFileName = fileName2.replaceAll("/","_"); + excelOS = new FileOutputStream(fileNowPath + "/" + repFileName); + response.setHeader("Content-Disposition", + "attachment; filename=\""+ ReadExcel.encodeFileName(fileOriName+".zip", request) +"\""); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(excelOS); + excelOS.flush(); + excelOS.close(); + ZipUtil.zip(fileNowPath,fileNowPath+".zip"); + FileInputStream fis = new FileInputStream(fileNowPath+".zip"); + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + os.close(); // 后开先关 + fis.close(); // 先开后关 + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new com.adc.da.exception.AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + IOUtils.closeQuietly(excelOS); + } + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/dao/SarLawsInformationDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/dao/SarLawsInformationDao.java new file mode 100644 index 00000000..184679d4 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/dao/SarLawsInformationDao.java @@ -0,0 +1,27 @@ +package com.adc.da.slrs.sarLawsInformation.dao; + +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information】的数据库操作Mapper +* @createDate 2023-10-23 09:41:56 +* @Entity com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation +*/ +@Mapper +public interface SarLawsInformationDao extends BaseMapper { + + Integer queryByPageCount(SarLawsInformation page); + + List queryByPage(SarLawsInformation page); + + List getAllLawsInformation(SarLawsInformation sarLawsInformation); +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/entity/SarLawsInformation.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/entity/SarLawsInformation.java new file mode 100644 index 00000000..8883148f --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/entity/SarLawsInformation.java @@ -0,0 +1,245 @@ +package com.adc.da.slrs.sarLawsInformation.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.base.page.BasePage; +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 java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * + * @TableName sar_laws_information + */ +@TableName(value ="sar_laws_information") +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@Data +public class SarLawsInformation extends BasePage implements Serializable { + /** + * 主键 + */ + @ApiModelProperty(value = "主键") + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + /** + * 一级资料类别 + */ + @ApiModelProperty("一级资料类别") + @TableField(value = "FIRST_TYPE") + private String firstType; + + /** + * 一级资料类别名称 + */ + @ApiModelProperty(value = "一级资料类别名称") + @TableField(exist = false) + @Excel(name = "一级资料类别", orderNum = "0") + private String firstTypeName; + + /** + * 二级资料类别 + */ + @ApiModelProperty(value = "二级资料类别") + @TableField(value = "SECOND_TYPE") + private String secondType; + + /** + * 二级资料类别名称 + */ + @ApiModelProperty(value = "二级资料类别名称") + @TableField(exist = false) + @Excel(name = "二级资料类别", orderNum = "1") + private String secondTypeName; + + /** + * 三级资料类别 + */ + @ApiModelProperty(value = "三级资料类别") + @TableField(value = "THIRD_TYPE") + private String thirdType; + + /** + * 三级资料类别名称 + */ + @ApiModelProperty(value = "三级资料类别名称") + @TableField(exist = false) + @Excel(name = "三级资料类别", orderNum = "2") + private String thirdTypeName; + + /** + * 四级资料类别 + */ + @ApiModelProperty(value = "四级资料类别") + @TableField(value = "FOURTH_TYPE") + private String fourthType; + + /** + * 四级资料类别名称 + */ + @ApiModelProperty(value = "四级资料类别名称") + @TableField(exist = false) + @Excel(name = "四级资料类别", orderNum = "3") + private String fourthTypeName; + + /** + * 资料名称 + */ + @ApiModelProperty(value = "资料名称") + @TableField(value = "NAME") + @Excel(name = "资料名称", orderNum = "4") + private String name; + + /** + * 资料归属部门 + */ + @ApiModelProperty(value = "资料归属部门") + @TableField(value = "DEPARTMENT") + @Excel(name = "资料归属部门", orderNum = "5") + private String department; + + /** + * 作者 + */ + @ApiModelProperty(value = "作者") + @TableField(value = "AUTHOR") + @Excel(name = "作者", orderNum = "6") + private String author; + + /** + * 上传时间 + */ + @ApiModelProperty(value = "上传时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @TableField(value = "UPLOAD_TIME") + @Excel(name = "上传时间", orderNum = "7", exportFormat = "yyyy-MM-dd") + private Date uploadTime; + + /** + * 资料说明 + */ + @ApiModelProperty(value = "资料说明") + @TableField(value = "DESCRIPTION") + @Excel(name = "资料说明", orderNum = "8") + private String description; + + /** + * 资料文件 + */ + @ApiModelProperty(value = "资料文件") + @TableField(value = "INFORMATION_FILE") + private String informationFile; + + /** + * 资料文件名称 + */ + @ApiModelProperty(value = "资料文件对象列表") + @TableField(exist = false) + private List informationFileList; + + /** + * 可查看者,若设置为空则所有用户均可查看,若设置人员后,仅有可查看者可以查看文件信息。 + */ + @ApiModelProperty(value = "可查看者") + @TableField(value = "VIEWABLE_BY") + private String viewableBy; + + /** + * 可下载者,若设置为空则仅有上传人和审批人可以查看,若设置人员后,仅有可下载者可下载文件信息。 + */ + @ApiModelProperty(value = "可下载者") + @TableField(value = "DOWNLOADABLE_BY") + private String downloadableBy; + + /** + * 创建人和审批人 + */ + @ApiModelProperty(value = "创建人和审批人") + @TableField + private String createAndApproveBy; + + /** + * 树节点ID + */ + @ApiModelProperty(value = "树节点ID") + private String treeNodeId; + + /** + * 树节点名称 + */ + @ApiModelProperty(value = "树节点名称") + @TableField(exist = false) + private String treeNodeName; + + /** + * 逻辑删除,0可用,1不可用 + */ + @ApiModelProperty(value = "逻辑删除") + @TableField(value = "VALID_FLAG") + private Integer validFlag; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @TableField(value = "CREATE_TIME") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @TableField(value = "MODIFY_TIME") + private Date modifyTime; + + + /** + * 排序字段 + */ + @ApiModelProperty(value = "排序字段") + @TableField(exist = false) + private String sortField = "ID"; + + /** + * 排序方式 + */ + @ApiModelProperty(value = "排序方式") + @TableField(exist = false) + private String sortMode = "asc"; + + /** + * 收藏ID + */ + @ApiModelProperty(value = "收藏ID") + @TableField(exist = false) + private String collectId; + + // Excel导出使用字段 + @ApiModelProperty("导出文件名") + @TableField(exist = false) + private String exportName; + + @ApiModelProperty("导出的文件Ids") + @TableField(exist = false) + private String exportIds; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/SarLawsInformationService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/SarLawsInformationService.java new file mode 100644 index 00000000..d2affd3e --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/SarLawsInformationService.java @@ -0,0 +1,42 @@ +package com.adc.da.slrs.sarLawsInformation.service; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information】的数据库操作Service +* @createDate 2023-10-23 09:41:56 +*/ +public interface SarLawsInformationService extends IService { + + SarLawsInformation getLawsInformationInfo(String id); + + List queryByPage(SarLawsInformation sarLawsInformation); + + Integer addLawsInformation(SarLawsInformation sarLawsInformation); + + Boolean deleteInformation(String id); + + Boolean updateLawsInformationInfo(SarLawsInformation lawsInformation); + + /** + * 根据法规资料id列表查询资料信息,用于导出,不包含文件信息 + * @param idList 法规资料Id列表 + * @return 法规资料列表 + */ + List getLawsInformationByIds(List idList); + + /** + * 查询法规资料信息,用于导出,不包含文件信息 + * @param sarLawsInformation 法规资料对象,用于查询 + * @return 法规资料列表 + */ + List getAllLawsInformation(SarLawsInformation sarLawsInformation); + + ResponseMessage importLawsInformationInfo(MultipartFile file); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/impl/SarLawsInformationServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/impl/SarLawsInformationServiceImpl.java new file mode 100644 index 00000000..4cd5ecf0 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformation/service/impl/SarLawsInformationServiceImpl.java @@ -0,0 +1,516 @@ +package com.adc.da.slrs.sarLawsInformation.service.impl; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.att.service.IAttFileEOService; +import com.adc.da.common.FileUnZip; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.person.entity.TsPersonCollect; +import com.adc.da.person.service.IPersonCollectEOService; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree; +import com.adc.da.slrs.sarLawsInformationCenterTree.service.SarLawsInformationCenterTreeService; +import com.adc.da.slrs.sarUpdLog.entity.SarUpdLog; +import com.adc.da.slrs.sarUpdLog.service.ISarUpdLogService; +import com.adc.da.slrs.sarUser.entity.TsUser; +import com.adc.da.slrs.sarUser.service.ITsUserService; +import com.adc.da.slrs.tsDictionaryType.entity.TsDicType; +import com.adc.da.slrs.tsDictionaryType.service.ITsDicTypeService; +import com.adc.da.util.LoginUserUtil; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsInformation.service.SarLawsInformationService; +import com.adc.da.slrs.sarLawsInformation.dao.SarLawsInformationDao; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +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.ss.usermodel.WorkbookFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information】的数据库操作Service实现 +* @createDate 2023-10-23 09:41:56 +*/ +@Service +public class SarLawsInformationServiceImpl extends ServiceImpl + implements SarLawsInformationService{ + + @Resource + private SarLawsInformationCenterTreeService treeService; + @Resource + private IAttFileEOService attFileEOService; + @Resource + private ITsDicTypeService dicTypeService; + @Resource + private IPersonCollectEOService collectEOService; + @Resource + private ISarUpdLogService updLogService; + @Resource + private ITsUserService userService; + @Value("${file.path}") + private String filePath;//文件存储路径 + + @Override + public SarLawsInformation getLawsInformationInfo(String id) { + SarLawsInformation sarLawsInformation = this.baseMapper.selectById(id); + // 将字典编号变更为字典值 + convertCodeToName(sarLawsInformation); + // 查询资料文件信息 + if (StringUtils.isNotBlank(sarLawsInformation.getInformationFile())) { + String[] split = sarLawsInformation.getInformationFile().split(","); + List fileNameList = new ArrayList<>(); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo); + } + sarLawsInformation.setInformationFileList(fileNameList); + } + // 查询体系节点信息 + if (StringUtils.isNotBlank(sarLawsInformation.getTreeNodeId())) { + SarLawsInformationCenterTree treeNode = treeService.getById(sarLawsInformation.getTreeNodeId()); + sarLawsInformation.setTreeNodeName(treeNode.getName()); + } + // 查询是否被收藏 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TsPersonCollect::getCollectResId, sarLawsInformation.getId()); + List list = collectEOService.list(wrapper); + if (list.size() > 0) { + sarLawsInformation.setCollectId(list.get(0).getId()); + } + return sarLawsInformation; + } + + @Override + public List queryByPage(SarLawsInformation page) { + // 设置排序字段 + if (StringUtils.isNotBlank(page.getSortField())) { + String sortField = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(page.getSortField()),"_").toUpperCase(); + page.setSortField(sortField); + } else { + page.setSortField("ID"); + page.setSortMode("asc"); + } + Integer rowCount = this.baseMapper.queryByPageCount(page); + page.getPager().setRowCount(rowCount); + List sarLawsInformationList = this.baseMapper.queryByPage(page); + for (SarLawsInformation sarLawsInformation : sarLawsInformationList) { + // 将字典编号变更为字典值 + convertCodeToName(sarLawsInformation); + // 查询文件信息 + if (StringUtils.isNotBlank(sarLawsInformation.getInformationFile())) { + String[] split = sarLawsInformation.getInformationFile().split(","); + List fileNameList = new ArrayList<>(); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo); + } + sarLawsInformation.setInformationFileList(fileNameList); + } + } + return sarLawsInformationList; + } + + @Override + public Integer addLawsInformation(SarLawsInformation sarLawsInformation) { + sarLawsInformation.setCreateTime(new Date()); + sarLawsInformation.setModifyTime(new Date()); + if (sarLawsInformation.getUploadTime() == null) { + sarLawsInformation.setUploadTime(new Date()); + } + sarLawsInformation.setValidFlag(0); + String userId = LoginUserUtil.getUserId(); + TsUser tsUser = userService.getById(userId); + sarLawsInformation.setViewableBy(tsUser.getUname() + "(" + userId + ")"); + sarLawsInformation.setDownloadableBy(tsUser.getUname() + "(" + userId + ")"); + // 若体系类别不存在,则默认属于根节点 + if (StringUtils.isBlank(sarLawsInformation.getTreeNodeId())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.isNull(SarLawsInformationCenterTree::getParentId); + SarLawsInformationCenterTree one = treeService.getOne(wrapper); + sarLawsInformation.setTreeNodeId(one.getId()); + } + return this.baseMapper.insert(sarLawsInformation); + } + + @Override + public Boolean deleteInformation(String id) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(SarLawsInformation::getId, id); + wrapper.set(SarLawsInformation::getValidFlag,1); + wrapper.set(SarLawsInformation::getModifyTime,new Date()); + return update(wrapper); + } + + @Override + public Boolean updateLawsInformationInfo(SarLawsInformation lawsInformation) { + if (StringUtils.isBlank(lawsInformation.getId())) { + return false; + } + SarLawsInformation oldLawsInformation = getLawsInformationInfo(lawsInformation.getId()); + lawsInformation.setModifyTime(new Date()); + // 比较修改前后的不同 + List compareResult = compareSarLawsInformation(oldLawsInformation, lawsInformation); + if (compareResult.size() > 0) { + int update = this.baseMapper.updateById(lawsInformation); + // 添加修改记录 + SarUpdLog sarUpdLogEO = new SarUpdLog(); + sarUpdLogEO.setId(UUIDUtils.randomUUID20()); + sarUpdLogEO.setSarId(oldLawsInformation.getId()); + sarUpdLogEO.setSarType("LAWS_INFORMATION"); + sarUpdLogEO.setCreationTime(new Date()); + sarUpdLogEO.setCreationUser(LoginUserUtil.getUserId()); + sarUpdLogEO.setContent(oldLawsInformation.getName() + "," + String.join(",",compareResult)); + updLogService.save(sarUpdLogEO); + } + return true; + } + + @Override + public List getLawsInformationByIds(List idList) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(SarLawsInformation::getId, idList); + List sarLawsInformationList = this.baseMapper.selectList(wrapper); + for (SarLawsInformation sarLawsInformation : sarLawsInformationList) { + // 将字典编号变更为字典值 + convertCodeToName(sarLawsInformation); + } + return sarLawsInformationList; + } + + @Override + public List getAllLawsInformation(SarLawsInformation sarLawsInformation) { + List sarLawsInformationList = this.baseMapper.getAllLawsInformation(sarLawsInformation); + for (SarLawsInformation lawsInformation : sarLawsInformationList) { + // 将字典编号变更为字典值 + convertCodeToName(lawsInformation); + // 查询文件信息 + if (StringUtils.isNotBlank(lawsInformation.getInformationFile())) { + String[] split = lawsInformation.getInformationFile().split(","); + List fileNameList = new ArrayList<>(); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo); + } + lawsInformation.setInformationFileList(fileNameList); + } + } + return sarLawsInformationList; + } + + @Override + public ResponseMessage importLawsInformationInfo(MultipartFile file) { + //获取文件全称 + String fileNameStr = file.getOriginalFilename(); + //获取最后.的位置 + assert fileNameStr != null; + int pos = fileNameStr.lastIndexOf("."); + //获取压缩文件名称并以小写显示 + String fileStr = fileNameStr.substring(pos + 1).toLowerCase(); + //校验是否是zip文件 + if (!fileStr.equals("zip")) { + return Result.error("请上传zip格式的文件"); + } + //进行拼接获取文件名称 + String fileName = fileNameStr.substring(0, pos); + //获取路径和文件名称 + String path = filePath + "/" + fileName; + + File saveDirectory = new File(path); + //判断saveDirectory中是否是文件夹 + if (!saveDirectory.isDirectory()) { + saveDirectory.mkdir(); + } + //将文件写入到指定路径中 + try { + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件存储失败!"); + } + //解压缩 + String zipEntryName = null; + try { + zipEntryName = FileUnZip.unZipFiles(path + "/" + fileNameStr, path); + FileUnZip.delete(new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件解压失败"); + } + //获取文件信息 + List fileList = readImpExcelFile(zipEntryName); + //判断获取到的文件数量 + if (fileList.size() != 1) { + return Result.error("上传的文件只能有一个"); + } + File importFile = fileList.get(0); + if (!importFile.getName().contains(".xls") && !importFile.getName().contains(".xlsx")) { + return Result.error("文件必须是EXCEL文件"); + } + Workbook workbook = null; + try { + workbook = WorkbookFactory.create(importFile); + } catch (IOException e) { + FileUnZip.deleteDir(saveDirectory); + return Result.error("导入失败,需要导入的数据有问题或导入的企标标号和企标名称已存在"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet == null) { + return Result.error("工作表为空"); + } + StringBuilder sb = new StringBuilder(); + List headerList = new ArrayList<>(); + // 获取excel表头 + Row headerRow = sheet.getRow(1); + for (int i = 0; i < 8; i++) { + headerList.add(headerRow.getCell(i).getStringCellValue()); + } + + // 判断表头字段是否相同 + if (!String.join(",",headerList).equals(FieldConvertUtil.exportFieldLawsInformation)) { + try { + workbook.close(); + } catch (IOException e) { + return Result.error("文件关闭出错"); + } + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("fail", "读取失败,请严格按照模板文件导入数据"); + } + + ImportParams importParams = new ImportParams(); + importParams.setTitleRows(1); + List sarLawsInformationList = ExcelImportUtil.importExcel(readImpExcelFile(zipEntryName).get(0), SarLawsInformation.class, importParams); + // 获取需要校验的字段 + List firstMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("firstMaterialType"); + Set firstMaterialTypeNameSet = firstMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + List secondMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("secondMaterialType"); + Set secondMaterialTypeNameSet = secondMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + List thirdMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("thirdMaterialType"); + Set thirdMaterialTypeNameSet = thirdMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + List fourthMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("fourthMaterialType"); + Set fourthMaterialTypeNameSet = fourthMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet()); + // 遍历索引 + int index = 1; + // 去除空数据 + List sarLawsInformationListNew = new ArrayList<>(); + for (SarLawsInformation sarLawsInformation : sarLawsInformationList) { + if (StringUtils.isNotBlank(sarLawsInformation.getName())) { + sarLawsInformationListNew.add(sarLawsInformation); + } + } + for (SarLawsInformation sarLawsInformation : sarLawsInformationListNew){ + // 把excel表中的类别名转换为类别编号,并对类别名做检测 + if (StringUtils.isNotBlank(sarLawsInformation.getFirstTypeName())) { + List firstTypeCodeList = new ArrayList<>(); + for (String firstTypeName : sarLawsInformation.getFirstTypeName().split(",")) { + if (!firstMaterialTypeNameSet.contains(firstTypeName)){ + return Result.error("第" + index + "条记录的一级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : firstMaterialTypeList) { + if (firstTypeName.equals(tsDicType.getDicTypeName())) { + firstTypeCodeList.add(tsDicType.getDicTypeCode()); + } + } + } + sarLawsInformation.setFirstType(String.join(",", firstTypeCodeList)); + } + if (StringUtils.isNotBlank(sarLawsInformation.getSecondTypeName())) { + List secondTypeCodeList = new ArrayList<>(); + for (String secondTypeName : sarLawsInformation.getSecondTypeName().split(",")) { + if (!secondMaterialTypeNameSet.contains(secondTypeName)){ + return Result.error("第" + index + "条记录的二级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : secondMaterialTypeList) { + if (secondTypeName.equals(tsDicType.getDicTypeName())) { + secondTypeCodeList.add(tsDicType.getDicTypeCode()); + } + } + } + sarLawsInformation.setSecondType(String.join(",", secondTypeCodeList)); + } + if (StringUtils.isNotBlank(sarLawsInformation.getThirdTypeName())) { + List thirdTypeCodeList = new ArrayList<>(); + for (String thirdTypeName : sarLawsInformation.getThirdTypeName().split(",")) { + if (!thirdMaterialTypeNameSet.contains(thirdTypeName)){ + return Result.error("第" + index + "条记录的三级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : thirdMaterialTypeList) { + if (thirdTypeName.equals(tsDicType.getDicTypeName())) { + thirdTypeCodeList.add(tsDicType.getDicTypeCode()); + } + } + } + sarLawsInformation.setThirdType(String.join(",", thirdTypeCodeList)); + } + if (StringUtils.isNotBlank(sarLawsInformation.getFourthTypeName())) { + List fourthTypeCodeList = new ArrayList<>(); + for (String fourthTypeName : sarLawsInformation.getFourthTypeName().split(",")) { + if (!fourthMaterialTypeNameSet.contains(fourthTypeName)){ + return Result.error("第" + index + "条记录的四级会议类别不符合输入要求"); + } + for (TsDicType tsDicType : fourthMaterialTypeList) { + if (fourthTypeName.equals(tsDicType.getDicTypeName())) { + fourthTypeCodeList.add(tsDicType.getDicTypeCode()); + } + } + } + sarLawsInformation.setFourthType(String.join(",", fourthTypeCodeList)); + } + // 索引 +1 + index++; + // 存入数据库 + addLawsInformation(sarLawsInformation); + } + return Result.success("导入成功"); + } + + public void convertCodeToName(SarLawsInformation sarLawsInformation) { + List firstTypeList = new ArrayList<>(); + for (String type : sarLawsInformation.getFirstType().split(",")) { + if (StringUtils.isNotBlank(type)) { + firstTypeList.add(dicTypeService.getDicTypeNameByDicCode(type)); + } + } + sarLawsInformation.setFirstTypeName(String.join(",",firstTypeList)); + List secondTypeList = new ArrayList<>(); + for (String type : sarLawsInformation.getSecondType().split(",")) { + if (StringUtils.isNotBlank(type)) { + secondTypeList.add(dicTypeService.getDicTypeNameByDicCode(type)); + } + } + sarLawsInformation.setSecondTypeName(String.join(",",secondTypeList)); + List thirdTypeList = new ArrayList<>(); + for (String type : sarLawsInformation.getThirdType().split(",")) { + if (StringUtils.isNotBlank(type)) { + thirdTypeList.add(dicTypeService.getDicTypeNameByDicCode(type)); + } + } + sarLawsInformation.setThirdTypeName(String.join(",",thirdTypeList)); + List fourthTypeList = new ArrayList<>(); + for (String type : sarLawsInformation.getFourthType().split(",")) { + if (StringUtils.isNotBlank(type)) { + fourthTypeList.add(dicTypeService.getDicTypeNameByDicCode(type)); + } + } + sarLawsInformation.setFourthTypeName(String.join(",",fourthTypeList)); + } + + /** + * 比较两个SarLawsInformation 对象 + * @param oldInfo 数据库中存储的对象 + * @param newInfo 更新后的对象 + * @return 差异 + */ + public List compareSarLawsInformation(SarLawsInformation oldInfo, SarLawsInformation newInfo) { + List changes = new ArrayList<>(); + // 不需要比较的字段 + String[] ignoreFields = {"id","firstTypeName","secondTypeName","thirdTypeName","fourthTypeName","uploadTime", + "informationFileList","createAndApproveBy","treeNodeId","treeNodeName","validFlag","createTime", + "modifyTime","sortField","sortMode","collectId","serialVersionUID"}; + List ignoreFieldList = Arrays.asList(ignoreFields); + // 获取SarLawsInformation类的所有字段 + Field[] fields = SarLawsInformation.class.getDeclaredFields(); + for (Field field : fields) { + if (!ignoreFieldList.contains(field.getName())) { + try { + field.setAccessible(true); + String oldValue = String.valueOf(field.get(oldInfo)); + String newValue = String.valueOf(field.get(newInfo)); + if (!Objects.equals(oldValue, newValue)) { + if ("firstType".equals(field.getName()) || "secondType".equals(field.getName()) || "thirdType".equals(field.getName()) || + "fourthType".equals(field.getName())) { + List typeNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(newValue)) { + for (String type : newValue.split(",")) { + if (StringUtils.isNotBlank(type)) { + typeNameList.add(dicTypeService.getDicTypeNameByDicCode(type)); + } + } + } + // 获取资料类型名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = SarLawsInformation.class.getMethod("get" + fieldName + "Name"); + Object oldTypeName = method.invoke(oldInfo); + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldTypeName + "\"改为\"" + String.join(",",typeNameList) + "\""); + } else if ("informationFile".equals(field.getName())) { + List fileNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(newValue)) { + String[] split = newValue.split(","); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo.getOldFileName()); + } + } + // 获取资料类型名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = SarLawsInformation.class.getMethod("get" + fieldName + "Name"); + List oldFileList = (List)method.invoke(oldInfo); + List oldFileNameList = new ArrayList<>(); + if (oldFileList != null && oldFileList.size() > 0) { + for (Object oldFile : oldFileList) { + AttFileEO oldFile1 = (AttFileEO) oldFile; + oldFileNameList.add(oldFile1.getOldFileName()); + } + } + // 获取字段名称 + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + String.join(",",oldFileNameList) + "\"改为\"" + String.join(",",fileNameList) + "\""); + } + else { + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldValue + "\"改为\"" + newValue + "\""); + } + } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + // 处理异常 + e.printStackTrace(); + } + } + } + return changes; + } + + private static List readImpExcelFile(String path) { + File file = new File(path); + List resultlist = new ArrayList<>(); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File fi : files) { + // 对文件进行过滤,读取所有文件 + String name = fi.getName(); + //文件不为空 添加 + if (name != null){ + resultlist.add(fi); + } + } + } + return resultlist; + } +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/controller/SarLawsInformationCenterTreeController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/controller/SarLawsInformationCenterTreeController.java new file mode 100644 index 00000000..d6f62589 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/controller/SarLawsInformationCenterTreeController.java @@ -0,0 +1,56 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.controller; + +import com.adc.da.base.web.BaseController; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTreeData; +import com.adc.da.slrs.sarLawsInformationCenterTree.service.SarLawsInformationCenterTreeService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/23 + */ +@RestController +@RequestMapping("/${restPath}/lawss/sarLawsInformation/tree") +public class SarLawsInformationCenterTreeController extends BaseController { + + @Resource + private SarLawsInformationCenterTreeService informationCenterTreeService; + + @ApiOperation("新增资料中心左侧树节点") + @PostMapping("/addTreeNode") + public ResponseMessage addTreeNode(@RequestBody SarLawsInformationCenterTree informationCenterTree){ + informationCenterTreeService.addTreeNode(informationCenterTree); + return Result.success(); + } + + @ApiOperation("删除树节点") + @DeleteMapping("/deleteTreeNode") + public ResponseMessage deleteTreeNode(String id){ + Boolean aBoolean = informationCenterTreeService.deleteTreeNode(id); + return aBoolean ? Result.success("删除成功") : Result.error("节点下存在数据无法删除。"); + } + + + @ApiOperation("查询树结构") + @GetMapping("/getTree") + public ResponseMessage> getTree(){ + List informationCenterTreeList = informationCenterTreeService.getTree(); + return Result.success(informationCenterTreeList); + } + + @ApiOperation("修改树节点") + @PutMapping("/updateTreeNode") + public ResponseMessage updateTreeNode(@RequestBody SarLawsInformationCenterTree informationCenterTree){ + boolean b = informationCenterTreeService.updateTreeNode(informationCenterTree); + return Result.success("修改成功"); + } + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/dao/SarLawsInformationCenterTreeDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/dao/SarLawsInformationCenterTreeDao.java new file mode 100644 index 00000000..38aaf162 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/dao/SarLawsInformationCenterTreeDao.java @@ -0,0 +1,18 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.dao; + +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information_center_tree】的数据库操作Mapper +* @createDate 2023-10-23 11:20:26 +* @Entity com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree +*/ +public interface SarLawsInformationCenterTreeDao extends BaseMapper { + +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTree.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTree.java new file mode 100644 index 00000000..b497ee64 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTree.java @@ -0,0 +1,45 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.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 com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * + * @TableName sar_laws_information_center_tree + */ +@TableName(value ="sar_laws_information_center_tree") +@Data +public class SarLawsInformationCenterTree implements Serializable { + /** + * 主键 + */ + @TableId(value = "id", type = IdType.ID_WORKER_STR) + private String id; + + /** + * 父ID + */ + @TableField(value = "parent_id") + private String parentId; + + /** + * 节点名称 + */ + @TableField(value = "name") + private String name; + + /** + * 排序字段 + */ + @TableField(value = "sort") + private Integer sort; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTreeData.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTreeData.java new file mode 100644 index 00000000..b8f144cf --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/entity/SarLawsInformationCenterTreeData.java @@ -0,0 +1,40 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * + * @TableName sar_laws_information_center_tree + */ +@Data +public class SarLawsInformationCenterTreeData implements Serializable { + /** + * 主键 + */ + private String id; + + /** + * 父ID + */ + private String parentId; + + /** + * 节点名称 + */ + private String name; + + /** + * 排序字段 + */ + private Integer sort; + + /** + * 子节点 + */ + private List children; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/SarLawsInformationCenterTreeService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/SarLawsInformationCenterTreeService.java new file mode 100644 index 00000000..a511b834 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/SarLawsInformationCenterTreeService.java @@ -0,0 +1,25 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.service; + +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTreeData; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information_center_tree】的数据库操作Service +* @createDate 2023-10-23 11:20:26 +*/ +public interface SarLawsInformationCenterTreeService extends IService { + + void setResource(SarLawsInformationCenterTree informationCenterTree); + + void addTreeNode(SarLawsInformationCenterTree informationCenterTree); + + Boolean deleteTreeNode(String id); + + List getTree(); + + boolean updateTreeNode(SarLawsInformationCenterTree informationCenterTree); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/impl/SarLawsInformationCenterTreeServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/impl/SarLawsInformationCenterTreeServiceImpl.java new file mode 100644 index 00000000..016db49c --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsInformationCenterTree/service/impl/SarLawsInformationCenterTreeServiceImpl.java @@ -0,0 +1,142 @@ +package com.adc.da.slrs.sarLawsInformationCenterTree.service.impl; + +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsInformation.service.SarLawsInformationService; +import com.adc.da.slrs.sarLawsInformationCenterTree.dao.SarLawsInformationCenterTreeDao; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTreeData; +import com.adc.da.slrs.sarRole.dao.TsRoleDao; +import com.adc.da.slrs.sarUser.service.ITsUserService; +import com.adc.da.slrs.tsRoleMeunData.dao.TsRoleMenuDataDao; +import com.adc.da.util.LoginUserUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree; +import com.adc.da.slrs.sarLawsInformationCenterTree.service.SarLawsInformationCenterTreeService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_information_center_tree】的数据库操作Service实现 +* @createDate 2023-10-23 11:20:26 +*/ +@Service +public class SarLawsInformationCenterTreeServiceImpl extends ServiceImpl + implements SarLawsInformationCenterTreeService{ + + @Resource + private TsRoleDao tsRoleDao; + @Resource + private TsRoleMenuDataDao tsRoleMenuDataDao; + @Resource + private ITsUserService tsUserService; + @Resource + private SarLawsInformationService sarLawsInformationService; + + @Transactional + @Override + public void addTreeNode(SarLawsInformationCenterTree informationCenterTree) { + int save = this.baseMapper.insert(informationCenterTree); + //新增后给所有角色配置权限 + setResource(informationCenterTree); + } + + @Override + public Boolean deleteTreeNode(String id) { + List idList = Arrays.asList(id.split(",")); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(SarLawsInformation::getTreeNodeId,idList); + int count = sarLawsInformationService.count(wrapper); + if (count > 0) { + return false; + } + int deleted = this.baseMapper.deleteBatchIds(idList); + return true; + } + + @Override + public List getTree() { + // 获取当前登录人 + String loginUserId = LoginUserUtil.getUserId(); + // 查询当前登录人的权限菜单 + List resourceIdList = tsUserService.getResourceUserId(loginUserId); + + List resList = new ArrayList<>(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(SarLawsInformationCenterTree::getId, resourceIdList); + wrapper.orderByAsc(SarLawsInformationCenterTree::getSort); + List list = this.list(wrapper); + List treeData = new ArrayList<>(); + //代码遍历生成树 + for (SarLawsInformationCenterTree informationCenterTree : list) { + if (StringUtils.isNotBlank(informationCenterTree.getParentId())) { + SarLawsInformationCenterTreeData informationCenterTreeData = new SarLawsInformationCenterTreeData(); + BeanUtils.copyProperties(informationCenterTree, informationCenterTreeData); + treeData.add(informationCenterTreeData); + }else { + SarLawsInformationCenterTreeData res = new SarLawsInformationCenterTreeData(); + BeanUtils.copyProperties(informationCenterTree, res); + resList.add(res); + } + } + List treeData1 = new ArrayList<>(); + //递归生成树 + for (SarLawsInformationCenterTreeData data : resList) { + digui(data,treeData); + treeData1.add(data); + } + return treeData1; + } + + @Override + public boolean updateTreeNode(SarLawsInformationCenterTree informationCenterTree) { + int updated = this.baseMapper.updateById(informationCenterTree); + return updated > 0; + } + + @Transactional + @Override + public void setResource(SarLawsInformationCenterTree informationCenterTree) { + //获取pid + String pId = informationCenterTree.getParentId(); + List roleIds = tsRoleDao.getResourceId(pId); + for (String roleId : roleIds){ + tsRoleDao.addResource(roleId,informationCenterTree.getId()); + tsRoleMenuDataDao.save(roleId,informationCenterTree.getId()); + } + } + + private void digui(SarLawsInformationCenterTreeData res,List treeData){ + for (SarLawsInformationCenterTreeData data : treeData) { + if (null==res.getChildren()) { + List data1=new ArrayList<>(); + res.setChildren(data1); + } + if (res.getId().equals(data.getParentId())){ + if (null!=res.getChildren()){ + res.getChildren().add(data); + }else { + List data1 = new ArrayList<>(); + data1.add(data); + res.setChildren(data1); + } + } + } + if (null!=res.getChildren()){ + for (SarLawsInformationCenterTreeData treeData1:res.getChildren()) { + digui(treeData1,treeData); + } + } + } +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/controller/SarLawsTopicController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/controller/SarLawsTopicController.java new file mode 100644 index 00000000..1f06ca25 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/controller/SarLawsTopicController.java @@ -0,0 +1,253 @@ +package com.adc.da.slrs.sarLawsTopic.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; +import com.adc.da.base.web.BaseController; +import com.adc.da.common.ReadExcel; +import com.adc.da.exception.AdcDaBaseException; +import com.adc.da.http.PageInfo; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicVO; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsTopicService; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.text.ParseException; +import java.util.Arrays; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/17 + */ +@Api("政策课题模块") +@RestController +@RequestMapping("/${restPath}/lawss/sarLawsTopic") +public class SarLawsTopicController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(SarLawsTopicController.class); + + @Resource + private SarLawsTopicService lawsTopicService; + + @Value("${file.path}") + private String filePath; + + @ApiOperation(value = "根据政策课题ID查询会议信息") + @GetMapping("/getLawsTopicInfo") + public ResponseMessage getLawsTopicInfo(String id) throws Exception{ + if (StringUtils.isBlank(id)) { + return Result.error("会议ID为空!"); + } + SarLawsTopic sarLawsTopic = lawsTopicService.getLawsTopicInfo(id); + return Result.success(sarLawsTopic); + } + + @ApiOperation(value = "分页查询") + @GetMapping("/page") + public ResponseMessage> page(SarLawsTopicVO sarLawsTopicVO) { + List rows = lawsTopicService.queryByPage(sarLawsTopicVO); + return Result.success(getPageInfo(sarLawsTopicVO.getPager(), rows)); + } + + @ApiOperation(value = "新增政策课题") + @PostMapping(value = "/addLawsTopic", consumes = "application/json;charset=UTF-8") + public ResponseMessage create(@RequestBody SarLawsTopic lawsTopic) throws Exception { + lawsTopicService.addLawsTopicInfo(lawsTopic); + return Result.success(); + } + + @ApiOperation("根据会议ID删除会议") + @DeleteMapping("/deleteLawsTopicById") + public ResponseMessage deleteMeeting(String lawsTopicId) { + if (StringUtils.isBlank(lawsTopicId)) { + return Result.error("删除失败,政策课题ID为空"); + } + lawsTopicService.deleteLawsTopicInfo(lawsTopicId); + return Result.success(); + } + + @ApiOperation("根据会议ID修改会议信息") + @PutMapping("/updateLawsTopicInfo") + public ResponseMessage updateMeetingInfo(@RequestBody SarLawsTopic lawsTopic) { + if (ObjectUtils.isEmpty(lawsTopic)) { + return Result.error("更新失败,政策课题信息不存在"); + } + Boolean updateResult = lawsTopicService.updateLawsTopicInfo(lawsTopic); + return updateResult ? Result.success() : Result.error("更新失败"); + } + + @ApiOperation("导出政策课题信息") + @GetMapping("/exportLawsTopicInfo") + public ResponseMessage exportLawsTopicInfo(SarLawsTopicVO sarLawsTopicVO, HttpServletResponse response, + HttpServletRequest request) { + OutputStream os = null; + Workbook workbook = null; + List datas; + try { + if(StringUtils.isEmpty(sarLawsTopicVO.getExportName())||sarLawsTopicVO.getExportName().equals("null")){ + sarLawsTopicVO.setExportName("政策课题信息"); + } + response.setHeader("Content-Disposition", + "attachment; filename=" + ReadExcel.encodeFileName(sarLawsTopicVO.getExportName()+".xlsx", + request)); + // 导出数据,若指定了值则使用ids字段条件导出,否则根据条件导出 + if (StrUtil.isNotBlank(sarLawsTopicVO.getExportIds())) { + List idList = Arrays.asList(sarLawsTopicVO.getExportIds().split(",")); + datas = lawsTopicService.getLawsTopicByIds(idList); + } else { + // 导出所有数据 + datas = lawsTopicService.getAllLawsTopic(sarLawsTopicVO); + } + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + exportParams.setSheetName(sarLawsTopicVO.getExportName()); + workbook = ExcelExportUtil.exportExcel(exportParams, SarLawsTopicVO.class, datas); + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + } catch (IOException e) { + logger.error(e.getMessage(), e); + throw new AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + return Result.success(); + } + + @ApiOperation("Excel文件导入政策资料信息") + @PostMapping("/importLawsTopicInfo") + public ResponseMessage importLawsTopicInfo(@RequestParam(value = "file",required = false) MultipartFile file) throws ParseException { + if (file == null) { + return Result.error("文件为空,请重新上传"); + } + return lawsTopicService.importLawsTopicInfo(file); + } + + @ApiOperation(value = "政策课题导入模板下载") + @GetMapping("/exportTemplateFile") + public void exportTemplateFile(String fileName,HttpServletResponse response, HttpServletRequest request)throws Exception{ + + OutputStream os = null; + OutputStream excelOS = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = "政策课题导入模板"; + if (StringUtils.isNotEmpty(fileName)) { + fileOriName = fileName; + } + try{ + //创建临时文件夹 + String fileNowPath = filePath + "/tempZip/" + UUIDUtils.randomUUID20() + "/" + fileOriName; + File nowFile = new File(fileNowPath); + if (nowFile.exists()){ + nowFile.delete(); + } + nowFile.mkdirs(); + String fileName2 = "导入模板.xls"; + HSSFSheet sheetItems = workbook.createSheet("模板"); + sheetItems.setDefaultColumnWidth(13); + Row rowHeader = sheetItems.createRow(1);//开始创建标题行 + sheetItems.addMergedRegion(new CellRangeAddress(0, 0, 0, 21)); + Row row2 = sheetItems.createRow(0);//开始创建填写说明 + + // 表头样式 + HSSFCellStyle cellStyle1 = workbook.createCellStyle(); + cellStyle1.setAlignment(HorizontalAlignment.CENTER); + cellStyle1.setVerticalAlignment(VerticalAlignment.CENTER); + String exportFieldName = "课题名称,课题承办单位,课题指导单位,课题参与单位,开始时间,结题时间,课题费用(万元)"; + String[] headerArr = exportFieldName.split(","); + for (int i=0;i < headerArr.length; i++) { + Cell cell = rowHeader.createCell(i); + cell.setCellValue(headerArr[i]); + sheetItems.addMergedRegion(new CellRangeAddress(1,2,i,i)); + cell.setCellStyle(cellStyle1); + } + + String exportFieldListName = "课题组会议列表,课题组联系方式,内部联系方式"; + String[] headerListArr = exportFieldListName.split(","); + for (int i=0;i < headerListArr.length; i++) { + Cell cell = rowHeader.createCell(7 + (i * 5)); + cell.setCellValue(headerListArr[i]); + sheetItems.addMergedRegion(new CellRangeAddress(1,1,7+(i*5),7+(i*5)+4)); + cell.setCellStyle(cellStyle1); + } + HSSFRow rowHeader2 = sheetItems.createRow(2); + String exportFieldMeetingName = "会议名称,会议时间,会议地点,参会人员(内部),会议主要内容"; + String[] headerMeetingListArr = exportFieldMeetingName.split(","); + for (int i=0;i < headerMeetingListArr.length; i++) { + Cell cell = rowHeader2.createCell(7 + i); + cell.setCellValue(headerMeetingListArr[i]); + cell.setCellStyle(cellStyle1); + } + String exportFieldContactName = "姓名,单位,电话,邮箱,身份"; + String[] headerContactListArr = exportFieldContactName.split(","); + for (int i=0;i < headerContactListArr.length; i++) { + Cell cell1 = rowHeader2.createCell(12 + i); + cell1.setCellValue(headerContactListArr[i]); + cell1.setCellStyle(cellStyle1); + Cell cell2 = rowHeader2.createCell(17 + i); + cell2.setCellValue(headerContactListArr[i]); + cell2.setCellStyle(cellStyle1); + } + Cell cellA2 = row2.createCell(0); + cellA2.setCellValue(FieldConvertUtil.exportLawsTopicDesc); + //sheetItems.setColumnWidth(0, 20 * 150); + row2.setHeight((short) (50 * 22)); + // 说明样式 + HSSFCellStyle cellStyle =workbook.createCellStyle(); + cellStyle.setAlignment(HorizontalAlignment.LEFT); + cellStyle.setVerticalAlignment(VerticalAlignment.TOP); + cellStyle.setWrapText(true); + cellA2.setCellStyle(cellStyle); + String repFileName = fileName2.replaceAll("/","_"); + excelOS = new FileOutputStream(fileNowPath + "/" + repFileName); + response.setHeader("Content-Disposition", + "attachment; filename=\""+ ReadExcel.encodeFileName(fileOriName+".zip", request) +"\""); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(excelOS); + excelOS.flush(); + excelOS.close(); + ZipUtil.zip(fileNowPath,fileNowPath+".zip"); + FileInputStream fis = new FileInputStream(fileNowPath+".zip"); + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + os.close(); // 后开先关 + fis.close(); // 先开后关 + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new com.adc.da.exception.AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + IOUtils.closeQuietly(excelOS); + } + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsContactInformationMapper.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsContactInformationMapper.java new file mode 100644 index 00000000..83527477 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsContactInformationMapper.java @@ -0,0 +1,20 @@ +package com.adc.da.slrs.sarLawsTopic.dao; + +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author tjzdw +* @description 针对表【sar_laws_contact_information(政策课题组联系方式)】的数据库操作Mapper +* @createDate 2023-10-17 15:41:32 +* @Entity com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation +*/ +@Mapper +public interface SarLawsContactInformationMapper extends BaseMapper { + +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMapper.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMapper.java new file mode 100644 index 00000000..ddbd8f2b --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMapper.java @@ -0,0 +1,31 @@ +package com.adc.da.slrs.sarLawsTopic.dao; + +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic(政策课题)】的数据库操作Mapper +* @createDate 2023-10-17 15:17:33 +* @Entity com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic +*/ +@Mapper +public interface SarLawsTopicMapper extends BaseMapper { + + Integer queryByPageCount(SarLawsTopicVO page); + + List queryByPage(SarLawsTopicVO page); + + List getLawsTopicByIds(@Param("idList") List idList); + + List getAllLawsTopic(SarLawsTopicVO sarLawsTopicVO); +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMeetingMapper.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMeetingMapper.java new file mode 100644 index 00000000..c91c3f54 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/dao/SarLawsTopicMeetingMapper.java @@ -0,0 +1,20 @@ +package com.adc.da.slrs.sarLawsTopic.dao; + +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic_meeting(政策课题组会议)】的数据库操作Mapper +* @createDate 2023-10-17 15:20:27 +* @Entity com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting +*/ +@Mapper +public interface SarLawsTopicMeetingMapper extends BaseMapper { + +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsContactInformation.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsContactInformation.java new file mode 100644 index 00000000..c5c7db0a --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsContactInformation.java @@ -0,0 +1,73 @@ +package com.adc.da.slrs.sarLawsTopic.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +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 lombok.Data; + +/** + * 政策课题组联系方式 + * @TableName sar_laws_contact_information + */ +@TableName(value ="sar_laws_contact_information") +@Data +public class SarLawsContactInformation implements Serializable { + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + /** + * 政策课题ID + */ + @TableField(value = "LAWS_TOPIC_ID") + private String lawsTopicId; + + /** + * 所属组别 + */ + @TableField(value = "GROUP_TYPE") + private String groupType; + + /** + * 姓名 + */ + @TableField(value = "NAME") + @Excel(name = "姓名", orderNum = "0", type = 1) + private String name; + + /** + * 单位 + */ + @TableField(value = "DEPARTMENT") + @Excel(name = "单位", orderNum = "1", type = 1) + private String department; + + /** + * 电话 + */ + @TableField(value = "PHONE") + @Excel(name = "电话", orderNum = "2", type = 1) + private String phone; + + /** + * 邮箱 + */ + @TableField(value = "EMAIL") + @Excel(name = "邮箱", orderNum = "3", type = 1) + private String email; + + /** + * 身份 + */ + @TableField(value = "IDENTITY") + @Excel(name = "身份", orderNum = "4", type = 1) + private String identity; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopic.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopic.java new file mode 100644 index 00000000..9ceb0cff --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopic.java @@ -0,0 +1,247 @@ +package com.adc.da.slrs.sarLawsTopic.entity; + +import com.adc.da.att.entity.AttFileEO; +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 java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 政策课题 + * @TableName sar_laws_topic + */ +@TableName(value ="sar_laws_topic") +@Data +public class SarLawsTopic implements Serializable { + /** + * 主键 + */ + @ApiModelProperty(value = "主键") + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + /** + * 课题名称 + */ + @ApiModelProperty(value = "课题名称") + @TableField(value = "TOPIC_NAME") + private String topicName; + + /** + * 课题承办单位 + */ + @ApiModelProperty(value = "课题承办单位") + @TableField(value = "ORGANIZER") + private String organizer; + + /** + * 课题指导单位 + */ + @ApiModelProperty(value = "课题指导单位") + @TableField(value = "GUIDANCE_UNIT") + private String guidanceUnit; + + /** + * 课题参与单位 + */ + @ApiModelProperty(value = "课题参与单位") + @TableField(value = "PARTICIPATING_UNIT") + private String participatingUnit; + + /** + * 开始时间 + */ + @ApiModelProperty(value = "开始时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @TableField(value = "START_TIME") + private Date startTime; + + /** + * 结题时间 + */ + @ApiModelProperty(value = "结题时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @TableField(value = "CLOSE_TIME") + private Date closeTime; + + /** + * 课题状态 + */ + @ApiModelProperty(value = "课题状态") + @TableField(value = "TOPIC_STATUS") + private String topicStatus; + + /** + * 课题费用(万元) + */ + @ApiModelProperty(value = "课题费用") + @TableField(value = "TOPIC_COST") + private String topicCost; + + /** + * 协议 + */ + @ApiModelProperty("协议文件") + @TableField(value = "AGREEMENT") + private String agreement; + + @ApiModelProperty(value = "协议文件列表") + @TableField(exist = false) + private List agreementList; + + /** + * 课题组会议列表 + */ + @ApiModelProperty(value = "课题组会议列表") + @TableField(exist = false) + private List meetingList; + + /** + * 课题组研究方案 + */ + @ApiModelProperty(value = "课题研究方案") + @TableField(value = "RESEARCH_PLAN") + private String researchPlan; + + @ApiModelProperty(value = "课题组研究方案文件列表") + @TableField(exist = false) + private List researchPlanList; + + /** + * 课题组研究成果 + */ + @ApiModelProperty(value = "课题组研究成果") + @TableField(value = "RESEARCH_FINDINGS") + private String researchFindings; + + /** + * 课题组研究成果真实文件名 + */ + @ApiModelProperty(value = "课题组研究成果文件列表") + @TableField(exist = false) + private List researchFindingsList; + + /** + * 课题组其他 + */ + @ApiModelProperty(value = "课题组其他文件") + @TableField(value = "RESEARCH_GROUP_OTHER") + private String researchGroupOther; + + @ApiModelProperty(value = "课题组其他文件列表") + @TableField(exist = false) + private List researchGroupOtherList; + + /** + * 课题组会议资料 + */ + @ApiModelProperty(value = "课题组会议资料") + @TableField(value = "CONFERENCE_MATERIALS") + private String conferenceMaterials; + + @ApiModelProperty(value = "课题组会议资料文件列表") + @TableField(exist = false) + private List conferenceMaterialsList; + + /** + * 课题组联系方式 + */ + @ApiModelProperty(value = "课题组联系方式列表") + @TableField(exist = false) + private List topicContactInformationList; + + /** + * 内部资料立项报告 + */ + @ApiModelProperty(value = "内部资料立项报告") + @TableField(value = "INSIDE_PROJECT_PROPOSAL_REPORT") + private String insideProjectProposalRepost; + + @ApiModelProperty(value = "内部资料立项报告文件列表") + @TableField(exist = false) + private List insideProjectProposalRepostList; + + /** + * 内部资料研究方案 + */ + @ApiModelProperty(value = "内部资料研究方案") + @TableField(value = "INSIDE_RESEARCH_PLAN") + private String insideResearchPlan; + + @ApiModelProperty(value = "内部资料研究方案文件列表") + @TableField(exist = false) + private List insideResearchPlanList; + + /** + * 内部资料会议资料 + */ + @ApiModelProperty(value = "内部资料会议资料") + @TableField(value = "INSIDE_CONFERENCE_MATERIALS") + private String insideConferenceMaterials; + + @ApiModelProperty(value = "内部资料会议资料文件列表") + @TableField(exist = false) + private List insideConferenceMaterialsList; + + /** + * 内部会议研究成果 + */ + @ApiModelProperty(value = "内部会议研究成果") + @TableField(value = "INSIDE_RESEARCH_FINDINGS") + private String insideResearchFindings; + + @ApiModelProperty(value = "内部会议研究成果文件列表") + @TableField(exist = false) + private List insideResearchFindingsList; + + /** + * 内部会议其他 + */ + @ApiModelProperty(value = "内部会议其他文件") + @TableField(value = "INSIDE_OTHER") + private String insideOther; + + @ApiModelProperty(value = "内部会议其他文件列表") + @TableField(exist = false) + private List insideOtherList; + + /** + * 内部联系方式 + */ + @ApiModelProperty(value = "内部联系方式列表") + @TableField(exist = false) + private List insideContactInformationList; + + /** + * 逻辑删除,0可用,1不可用 + */ + @ApiModelProperty(value = "逻辑删除") + @TableField(value = "VALID_FLAG") + private Integer validFlag; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "CREATE_TIME") + private Date createTime; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(value = "MODIFY_TIME") + private Date modifyTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicMeeting.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicMeeting.java new file mode 100644 index 00000000..cd7d6cde --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicMeeting.java @@ -0,0 +1,68 @@ +package com.adc.da.slrs.sarLawsTopic.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +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 lombok.Data; + +/** + * 政策课题组会议 + * @TableName sar_laws_topic_meeting + */ +@TableName(value ="sar_laws_topic_meeting") +@Data +public class SarLawsTopicMeeting implements Serializable { + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.ID_WORKER_STR) + private String id; + + /** + * 政策课题ID + */ + @TableField(value = "LAWS_TOPIC_ID") + private String lawsTopicId; + + /** + * 会议名称 + */ + @TableField(value = "MEETING_NAME") + @Excel(name = "会议名称", orderNum = "0", type = 1) + private String meetingName; + + /** + * 会议时间 + */ + @TableField(value = "MEETING_TIME") + @Excel(name = "会议时间", orderNum = "1", type = 1) + private String meetingTime; + + /** + * 会议地点 + */ + @TableField(value = "MEETING_ADDRESS") + @Excel(name = "会议地点", orderNum = "2", type = 1) + private String meetingAddress; + + /** + * 参会人员(内部) + */ + @TableField(value = "PARTICIPANTS") + @Excel(name = "参会人员(内部)", orderNum = "3", type = 1) + private String participants; + + /** + * 会议主要内容 + */ + @TableField(value = "MEETING_CONTENT") + @Excel(name = "会议主要内容", orderNum = "4", type = 1) + private String meetingContent; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicVO.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicVO.java new file mode 100644 index 00000000..ecc187da --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/entity/SarLawsTopicVO.java @@ -0,0 +1,249 @@ +package com.adc.da.slrs.sarLawsTopic.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelCollection; +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.base.page.BasePage; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/17 + */ +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@Data +public class SarLawsTopicVO extends BasePage { + /** + * 主键 + */ + private String id; + + /** + * 课题名称 + */ + @Excel(name = "课题名称", orderNum = "0", type = 1, needMerge = true) + private String topicName; + + /** + * 课题承办单位 + */ + @Excel(name = "课题承办单位", orderNum = "1",type = 1, needMerge = true) + private String organizer; + + /** + * 课题指导单位 + */ + @Excel(name = "课题指导单位", orderNum = "2", type = 1, needMerge = true) + private String guidanceUnit; + + /** + * 课题参与单位 + */ + @Excel(name = "课题参与单位", orderNum = "3", type = 1, needMerge = true) + private String participatingUnit; + + /** + * 开始时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开始时间", orderNum = "4", exportFormat = "yyyy-MM-dd", needMerge = true) + private Date startTime; + + /** + * 结题时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Excel(name = "结题时间", orderNum = "5", exportFormat = "yyyy-MM-dd", needMerge = true) + private Date closeTime; + + /** + * 课题状态 + */ + @Excel(name = "课题状态", orderNum = "6", type = 1, needMerge = true) + private String topicStatus; + + /** + * 课题费用(万元) + */ + @Excel(name = "课题费用(万元)", orderNum = "7", type = 1, needMerge = true) + private String topicCost; + + /** + * 协议 + */ + private String agreement; + + private List agreementList; + + /** + * 课题组会议列表 + */ + @ExcelCollection(name = "课题组会议列表", orderNum = "8") + private List meetingList; + + /** + * 会议名称 + */ + private String meetingName; + + /** + * 会议时间 + */ + private String meetingTime; + + /** + * 会议地点 + */ + private String meetingAddress; + + /** + * 参会人员(内部) + */ + private String participants; + + // 参会人员列表 + private List participantsList; + + /** + * 会议主要内容 + */ + private String meetingContent; + + /** + * 课题组研究方案 + */ + private String researchPlan; + + private List researchPlanList; + + /** + * 课题组研究成果 + */ + private String researchFindings; + + private List researchFindingsList; + + /** + * 课题组其他 + */ + private String researchGroupOther; + + private List researchGroupOtherList; + + /** + * 课题组会议资料 + */ + private String conferenceMaterials; + + private List conferenceMaterialsList; + + /** + * 课题组联系方式 + */ + @ExcelCollection(name = "课题组联系方式", orderNum = "9") + private List topicContactInformationList; + + // 课题组用户名称 + private String topicGroupName; + // 课题组部门 + private String topicGroupDepartment; + // 课题组电话 + private String topicGroupPhone; + // 课题组用户邮箱 + private String topicGroupEmail; + // 课题组用户身份 + private String topicGroupIdentity; + + /** + * 内部资料立项报告 + */ + private String insideProjectProposalRepost; + + private List insideProjectProposalRepostList; + + /** + * 内部资料研究方案 + */ + private String insideResearchPlan; + + private List insideResearchPlanList; + + /** + * 内部资料会议资料 + */ + private String insideConferenceMaterials; + + private List insideConferenceMaterialsList; + + /** + * 内部会议研究成果 + */ + private String insideResearchFindings; + + private List insideResearchFindingsList; + + /** + * 内部会议其他 + */ + private String insideOther; + + private List insideOtherList; + + /** + * 内部联系方式 + */ + @ExcelCollection(name = "内部联系方式", orderNum = "10") + private List insideContactInformationList; + + // 内部人员名称 + private String insideName; + // 内部人员部门 + private String insideDepartment; + // 内部人员电话 + private String insidePhone; + // 内部人员邮箱 + private String insideEmail; + // 内部人员身份 + private String insideIdentity; + + /** + * 逻辑删除,0可用,1不可用 + */ + private Integer validFlag; + + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 修改时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date modifyTime; + + private String sortField = "ID"; + + private String sortMode = "asc"; + + private String startTimeOperator = "="; + private String closeTimeOperator = "="; + + // 导出使用的属性 + // 导出文件名 + private String exportName; + // 导出的ID列表字符串 + private String exportIds; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsContactInformationService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsContactInformationService.java new file mode 100644 index 00000000..95580fe5 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsContactInformationService.java @@ -0,0 +1,13 @@ +package com.adc.da.slrs.sarLawsTopic.service; + +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author tjzdw +* @description 针对表【sar_laws_contact_information(政策课题组联系方式)】的数据库操作Service +* @createDate 2023-10-17 15:41:32 +*/ +public interface SarLawsContactInformationService extends IService { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicMeetingService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicMeetingService.java new file mode 100644 index 00000000..0b79192f --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicMeetingService.java @@ -0,0 +1,13 @@ +package com.adc.da.slrs.sarLawsTopic.service; + +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic_meeting(政策课题组会议)】的数据库操作Service +* @createDate 2023-10-17 15:20:27 +*/ +public interface SarLawsTopicMeetingService extends IService { + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicService.java new file mode 100644 index 00000000..bd9b409c --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/SarLawsTopicService.java @@ -0,0 +1,34 @@ +package com.adc.da.slrs.sarLawsTopic.service; + +import com.adc.da.http.ResponseMessage; +import com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicVO; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic(政策课题)】的数据库操作Service +* @createDate 2023-10-17 15:17:33 +*/ +public interface SarLawsTopicService extends IService { + + SarLawsTopic getLawsTopicInfo(String lawsTopicId) throws Exception; + + Integer addLawsTopicInfo(SarLawsTopic lawsTopic); + + Boolean deleteLawsTopicInfo(String lawsTopicId); + + Boolean updateLawsTopicInfo(SarLawsTopic lawsTopic); + + List queryByPage(SarLawsTopicVO sarLawsTopicVO); + + List getLawsTopicByIds(List idList); + + List getAllLawsTopic(SarLawsTopicVO sarLawsTopicVO); + + ResponseMessage importLawsTopicInfo(MultipartFile file); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsContactInformationServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsContactInformationServiceImpl.java new file mode 100644 index 00000000..40ec89f8 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsContactInformationServiceImpl.java @@ -0,0 +1,22 @@ +package com.adc.da.slrs.sarLawsTopic.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsContactInformationService; +import com.adc.da.slrs.sarLawsTopic.dao.SarLawsContactInformationMapper; +import org.springframework.stereotype.Service; + +/** +* @author tjzdw +* @description 针对表【sar_laws_contact_information(政策课题组联系方式)】的数据库操作Service实现 +* @createDate 2023-10-17 15:41:32 +*/ +@Service +public class SarLawsContactInformationServiceImpl extends ServiceImpl + implements SarLawsContactInformationService{ + +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicMeetingServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicMeetingServiceImpl.java new file mode 100644 index 00000000..c694e6ba --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicMeetingServiceImpl.java @@ -0,0 +1,22 @@ +package com.adc.da.slrs.sarLawsTopic.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsTopicMeetingService; +import com.adc.da.slrs.sarLawsTopic.dao.SarLawsTopicMeetingMapper; +import org.springframework.stereotype.Service; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic_meeting(政策课题组会议)】的数据库操作Service实现 +* @createDate 2023-10-17 15:20:27 +*/ +@Service +public class SarLawsTopicMeetingServiceImpl extends ServiceImpl + implements SarLawsTopicMeetingService{ + +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicServiceImpl.java new file mode 100644 index 00000000..7e94b4ad --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/sarLawsTopic/service/impl/SarLawsTopicServiceImpl.java @@ -0,0 +1,485 @@ +package com.adc.da.slrs.sarLawsTopic.service.impl; + +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.adc.da.att.entity.AttFileEO; +import com.adc.da.att.service.impl.AttFileEOServiceImpl; +import com.adc.da.common.FileUnZip; +import com.adc.da.http.ResponseMessage; +import com.adc.da.http.Result; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicVO; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsContactInformationService; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsTopicMeetingService; +import com.adc.da.slrs.sarUpdLog.entity.SarUpdLog; +import com.adc.da.slrs.sarUpdLog.service.ISarUpdLogService; +import com.adc.da.util.LoginUserUtil; +import com.adc.da.util.UUIDUtils; +import com.adc.da.utils.util.FieldConvertUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopic; +import com.adc.da.slrs.sarLawsTopic.service.SarLawsTopicService; +import com.adc.da.slrs.sarLawsTopic.dao.SarLawsTopicMapper; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +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.ss.usermodel.WorkbookFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.SimpleDateFormat; +import java.util.*; + +/** +* @author tjzdw +* @description 针对表【sar_laws_topic(政策课题)】的数据库操作Service实现 +* @createDate 2023-10-17 15:17:33 +*/ +@Service +public class SarLawsTopicServiceImpl extends ServiceImpl + implements SarLawsTopicService{ + + @Resource + private SarLawsTopicMeetingService meetingService; + @Resource + private AttFileEOServiceImpl attFileEOService; + @Resource + private ISarUpdLogService updLogService; + @Value("${file.path}") + private String filePath;//文件存储路径 + + @Resource + private SarLawsContactInformationService contactInformationService; + + @Override + public SarLawsTopic getLawsTopicInfo(String lawsTopicId) { + SarLawsTopic sarLawsTopic = this.baseMapper.selectById(lawsTopicId); + // 查询课题组会议 + LambdaQueryWrapper meetingWrapper = new LambdaQueryWrapper<>(); + meetingWrapper.eq(SarLawsTopicMeeting::getLawsTopicId, lawsTopicId); + List topicMeetingList = meetingService.list(meetingWrapper); + sarLawsTopic.setMeetingList(topicMeetingList); + // 查询课题组联系方式 + LambdaQueryWrapper topicGroupWrapper = new LambdaQueryWrapper<>(); + topicGroupWrapper.eq(SarLawsContactInformation::getLawsTopicId, lawsTopicId); + topicGroupWrapper.eq(SarLawsContactInformation::getGroupType,"topicGroup"); + List lawsTopicContactInformation = contactInformationService.list(topicGroupWrapper); + sarLawsTopic.setTopicContactInformationList(lawsTopicContactInformation); + // 查询内部联系房方式 + LambdaQueryWrapper insideWrapper = new LambdaQueryWrapper<>(); + insideWrapper.eq(SarLawsContactInformation::getLawsTopicId, lawsTopicId); + insideWrapper.eq(SarLawsContactInformation::getGroupType,"inside"); + List insideContactInformation = contactInformationService.list(insideWrapper); + sarLawsTopic.setInsideContactInformationList(insideContactInformation); + // 获取文件信息 + getFileListByAttFile(sarLawsTopic); + return sarLawsTopic; + } + + @Transactional + @Override + public Integer addLawsTopicInfo(SarLawsTopic lawsTopic) { + lawsTopic.setCreateTime(new Date()); + lawsTopic.setModifyTime(new Date()); + lawsTopic.setValidFlag(0); + int insert = this.baseMapper.insert(lawsTopic); + if (lawsTopic.getMeetingList() != null && !lawsTopic.getMeetingList().isEmpty()) { + for (SarLawsTopicMeeting meeting : lawsTopic.getMeetingList()) { + if (StringUtils.isNotBlank(meeting.getMeetingName())) { + meeting.setLawsTopicId(lawsTopic.getId()); + meetingService.save(meeting); + } + } + } + if (lawsTopic.getTopicContactInformationList() != null && !lawsTopic.getTopicContactInformationList().isEmpty()) { + for (SarLawsContactInformation information : lawsTopic.getTopicContactInformationList()) { + if (StringUtils.isNotBlank(information.getName())) { + information.setLawsTopicId(lawsTopic.getId()); + information.setGroupType("topicGroup"); + contactInformationService.save(information); + } + } + } + if (lawsTopic.getInsideContactInformationList() != null && !lawsTopic.getInsideContactInformationList().isEmpty()) { + for (SarLawsContactInformation information : lawsTopic.getInsideContactInformationList()) { + if (StringUtils.isNotBlank(information.getName())) { + information.setLawsTopicId(lawsTopic.getId()); + information.setGroupType("inside"); + contactInformationService.save(information); + } + } + } + return insert; + } + + @Transactional + @Override + public Boolean deleteLawsTopicInfo(String lawsTopicId) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(SarLawsTopic::getId, lawsTopicId); + wrapper.set(SarLawsTopic::getValidFlag,1); + wrapper.set(SarLawsTopic::getModifyTime,new Date()); + boolean update = update(wrapper); + if (update) { + LambdaQueryWrapper lawsTopicWrapper = new LambdaQueryWrapper<>(); + lawsTopicWrapper.eq(SarLawsTopicMeeting::getLawsTopicId, lawsTopicId); + meetingService.remove(lawsTopicWrapper); + LambdaQueryWrapper informationWrapper = new LambdaQueryWrapper<>(); + informationWrapper.eq(SarLawsContactInformation::getLawsTopicId, lawsTopicId); + contactInformationService.remove(informationWrapper); + } + return update; + } + + @Transactional + @Override + public Boolean updateLawsTopicInfo(SarLawsTopic lawsTopic) { + if (StringUtils.isBlank(lawsTopic.getId())) { + return false; + } + SarLawsTopic lawsTopicInfoDB = getLawsTopicInfo(lawsTopic.getId()); + List compareList = compareLawsTopic(lawsTopicInfoDB, lawsTopic); + if (compareLawsTopic(lawsTopicInfoDB, lawsTopic).size() == 0) { + return true; + } + lawsTopic.setModifyTime(new Date()); + int update = this.baseMapper.updateById(lawsTopic); + // 比较列表字段是否经过修改,如果经过修改,先删除,再添加 + if (compareList.contains("课题组会议列表被变更")) { + LambdaQueryWrapper topicWrapper = new LambdaQueryWrapper<>(); + topicWrapper.eq(SarLawsTopicMeeting::getLawsTopicId,lawsTopic.getId()); + meetingService.remove(topicWrapper); + for (SarLawsTopicMeeting meeting : lawsTopic.getMeetingList()) { + meeting.setLawsTopicId(lawsTopic.getId()); + meetingService.save(meeting); + } + } + if (compareList.contains("课题组联系方式列表被变更")) { + LambdaQueryWrapper informationWrapper = new LambdaQueryWrapper<>(); + informationWrapper.eq(SarLawsContactInformation::getLawsTopicId,lawsTopic.getId()); + informationWrapper.eq(SarLawsContactInformation::getGroupType,"topicGroup"); + contactInformationService.remove(informationWrapper); + for (SarLawsContactInformation information : lawsTopic.getTopicContactInformationList()) { + information.setGroupType("topicGroup"); + information.setLawsTopicId(lawsTopic.getId()); + contactInformationService.save(information); + } + } + if (compareList.contains("内部联系方式列表被变更")) { + LambdaQueryWrapper informationWrapper = new LambdaQueryWrapper<>(); + informationWrapper.eq(SarLawsContactInformation::getLawsTopicId,lawsTopic.getId()); + informationWrapper.eq(SarLawsContactInformation::getGroupType,"inside"); + contactInformationService.remove(informationWrapper); + for (SarLawsContactInformation information : lawsTopic.getInsideContactInformationList()) { + information.setGroupType("inside"); + information.setLawsTopicId(lawsTopic.getId()); + contactInformationService.save(information); + } + } + // 存储修改记录 + SarUpdLog sarUpdLogEO = new SarUpdLog(); + sarUpdLogEO.setId(UUIDUtils.randomUUID20()); + sarUpdLogEO.setSarId(lawsTopicInfoDB.getId()); + sarUpdLogEO.setSarType("LAWS_TOPIC"); + sarUpdLogEO.setCreationTime(new Date()); + sarUpdLogEO.setCreationUser(LoginUserUtil.getUserId()); + sarUpdLogEO.setContent(lawsTopicInfoDB.getTopicName() + "," + String.join(",",compareList)); + updLogService.save(sarUpdLogEO); + return true; + } + + + @Override + public List queryByPage(SarLawsTopicVO page){ + if (StringUtils.isNotBlank(page.getParticipants())) { + page.setParticipantsList(Arrays.asList(page.getParticipants().split(","))); + } + // 设置排序字段 + if (StringUtils.isNotBlank(page.getSortField())) { + String sortField = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(page.getSortField()),"_").toUpperCase(); + page.setSortField(sortField); + } else { + page.setSortField("ID"); + page.setSortMode("asc"); + } + Integer rowCount = this.baseMapper.queryByPageCount(page); + page.getPager().setRowCount(rowCount); + List sarLawsTopicVOList = this.baseMapper.queryByPage(page); + for (SarLawsTopicVO lawsTopicVO : sarLawsTopicVOList) { + getFileListByAttFile(lawsTopicVO); + } + return sarLawsTopicVOList; + } + + @Override + public List getLawsTopicByIds(List idList) { + return this.baseMapper.getLawsTopicByIds(idList); + } + + @Override + public List getAllLawsTopic(SarLawsTopicVO sarLawsTopicVO) { + return this.baseMapper.getAllLawsTopic(sarLawsTopicVO); + } + + @Override + public ResponseMessage importLawsTopicInfo(MultipartFile file) { + //获取文件全称 + String fileNameStr = file.getOriginalFilename(); + //获取最后.的位置 + assert fileNameStr != null; + int pos = fileNameStr.lastIndexOf("."); + //获取压缩文件名称并以小写显示 + String fileStr = fileNameStr.substring(pos + 1).toLowerCase(); + //校验是否是zip文件 + if (!fileStr.equals("zip")) { + return Result.error("请上传zip格式的文件"); + } + //进行拼接获取文件名称 + String fileName = fileNameStr.substring(0, pos); + //获取路径和文件名称 + String path = filePath + "/" + fileName; + + File saveDirectory = new File(path); + //判断saveDirectory中是否是文件夹 + if (!saveDirectory.isDirectory()) { + saveDirectory.mkdir(); + } + //将文件写入到指定路径中 + try { + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件存储失败!"); + } + //解压缩 + String zipEntryName = null; + try { + zipEntryName = FileUnZip.unZipFiles(path + "/" + fileNameStr, path); + FileUnZip.delete(new File(path + "/" + fileNameStr)); + } catch (IOException e) { + return Result.error("文件解压失败"); + } + //获取文件信息 + List fileList = readImpExcelFile(zipEntryName); + //判断获取到的文件数量 + if (fileList.size() != 1) { + return Result.error("上传的文件只能有一个"); + } + File importFile = fileList.get(0); + if (!importFile.getName().contains(".xls") && !importFile.getName().contains(".xlsx")) { + return Result.error("文件必须是EXCEL文件"); + } + Workbook workbook = null; + try { + workbook = WorkbookFactory.create(importFile); + } catch (IOException e) { + FileUnZip.deleteDir(saveDirectory); + return Result.error("导入失败,需要导入的数据有问题或导入的企标标号和企标名称已存在"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet == null) { + return Result.error("工作表为空"); + } + StringBuilder sb = new StringBuilder(); + // 获取excel表头 + List headerList = new ArrayList<>(); + Row headerRow = sheet.getRow(1); + for (int i = 0; i < 22; i++) { + headerList.add(headerRow.getCell(i).getStringCellValue()); + } + // 获取关联表表头 + Row relationRow = sheet.getRow(2); + List relationList = new ArrayList<>(); + for (int i = 7; i < 22; i++) { + relationList.add(relationRow.getCell(i).getStringCellValue()); + } + + // 判断表头字段是否相同 + if (!String.join(",",headerList).equals(FieldConvertUtil.exportFieldLawsTopic) + && !String.join(",",relationList).equals(FieldConvertUtil.exportFieldLawsTopicRelation)) { + try { + workbook.close(); + } catch (IOException e) { + return Result.error("文件关闭出错"); + } + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("fail", "读取失败,请严格按照模板文件导入数据"); + } + + ImportParams importParams = new ImportParams(); + importParams.setTitleRows(1); + importParams.setHeadRows(2); + List lawsTopicVOList = ExcelImportUtil.importExcel(readImpExcelFile(zipEntryName).get(0), SarLawsTopicVO.class, importParams); + // 去除空数据 + for (SarLawsTopicVO lawsTopicVO : lawsTopicVOList) { + if (StringUtils.isNotBlank(lawsTopicVO.getTopicName())) { + // 存入数据库 + SarLawsTopic sarLawsTopic = new SarLawsTopic(); + BeanUtils.copyProperties(lawsTopicVO,sarLawsTopic); + if (sarLawsTopic.getStartTime() != null && sarLawsTopic.getCloseTime() != null) { + sarLawsTopic.setTopicStatus("已结题"); + } else { + sarLawsTopic.setTopicStatus("进行中"); + } + addLawsTopicInfo(sarLawsTopic); + } + } + return Result.success("导入成功"); + } + + // 通过反射获取文件内容 + public void getFileListByAttFile(SarLawsTopic lawsTopic) { + String[] fileField = {"agreement","researchPlan","researchFindings","researchGroupOther","conferenceMaterials", + "insideProjectProposalRepost","insideResearchPlan","insideConferenceMaterials","insideResearchFindings","insideOther"}; + try { + for (String field : fileField) { + String getMethod = "get" + StringUtils.capitalize(field); + Method method = SarLawsTopic.class.getMethod(getMethod); + String fileAttId = String.valueOf(method.invoke(lawsTopic)); + if (StringUtils.isNotBlank(fileAttId) && !"null".equals(fileAttId)) { + List fileList = new ArrayList<>(); + for (String attId : fileAttId.split(",")) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileList.add(fileInfo); + } + String setMethod = "set" + StringUtils.capitalize(field) + "List"; + method = SarLawsTopic.class.getMethod(setMethod, List.class); + method.invoke(lawsTopic, fileList); + } + } + }catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public void getFileListByAttFile(SarLawsTopicVO lawsTopic) { + String[] fileField = {"agreement","researchPlan","researchFindings","researchGroupOther","conferenceMaterials", + "insideProjectProposalRepost","insideResearchPlan","insideConferenceMaterials","insideResearchFindings","insideOther"}; + try { + for (String field : fileField) { + String getMethod = "get" + StringUtils.capitalize(field); + Method method = SarLawsTopicVO.class.getMethod(getMethod); + String fileAttId = String.valueOf(method.invoke(lawsTopic)); + if (StringUtils.isNotBlank(fileAttId) && !"null".equals(fileAttId)) { + List fileList = new ArrayList<>(); + for (String attId : fileAttId.split(",")) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileList.add(fileInfo); + } + String setMethod = "set" + StringUtils.capitalize(field) + "List"; + method = SarLawsTopicVO.class.getMethod(setMethod, List.class); + method.invoke(lawsTopic, fileList); + } + } + }catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + /** + * 比较两个SarLawsTopic 对象 + * @param oldLawsTopic 数据库中存储的对象 + * @param newLawsTopic 更新后的对象 + * @return 差异 + */ + public List compareLawsTopic(SarLawsTopic oldLawsTopic, SarLawsTopic newLawsTopic) { + List changes = new ArrayList<>(); + // 不需要比较的字段 + String[] ignoreFields = {"id","validFlag","createTime","modifyTime","agreementList","researchPlanList", + "researchFindingsList","researchGroupOtherList","conferenceMaterialsList","insideProjectProposalRepostList", + "insideResearchPlanList","insideConferenceMaterialsList","insideResearchFindingsList","insideOtherList","serialVersionUID"}; + String[] fileAttIdFields = {"agreement","researchPlan","researchFindings","researchGroupOther","conferenceMaterials", + "insideProjectProposalRepost","insideResearchPlan","insideConferenceMaterials","insideResearchFindings","insideOther"}; + List ignoreFieldList = Arrays.asList(ignoreFields); + List fileAttIdFieldList = Arrays.asList(fileAttIdFields); + // 获取SarLawsTopic类的所有字段 + Field[] fields = SarLawsTopic.class.getDeclaredFields(); + for (Field field : fields) { + if (!ignoreFieldList.contains(field.getName())) { + try { + field.setAccessible(true); + String oldValue = String.valueOf(field.get(oldLawsTopic)); + String newValue = String.valueOf(field.get(newLawsTopic)); + if (!Objects.equals(oldValue, newValue)) { + // 对比文件字段 + if (fileAttIdFieldList.contains(field.getName())) { + List fileNameList = new ArrayList<>(); + if (StringUtils.isNotBlank(newValue)) { + String[] split = newValue.split(","); + for (String attId : split) { + AttFileEO fileInfo = attFileEOService.getFileInfo(attId); + fileNameList.add(fileInfo.getOldFileName()); + } + } + // 获取文件字段名称 + String fieldName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); + Method method = SarLawsTopic.class.getMethod("get" + fieldName + "List"); + // 获取旧的文件名 + List oldFileList = (List)method.invoke(oldLawsTopic); + List oldFileNameList = new ArrayList<>(); + if (oldFileList != null && oldFileList.size() > 0) { + for (Object oldFile : oldFileList) { + AttFileEO oldFile1 = (AttFileEO) oldFile; + oldFileNameList.add(oldFile1.getOldFileName()); + } + } + // 获取字段名称 + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + String.join(",",oldFileNameList) + "\"改为\"" + String.join(",",fileNameList) + "\""); + // 对比列表字段 + } else if ("meetingList".equals(field.getName()) || "topicContactInformationList".equals(field.getName()) + || "insideContactInformationList".equals(field.getName())) { + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "被变更"); + } else { + // 对比其他字段 + ApiModelProperty annotationsByType = field.getAnnotationsByType(ApiModelProperty.class)[0]; + changes.add(annotationsByType.value() + "由\"" + oldValue + "\"改为\"" + newValue + "\""); + } + } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + // 处理异常 + e.printStackTrace(); + } + } + } + return changes; + } + + private static List readImpExcelFile(String path) { + File file = new File(path); + List resultlist = new ArrayList<>(); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File fi : files) { + // 对文件进行过滤,读取所有文件 + String name = fi.getName(); + //文件不为空 添加 + if (name != null){ + resultlist.add(fi); + } + } + } + return resultlist; + } +} + + + + diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/standardSplit/service/impl/SarFileSplitInfoEOServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/standardSplit/service/impl/SarFileSplitInfoEOServiceImpl.java index ffd826ef..3d7afe3e 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/standardSplit/service/impl/SarFileSplitInfoEOServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/standardSplit/service/impl/SarFileSplitInfoEOServiceImpl.java @@ -686,7 +686,7 @@ public class SarFileSplitInfoEOServiceImpl implements SarFileSplitInfoEOService if (ObjectUtils.isNotEmpty(smalltext)) { switch (subscript) { case BASELINE: - xwrun.setText(smalltext); + xwrun.setText(smalltext,0); break; case SUBSCRIPT: xwrun.setText("" + smalltext + ""); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/dao/TsDicTypeDao.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/dao/TsDicTypeDao.java index 604050f3..245c7d03 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/dao/TsDicTypeDao.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/dao/TsDicTypeDao.java @@ -3,8 +3,10 @@ package com.adc.da.slrs.tsDictionaryType.dao; import com.adc.da.slrs.tsDictionaryType.entity.TsDicType; import com.adc.da.slrs.tsDictionaryType.entity.TsSearchMenu; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.MapKey; import java.util.List; +import java.util.Map; /** *

@@ -16,4 +18,8 @@ import java.util.List; */ public interface TsDicTypeDao extends BaseMapper { public List getSearchMenu(); + + String selectDicTypeNameByDicCode(String typeCode); + + List selectAllDicTypeNameByDicCode(String dicCode); } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/ITsDicTypeService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/ITsDicTypeService.java index 31e5f3d3..6d281d7e 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/ITsDicTypeService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/ITsDicTypeService.java @@ -5,6 +5,7 @@ import com.adc.da.slrs.tsDictionaryType.entity.TsSearchMenu; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** *

@@ -18,4 +19,18 @@ public interface ITsDicTypeService extends IService { public List getSearchMenu(); + /** + * 根据数据字典编码查询字典值 + * @param typeCode 字典编码 + * @return 字典值 + */ + public String getDicTypeNameByDicCode(String typeCode); + + /** + * 根据字典值类别查询指定类别的所有类别名 + * @param dicCode 字典类别编号 + * @return 字典值列表 + */ + List selectAllDicTypeNameByDicCode(String dicCode); + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/impl/TsDicTypeServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/impl/TsDicTypeServiceImpl.java index c55fb826..dd3343b2 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/impl/TsDicTypeServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsDictionaryType/service/impl/TsDicTypeServiceImpl.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; /** *

@@ -25,4 +26,14 @@ public class TsDicTypeServiceImpl extends ServiceImpl i public List getSearchMenu() { return getBaseMapper().getSearchMenu(); } + + @Override + public String getDicTypeNameByDicCode(String typeCode) { + return this.baseMapper.selectDicTypeNameByDicCode(typeCode); + } + + @Override + public List selectAllDicTypeNameByDicCode(String dicCode) { + return this.baseMapper.selectAllDicTypeNameByDicCode(dicCode); + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/utils/util/ExcelExportUtil.java b/adc-da-slrs/src/main/java/com/adc/da/utils/util/ExcelExportUtil.java new file mode 100644 index 00000000..11c4ed27 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/utils/util/ExcelExportUtil.java @@ -0,0 +1,112 @@ +package com.adc.da.utils.util; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import com.adc.da.slrs.processModel.utils.TrainFormDate; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author tjzdw + * @description + * @date 2023/10/28 + */ +@Slf4j +public class ExcelExportUtil { + + private ExcelExportUtil() { + } + + /** + * 导出Excel文件 + * @param params 导出参数,主要包含,导出的文件名,导出类型 + * @param tClass 导出文件的对象类 + * @param datas 数据 + * @return 工作簿 + */ + public static Workbook exportWithData(ExportParams params, Class tClass , List datas) { + Workbook wb = null; + + if (params.getType().equals(ExcelType.XSSF)) { + wb = new XSSFWorkbook(); + } else { + wb = new HSSFWorkbook(); + } + + // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet + Sheet sheet = wb.createSheet(params.getSheetName()); + + // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 + Row row = sheet.createRow(0); + + // 第四步,创建单元格,并设置值表头 设置表头居中 + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + //声明列对象 + Cell cell = null; + Map map = new HashMap<>(); + Map mapField = new HashMap<>(); + Field[] fields = tClass.getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + Excel excel = field.getAnnotation(Excel.class); + if (null != excel) { + map.put(Integer.valueOf(excel.orderNum()), excel); + mapField.put(Integer.valueOf(excel.orderNum()), field); + } + } + //创建标题行 + DataFormat df = wb.createDataFormat(); + for (Integer i : map.keySet()) { + sheet.setColumnWidth(i, (int) (map.get(i).width() * 256)); + cell = row.createCell(i); + cell.setCellValue(map.get(i).name()); + if (null != map.get(i).exportFormat()) { + CellStyle style1 = wb.createCellStyle(); + style1.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式 + style1.setDataFormat(df.getFormat(map.get(i).exportFormat())); + sheet.setDefaultColumnStyle(i, style1); + } + cell.setCellStyle(style); + } + //赋值数据 + int rowNum = 1; + for (Object o : datas) { + Row row1 = sheet.createRow(rowNum); + for (Integer i : map.keySet()) { + Cell cell1 = row1.createCell(i); + Field field = null; + try { + field = o.getClass().getDeclaredField(mapField.get(i).getName()); + } catch (NoSuchFieldException e) { + log.warn(e.getMessage()); + } + if (null != field) { + field.setAccessible(true); + try { + Object fieldVal = field.get(o); + if (null != map.get(i).exportFormat() && !"".equals(map.get(i).exportFormat())) { + cell1.setCellValue("null".equals(String.valueOf(fieldVal)) ? "" : TrainFormDate.dealWithTimeZoneyyyy(String.valueOf(fieldVal), map.get(i).exportFormat())); + } else { + cell1.setCellValue("null".equals(String.valueOf(fieldVal)) ? "" : String.valueOf(fieldVal)); + } + } catch (IllegalAccessException e) { + log.warn(e.getMessage()); + } + } + } + System.out.println(o.toString()); + rowNum++; + } + return wb; + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java b/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java index d19f602b..77b17ad3 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java +++ b/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java @@ -58,6 +58,19 @@ public class FieldConvertUtil { // 企标计划 表头 public static String exportFieldNamesEsRevisePlan = "企标类别,企标编号,企标名称,计划状态,制修订类型,起草人,内部评审责任人,技术委员会评审负责人,计划标准初稿完成时间,计划标准发布时间,起草责任单位,实际标准发布时间,质量评分"; + // 内外部会议 表头 + public static String exportFieldNamesInsideOutsideMeeting = "会议名称,课题名称,会议主办单位,会议时间,会议地点,参会人员,会议主要内容,一级会议类别,二级会议类别"; + // 内外部会议关联表 表头 + public static String exportFieldNamesMeetingTopic = "议题名称,汇报人,汇报单位,议题主要内容"; + + // 政策法规资料 表头 + public static String exportFieldLawsInformation = "一级资料类别,二级资料类别,三级资料类别,四级资料类别,资料名称,资料归属部门,作者,资料说明"; + + // 政策课题 表头 + public static String exportFieldLawsTopic = "课题名称,课题承办单位,课题指导单位,课题参与单位,开始时间,结题时间,课题费用(万元),课题组会议列表,课题组联系方式,内部联系方式"; + // 政策课题关联表 表头 + public static String exportFieldLawsTopicRelation = "会议名称,会议时间,会议地点,参会人员(内部),会议主要内容,姓名,单位,电话,邮箱,身份,姓名,单位,电话,邮箱,身份"; + public static String exportBaseFieldNamesBussCode = "起草部门,废止日期,代替企标编号,复审日期,起草人,被代替企标编号,采用标准,文件上传人员,采标程度,引用标准,适用车型,能源类型,适用产品线,上传时间,体系类别,备案日期,关联模块-乘用车VPPS编码,关联模块--乘用车vpps中文名称,关联模块--卡车VPPS编码,关联模块--卡车vpps中文名称"; public static String exportAttrFieldNamesBuss = "SVPPS,规范性引用文件,废止日期,复审日期,密级,授权,相关部门," + @@ -80,6 +93,19 @@ public class FieldConvertUtil { "7.关联模块-乘用车VPPS编码和关联模块--卡车VPPS编码是填写数据库中已有的编码从而带出乘用车VPPS名称和卡车VPPS名称\n" + "8.发布稿,编制说明,历史版本,其他文件,修改单,关联文件为附件文件,需要放在Excel文档同级目录中"; + public static String exportInsideOutsideMeetingDesc ="填写说明\n" + + "1.导入数据从第三行开始,第一行为填写说明,第二行为表头,第三行是正式数据\n" + + "2.会议分类按照系统下拉菜单中的分类填写\n" + + "3.会议议题如果存在多条,则在下面以此填写,新的内外部会议另起一行填写"; + + public static String exportLawsInformationDesc = "填写说明\n" + + "1.导入数据从第三行开始,第一行为填写说明,第二行为表头,第三行是正式数据\n" + + "2.资料分类按照系统下拉菜单中的分类填写\n"; + + public static String exportLawsTopicDesc = "填写说明\n" + + "1.导入数据从第三行开始,第一行为填写说明,第二行为表头,第三行是正式数据\n" + + "2.课题组会议、课题组联系方式、内部联系方式如果存在多条,则在下面一次填写,新的课题组会议、课题组联系方式、内部联系方式在下面依次填写"; + public static String exportFieldName = "*企标类别,*企标编号,*标准年份,*企标名称,企标英文名称,*文本状态,发布日期,企标实施日期,起草部门,起草人,适用车型,能源类型,适用产品线,体系类别,关联模块-乘用车VPPS编码,关联模块--卡车VPPS编码,发布稿,编制说明,历史版本,其他文件,修改单,代替企标编号,采用标准,采标程度,引用标准,关联文件,"; /*** diff --git a/adc-da-slrs/src/main/java/com/adc/da/utils/util/InsideOutsideMeetingExportUtil.java b/adc-da-slrs/src/main/java/com/adc/da/utils/util/InsideOutsideMeetingExportUtil.java new file mode 100644 index 00000000..444d5895 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/utils/util/InsideOutsideMeetingExportUtil.java @@ -0,0 +1,173 @@ +package com.adc.da.utils.util; + +import com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO; +import com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * @author tjzdw + * @description + * @date 2023/10/20 + */ +public class InsideOutsideMeetingExportUtil { + + private static final Logger logger = LoggerFactory.getLogger(InsideOutsideMeetingExportUtil.class); + + + public static Workbook exportDatas(List datas) { + Workbook workbook = new XSSFWorkbook(); + try { + //定义表头 + String header = FieldConvertUtil.exportFieldNamesInsideOutsideMeeting + "," + FieldConvertUtil.exportFieldNamesMeetingTopic; + //创建工作表对象 + Sheet sheet = workbook.createSheet(); + // 创建头部 + createHeader(workbook, sheet, header); + // 创建数据 + createDatas(workbook, sheet, datas, header); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return workbook; + } + + public static void createHeader(Workbook workbook, Sheet sheet, String header) { + CellStyle cellStyle = workbook.createCellStyle();//初始化单元格格式对象 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + Row rowHeader = sheet.createRow(0);//开始创建标题行 + if (StringUtils.isNotBlank(header)) { + String[] headerArr = header.split(","); + for (int i = 0; i < headerArr.length; i++) { + rowHeader.createCell(i).setCellValue(headerArr[i]); + } + } + } + + public static void createDatas(Workbook workbook, Sheet sheet, List datas, + String header) throws Exception { + String[] insideOutsideMeetingHeaderList = FieldConvertUtil.exportFieldNamesInsideOutsideMeeting.split(","); + String[] meetingTopicHeaderList = FieldConvertUtil.exportFieldNamesMeetingTopic.split(","); + CellStyle cellStyle = workbook.createCellStyle();//初始化单元格格式对象 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + if (datas != null && !datas.isEmpty()) { + int rowIndex = 1; + for (InsideOutsideMeetingVO data : datas) { + String[] headerArr = header.split(","); + Row row = sheet.createRow(rowIndex); + int cellIndex = 0; + if (data.getMeetingTopicList().isEmpty()) { + for (String headerName : headerArr) { + String value = getValueByName(headerName, data); + if (StringUtils.isBlank(value) || "null".equals(value)) { + value = ""; + } + row.createCell(cellIndex).setCellValue(value); + cellIndex++; + } + } else { + for (String headerName : insideOutsideMeetingHeaderList) { + String value = getValueByName(headerName, data); + if (StringUtils.isBlank(value) || "null".equals(value)) { + value = ""; + } + row.createCell(cellIndex).setCellValue(value); + cellIndex++; + } + int newCellIndex = cellIndex; + for (String field : meetingTopicHeaderList) { + String topicValue = getMeetingTopicValueByName(field, data.getMeetingTopicList().get(0)); + if (StringUtils.isBlank(topicValue) || "null".equals(topicValue)) { + topicValue = ""; + } + row.createCell(cellIndex).setCellValue(topicValue); + cellIndex++; + } + rowIndex++; + for (int index = 1; index < data.getMeetingTopicList().size(); index++) { + Row newRow = sheet.createRow(rowIndex); + for (String field : meetingTopicHeaderList) { + String topicValue = getMeetingTopicValueByName(field, data.getMeetingTopicList().get(index)); + if (StringUtils.isBlank(topicValue) || "null".equals(topicValue)) { + topicValue = ""; + } + newRow.createCell(newCellIndex).setCellValue(topicValue); + newCellIndex++; + } + rowIndex++; + } + } + } + } + } + + // 根据表头返回相应值 + public static String getValueByName(String name, InsideOutsideMeetingVO insideOutsideMeeting) throws Exception{ + String value = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + switch (name) { + case "会议名称": + value = insideOutsideMeeting.getMeetingName(); + break; + case "课题名称": + value = insideOutsideMeeting.getTopicName(); + break; + case "会议主办单位": + value = insideOutsideMeeting.getMeetingOrganizer(); + break; + case "会议时间": + String meetingTime = null; + if (insideOutsideMeeting.getMeetingTime() != null){ + meetingTime = sdf.format(insideOutsideMeeting.getMeetingTime()); + } + value = meetingTime; + break; + case "会议地点": + value = insideOutsideMeeting.getMeetingAddress(); + break; + case "参会人员": + value = insideOutsideMeeting.getParticipants(); + break; + case "会议主要内容": + value = insideOutsideMeeting.getMeetingContent(); + break; + case "一级会议类别": + value = insideOutsideMeeting.getFirstMeetingTypeName(); + break; + case "二级会议类别": + value = insideOutsideMeeting.getSecondMeetingTypeName(); + break; + default: + value = null; + break; + } + return value; + } + public static String getMeetingTopicValueByName (String name, MeetingTopic meetingTopic) { + String value = ""; + switch (name) { + case "议题名称": + value = meetingTopic.getAgendaName(); + break; + case "汇报人": + value = meetingTopic.getReporter(); + break; + case "汇报单位": + value = meetingTopic.getReportingUnit(); + break; + case "议题主要内容": + value = meetingTopic.getAgendaContent(); + break; + default: + value = null; + break; + } + return value; + } +} diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/InsideOntSideMeeting/InsideOntSideMeeting.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/InsideOntSideMeeting/InsideOntSideMeeting.xml new file mode 100644 index 00000000..5d069c4e --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/InsideOntSideMeeting/InsideOntSideMeeting.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID,MEETING_NAME,TOPIC_NAME,MEETING_ORGANIZER,MEETING_TIME,MEETING_ADDRESS, + PARTICIPANTS,MEETING_MINUTES,MEETING_CONTENT,FIRST_MEETING_TYPE,SECOND_MEETING_TYPE,VALID_FLAG,CREATE_TIME,MODIFY_TIME + + + iom.ID,iom.MEETING_NAME,iom.TOPIC_NAME,iom.MEETING_ORGANIZER,iom.MEETING_TIME,iom.MEETING_ADDRESS, + iom.PARTICIPANTS,iom.MEETING_MINUTES,iom.MEETING_CONTENT,iom.FIRST_MEETING_TYPE,iom.SECOND_MEETING_TYPE, + mt.ID as mtId,mt.MEETING_ID,mt.AGENDA_NAME,mt.AGENDA_MATERIALS,mt.REPORTER,mt.REPORTING_UNIT, + mt.AGENDA_CONTENT, + iom.VALID_FLAG,iom.CREATE_TIME,iom.MODIFY_TIME + + + + + and MEETING_NAME like concat('%',#{meetingName},'%') + + + and TOPIC_NAME = #{topicName} + + + and MEETING_ORGANIZER like concat('%',#{meetingOrganizer},'%') + + + and MEETING_TIME ${meetingTimeOperator} #{meetingTime} + + + and MEETING_ADDRESS like concat('%',#{meetingAddress},'%') + + + and PARTICIPANTS in + + #{participant} + + + + and MEETING_CONTENT like concat('%',#{meetingContent},'%') + + + and FIRST_MEETING_TYPE = #{firstMeetingType} + + + and SECOND_MEETING_TYPE = #{secondMeetingType} + + + + + + and mt.AGENDA_NAME like concat('%',#{agendaName},'%') + + + and mt.REPORTER like concat('%',#{reporter},'%') + + + and mt.REPORTING_UNIT like concat('%',#{reportingUnit},'%') + + + and mt.AGENDA_CONTENT like concat('%',#{agendaContent},'%') + + + + + + + \ No newline at end of file diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformation/SarLawsInformationMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformation/SarLawsInformationMapper.xml new file mode 100644 index 00000000..aed4403b --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformation/SarLawsInformationMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, + FIRST_TYPE, + SECOND_TYPE, + THIRD_TYPE, + FOURTH_TYPE, + `NAME`, + DEPARTMENT,AUTHOR,UPLOAD_TIME, + `DESCRIPTION`,INFORMATION_FILE,VIEWABLE_BY, + DOWNLOADABLE_BY,VALID_FLAG,CREATE_TIME, + MODIFY_TIME + + + + and FIRST_TYPE like concat('%',#{firstType},'%') + + + and SECOND_TYPE like concat('%',#{secondType},'%') + + + and `NAME` like concat('%',#{name},'%') + + + and UPLOAD_TIME = #{uploadTime} + + + and TREE_NODE_ID = #{treeNodeId} + + + + + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformationCenterTree/SarLawsInformationCenterTreeMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformationCenterTree/SarLawsInformationCenterTreeMapper.xml new file mode 100644 index 00000000..715d7379 --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsInformationCenterTree/SarLawsInformationCenterTreeMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + id,parent_id,`name`, + sort + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsContactInformationMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsContactInformationMapper.xml new file mode 100644 index 00000000..0640d7ca --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsContactInformationMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + ID,LAWS_TOPIC_ID,GROUP_TYPE, + `NAME`,DEPARTMENT,PHONE, + EMAIL,IDENTITY + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMapper.xml new file mode 100644 index 00000000..606e448c --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMapper.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID,TOPIC_NAME,ORGANIZER, + GUIDANCE_UNIT,PARTICIPATING_UNIT,START_TIME, + CLOSE_TIME,TOPIC_STATUS,TOPIC_COST,AGREEMENT, + RESEARCH_PLAN,RESEARCH_FINDINGS,RESEARCH_GROUP_OTHER, + CONFERENCE_MATERIALS,INSIDE_PROJECT_PROPOSAL_REPORT,INSIDE_RESEARCH_PLAN, + INSIDE_CONFERENCE_MATERIALS,INSIDE_RESEARCH_FINDINGS,INSIDE_OTHER, + VALID_FLAG,CREATE_TIME,MODIFY_TIME + + + slt.ID,slt.TOPIC_NAME,slt.ORGANIZER, + slt.GUIDANCE_UNIT,slt.PARTICIPATING_UNIT,slt.START_TIME, + slt.CLOSE_TIME,slt.TOPIC_STATUS,slt.TOPIC_COST,slt.AGREEMENT, + sltm.ID as sltmId, + sltm.LAWS_TOPIC_ID as sltmLawsTopicId, + sltm.MEETING_NAME, + sltm.MEETING_TIME, + sltm.MEETING_ADDRESS, + sltm.PARTICIPANTS, + sltm.MEETING_CONTENT, + slt.RESEARCH_PLAN,slt.RESEARCH_FINDINGS,slt.RESEARCH_GROUP_OTHER, + slt.CONFERENCE_MATERIALS, + slci1.ID as slci1Id, + slci1.LAWS_TOPIC_ID as slci1LawsTopicId, + slci1.GROUP_TYPE slci1GroupType, + slci1.`NAME` as slci1Name, + slci1.DEPARTMENT as slci1Department, + slci1.PHONE as slci1Phone, + slci1.EMAIL as slci1Email, + slci1.IDENTITY as slci1Identity, + slci2.ID as slci2Id, + slci2.LAWS_TOPIC_ID as slci2LawsTopicId, + slci2.GROUP_TYPE as slci2GroupType, + slci2.`NAME` as slci2Name, + slci2.DEPARTMENT as slci2Department, + slci2.PHONE as slci2Phone, + slci2.EMAIL as slci2Email, + slci2.IDENTITY as slci2Identity, + slt.INSIDE_PROJECT_PROPOSAL_REPORT,slt.INSIDE_RESEARCH_PLAN, + slt.INSIDE_CONFERENCE_MATERIALS,slt.INSIDE_RESEARCH_FINDINGS,slt.INSIDE_OTHER, + slt.VALID_FLAG,slt.CREATE_TIME,slt.MODIFY_TIME + + + + + and TOPIC_NAME like concat('%',#{topicName},'%') + + + and ORGANIZER like concat('%',#{organizer},'%') + + + and GUIDANCE_UNIT like concat('%',#{guidanceUnit},'%') + + + and PARTICIPATING_UNIT like concat('%',#{participatingUnit},'%') + + + and START_TIME ${startTimeOperator} #{startTime} + + + and CLOSE_TIME ${startTimeOperator} #{closeTime} + + + and TOPIC_STATUS = #{topicStatus} + + + and TOPIC_COST like concat('%',#{topicCost},'%') + + + + + + and sltm.MEETING_NAME like concat('%',#{meetingName},'%') + + + and sltm.MEETING_TIME like concat('%',#{meetingTime},'%') + + + and sltm.MEETING_ADDRESS like concat('%',#{meetingAddress},'%') + + + + + + + + + and sltm.PARTICIPANTS like concat('%',#{participants},'%') + + + and sltm.MEETING_CONTENT like concat('%',#{meetingContent},'%') + + + + + and slci1.NAME like concat('%',#{topicGroupName},'%') + + + and slci1.DEPARTMENT like concat('%',#{topicGroupDepartment},'%') + + + and slci1.PHONE like concat('%',#{topicGroupPhone},'%') + + + and slci1.EMAIL like concat('%',#{topicGroupEmail},'%') + + + and slci1.IDENTITY like concat('%',#{topicGroupIdentity},'%') + + + and slci2.NAME like concat('%',#{insideName},'%') + + + and slci2.DEPARTMENT like concat('%',#{insideDepartment},'%') + + + and slci2.PHONE like concat('%',#{insidePhone},'%') + + + and slci2.EMAIL like concat('%',#{insideEmail},'%') + + + and slci2.IDENTITY like concat('%',#{insideIdentity},'%') + + + + + + + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMeetingMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMeetingMapper.xml new file mode 100644 index 00000000..b2dbba0f --- /dev/null +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/sarLawsTopic/SarLawsTopicMeetingMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + ID,LAWS_TOPIC_ID,MEETING_NAME, + MEETING_TIME,MEETING_ADDRESS,PARTICIPANTS, + MEETING_CONTENT + + diff --git a/adc-da-slrs/src/main/resources/mybatis/mapper/tsDictionaryType/TsDicTypeMapper.xml b/adc-da-slrs/src/main/resources/mybatis/mapper/tsDictionaryType/TsDicTypeMapper.xml index 558feffe..916d5ba1 100644 --- a/adc-da-slrs/src/main/resources/mybatis/mapper/tsDictionaryType/TsDicTypeMapper.xml +++ b/adc-da-slrs/src/main/resources/mybatis/mapper/tsDictionaryType/TsDicTypeMapper.xml @@ -14,6 +14,11 @@ + + + + + + +