Browse Source

add: 会议管理模块

zhongwei
liwen 11 months ago
parent
commit
652f5ea14f
  1. 59
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/ConferenceExportDTO.java
  2. 60
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/ConferencePlanEntity.java
  3. 55
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/ConferenceRecordEntity.java
  4. 31
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/enums/ConferenceMethodEnum.java
  5. 31
      hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/enums/ConferenceStatusEnum.java
  6. 133
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java
  7. 27
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferencePlanMapper.java
  8. 23
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferencePlanMapper.xml
  9. 16
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferenceRecordMapper.java
  10. 4
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferenceRecordMapper.xml
  11. 40
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/IConferencePlanService.java
  12. 27
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/IConferenceRecordService.java
  13. 160
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferencePlanServiceImpl.java
  14. 113
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java

59
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/ConferenceExportDTO.java

@ -0,0 +1,59 @@
package com.hnac.hzims.safeproduct.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author liwen
* @date 2023-12-27
*/
@Data
@ExcelIgnoreUnannotated
@ApiModel(value = "会议数据导出DTO类")
public class ConferenceExportDTO {
@ApiModelProperty("单位")
@ExcelProperty(value = "单位", index = 0)
private String unit;
@ApiModelProperty("会议计划开始时间")
@ExcelProperty(value = "会议计划开始时间", index = 1)
private Date scheduledStartTime;
@ApiModelProperty("会议计划结束时间")
@ExcelProperty(value = "会议计划结束时间", index = 2)
private Date scheduledEndTime;
@ApiModelProperty("会议主题")
@ExcelProperty(value = "会议主题", index = 3)
private String theme;
@ApiModelProperty("会议地点")
@ExcelProperty(value = "会议地点", index = 4)
private String location;
@ApiModelProperty("会议方式")
@ExcelProperty(value = "会议方式", index = 5)
private String conferenceMethod;
@ApiModelProperty("主持人")
@ExcelProperty(value = "主持人", index = 6)
private String host;
@ApiModelProperty("会议实际开始时间")
@ExcelProperty(value = "会议实际开始时间", index = 7)
private Date actualStartTime;
@ApiModelProperty("会议实际结束时间")
@ExcelProperty(value = "会议实际结束时间", index = 8)
private Date actualEndTime;
@ApiModelProperty("会议状态")
@ExcelProperty(value = "会议状态", index = 9)
private String conferenceStatus;
}

60
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/ConferencePlanEntity.java

@ -0,0 +1,60 @@
package com.hnac.hzims.safeproduct.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* @author liwen
* @date 2023-12-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("hzims_conference_plan")
@ApiModel(value = "会议计划实体类")
public class ConferencePlanEntity extends BaseEntity {
@NotNull
@Size(max = 50, message = "单位字段长度不能超过50")
@ApiModelProperty("单位")
private String unit;
@NotNull
@Size(max = 50, message = "会议主题字段长度不能超过50")
@ApiModelProperty("会议主题")
private String theme;
@NotNull
@ApiModelProperty("会议计划开始时间")
private Date scheduledStartTime;
@NotNull
@ApiModelProperty("会议计划结束时间")
private Date scheduledEndTime;
@NotNull
@Size(max = 255, message = "演练地点字段长度不能超过255")
@ApiModelProperty("会议地点")
private String location;
@NotNull
@Size(max = 10, message = "总指挥字段长度不能超过10")
@ApiModelProperty("主持人")
private String host;
@Size(max = 20, message = "会议方式字段长度不能超过20")
@ApiModelProperty("会议方式")
private String conferenceMethod;
@NotNull
@Size(max = 20, message = "会议状态字段长度不能超过20")
@ApiModelProperty("会议状态")
private String conferenceStatus;
}

55
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/entity/ConferenceRecordEntity.java

@ -0,0 +1,55 @@
package com.hnac.hzims.safeproduct.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* @author liwen
* @date 2023-12-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("hzims_conference_record")
@ApiModel(value = "会议记录实体类")
public class ConferenceRecordEntity extends BaseEntity {
@ApiModelProperty("会议计划id")
private Long conferencePlanId;
@Size(max = 50, message = "编码字段长度不能超过50")
@ApiModelProperty("编码")
private String code;
@Size(max = 5000, message = "参会人员字段长度超出限制范围")
@ApiModelProperty("参会人员")
private String peopleName;
@ApiModelProperty("会议实际开始时间")
private Date actualStartTime;
@ApiModelProperty("会议实际结束时间")
private Date actualEndTime;
@Size(max = 250, message = "记录人字段长度不能超过250")
@ApiModelProperty("记录人")
private String recorder;
@Size(max = 250, message = "会议内容字段长度不能超过250")
@ApiModelProperty("会议内容")
private String content;
@Size(max = 1000, message = "会议图片字段长度不能超过1000")
@ApiModelProperty("会议图片")
private String imgPath;
@Size(max = 1000, message = "会议附件字段长度不能超过1000")
@ApiModelProperty("会议附件")
private String filePath;
}

31
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/enums/ConferenceMethodEnum.java

@ -0,0 +1,31 @@
package com.hnac.hzims.safeproduct.enums;
/**
* 会议方式枚举类
*
* @author liwen
* @date 2023-12-27
*/
public enum ConferenceMethodEnum {
ONLINE("ONLINE", "线上"),
OFFLINE("OFFLINE", "线下"),
MIXED("MIXED", "线上+线下");
private final String value;
private final String desc;
ConferenceMethodEnum(String value, String desc) {
this.value = value;
this.desc = desc;
}
public String getValue() {
return value;
}
public String getDesc() {
return desc;
}
}

31
hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/enums/ConferenceStatusEnum.java

@ -0,0 +1,31 @@
package com.hnac.hzims.safeproduct.enums;
/**
* 会议状态枚举类
*
* @author liwen
* @date 2023-12-27
*/
public enum ConferenceStatusEnum {
WAITING("WAITING", "未开始"),
UNFINISHED("UNFINISHED", "未完成"),
FINISHED("FINISHED", "已完成");
private final String value;
private final String desc;
ConferenceStatusEnum(String value, String desc) {
this.value = value;
this.desc = desc;
}
public String getValue() {
return value;
}
public String getDesc() {
return desc;
}
}

133
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java

@ -0,0 +1,133 @@
package com.hnac.hzims.safeproduct.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.hnac.hzims.common.utils.Condition;
import com.hnac.hzims.safeproduct.entity.ConferencePlanEntity;
import com.hnac.hzims.safeproduct.entity.ConferenceRecordEntity;
import com.hnac.hzims.safeproduct.service.IConferencePlanService;
import com.hnac.hzims.safeproduct.service.IConferenceRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.Map;
/**
* 会议管理接口类
*
* @author liwen
* @date 2023-12-27
*/
@RestController
@AllArgsConstructor
@RequestMapping("/conference")
@Api(value = "会议管理", tags = "会议管理接口")
public class ConferenceController extends BladeController {
private final IConferencePlanService conferencePlanService;
private final IConferenceRecordService conferenceRecordService;
@PostMapping("/savePlan")
@ApiOperation(value = "新增会议计划")
@ApiOperationSupport(order = 1)
public R savePlan(@Valid @RequestBody ConferencePlanEntity conferencePlan) {
return R.status(conferencePlanService.save(conferencePlan));
}
@PostMapping("/updatePlan")
@ApiOperation(value = "修改会议计划")
@ApiOperationSupport(order = 2)
public R updatePlan(@Valid @RequestBody ConferencePlanEntity conferencePlan) {
return R.status(conferencePlanService.updateById(conferencePlan));
}
@PostMapping("/removePlan")
@ApiOperation(value = "删除会议计划")
@ApiOperationSupport(order = 3)
public R removePlan(@RequestParam Long id) {
return R.status(conferencePlanService.removePlan(id));
}
@GetMapping("/planDetail")
@ApiOperation(value = "会议计划详情")
@ApiOperationSupport(order = 4)
public R<ConferencePlanEntity> planDetail(@RequestParam Long id) {
return R.data(conferencePlanService.getById(id));
}
@GetMapping("/planPage")
@ApiImplicitParams({
@ApiImplicitParam(name = "unit", value = "单位", dataType = "query", paramType = "string"),
@ApiImplicitParam(name = "scheduledStartTime", value = "计划开始时间", dataType = "query", paramType = "string"),
@ApiImplicitParam(name = "scheduledEndTime", value = "计划结束时间", dataType = "query", paramType = "string")
})
@ApiOperation(value = "会议计划分页")
@ApiOperationSupport(order = 5)
public R<IPage<ConferencePlanEntity>> planPage(@ApiIgnore @RequestParam Map<String, Object> param, Query query) {
IPage<ConferencePlanEntity> page = conferencePlanService.planPage(param, query);
return R.data(page);
}
@PostMapping("/saveRecord")
@ApiOperation(value = "新增会议记录")
@ApiOperationSupport(order = 6)
public R saveRecord(@Valid @RequestBody ConferenceRecordEntity conferenceRecord) {
return R.status(conferenceRecordService.saveRecord(conferenceRecord));
}
@PostMapping("/updateRecord")
@ApiOperation(value = "修改会议记录")
@ApiOperationSupport(order = 7)
public R updateRecord(@Valid @RequestBody ConferenceRecordEntity conferenceRecord) {
return R.status(conferenceRecordService.updateById(conferenceRecord));
}
@PostMapping("/removeRecord")
@ApiOperation(value = "删除会议记录")
@ApiOperationSupport(order = 8)
public R removeRecord(@RequestParam Long id) {
return R.status(conferenceRecordService.removeById(id));
}
@GetMapping("/recordDetail")
@ApiOperation(value = "会议记录详情")
@ApiOperationSupport(order = 9)
public R<ConferenceRecordEntity> recordDetail(@RequestParam Long id) {
return R.data(conferenceRecordService.getById(id));
}
@GetMapping("/recordPage")
@ApiImplicitParams({
@ApiImplicitParam(name = "conferencePlanId", value = "会议计划id", dataType = "query", paramType = "string")
})
@ApiOperation(value = "会议记录分页")
@ApiOperationSupport(order = 10)
public R<IPage<ConferenceRecordEntity>> recordPage(@ApiIgnore @RequestParam Map<String, Object> param, Query query) {
IPage<ConferenceRecordEntity> page = conferenceRecordService.page(Condition.getPage(query),
Condition.getQueryWrapper(param, ConferenceRecordEntity.class));
return R.data(page);
}
@GetMapping("/exportConferenceData")
@ApiImplicitParams({
@ApiImplicitParam(name = "unit", value = "单位", dataType = "query", paramType = "string"),
@ApiImplicitParam(name = "scheduledStartTime", value = "计划开始时间", dataType = "query", paramType = "string"),
@ApiImplicitParam(name = "scheduledEndTime", value = "计划结束时间", dataType = "query", paramType = "string")
})
@ApiOperation(value = "会议数据导出")
@ApiOperationSupport(order = 11)
public void exportConferenceData(@ApiIgnore @RequestParam Map<String, Object> param, HttpServletResponse response) {
conferencePlanService.exportConferenceData(param, response);
}
}

27
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferencePlanMapper.java

@ -0,0 +1,27 @@
package com.hnac.hzims.safeproduct.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.safeproduct.dto.ConferenceExportDTO;
import com.hnac.hzims.safeproduct.entity.ConferencePlanEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 会议计划Mapper类
*
* @author liwen
* @date 2023-12-27
*/
@Mapper
public interface ConferencePlanMapper extends BaseMapper<ConferencePlanEntity> {
/**
* 根据单位和计划时间查询会议记录
* @param unit 单位
* @param startTime 计划开始时间
* @param endTime 计划结束时间
* @return 会议记录列表
*/
List<ConferenceExportDTO> getConferenceByUnitAndDate(String unit, String startTime, String endTime);
}

23
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferencePlanMapper.xml

@ -0,0 +1,23 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.safeproduct.mapper.ConferencePlanMapper">
<select id="getConferenceByUnitAndDate" resultType="com.hnac.hzims.safeproduct.dto.ConferenceExportDTO">
SELECT
t1.unit, t1.scheduled_start_time, t1.scheduled_end_time, t1.theme, t1.location, t1.conference_method,
t1.host, t2.actual_start_time, t2.actual_end_time, t1.conference_status
FROM
hzims_conference_plan t1
LEFT JOIN hzims_conference_record t2 ON t1.id = t2.conference_plan_id
WHERE
t1.is_deleted = 0
<if test="unit != null and unit != ''">
AND t1.unit = #{unit}
</if>
<if test="startTime != null and startTime != ''">
AND t1.scheduled_start_time >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND t1.scheduled_end_time &lt; #{endTime}
</if>
</select>
</mapper>

16
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferenceRecordMapper.java

@ -0,0 +1,16 @@
package com.hnac.hzims.safeproduct.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnac.hzims.safeproduct.entity.ConferenceRecordEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 会议记录Mapper类
*
* @author liwen
* @date 2023-12-27
*/
@Mapper
public interface ConferenceRecordMapper extends BaseMapper<ConferenceRecordEntity> {
}

4
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/ConferenceRecordMapper.xml

@ -0,0 +1,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hnac.hzims.safeproduct.mapper.ConferenceRecordMapper">
</mapper>

40
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/IConferencePlanService.java

@ -0,0 +1,40 @@
package com.hnac.hzims.safeproduct.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.safeproduct.entity.ConferencePlanEntity;
import org.springblade.core.mp.support.Query;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 会议计划服务类
*
* @author liwen
* @date 2023-12-27
*/
public interface IConferencePlanService extends IService<ConferencePlanEntity> {
/**
* 删除会议计划
* @param id 会议计划id
* @return true-成功false-失败
*/
boolean removePlan(Long id);
/**
* 会议计划分页
* @param param 入参
* @param query 分页类
* @return 会议计划数据
*/
IPage<ConferencePlanEntity> planPage(Map<String, Object> param, Query query);
/**
* 会议数据导出
* @param param 入参
* @param response 响应类
*/
void exportConferenceData(Map<String, Object> param, HttpServletResponse response);
}

27
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/IConferenceRecordService.java

@ -0,0 +1,27 @@
package com.hnac.hzims.safeproduct.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.safeproduct.entity.ConferenceRecordEntity;
/**
* 会议记录服务类
*
* @author liwen
* @date 2023-12-27
*/
public interface IConferenceRecordService extends IService<ConferenceRecordEntity> {
/**
* 删除关联会议记录
* @param conferencePlanId 会议计划id
* @return true-成功false-失败
*/
boolean removeReferenceRecord(Long conferencePlanId);
/**
* 新增会议记录
* @param conferenceRecord 会议记录实体类
* @return true-成功false-失败
*/
boolean saveRecord(ConferenceRecordEntity conferenceRecord);
}

160
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferencePlanServiceImpl.java

@ -0,0 +1,160 @@
package com.hnac.hzims.safeproduct.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.converters.longconverter.LongStringConverter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnac.hzims.common.utils.Condition;
import com.hnac.hzims.safeproduct.dto.ConferenceExportDTO;
import com.hnac.hzims.safeproduct.dto.RehearsalExportDTO;
import com.hnac.hzims.safeproduct.entity.ConferencePlanEntity;
import com.hnac.hzims.safeproduct.enums.ConferenceMethodEnum;
import com.hnac.hzims.safeproduct.enums.ConferenceStatusEnum;
import com.hnac.hzims.safeproduct.enums.RehearsalStatusEnum;
import com.hnac.hzims.safeproduct.mapper.ConferencePlanMapper;
import com.hnac.hzims.safeproduct.service.IConferencePlanService;
import com.hnac.hzims.safeproduct.service.IConferenceRecordService;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* 会议计划服务实现类
*
* @author liwen
* @date 2023-12-27
*/
@Service
public class ConferencePlanServiceImpl extends ServiceImpl<ConferencePlanMapper, ConferencePlanEntity> implements IConferencePlanService {
@Autowired
IConferenceRecordService conferenceRecordService;
/**
* 删除会议计划
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removePlan(Long id) {
boolean remove = this.removeById(id);
// 若成功删除会议计划,删除关联的会议记录
if (remove) {
return conferenceRecordService.removeReferenceRecord(id);
}
return false;
}
/**
* 会议计划分页
*/
@Override
public IPage<ConferencePlanEntity> planPage(Map<String, Object> param, Query query) {
QueryWrapper<ConferencePlanEntity> queryWrapper = new QueryWrapper<>();
String unit = String.valueOf(param.get("unit"));
String startTime = String.valueOf(param.get("startTime"));
String endTime = String.valueOf((param.get("endTime")));
if (!unit.equals("null") && !unit.equals("")) {
queryWrapper.lambda().eq(ConferencePlanEntity::getUnit, unit);
}
if (!startTime.equals("null") && !startTime.equals("")) {
queryWrapper.lambda().ge(ConferencePlanEntity::getScheduledStartTime, startTime);
}
if (!endTime.equals("null") && !endTime.equals("")) {
queryWrapper.lambda().le(ConferencePlanEntity::getScheduledEndTime, endTime);
}
return this.page(Condition.getPage(query), queryWrapper);
}
/**
* 会议数据导出
*/
@Override
public void exportConferenceData(Map<String, Object> param, HttpServletResponse response) {
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
String unit = String.valueOf(param.get("unit"));
String startTime = String.valueOf(param.get("scheduledStartTime"));
String endTime = String.valueOf(param.get("scheduledEndTime"));
List<ConferenceExportDTO> conferenceList = getConferenceByUnitAndDate(unit, startTime, endTime);
// 处理会议数据信息
conferenceList.forEach(conference -> {
// 会议方式
String method;
if (conference.getConferenceMethod().equals(ConferenceMethodEnum.ONLINE.getValue())) {
method = ConferenceMethodEnum.ONLINE.getDesc();
} else if (conference.getConferenceMethod().equals(ConferenceMethodEnum.OFFLINE.getValue())) {
method = ConferenceMethodEnum.OFFLINE.getDesc();
} else {
method = ConferenceMethodEnum.MIXED.getDesc();
}
conference.setConferenceMethod(method);
// 会议状态
String status;
if (conference.getConferenceStatus().equals(ConferenceStatusEnum.WAITING.getValue())) {
status = ConferenceStatusEnum.WAITING.getDesc();
} else if (conference.getConferenceStatus().equals(ConferenceStatusEnum.UNFINISHED.getValue())) {
status = ConferenceStatusEnum.UNFINISHED.getDesc();
} else {
status = ConferenceStatusEnum.FINISHED.getDesc();
}
conference.setConferenceStatus(status);
});
// 设置响应头
// URLEncoder.encode防止中文乱码
String fileName = URLEncoder.encode("会议数据表", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
// ExcelWriter初始化
ExcelWriter excelWriter = EasyExcel
.write(response.getOutputStream())
.autoCloseStream(Boolean.TRUE)
.registerConverter(new LongStringConverter())
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
.build();
WriteSheet writeSheet = EasyExcel.writerSheet(1, "会议数据表").head(ConferenceExportDTO.class)
.build();
excelWriter.write(conferenceList, writeSheet);
excelWriter.finish();
} catch (Exception e) {
// 重置response
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
throw new ServiceException("会议数据导出异常: " + e.getMessage());
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
log.error("会议导出响应头输出流关闭异常: " + e.getMessage());
}
}
}
}
/**
* 根据单位和计划时间查询会议记录
* @param unit 单位
* @param startTime 计划开始时间
* @param endTime 计划结束时间
* @return 会议记录列表
*/
public List<ConferenceExportDTO> getConferenceByUnitAndDate(String unit, String startTime, String endTime) {
return baseMapper.getConferenceByUnitAndDate(unit, startTime, endTime);
}
}

113
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java

@ -0,0 +1,113 @@
package com.hnac.hzims.safeproduct.service.impl;
import cn.hutool.core.date.DatePattern;
import com.alibaba.excel.util.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnac.hzims.common.logs.utils.StringUtils;
import com.hnac.hzims.safeproduct.constants.SafeProductConstant;
import com.hnac.hzims.safeproduct.entity.ConferencePlanEntity;
import com.hnac.hzims.safeproduct.entity.ConferenceRecordEntity;
import com.hnac.hzims.safeproduct.enums.RehearsalStatusEnum;
import com.hnac.hzims.safeproduct.mapper.ConferencePlanMapper;
import com.hnac.hzims.safeproduct.mapper.ConferenceRecordMapper;
import com.hnac.hzims.safeproduct.service.IConferenceRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 会议记录服务实现类
*
* @author liwen
* @date 2023-12-27
*/
@Service
public class ConferenceRecordServiceImpl extends ServiceImpl<ConferenceRecordMapper, ConferenceRecordEntity> implements IConferenceRecordService {
@Resource
ConferencePlanMapper conferencePlanMapper;
/**
* 删除关联会议记录
*/
@Override
public boolean removeReferenceRecord(Long conferencePlanId) {
// 查询关联会议记录
QueryWrapper<ConferenceRecordEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ConferenceRecordEntity::getConferencePlanId, conferencePlanId);
List<ConferenceRecordEntity> rehearsalRecordList = this.list(queryWrapper);
// 若无关联会议记录,直接返回true
if (CollectionUtils.isEmpty(rehearsalRecordList)) {
return true;
}
// 删除关联会议记录
List<Long> ids = rehearsalRecordList.stream().map(ConferenceRecordEntity::getId).collect(Collectors.toList());
return this.removeByIds(ids);
}
/**
* 新增会议记录
*/
@Override
public boolean saveRecord(ConferenceRecordEntity conferenceRecord) {
// 获取当月时间(yyyymm)
String currentMonth = DatePattern.SIMPLE_MONTH_FORMAT.format(new Date());
// 查询是否存在同月编号
String lastCode = getLastCode(currentMonth);
// 若不存在,新增编号
String code;
if (StringUtils.isNull(lastCode)) {
code = "HYJL" + currentMonth + "001";
} else { // 若存在,编号递增
String oldNum = lastCode.substring(lastCode.length() - 3);
int value = Integer.parseInt(oldNum) + 1;
// 根据数位拼接编号
if (value < 10) {
code = "HYJL" + currentMonth + "00" + value;
} else if (value < 100) {
code = "HYJL" + currentMonth + "0" + value;
} else {
code = "HYJL" + currentMonth + value;
}
}
conferenceRecord.setCode(code);
boolean save = this.save(conferenceRecord);
// 若会议记录新增成功,修改会议计划状态为已完成
if (save) {
ConferencePlanEntity conferencePlanEntity = conferencePlanMapper.selectById(conferenceRecord.getConferencePlanId());
conferencePlanEntity.setConferenceStatus(RehearsalStatusEnum.FINISHED.getValue());
return conferencePlanMapper.updateById(conferencePlanEntity) == SafeProductConstant.SUCCESS;
}
return false;
}
/**
* 查询是否存在同月编号
* @param currentMonth 当月
* @return 存在则返回上一编号否则返回null
*/
private String getLastCode(String currentMonth) {
String month = currentMonth.substring(currentMonth.length() - 2);
List<ConferenceRecordEntity> list = getConferenceByMonth(month);
if (CollectionUtils.isEmpty(list)) {
return null;
}
return list.get(0).getCode();
}
/**
* 查询当月会议记录
* @param month 当月
* @return 当月会议数据表
*/
public List<ConferenceRecordEntity> getConferenceByMonth(String month) {
QueryWrapper<ConferenceRecordEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().like(ConferenceRecordEntity::getCreateTime, month)
.orderByDesc(ConferenceRecordEntity::getCode);
return this.list(queryWrapper);
}
}
Loading…
Cancel
Save