jl-jjsp-service/securityControl-modules/securityControl-proteam/target/classes/mapper/studyExam/SysExamMapper.xml

229 lines
11 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sercurityControl.proteam.studyExam.mapper.SysExamDao">
<!--新增用户数据-->
<insert id="addDayExamUser" useGeneratedKeys="true" keyProperty="id">
insert into ex_day_exam_user(
band_user_id, band_user_name, band_time, assign_account_id, assign_date, assign_account_name,
score,total_score,hand_paper_status
)values (#{bidUserId},#{bindUserName},#{bandTime},#{userId},now(),#{userName},0,0,0 )
</insert>
<insert id="addDayExam">
insert into ex_day_exam(
topic, topic_score,topic_type, topic_answer,topic_option,
assign_account_id,assign_date
)values
<foreach collection="list" item="item" separator=",">
(
#{item.topic},#{defaultNum},#{item.topicType},#{item.topicAnswer},#{item.topicOption},#{userId},now()
)
</foreach>
</insert>
<insert id="addExamAns">
insert into ex_day_exam_answer_record(
day_exam_id,choose_answer,score,error_reason,day_exam_user_id
)values (#{examId},#{chooseAnswer},#{score},#{errorReason},#{examUserId})
</insert>
<update id="updateDayExamUser">
update ex_day_exam_user set
band_user_id=#{bidUserId},band_user_name=#{bindUserName}, band_time=#{bandTime}
where id=#{id}
</update>
<update id="updateUserCount">
update ex_day_exam_user set total_score=#{num} where assign_account_id=#{userId} and assign_date=current_date
</update>
<update id="updateExamAns">
UPDATE ex_day_exam_answer_record SET choose_answer=#{chooseAnswer},score=#{score} where id=#{id}
</update>
<!--提交试卷-->
<update id="submitPaper">
UPDATE ex_day_exam_user SET score = #{score},hand_paper_status = 1 WHERE id = #{examUserId}
</update>
<!--删除考试记录-->
<delete id="delExamRecord">
<if test="type == 1">
DELETE FROM ex_day_exam_user WHERE id = #{params.id}
</if>
<if test="type == 2">
DELETE FROM ex_day_exam_answer_record WHERE day_exam_user_id = #{params.id}
</if>
<if test="type == 3">
DELETE FROM ex_day_exam_user WHERE assign_account_id = #{params.userId} AND assign_date = #{params.assignDate}
</if>
</delete>
<!--查询指定用户数据-->
<select id="getUserConfig" resultType="com.sercurityControl.proteam.studyExam.domain.vo.DayExamUserVo">
select su.user_name userName,su.id userId,IFNULL(sd1.remarks,0) num,
tub.scheduling_id bidUserId,tub.scheduling_name bindUserName,tub.create_time bandTime
from sys_user su
LEFT JOIN sys_role sr on sr.id=su.role_id AND sr.status=0
left join sys_dist sd1 on sd1.`code`=sr.role_code and sd1.is_flag=0
left join sys_dist sd2 on sd1.p_id=sd2.id and sd2.is_flag=0
left JOIN tb_user_banding tub on tub.login_user_id=su.id and tub.banding_date=CURRENT_DATE
where su.status=0 and sd2.`code`='exam_config'
and su.id=#{userId}
</select>
<select id="getTopicList" resultType="com.sercurityControl.proteam.studyExam.domain.vo.TopicVo">
SELECT id,topic ,topic_type topicType,topic_answer topicAnswer,topic_option topicOption
FROM ex_topic
where del_flag=0 and topic_type IN(1,2)
ORDER BY RAND() LIMIT #{num}
</select>
<select id="getDayExamUser" resultType="com.sercurityControl.proteam.studyExam.domain.vo.DayExamUserVo">
select id, band_user_id bidUserId, band_user_name bindUserName,
band_time bandTime, assign_account_id userId, assign_date
from ex_day_exam_user
where assign_account_id=#{userId} and assign_date= CURRENT_DATE
</select>
<select id="getDayExam" resultType="java.lang.Integer">
select count(1)
from ex_day_exam
where assign_date=CURRENT_DATE and assign_account_id=#{userId}
</select>
<select id="getDictNum" resultType="java.lang.String">
select IFNULL(sd1.code,10) score
from sys_dist sd1
left join sys_dist sd2 on sd1.p_id=sd2.id and sd2.is_flag=0
where sd1.is_flag=0 and sd2.`code`='exam_score'
</select>
<select id="getBindId" resultType="java.lang.String">
select tub.scheduling_id
from sys_user su
left JOIN tb_user_banding tub on tub.login_user_id=su.id and tub.banding_date=CURRENT_DATE
where su.status=0 and su.id=#{userId}
</select>
<select id="getExamUserId" resultType="java.lang.String">
select id
from ex_day_exam_user
where assign_account_id=#{userId} and assign_date=CURRENT_DATE
<if test="bindId!=null and bindId!=''">
and band_user_id=#{bindId}
</if>
</select>
<select id="getExamAns" resultType="java.lang.String">
select id
from ex_day_exam_answer_record
where day_exam_id=#{examId} and day_exam_user_id=#{examUserId}
</select>
<!--根据当前登录人ID判断是否绑定值班员-->
<select id="getExamUserByAccount" resultType="com.sercurityControl.proteam.studyExam.domain.vo.DayExamUserVo">
SELECT scheduling_id AS bidUserId,
scheduling_name AS bindUserName,
create_time AS bandTime
FROM tb_user_banding WHERE login_user_id = #{userId} AND banding_date = #{currentDay}
</select>
<!--根据账号和值班员ID查询绑定的考试题目-->
<select id="getTopicsByAccount" resultType="com.sercurityControl.proteam.studyExam.domain.vo.TopicVo">
SELECT edeu.id AS examUserId,
ede.id,
ede.topic,
ede.topic_type AS topicType,
ede.topic_answer AS topicAnswer,
ede.topic_option AS topicOption,
ede.topic_score AS topicScore,
CASE WHEN edeu.hand_paper_status = 0 AND edear.choose_answer IS NULL THEN ''
WHEN edeu.hand_paper_status = 0 AND edear.choose_answer IS NOT NULL THEN edear.choose_answer
WHEN edeu.hand_paper_status = 1 AND edear.choose_answer IS NOT NULL THEN edear.choose_answer
WHEN edeu.hand_paper_status = 1 AND edear.choose_answer IS NULL THEN '未作答'
END AS chooseAnswer,
edear.score AS score,
edeu.hand_paper_status AS handPaperStatus
FROM ex_day_exam_user edeu
LEFT JOIN ex_day_exam ede ON edeu.assign_account_id = ede.assign_account_id AND edeu.assign_date = ede.assign_date
LEFT JOIN ex_day_exam_answer_record edear ON edeu.id = edear.day_exam_user_id AND edear.day_exam_id = ede.id
WHERE edeu.assign_date = #{currentDay}
AND edeu.assign_account_id = #{userId}
<if test="bandUserId!=null">
AND edeu.band_user_id = #{bandUserId}
</if>
ORDER BY ede.id
</select>
<!--根据账号和值班员ID查询答题状态-->
<select id="getAnswerStatusByUser" resultType="java.lang.Integer">
SELECT hand_paper_status
FROM ex_day_exam_user edeu
WHERE edeu.assign_date = #{currentDay}
AND edeu.assign_account_id = #{userId}
<if test="bandUserId!=null">
AND edeu.band_user_id = #{bandUserId}
</if>
</select>
<!--根据考试ID计算考试的得分-->
<select id="getScoreByExamUserId" resultType="java.math.BigDecimal">
SELECT SUM(score)
FROM ex_day_exam_answer_record
WHERE day_exam_user_id = #{examUserId}
</select>
<!--获取每日考试记录列表-->
<select id="getDayExamRecord" resultType="com.sercurityControl.proteam.studyExam.domain.vo.DayExamUserVo">
SELECT edeu.id,
IFNULL(edeu.band_user_name,edeu.assign_account_name) AS bindUserName,
edeu.score,
edeu.total_score AS totalScore,
edeu.hand_paper_status AS handPaperStatus,
edeu.assign_date AS assignDate,
su.login_name AS loginName,
so.org_name AS orgName,
edeu.assign_account_id AS userId
FROM ex_day_exam_user edeu
LEFT JOIN sys_user su ON edeu.assign_account_id = su.id
LEFT JOIN sys_org so ON su.org_id = so.org_id
<where>
<if test="startDay!=null and startDay!='' and endDay!=null and endDay!=''">
AND edeu.assign_date BETWEEN #{startDay} AND #{endDay}
</if>
<if test="bindUserName!=null and bindUserName!=''">
AND INSTR(IFNULL(edeu.band_user_name,edeu.assign_account_name),#{bindUserName}) > 0
</if>
<if test="assignAccountName!=null and assignAccountName!=''">
AND INSTR(su.login_name,#{assignAccountName}) > 0
</if>
<if test="roleType == 2 or roleType == 3">
AND edeu.assign_account_id = #{userId}
</if>
</where>
ORDER BY edeu.assign_date DESC
</select>
<!--获取每日考试记录详情-->
<select id="getDayExamRecordDetail" resultType="com.sercurityControl.proteam.studyExam.domain.vo.TopicVo">
SELECT edeu.id AS examUserId,
ede.id,
ede.topic,
ede.topic_type AS topicType,
ede.topic_answer AS topicAnswer,
ede.topic_option AS topicOption,
ede.topic_score AS topicScore,
IFNULL(edear.choose_answer,'未作答') AS chooseAnswer,
edear.score AS score
FROM ex_day_exam_user edeu
LEFT JOIN ex_day_exam ede ON edeu.assign_account_id = ede.assign_account_id AND ede.assign_date = edeu.assign_date
LEFT JOIN ex_day_exam_answer_record edear ON edeu.id = edear.day_exam_user_id AND edear.day_exam_id = ede.id
WHERE edeu.id = #{id}
</select>
<!--查询未绑定值班员的每日考试账号-->
<select id="getDayExamUserByNoBandUser" resultType="java.lang.Long">
SELECT id
FROM ex_day_exam_user
WHERE assign_account_id = #{userId} AND assign_date = #{currentDay} AND band_user_id IS NULL
ORDER BY id DESC
LIMIT 1
</select>
<!--查询值班员账号是否绑定了排班人员-->
<select id="getBandUserId" resultType="java.lang.Long">
SELECT scheduling_id
FROM tb_user_banding
WHERE login_user_id = #{userId} AND banding_date = CURRENT_DATE AND is_flag = '0' AND scheduling_id IS NOT NULL
</select>
<!--查看学习任务状态-->
<select id="getStudyTaskStatus" resultType="java.lang.Integer">
SELECT COUNT(*) FROM study_people WHERE user_name = #{userId} AND study_object = #{isSup}
UNION ALL
SELECT COUNT(*) FROM study_people WHERE user_name = #{userId} AND study_object = #{isSup} AND study_status IN ('0','1')
</select>
</mapper>