个人模板导出
This commit is contained in:
parent
bf70a2737a
commit
64b1ec420d
|
@ -85,6 +85,10 @@
|
|||
<artifactId>ruoyi-common-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.deepoove</groupId>
|
||||
<artifactId>poi-tl</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -1,23 +1,28 @@
|
|||
package org.dromara.scale.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.util.PoitlIOUtils;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.common.core.utils.file.FileUtils;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.scale.domain.bo.BaseQueryBo;
|
||||
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
|
||||
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
|
||||
import org.dromara.scale.service.ISysEvaluationRecordService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* 量测记录
|
||||
|
@ -48,9 +53,17 @@ public class EvaluationRecordController extends BaseController {
|
|||
@SaCheckPermission("evaluation:record:export")
|
||||
@Log(title = "量测记录", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(SysEvaluationRecordBo bo, HttpServletResponse response) {
|
||||
List<SysEvaluationRecordVo> list = sysEvaluationRecordService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "量测记录", SysEvaluationRecordVo.class, response);
|
||||
public void export(BaseQueryBo bo, HttpServletResponse response) throws IOException {
|
||||
XWPFTemplate template = sysEvaluationRecordService.getWordTemplate(bo);
|
||||
//ExcelUtil.exportExcel(list, "量测记录", SysEvaluationRecordVo.class, response);
|
||||
FileUtils.setAttachmentResponseHeader(response, bo.getNickName() + "的报告" + "-" + bo.getScaleName());
|
||||
response.setContentType("application/octet-stream");
|
||||
OutputStream out = response.getOutputStream();
|
||||
BufferedOutputStream bos = new BufferedOutputStream(out);
|
||||
template.write(bos);
|
||||
bos.flush();
|
||||
out.flush();
|
||||
PoitlIOUtils.closeQuietlyMulti(template, bos, out);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -65,5 +78,4 @@ public class EvaluationRecordController extends BaseController {
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package org.dromara.scale.domain;
|
||||
|
||||
import com.deepoove.poi.data.TableRenderData;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* <p>TODO<p>
|
||||
*
|
||||
* @author cjw
|
||||
* @version V1.0.0
|
||||
* @date 2024/4/29 11:09
|
||||
*/
|
||||
@Data
|
||||
public class EvaluationEecordWordData {
|
||||
|
||||
private String nickName;
|
||||
private String deptName;
|
||||
private String sex;
|
||||
private String scaleName;
|
||||
private String scaleDetails;
|
||||
private TableRenderData factor;
|
||||
private TableRenderData intervene;
|
||||
|
||||
}
|
|
@ -15,9 +15,11 @@ public class BaseQueryBo {
|
|||
private Long batchNo;
|
||||
private String sessionName;
|
||||
private Long scaleId;
|
||||
private String scaleName;
|
||||
private Long deptId;
|
||||
private Long userId;
|
||||
private String nickName;
|
||||
private Long recordId;
|
||||
private Integer status;
|
||||
private Integer situation;
|
||||
}
|
||||
|
|
|
@ -21,4 +21,6 @@ public class TimeAxisVo {
|
|||
private String type;
|
||||
|
||||
private Integer situation;
|
||||
|
||||
private String note;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package org.dromara.scale.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* <p>TODO<p>
|
||||
*
|
||||
* @author cjw
|
||||
* @version V1.0.0
|
||||
* @date 2024/4/29 13:41
|
||||
*/
|
||||
@Data
|
||||
public class WordEvaluationAnswerVo {
|
||||
|
||||
private String factorName;
|
||||
private String questionContent;
|
||||
private String answerOption;
|
||||
private BigDecimal score;
|
||||
}
|
|
@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
|
|||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.scale.domain.SysEvaluationRecord;
|
||||
import org.dromara.scale.domain.vo.WordEvaluationAnswerVo;
|
||||
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
|
||||
import org.dromara.scale.domain.vo.SysScalePublishVo;
|
||||
|
||||
|
@ -27,4 +28,6 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
|
|||
|
||||
Page<SysEvaluationRecordVo> selectRecordVoPage(@Param("page") Page<SysEvaluationRecord> page, @Param(Constants.WRAPPER) Wrapper<SysEvaluationRecord> queryWrapper);
|
||||
|
||||
List<WordEvaluationAnswerVo> selectAnswer4Word(Long recordId);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package org.dromara.scale.service;
|
||||
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.scale.domain.SysScalePublish;
|
||||
import org.dromara.scale.domain.bo.BaseQueryBo;
|
||||
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
|
||||
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -34,6 +37,8 @@ public interface ISysEvaluationRecordService {
|
|||
|
||||
void insertBathByPublish(SysScalePublish add);
|
||||
|
||||
XWPFTemplate getWordTemplate(BaseQueryBo bo) throws IOException;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,22 +3,39 @@ package org.dromara.scale.service.impl;
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.data.RowRenderData;
|
||||
import com.deepoove.poi.data.Rows;
|
||||
import com.deepoove.poi.data.TableRenderData;
|
||||
import com.deepoove.poi.data.Tables;
|
||||
import com.deepoove.poi.data.style.BorderStyle;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.poi.xwpf.usermodel.XWPFTable;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.scale.constant.StatusEnum;
|
||||
import org.dromara.scale.domain.EvaluationEecordWordData;
|
||||
import org.dromara.scale.domain.SysEvaluationRecord;
|
||||
import org.dromara.scale.domain.SysScalePublish;
|
||||
import org.dromara.scale.domain.bo.BaseQueryBo;
|
||||
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
|
||||
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
|
||||
import org.dromara.scale.domain.vo.SysScaleVo;
|
||||
import org.dromara.scale.domain.vo.TimeAxisVo;
|
||||
import org.dromara.scale.domain.vo.WordEvaluationAnswerVo;
|
||||
import org.dromara.scale.mapper.SysEvaluationRecordMapper;
|
||||
import org.dromara.scale.mapper.SysInterveneRecordMapper;
|
||||
import org.dromara.scale.mapper.SysScaleMapper;
|
||||
import org.dromara.scale.service.ISysEvaluationRecordService;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -36,6 +53,12 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
|
|||
|
||||
private final SysUserMapper userMapper;
|
||||
|
||||
private final SysScaleMapper scaleMapper;
|
||||
|
||||
private final SysInterveneRecordMapper interveneMapper;
|
||||
|
||||
private final String resource = "word/personalTemplate.docx";
|
||||
|
||||
/**
|
||||
* 查询量测记录
|
||||
*/
|
||||
|
@ -96,4 +119,45 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
|
|||
}
|
||||
baseMapper.insertBatch(recordList, 100);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XWPFTemplate getWordTemplate(BaseQueryBo bo) throws IOException {
|
||||
Long userId = bo.getUserId();
|
||||
Long recordId = bo.getRecordId();
|
||||
Long scaleId = bo.getScaleId();
|
||||
EvaluationEecordWordData wordData = new EvaluationEecordWordData();
|
||||
SysUserVo user = userMapper.selectUserById(userId);
|
||||
wordData.setNickName(user.getNickName());
|
||||
wordData.setDeptName(user.getDept().getDeptName());
|
||||
wordData.setSex("1".equals(user.getSex()) ? "男" : "女");
|
||||
SysScaleVo scale = scaleMapper.selectVoById(scaleId);
|
||||
wordData.setScaleName(scale.getScaleName());
|
||||
wordData.setScaleDetails(scale.getScaleDetails());
|
||||
List<WordEvaluationAnswerVo> answerVos = baseMapper.selectAnswer4Word(recordId);
|
||||
BorderStyle borderStyle = new BorderStyle();
|
||||
borderStyle.setColor("A6A6A6");
|
||||
borderStyle.setSize(4);
|
||||
borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
|
||||
RowRenderData factorHeader = Rows.of("因子项", "题目", "选项", "得分").bgColor("F2F2F2").center()
|
||||
.textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create();
|
||||
TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle).center().create();
|
||||
for (WordEvaluationAnswerVo answerVo : answerVos) {
|
||||
RowRenderData one = Rows.of(answerVo.getFactorName(), answerVo.getQuestionContent(),
|
||||
answerVo.getAnswerOption(), answerVo.getScore().toString()).center().create();
|
||||
factorTable.addRow(one);
|
||||
}
|
||||
wordData.setFactor(factorTable);
|
||||
List<TimeAxisVo> timeAxisVos = interveneMapper.selectTimeList(userId);
|
||||
RowRenderData interveneHeader = Rows.of("干预标题", "干预时间", "诊断详情").bgColor("F2F2F2").center()
|
||||
.textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create();
|
||||
TableRenderData interveneTable = Tables.ofA4MediumWidth().addRow(interveneHeader).border(borderStyle).center().create();
|
||||
for (TimeAxisVo timeAxisVo : timeAxisVos) {
|
||||
RowRenderData one = Rows.of(timeAxisVo.getName(), timeAxisVo.getTime(),
|
||||
timeAxisVo.getNote()).center().create();
|
||||
interveneTable.addRow(one);
|
||||
}
|
||||
wordData.setIntervene(interveneTable);
|
||||
ClassPathResource classPathResource = new ClassPathResource(resource);
|
||||
return XWPFTemplate.compile(classPathResource.getInputStream()).render(wordData);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
sp.session_name,
|
||||
s.scale_id,
|
||||
s.scale_name,
|
||||
MAX(sfr.situation),
|
||||
MAX(sfr.situation) as `situation`,
|
||||
er.create_time
|
||||
from sys_evaluation_record er
|
||||
left join sys_scale s on s.scale_id = er.scale_id
|
||||
|
|
|
@ -23,4 +23,17 @@
|
|||
left join sys_scale s on s.scale_id = er.scale_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectAnswer4Word" resultType="org.dromara.scale.domain.vo.WordEvaluationAnswerVo">
|
||||
select sf.factor_name,
|
||||
sq.question_content,
|
||||
sa.answer_option,
|
||||
sa.score
|
||||
from sys_evaluation_answer ea
|
||||
left join sys_scale_question sq on sq.question_id = ea.question_id
|
||||
left join sys_scale_answer sa on sa.answer_id = ea.answer_id
|
||||
left join sys_scale_factor sf on find_in_set(ea.question_id, sf.question_ids)
|
||||
where ea.record_id = #{recordId}
|
||||
order by sf.factor_name
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
@ -4,10 +4,11 @@
|
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.scale.mapper.SysInterveneRecordMapper">
|
||||
<select id="selectTimeList" resultType="org.dromara.scale.domain.vo.TimeAxisVo">
|
||||
select ir.intervene_id as `id`,
|
||||
CONCAT(DATE_FORMAT(create_time, '%Y-%m-%d'), ' ', u.nick_name, '的干预') as `name`,
|
||||
ir.create_time as `time`,
|
||||
'intervene' as `type`
|
||||
select ir.intervene_id as `id`,
|
||||
CONCAT(DATE_FORMAT(ir.create_time, '%Y-%m-%d'), ' ', u.nick_name, '的干预') as `name`,
|
||||
ir.create_time as `time`,
|
||||
'intervene' as `type`,
|
||||
ir.diagnose as `note`
|
||||
from sys_intervene_record ir
|
||||
left join sys_user u on u.user_id = ir.counselor_id
|
||||
where ir.user_id = #{userId}
|
||||
|
|
Binary file not shown.
|
@ -93,10 +93,10 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
|
|||
* @param userId 用户ID
|
||||
* @return 用户对象信息
|
||||
*/
|
||||
@DataPermission({
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.user_id")
|
||||
})
|
||||
// @DataPermission({
|
||||
// @DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
// @DataColumn(key = "userName", value = "u.user_id")
|
||||
// })
|
||||
SysUserVo selectUserById(Long userId);
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue