Commit 7b047300 authored by 韩桐桐's avatar 韩桐桐

feat(ys-应急):演练记录管理

parent 5fec5113
package com.yeejoin.amos.boot.module.ys.api.dto;
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -16,14 +18,14 @@ import java.util.Date;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="YsEmergencyRehearsalDto", description="应急演练记录管理")
public class YsEmergencyRehearsalDto extends BaseDto {
@ApiModel(value = "YsEmergencyRehearsalDto", description = "应急演练记录管理")
public class YsEmergencyRehearsalDto extends BaseDto {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "关联对象id")
private Integer businessId;
private String businessId;
@ApiModelProperty(value = "关联对象类型")
private String type;
......@@ -35,10 +37,11 @@ public class YsEmergencyRehearsalDto extends BaseDto {
private String rehearsalContent;
@ApiModelProperty(value = "演练时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date rehearsalTime;
@ApiModelProperty(value = "演练文件")
private String rehearsalFile;
private JSONArray rehearsalFile;
@ApiModelProperty(value = "创建时间")
private Date createDate;
......
......@@ -27,7 +27,7 @@ public class YsEmergencyRehearsal extends BaseEntity {
* 关联对象id
*/
@TableField("business_id")
private Integer businessId;
private String businessId;
/**
* 关联对象类型
......
package com.yeejoin.amos.boot.module.ys.api.mapper;
import com.yeejoin.amos.boot.module.ys.api.entity.YsEmergencyRehearsal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.ys.api.dto.YsEmergencyRehearsalDto;
import com.yeejoin.amos.boot.module.ys.api.entity.YsEmergencyRehearsal;
import org.springframework.data.repository.query.Param;
/**
* 应急演练记录管理 Mapper 接口
......@@ -11,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface YsEmergencyRehearsalMapper extends BaseMapper<YsEmergencyRehearsal> {
Page<YsEmergencyRehearsalDto> queryForYsEmergencyRehearsalPage(@Param(value = "page") Page<YsEmergencyRehearsalDto> page,
@Param(value = "dto") YsEmergencyRehearsalDto dto);
}
package com.yeejoin.amos.boot.module.ys.api.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.ys.api.dto.YsEmergencyRehearsalDto;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 应急演练记录管理接口类
*
* @author system_generator
* @date 2024-09-24
*/
public interface IYsEmergencyRehearsalService {}
public interface IYsEmergencyRehearsalService {
void export(HttpServletResponse response, List<String> ids);
Boolean saveOrUpdate(YsEmergencyRehearsalDto model, AgencyUserModel userModel);
Boolean deleteBySeq(String sequenceNbr);
YsEmergencyRehearsalDto detailBySeq(String sequenceNbr);
ResponseModel<Object> expertDataImport(MultipartFile file);
Page<YsEmergencyRehearsalDto> queryForYsEmergencyRehearsalPage(Page<YsEmergencyRehearsalDto> page, YsEmergencyRehearsalDto dto);
}
package com.yeejoin.amos.boot.module.ys.api.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 演练记录
*/
@Data
public class RehearsalImportVo {
@ExcelProperty(value = "演练地点")
String rehearsalAddress;
@ExcelProperty(value = "演练概述")
String rehearsalContent;
@ExcelProperty(value = "演练时间")
String rehearsalTime;
@ExcelProperty(value = "关联对象id")
String businessId;
@ExcelProperty(value = "关联对象类型")
String type;
}
package com.yeejoin.amos.boot.module.ys.api.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* 演练记录
*/
@Data
public class RehearsalVo {
@ExcelProperty(value = "演练地点", index = 0)
String rehearsalAddress;
@ExcelProperty(value = "演练时间", index = 1)
String rehearsalTime;
@ExcelProperty(value = "关联对象id", index = 2)
String businessId;
@ExcelProperty(value = "关联对象类型", index = 3)
String type;
}
......@@ -2,4 +2,20 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.ys.api.mapper.YsEmergencyRehearsalMapper">
<select id="queryForYsEmergencyRehearsalPage" resultType="com.yeejoin.amos.boot.module.ys.api.dto.YsEmergencyRehearsalDto">
select
*
FROM tzs_ys_emergency_rehearsal tyer
<where>
tyer.is_delete = 0
<if test="dto != null ">
<if test="dto.rehearsalAddress != null and dto.rehearsalAddress != ''">
AND tyer.rehearsal_address LIKE CONCAT('%', #{dto.rehearsalAddress}, '%')
</if>
</if>
</where>
ORDER BY
tyer.create_date DESC
</select>
</mapper>
......@@ -3,21 +3,26 @@ package com.yeejoin.amos.boot.module.ys.biz.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.ys.api.dto.YsEmergencyRehearsalDto;
import com.yeejoin.amos.boot.module.ys.api.service.IYsEmergencyRehearsalService;
import com.yeejoin.amos.boot.module.ys.biz.service.impl.YsEmergencyRehearsalServiceImpl;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
*
* @author system_generator
* @date 2024-09-24
*/
......@@ -27,88 +32,120 @@ import java.util.List;
public class YsEmergencyRehearsalController extends BaseController {
@Autowired
IYsEmergencyRehearsalService iYsEmergencyRehearsalService;
@Autowired
YsEmergencyRehearsalServiceImpl ysEmergencyRehearsalServiceImpl;
/**
* 新增
* 新增或者更新
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<YsEmergencyRehearsalDto> save(@RequestBody YsEmergencyRehearsalDto model) {
model = ysEmergencyRehearsalServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
@PostMapping(value = "/saveOrUpdate")
@ApiOperation(httpMethod = "POST", value = "新增或者更新", notes = "新增或者更新")
public ResponseModel<Boolean> saveOrUpdate(@RequestBody YsEmergencyRehearsalDto model) {
AgencyUserModel userModel = getSelectedOrgInfo().getUserModel();
return ResponseHelper.buildResponse(iYsEmergencyRehearsalService.saveOrUpdate(model, userModel));
}
/**
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<YsEmergencyRehearsalDto> updateBySequenceNbrYsEmergencyRehearsal(@RequestBody YsEmergencyRehearsalDto model,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.updateWithModel(model));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<YsEmergencyRehearsalDto> updateBySequenceNbrYsEmergencyRehearsal(@RequestBody YsEmergencyRehearsalDto model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.updateWithModel(model));
}
/**
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@DeleteMapping(value = "/deleteBySeq")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.removeById(sequenceNbr));
public ResponseModel<Boolean> deleteBySeq(@RequestParam(value = "sequenceNbr") String sequenceNbr) {
return ResponseHelper.buildResponse(iYsEmergencyRehearsalService.deleteBySeq(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<YsEmergencyRehearsalDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.queryBySeq(sequenceNbr));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/detailBySeq")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<YsEmergencyRehearsalDto> detailBySeq(@RequestParam(value = "sequenceNbr") String sequenceNbr) {
return ResponseHelper.buildResponse(iYsEmergencyRehearsalService.detailBySeq(sequenceNbr));
}
/**
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询")
public ResponseModel<Page<YsEmergencyRehearsalDto>> queryForPage(@RequestParam(value = "current") int current,@RequestParam
(value = "size") int size) {
Page<YsEmergencyRehearsalDto> page = new Page<YsEmergencyRehearsalDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.queryForYsEmergencyRehearsalPage(page));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET", value = "分页查询", notes = "分页查询")
public ResponseModel<Page<YsEmergencyRehearsalDto>> queryForPage(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
YsEmergencyRehearsalDto dto) {
Page<YsEmergencyRehearsalDto> page = new Page<YsEmergencyRehearsalDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(iYsEmergencyRehearsalService.queryForYsEmergencyRehearsalPage(page, dto));
}
/**
* 列表全部数据查询
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<YsEmergencyRehearsalDto>> selectForList() {
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.queryForYsEmergencyRehearsalList());
}
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<YsEmergencyRehearsalDto>> selectForList() {
return ResponseHelper.buildResponse(ysEmergencyRehearsalServiceImpl.queryForYsEmergencyRehearsalList());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/import")
@ApiOperation(httpMethod = "POST", value = "专家库列表数据导入", notes = "专家库列表数据导入")
public ResponseModel<Object> expertDataImport(@RequestBody MultipartFile file) {
// 校验文件是否为空
if (file.isEmpty()) {
return ResponseHelper.buildResponse("文件不能为空");
}
// 校验文件类型为 Excel
String contentType = file.getContentType();
String fileExtension = FilenameUtils.getExtension(file.getOriginalFilename());
// 校验 Excel 文件的 MIME type 和扩展名
if (!("application/vnd.ms-excel".equals(contentType) ||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(contentType)) ||
!("xls".equalsIgnoreCase(fileExtension) || "xlsx".equalsIgnoreCase(fileExtension))) {
return ResponseHelper.buildResponse("文件类型必须是 Excel 文件");
}
return ysEmergencyRehearsalServiceImpl.expertDataImport(file);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/export")
@ApiOperation(httpMethod = "GET", value = "列表数据导出", notes = "列表数据导出")
public void expertDataExport(HttpServletResponse response, String ids) {
Assert.hasText(ids,"未选择导出数据");
ysEmergencyRehearsalServiceImpl.export(response, Arrays.asList(ids.split(",")));
}
}
package com.yeejoin.amos.boot.module.ys.biz.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.fastjson.JSON;
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.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.amos.boot.module.ys.api.dto.YsEmergencyRehearsalDto;
import com.yeejoin.amos.boot.module.ys.api.entity.YsEmergencyRehearsal;
import com.yeejoin.amos.boot.module.ys.api.mapper.YsEmergencyRehearsalMapper;
import com.yeejoin.amos.boot.module.ys.api.service.IYsEmergencyRehearsalService;
import com.yeejoin.amos.boot.module.ys.api.vo.RehearsalImportVo;
import com.yeejoin.amos.boot.module.ys.api.vo.RehearsalVo;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.springframework.beans.BeanUtils;
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 org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
......@@ -18,6 +44,10 @@ import java.util.List;
*/
@Service
public class YsEmergencyRehearsalServiceImpl extends BaseService<YsEmergencyRehearsalDto,YsEmergencyRehearsal,YsEmergencyRehearsalMapper> implements IYsEmergencyRehearsalService {
@Autowired
YsEmergencyRehearsalMapper ysEmergencyRehearsalMapper;
/**
* 分页查询
*/
......@@ -31,4 +61,98 @@ public class YsEmergencyRehearsalServiceImpl extends BaseService<YsEmergencyRehe
public List<YsEmergencyRehearsalDto> queryForYsEmergencyRehearsalList() {
return this.queryForList("" , false);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveOrUpdate(YsEmergencyRehearsalDto dto, AgencyUserModel userModel) {
YsEmergencyRehearsal emergencyRehearsal = new YsEmergencyRehearsal();
if (ValidationUtil.isEmpty(dto.getSequenceNbr())) {//新增
dto.setCreateDate(new Date());
dto.setCreateUserId(userModel.getUserId());
dto.setCreateUserName(userModel.getUserName());
}
emergencyRehearsal.setRehearsalFile(JSON.toJSONString(dto.getRehearsalFile()));
BeanUtils.copyProperties(dto, emergencyRehearsal);
return this.saveOrUpdate(emergencyRehearsal);
}
@Override
public Boolean deleteBySeq(String sequenceNbr) {
LambdaUpdateWrapper<YsEmergencyRehearsal> lambda = new UpdateWrapper<YsEmergencyRehearsal>().lambda();
lambda.eq(YsEmergencyRehearsal::getSequenceNbr,sequenceNbr);
lambda.set(YsEmergencyRehearsal::getIsDelete,Boolean.TRUE);
return this.update(lambda);
}
@Override
public YsEmergencyRehearsalDto detailBySeq(String sequenceNbr) {
YsEmergencyRehearsalDto emergencyRehearsalDto = new YsEmergencyRehearsalDto();
YsEmergencyRehearsal emergencyRehearsal = this.baseMapper.selectById(sequenceNbr);
BeanUtils.copyProperties(emergencyRehearsal, emergencyRehearsalDto);
emergencyRehearsalDto.setRehearsalFile(JSON.parseArray(emergencyRehearsal.getRehearsalFile()));
return emergencyRehearsalDto;
}
@Override
public Page<YsEmergencyRehearsalDto> queryForYsEmergencyRehearsalPage(Page<YsEmergencyRehearsalDto> page, YsEmergencyRehearsalDto dto) {
return ysEmergencyRehearsalMapper.queryForYsEmergencyRehearsalPage(page, dto);
}
/**
* 列表数据导出
*
* @param response 响应
* @param ids 数据id
*/
@Override
public void export(HttpServletResponse response, List<String> ids) {
LambdaQueryWrapper<YsEmergencyRehearsal> lambda = new QueryWrapper<YsEmergencyRehearsal>().lambda();
lambda.in(YsEmergencyRehearsal::getSequenceNbr, ids);
List<YsEmergencyRehearsal> experts = this.baseMapper.selectList(lambda);
List<RehearsalVo> exportData = JSON.parseArray(JSON.toJSONString(experts), RehearsalVo.class);
ExcelUtil.createTemplate(response, "演练记录列表数据", "演练记录列表", exportData, RehearsalVo.class, null, false);
}
/**
* 列表数据导入
*
* @param file excel 文件
* @return 导入结果
*/
@Transactional(rollbackFor = Exception.class)
@Override
public ResponseModel<Object> expertDataImport(MultipartFile file) {
try {
InputStream inputStream = file.getInputStream();
ExcelReader excelReader = EasyExcel.read(inputStream).build();
List<ReadSheet> sheetList = excelReader.excelExecutor().sheetList();
ReadSheet sheet = sheetList.get(0);
if (ValidationUtil.isEmpty(sheet)) {
throw new BadRequest("Excel导入模板有误,请重写下载导入!");
}
ArrayList<YsEmergencyRehearsal> dataList = new ArrayList<>();
EasyExcel.read(file.getInputStream(), RehearsalImportVo.class, new AnalysisEventListener<RehearsalImportVo>() {
@Override
public void invoke(RehearsalImportVo data, AnalysisContext context) {
dataList.add(JSON.parseObject(JSON.toJSONString(data), YsEmergencyRehearsal.class));
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
}).headRowNumber(1).sheet().doRead();
excelReader.finish();
// 保存数据
this.saveOrUpdateBatch(dataList);
return ResponseHelper.buildResponse("success");
} catch (Exception e) {
throw new BadRequest(e.getMessage());
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment