diff --git a/Dao/MyBatis/Maps/Grade.xml b/Dao/MyBatis/Maps/Grade.xml index 0dba05f..88a83e5 100644 --- a/Dao/MyBatis/Maps/Grade.xml +++ b/Dao/MyBatis/Maps/Grade.xml @@ -966,7 +966,154 @@ order by a.rno - + SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; + + WITH + filtered_lect AS ( + SELECT + b.lectno, a.cmno, b.cmisno, b.userno, b.payno + , b.isrebate, b.attrate, b.iscomplete, b.sdate, b.edate + , a.cshape, e.eend, e.studyplace, p.payoktime + FROM cm a + INNER JOIN lect b ON b.cmno = a.cmno AND b.status = 1 AND b.ischanged = 0 + INNER JOIN cm c2 ON c2.cmno = a.pcmno + INNER JOIN users u ON u.userno = b.userno + INNER JOIN pay p ON p.payno = b.payno + LEFT OUTER JOIN cminningscd e ON e.cmisno = b.cmisno + LEFT OUTER JOIN assign ua ON ua.asno=u.asno + WHERE 1=1 + AND a.ismaster = 0 AND a.isdel = 0 + + + + + + + + + + + + + + + 2 AND b.edate <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')) OR (a.cshape = 2 AND e.eend IS NOT NULL AND e.eend <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')) OR (a.cshape = 2 AND e.eend IS NULL AND b.edate <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')))]]> + + = #edate1#]]> + + = DATE_FORMAT(#sdateall#, '%Y-%m-%d 00:00:00')]]> + + ), + aggregated_scores AS ( + SELECT + fl.lectno, fl.cmno, fl.isrebate, fl.attrate + , COUNT(DISTINCT CASE WHEN ex.extype = 0 THEN ex.exno END) AS ex0cnt, COUNT(DISTINCT CASE WHEN ex.extype = 0 THEN lex.lectno END) AS ex0lectcnt, AVG(CASE WHEN ex.extype = 0 AND ex.tpoint > 0 THEN IFNULL(lex.tpoint, 0) / ex.tpoint * 100 ELSE 0 END) AS ex0lectpoint + , COUNT(DISTINCT CASE WHEN ex.extype = 1 THEN ex.exno END) AS ex1cnt, COUNT(DISTINCT CASE WHEN ex.extype = 1 THEN lex.lectno END) AS ex1lectcnt, AVG(CASE WHEN ex.extype = 1 AND ex.tpoint > 0 THEN IFNULL(lex.tpoint, 0) / ex.tpoint * 100 ELSE 0 END) AS ex1lectpoint + , COUNT(DISTINCT CASE WHEN sd.sdtype = 0 THEN sd.sdno END) AS sd0cnt, COUNT(DISTINCT CASE WHEN sd.sdtype = 0 THEN lsd.lectno END) AS sd0lectcnt, AVG(CASE WHEN sd.sdtype = 0 AND sd.tpoint > 0 THEN IFNULL(lsd.cpoint, 0) / sd.tpoint * 100 ELSE 0 END) AS sd0lectpoint + , COUNT(DISTINCT CASE WHEN sd.sdtype = 1 THEN sd.sdno END) AS sd1cnt, COUNT(DISTINCT CASE WHEN sd.sdtype = 1 THEN lsd.lectno END) AS sd1lectcnt, AVG(CASE WHEN sd.sdtype = 1 AND sd.tpoint > 0 THEN IFNULL(lsd.cpoint, 0) / sd.tpoint * 100 ELSE 0 END) AS sd1lectpoint + , COUNT(DISTINCT CASE WHEN rs.rstype = 0 THEN rs.rsno END) AS rs0cnt, COUNT(DISTINCT CASE WHEN rs.rstype = 0 THEN lrs.lectno END) AS rs0lectcnt + , COUNT(DISTINCT ci.cmino) AS at0cnt, COUNT(DISTINCT li.lectno) AS at0lectcnt + FROM filtered_lect fl + LEFT JOIN cmex ex ON ex.cmno = fl.cmno AND ex.isdel = 0 LEFT JOIN lectex lex ON lex.lectno = fl.lectno AND lex.exno = ex.exno + LEFT JOIN cmsd sd ON sd.cmno = fl.cmno AND sd.isdel = 0 LEFT JOIN lectsd lsd ON lsd.lectno = fl.lectno AND lsd.sdno = sd.sdno + LEFT JOIN cmrs rs ON rs.cmno = fl.cmno AND rs.rstype = 0 AND rs.isdel = 0 LEFT JOIN lectrs lrs ON lrs.lectno = fl.lectno AND lrs.rsno = rs.rsno + LEFT JOIN cminning ci ON ci.cmno = fl.cmno AND ci.isonline = 0 AND ci.isscd = 1 LEFT JOIN lectinning li ON li.cmino = ci.cmino AND li.lectno = fl.lectno AND li.istatus = 2 + GROUP BY fl.lectno, fl.cmno, fl.isrebate, fl.attrate + ), + final_scores AS ( + SELECT + a.* + , (a.attrate / 100) * (CASE WHEN a.isrebate = 1 THEN d.attendrfd ELSE d.attend END) AS apoint, (IFNULL(a.ex0lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.midrfd ELSE d.mid END) AS mpoint + , (IFNULL(a.ex1lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.finalrfd ELSE d.final END) AS fpoint, (IFNULL(a.sd0lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.subjectrfd ELSE d.subject END) AS spoint + , (IFNULL(a.sd1lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.discussrfd ELSE d.discuss END) AS dpoint + , CASE WHEN (CASE WHEN a.isrebate=1 THEN d.attendcutrfd ELSE d.attendcut END) <= a.attrate THEN 1 ELSE 0 END AS ispassa + , CASE WHEN (CASE WHEN a.isrebate=1 THEN d.midcutrfd ELSE d.midcut END) <= a.ex0lectpoint THEN 1 ELSE 0 END AS ispassm + , CASE WHEN (CASE WHEN a.isrebate=1 THEN d.finalcutrfd ELSE d.finalcut END) <= a.ex1lectpoint THEN 1 ELSE 0 END AS ispassf + , CASE WHEN (CASE WHEN a.isrebate=1 THEN d.subjectcutrfd ELSE d.subjectcut END) <= a.sd0lectpoint THEN 1 ELSE 0 END AS ispasss + , CASE WHEN (CASE WHEN a.isrebate=1 THEN d.discusscutrfd ELSE d.discusscut END) <= a.sd1lectpoint THEN 1 ELSE 0 END AS ispassd + , CASE WHEN (CASE WHEN IFNULL(d.isoffabs,0)=1 THEN IFNULL(a.at0cnt,0) ELSE 0 END) <= IFNULL(a.at0lectcnt,0) THEN 1 ELSE 0 END AS ispassat + FROM aggregated_scores a + INNER JOIN cmev d ON d.cmno = a.cmno + ) + SELECT * + FROM ( + SELECT + fs.lectno, b.userno, b.payno + , ROW_NUMBER() OVER(ORDER BY $orderby$c.cname, c.cmno, u.username) rno + , COUNT(fs.lectno) OVER() pagetotalcount + , b.isrebate, CASE WHEN ppl.asname IS NOT NULL THEN ppl.asname ELSE ua.asname END asname + , ppl.brno, ppl.ceoname, ppl.post, ppl.address1, ppl.address2, ppl.btype, ppl.bkind, ppl.eino, ppl.mname, ppl.association + , CAST(AES_DECRYPT(UNHEX(ppl.mphone), ) AS CHAR) mphone, CAST(AES_DECRYPT(UNHEX(ppl.taxemail), ) AS CHAR) taxemail + , u.username, u.userid, u.slevel, u.uduty + , b.iscomplete, b.completetime, b.completeno, b.sdate, b.edate, c.studydays + , CONCAT(SUBSTRING(CAST(AES_DECRYPT(UNHEX(u.userpno), ) AS CHAR),1,6),'-',SUBSTRING(CAST(AES_DECRYPT(UNHEX(u.userpno),) AS CHAR),7,7)) userpno + , CAST(AES_DECRYPT(UNHEX(u.mobile), ) AS CHAR) mobile + , b.cmisno, p.payoktime, p.payamt, c.cshape, c.sstime, c.cmno, c.cname, c.classno, c.studytime, t.tyear + , cg.cgname, cg.pcgno, pcg.cgname AS pcgname, d.isoffabs + , b.attrate, fs.apoint, fs.mpoint, fs.fpoint, fs.spoint, fs.dpoint + , fs.ex0cnt, fs.ex0lectcnt, fs.ex0lectpoint, fs.ex1cnt, fs.ex1lectcnt, fs.ex1lectpoint + , fs.sd0cnt, fs.sd0lectcnt, fs.sd0lectpoint, fs.sd1cnt, fs.sd1lectcnt, fs.sd1lectpoint + , fs.rs0cnt, fs.rs0lectcnt, fs.ispassat + , fs.ispassa, fs.ispassm, fs.ispassf, fs.ispasss, fs.ispassd + , e.sseq, e.estart, e.eend, e.studyplace, f.istatus + , cc.cname studyplacename, tm.cname typemanname, te.cname typeeduname + , tg.cname typegradename, tj.cname typejobname + , DATE_FORMAT((CASE WHEN c.cshape = 2 AND e.eend IS NOT NULL THEN e.eend ELSE b.edate END),'%Y-%m-%d') edatestring + , pi.tbankuser rbankuser, pi.rbank, pi.pino, pi.rbankamt + , CAST(AES_DECRYPT(UNHEX(pi.rbankaccnum), ) AS CHAR) AS rbankaccnum + , DATE_FORMAT(f.stime, '%Y-%m-%d') zstring3, cc2.cname AS zstring0 + FROM final_scores fs + INNER JOIN lect b ON b.lectno = fs.lectno + INNER JOIN pay p ON p.payno = b.payno + INNER JOIN users u ON u.userno = b.userno + LEFT OUTER JOIN assign ua ON ua.asno = u.asno + INNER JOIN cm c ON c.cmno = b.cmno + INNER JOIN cmev d ON d.cmno = c.cmno + LEFT OUTER JOIN term t ON t.tmno = c.tmno + LEFT OUTER JOIN cg cg ON cg.cgno = c.cgno + LEFT OUTER JOIN cg pcg ON pcg.cgno = cg.pcgno + LEFT OUTER JOIN payitem pi ON pi.payno = p.payno + LEFT OUTER JOIN cminningscd e ON e.cmisno = b.cmisno + LEFT OUTER JOIN lectinning f ON f.lectno = b.lectno AND f.cmino = e.cmino + LEFT OUTER JOIN comcode cc ON cc.ccode = e.studyplace AND cc.isuse = 1 + LEFT OUTER JOIN pplog ppl ON ppl.pplno = p.pplno + LEFT OUTER JOIN comcode cc2 ON ppl.typejobitem = cc2.ccode + LEFT OUTER JOIN comcode tm ON tm.ccode = ppl.typeman + LEFT OUTER JOIN comcode te ON te.ccode = ppl.typeedu + LEFT OUTER JOIN comcode tg ON tg.ccode = ppl.typegrade + LEFT OUTER JOIN comcode tj ON tj.ccode = ppl.typejob + WHERE 1=1 + + + + + + + 0 AND fs.sd0lectcnt > 0))]]> + + + + + + + + + + + ) a + + ORDER BY a.rno + + + + + + + +