From 0a4ca04505d14fdb722f533303b5c7d661b68d10 Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Thu, 23 Feb 2023 18:02:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6=E8=AE=B0=E5=BD=95=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/enums/ApmRecordStatusEnum.java | 41 +++++++++++ .../controller/ApmRecordController.java | 62 ++++++++++++++-- .../business/mapper/ApmRecordMapper.java | 22 +++--- .../business/mapper/ApmRecordMapper.xml | 67 +++++++++++++++-- .../business/service/IApmRecordService.java | 8 +- .../service/impl/ApmRecordServiceImpl.java | 52 +++++++++++-- .../modules/business/timer/QuartzConfig.java | 4 +- .../modules/business/vo/ApmRecordExcelVO.java | 73 +++++++++++++++++++ src/main/resources/log/logback-dev.xml | 16 ++-- 9 files changed, 301 insertions(+), 44 deletions(-) create mode 100644 src/main/java/org/springblade/common/enums/ApmRecordStatusEnum.java create mode 100644 src/main/java/org/springblade/modules/business/vo/ApmRecordExcelVO.java diff --git a/src/main/java/org/springblade/common/enums/ApmRecordStatusEnum.java b/src/main/java/org/springblade/common/enums/ApmRecordStatusEnum.java new file mode 100644 index 0000000..d14528c --- /dev/null +++ b/src/main/java/org/springblade/common/enums/ApmRecordStatusEnum.java @@ -0,0 +1,41 @@ +package org.springblade.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 错误信息枚举类 + * + * @author Chill + */ +@Getter +@AllArgsConstructor +public enum ApmRecordStatusEnum { + + CANCEL(1, "已取消"), + UNREGISTER(2, "未报到"), + REGISTER(3, "已报到"), + ; + + final Integer name; + + final String value; + + public static Integer getName(String val) { + for (ApmRecordStatusEnum value : ApmRecordStatusEnum.values()) { + if (value.getValue().equals(val)) { + return value.getName(); + } + } + return -1; + } + + public static String getValue(Integer name) { + for (ApmRecordStatusEnum value : ApmRecordStatusEnum.values()) { + if (value.getName().equals(name)) { + return value.getValue(); + } + } + return ""; + } +} diff --git a/src/main/java/org/springblade/modules/business/controller/ApmRecordController.java b/src/main/java/org/springblade/modules/business/controller/ApmRecordController.java index e1fecfc..b509d43 100644 --- a/src/main/java/org/springblade/modules/business/controller/ApmRecordController.java +++ b/src/main/java/org/springblade/modules/business/controller/ApmRecordController.java @@ -1,36 +1,38 @@ package org.springblade.modules.business.controller; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import io.swagger.annotations.*; import lombok.AllArgsConstructor; -import org.springblade.common.cache.DictBizCache; +import org.springblade.common.cache.DeptCache; import org.springblade.common.constant.BusinessConstant; import org.springblade.common.constant.CommonConstant; +import org.springblade.common.enums.ApmRecordStatusEnum; import org.springblade.common.enums.ErrorMsgEnum; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tenant.annotation.TenantDS; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Base64Util; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.entity.ApmRecord; import org.springblade.modules.business.service.IApmRecordService; import org.springblade.modules.business.vo.ApmRecordDetailVO; +import org.springblade.modules.business.vo.ApmRecordExcelVO; import org.springblade.modules.business.vo.ApmRecordListVO; import org.springblade.modules.business.vo.ApmRecordVO; import org.springblade.modules.business.wrapper.ApmRecordWrapper; -import org.springframework.context.annotation.Bean; +import org.springblade.modules.system.entity.Dept; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.util.*; /** @@ -153,13 +155,13 @@ public class ApmRecordController extends BladeController { }) @ApiOperationSupport(order = 4) @ApiOperation(value = "分页", notes = "分页") - public R> selectPage(Query query, Long createDept, String startTime, String endTime, String cupCardNo, String project) { + public R> selectPage(Query query, Long createDept, String startTime, String endTime, String cupCardNo, String project, String apmStatus) { BladeUser user = AuthUtil.getUser(); if (Func.isNotEmpty(user) && !BusinessConstant.ROLE_NAME_HOSPITAL.equals(user.getRoleName())) { createDept = null; } - IPage page = recordService.selectRecordPage(Condition.getPage(query), createDept, startTime, endTime, cupCardNo, project); + IPage page = recordService.selectDistinctRecordPage(Condition.getPage(query), createDept, startTime, endTime, cupCardNo, project, apmStatus); return R.data(page); } @@ -206,4 +208,48 @@ public class ApmRecordController extends BladeController { } return R.fail(checkMsg); } + + + @GetMapping("/export-page") + public R> exportPage(Query query, Long createDept, String startTime, String endTime, String cupCardNo, String project, String apmStatus) { + IPage records = recordService.selectRecordPage(Condition.getPage(query), createDept, startTime, endTime, cupCardNo, project, apmStatus); + List vos = new ArrayList<>(); + + records.getRecords().forEach(record -> { + ApmRecordExcelVO vo = BeanUtil.copy(record, ApmRecordExcelVO.class); + Dept hospital = DeptCache.getDept(record.getCreateDept()); + vo.setCreateDeptName(Func.isNotEmpty(hospital) ? hospital.getDeptName() : ""); + vo.setProject(record.getProject()); + vo.setApmTimeStr(DateUtil.format(record.getApmDay(), DateUtil.PATTERN_DATE) + " " + record.getPeriod() + " " + record.getTimeFrame()); + vo.setApmStatusName(ApmRecordStatusEnum.getValue(record.getApmStatus())); + vos.add(vo); + }); + IPage page = new Page<>(); + page.setTotal(records.getTotal()); + page.setSize(records.getSize()); + page.setCurrent(records.getCurrent()); + page.setRecords(vos); + return R.data(page); + } + + @GetMapping("/export-excel") + public void exportExcel(HttpServletResponse response, Long createDept, String startTime, String endTime, String cupCardNo, String project, String status) { + List records = recordService.selectRecordList(createDept, startTime, endTime, cupCardNo, project, status); + List vos = new ArrayList<>(); + + records.forEach(record -> { + ApmRecordExcelVO vo = BeanUtil.copy(record, ApmRecordExcelVO.class); + Dept hospital = DeptCache.getDept(record.getCreateDept()); + vo.setCreateDeptName(Func.isNotEmpty(hospital) ? hospital.getDeptName() : ""); + vo.setCupName(Base64Util.decode(vo.getCupName())); + vo.setCupCardNo(Base64Util.decode(vo.getCupCardNo())); + vo.setCupPhone(Base64Util.decode(vo.getCupPhone())); + vo.setProject(record.getProject()); + vo.setApmTimeStr(DateUtil.format(record.getApmDay(), DateUtil.PATTERN_DATE) + " " + record.getPeriod() + " " + record.getTimeFrame()); + vo.setApmStatusName(ApmRecordStatusEnum.getValue(record.getApmStatus())); + vos.add(vo); + }); + + ExcelUtil.export(response, "预约统计导出数据", "预约统计数据表", vos, ApmRecordExcelVO.class); + } } diff --git a/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.java b/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.java index e62d02c..acb1959 100644 --- a/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.java +++ b/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.java @@ -17,22 +17,18 @@ import java.util.Map; */ public interface ApmRecordMapper extends BaseMapper { - /** - * 自定义分页 - * - * @param page - * @param createDept - * @param startTime - * @param endTime - * @param cupCardNo - * @return - */ - IPage selectRecordPage(IPage page, @Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime, - @Param("cupCardNo") String cupCardNo, @Param("project") String project); + IPage selectDistinctRecordPage(IPage page, @Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime, + @Param("cupCardNo") String cupCardNo, @Param("project") String project, @Param("apmStatus") String apmStatus); + + List selectDistinctRecordList(@Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime, + @Param("cupCardNo") String cupCardNo, @Param("project") String project, @Param("apmStatus") String apmStatus); + IPage selectRecordPage(IPage page, @Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime, + @Param("cupCardNo") String cupCardNo, @Param("project") String project, @Param("apmStatus") String apmStatus); + List selectRecordList(@Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime, - @Param("cupCardNo") String cupCardNo, @Param("project") String project); + @Param("cupCardNo") String cupCardNo, @Param("project") String project, @Param("apmStatus") String apmStatus); List countAllAmpNumByDept(@Param("createDept") Long createDept, @Param("startTime") String startTime, @Param("endTime") String endTime); diff --git a/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.xml b/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.xml index f1a9616..afe49be 100644 --- a/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.xml +++ b/src/main/java/org/springblade/modules/business/mapper/ApmRecordMapper.xml @@ -32,7 +32,32 @@ - + SELECT distinct ar.create_dept, ar.apm_day, ar.cup_name,ar.cup_card_no,ar.cup_phone + FROM ca_apm_record ar + WHERE ar.is_deleted = 0 + + and ar.create_dept = #{createDept} + + + and ar.apm_day >= #{startTime} + + + and ar.apm_day <= #{endTime} + + + and ar.cup_card_no like concat(concat('%', #{cupCardNo}), '%') + + + and ar.project like concat(concat('%', #{project}), '%') + + + and ar.apm_status = #{apmStatus} + + order by apm_day desc + + + + + diff --git a/src/main/java/org/springblade/modules/business/service/IApmRecordService.java b/src/main/java/org/springblade/modules/business/service/IApmRecordService.java index 291fc32..bfa3722 100644 --- a/src/main/java/org/springblade/modules/business/service/IApmRecordService.java +++ b/src/main/java/org/springblade/modules/business/service/IApmRecordService.java @@ -31,7 +31,13 @@ public interface IApmRecordService extends BaseService { * @param cupCardNo * @return */ - IPage selectRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project); + IPage selectDistinctRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project, String status); + + List selectDistinctRecordList(Long createDept, String startTime, String endTime, String cupCardNo, String project, String status); + + IPage selectRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project, String status); + + List selectRecordList(Long createDept, String startTime, String endTime, String cupCardNo, String project, String status); String checkApmRecordSave(List apmRecordList); diff --git a/src/main/java/org/springblade/modules/business/service/impl/ApmRecordServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/ApmRecordServiceImpl.java index b182da9..61c3440 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/ApmRecordServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/ApmRecordServiceImpl.java @@ -13,19 +13,15 @@ import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.dto.ApmRecordCountDTO; -import org.springblade.modules.business.entity.ApmConfig; import org.springblade.modules.business.entity.ApmRecord; import org.springblade.modules.business.entity.Blacklist; import org.springblade.modules.business.mapper.ApmRecordMapper; import org.springblade.modules.business.service.IApmRecordService; import org.springblade.modules.business.service.IBlacklistService; -import org.springblade.modules.business.vo.ApmConfigListVO; import org.springblade.modules.business.vo.ApmRecordDetailVO; import org.springblade.modules.business.vo.ApmRecordListVO; import org.springblade.modules.business.vo.ApmRecordVO; -import org.springblade.modules.business.wrapper.ApmConfigListWrapper; import org.springblade.modules.business.wrapper.ApmRecordListWrapper; -import org.springblade.modules.business.wrapper.ApmRecordWrapper; import org.springblade.modules.system.entity.Dept; import org.springframework.stereotype.Service; @@ -42,11 +38,11 @@ public class ApmRecordServiceImpl extends BaseServiceImpl selectRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project) { + public IPage selectDistinctRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project, String status) { // 由于每个项目的预约保存了一条记录, 故分页时, 先使用distinct查询(医院, 预约人 配置天)进行分页 - IPage pageRecord = baseMapper.selectRecordPage(page, createDept, startTime, endTime, cupCardNo, project); + IPage pageRecord = baseMapper.selectDistinctRecordPage(page, createDept, startTime, endTime, cupCardNo, project, status); - List allRecord = baseMapper.selectRecordList(createDept, startTime, endTime, cupCardNo, project); + List allRecord = baseMapper.selectRecordList(createDept, startTime, endTime, cupCardNo, project, status); Map> recordMap = new HashMap<>(); allRecord.forEach(record -> { String key = record.getCreateDept() + DateUtil.format(record.getApmDay(), DateUtil.PATTERN_DATE) + record.getCupCardNo(); @@ -73,6 +69,48 @@ public class ApmRecordServiceImpl extends BaseServiceImpl selectDistinctRecordList(Long createDept, String startTime, String endTime, String cupCardNo, String project, String status) { + // 由于每个项目的预约保存了一条记录, 故分页时, 先使用distinct查询(医院, 预约人 配置天)进行分页 + List pageRecord = baseMapper.selectDistinctRecordList(createDept, startTime, endTime, cupCardNo, project, status); + + List allRecord = baseMapper.selectRecordList(createDept, startTime, endTime, cupCardNo, project, status); + Map> recordMap = new HashMap<>(); + allRecord.forEach(record -> { + String key = record.getCreateDept() + DateUtil.format(record.getApmDay(), DateUtil.PATTERN_DATE) + record.getCupCardNo(); + List records = recordMap.containsKey(key) ? recordMap.get(key) : new ArrayList<>(); + records.add(record); + recordMap.put(key, records); + }); + + List recordList = ApmRecordListWrapper.build().listVO(pageRecord); + recordList.forEach(vo -> { + Dept hospital = DeptCache.getDept(vo.getCreateDept()); + vo.setCreateDeptName(Func.isNotEmpty(hospital) ? hospital.getDeptName() : ""); + + String key = vo.getCreateDept() + DateUtil.format(vo.getApmDay(), DateUtil.PATTERN_DATE) + vo.getCupCardNo(); + List records = recordMap.containsKey(key) ? recordMap.get(key) : new ArrayList<>(); + + List details = new ArrayList<>(); + for (ApmRecord record : records) { + details.add(BeanUtil.copy(record, ApmRecordDetailVO.class)); + } + vo.setDetails(details); + }); + + return recordList; + } + + @Override + public IPage selectRecordPage(IPage page, Long createDept, String startTime, String endTime, String cupCardNo, String project, String status) { + return baseMapper.selectRecordPage(page, createDept, startTime, endTime, cupCardNo, project, status); + } + + @Override + public List selectRecordList(Long createDept, String startTime, String endTime, String cupCardNo, String project, String status) { + return baseMapper.selectRecordList(createDept, startTime, endTime, cupCardNo, project, status); + } + @Override public String checkApmRecordSave(List apmRecordList) { String cupCardNo = apmRecordList.get(0).getCupCardNo(); diff --git a/src/main/java/org/springblade/modules/business/timer/QuartzConfig.java b/src/main/java/org/springblade/modules/business/timer/QuartzConfig.java index 6c395f7..8b7b2a7 100644 --- a/src/main/java/org/springblade/modules/business/timer/QuartzConfig.java +++ b/src/main/java/org/springblade/modules/business/timer/QuartzConfig.java @@ -10,7 +10,7 @@ public class QuartzConfig { * 添加黑名单定时任务表达式, 每天23:00执行 */ private String CRON_BLACKLIST_JOB = "0 0 23 * * ?"; - private String CRON_BLACKLIST_JOB_TEST = "0 0/1 * * * ?"; +// private String CRON_BLACKLIST_JOB_TEST = "0 0/1 * * * ?"; /** * 创建定时任务 @@ -31,7 +31,7 @@ public class QuartzConfig { @Bean public Trigger blacklistTimerJobTrigger() { //每隔5秒执行一次 - CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(CRON_BLACKLIST_JOB_TEST); + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(CRON_BLACKLIST_JOB); //创建触发器 Trigger trigger = TriggerBuilder.newTrigger() diff --git a/src/main/java/org/springblade/modules/business/vo/ApmRecordExcelVO.java b/src/main/java/org/springblade/modules/business/vo/ApmRecordExcelVO.java new file mode 100644 index 0000000..b1d3411 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/ApmRecordExcelVO.java @@ -0,0 +1,73 @@ +package org.springblade.modules.business.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serializable; + +/** + * 预约记录导出视图类 + * + * @author Chill + */ +@Data +@ColumnWidth(30) +@HeadRowHeight(25) +@ContentRowHeight(25) +public class ApmRecordExcelVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 创建部门名称 + */ + @ColumnWidth(25) + @ExcelProperty(value = "医院名称") + private String createDeptName; + + /** + * 体检人用户名 + */ + @ColumnWidth(20) + @ExcelProperty(value = "体检人姓名") + private String cupName; + + /** + * 体检人证件号 + */ + @ColumnWidth(25) + @ExcelProperty(value = "身份证号码") + private String cupCardNo; + + /** + * 体检人联系方式 + */ + @ColumnWidth(20) + @ExcelProperty(value = "联系方式") + private String cupPhone; + + /** + * 体检项目 + */ + @ColumnWidth(20) + @ExcelProperty(value = "检测项目") + private String project; + + /** + * 预约时间 放号天 + 时段(上午,下午) + 时段范围 + */ + @ColumnWidth(30) + @ExcelProperty(value = "预约时间") + private String apmTimeStr; + + /** + * 预约状态名称, 0:已保存,1已取消,2:未报到, 3:已报到 + */ + @ColumnWidth(20) + @ExcelProperty(value = "预约状态") + private String apmStatusName; + +} diff --git a/src/main/resources/log/logback-dev.xml b/src/main/resources/log/logback-dev.xml index 73d166d..8c5a7f2 100644 --- a/src/main/resources/log/logback-dev.xml +++ b/src/main/resources/log/logback-dev.xml @@ -58,20 +58,20 @@ - + - - + + - - - - - + + + + +