2020-10-12 14:39:23 +09:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Web ;
using System.Web.Mvc ;
using NP.Model ;
using System.Security.Claims ;
using System.Collections ;
namespace NP.BO.Controllers
{
//[AllowAnonymous]
public class AccountController : NP . Base . BaseController
{
public ActionResult GetEnc ( String d )
{
ViewBag . enc = NP . Base . Lib . KISA_SHA256 . SHA256Hash ( d ) ;
return View ( ) ;
}
//[AllowAnonymous]
public ActionResult Index ( VMUser vm , bool istimeout = false )
{
2022-04-01 14:06:21 +09:00
int userno = SUserInfo ! = null ? SUserInfo . UserNo : 0 ;
if ( userno > 0 )
2020-10-12 14:39:23 +09:00
{
2022-04-01 14:06:21 +09:00
Response . Redirect ( "~/" ) ;
2020-10-12 14:39:23 +09:00
}
else
{
2022-04-01 14:06:21 +09:00
ViewBag . IsTimeOut = istimeout ;
if ( Request . IsAjaxRequest ( ) )
{
return JsonError < String > ( Base . ENUM . JSONCode . Error , "403:" + Request . Url . AbsolutePath , "0112" ) ;
}
else
{
vm . SavedId = CookieGet ( "SavedId" , "" ) ;
}
// 로그인 실패 카운트 초기화
vm . logincnt = 0 ;
2020-10-12 14:39:23 +09:00
}
return View ( vm ) ;
}
public JsonResult PassGet ( String pw )
{
return Json ( NP . Base . Lib . KISA_SHA256 . SHA256Hash ( pw ) , JsonRequestBehavior . AllowGet ) ;
}
[HttpPost]
public ActionResult Index ( VMUser vm , string returnUrl = null )
{
2021-11-29 15:11:55 +09:00
2020-10-12 14:39:23 +09:00
ViewData [ "ReturnUrl" ] = returnUrl ;
if ( ! string . IsNullOrEmpty ( vm . SavedId ) )
{
CookieSet ( "savedid" , vm . User . userid ) ;
}
else
{
CookieClear ( "savedid" ) ;
}
SUserInfo . LoginIP = GetUserIP ( ) ;
var ht = InitHash ( ) ;
Int64 ? AdminNo = null ;
ht . Add ( "userno" , AdminNo ) ;
ht . Add ( "loginsite" , 0 ) ;
ht . Add ( "loginstatus" , 3 ) ;
Int16 LoginStatus = 3 ;
if ( vm . User ! = null & & ! string . IsNullOrEmpty ( vm . User . userid ) & & ! string . IsNullOrEmpty ( vm . User . userpass ) & & ! vm . User . userid . Trim ( ) . Equals ( "" ) & & ! vm . User . userpass . Trim ( ) . Equals ( "" ) )
{
var p = new Hashtable { { "userid" , vm . User . userid } , { "password" , NP . Base . Lib . KISA_SHA256 . SHA256Hash ( vm . User . userpass ) } , { "uip" , SUserInfo . LoginIP } } ;
var u = Dao . Get < Users > ( "users.adminlogin" , p ) . FirstOrDefault ( ) ;
if ( u ! = null )
{
LoginStatus = 1 ;
ht [ "userno" ] = u . userno ;
2021-11-29 15:11:55 +09:00
// 최근로그인시점 + 90일 일 경우, 비활성처리
if ( DateTime . Now > = u . logintime . AddMonths ( 3 ) )
{
Random r = new Random ( ) ;
var loginkey = r . Next ( 10000000 , 99999999 ) ;
Dao . Save ( "users.loginkey" , new Hashtable ( ) { { "userno" , u . userno } , { "loginkey" , loginkey } } ) ;
Dao . Save ( "users.disable" , new Hashtable ( ) { { "userno" , u . userno } } ) ;
u . status = 9 ;
}
2020-10-12 14:39:23 +09:00
//vm.IntranetIPs = Dao.Get<IntranetIP>("users.intranetip", new Hashtable() { {"IsActive", 1 } });
2021-11-29 15:11:55 +09:00
//0: 정상(로그인성공), 1: 정상(외부아이피), 2: 비밀번호오류, 3: 아이디오류, 4: 외부아이피차단, 5: 퇴사자, 6: 사용안함, 7: 크래킹공격, 8:비활성상태
if ( u . status ! = 1 ) {
if ( u . status = = 9 ) {
LoginStatus = 8 ;
} else
{
LoginStatus = 6 ;
}
}
2020-10-12 14:39:23 +09:00
//else if (u.RetireDate != null) { LoginStatus = 5; }
2025-09-25 17:05:25 +09:00
//else if (!"192.168.1.3,127.0.0.1,192.168.0.87,192.168.0.56,1.214.45.218".Contains(SUserInfo.LoginIP) && !u.userpass.Equals(NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass.Trim()))) {
else if ( ! u . userpass . Equals ( NP . Base . Lib . KISA_SHA256 . SHA256Hash ( vm . User . userpass . Trim ( ) ) ) )
{
2021-11-29 15:11:55 +09:00
LoginStatus = 2 ;
// 로그인 실패 카운트 증가
vm . logincnt + + ;
// 로그인 비밀번호 5번 실패시, 비활성화 처리
if ( vm . logincnt > 4 ) {
Dao . Save ( "users.disable" , new Hashtable ( ) { { "userno" , u . userno } } ) ;
}
}
2020-10-12 14:39:23 +09:00
else
{
//var isIntranet = false;
var myips = SUserInfo . LoginIP . Split ( '.' ) . Select ( s = > Convert . ToInt32 ( s ) ) ;
//foreach(var ip in vm.IntranetIPs)
//{
// if (Convert.ToInt32(ip.SIP.Split('.')[0]) <= myips.First() && Convert.ToInt32(ip.EIP.Split('.')[0]) >= myips.First() &&
// Convert.ToInt32(ip.SIP.Split('.')[1]) <= myips.Skip(1).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[1]) >= myips.Skip(1).Take(1).First() &&
// Convert.ToInt32(ip.SIP.Split('.')[2]) <= myips.Skip(2).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[2]) >= myips.Skip(2).Take(1).First() &&
// Convert.ToInt32(ip.SIP.Split('.')[3]) <= myips.Skip(3).Take(1).First() && Convert.ToInt32(ip.EIP.Split('.')[3]) >= myips.Skip(3).Take(1).First())
// {
// isIntranet = true;
// break;
// }
//}
//if (isIntranet) { LoginStatus = 0; }
//else if (u.Security == 1 && !"127.0.0.1,59.150.105.198".Contains(SUserInfo.LoginIP)) { LoginStatus = 4; }
LoginStatus = 0 ;
}
2021-11-29 15:11:55 +09:00
2020-10-12 14:39:23 +09:00
ht [ "loginstatus" ] = LoginStatus ;
Dao . Insert ( "users.loginlog" , ht ) ;
2021-11-29 15:11:55 +09:00
2020-10-12 14:39:23 +09:00
if ( LoginStatus < 2 )
{
Random r = new Random ( ) ;
var loginkey = r . Next ( 10000000 , 99999999 ) ;
Dao . Save ( "users.loginkey" , new Hashtable ( ) { { "userno" , u . userno } , { "loginkey" , loginkey } } ) ;
SUserInfo . LoginKey = loginkey ;
SUserInfo . UserNo = u . userno ;
SUserInfo . UserName = u . username ;
SUserInfo . UserType = u . usertype ;
SUserInfo . ASNo = u . asno ? ? 0 ;
SUserInfo . UserInfo = u . usertype + "." + u . userno ;
base . AuthCookie ( false ) ;
//if ("/".Equals(returnUrl ?? "/"))
//{
if ( SUserInfo . UserType = = 11 )
{
return RedirectToLocal ( "/croom/grades" ) ;
}
else if ( vm . IsSiteAdmin )
{
return RedirectToLocal ( "/user/users" ) ;
}
return RedirectToLocal ( "/" ) ;
//}
//else
//{
// return RedirectToLocal(returnUrl);
//}
}
}
else
{
Dao . Insert ( "users.loginlog" , ht ) ;
}
}
else
{
ht [ "LoginLog" ] = vm . User . userid ;
ht [ "LoginStatus" ] = 7 ;
Dao . Insert ( "users.loginlog" , ht ) ;
}
vm . LoginFailedId = LoginStatus ;
vm . IsLoginFailed = true ;
return View ( vm ) ;
}
//[Authorize]
public ActionResult Logout ( )
{
//HttpContext.Session.Clear();
//System.Web.Security.FormsAuthentication.SignOut();
//return RedirectToAction(nameof(AccountController.Index), "Account");
//HttpContext.Session.Clear();
//System.Web.Security.FormsAuthentication.SignOut();
//Response.Cookies[SUI].Expires = DateTime.Now.AddDays(-1);
CookieClear ( null , true ) ;
return Redirect ( "/Account/Index" ) ;
}
private ActionResult RedirectToLocal ( string returnUrl )
{
if ( Url . IsLocalUrl ( returnUrl ) )
{
return Redirect ( returnUrl ) ;
}
else
{
return RedirectToAction ( nameof ( HomeController . Index ) , "Home" ) ;
}
}
[AllowAnonymous]
public JsonResult NoPermit ( int _code = 9999 , String _msg = "권한이 없습니다." )
{
return Json ( new JsonRtn ( ) { code = _code , msg = _msg } , JsonRequestBehavior . AllowGet ) ;
}
[AllowAnonymous]
public JsonResult NoAuth ( int _code = 9999 , String _msg = "인증이 없습니다." )
{
return Json ( new JsonRtn ( ) { code = _code , msg = _msg } , JsonRequestBehavior . AllowGet ) ;
}
[AllowAnonymous]
public ActionResult Error ( NP . Model . JsonRtn vm = null , int _code = 0 )
{
vm = vm ? ? new JsonRtn ( ) { } ;
vm . msg = vm . msg ? ? "503" ;
Exception exception = Server . GetLastError ( ) ;
Response . Clear ( ) ;
ViewBag . ErrorMsg = "" ;
HttpException httpException = ( HttpException ) exception ;
if ( httpException ! = null )
{
NP . Base . Logger . Error ( "ApplicationError" + vm . msg , exception ) ;
}
Server . ClearError ( ) ;
if ( Request . IsAjaxRequest ( ) )
{
if ( _code = = 9991 )
{
return JsonError < String > ( Base . ENUM . JSONCode . TimeOut , vm . msg + ":" + Request . Url . AbsolutePath + ( exception ? ? new Exception ( ) ) . Message , "/Account/Index" ) ;
}
return JsonError < Exception > ( Base . ENUM . JSONCode . Error , vm . msg + ":" + Request . Url . AbsolutePath + ( exception ? ? new Exception ( ) ) . Message , exception ) ;
}
return View ( "Error" ) ;
}
[AllowAnonymous]
public ActionResult Error403 ( NP . Model . JsonRtn vm )
{
vm . msg = "403" ;
return Error ( vm ) ;
}
[AllowAnonymous]
public ActionResult Error404 ( NP . Model . JsonRtn vm )
{
vm . msg = "404" + ( Request . IsLocal ? Request . Url . Query : "" ) ;
return Error ( vm ) ;
}
[AllowAnonymous]
public ActionResult Error500 ( NP . Model . JsonRtn vm )
{
vm . msg = "500" ;
return Error ( vm ) ;
}
public ActionResult Status335 ( String sss )
{
//if ("ynpartners123".Equals(sss))
//{
// var users = Dao.Get<Users>("users.get335", new Hashtable() { });
// var em = Dao.Get<MailTP>("mm.mailtp.get", 2).FirstOrDefault();
// if (em != null)
// {
// foreach (var u in users)
// {
2020-10-12 15:32:10 +09:00
// SendEmail(999, u.email, "", "영남건설기술교육원", "[영남건설기술교육원] 휴면계정알림", em.MHtml.Replace("^회원명^", u.username).Replace("../img/", GetConfig("fronturl") + "/img/").Replace("^아이디^", u.email).Replace("^fronturl^", GetConfig("fronturl")), "", "");
2020-10-12 14:39:23 +09:00
// }
// }
//}
return null ;
}
public ActionResult AdminEE ( int un , int eek , int at , int an )
{
if ( SUserInfo . IsAdmin | | SUserInfo . IsSiteAdmin )
{
Random r = new Random ( ) ;
var loginkey = r . Next ( 10000000 , 99999999 ) ;
var u = Dao . Get < Users > ( "users.eecall" , new Hashtable ( ) { { "userno" , un } , { "eek" , eek } , { "loginkey" , loginkey } } ) . FirstOrDefault ( ) ;
if ( u ! = null & & u . usertype = = 11 )
{
var cusertype = SUserInfo . UserType ;
var cuserno = SUserInfo . UserNo ;
CookieClear ( null , true ) ;
SUserInfo . UserNo = u . userno ;
SUserInfo . UserName = u . username ;
SUserInfo . UserType = u . usertype ;
SUserInfo . ASNo = u . asno ? ? 0 ;
SUserInfo . UserInfo = cusertype + "." + cuserno ;
SUserInfo . LoginIP = GetUserIP ( ) ;
SUserInfo . LoginKey = loginkey ;
base . AuthCookie ( false ) ;
return RedirectToAction ( "Index" , "Home" ) ;
}
}
return RedirectToAction ( "Index" ) ;
}
public ActionResult MenuReset ( string ddd )
{
if ( "rhksflwkfhrmdls999" . Equals ( ddd ) )
{
ResetMenuBase ( ) ;
}
return RedirectToAction ( "Index" ) ;
}
/// <summary>
/// 윈도우스케쥴러가 1시간에 한 번씩 호출
/// </summary>
/// <param name="sss"></param>
/// <returns></returns>
public ActionResult Encourage ( String sss , int test = 0 )
{
if ( test = = 1 )
{
SetError ( "encouragetest: " + DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) ) ;
}
else
{
var m = new Memo ( ) { Users = new List < MemoUser > ( ) { } } ;
if ( "nptech1234" . Equals ( sss ) )
{
//시간불규칙 대비해야 함
2022-08-24 16:56:17 +09:00
Hashtable hsData = new Hashtable ( ) ;
hsData . Add ( "dtime" , DateTime . Now . Minute > 30 ? ( DateTime . Now . Hour + 1 ) : DateTime . Now . Hour ) ;
hsData . Add ( "uno" , SUserInfo . UserNo ) ;
hsData . Add ( "uip" , GetUserIP ( ) ) ;
var lects = Dao . Get < SCDLect > ( "lect.encourages" , hsData ) ;
2020-10-12 14:39:23 +09:00
//1~7. 온라인/혼합 출석 80% 미만, 진행평가, 최종평가, 과제, 토론, 강의평가 미참여
{
foreach ( var u in lects . Where ( w = > w . scdno < 8 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
2020-12-11 15:31:15 +09:00
uno = SUserInfo . UserNo ,
uip = GetUserIP ( ) ,
2020-10-12 14:39:23 +09:00
smstype = "A" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
2021-11-10 08:50:02 +09:00
title = "[영남건설기술교육원] 교육종료일 안내" ,
2020-10-12 14:39:23 +09:00
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2020-10-12 15:32:10 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n[{0}]님이 수강중인 [{1}] 강좌의 교육 종료일이 {2}일 남았습니다. 종료되기전에 서둘러 " +
2021-11-15 13:02:49 +09:00
( u . scdno < 3 ? "학습을 진행" : u . scdno = = 3 ? "진행평가에" : u . scdno = = 4 ? "최종평가에" : u . scdno = = 5 ? "과제를 제출" : u . scdno = = 6 ? "토론에 참여" : u . scdno = = 7 ? "강의평가에 참여" : "-" ) + "해주세요.\n\n☞사이트 : https://www.cte.or.kr/" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . dday )
} ) ;
}
2022-08-24 16:56:17 +09:00
2020-10-12 14:39:23 +09:00
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
2021-11-10 08:50:02 +09:00
SaveTalk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage001" ) ;
2020-10-12 14:39:23 +09:00
m . Users . Clear ( ) ;
}
2020-12-11 15:31:15 +09:00
foreach ( var u in lects . Where ( w = > w . scdno < 8 & & w . issms = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "S" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
2021-11-10 08:50:02 +09:00
title = "[영남건설기술교육원] 교육종료일 안내" ,
2020-12-11 15:31:15 +09:00
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n[{0}]님이 수강중인 [{1}] 강좌의 교육 종료일이 {2}일 남았습니다. 종료되기전에 서둘러 " +
2021-11-15 13:02:49 +09:00
( u . scdno < 3 ? "학습을 진행" : u . scdno = = 3 ? "진행평가에" : u . scdno = = 4 ? "최종평가에" : u . scdno = = 5 ? "과제를 제출" : u . scdno = = 6 ? "토론에 참여" : u . scdno = = 7 ? "강의평가에 참여" : "-" ) + "해주세요.\n\n☞사이트 : https://www.cte.or.kr/" ,
2020-12-11 15:31:15 +09:00
u . username , u . cname , u . dday )
} ) ;
}
2022-08-24 16:56:17 +09:00
2020-12-11 15:31:15 +09:00
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
SaveSmsMulti ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) ) ;
m . Users . Clear ( ) ;
}
2020-10-12 14:39:23 +09:00
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
2021-11-15 13:02:49 +09:00
foreach ( var u in lects . Where ( w = > w . scdno < 8 & & w . isemail = = 1 ) )
2020-10-12 14:39:23 +09:00
{
if ( IsEmail ( u . email ) )
{
2021-11-10 08:50:02 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 교육종료일 안내" ,
2020-10-12 15:32:10 +09:00
string . Format ( "영남건설기술교육원입니다.<br><br>[{0}]님이 수강중인 [{1}] 강좌의 교육 종료일이 {2}일 남았습니다. 종료되기전에 서둘러 " +
2021-11-15 13:02:49 +09:00
( u . scdno < 3 ? "학습을 진행" : u . scdno = = 3 ? "진행평가에" : u . scdno = = 4 ? "최종평가에" : u . scdno = = 5 ? "과제를 제출" : u . scdno = = 6 ? "토론에 참여" : u . scdno = = 7 ? "강의평가에 참여" : "-" ) + " 진행해주세요.<br><br>☞사이트 : https://www.cte.or.kr/" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . dday ) ) ;
}
}
}
2022-08-24 16:56:17 +09:00
2020-10-12 14:39:23 +09:00
//8. 오프라인 출석
{
foreach ( var u in lects . Where ( w = > w . scdno = = 8 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "A" ,
2021-11-10 08:50:02 +09:00
title = "[영남건설기술교육원] 교육종료일 안내" ,
2020-10-12 14:39:23 +09:00
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2021-09-10 14:02:05 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 신청중인 [{1}] 강좌의 교육이 [{2}]에 {3}에서 시작됩니다.\n\n☞사이트 : https://www.cte.or.kr/" ,
2021-11-15 13:02:49 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd" ) , u . studyplace )
2020-10-12 14:39:23 +09:00
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
2021-11-10 08:50:02 +09:00
SaveTalk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage007" ) ;
2020-10-12 14:39:23 +09:00
m . Users . Clear ( ) ;
}
2020-12-11 15:31:15 +09:00
foreach ( var u in lects . Where ( w = > w . scdno = = 8 & & w . issms = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "S" ,
2021-11-10 08:50:02 +09:00
title = "[영남건설기술교육원] 교육종료일 안내" ,
2020-12-11 15:31:15 +09:00
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2021-09-10 14:02:05 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 신청중인 [{1}] 강좌의 교육이 [{2}]에 {3}에서 시작됩니다.\n\n☞사이트 : https://www.cte.or.kr/" ,
2021-11-15 13:02:49 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd" ) , u . studyplace )
2020-12-11 15:31:15 +09:00
} ) ;
}
2022-08-24 16:56:17 +09:00
2020-12-11 15:31:15 +09:00
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
SaveSmsMulti ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) ) ;
m . Users . Clear ( ) ;
}
2020-10-12 14:39:23 +09:00
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
foreach ( var u in lects . Where ( w = > w . scdno = = 8 & & w . isemail = = 1 ) )
{
if ( IsEmail ( u . email ) )
{
2021-11-10 08:50:02 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 교육종료일 안내" ,
2021-09-10 14:02:05 +09:00
string . Format ( "영남건설기술교육원입니다.<br><br>{0}님이 신청중인 [{1}] 강좌의 교육이 [{2}]에 {3}에서 시작됩니다.<br><br>☞사이트 : https://www.cte.or.kr/" ,
2021-11-15 13:02:49 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd" ) , u . studyplace ) ) ;
2020-10-12 14:39:23 +09:00
}
}
}
//9. 자격검정 시험
{
foreach ( var u in lects . Where ( w = > w . scdno = = 9 & & w . istalk = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "A" ,
2020-12-10 10:57:07 +09:00
title = "[영남건설기술교육원] 진행평가 참여 알림" ,
2020-10-12 14:39:23 +09:00
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2021-09-10 14:02:05 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 신청중인 [{1}] 자격검정이 [{2}]에 {3}에서 이뤄질 예정입니다.\n\n☞사이트: https://www.cte.or.kr/" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd HH:mm" ) , u . place )
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
2021-11-10 08:50:02 +09:00
SaveTalk ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) , "encourage008" ) ;
2020-10-12 14:39:23 +09:00
m . Users . Clear ( ) ;
}
2020-12-11 15:31:15 +09:00
foreach ( var u in lects . Where ( w = > w . scdno = = 9 & & w . issms = = 1 ) )
{
m . Users . Add ( new MemoUser ( )
{
userno = u . userno ,
smstype = "S" ,
title = "[영남건설기술교육원] 진행평가 참여 알림" ,
isok = string . IsNullOrEmpty ( u . mobile ) ? - 1 : 1 ,
mobile = ( u . mobile ? ? "" ) . Replace ( "-" , "" ) ,
2021-09-10 14:02:05 +09:00
mcontents = string . Format ( "영남건설기술교육원입니다.\n\n{0}님이 신청중인 [{1}] 자격검정이 [{2}]에 {3}에서 이뤄질 예정입니다.\n\n☞사이트: https://www.cte.or.kr/" ,
2020-12-11 15:31:15 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd HH:mm" ) , u . place )
} ) ;
}
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
SaveSmsMulti ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) ) ;
m . Users . Clear ( ) ;
}
2020-10-12 14:39:23 +09:00
var masteremail = GetConfig ( "masteremail" ) ;
var senderemail = masteremail . Split ( ';' ) [ 0 ] ;
foreach ( var u in lects . Where ( w = > w . scdno = = 9 & & w . isemail = = 1 ) )
{
if ( IsEmail ( u . email ) )
{
2020-10-12 15:32:10 +09:00
SendEmail ( masteremail . Split ( ';' ) [ 1 ] , GetInt ( masteremail . Split ( ';' ) [ 2 ] ) , masteremail . Split ( ';' ) [ 3 ] , masteremail . Split ( ';' ) [ 4 ] , 999 , u . email , senderemail , "[영남건설기술교육원]" , "[영남건설기술교육원] 진행평가 참여 알림" ,
2021-09-10 14:02:05 +09:00
string . Format ( "영남건설기술교육원입니다.<br><br>{0}님이 수강중인 [{1}] 자격검정이 [{2}]에 {3}에서 이뤄질 예정입니다.<br><br>☞사이트: https://www.cte.or.kr/" ,
2020-10-12 14:39:23 +09:00
u . username , u . cname , u . stime . ToString ( "yyyy-MM-dd HH:mm" ) , u . place ) ) ;
}
}
}
}
}
return null ;
}
2022-01-06 15:27:24 +09:00
/// <summary>
/// 윈도우스케쥴러 매일 새벽 4 시
/// 휴면, 탈퇴처리전 메시지
/// </summary>
/// <param name="sss"></param>
/// <param name="time"></param>
/// <param name="test"></param>
/// <returns></returns>
public ActionResult Dormant ( String sss , String time , int test = 0 )
{
if ( test = = 1 )
{
SetError ( "encouragetest: " + DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) ) ;
}
else {
if ( "nptech1234" . Equals ( sss ) )
{
// 조회시점 => (휴면테이블.cdt + 1년) 인 컬럼
if ( time = = "0400" )
{
Dao . Save ( "users.dormant.del" , new Hashtable ( ) { { "uno" , SUserInfo . UserNo } , { "uip" , GetUserIP ( ) } } ) ;
}
// 조회시점 => (최근로그인일시 + 1년) 인 컬럼 (휴먼 테이블에 저장)
else if ( time = = "0430" )
{
Dao . Save ( "users.dormant.insert" , new Hashtable ( ) { { "uno" , SUserInfo . UserNo } , { "uip" , GetUserIP ( ) } } ) ;
}
// 조회시점 = (휴면테이블.cdt + 335일)<년월일> 인 컬럼
else if ( time = = "1000" )
{
var m = new Memo ( ) { Users = new List < MemoUser > ( ) { } } ;
var select_del = Dao . Get < Data > ( "users.dormants.del" , new Hashtable ( ) { { "uno" , SUserInfo . UserNo } , { "uip" , GetUserIP ( ) } } ) ;
foreach ( var u in select_del . Where ( w = > w . intval = = 1 ) )
{
if ( ! string . IsNullOrEmpty ( u . strval2 ) )
{
/ *
* SaveSmsMulti 함 수 사 용 - > 메 시 지 정 보 sms 테 이 블 에 저 장 , 모 니 터 링 테 이 블 mts_sms_msg 에 저 장
* /
m . Users . Add ( new MemoUser ( )
{
userno = u . longval ,
smstype = "S" ,
isok = string . IsNullOrEmpty ( u . strval2 ) ? - 1 : 1 ,
mcontents = string . Format ( "[영남건설기술교육원] 장기미접속 회원ID 삭제안내\n\n " +
"안녕하세요 회원님, 영남건설기술교육원은 소중한 회원님의 개인정보 보호를 위해 회원이 2년간 로그인하지 않는 경우," +
"회원탈퇴 처리 및 개인정보가 파기됨을 안내해드립니다.\n\n" +
"회원계정 : {0}\n" +
"적용일 : {1}\n\n" +
"서비스를 계속 이용하시려면, 위 적용일 이전에 로그인을 진행해주세요!" ,
u . strval , u . time . ToString ( "yyyy년 MM월 dd일" ) )
} ) ;
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
SaveSmsMulti ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) ) ;
m . Users . Clear ( ) ;
}
/ *
SendSms ( u . strval2 , null , null , string . Format ( "[영남건설기술교육원] 장기미접속 회원ID 삭제안내\n\n " +
"안녕하세요 회원님, 영남건설기술교육원은 소중한 회원님의 개인정보 보호를 위해 회원이 2년간 로그인하지 않는 경우," +
"회원탈퇴 처리 및 개인정보가 파기됨을 안내해드립니다.\n\n" +
"회원계정 : {0}\n" +
"적용일 : {1}\n\n" +
"서비스를 계속 이용하시려면, 위 적용일 이전에 로그인을 진행해주세요!" ,
u . strval , u . time . ToString ( "yyyy년 MM월 dd일" ) ) , null
) ;
* /
}
}
}
// 조회시점 = (최근로그인일시 + 335일)<년월일> 인 컬럼
else if ( time = = "1030" )
{
var m = new Memo ( ) { Users = new List < MemoUser > ( ) { } } ;
var select_save = Dao . Get < Data > ( "users.dormants.save" , new Hashtable ( ) { { "uno" , SUserInfo . UserNo } , { "uip" , GetUserIP ( ) } } ) ;
foreach ( var u in select_save . Where ( w = > w . intval = = 1 ) )
{
if ( ! string . IsNullOrEmpty ( u . strval2 ) )
{
/ *
* SaveSmsMulti 함 수 사 용 - > 메 시 지 정 보 sms 테 이 블 에 저 장 , 모 니 터 링 테 이 블 mts_sms_msg 에 저 장
* /
m . Users . Add ( new MemoUser ( )
{
userno = u . longval ,
smstype = "S" ,
isok = string . IsNullOrEmpty ( u . strval2 ) ? - 1 : 1 ,
mcontents = string . Format ( "[영남건설기술교육원] 휴면계정 전환 예정 안내\n\n " +
"안녕하세요 회원님, 영남건설기술교육원은 소중한 회원님의 개인정보 보호를 위해 " +
"개인정보보호법 제 39조의6(개인정보의 파기에 대한 특례)에 의거하여 " +
"고객님의 계정을 휴면상태로 변경하고 소중한 개인정보를 안전한 공간에 분리하여 보관할 예정입니다.\n\n" +
"회원계정 : {0}\n" +
"휴면계정 전환예정일 : {1}\n\n" +
"서비스를 계속 이용하시려면, 위 전환예정일 이전에 로그인을 진행해주세요!" ,
u . strval , u . time . ToString ( "yyyy년 MM월 dd일" ) )
} ) ;
if ( m . Users . Where ( w = > w . isok = = 1 ) . Count ( ) > 0 )
{
SaveSmsMulti ( m . Users . Where ( w = > w . isok = = 1 ) . ToList ( ) ) ;
m . Users . Clear ( ) ;
}
/ *
SendSms ( u . strval2 , null , null , string . Format ( "[영남건설기술교육원] 휴면계정 전환 예정 안내\n\n " +
"안녕하세요 회원님, 영남건설기술교육원은 소중한 회원님의 개인정보 보호를 위해 " +
"개인정보보호법 제 39조의6(개인정보의 파기에 대한 특례)에 의거하여 " +
"고객님의 계정을 휴면상태로 변경하고 소중한 개인정보를 안전한 공간에 분리하여 보관할 예정입니다.\n\n" +
"회원계정 : {0}\n" +
"휴면계정 전환예정일 : {1}\n\n" +
"서비스를 계속 이용하시려면, 위 전환예정일 이전에 로그인을 진행해주세요!" ,
u . strval , u . time . ToString ( "yyyy년 MM월 dd일" ) ) , null
) ;
* /
}
}
}
}
}
return null ;
}
2020-10-12 14:39:23 +09:00
public String KFCFLOGINAUTH ( String userid )
{
if ( string . IsNullOrEmpty ( userid ) )
{
return "0" ;
}
Random r = new Random ( ) ;
int key = r . Next ( 10000000 , 99999999 ) ;
if ( Dao . Save ( "users.remotelogin.set" , new Hashtable ( ) { { "userid" , userid . Trim ( ) } , { "siteip" , GetUserIP ( ) } , { "remotekey" , key } } ) > 0 )
{
return key . ToString ( ) ;
}
return "0" ;
}
}
}