# <요청사항>

2021.11.17 박상완 (swpark@nptc.kr) 

1. 성적처리(전체) 핸드폰 검색 기능 추가 
2. 텝 별 엑셀 다운로드 추가
3. 컬럼 변경 (이름과 아이디 분리 및 핸드폰 추가)

# 커밋 파일
BO\Controllers\croomController.cs
BO\Views\croom\gradeall.cshtml
BO\Views\croom\gradeall0.cshtml
BO\Views\croom\gradeall2.cshtml
BO\Views\croom\gradeall4.cshtml
Dao\MyBatis\Maps\Grade.xml
Dao\MyBatis\Maps\Lect.xml
Model\CM.cs


# 테스트 결과 
- 이상없음

# 특이사항 및 이슈사항
- 이상없음
This commit is contained in:
swpark 2021-11-17 00:36:41 +00:00
parent a1f9152e2a
commit 93cfa94a95
8 changed files with 178 additions and 12 deletions

View File

@ -657,6 +657,7 @@ namespace NP.BO.Controllers
ht.Add("sdateall", vm.stringval8); ht.Add("sdateall", vm.stringval8);
ht.Add("edateall", vm.stringval9); ht.Add("edateall", vm.stringval9);
ht.Add("asname", vm.stringval10); ht.Add("asname", vm.stringval10);
ht.Add("mobile", vm.stringval11);
if (!string.IsNullOrEmpty(vm.stringval6)) if (!string.IsNullOrEmpty(vm.stringval6))
{ {
ht.Add(vm.stringval6, vm.stringval7); ht.Add(vm.stringval6, vm.stringval7);
@ -670,8 +671,8 @@ namespace NP.BO.Controllers
if (vm.isexceldown == 1) if (vm.isexceldown == 1)
{ {
return ExportExcel( return ExportExcel(
new String[] { "No", "운영기수", "구분", "고객사", "교육장", "과정명", "교육생(ID)","연락처", "교육시작일", "교육종료일", "진도율", "진행평가", "최종평가", "과제", "환산점수", "집합교육출석여부", "강의평가", "수료여부"}, new String[] { "No", "운영기수", "구분", "고객사", "교육장", "과정명", "교육생", "ID", "핸드폰", "교육시작일", "교육종료일", "진도율", "진행평가", "최종평가", "과제", "환산점수", "집합교육출석여부", "강의평가", "수료여부"},
new String[] { "rno", "sseqname", "isrebatename", "asname", "studyplacename", "cname", "usernameid","mobile", "sdatestr", "edatestr", "attrate", "ex0point", "ex1point", "sd0point", "tpointstr", "isoffabsstr", "rs0point", "iscompletename" }, new String[] { "rno", "sseqname", "isrebatename", "asname", "studyplacename", "cname", "username", "userid", "mobile", "sdatestr", "edatestr", "attrate", "ex0point", "ex1point", "sd0point", "tpointstr", "isoffabsstr", "rs0point", "iscompletename" },
vm.Lects, vm.Lects,
"성적처리전체" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day); "성적처리전체" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day);
} }
@ -683,6 +684,14 @@ namespace NP.BO.Controllers
ht.Add("extype", vm.tabidx == 2 ? 0 : 1); ht.Add("extype", vm.tabidx == 2 ? 0 : 1);
ht.Add("estate", vm.addstringval2); ht.Add("estate", vm.addstringval2);
vm.LectEXes = Dao.Get<LectEX>("lect.lectexes.all", ht); vm.LectEXes = Dao.Get<LectEX>("lect.lectexes.all", ht);
if (vm.isexceldown == 1)
{
return ExportExcel(
new String[] { "No", "운영기수", "구분", "고객사", "교육장", "과정명", "시험명", "교육생", "ID", "핸드폰", "교육시작일", "교육종료일", "응시일자(제출일자)","경과시간", "IP", "응시상태", "총점", "관리", "수료여부" },
new String[] { "rno", "sseq", "isrebatename", "asname", "studyplacename", "cname", "exname", "username", "userid", "mobile", "leststr", "leestrExcel", "estarteend", "eseterm", "eip", "estatename", "tpoint", "estartyn", "iscompletename" },
vm.LectEXes,
"성적처리평가" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day);
}
vm.pagetotalcount = GetCount(vm.LectEXes.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.LectEXes.FirstOrDefault());
} }
break; break;
@ -693,6 +702,15 @@ namespace NP.BO.Controllers
ht.Add("sdstate", vm.addstringval2); ht.Add("sdstate", vm.addstringval2);
ht.Add("isproduct" + (GetConfig("isstaging") == "1" ? "x" : ""), 1); ht.Add("isproduct" + (GetConfig("isstaging") == "1" ? "x" : ""), 1);
vm.LectSDs = Dao.Get<LectSD>("lect.lectsds.all", ht); vm.LectSDs = Dao.Get<LectSD>("lect.lectsds.all", ht);
/*to-do*/
if (vm.isexceldown == 1)
{
return ExportExcel(
new String[] { "No", "운영기수", "교육장", "과정명", "교육생", "ID", "핸드폰", "교육시작일", "교육종료일", "상태", "점수", "첨삭", "모사", "최근제출일(IP)", "최근평가일(IP)","수료여부" },
new String[] { "rno", "sseq", "studyplacename", "cname", "username", "userid", "mobile", "leststr", "leestrExcel", "sdstatename", "cpoint2", "feedbox", "copyratename", "submittimeip", "checktimeip", "iscompletename" },
vm.LectSDs,
"성적처리과제" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day);
}
vm.pagetotalcount = GetCount(vm.LectSDs.FirstOrDefault()); vm.pagetotalcount = GetCount(vm.LectSDs.FirstOrDefault());
} }
break; break;

View File

@ -70,6 +70,14 @@
</div> </div>
</td> </td>
</tr> </tr>
<tr>
<th>핸드폰</th>
<td>
<div class="col-md-12">
@Html.Partial("./Partial/Text", Model.stringval11, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval11", Style = "width:70%; display:inline-block;", Value = Model.stringval11, CssClass = "ff" }))
</div>
</td>
</tr>
</table> </table>
</div> </div>
</section> </section>

View File

@ -30,7 +30,9 @@
<th>고객사</th> <th>고객사</th>
<th>교육장</th> <th>교육장</th>
<th>과정명</th> <th>과정명</th>
<th>교육생(ID)</th> <th>교육생</th>
<th>ID</th>
<th>핸드폰</th>
<th>교육시작일</th> <th>교육시작일</th>
<th>교육종료일</th> <th>교육종료일</th>
<th>진도율</th> <th>진도율</th>
@ -50,7 +52,7 @@
<tr> <tr>
<td><input type="checkbox" class="autocheck" value="@d.lectno" data-userno="@d.userno" /></td> <td><input type="checkbox" class="autocheck" value="@d.lectno" data-userno="@d.userno" /></td>
<td>@d.rnorvt</td> <td>@d.rnorvt</td>
@if(d.cshape == 2) @if (d.cshape == 2)
{ {
<td>@d.sseq</td> <td>@d.sseq</td>
} }
@ -62,11 +64,13 @@
<td>@d.asname</td> <td>@d.asname</td>
<td>@d.studyplacename</td> <td>@d.studyplacename</td>
<td>@d.cname</td> <td>@d.cname</td>
<td>@d.usernameid</td> <td>@d.username</td>
<td>@d.userid</td>
<td>@d.mobile</td>
<td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td> <td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td>
@if(d.cshape == 2) @if (d.cshape == 2)
{ {
if(d.iscomplete != 1) if (d.iscomplete != 1)
{ {
<td class="link text-center"><a href="#" onclick="javascript: openScd(@d.cmno,@d.lectno,@d.cmisno);">@d.eend.ToShortDateString()</a></td> <td class="link text-center"><a href="#" onclick="javascript: openScd(@d.cmno,@d.lectno,@d.cmisno);">@d.eend.ToShortDateString()</a></td>
} }
@ -95,7 +99,9 @@
@if (d.isoffabs == 1) @if (d.isoffabs == 1)
{ {
<td class="link text-center"><a href="#" onclick="save4(@d.cmno,@d.lectno);">@d.istatusname</a></td> <td class="link text-center"><a href="#" onclick="save4(@d.cmno,@d.lectno);">@d.istatusname</a></td>
}else{ }
else
{
<td class="text-center">-</td> <td class="text-center">-</td>
} }
<td>@(d.rs0lectcnt) / @(d.rs0cnt)</td> <td>@(d.rs0lectcnt) / @(d.rs0cnt)</td>

View File

@ -8,7 +8,9 @@
<div style="padding: 10px 10px"> <div style="padding: 10px 10px">
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-응시상태;2:응시완료;1:응시중;0:미응시" }, { "name", "addstringval2" }, { "selected", Model.addstringval2 }, { "onchange", "submit()" } }) @Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-응시상태;2:응시완료;1:응시중;0:미응시" }, { "name", "addstringval2" }, { "selected", Model.addstringval2 }, { "onchange", "submit()" } })
@Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } }) @Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } })
<a href="#" onclick="javascript:exceldown('mform', '/croom/gradeall', 'tbody1', '성적처리평가');" class="btn btn-s-xs btn-success" style="margin-left: 5px; float:right;">엑셀다운로드</a>
@Html.Partial("./Partial/sembtns", "#tbody1;" + (Model.IsAdmin ? "1;1;1" : "0;0;0") + ";1;right;평가안내") @Html.Partial("./Partial/sembtns", "#tbody1;" + (Model.IsAdmin ? "1;1;1" : "0;0;0") + ";1;right;평가안내")
</div> </div>
<div class="table-responsive" id="excel1"> <div class="table-responsive" id="excel1">
<table class="table table-striped b-t b-light"> <table class="table table-striped b-t b-light">
@ -22,7 +24,9 @@
<th>교육장</th> <th>교육장</th>
<th>과정명</th> <th>과정명</th>
<th>시험명</th> <th>시험명</th>
<th>교육생(ID)</th> <th>교육생</th>
<th>ID</th>
<th>핸드폰</th>
<th>교육시작일</th> <th>교육시작일</th>
<th>교육종료일</th> <th>교육종료일</th>
<th>응시일자<br />(제출일자)</th> <th>응시일자<br />(제출일자)</th>
@ -53,7 +57,10 @@
<td>@d.studyplacename</td> <td>@d.studyplacename</td>
<td>@d.cname</td> <td>@d.cname</td>
<td>@d.exname</td> <td>@d.exname</td>
<td>@d.usernameid</td> <td>@d.username</td>
<td>@d.userid</td>
<td>@d.mobile</td>
<td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td> <td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td>
@if (d.cshape == 2) @if (d.cshape == 2)
{ {

View File

@ -7,6 +7,7 @@
<div style="padding: 10px 10px"> <div style="padding: 10px 10px">
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-응시상태;1:제출;0:미제출" }, { "name", "addstringval2" }, { "selected", Model.addstringval2}, { "onchange", "findme()" } }) @Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":-응시상태;1:제출;0:미제출" }, { "name", "addstringval2" }, { "selected", Model.addstringval2}, { "onchange", "findme()" } })
@Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } }) @Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } })
<a href="#" onclick="javascript:exceldown('mform', '/croom/gradeall', 'tbody1', '성적처리과제');" class="btn btn-s-xs btn-success" style="margin-left: 5px; float:right;">엑셀다운로드</a>
@Html.Partial("./Partial/sembtns", "#tbody1;" + (Model.IsAdmin ? "1;11;" : "0;0;0") + ";1;right;평가안내") @Html.Partial("./Partial/sembtns", "#tbody1;" + (Model.IsAdmin ? "1;11;" : "0;0;0") + ";1;right;평가안내")
</div> </div>
<div class="table-responsive" id="excel1"> <div class="table-responsive" id="excel1">
@ -18,7 +19,9 @@
<th>운영기수</th> <th>운영기수</th>
<th>교육장</th> <th>교육장</th>
<th>과정명</th> <th>과정명</th>
<th>교육생(ID)</th> <th>교육생</th>
<th>ID</th>
<th>핸드폰</th>
<th>교육시작일</th> <th>교육시작일</th>
<th>교육종료일</th> <th>교육종료일</th>
<th>상태</th> <th>상태</th>
@ -46,7 +49,9 @@
} }
<td>@d.studyplacename</td> <td>@d.studyplacename</td>
<td>@d.cname</td> <td>@d.cname</td>
<td>@d.usernameid</td> <td>@d.username</td>
<td>@d.userid</td>
<td>@d.mobile</td>
<td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td> <td>@((d.cshape == 0 && d.isrebate == 0 ? d.payoktime : d.sdate).Value.ToShortDateString())</td>
@if (d.cshape == 2) @if (d.cshape == 2)
{ {

View File

@ -300,6 +300,7 @@
<isNotEmpty property="edateall" prepend="and">(case when c.cshape = 2 then e.eend else b.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty> <isNotEmpty property="edateall" prepend="and">(case when c.cshape = 2 then e.eend else b.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty>
<isNotNull property="asname" prepend="and">ua.asname like concat('%',#asname#,'%')</isNotNull> <isNotNull property="asname" prepend="and">ua.asname like concat('%',#asname#,'%')</isNotNull>
<isNotNull property="edate" prepend="and">date_format((case when c.cshape = 2 and e.eend is not null then e.eend else b.edate end),'%Y-%m-%d') = #edate#</isNotNull> <isNotNull property="edate" prepend="and">date_format((case when c.cshape = 2 and e.eend is not null then e.eend else b.edate end),'%Y-%m-%d') = #edate#</isNotNull>
<isNotNull property="mobile" prepend="and">cast(AES_DECRYPT(UNHEX(u.mobile), 'np123@!' ) as char) like concat('%',#mobile#,'%')</isNotNull>
</dynamic> </dynamic>
) a ) a
<include refid="sql.pagedynamic"></include> <include refid="sql.pagedynamic"></include>

View File

@ -845,6 +845,7 @@
,a.iscomplete ,a.iscomplete
,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">d.username</isNull>) rno ,row_number() over(order by <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">d.username</isNull>) rno
,count(a.cdt) over() pagetotalcount ,count(a.cdt) over() pagetotalcount
,cast(AES_DECRYPT(UNHEX(d.mobile), 'np123@!' ) as char) as mobile
from lect a from lect a
inner join cmex b on b.isdel=0 and b.cmno = a.cmno inner join cmex b on b.isdel=0 and b.cmno = a.cmno
inner join cm b2 on b2.cmno = b.cmno inner join cm b2 on b2.cmno = b.cmno
@ -878,6 +879,7 @@
<isNotEmpty property="sdateall">and (case when b2.cshape = 0 and a.isrebate = 0 then p.payoktime else a.sdate end) &gt;= date_format(#sdateall#,'%Y-%m-%d 00:00:00')</isNotEmpty> <isNotEmpty property="sdateall">and (case when b2.cshape = 0 and a.isrebate = 0 then p.payoktime else a.sdate end) &gt;= date_format(#sdateall#,'%Y-%m-%d 00:00:00')</isNotEmpty>
<isNotEmpty property="edateall">and (case when b2.cshape = 2 then f.eend else a.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty> <isNotEmpty property="edateall">and (case when b2.cshape = 2 then f.eend else a.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty>
<isNotEmpty property="asname">and e.asname like concat('%',#asname#,'%')</isNotEmpty> <isNotEmpty property="asname">and e.asname like concat('%',#asname#,'%')</isNotEmpty>
<isNotNull property="mobile" prepend="and">cast(AES_DECRYPT(UNHEX(d.mobile), 'np123@!' ) as char) like concat('%',#mobile#,'%')</isNotNull>
) a ) a
<include refid="sql.pagedynamic"></include> <include refid="sql.pagedynamic"></include>
order by a.rno order by a.rno
@ -1083,6 +1085,7 @@
,b.sdno,b.tpoint ,b.sdno,b.tpoint
,c.atext<isNotNull property="isproduct">,round((f.MAX_SCORE/100)) copyrate</isNotNull>,c.iscopy,c.cpoint,c.feedb,c.submittime,c.submitip,c.checktime,c.checkip ,c.atext<isNotNull property="isproduct">,round((f.MAX_SCORE/100)) copyrate</isNotNull>,c.iscopy,c.cpoint,c.feedb,c.submittime,c.submitip,c.checktime,c.checkip
,d.username,d.userid,d.usertype ,d.username,d.userid,d.usertype
,cast(AES_DECRYPT(UNHEX(d.mobile), 'np123@!' ) as char) as mobile
,e.asname ,e.asname
,h.cmisno,h.estart lestart,h.eend leend,h.sseq ,h.cmisno,h.estart lestart,h.eend leend,h.sseq
,i.cname studyplacename ,i.cname studyplacename
@ -1124,6 +1127,7 @@
<isNotEmpty property="sdateall">and (case when g.cshape = 0 and a.isrebate = 0 then p.payoktime else a.sdate end) &gt;= date_format(#sdateall#,'%Y-%m-%d 00:00:00')</isNotEmpty> <isNotEmpty property="sdateall">and (case when g.cshape = 0 and a.isrebate = 0 then p.payoktime else a.sdate end) &gt;= date_format(#sdateall#,'%Y-%m-%d 00:00:00')</isNotEmpty>
<isNotEmpty property="edateall">and (case when g.cshape = 2 then h.eend else a.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty> <isNotEmpty property="edateall">and (case when g.cshape = 2 then h.eend else a.edate end) &lt;= date_format(#edateall#,'%Y-%m-%d 23:59:59')</isNotEmpty>
<isNotNull property="asname">and e.asname like concat('%',#asname#,'%')</isNotNull> <isNotNull property="asname">and e.asname like concat('%',#asname#,'%')</isNotNull>
<isNotNull property="mobile" prepend="and">cast(AES_DECRYPT(UNHEX(d.mobile), 'np123@!' ) as char) like concat('%',#mobile#,'%')</isNotNull>
) a ) a
<include refid="sql.pagedynamic"></include> <include refid="sql.pagedynamic"></include>
order by rno order by rno

View File

@ -1222,6 +1222,7 @@ namespace NP.Model
/// 교육일정종료일 /// 교육일정종료일
/// </summary> /// </summary>
public DateTime eend { get; set; } public DateTime eend { get; set; }
/// <summary> /// <summary>
/// 직위 /// 직위
/// </summary> /// </summary>
@ -3248,6 +3249,14 @@ namespace NP.Model
/// 응시시작 /// 응시시작
/// </summary> /// </summary>
public DateTime? estart { get; set; } public DateTime? estart { get; set; }
public String estartymd
{
get
{
return estart == null ? "" : estart.Value.ToString("yyyy-MM-dd");
}
}
public String estartymdhm public String estartymdhm
{ {
get get
@ -3259,6 +3268,14 @@ namespace NP.Model
/// 응시종료 /// 응시종료
/// </summary> /// </summary>
public DateTime? eend { get; set; } public DateTime? eend { get; set; }
public String eendymd
{
get
{
return eend == null ? "" : eend.Value.ToString("yyyy-MM-dd");
}
}
public String eendymdhm public String eendymdhm
{ {
get get
@ -3273,6 +3290,35 @@ namespace NP.Model
return estart == null || eend == null ? "" : string.Format("{0}분", Convert.ToInt32((eend - estart).Value.TotalMinutes)); return estart == null || eend == null ? "" : string.Format("{0}분", Convert.ToInt32((eend - estart).Value.TotalMinutes));
} }
} }
/// <summary>
/// 응시일자(제츨일자)
/// </summary>
public String estarteend {
get
{
String estartymdhm = estart == null ? "" : estart.Value.ToString("yyyy-MM-dd HH:mm");
String eendymdhm = eend == null ? "" : eend.Value.ToString("yyyy-MM-dd HH:mm");
return string.Format("{0}({1})", estartymdhm, eendymdhm);
}
}
/// <summary>
/// 관리 - 재응시 여부
/// </summary>
public String estartyn
{
get
{
return estart == null ? "" : "재응시";
}
}
/// <summary> /// <summary>
/// 총점 /// 총점
/// </summary> /// </summary>
@ -3307,6 +3353,10 @@ namespace NP.Model
} }
public String asname { get; set; } public String asname { get; set; }
public String username { get; set; } public String username { get; set; }
/// <summary>
/// 핸드폰 번호
/// </summary>
public String mobile { get; set; }
public String usernameid public String usernameid
{ {
get get
@ -3401,6 +3451,36 @@ namespace NP.Model
} }
} }
} }
public String leestrExcel
{
get
{
if (cshape == 2)
{
if (iscomplete != null)
{
return leend.ToShortDateString();
}
else
{
return "-";
}
}
else
{
if (edate != null)
{
return edate.Value.ToShortDateString();
}
else
{
return "-";
}
}
}
}
public int usertype { get; set; } public int usertype { get; set; }
public String scomplete public String scomplete
{ {
@ -3603,6 +3683,10 @@ namespace NP.Model
} }
public String asname { get; set; } public String asname { get; set; }
public String username { get; set; } public String username { get; set; }
/// <summary>
/// 핸드폰 번호
/// </summary>
public String mobile { get; set; }
public String usernameid public String usernameid
{ {
get get
@ -3722,6 +3806,39 @@ namespace NP.Model
} }
} }
public int? isproduct { get; set; } public int? isproduct { get; set; }
/// <summary>
/// (엑셀) 교육종료일
/// </summary>
public String leestrExcel
{
get
{
if (cshape == 2)
{
if (leend != null)
{
return leend.ToShortDateString();
}
else
{
return "-";
}
}
else
{
if (edate != null)
{
return edate.Value.ToShortDateString();
}
else
{
return "-";
}
}
}
}
} }
/// <summary> /// <summary>
/// 토론글 /// 토론글