From 6be05fecb83f60c6501f1822acca86d8f4080316 Mon Sep 17 00:00:00 2001 From: guo Date: Thu, 21 Dec 2023 18:52:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A6=95=E5=9B=BEbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RtRiskInventoryTypeController.java | 47 +++++ .../rt/entity/RtRiskInventoryType.java | 198 ++++++++++-------- .../xmgl/modules/rt/entity/RtWorkTicket.java | 3 + .../rt/mapper/RtRiskInventoryTypeMapper.java | 10 + .../modules/rt/mapper/RtWorkTicketMapper.java | 10 + .../mapper/xml/RtRiskInventoryTypeMapper.xml | 6 +- .../rt/mapper/xml/RtWorkTicketMapper.xml | 16 ++ .../service/IRtRiskInventoryTypeService.java | 6 + .../impl/RtRiskInventoryTypeServiceImpl.java | 100 +++++++-- .../service/impl/RtWorkTicketServiceImpl.java | 73 +++++-- .../resources/excel/风险清册导入模板 .xlsx | Bin 11260 -> 0 bytes .../resources/excel/风险清册导入模板.xlsx | Bin 0 -> 11252 bytes 12 files changed, 348 insertions(+), 121 deletions(-) delete mode 100644 src/main/resources/excel/风险清册导入模板 .xlsx create mode 100644 src/main/resources/excel/风险清册导入模板.xlsx diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtRiskInventoryTypeController.java b/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtRiskInventoryTypeController.java index c1b07102e..c74bdd604 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtRiskInventoryTypeController.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/controller/RtRiskInventoryTypeController.java @@ -7,8 +7,15 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParams; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; import java.util.HashMap; +import org.apache.poi.util.IOUtils; +import org.springframework.core.io.ClassPathResource; +import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import java.util.List; @@ -23,6 +30,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; + /** * @Title: Controller @@ -39,6 +48,16 @@ public class RtRiskInventoryTypeController { @Autowired private IRtRiskInventoryTypeService rtRiskInventoryTypeService; + @ApiOperation(value = "tree分页列表查询榕图-风险清册类型信息", notes = "tree分页列表查询榕图-风险清册类型信息", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), + }) + @GetMapping(value = "/tree/page") + public Result> queryTreePageList(@ApiIgnore @RequestParam HashMap paramMap) { + return Result.success(rtRiskInventoryTypeService.queryTreePageList(paramMap)); + } + /** * 分页列表查询 * @@ -136,4 +155,32 @@ public class RtRiskInventoryTypeController { return result; } + @ApiOperation(value = "模板导入下载", notes = "模板导入下载") + @GetMapping("/downloadExcelTemplate") + public void downloadRtRiskSecurityLibraryTypeExcelTemplate(HttpServletResponse response) { + try { + OutputStream out = response.getOutputStream(); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/vnd.ms-excel;charset=gb2312"); + response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("风险清册导入模板.xlsx", "UTF-8")); + InputStream fis = new ClassPathResource("excel/风险清册导入模板.xlsx").getInputStream(); + IOUtils.copy(fis, out); + out.flush(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + @ApiOperation(value = "模板导入", notes = "模板导入") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = true, dataType = "String"), + @ApiImplicitParam(name = "excelFile", value = "导入文件", paramType = "query", required = true, dataType = "String"), + }) + @PostMapping(value = "/importExcelTemplate") + public Result importExcelTemplate(MultipartFile excelFile, String projectSn) throws Exception { + rtRiskInventoryTypeService.importExcelTemplate(excelFile, projectSn); + return Result.ok(); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtRiskInventoryType.java b/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtRiskInventoryType.java index 859025f6a..851249c95 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtRiskInventoryType.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtRiskInventoryType.java @@ -1,17 +1,18 @@ package com.zhgd.xmgl.modules.rt.entity; -import java.io.Serializable; -import java.util.Date; - 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 lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.List; /** * @Description: 榕图-风险清册类型 @@ -23,92 +24,103 @@ import io.swagger.annotations.ApiModelProperty; @TableName("rt_risk_inventory_type") @ApiModel(value = "RtRiskInventoryType实体类", description = "RtRiskInventoryType") public class RtRiskInventoryType implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - @ApiModelProperty(value = "id") - private java.lang.Long id; - /** - * 名称 - */ - @Excel(name = "名称", width = 15) - @ApiModelProperty(value = "名称") - private java.lang.String name; - /** - * 编码 - */ - @Excel(name = "编码", width = 15) - @ApiModelProperty(value = "编码") - private java.lang.String code; - /** - * 项目sn - */ - @Excel(name = "项目sn", width = 15) - @ApiModelProperty(value = "项目sn") - private java.lang.String projectSn; - /** - * 层级名称 - */ - @Excel(name = "层级名称", width = 15) - @ApiModelProperty(value = "层级名称") - private java.lang.String fullName; - /** - * 创建时间 - */ - @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "创建时间") - private java.util.Date createTime; - /** - * 等级 - */ - @Excel(name = "等级", width = 15) - @ApiModelProperty(value = "等级") - private java.lang.Integer level; - /** - * 父级id - */ - @Excel(name = "父级id", width = 15) - @ApiModelProperty(value = "父级id") - private java.lang.Long parentId; - /** - * 排序 - */ - @Excel(name = "排序", width = 15) - @ApiModelProperty(value = "排序") - private java.lang.Integer orderSort; - /** - * 风险可能导致的后果 - */ - @Excel(name = "风险可能导致的后果", width = 15) - @ApiModelProperty(value = "风险可能导致的后果") - private java.lang.String riskPossibleConsequence; - /** - * 风险评定值D - */ - @Excel(name = "风险评定值D", width = 15) - @ApiModelProperty(value = "风险评定值D") - private java.lang.String riskAssessmentValueD; - /** - * 风险级别 - */ - @Excel(name = "风险级别", width = 15) - @ApiModelProperty(value = "风险级别") - private java.lang.String riskLevel; - /** - * 风险控制关键因素 - */ - @Excel(name = "风险控制关键因素", width = 15) - @ApiModelProperty(value = "风险控制关键因素") - private java.lang.String keyFactorsInRiskControl; - /** - * 预防措施 - */ - @Excel(name = "预防措施", width = 15) - @ApiModelProperty(value = "预防措施") - private java.lang.Object precaution; + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.Long id; + /** + * 名称 + */ + @Excel(name = "名称", width = 15) + @ApiModelProperty(value = "名称") + private java.lang.String name; + /** + * 工序名称 + */ + @Excel(name = "工序名称", width = 15) + @ApiModelProperty(value = "工序名称") + private java.lang.String processName; + + /** + * 编码 + */ + @Excel(name = "编码", width = 15) + @ApiModelProperty(value = "编码") + private java.lang.String code; + /** + * 项目sn + */ + @Excel(name = "项目sn", width = 15) + @ApiModelProperty(value = "项目sn") + private java.lang.String projectSn; + /** + * 层级名称 + */ + @Excel(name = "层级名称", width = 15) + @ApiModelProperty(value = "层级名称") + private java.lang.String fullName; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /** + * 等级 + */ + @Excel(name = "等级", width = 15) + @ApiModelProperty(value = "等级") + private java.lang.Integer level; + /** + * 父级id + */ + @Excel(name = "父级id", width = 15) + @ApiModelProperty(value = "父级id") + private java.lang.Long parentId; + /** + * 排序 + */ + @Excel(name = "排序", width = 15) + @ApiModelProperty(value = "排序") + private java.lang.Integer orderSort; + /** + * 风险可能导致的后果 + */ + @Excel(name = "风险可能导致的后果", width = 15) + @ApiModelProperty(value = "风险可能导致的后果") + private java.lang.String riskPossibleConsequence; + /** + * 风险评定值D + */ + @Excel(name = "风险评定值D", width = 15) + @ApiModelProperty(value = "风险评定值D") + private java.lang.String riskAssessmentValueD; + /** + * 风险级别 + */ + @Excel(name = "风险级别", width = 15) + @ApiModelProperty(value = "风险级别") + private java.lang.String riskLevel; + /** + * 风险控制关键因素 + */ + @Excel(name = "风险控制关键因素", width = 15) + @ApiModelProperty(value = "风险控制关键因素") + private java.lang.String keyFactorsInRiskControl; + /** + * 预防措施 + */ + @Excel(name = "预防措施", width = 15) + @ApiModelProperty(value = "预防措施") + private java.lang.Object precaution; + + @TableField(exist = false) + @ApiModelProperty(value = "榕图-风险清册类型子集") + private List children; } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtWorkTicket.java b/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtWorkTicket.java index 7e266a0a0..9a211992e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtWorkTicket.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/entity/RtWorkTicket.java @@ -190,6 +190,9 @@ public class RtWorkTicket implements Serializable { @ApiModelProperty(value = "榕图-风险安全库-作业类型、工序及部位Json") private String rtRiskSecurityLibraryTypeJson; + @ApiModelProperty(value = "榕图-风险安全库-作业类型、工序及部位字符串") + private String rtRiskSecurityLibraryTypeStr; + @TableField(exist = false) @ApiModelProperty(value = "榕图-风险安全库-作业类型、工序及部位idList") private List rtRiskSecurityLibraryTypeIdList; diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtRiskInventoryTypeMapper.java b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtRiskInventoryTypeMapper.java index d31db1540..7e12c185b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtRiskInventoryTypeMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtRiskInventoryTypeMapper.java @@ -1,8 +1,15 @@ package com.zhgd.xmgl.modules.rt.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.rt.entity.RtRiskInventoryType; import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @Description: 榕图-风险清册类型 @@ -13,4 +20,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface RtRiskInventoryTypeMapper extends BaseMapper { + List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java index 3db9acb4c..2dab4ad8e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/RtWorkTicketMapper.java @@ -1,8 +1,15 @@ package com.zhgd.xmgl.modules.rt.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @Description: 榕图-工作票 @@ -13,4 +20,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface RtWorkTicketMapper extends BaseMapper { + IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + List queryList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtRiskInventoryTypeMapper.xml b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtRiskInventoryTypeMapper.xml index b4e845be2..496139f46 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtRiskInventoryTypeMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtRiskInventoryTypeMapper.xml @@ -1,5 +1,9 @@ - + diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml index 63d397d2d..03f97f0bb 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/rt/mapper/xml/RtWorkTicketMapper.xml @@ -1,4 +1,20 @@ + + + + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtRiskInventoryTypeService.java b/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtRiskInventoryTypeService.java index f0e2fa775..e531cb05f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtRiskInventoryTypeService.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/service/IRtRiskInventoryTypeService.java @@ -3,7 +3,9 @@ package com.zhgd.xmgl.modules.rt.service; import com.zhgd.xmgl.modules.rt.entity.RtRiskInventoryType; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -22,4 +24,8 @@ public interface IRtRiskInventoryTypeService extends IService queryTreePageList(HashMap paramMap); + + void importExcelTemplate(MultipartFile excelFile, String projectSn) throws Exception; } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtRiskInventoryTypeServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtRiskInventoryTypeServiceImpl.java index ede042490..3b0d61364 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtRiskInventoryTypeServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtRiskInventoryTypeServiceImpl.java @@ -1,22 +1,31 @@ package com.zhgd.xmgl.modules.rt.service.impl; -import com.zhgd.xmgl.modules.rt.entity.RtRiskInventoryType; -import com.zhgd.xmgl.modules.rt.mapper.RtRiskInventoryTypeMapper; -import com.zhgd.xmgl.modules.rt.service.IRtRiskInventoryTypeService; -import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zhgd.jeecg.common.system.query.QueryGenerator; -import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.rt.entity.RtRiskInventoryType; +import com.zhgd.xmgl.modules.rt.entity.RtRiskSecurityLibraryType; +import com.zhgd.xmgl.modules.rt.mapper.RtRiskInventoryTypeMapper; +import com.zhgd.xmgl.modules.rt.service.IRtRiskInventoryTypeService; +import com.zhgd.xmgl.util.*; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; import java.util.HashMap; import java.util.List; - -import com.zhgd.xmgl.util.RefUtil; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 榕图-风险清册类型 @@ -34,7 +43,7 @@ public class RtRiskInventoryTypeServiceImpl extends ServiceImpl queryPageList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); Page page = PageUtil.getPage(paramMap); - IPage pageList = this.page(page, queryWrapper); + IPage pageList = baseMapper.queryList(page, queryWrapper); pageList.setRecords(dealList(pageList.getRecords())); return pageList; } @@ -42,7 +51,7 @@ public class RtRiskInventoryTypeServiceImpl extends ServiceImpl queryList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); - return dealList(this.list(queryWrapper)); + return dealList(baseMapper.queryList(queryWrapper)); } private QueryWrapper getQueryWrapper(HashMap paramMap) { @@ -66,4 +75,71 @@ public class RtRiskInventoryTypeServiceImpl extends ServiceImpl queryTreePageList(HashMap paramMap) { + String taskName = MapUtils.getString(paramMap, "taskName"); + Integer status = MapUtils.getInteger(paramMap, "status"); + String actualFinishDate_begin = MapUtils.getString(paramMap, "actualFinishDate_begin"); + String actualFinishDate_end = MapUtils.getString(paramMap, "actualFinishDate_end"); + if (StrUtil.isBlank(taskName) && StrUtil.isBlank(actualFinishDate_begin) && StrUtil.isBlank(actualFinishDate_end) && status == null) { + int pageNo = Integer.parseInt(paramMap.getOrDefault("pageNo", 1).toString()); + int pageSize = Integer.parseInt(paramMap.getOrDefault("pageSize", 10).toString()); + List list = getParentChildList(paramMap); + IPage p = new Page<>(); + int i = cn.hutool.core.util.PageUtil.getStart(pageNo - 1, pageSize); + p.setTotal(list.size()); + p.setRecords(CollUtil.sub(list, i, i + pageSize)); + p.setCurrent(pageNo); + p.setSize(pageSize); + return p; + } else { + return this.queryPageList(paramMap); + } + } + + @Override + public void importExcelTemplate(MultipartFile excelFile, String projectSn) throws Exception { + InputStream is = excelFile.getInputStream(); + List> list = ExcelUtils.jxlExlToList(is, 0); + if (list == null || list.size() == 0) { + throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); + } + Map libraryObj = new HashMap<>(); + for (Map importInfo : list) { + //风险编号 工序 风险可能导致的后果 风险评定值D 风险级别 风险控制关键因素 预控措施 备注 + if (importInfo == null || importInfo.get("风险编号") == null || importInfo.get("风险编号").equals("")) { + continue; + } + String code = importInfo.get("编码").trim(); + String typeName = importInfo.get("作业类型、工序及部位"); + String newCode = CodeUtils.subCode(code); + } + + + } + + public List getParentChildList(HashMap paramMap) { + // 查询项目下的节点集合,通过父节点分组 + List progressTaskList = this.queryList(paramMap); + Map> parentIdTaskListMap = progressTaskList.stream().collect(Collectors.groupingBy(RtRiskInventoryType::getParentId)); + return getChild(parentIdTaskListMap, 0L); + } + + /** + * 递归设置子节点列表 + * + * @param parentIdTaskListMap 父节点对应的子节点列表 + * @param parentId 父节点id + * @return + */ + public List getChild(Map> parentIdTaskListMap, Long parentId) { + List parentList = parentIdTaskListMap.getOrDefault(parentId, Collections.emptyList()); + if (CollUtil.isNotEmpty(parentList)) { + for (RtRiskInventoryType progressTask : parentList) { + progressTask.setChildren(getChild(parentIdTaskListMap, progressTask.getId())); + } + } + return parentList; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java index 854f6f172..f6f3f3b43 100644 --- a/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/rt/service/impl/RtWorkTicketServiceImpl.java @@ -1,26 +1,31 @@ package com.zhgd.xmgl.modules.rt.service.impl; import cn.hutool.core.collection.CollUtil; -import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; -import com.zhgd.xmgl.modules.rt.entity.RtWorkTicketToRiskSecurityLibraryType; -import com.zhgd.xmgl.modules.rt.mapper.RtWorkTicketMapper; -import com.zhgd.xmgl.modules.rt.mapper.RtWorkTicketToRiskSecurityLibraryTypeMapper; -import com.zhgd.xmgl.modules.rt.service.IRtWorkTicketService; -import org.springframework.stereotype.Service; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zhgd.jeecg.common.system.query.QueryGenerator; -import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.rt.entity.RtRiskSecurityLibraryType; +import com.zhgd.xmgl.modules.rt.entity.RtWorkTicket; +import com.zhgd.xmgl.modules.rt.entity.RtWorkTicketToRiskSecurityLibraryType; +import com.zhgd.xmgl.modules.rt.mapper.RtRiskSecurityLibraryTypeMapper; +import com.zhgd.xmgl.modules.rt.mapper.RtWorkTicketMapper; +import com.zhgd.xmgl.modules.rt.mapper.RtWorkTicketToRiskSecurityLibraryTypeMapper; +import com.zhgd.xmgl.modules.rt.service.IRtWorkTicketService; +import com.zhgd.xmgl.util.PageUtil; +import com.zhgd.xmgl.util.RefUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; -import com.zhgd.xmgl.util.RefUtil; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.factory.annotation.Autowired; - /** * @Description: 榕图-工作票 * @author: pds @@ -34,12 +39,14 @@ public class RtWorkTicketServiceImpl extends ServiceImpl queryPageList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); Page page = PageUtil.getPage(paramMap); - IPage pageList = this.page(page, queryWrapper); + IPage pageList = baseMapper.queryList(page, queryWrapper); pageList.setRecords(dealList(pageList.getRecords())); return pageList; } @@ -47,11 +54,11 @@ public class RtWorkTicketServiceImpl extends ServiceImpl queryList(HashMap paramMap) { QueryWrapper queryWrapper = getQueryWrapper(paramMap); - return dealList(this.list(queryWrapper)); + return dealList(baseMapper.queryList(queryWrapper)); } private QueryWrapper getQueryWrapper(HashMap paramMap) { - String alias = ""; + String alias = "rwt."; QueryWrapper queryWrapper = QueryGenerator.initPageQueryWrapper(RtWorkTicket.class, paramMap, alias); queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(RtWorkTicket::getId)); return queryWrapper; @@ -64,7 +71,12 @@ public class RtWorkTicketServiceImpl extends ServiceImpl rtRiskSecurityLibraryTypeIdList = rtWorkTicket.getRtRiskSecurityLibraryTypeIdList(); if (CollUtil.isNotEmpty(rtRiskSecurityLibraryTypeIdList)) { for (String id : rtRiskSecurityLibraryTypeIdList) { @@ -76,8 +88,39 @@ public class RtWorkTicketServiceImpl extends ServiceImpl 1) { + for (int i = 0; i < o1.size(); i++) { + String o3 = (String) o1.get(i); + RtRiskSecurityLibraryType type = rtRiskSecurityLibraryTypeMapper.selectById(o3); + if (type != null) { + s.append(type.getName()); + if (i == (o1.size() - 1)) { + s.append(";"); + } else { + s.append(":"); + } + } + } + } + } + rtWorkTicket.setRtRiskSecurityLibraryTypeStr(s.toString()); + } + } + @Override public void edit(RtWorkTicket rtWorkTicket) { + setRtRiskSecurityLibraryTypeStrIf(rtWorkTicket); + //中间表 + rtWorkTicketToRiskSecurityLibraryTypeMapper.delete(new LambdaQueryWrapper() + .eq(RtWorkTicketToRiskSecurityLibraryType::getRtWorkTicketId, rtWorkTicket.getId())); + insertRelIf(rtWorkTicket); baseMapper.updateById(rtWorkTicket); } } diff --git a/src/main/resources/excel/风险清册导入模板 .xlsx b/src/main/resources/excel/风险清册导入模板 .xlsx deleted file mode 100644 index f8fae426391d313673dbda4ce433616f1f86b43d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11260 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 diff --git a/src/main/resources/excel/风险清册导入模板.xlsx b/src/main/resources/excel/风险清册导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2395f1bf14d4c6fb4d1feb32c979105ede145edf GIT binary patch literal 11252 zcma)iWmp}{(k|}qF2UX1-QC??7VZ|@-Q6J&Gz3C$2<~pd-6ePkTu9E@lC!`4-2O2$ zYgXA*O;=Y>y^1oRU@$oWxOSP$smH+rTrVdVoq)c=8C^1tfBxVN1H^z`sM`Fe7<6Mv|ik|1Jbik zK2rQH(ZP7z4gp82W1h#5QDg#|6u*VOSZ*u7^Es7VT;1o%i?<1wbGM(oNqBqT*meOW=+%H_-+5J@u1duR+DyPkzLizmLEQpF^?uXD_++EIUdbOr$H&n z#yP`!WsGWJY#(Sm%PuEkl6OlKn@Kgxx8hj{EKJKN2i!2UzxyljUKtNe+>>1GYmXcUZ;ew+faeV%cS3 zQqfV28^B^91~-Jh498=_(5op0GE-UhCl(`kVi#pFnT6NwvJ7P0ycf}SR4&iP{$5%7 z$@DQ-4)}ZUl>VE(Lfv|lHfC)7F}d)nM|k6%hCn>Ois`rED<`o>x$*}NDIFI2xcY}Ol|9db@S zTtuZ!)Fo%Ck2bOoMh<8wP8xcx?(LCFw%f}`&twm8W$dy-7Z81yh);o}a=f2CN!R`! zkIy7P>=ZBYKzNA<>fhqw>g)ordyPm*f}TtdBU z@qxN!QeyEm@sm5tE*eAYco z_3TWWIx{4NRagC|wn2gzf)dA^hPM)wSwTV0TOhzmjxQIb+zRn9+Ncz^^$sg#8mX3`dT28F4K8xKz3xJ=jeF~W{+R&b7lAv#$;R2z%*^HYbmcs2BHR2TrQwAg>wjo} zvM{|yDn?xou*r$$Yhd*(vVA*lrNgiK`OX+Dy_QfIM#O8E~NG+xR?x?u~+D< zsJfSJmn`~V>Pw%7NF}{oF%~H&Qq0jcTXQQEkUj-&>QfdSt|TwRyg5WEtG4N=F3wAd ziIfj2^c0-gB}Hdw)HG_)&P2Z>SC{cqj!xaqI^TX55PW9S?U7T61YT*jZpam)ZxiGZ zc&u`TwIVRe+70BVq&z$ZP}oSb=$0&%LzLNRXGlHhJRRV>2}9p z2BSwtVHX~l)TA!OIA_r3^$rciHnw<;bq<|`QIvk}eAP3!n_e)_i~~oKu6_6IPsBZ% z9HtWsie-e##I=L4CL%ecerN{F{<2|Bp$H}-al3wD@R9rz@LF)VeWAVy_#ATeCmC## zSj)T-0vQITe%Y3*6GpcCj++ejr9H%EF5L?gWl77G!I^M8nQ|Cu{P5K9?+K&#uKBg; zz-#z8O**j}gXZGQg}>8<7R|IfAOw@u)bi65eFr}dl$|F0cn|~smc;0$6(+3<8!nG6 z{G*tl1^$~ul94_sB~0X7m$6c_dhVkPVD7aaO z%*WLekf--f;7)aMTKi=*@llvwu$AMbS@`B%ZR7}W4Q>~@_ZNmI92m@OYmL?YhI^~@ zy@9CCkB6wHCKTLCCuPgI%IN&@HJW&qRD9w$`E*wnQq0h2O9J_@-y>Qt#V@2;uB0Bj z(Z3Qem67P~K$#-?S`Otp&+-RYxsF*B%BN^-M21^D5c&{r@a_b5myCX$RaSK@04s$# zI4Uc|HeZhHo`kv;*2|3PV0nAZ?{GUh3;26ZhJ~%);(f`-vta+{bZ7oK-BslPI7~=w z8i)S1KI2}C4N`)%2_PjAGm=WPaUU+m>M@=cmO{y%+f5i`sJ7!_8`nH?*IKdNygKG1 zk2^iBh4GutF8) zF&c@2V7<+->oP2El>ZhW(PZB4+F6-gj81d;7-~fie}YYZ%7@ojT@nz2t^-egMT&ri zSiZ(le+|0a?uBWv;}P}|!AqW${$U^iaCIP@m)flbIEsg^)M7ZPA7a9N)+ock6a}Q0 zG%wpO(~#QNeM(VfZY_0!6heBsaM4S1tr`#JD(7UfbQvZZY2w#xTYo#f$m+V@TesMd zxNmIB=ct%=Rglh$j&|X)l@>gfcPwRlKeQwV$E!v*N`gs=H0jgrxY&i4OntD)B0rk< zB|?YPRHASCM`ydN$mOOaINMqUW7A>NdtsF+Cj8p7MsKiYdl2~p*U(2d++@~sc(;7U za0eer&5-wZG7Zt7auK`V8{8oK(rFU$!#F})`9Te2u|E+oM;;yDjN;7+q)JE4jg^kM zf%RAClOD9TVCQm6OBiSqJk$4@M&Cqu`~W^93DmCRjN7+Yk1n+hQ;+CLxpyE-#d5~j z>r8Vt^hEICgCrOSw)JBmb%V3P_L{{k>#9=m=RqneA{+Gq*wQPP_ ztz0b4?96^En-j!bF!#WLfGDtk6$^im{UrXm1f6J&$KkS}wUb;3MDNNc9q&qfux?zE ztJmAN*I~0#iW`e&+3I5LG-O)XR|euCxoCP(FQ zTsWzK6kKT|%{}Au_dC1yzS*AI@rJ&RWyB0F!S8S@IP~U(*OZ(p-&(^t^>vuM4HmTu zr<8H*&okOESoM2uld+WPC^Lq2ebgMXtyD$^h9hx&YsML3VbX_6x%6fj1g7G$Oa3+Vg$Ni41y!8kSOX-(2nTw10@65t2OnRW>h9 zO48g>jF)rSRSmFe_2xsB--k8YA67sxAevTVy;qA1c4s#@;B!Dbg!t{=RjcNs-MCL2 z8k}dWGaVuG`Ct8g!8@AfLnyU9;D;_^(0$rgm-grAS|N7sc46ApRt{!$F!Y0rrKbjA zJ}+6?yX{rd5u1qL=A63~wa+h6W-}-%!kf9iqw1qgIkKh`a>rf+4FFLll{y^M3hk#1 zU_N~#EuQTGNg7#_31Mes$~ztgQpa3uekIx|Mb7gifgKoAcmD9Oh**=yccCxf?c?-( zF!&=+fq<8@`B~+3nE9)Ol_^g9!|At<_NOo3zYTKK5cnPR!Jr#^L*&4y4Mxy+dI~KkQaCmr_bn891{JCnLX~NH9b#u09&4`P3%~zFkQl(y)i>25 z(yAw#O^ltGpe6}hi)uU4PrKtqWCtCc|UhcDtzQsne`kl{?I zizZ3-(TO7=`0=dlb%c@7$&{D&j0b^)%-&(;XYr89)pECXfmJSf^k7YbTyoM;AW90Q zUlWFD(zUL6(kGd^wao+<=-T8Zy(&ERSXz@#Vmo>woWC72L|k)!^;azPw#;1Ztff)c znc)fXE1P(F)-RYp*=ed7hNXf?Q4i~S{8BZ(Hn_BPo36+m&k~6k%>NeFQgDL+j+)2! z_REedZPZ55(jep8kSNY6b^?n_lQ&yJ(afA}^FBMIC?Q9Z9@wZ3HZwi)YcL9BgT%1k zbS$b$?bDk*phz*dX2rP>I3O~LvZ{LJDqLz7#UJ{3DDrLBf`ged@H4$>JB6h7j2pX&FBeW7;1@F$gTni0~Z+7Nh zdW=;t<=rhYg&-Ii_B7QtX=UnZX-nA5b_t9_qvQo7Mc(P*O5st5sznwB7p2Yi49eD% zDg~6rMiZ8Lj}#btqihRwHlT8HCHe2%zg}cz!Bb`cnc@4xHM!rVn=0}M=h!00tmA7E zdA4ti7tvy4)`y8^L+VD!S3^K2qeh?Dn5++_&xhO$n)vJ?ah1-Qn;+LKiT z1VAQ3tTVHwY(i~1??YE^LrEyX8l^O;B+E3up*6tDqu#9x2|AYuD<SxIDK<`^kR4Nom>iRSic!g8Z}|$(E-Y`zl2&GL!NX|ta>=I@zHTmj zxZKKbK`TzP-4h;u)iVim9R}$gjJ1<`NO1(M!#T=SPH!jjPdb4AUa%N{9OwXr1p@k_ z4g>`MYx!_?@w7E_eyvhwb&uk3HPD}9zdSQ$Lh%!|-tayyRdblO@hF!BQj|cM!NZEZ3kCtJkWN-7_922r6D^u5ewIBx_S-aA|LVQxSiKi(QLnYU z^&Ty*|F+ftHv4<#;%BcJ_hOw?j`|fL8FhB*dQ*6A`*{MqhV8R8Mrn90ocrB;8}8Fi z>%smx$@b4bu50XK9!>f``&nwWgV911rTXlD?-_OSoZ)JC*tP7z*9N^S+4J(94y#!e z@?^cD{lN1^)VJ)tI`v1VwFXG$t=h%2ZKElUw!G-DlGtU!%=R__PouxA=b&=Ohx>=F z&g&6hNL9YeOk#^qvbCqn_~ZD^eEy)CDJ%Npr<&04DcXx4>=(cA$a#9(FrMQ2`jfhT zz32oCdb!9LceJjCWJS_46)oFi&U~WsmHB*mLZd;=Q8GVp9VdOa%&~^k@?=AHBc$WA zS4x^DqLg04J)DO8&y>T7s$i5FS#qU(WC3$+{gXi(_nM?{s=u(- zVOzZS=6vVa%-SBM3PNE^+pIIBW4s!QnUjUL%~hkzuuFaxC8;p}yd&QrWP?cZLC)L7 zCe5h9gPJ^nHU%C0%vC6EXp$Khr#QESe6ux(&crM;@}M6b3fj=co{-<^76bgz?tW`1KXN!N}4BE|F7geyT>1nyZKy5P&j##JnXrP&s z`jZ)nUuvM3b0_Qg0II7vM|0k#yK4l#x&Fs+STKTBTxAk#H@EU|MrzRF_Lo5aDm|A8G-v zCyoLzrmPf(8x-jSZd>4DqQ3eR)AViC8i!tLRZMw%Yzz%SK_=@}9?v8IC}gpAq&I=t z#G+_vMkcLpdGq3;3FG3T@zdg>7xnCJD@=HT;pbSQC`@R@X|kEcIT@rNGAve?OPP}f zU!34T8^sT_X^MBEu4If9HXghiM|Hn>T7#8bC+cXyWgH0(D6>8yEAfntb9eNI0j3&kdy4J|zz=&3;j3!Eb zSrz2gES=sR4B!y7<<83W0nRdE*Yu*xz)4An%D2k-67SK9=Vz%xsCmm~r1`+RMHJpT z8!HHD8|0KtRS=n;a!F$kkGNZzAu78nsfxNHG{lJT2xJ`7`UQse@zh@6Zy;XLl_pYC z+vfv>Qba!nscr>YM+|}U=F}o+2ljzqlf`m!qz_7p3E^*d7debrdkXIY)qZ z@p5=?=4gZ1_j;I8rg`B*o{!Y=u1$5&dxUw1-gpCq))Vp(TebZ$mVG0|qQ5;F5vXW zj2=@>_c>Q%c)Akx?v6sfW>&B}nb=pQy(4s^(Z1cA!t@A@b0%o2zuumB*PN4m77uf2 zZC~P9Lod^&2H7@&&!@u$r+{*$Yek93YtWoFZ4G=4oP)ci5F<7#`X&yqX?rk=$8^W+3Pu!e|P%F{#J+D!Z4lg0&jczzr{b{#|^uJL4*P&j9$=kihUiwOLfHyBq~ zMFdZ@5|;%s0p{FDo4C9%An))bT+Lwlu@4}|$G#)s*0!-YC?(9x_P-2^4?N{3LMiw@ zPT&hOBnJ@KEScnco8CzM1rn7)Oe*JC$OJz`2{t^RsuBz)4p|JVF#swPLX?*m&FCx0 z8%rFdi#x+{ud&bP$BRD(SD^4=5D_(1P{m*+<=exH&%*=2>5&Hy@(i;1!zDdr%dc4P z-WyLV02H3D9GuSFlUm$M3H`ArFFz@Uyfuzjn3y8#<{UWRq<&j5?Vl?Pc;-Npm_I^_ zKvGExQz*LOB~>LRCC|$fKk;NO7iP^~d%FKd5l4bT09%0so5aw;`Mn?i5~HFYaZKQT z|5zihx3*xWR>*$6d*icMA@5U`wAbohJAF+5o5E90!5Ak9tL9-gM(_*cjatS4VSGFh-y)C9! z^dd$LRhMWN1%S3hAzhROT+n9zFvFz31Np~7;?~jGRM@JZ%fzAF_tYa53_7lMzaU;B z=pq6|*i@HQtS*(9bE+7=7P5{HO)7xXQ*7&ZN{d#>E~6ExnX@@7%4&eK<5Qf`NNuYQ zSnZ_w7JCA!hhF^xZL8F*W44-e-iSg#ES|??1tu0Qr9WT$eBvZ#DgR_Uob`w2cgQNXU!Sb81UOw$PKmq~1-hKIs;%sT;WM-=3;$&rS@v~@dQR+c389h5g8!n{_NF2Sm$zN;JKPAJgx9vNH|Rhs4l6&JbqX^5CmVwv*v zhs&h&yKf3{?RU~>Xl%p^6uZjxXsG^aXct0{(+Y)=g)mq&G)#`-YI_~fA<6HssWKE# zOLoby`8tZH27@DO4k(Dt`02<>Q?R9!lbj3c96XqlWk-ez8B?_5XVW>^$zfnGk85D3 z+~-3*R5M~EW#tv5WM7Cf%p_#ivdsRBY4_v>Yi*7t%tL~W28oKCHZV|q zpIj>sMx)q4avXvHr$9sOZX3zQGt=6}UzN+X``Kh}Vytg&e9~_fe{Q91Gi+p2EthGe zhsOm19xO<$WY3q;Wn#&YAm*5R@vQTRtzUNosD2iIQ7kwiG?oszEh-=mCH6xwKelzY z5vFF&(y*ddfoqa4jP~Gx`+-dk`XR@=wv$7APQ3W1++{xZIA?puLB65H551Myu^~Pm zw#Cxg8_L;SyzzNWiu{IP7xZ?}2gDI$I5WaP{HnS+>5Djt*Y_fPsxxysKd?}WcwTek z=cTYj>c_A8ZlCi970o#kAs}?&w2!ko_5vF(P&~0g3mC$R$dBj%)-%xbJx6`}X}hd? z>xP6$vt>6?qBPQX_0pwc?-R&^_Imr*K8O&ZPBpXF58d{V==6M1Tw13e8>n=zF^bh{ zM-IW&H`)ALVqx%bnuSN5Yn$zL4|DZIPKV0&GdCZfdfE0H z1<%AnNP92osy=+6q*B=ulhs+mZhV7nEe+!W&heazXBik9UKrq5EwjpUmsTHW1Zmph`LGlWgb6nJx>OVM^C!c|n~ZZoWk0_ydzg(F z>}Sls@4JayDquKX8U^Vu*#z;=zMwGxVDqa#&}F|Q_}U*3_(W5jZDq z3lw6m*?fL1#`F7`w(3QvW$1bfTtQKl+Q`#eF8ny7Ws-X^3(JM$SbF5`YT zYt6^B1$Tu=pQ$vqHPBTlP!KTS)~w$7JPBr?uIv#pwt<7yj^9v$RUw9tWcEd~L>HSXlfKYZpc9rnJ;oDN=0HzZvp z^6QRnha+u9zpgxCBw7CGz2NlpUUyf*q)x-IBzG`b;n6cGbN`p^R8M|314*Y#x=Q!| z8x-)LHp@S`6B4Pt;`+sn5-%-(oR{-Uf$)p$6(I26$^Fy2ZHaO=!Hh_uXCY5vjJG%+ z36tv`8A@vB-M)hc#)_+>4$2BV-s1DVN5}9^&<8n#^IW4~Sv=|ZF7Inx%oIQtg>OUg@M>J`AEBLc8@F|&6uQ1x^$ zbJly!gH_4H_T7v~Vz(&|hzU(<#)e92=x@achcVt=f$Dk-({6_GhIX&HqvWF`gD5SC zIvqFfja{2?>Ss`E2@9Usjy-6_kr|e#ER8wcaQVs+Y6dE4l2Ka_Ti6J)6RfPlmDwPs zD}LuCwT+k6YWjBXAI#pakS!mU<-yjt!Yy`d5#TJS8jY+ zU$}-#0ZeT=IBjk;I+StVKBX+`G?b=}uQ)|VTr^}3pSrY#zi9YKS&(~ASX<>?W*Mj+ zFDn`j=#Gc4&dvtgOGqj>ZWuz&s-|oJo6^LJBntX$22OoV3QcT%ckPo%rx$Q@t|#v5 zYO@Ja#B!1W2|p~pD|}b6sTm1$NCLr~u#geUAE2lSBC2BMz0^|VM0>L&p{wEG3L3MI z?NlrS-g83v2g#fL>w*1PnyrPS>Yo}V-5-;}*h(O=_L+3WZVobc}t`8%NSmH3xFiode`2VVHQwZDVn z{^Txrd9(je`d^6L@9e*0xc+2kddVPvvj2hT`nQLE;rP#Zedvgn%Hk#c{2RmHy_8G( zmwffRp}!}#S4F?P)caSq|4DPd%lUl=^{1R-yno(L{Vw76j>Vr6++I+LuRF3o`WOHI z&(86(_PwzFw{!mYH{|!;`JWo~|H}4fC;fMme=qj_6mUxPQ}18h_HRbNqRoDd*9ceq zitsD*AK0_MTmC!x?3MRd)aL$&_fIU^@8