禅道bug修复

This commit is contained in:
马三炮 2025-08-19 17:23:09 +08:00
parent 02707d6a6b
commit 735eb37858
7 changed files with 126 additions and 10 deletions

View File

@ -87,6 +87,12 @@ public class AddTrainingTaskVo {
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String createUserName = SecurityUtils.getCurrentNickName();
/**课件ID*/
private List<Integer> coursewareIdList;
/**课件List*/
List<CoursewareVo> coursewareVos;
/**
* 查询条件限制
*/

View File

@ -123,6 +123,17 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- ZXing 二维码生成库 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
<!-- Minio -->
<dependency>

View File

@ -13,6 +13,7 @@ import com.bonus.common.exam.vo.TrainingTasksVo;
import com.bonus.common.log.annotation.SysLog;
import com.bonus.common.log.enums.OperaType;
import com.bonus.exam.service.TrainingTasksService;
import com.google.zxing.WriterException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -20,6 +21,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -47,7 +49,14 @@ public class TrainingTasksController extends BaseController {
@SysLog(title = "培训任务", businessType = OperaType.QUERY,logType = 0,module = "培训任务->培训任务列表")
public TableDataInfo list(ExamParamDto dto) {
startPage();
List<TrainingTasksVo> list = service.getTrainingTasksList(dto);
List<TrainingTasksVo> list = null;
try {
list = service.getTrainingTasksList(dto);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (WriterException e) {
throw new RuntimeException(e);
}
return getDataTable(list);
}

View File

@ -4,6 +4,7 @@ import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.entity.SysFileInfo;
import com.bonus.common.exam.dto.ExamParamDto;
import com.bonus.common.exam.vo.AddTrainingTaskVo;
import com.bonus.common.exam.vo.CoursewareVo;
import com.bonus.common.exam.vo.PersonVo;
import com.bonus.common.exam.vo.TrainingTasksVo;
import org.apache.ibatis.annotations.Param;
@ -120,4 +121,24 @@ public interface TrainingTasksMapper {
* @return 数据集合
*/
double getScore(PersonVo vo);
/**
* 保存课件信息
* @param coursewareIdList
* @param id
*/
void addTrainingTaskCourseware(@Param("list") List<Integer> coursewareIdList, @Param("trainTaskId")String id);
/**
* 删除课件
* @param trainId
*/
void delTrainingTaskCourseware(String trainId);
/**
* 获取课件列表
* @param dto
* @return
*/
List<CoursewareVo> getTrainTaskCourseware(ExamParamDto dto);
}

View File

@ -6,8 +6,11 @@ import com.bonus.common.exam.dto.ExamParamDto;
import com.bonus.common.exam.vo.AddTrainingTaskVo;
import com.bonus.common.exam.vo.PersonVo;
import com.bonus.common.exam.vo.TrainingTasksVo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.zxing.WriterException;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -24,7 +27,7 @@ public interface TrainingTasksService {
* @param dto 实体类
* @return 数据集合
*/
List<TrainingTasksVo> getTrainingTasksList(ExamParamDto dto);
List<TrainingTasksVo> getTrainingTasksList(ExamParamDto dto) throws IOException, WriterException;
/**
* 开启签到
* @param id id

View File

@ -14,6 +14,13 @@ import com.bonus.exam.mapper.TrainingTasksMapper;
import com.bonus.exam.service.TrainingTasksService;
import com.bonus.system.api.RemoteFileService;
import com.bonus.system.api.domain.SysFile;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -24,6 +31,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.*;
/**
@ -56,8 +65,33 @@ public class TrainingTasksServiceImpl implements TrainingTasksService {
* @return 数据集合
*/
@Override
public List<TrainingTasksVo> getTrainingTasksList(ExamParamDto dto) {
return mapper.getTrainingTasksList(dto);
public List<TrainingTasksVo> getTrainingTasksList(ExamParamDto dto) throws IOException, WriterException {
List<TrainingTasksVo> trainingTasksVoList = mapper.getTrainingTasksList(dto);
Map<String,Object> res = new HashMap<>();
//每条数据生成一个二维码
for (TrainingTasksVo trainingTasks:trainingTasksVoList) {
res.put("trainingName",trainingTasks.getTrainingName());
res.put("trainId",trainingTasks.getId());
// 将对象转换为JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
String jsonData = objectMapper.writeValueAsString(res);
// 生成二维码
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(
jsonData,
BarcodeFormat.QR_CODE,
300,
300
);
// 转换为Base64字符串
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
byte[] imageBytes = outputStream.toByteArray();
trainingTasks.setQrCodeUuid(java.util.Base64.getEncoder().encodeToString(imageBytes));
}
return trainingTasksVoList;
}
/**
@ -114,8 +148,10 @@ public class TrainingTasksServiceImpl implements TrainingTasksService {
if (code == 0) {
return AjaxResult.error("新增培训任务失败");
}
//保存培训课件
if (CollectionUtils.isNotEmpty(vo.getCoursewareIdList())) {
mapper.addTrainingTaskCourseware(vo.getCoursewareIdList(), vo.getId());
}
// 添加学习任务-相关人员
List<EkTaskUserVo> taskUserVos = new ArrayList<>();
taskUserVos = getTaskUsers(vo.getUserIdList(), Integer.valueOf(vo.getId()));
@ -239,6 +275,9 @@ public class TrainingTasksServiceImpl implements TrainingTasksService {
examPaperVo.setQuestionNum(num);
}
}
// 获取学习任务课件
List<CoursewareVo> coursewareVos = mapper.getTrainTaskCourseware(dto);
vo.setCoursewareVos(coursewareVos);
vo.setExamPaperList(examPaperList);
vo.setUserIdList(newUserIdList);
} catch (Exception e) {
@ -281,7 +320,11 @@ public class TrainingTasksServiceImpl implements TrainingTasksService {
learningTaskMapper.delEkTaskUserData(Integer.valueOf(vo.getId()), "2");
taskUserVos = getTaskUsers(vo.getUserIdList(), Integer.valueOf(vo.getId()));
learningTaskMapper.addEkTaskUserData(taskUserVos);
// 存在课件则先删除旧课件并重新添加
mapper.delTrainingTaskCourseware(vo.getTrainId());
if (CollectionUtils.isNotEmpty(vo.getCoursewareIdList())) {
mapper.addTrainingTaskCourseware(vo.getCoursewareIdList(), vo.getId());
}
if (CollectionUtils.isNotEmpty(vo.getDelExamPaperIds())) {
// 删除考试/练习的试卷数据
learningTaskMapper.delExamPapers(vo.getDelExamPaperIds(), "2");

View File

@ -57,6 +57,17 @@
VALUES
(#{id}, #{filePath}, #{fileSize},#{fileName})
</insert>
<insert id="addTrainingTaskCourseware">
INSERT INTO edu_train_task_courseware(train_task_id, courseware_id,is_active)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{trainTaskId},
#{item},
'1'
)
</foreach>
</insert>
<update id="changeSignStatus">
UPDATE edu_train_task
SET sign_status = #{status}
@ -88,6 +99,9 @@
</foreach>
</delete>
<delete id="delTrainingTaskCourseware">
DELETE FROM edu_train_task_courseware WHERE train_task_id = #{trainId} AND is_active = '1'
</delete>
<select id="getTrainingTasksList" resultType="com.bonus.common.exam.vo.TrainingTasksVo">
SELECT
ett.train_task_id as id,
@ -165,19 +179,19 @@
from(
SELECT
count(1) AS totalNum,
'' AS notSign
0 AS notSign
FROM
ek_task_user
WHERE
task_id =#{id}
AND task_type = '2' UNION ALL
SELECT
'' AS totalNum,
0 AS totalNum,
count( 1) AS notSign
FROM
ek_task_user
WHERE
task_id = #{id} and (sign_time is not null and sign_time != '' or sign_time != 'null')
task_id = #{id} and (sign_time is not null and sign_time != null)
AND task_type = '2')r
</select>
<select id="isExistTrainTaskName" resultType="java.lang.Integer">
@ -244,4 +258,13 @@
epr.uuid = #{userId}
AND estp.study_task_id = #{id}
</select>
<select id="getTrainTaskCourseware" resultType="com.bonus.common.exam.vo.CoursewareVo">
SELECT ec.courseware_id AS coursewareId,
ec.courseware_name AS coursewareName,
ec.courseware_size AS coursewareSize,
ec.study_time AS studyTime
FROM edu_train_task_courseware ettc
LEFT JOIN edu_courseware ec ON ec.courseware_id = ettc.courseware_id
WHERE ettc.train_task_id = #{studyTaskId} AND ettc.is_active = '1'
</select>
</mapper>