Merge branch 'dev_20230829_change' into 'dev_20231013_ZC'

# Conflicts:
#   adc-da-activiti/src/main/java/com/adc/da/common/ActDefineStartMap.java
This commit is contained in:
高嵩
2023-10-31 03:49:09 +00:00
64 changed files with 5351 additions and 43 deletions
@@ -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);
}
@@ -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<String> processCreateMeeting(String infoJson) throws Exception {
if (StringUtils.isBlank(infoJson)) {
return Result.error("传入数据json不能为空");
}
meetingEOService.processCreateMeeting(infoJson);
return Result.success("入库成功");
}
}
@@ -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<String> processCreateLawsInformation(String infoJson) throws Exception {
if (StringUtils.isBlank(infoJson)) {
return Result.error("传入数据json不能为空");
}
informationEOService.processCreateLawsInformation(infoJson);
return Result.success("入库成功");
}
}
@@ -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<String> processLawsTopicMembership(String infoJson){
if (StringUtils.isBlank(infoJson)) {
return Result.error("传入数据json不能为空");
}
lawsTopicEOService.processLawsTopicMembership(infoJson);
return Result.success("入库成功");
}
@ApiOperation("政策课题参会")
@PostMapping("/processLawsTopicParticipation")
public ResponseMessage<String> processLawsTopicParticipation(String infoJson){
if (StringUtils.isBlank(infoJson)) {
return Result.error("传入数据json不能为空");
}
lawsTopicEOService.processLawsTopicParticipation(infoJson);
return Result.success("入库成功");
}
}
@@ -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);
}
}
@@ -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;
@@ -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);
}
}
@@ -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) {
}
}
@@ -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("/**");
@@ -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<InsideOutsideMeetingVO> {
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<InsideOutsideMeeting> 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<PageInfo<InsideOutsideMeetingVO>> page(InsideOutsideMeetingVO insideOutsideMeetingVO) {
List<InsideOutsideMeetingVO> 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<InsideOutsideMeetingVO> 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<String> 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);
}
}
}
@@ -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<InsideOutsideMeeting> {
Integer queryByPageCount(InsideOutsideMeetingVO page);
List<InsideOutsideMeetingVO> queryByPage(InsideOutsideMeetingVO page);
List<InsideOutsideMeetingVO> queryMeetingById(@Param("exportIdList") List<String> exportIdList);
List<InsideOutsideMeetingVO> queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO);
}
@@ -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<MeetingTopic> {
}
@@ -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<AttFileEO> 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<MeetingTopic> 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;
}
@@ -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<String> participantsList;
private String meetingMinutes;
private List<AttFileEO> 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<MeetingTopic> 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<String> exportIdList;
// 导出的文件名
private String exportName;
}
@@ -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;
}
@@ -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<InsideOutsideMeeting> {
Integer addMeetingInfo(InsideOutsideMeeting insideOutSideMeeting);
List<InsideOutsideMeetingVO> queryByPage(InsideOutsideMeetingVO page);
InsideOutsideMeeting getMeetingInfo(String meetingId);
Boolean deleteMeetingById(String meetingId);
Boolean updateMeetingInfo(InsideOutsideMeeting insideOutSideMeeting);
List<InsideOutsideMeetingVO> queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO);
List<InsideOutsideMeetingVO> queryMeetingById(List<String> exportIdList);
ResponseMessage<?> importMeetingInfo(MultipartFile file) throws ParseException;
}
@@ -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<MeetingTopic> {
public List<String> compareMeetingTopic(InsideOutsideMeeting oldTopic, InsideOutsideMeeting newTopic);
}
@@ -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<InsideOutsideMeetingDao, InsideOutsideMeeting> 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<AttFileEO> meetingMinutesList = new ArrayList<>();
for (String attId : insideOutsideMeeting.getMeetingMinutes().split(",")) {
AttFileEO fileInfo = attFileEOService.getFileInfo(attId);
meetingMinutesList.add(fileInfo);
}
insideOutsideMeeting.setMeetingMinutesList(meetingMinutesList);
}
// 获取会议类别值
getTypeByCode(insideOutsideMeeting);
// 获取会议课题列表
LambdaQueryWrapper<MeetingTopic> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MeetingTopic::getMeetingId, meetingId);
List<MeetingTopic> meetingTopicList = meetingTopicService.list(wrapper);
insideOutsideMeeting.setMeetingTopicList(meetingTopicList);
}
return insideOutsideMeeting;
}
@Transactional
@Override
public Boolean deleteMeetingById(String meetingId) {
LambdaUpdateWrapper<InsideOutsideMeeting> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(InsideOutsideMeeting::getId, meetingId);
wrapper.set(InsideOutsideMeeting::getValidFlag,1);
boolean update = update(wrapper);
if (update) {
LambdaQueryWrapper<MeetingTopic> 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<String> diffList = compareInsideOutsideMeeting(insideOutsideMeetingDB, insideOutsideMeeting);
if (diffList.size() > 0) {
insideOutsideMeeting.setModifyTime(new Date());
int update = this.baseMapper.updateById(insideOutsideMeeting);
if (update > 0) {
LambdaQueryWrapper<MeetingTopic> 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<InsideOutsideMeetingVO> queryAllMeeting(InsideOutsideMeetingVO insideOutsideMeetingVO) {
List<InsideOutsideMeetingVO> insideOutsideMeetingVOList = this.baseMapper.queryAllMeeting(insideOutsideMeetingVO);
for (InsideOutsideMeetingVO meetingVO : insideOutsideMeetingVOList) {
// 获取会议类别值
getTypeByCode(meetingVO);
}
return insideOutsideMeetingVOList;
}
@Override
public List<InsideOutsideMeetingVO> queryMeetingById(List<String> exportIdList) {
List<InsideOutsideMeetingVO> 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<InsideOutsideMeetingVO> 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<InsideOutsideMeetingVO> insideOutsideMeetingVOList = this.baseMapper.queryByPage(page);
for (InsideOutsideMeetingVO insideOutsideMeeting : insideOutsideMeetingVOList) {
// 获取会议纪要文件对象
if (StringUtils.isNotBlank(insideOutsideMeeting.getMeetingMinutes())) {
List<AttFileEO> 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<File> 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<String> 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<Map<String,String>> importDataList = new ArrayList<>();
// 开始遍历表格行
for (int rowIndex = 2; rowIndex < rowNum; rowIndex++) {
// 获取每一行
Row row = sheet.getRow(rowIndex);
// 用于存储每行的键值对数据,对应一条数据
Map<String, String> 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<TsDicType> firstMeetingTypeList = dicTypeService.selectAllDicTypeNameByDicCode("firstMeetingType");
Set<String> firstMeetingTypeNameSet = firstMeetingTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
List<TsDicType> secondMeetingTypeList = dicTypeService.selectAllDicTypeNameByDicCode("secondMeetingType");
Set<String> secondMeetingTypeNameSet = secondMeetingTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
// 计数器,用于处理出现多条会议课题的情况
int count = 0;
// InsideOutsideMeeting insideOutsideMeetingDB = null;
InsideOutsideMeeting insideOutsideMeeting = new InsideOutsideMeeting();
List<MeetingTopic> meetingTopicList = new ArrayList<>();
for (Map<String, String> 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<File> readImpExcelFile(String path) {
File file = new File(path);
List<File> 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<String> compareInsideOutsideMeeting(InsideOutsideMeeting oldMeeting, InsideOutsideMeeting newMeeting) {
List<String> changes = new ArrayList<>();
// 不需要比较的字段
String[] ignoreFields = {"id","validFlag","createTime","modifyTime", "firstMeetingTypeName", "secondMeetingTypeName"};
List<String> 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<String> 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<String> 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()));
}
}
}
@@ -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<MeetingTopicDao, MeetingTopic> implements MeetingTopicService {
@Resource
private IAttFileEOService attFileEOService;
@Override
public List<String> compareMeetingTopic(InsideOutsideMeeting oldTopic, InsideOutsideMeeting newTopic) {
List<String> changes = new ArrayList<>();
// 不需要比较的字段
String[] ignoreFields = {"id","meetingId"};
List<String> 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<String> 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;
}
}
@@ -165,41 +165,41 @@ public class EsRevisePlanController extends BaseController<EsRevisePlan> {
}
}
revisePlan.setArea(area);
//查评分
if (ObjectUtils.isNotEmpty(revisePlan.getStandId())) {
List<Double> last = new ArrayList<>();
List<QualityEvaluation> evaluations = qualityEvaluationDao.getEvaluationForm(new QueryWrapper<QualityEvaluation>().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<Double> last = new ArrayList<>();
// List<QualityEvaluation> evaluations = qualityEvaluationDao.getEvaluationForm(new QueryWrapper<QualityEvaluation>().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<EsRevisePlan> pageInfo = getPageInfo(esRevisePlan.getPager(),esRevisePlans);
return Result.success(pageInfo);
@@ -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<EsRevisePlanDao, EsRevi
@Autowired
private IEsRevisePlanLogService esRevisePlanLogService;
@Resource
private IQualityEvaluationService qualityEvaluationService;
@Override
public List<EsRevisePlan> getAllPlans(EsRevisePlan esRevisePlan) {
Integer count = esRevisePlanDao.getTotal();
@@ -73,6 +80,17 @@ public class EsRevisePlanServiceImpl extends ServiceImpl<EsRevisePlanDao, EsRevi
Integer count = esRevisePlanDao.getQueryTotal(esRevisePlan);
esRevisePlan.getPager().setRowCount(count);
List<EsRevisePlan> 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<String, Double> scoreMap = qualityEvaluationService.getScore(revisePlan.getStandId());
String quality = nf.format(scoreMap.get("quality"));
revisePlan.setScore(Double.valueOf(quality));
}
}
return esRevisePlans;
}
@@ -83,4 +83,12 @@ public class SarBussStandFileController extends BaseController<SarBussStandFile>
//非在线编辑文件可转换pdf
return sarBussStandFileEOService.batchUpdateSarBussFileMQ();
}
@ApiOperation(value = "企标发布稿重复问题,去重处理")
@GetMapping("/batchUpdateSarBussFileRepeat")
public ResponseMessage<String> batchUpdateSarBussFileRepeat() throws Exception {
String result = sarBussStandFileEOService.batchUpdateSarBussFileRepeat();
return Result.success(result);
}
}
@@ -21,4 +21,6 @@ public interface ISarBussStandFileService extends IService<SarBussStandFile> {
ResponseMessage<List<SarBussStandFile>> batchUpdateSarBussFile();
ResponseMessage<List<SarBussStandFile>> batchUpdateSarBussFileMQ();
String batchUpdateSarBussFileRepeat();
}
@@ -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;
/**
* <p>
@@ -47,6 +56,9 @@ public class SarBussStandFileServiceImpl extends ServiceImpl<SarBussStandFileDao
@Autowired
private CreateOnlineEditingFileMQService createOnlineEditingFileMQService;
@Resource
private ISarBussStandAttrInfoService standAttrInfoService;
@Override
public List<SarBussStandFile> selectFileByAttId(String attId) throws Exception{
return sarStandFileEODao.selectFileByAttId(attId);
@@ -140,4 +152,47 @@ public class SarBussStandFileServiceImpl extends ServiceImpl<SarBussStandFileDao
}
return Result.success(sarBussStandFileArrayList);
}
@Override
public String batchUpdateSarBussFileRepeat() {
// 获取所有企标详情的企标ID和发布稿字段
LambdaQueryWrapper<SarBussStandAttrInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SarBussStandAttrInfo::getValidFlag,"0");
wrapper.isNotNull(SarBussStandAttrInfo::getFbgbuss);
wrapper.ne(SarBussStandAttrInfo::getFbgbuss,"");
wrapper.select(SarBussStandAttrInfo::getStandId,SarBussStandAttrInfo::getFbgbuss);
List<SarBussStandAttrInfo> allStand = standAttrInfoService.list(wrapper);
// 转换为Map
Map<String,String> fbBussMap = new HashMap<>();
allStand.forEach(each -> fbBussMap.put(each.getStandId(),each.getFbgbuss()));
// 循环每条数据
for (Map.Entry<String, String> entry : fbBussMap.entrySet()) {
// 把发布告文件做分割
List<String> attIdList = Arrays.asList(entry.getValue().split(","));
// 根据发布稿文件查询发布告的具体信息,获取原文件名
LambdaQueryWrapper<SarBussStandFile> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(SarBussStandFile::getValidFlag,"0");
wrapper1.in(SarBussStandFile::getAttId, attIdList);
List<SarBussStandFile> sarBussStandFileList = sarStandFileEODao.selectList(wrapper1);
// 对文件名做去重
List<SarBussStandFile> 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<SarBussStandAttrInfo> 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 <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
}
@@ -196,32 +196,32 @@ public class QualityEvaluationServiceImpl extends ServiceImpl<QualityEvaluationD
Integer countBZSHStr = null;
if(!list.isEmpty()){
for (QualityEvaluation qualityEvaluations :list){
if(qualityEvaluations.getProcessNode().equals("征求意见")) {
if("征求意见".equals(qualityEvaluations.getProcessNode())) {
List<Integer> countZQYJList = qualityEvaluationDao.selectCountZQYJ(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId());
if(!countZQYJList.isEmpty()){
countZQYJStr = countZQYJList.size();
}
}
if(qualityEvaluations.getProcessNode().equals("技术委员会评审、评审意见修改")) {
if("技术委员会评审、评审意见修改".equals(qualityEvaluations.getProcessNode())) {
List<Integer> countJSWYList = qualityEvaluationDao.selectCountJSWY(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId());
if(!countJSWYList.isEmpty()){
countJSWYStr = countJSWYList.size();
}
}
if(qualityEvaluations.getProcessNode().equals("重新技术委员会评审、评审意见修改")) {
if("重新技术委员会评审、评审意见修改".equals(qualityEvaluations.getProcessNode())) {
List<Integer> countCXJSWYList = qualityEvaluationDao.selectCXJSWY(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId());
if(!countCXJSWYList.isEmpty()){
countCXJSWYStr = countCXJSWYList.size();
}
}
if(qualityEvaluations.getProcessNode().equals("标准化复审")) {
if("标准化复审".equals(qualityEvaluations.getProcessNode())) {
List<Integer> countBZHFSList = qualityEvaluationDao.selectBZHFS(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId());
if(!countBZHFSList.isEmpty()){
countBZHFSStr = countBZHFSList.size();
}
}
if(qualityEvaluations.getProcessNode().equals("标准法规部高级经理审核")) {
if("标准法规部高级经理审核".equals(qualityEvaluations.getProcessNode())) {
List<Integer> countBZSHList = qualityEvaluationDao.selectBZSH(qualityEvaluations.getProcessNode(), qualityEvaluations.getLawId());
if(!countBZSHList.isEmpty()){
countBZSHStr = countBZSHList.size();
@@ -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<SarLawsInformation> {
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<SarLawsInformation> 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<PageInfo<SarLawsInformation>> page(SarLawsInformation sarLawsInformation) {
List<SarLawsInformation> 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<SarLawsInformation> 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<String> 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);
}
}
}
@@ -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<SarLawsInformation> {
Integer queryByPageCount(SarLawsInformation page);
List<SarLawsInformation> queryByPage(SarLawsInformation page);
List<SarLawsInformation> getAllLawsInformation(SarLawsInformation sarLawsInformation);
}
@@ -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<AttFileEO> 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;
}
@@ -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> {
SarLawsInformation getLawsInformationInfo(String id);
List<SarLawsInformation> queryByPage(SarLawsInformation sarLawsInformation);
Integer addLawsInformation(SarLawsInformation sarLawsInformation);
Boolean deleteInformation(String id);
Boolean updateLawsInformationInfo(SarLawsInformation lawsInformation);
/**
* 根据法规资料id列表查询资料信息,用于导出,不包含文件信息
* @param idList 法规资料Id列表
* @return 法规资料列表
*/
List<SarLawsInformation> getLawsInformationByIds(List<String> idList);
/**
* 查询法规资料信息,用于导出,不包含文件信息
* @param sarLawsInformation 法规资料对象,用于查询
* @return 法规资料列表
*/
List<SarLawsInformation> getAllLawsInformation(SarLawsInformation sarLawsInformation);
ResponseMessage<?> importLawsInformationInfo(MultipartFile file);
}
@@ -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<SarLawsInformationDao, SarLawsInformation>
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<AttFileEO> 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<TsPersonCollect> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TsPersonCollect::getCollectResId, sarLawsInformation.getId());
List<TsPersonCollect> list = collectEOService.list(wrapper);
if (list.size() > 0) {
sarLawsInformation.setCollectId(list.get(0).getId());
}
return sarLawsInformation;
}
@Override
public List<SarLawsInformation> 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<SarLawsInformation> sarLawsInformationList = this.baseMapper.queryByPage(page);
for (SarLawsInformation sarLawsInformation : sarLawsInformationList) {
// 将字典编号变更为字典值
convertCodeToName(sarLawsInformation);
// 查询文件信息
if (StringUtils.isNotBlank(sarLawsInformation.getInformationFile())) {
String[] split = sarLawsInformation.getInformationFile().split(",");
List<AttFileEO> 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<SarLawsInformationCenterTree> 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<SarLawsInformation> 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<String> 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<SarLawsInformation> getLawsInformationByIds(List<String> idList) {
LambdaQueryWrapper<SarLawsInformation> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SarLawsInformation::getId, idList);
List<SarLawsInformation> sarLawsInformationList = this.baseMapper.selectList(wrapper);
for (SarLawsInformation sarLawsInformation : sarLawsInformationList) {
// 将字典编号变更为字典值
convertCodeToName(sarLawsInformation);
}
return sarLawsInformationList;
}
@Override
public List<SarLawsInformation> getAllLawsInformation(SarLawsInformation sarLawsInformation) {
List<SarLawsInformation> sarLawsInformationList = this.baseMapper.getAllLawsInformation(sarLawsInformation);
for (SarLawsInformation lawsInformation : sarLawsInformationList) {
// 将字典编号变更为字典值
convertCodeToName(lawsInformation);
// 查询文件信息
if (StringUtils.isNotBlank(lawsInformation.getInformationFile())) {
String[] split = lawsInformation.getInformationFile().split(",");
List<AttFileEO> 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<File> 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<String> 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<SarLawsInformation> sarLawsInformationList = ExcelImportUtil.importExcel(readImpExcelFile(zipEntryName).get(0), SarLawsInformation.class, importParams);
// 获取需要校验的字段
List<TsDicType> firstMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("firstMaterialType");
Set<String> firstMaterialTypeNameSet = firstMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
List<TsDicType> secondMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("secondMaterialType");
Set<String> secondMaterialTypeNameSet = secondMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
List<TsDicType> thirdMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("thirdMaterialType");
Set<String> thirdMaterialTypeNameSet = thirdMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
List<TsDicType> fourthMaterialTypeList = dicTypeService.selectAllDicTypeNameByDicCode("fourthMaterialType");
Set<String> fourthMaterialTypeNameSet = fourthMaterialTypeList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toSet());
// 遍历索引
int index = 1;
// 去除空数据
List<SarLawsInformation> 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<String> 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<String> 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<String> 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<String> 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<String> firstTypeList = new ArrayList<>();
for (String type : sarLawsInformation.getFirstType().split(",")) {
if (StringUtils.isNotBlank(type)) {
firstTypeList.add(dicTypeService.getDicTypeNameByDicCode(type));
}
}
sarLawsInformation.setFirstTypeName(String.join(",",firstTypeList));
List<String> secondTypeList = new ArrayList<>();
for (String type : sarLawsInformation.getSecondType().split(",")) {
if (StringUtils.isNotBlank(type)) {
secondTypeList.add(dicTypeService.getDicTypeNameByDicCode(type));
}
}
sarLawsInformation.setSecondTypeName(String.join(",",secondTypeList));
List<String> thirdTypeList = new ArrayList<>();
for (String type : sarLawsInformation.getThirdType().split(",")) {
if (StringUtils.isNotBlank(type)) {
thirdTypeList.add(dicTypeService.getDicTypeNameByDicCode(type));
}
}
sarLawsInformation.setThirdTypeName(String.join(",",thirdTypeList));
List<String> 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<String> compareSarLawsInformation(SarLawsInformation oldInfo, SarLawsInformation newInfo) {
List<String> changes = new ArrayList<>();
// 不需要比较的字段
String[] ignoreFields = {"id","firstTypeName","secondTypeName","thirdTypeName","fourthTypeName","uploadTime",
"informationFileList","createAndApproveBy","treeNodeId","treeNodeName","validFlag","createTime",
"modifyTime","sortField","sortMode","collectId","serialVersionUID"};
List<String> 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<String> 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<String> 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<String> 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<File> readImpExcelFile(String path) {
File file = new File(path);
List<File> 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;
}
}
@@ -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<SarLawsInformationCenterTree> {
@Resource
private SarLawsInformationCenterTreeService informationCenterTreeService;
@ApiOperation("新增资料中心左侧树节点")
@PostMapping("/addTreeNode")
public ResponseMessage<?> addTreeNode(@RequestBody SarLawsInformationCenterTree informationCenterTree){
informationCenterTreeService.addTreeNode(informationCenterTree);
return Result.success();
}
@ApiOperation("删除树节点")
@DeleteMapping("/deleteTreeNode")
public ResponseMessage<String> deleteTreeNode(String id){
Boolean aBoolean = informationCenterTreeService.deleteTreeNode(id);
return aBoolean ? Result.success("删除成功") : Result.error("节点下存在数据无法删除。");
}
@ApiOperation("查询树结构")
@GetMapping("/getTree")
public ResponseMessage<List<SarLawsInformationCenterTreeData>> getTree(){
List<SarLawsInformationCenterTreeData> informationCenterTreeList = informationCenterTreeService.getTree();
return Result.success(informationCenterTreeList);
}
@ApiOperation("修改树节点")
@PutMapping("/updateTreeNode")
public ResponseMessage<?> updateTreeNode(@RequestBody SarLawsInformationCenterTree informationCenterTree){
boolean b = informationCenterTreeService.updateTreeNode(informationCenterTree);
return Result.success("修改成功");
}
}
@@ -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<SarLawsInformationCenterTree> {
}
@@ -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;
}
@@ -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<SarLawsInformationCenterTreeData> children;
private static final long serialVersionUID = 1L;
}
@@ -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<SarLawsInformationCenterTree> {
void setResource(SarLawsInformationCenterTree informationCenterTree);
void addTreeNode(SarLawsInformationCenterTree informationCenterTree);
Boolean deleteTreeNode(String id);
List<SarLawsInformationCenterTreeData> getTree();
boolean updateTreeNode(SarLawsInformationCenterTree informationCenterTree);
}
@@ -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<SarLawsInformationCenterTreeDao, SarLawsInformationCenterTree>
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<String> idList = Arrays.asList(id.split(","));
LambdaQueryWrapper<SarLawsInformation> 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<SarLawsInformationCenterTreeData> getTree() {
// 获取当前登录人
String loginUserId = LoginUserUtil.getUserId();
// 查询当前登录人的权限菜单
List<String> resourceIdList = tsUserService.getResourceUserId(loginUserId);
List<SarLawsInformationCenterTreeData> resList = new ArrayList<>();
LambdaQueryWrapper<SarLawsInformationCenterTree> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SarLawsInformationCenterTree::getId, resourceIdList);
wrapper.orderByAsc(SarLawsInformationCenterTree::getSort);
List<SarLawsInformationCenterTree> list = this.list(wrapper);
List<SarLawsInformationCenterTreeData> 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<SarLawsInformationCenterTreeData> 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<String> roleIds = tsRoleDao.getResourceId(pId);
for (String roleId : roleIds){
tsRoleDao.addResource(roleId,informationCenterTree.getId());
tsRoleMenuDataDao.save(roleId,informationCenterTree.getId());
}
}
private void digui(SarLawsInformationCenterTreeData res,List<SarLawsInformationCenterTreeData> treeData){
for (SarLawsInformationCenterTreeData data : treeData) {
if (null==res.getChildren()) {
List<SarLawsInformationCenterTreeData> data1=new ArrayList<>();
res.setChildren(data1);
}
if (res.getId().equals(data.getParentId())){
if (null!=res.getChildren()){
res.getChildren().add(data);
}else {
List<SarLawsInformationCenterTreeData> data1 = new ArrayList<>();
data1.add(data);
res.setChildren(data1);
}
}
}
if (null!=res.getChildren()){
for (SarLawsInformationCenterTreeData treeData1:res.getChildren()) {
digui(treeData1,treeData);
}
}
}
}
@@ -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<SarLawsTopicVO> {
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<SarLawsTopic> 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<PageInfo<SarLawsTopicVO>> page(SarLawsTopicVO sarLawsTopicVO) {
List<SarLawsTopicVO> 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<SarLawsTopicVO> 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<String> 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);
}
}
}
@@ -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<SarLawsContactInformation> {
}
@@ -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<SarLawsTopic> {
Integer queryByPageCount(SarLawsTopicVO page);
List<SarLawsTopicVO> queryByPage(SarLawsTopicVO page);
List<SarLawsTopicVO> getLawsTopicByIds(@Param("idList") List<String> idList);
List<SarLawsTopicVO> getAllLawsTopic(SarLawsTopicVO sarLawsTopicVO);
}
@@ -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<SarLawsTopicMeeting> {
}
@@ -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;
}
@@ -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<AttFileEO> agreementList;
/**
* 课题组会议列表
*/
@ApiModelProperty(value = "课题组会议列表")
@TableField(exist = false)
private List<SarLawsTopicMeeting> meetingList;
/**
* 课题组研究方案
*/
@ApiModelProperty(value = "课题研究方案")
@TableField(value = "RESEARCH_PLAN")
private String researchPlan;
@ApiModelProperty(value = "课题组研究方案文件列表")
@TableField(exist = false)
private List<AttFileEO> researchPlanList;
/**
* 课题组研究成果
*/
@ApiModelProperty(value = "课题组研究成果")
@TableField(value = "RESEARCH_FINDINGS")
private String researchFindings;
/**
* 课题组研究成果真实文件名
*/
@ApiModelProperty(value = "课题组研究成果文件列表")
@TableField(exist = false)
private List<AttFileEO> researchFindingsList;
/**
* 课题组其他
*/
@ApiModelProperty(value = "课题组其他文件")
@TableField(value = "RESEARCH_GROUP_OTHER")
private String researchGroupOther;
@ApiModelProperty(value = "课题组其他文件列表")
@TableField(exist = false)
private List<AttFileEO> researchGroupOtherList;
/**
* 课题组会议资料
*/
@ApiModelProperty(value = "课题组会议资料")
@TableField(value = "CONFERENCE_MATERIALS")
private String conferenceMaterials;
@ApiModelProperty(value = "课题组会议资料文件列表")
@TableField(exist = false)
private List<AttFileEO> conferenceMaterialsList;
/**
* 课题组联系方式
*/
@ApiModelProperty(value = "课题组联系方式列表")
@TableField(exist = false)
private List<SarLawsContactInformation> topicContactInformationList;
/**
* 内部资料立项报告
*/
@ApiModelProperty(value = "内部资料立项报告")
@TableField(value = "INSIDE_PROJECT_PROPOSAL_REPORT")
private String insideProjectProposalRepost;
@ApiModelProperty(value = "内部资料立项报告文件列表")
@TableField(exist = false)
private List<AttFileEO> insideProjectProposalRepostList;
/**
* 内部资料研究方案
*/
@ApiModelProperty(value = "内部资料研究方案")
@TableField(value = "INSIDE_RESEARCH_PLAN")
private String insideResearchPlan;
@ApiModelProperty(value = "内部资料研究方案文件列表")
@TableField(exist = false)
private List<AttFileEO> insideResearchPlanList;
/**
* 内部资料会议资料
*/
@ApiModelProperty(value = "内部资料会议资料")
@TableField(value = "INSIDE_CONFERENCE_MATERIALS")
private String insideConferenceMaterials;
@ApiModelProperty(value = "内部资料会议资料文件列表")
@TableField(exist = false)
private List<AttFileEO> insideConferenceMaterialsList;
/**
* 内部会议研究成果
*/
@ApiModelProperty(value = "内部会议研究成果")
@TableField(value = "INSIDE_RESEARCH_FINDINGS")
private String insideResearchFindings;
@ApiModelProperty(value = "内部会议研究成果文件列表")
@TableField(exist = false)
private List<AttFileEO> insideResearchFindingsList;
/**
* 内部会议其他
*/
@ApiModelProperty(value = "内部会议其他文件")
@TableField(value = "INSIDE_OTHER")
private String insideOther;
@ApiModelProperty(value = "内部会议其他文件列表")
@TableField(exist = false)
private List<AttFileEO> insideOtherList;
/**
* 内部联系方式
*/
@ApiModelProperty(value = "内部联系方式列表")
@TableField(exist = false)
private List<SarLawsContactInformation> 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;
}
@@ -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;
}
@@ -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<AttFileEO> agreementList;
/**
* 课题组会议列表
*/
@ExcelCollection(name = "课题组会议列表", orderNum = "8")
private List<SarLawsTopicMeeting> meetingList;
/**
* 会议名称
*/
private String meetingName;
/**
* 会议时间
*/
private String meetingTime;
/**
* 会议地点
*/
private String meetingAddress;
/**
* 参会人员(内部)
*/
private String participants;
// 参会人员列表
private List<String> participantsList;
/**
* 会议主要内容
*/
private String meetingContent;
/**
* 课题组研究方案
*/
private String researchPlan;
private List<AttFileEO> researchPlanList;
/**
* 课题组研究成果
*/
private String researchFindings;
private List<AttFileEO> researchFindingsList;
/**
* 课题组其他
*/
private String researchGroupOther;
private List<AttFileEO> researchGroupOtherList;
/**
* 课题组会议资料
*/
private String conferenceMaterials;
private List<AttFileEO> conferenceMaterialsList;
/**
* 课题组联系方式
*/
@ExcelCollection(name = "课题组联系方式", orderNum = "9")
private List<SarLawsContactInformation> topicContactInformationList;
// 课题组用户名称
private String topicGroupName;
// 课题组部门
private String topicGroupDepartment;
// 课题组电话
private String topicGroupPhone;
// 课题组用户邮箱
private String topicGroupEmail;
// 课题组用户身份
private String topicGroupIdentity;
/**
* 内部资料立项报告
*/
private String insideProjectProposalRepost;
private List<AttFileEO> insideProjectProposalRepostList;
/**
* 内部资料研究方案
*/
private String insideResearchPlan;
private List<AttFileEO> insideResearchPlanList;
/**
* 内部资料会议资料
*/
private String insideConferenceMaterials;
private List<AttFileEO> insideConferenceMaterialsList;
/**
* 内部会议研究成果
*/
private String insideResearchFindings;
private List<AttFileEO> insideResearchFindingsList;
/**
* 内部会议其他
*/
private String insideOther;
private List<AttFileEO> insideOtherList;
/**
* 内部联系方式
*/
@ExcelCollection(name = "内部联系方式", orderNum = "10")
private List<SarLawsContactInformation> 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;
}
@@ -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<SarLawsContactInformation> {
}
@@ -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<SarLawsTopicMeeting> {
}
@@ -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> {
SarLawsTopic getLawsTopicInfo(String lawsTopicId) throws Exception;
Integer addLawsTopicInfo(SarLawsTopic lawsTopic);
Boolean deleteLawsTopicInfo(String lawsTopicId);
Boolean updateLawsTopicInfo(SarLawsTopic lawsTopic);
List<SarLawsTopicVO> queryByPage(SarLawsTopicVO sarLawsTopicVO);
List<SarLawsTopicVO> getLawsTopicByIds(List<String> idList);
List<SarLawsTopicVO> getAllLawsTopic(SarLawsTopicVO sarLawsTopicVO);
ResponseMessage<?> importLawsTopicInfo(MultipartFile file);
}
@@ -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<SarLawsContactInformationMapper, SarLawsContactInformation>
implements SarLawsContactInformationService{
}
@@ -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<SarLawsTopicMeetingMapper, SarLawsTopicMeeting>
implements SarLawsTopicMeetingService{
}
@@ -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<SarLawsTopicMapper, SarLawsTopic>
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<SarLawsTopicMeeting> meetingWrapper = new LambdaQueryWrapper<>();
meetingWrapper.eq(SarLawsTopicMeeting::getLawsTopicId, lawsTopicId);
List<SarLawsTopicMeeting> topicMeetingList = meetingService.list(meetingWrapper);
sarLawsTopic.setMeetingList(topicMeetingList);
// 查询课题组联系方式
LambdaQueryWrapper<SarLawsContactInformation> topicGroupWrapper = new LambdaQueryWrapper<>();
topicGroupWrapper.eq(SarLawsContactInformation::getLawsTopicId, lawsTopicId);
topicGroupWrapper.eq(SarLawsContactInformation::getGroupType,"topicGroup");
List<SarLawsContactInformation> lawsTopicContactInformation = contactInformationService.list(topicGroupWrapper);
sarLawsTopic.setTopicContactInformationList(lawsTopicContactInformation);
// 查询内部联系房方式
LambdaQueryWrapper<SarLawsContactInformation> insideWrapper = new LambdaQueryWrapper<>();
insideWrapper.eq(SarLawsContactInformation::getLawsTopicId, lawsTopicId);
insideWrapper.eq(SarLawsContactInformation::getGroupType,"inside");
List<SarLawsContactInformation> 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<SarLawsTopic> 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<SarLawsTopicMeeting> lawsTopicWrapper = new LambdaQueryWrapper<>();
lawsTopicWrapper.eq(SarLawsTopicMeeting::getLawsTopicId, lawsTopicId);
meetingService.remove(lawsTopicWrapper);
LambdaQueryWrapper<SarLawsContactInformation> 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<String> 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<SarLawsTopicMeeting> 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<SarLawsContactInformation> 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<SarLawsContactInformation> 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<SarLawsTopicVO> 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<SarLawsTopicVO> sarLawsTopicVOList = this.baseMapper.queryByPage(page);
for (SarLawsTopicVO lawsTopicVO : sarLawsTopicVOList) {
getFileListByAttFile(lawsTopicVO);
}
return sarLawsTopicVOList;
}
@Override
public List<SarLawsTopicVO> getLawsTopicByIds(List<String> idList) {
return this.baseMapper.getLawsTopicByIds(idList);
}
@Override
public List<SarLawsTopicVO> 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<File> 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<String> 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<String> 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<SarLawsTopicVO> 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<AttFileEO> 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<AttFileEO> 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<String> compareLawsTopic(SarLawsTopic oldLawsTopic, SarLawsTopic newLawsTopic) {
List<String> 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<String> ignoreFieldList = Arrays.asList(ignoreFields);
List<String> 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<String> 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<String> 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<File> readImpExcelFile(String path) {
File file = new File(path);
List<File> 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;
}
}
@@ -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("<span class=sub>" + smalltext + "</span>");
@@ -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;
/**
* <p>
@@ -16,4 +18,8 @@ import java.util.List;
*/
public interface TsDicTypeDao extends BaseMapper<TsDicType> {
public List<TsSearchMenu> getSearchMenu();
String selectDicTypeNameByDicCode(String typeCode);
List<TsDicType> selectAllDicTypeNameByDicCode(String dicCode);
}
@@ -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;
/**
* <p>
@@ -18,4 +19,18 @@ public interface ITsDicTypeService extends IService<TsDicType> {
public List<TsSearchMenu> getSearchMenu();
/**
* 根据数据字典编码查询字典值
* @param typeCode 字典编码
* @return 字典值
*/
public String getDicTypeNameByDicCode(String typeCode);
/**
* 根据字典值类别查询指定类别的所有类别名
* @param dicCode 字典类别编号
* @return 字典值列表
*/
List<TsDicType> selectAllDicTypeNameByDicCode(String dicCode);
}
@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -25,4 +26,14 @@ public class TsDicTypeServiceImpl extends ServiceImpl<TsDicTypeDao, TsDicType> i
public List<TsSearchMenu> getSearchMenu() {
return getBaseMapper().getSearchMenu();
}
@Override
public String getDicTypeNameByDicCode(String typeCode) {
return this.baseMapper.selectDicTypeNameByDicCode(typeCode);
}
@Override
public List<TsDicType> selectAllDicTypeNameByDicCode(String dicCode) {
return this.baseMapper.selectAllDicTypeNameByDicCode(dicCode);
}
}
@@ -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<Integer, Excel> map = new HashMap<>();
Map<Integer, Field> 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;
}
}
@@ -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编码,发布稿,编制说明,历史版本,其他文件,修改单,代替企标编号,采用标准,采标程度,引用标准,关联文件,";
/***
@@ -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<InsideOutsideMeetingVO> 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<InsideOutsideMeetingVO> 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;
}
}
@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.InsideOntSideMeeting.dao.InsideOutsideMeetingDao">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO" >
<id column="id" property="id" />
<result column="MEETING_NAME" property="meetingName" />
<result column="TOPIC_NAME" property="topicName" />
<result column="MEETING_ORGANIZER" property="meetingOrganizer" />
<result column="MEETING_TIME" property="meetingTime" />
<result column="MEETING_ADDRESS" property="meetingAddress" />
<result column="PARTICIPANTS" property="participants" />
<result column="MEETING_MINUTES" property="meetingMinutes" />
<result column="MEETING_CONTENT" property="meetingContent" />
<result column="FIRST_MEETING_TYPE" property="firstMeetingType" />
<result column="SECOND_MEETING_TYPE" property="secondMeetingType" />
<result column="VALID_FLAG" property="validFlag" />
<result column="CREATE_TIME" property="createTime" />
<result column="MODIFY_TIME" property="modifyTime" />
<collection property="meetingTopicList" ofType="com.adc.da.slrs.InsideOntSideMeeting.entity.MeetingTopic">
<id column="mtId" property="id" />
<result column="MEETING_ID" property="meetingId" />
<result column="AGENDA_NAME" property="agendaName" />
<result column="AGENDA_MATERIALS" property="agendaMaterials" />
<result column="REPORTER" property="reporter" />
<result column="REPORTING_UNIT" property="reportingUnit" />
<result column="AGENDA_CONTENT" property="agendaContent" />
</collection>
</resultMap>
<sql id="Base_Column_List">
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
</sql>
<sql id="Base_Column_Join_MeetingTopic_List">
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
</sql>
<sql id="Base_Where_Clause">
<trim suffixOverrides="," >
<if test="meetingName != null and meetingName !=''">
and MEETING_NAME like concat('%',#{meetingName},'%')
</if>
<if test="topicName != null and topicName !=''">
and TOPIC_NAME = #{topicName}
</if>
<if test="meetingOrganizer != null and meetingOrganizer != ''" >
and MEETING_ORGANIZER like concat('%',#{meetingOrganizer},'%')
</if>
<if test="meetingTime != null and meetingTime !=''">
and MEETING_TIME ${meetingTimeOperator} #{meetingTime}
</if>
<if test="meetingAddress != null and meetingAddress != ''" >
and MEETING_ADDRESS like concat('%',#{meetingAddress},'%')
</if>
<if test="participantsList != null and participantsList.size() > 0" >
and PARTICIPANTS in
<foreach collection="participantsList" separator="," open="(" close=")" item="participant">
#{participant}
</foreach>
</if>
<if test="meetingContent != null" >
and MEETING_CONTENT like concat('%',#{meetingContent},'%')
</if>
<if test="firstMeetingType != null and firstMeetingType != ''" >
and FIRST_MEETING_TYPE = #{firstMeetingType}
</if>
<if test="secondMeetingType != null and secondMeetingType != ''" >
and SECOND_MEETING_TYPE = #{secondMeetingType}
</if>
</trim>
</sql>
<sql id="MeetingTopic_where">
<if test="agendaName != null and agendaName != ''">
and mt.AGENDA_NAME like concat('%',#{agendaName},'%')
</if>
<if test="reporter != null and reporter != ''">
and mt.REPORTER like concat('%',#{reporter},'%')
</if>
<if test="reportingUnit != null and reportingUnit != ''">
and mt.REPORTING_UNIT like concat('%',#{reportingUnit},'%')
</if>
<if test="agendaContent != null and agendaContent != ''">
and mt.AGENDA_CONTENT like concat('%',#{agendaContent},'%')
</if>
</sql>
<select id="queryByPageCount" resultType="java.lang.Integer">
select count(1) from inside_outside_meeting iom join meeting_topic mt on iom.ID = mt.MEETING_ID
where iom.VALID_FLAG = 0
<include refid="Base_Where_Clause"/>
<include refid="MeetingTopic_where" />
</select>
<select id="queryByPage" resultMap="BaseResultMap" parameterType="com.adc.da.slrs.InsideOntSideMeeting.entity.InsideOutsideMeetingVO">
select <include refid="Base_Column_Join_MeetingTopic_List" />
from inside_outside_meeting iom join meeting_topic mt on iom.ID = mt.MEETING_ID
where iom.VALID_FLAG = 0
<include refid="Base_Where_Clause" />
<include refid="MeetingTopic_where" />
order by
<choose>
<when test="sortField == 'AGENDA_NAME'">
mt.${sortField} ${sortMode}
</when>
<otherwise>
iom.${sortField} ${sortMode}
</otherwise>
</choose>
limit ${pager.startIndex-1},${pageSize}
</select>
<select id="queryMeetingById" resultMap="BaseResultMap">
select <include refid="Base_Column_Join_MeetingTopic_List" />
from inside_outside_meeting iom join meeting_topic mt on iom.ID = mt.MEETING_ID
where iom.VALID_FLAG = 0 and iom.ID in
<foreach collection="exportIdList" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
order by iom.MEETING_NAME
</select>
<select id="queryAllMeeting" resultMap="BaseResultMap">
select <include refid="Base_Column_Join_MeetingTopic_List" />
from inside_outside_meeting iom join meeting_topic mt on iom.ID = mt.MEETING_ID
where iom.VALID_FLAG = 0
<include refid="Base_Where_Clause" />
<include refid="MeetingTopic_where" />
order by iom.MEETING_NAME
</select>
</mapper>
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.sarLawsInformation.dao.SarLawsInformationDao">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation">
<id property="id" column="ID" jdbcType="VARCHAR"/>
<result property="firstType" column="FIRST_TYPE" jdbcType="VARCHAR"/>
<result property="firstTypeName" column="firstTypeName" jdbcType="VARCHAR"/>
<result property="secondType" column="SECOND_TYPE" jdbcType="VARCHAR"/>
<result property="secondTypeName" column="secondTypeName" jdbcType="VARCHAR"/>
<result property="thirdType" column="THIRD_TYPE" jdbcType="VARCHAR"/>
<result property="thirdTypeName" column="thirdTypeName" jdbcType="VARCHAR"/>
<result property="fourthType" column="FOURTH_TYPE" jdbcType="VARCHAR"/>
<result property="fourthTypeName" column="fourthTypeName" jdbcType="VARCHAR"/>
<result property="name" column="NAME" jdbcType="VARCHAR"/>
<result property="department" column="DEPARTMENT" jdbcType="VARCHAR"/>
<result property="author" column="AUTHOR" jdbcType="VARCHAR"/>
<result property="uploadTime" column="UPLOAD_TIME" jdbcType="TIMESTAMP"/>
<result property="description" column="DESCRIPTION" jdbcType="VARCHAR"/>
<result property="informationFile" column="INFORMATION_FILE" jdbcType="VARCHAR"/>
<result property="viewableBy" column="VIEWABLE_BY" jdbcType="VARCHAR"/>
<result property="downloadableBy" column="DOWNLOADABLE_BY" jdbcType="VARCHAR"/>
<result property="treeNodeId" column="TREE_NODE_ID" jdbcType="VARCHAR"/>
<result property="viewableBy" column="VALID_FLAG" jdbcType="TINYINT"/>
<result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="MODIFY_TIME" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
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
</sql>
<sql id="Base_Where_Clause">
<if test="firstType != null and firstType != ''">
and FIRST_TYPE like concat('%',#{firstType},'%')
</if>
<if test="secondType != null and secondType != ''">
and SECOND_TYPE like concat('%',#{secondType},'%')
</if>
<if test="name != null and name != ''">
and `NAME` like concat('%',#{name},'%')
</if>
<if test="uploadTime != null">
and UPLOAD_TIME = #{uploadTime}
</if>
<if test="treeNodeId != null and treeNodeId != ''">
and TREE_NODE_ID = #{treeNodeId}
</if>
</sql>
<select id="queryByPageCount" resultType="java.lang.Integer">
select count(1)
from sar_laws_information
where VALID_FLAG = 0
<include refid="Base_Where_Clause" />
</select>
<select id="queryByPage" resultType="com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation">
select <include refid="Base_Column_List" />
from sar_laws_information
where VALID_FLAG = 0
<include refid="Base_Where_Clause" />
order by ${sortField} ${sortMode}
limit ${pager.startIndex-1},${pageSize}
</select>
<select id="getAllLawsInformation"
resultType="com.adc.da.slrs.sarLawsInformation.entity.SarLawsInformation">
select <include refid="Base_Column_List" />
from sar_laws_information
where VALID_FLAG = 0
<include refid="Base_Where_Clause" />
order by ID asc
</select>
</mapper>
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.sarLawsInformationCenterTree.dao.SarLawsInformationCenterTreeDao">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.sarLawsInformationCenterTree.entity.SarLawsInformationCenterTree">
<result property="id" column="id" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="sort" column="sort" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id,parent_id,`name`,
sort
</sql>
</mapper>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.sarLawsTopic.dao.SarLawsContactInformationMapper">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation">
<result property="id" column="ID" jdbcType="VARCHAR"/>
<result property="lawsTopicId" column="LAWS_TOPIC_ID" jdbcType="VARCHAR"/>
<result property="groupType" column="GROUP_TYPE" jdbcType="VARCHAR"/>
<result property="name" column="NAME" jdbcType="VARCHAR"/>
<result property="department" column="DEPARTMENT" jdbcType="VARCHAR"/>
<result property="phone" column="PHONE" jdbcType="VARCHAR"/>
<result property="email" column="EMAIL" jdbcType="VARCHAR"/>
<result property="identity" column="IDENTITY" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
ID,LAWS_TOPIC_ID,GROUP_TYPE,
`NAME`,DEPARTMENT,PHONE,
EMAIL,IDENTITY
</sql>
</mapper>
@@ -0,0 +1,230 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.sarLawsTopic.dao.SarLawsTopicMapper">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicVO">
<id property="id" column="ID" jdbcType="VARCHAR"/>
<result property="topicName" column="TOPIC_NAME" jdbcType="VARCHAR"/>
<result property="organizer" column="ORGANIZER" jdbcType="VARCHAR"/>
<result property="guidanceUnit" column="GUIDANCE_UNIT" jdbcType="VARCHAR"/>
<result property="participatingUnit" column="PARTICIPATING_UNIT" jdbcType="VARCHAR"/>
<result property="startTime" column="START_TIME" jdbcType="DATE"/>
<result property="closeTime" column="CLOSE_TIME" jdbcType="DATE"/>
<result property="topicStatus" column="TOPIC_STATUS" jdbcType="VARCHAR"/>
<result property="topicCost" column="TOPIC_COST" jdbcType="VARCHAR"/>
<result property="agreement" column="AGREEMENT" jdbcType="VARCHAR"/>
<result property="researchPlan" column="RESEARCH_PLAN" jdbcType="VARCHAR"/>
<result property="researchFindings" column="RESEARCH_FINDINGS" jdbcType="VARCHAR"/>
<result property="researchGroupOther" column="RESEARCH_GROUP_OTHER" jdbcType="VARCHAR"/>
<result property="conferenceMaterials" column="CONFERENCE_MATERIALS" jdbcType="VARCHAR"/>
<result property="insideProjectProposalRepost" column="INSIDE_PROJECT_PROPOSAL_REPORT" jdbcType="VARCHAR"/>
<result property="insideResearchPlan" column="INSIDE_RESEARCH_PLAN" jdbcType="VARCHAR"/>
<result property="insideConferenceMaterials" column="INSIDE_CONFERENCE_MATERIALS" jdbcType="VARCHAR"/>
<result property="insideResearchFindings" column="INSIDE_RESEARCH_FINDINGS" jdbcType="VARCHAR"/>
<result property="insideOther" column="INSIDE_OTHER" jdbcType="VARCHAR"/>
<result property="validFlag" column="VALID_FLAG" jdbcType="TINYINT"/>
<result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="MODIFY_TIME" jdbcType="TIMESTAMP"/>
<collection property="meetingList" ofType="com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting">
<id property="id" column="sltmId" jdbcType="VARCHAR"/>
<result property="lawsTopicId" column="sltmLawsTopicId"/>
<result property="meetingName" column="MEETING_NAME"/>
<result property="meetingTime" column="MEETING_TIME"/>
<result property="meetingAddress" column="MEETING_ADDRESS"/>
<result property="participants" column="PARTICIPANTS"/>
<result property="meetingContent" column="MEETING_CONTENT"/>
</collection>
<collection property="topicContactInformationList" ofType="com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation">
<id property="id" column="slci1Id" jdbcType="VARCHAR"/>
<result property="lawsTopicId" column="slci1LawsTopicId"/>
<result property="groupType" column="slci1GroupType"/>
<result property="name" column="slci1Name"/>
<result property="department" column="slci1Department"/>
<result property="phone" column="slci1Phone"/>
<result property="email" column="slci1Email"/>
<result property="identity" column="slci1Identity" />
</collection>
<collection property="insideContactInformationList" ofType="com.adc.da.slrs.sarLawsTopic.entity.SarLawsContactInformation">
<id property="id" column="slci2Id" jdbcType="VARCHAR"/>
<result property="lawsTopicId" column="slci2LawsTopicId"/>
<result property="groupType" column="slci2GroupType"/>
<result property="name" column="slci2Name"/>
<result property="department" column="slci2Department"/>
<result property="phone" column="slci2Phone"/>
<result property="email" column="slci2Email"/>
<result property="identity" column="slci2Identity" />
</collection>
</resultMap>
<sql id="Base_Column_List">
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
</sql>
<sql id="Base_Join_Column_List">
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
</sql>
<sql id="Base_Where_Clause">
<trim suffixOverrides="," >
<if test="topicName != null and topicName !=''">
and TOPIC_NAME like concat('%',#{topicName},'%')
</if>
<if test="organizer != null and organizer !=''">
and ORGANIZER like concat('%',#{organizer},'%')
</if>
<if test="guidanceUnit != null and guidanceUnit != ''" >
and GUIDANCE_UNIT like concat('%',#{guidanceUnit},'%')
</if>
<if test="participatingUnit != null and participatingUnit != ''" >
and PARTICIPATING_UNIT like concat('%',#{participatingUnit},'%')
</if>
<if test="startTime != null">
and START_TIME ${startTimeOperator} #{startTime}
</if>
<if test="closeTime != null">
and CLOSE_TIME ${startTimeOperator} #{closeTime}
</if>
<if test="topicStatus != null and topicStatus != ''" >
and TOPIC_STATUS = #{topicStatus}
</if>
<if test="topicCost != null and topicCost != ''" >
and TOPIC_COST like concat('%',#{topicCost},'%')
</if>
</trim>
</sql>
<sql id="TopicMeeting_where">
<if test="meetingName != null and meetingName != ''">
and sltm.MEETING_NAME like concat('%',#{meetingName},'%')
</if>
<if test="meetingTime != null and meetingTime != ''">
and sltm.MEETING_TIME like concat('%',#{meetingTime},'%')
</if>
<if test="meetingAddress != null and meetingAddress != ''">
and sltm.MEETING_ADDRESS like concat('%',#{meetingAddress},'%')
</if>
<!-- <if test="participantsList != null and participantsList.size() > 0" >-->
<!-- and PARTICIPANTS in-->
<!-- <foreach collection="participantsList" separator="," open="(" close=")" item="participant">-->
<!-- #{participant}-->
<!-- </foreach>-->
<!-- </if>-->
<if test="participants != null and participants != ''">
and sltm.PARTICIPANTS like concat('%',#{participants},'%')
</if>
<if test="meetingContent != null and meetingContent != ''">
and sltm.MEETING_CONTENT like concat('%',#{meetingContent},'%')
</if>
</sql>
<sql id="ContactInformation_where">
<if test="topicGroupName != null and topicGroupName !=''">
and slci1.NAME like concat('%',#{topicGroupName},'%')
</if>
<if test="topicGroupDepartment != null and topicGroupDepartment != ''">
and slci1.DEPARTMENT like concat('%',#{topicGroupDepartment},'%')
</if>
<if test="topicGroupPhone != null and topicGroupPhone != ''">
and slci1.PHONE like concat('%',#{topicGroupPhone},'%')
</if>
<if test="topicGroupEmail != null and topicGroupEmail != ''">
and slci1.EMAIL like concat('%',#{topicGroupEmail},'%')
</if>
<if test="topicGroupIdentity != null and topicGroupIdentity != ''">
and slci1.IDENTITY like concat('%',#{topicGroupIdentity},'%')
</if>
<if test="insideName != null and insideName !=''">
and slci2.NAME like concat('%',#{insideName},'%')
</if>
<if test="insideDepartment != null and insideDepartment != ''">
and slci2.DEPARTMENT like concat('%',#{insideDepartment},'%')
</if>
<if test="insidePhone != null and insidePhone != ''">
and slci2.PHONE like concat('%',#{insidePhone},'%')
</if>
<if test="insideEmail != null and insideEmail != ''">
and slci2.EMAIL like concat('%',#{insideEmail},'%')
</if>
<if test="insideIdentity != null and insideIdentity != ''">
and slci2.IDENTITY like concat('%',#{insideIdentity},'%')
</if>
</sql>
<select id="queryByPageCount" resultType="java.lang.Integer">
select count(1) from sar_laws_topic slt left join sar_laws_topic_meeting sltm on slt.ID = sltm.LAWS_TOPIC_ID
left join sar_laws_contact_information slci1 on slt.ID = slci1.LAWS_TOPIC_ID and slci1.GROUP_TYPE = 'topicGroup'
left join sar_laws_contact_information slci2 on slt.ID = slci2.LAWS_TOPIC_ID and slci2.GROUP_TYPE = 'inside'
where slt.VALID_FLAG = 0
<include refid="Base_Where_Clause"/>
<include refid="TopicMeeting_where" />
<include refid="ContactInformation_where" />
</select>
<select id="queryByPage" resultMap="BaseResultMap">
select <include refid="Base_Join_Column_List" />
from sar_laws_topic slt left join sar_laws_topic_meeting sltm on slt.ID = sltm.LAWS_TOPIC_ID
left join sar_laws_contact_information slci1 on slt.ID = slci1.LAWS_TOPIC_ID and slci1.GROUP_TYPE = 'topicGroup'
left join sar_laws_contact_information slci2 on slt.ID = slci2.LAWS_TOPIC_ID and slci2.GROUP_TYPE = 'inside'
where slt.VALID_FLAG = 0
<include refid="Base_Where_Clause"/>
<include refid="TopicMeeting_where" />
<include refid="ContactInformation_where" />
order by slt.${sortField} ${sortMode}
limit ${pager.startIndex-1},${pageSize}
</select>
<select id="getLawsTopicByIds" resultMap="BaseResultMap">
select <include refid="Base_Join_Column_List" />
from sar_laws_topic slt left join sar_laws_topic_meeting sltm on slt.ID = sltm.LAWS_TOPIC_ID
left join sar_laws_contact_information slci1 on slt.ID = slci1.LAWS_TOPIC_ID and slci1.GROUP_TYPE = 'topicGroup'
left join sar_laws_contact_information slci2 on slt.ID = slci2.LAWS_TOPIC_ID and slci2.GROUP_TYPE = 'inside'
where slt.VALID_FLAG = 0 and slt.ID in
<foreach collection="idList" open="(" close=")" separator="," item="id">
#{id}
</foreach>
order by slt.ID asc
</select>
<select id="getAllLawsTopic" resultMap="BaseResultMap">
select <include refid="Base_Join_Column_List" />
from sar_laws_topic slt left join sar_laws_topic_meeting sltm on slt.ID = sltm.LAWS_TOPIC_ID
left join sar_laws_contact_information slci1 on slt.ID = slci1.LAWS_TOPIC_ID and slci1.GROUP_TYPE = 'topicGroup'
left join sar_laws_contact_information slci2 on slt.ID = slci2.LAWS_TOPIC_ID and slci2.GROUP_TYPE = 'inside'
where slt.VALID_FLAG = 0
<include refid="Base_Where_Clause"/>
<include refid="TopicMeeting_where" />
<include refid="ContactInformation_where" />
order by slt.ID asc
</select>
</mapper>
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.slrs.sarLawsTopic.dao.SarLawsTopicMeetingMapper">
<resultMap id="BaseResultMap" type="com.adc.da.slrs.sarLawsTopic.entity.SarLawsTopicMeeting">
<id property="id" column="ID" jdbcType="VARCHAR"/>
<result property="lawsTopicId" column="LAWS_TOPIC_ID" jdbcType="VARCHAR"/>
<result property="meetingName" column="MEETING_NAME" jdbcType="VARCHAR"/>
<result property="meetingTime" column="MEETING_TIME" jdbcType="VARCHAR"/>
<result property="meetingAddress" column="MEETING_ADDRESS" jdbcType="VARCHAR"/>
<result property="participants" column="PARTICIPANTS" jdbcType="VARCHAR"/>
<result property="meetingContent" column="MEETING_CONTENT" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
ID,LAWS_TOPIC_ID,MEETING_NAME,
MEETING_TIME,MEETING_ADDRESS,PARTICIPANTS,
MEETING_CONTENT
</sql>
</mapper>
@@ -14,6 +14,11 @@
</collection>
</resultMap>
<resultMap id="codeAndName" type="com.adc.da.slrs.tsDictionaryType.entity.TsDicType">
<result property="dicTypeCode" column="dicTypeCode"/>
<result property="dicTypeName" column="dicTypeName"/>
</resultMap>
<select id="getSearchMenu" resultMap="searchMenu">
select t_d.ID as id,
t_d.DICTIONARY_CODE as dictionary_code,
@@ -28,4 +33,11 @@
t_d_t.DIC_TYPE_NAME is not null and
t_d.DICTIONARY_NAME is not null
</select>
<select id="selectDicTypeNameByDicCode" resultType="java.lang.String">
select DIC_TYPE_NAME from ts_dictype where DIC_TYPE_CODE = #{typeCode}
</select>
<select id="selectAllDicTypeNameByDicCode" resultMap="codeAndName">
select DIC_TYPE_CODE as dicTypeCode, DIC_TYPE_NAME as dicTypeName from ts_dictype
where DIC_ID = (select id from ts_dictionary where DICTIONARY_CODE = #{dicCode})
</select>
</mapper>