liwen
11 months ago
14 changed files with 779 additions and 0 deletions
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
@ -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; |
||||||
|
} |
||||||
|
} |
@ -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; |
||||||
|
} |
||||||
|
} |
@ -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); |
||||||
|
} |
||||||
|
} |
@ -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); |
||||||
|
} |
@ -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 < #{endTime} |
||||||
|
</if> |
||||||
|
</select> |
||||||
|
</mapper> |
@ -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> { |
||||||
|
|
||||||
|
} |
@ -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> |
@ -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); |
||||||
|
} |
@ -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); |
||||||
|
} |
@ -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); |
||||||
|
} |
||||||
|
} |
@ -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…
Reference in new issue