using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using NP.Model; using System.Collections; using NP.Base.Auth; using NP.Base.ENUM; using IBatisNet.Common.Transaction; namespace NP.Base.Controllers { public partial class ACommonController : NP.Base.BaseController { [HttpPost] public JsonResult UserFind(int ftype, int? asno, String username, String usertypes, String usernameid, int? usertype, String profandmainadmin) { if (ftype == 1) { return JsonBackList(Dao.Get("users.users", new Hashtable() { { "usertypes", usertypes }, { "username", username }, { "profandmainadmin", 1 }, { "status", 1 }, { "usernameid", usernameid }, { "usertype", usertype }, { "asno", asno } })); } else if (ftype == 2) { return JsonBackList(Dao.Get("users.users", new Hashtable() { { "status", 1 }, { "usernameid", usernameid }, { "usertype", usertype }, { "asno", asno } })); } return JsonBackList(Dao.Get("users.users", new Hashtable() { { "includesysadmin", 1 }/*, { "usertypes", "11,81" }*/,{ "username", username }, { "status", 1 }, { "usernameid", usernameid }, { "usertype", usertype }, { "asno", asno } })); } [HttpPost] public JsonResult AssignFind(String asname, int pno) { return JsonBackList(Dao.Get("users.assigns", new Hashtable() { { "asname", asname }, { "status", 1 }, { "pagenum", pno }, { "pagerowsize", 10 } })); } [HttpPost] public JsonResult AssignFind2(String asname, int pno) { return JsonBackList(Dao.Get("users.assigns2", new Hashtable() { { "asname", asname }, { "status", 1 }, { "excel1", ",a.post" }, { "orderby", "a.asname" }, { "pagenum", pno }, { "pagerowsize", 10 } })); } [HttpPost] [ValidateInput(false)] public JsonResult UserSave(VMUser vm) { vm.User.uno = SUserInfo.UserNo; vm.User.uip = GetUserIP(); if (!string.IsNullOrEmpty(vm.User.userpass)) { vm.User.userpass = NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass.Trim()); } vm.User.userid = vm.User.userid.Replace(" ",""); if (!string.IsNullOrEmpty(vm.User.email)) { vm.User.email = vm.User.email.Trim(); } var check = Dao.Get("users.checkuser", new Hashtable() { { "usernonot", vm.User.userno > 0 ? vm.User.userno : (int?)null }, { "userid", vm.User.userno > 0 ? null : vm.User.userid }, { "email", vm.User.email },{"mobile",vm.User.mobile } }).First(); if (check < 9) { return JsonOK(check * -1); } if (Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.User.fgnoprofile = SetFile(Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.User.fgnoprofile ?? 0, "users", "fgnoprofile"); } if (vm.User.usertype > 91) { vm.User.asno = 1; } vm.User.mobile = vm.User.MobileFormat; if (vm.User.userno < 1) { Dao.Insert("users.in", vm.User); // 상태값 휴면 선택시 if (vm.User.usertype == 1 && vm.User.status == 8) { Dao.Save("users.dormant", new Hashtable() { { "usernos", vm.User.userno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }); } if (vm.User.usertype > 1) { AuthSet(new AuthLog() { uno = SUserInfo.UserNo, uip = GetUserIP(),userno = vm.User.userno, logtype = 2, usertypeorg = vm.User.usertype, usertypenew = vm.User.usertype }); } return JsonOK(vm.User.userno); } else { LogSet(new ActLog() { logtype = 30, logtarget = 21, logdata = vm.User.username + "(" + vm.User.userid + ")", userno = vm.User.userno, uno = SUserInfo.UserNo, uip = GetUserIP() }); if (vm.User.usertype > 1) { AuthSet(new AuthLog() { uno = SUserInfo.UserNo, uip = GetUserIP(), logtype = 1, usertypenew = vm.User.usertype, userno = vm.User.userno }); } var result = Dao.Save("users.up", vm.User); // 상태값 휴면 선택시 if (vm.User.usertype == 1 && vm.User.status == 8) { Dao.Save("users.dormant", new Hashtable() { { "usernos", vm.User.userno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }); } return JsonOK(result); } } [HttpPost] public JsonResult UserExitJoin(int userno) { return JsonOK(Dao.Save("users.exitjoin", new Hashtable() { { "userno", userno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } /// /// 탈퇴 /// /// 회원번호들 ("1,2,3,4...") /// public JsonResult UsersDel(string usernos) { int resultCode = 0; var p = new Hashtable(); #region + Save: users.dormant.delete (휴면회원 삭제) p.Clear(); p.Add("usernos", usernos); Dao.Save("users.dormant.delete", p); #endregion #region + Save: users.leave (회원 탈퇴 및 개인정보 삭제) p.Clear(); p.Add("usernos", usernos); p.Add("uno", SUserInfo.UserNo); p.Add("uip", GetUserIP()); resultCode = Dao.Save("users.leave", p); #endregion return JsonOK(resultCode); } public JsonResult UsersDormant(String usernos) { return JsonOK(Dao.Save("users.dormant", new Hashtable() { { "usernos", usernos }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } [HttpPost] public JsonResult DormantCancel(int userno) { if (Dao.Get("users.dormants", new Hashtable() { { "userno", userno } }).Count() < 1) { return JsonBack(new JsonRtn() { code = 1 }); } return JsonOK(Dao.Save("users.dormant.cancel", new Hashtable() { { "usernos", userno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } [HttpPost] public JsonResult UserEE(int userno) { var user = Dao.Get("users.ee", userno).FirstOrDefault(); if (user != null && user.eastereggkey != null) { if (user.usertype == 1) { LogSet(new ActLog() { logtype = 40, logtarget = 51, logdata = "[사용자]" + user.username + " 권한입장", uno = SUserInfo.UserNo, uip = GetUserIP() }); return JsonOKObj((string.IsNullOrEmpty(user.subdomain) ? GetConfig("fronturl") : GetConfig("isstaging") == "1"? string.Format("https://{0}.nptc.kr",user.subdomain) : string.Format("https://{0}.cte.or.kr", user.subdomain)) + "/Account/AdminEE?un=" + userno + "&eek=" + user.eastereggkey + "&at=" + SUserInfo.UserType + "&an=" + SUserInfo.UserNo); } else if (user.usertype == 11) { LogSet(new ActLog() { logtype = 41, logtarget = 51, logdata = "[교강사]" + user.username + " 권한입장", uno = SUserInfo.UserNo, uip = GetUserIP() }); return JsonOKObj("/Account/AdminEE?un=" + userno + "&eek=" + user.eastereggkey + "&at=" + SUserInfo.UserType + "&an=" + SUserInfo.UserNo); } } return JsonOK(0); } [HttpPost] public JsonResult AssignSave(VMUser vm) { vm.Assign.brno = vm.Assign.brno == null ? null : vm.Assign.brno.Replace("-", ""); vm.Assign.grno = vm.Assign.grno == null ? null : vm.Assign.grno.Replace("-", ""); if (!SUserInfo.IsAdmin && vm.Assign.asno < 1) { return JsonOK(0); } else if (Dao.Get("users.assign.check.ascode", new Hashtable() { { "asnonot" + (vm.Assign.asno < 1 ? "xxx" : ""), vm.Assign.asno }, { "ascode", vm.Assign.ascode } }).Count() > 0) { return JsonBack(new JsonRtn() { code = 1 }); } else if (!string.IsNullOrEmpty(vm.Assign.brno) && Dao.Get("users.assign.check.brno", new Hashtable() { { "asnonot" + (vm.Assign.asno < 1 ? "xxx" : ""), vm.Assign.asno }, { "brno", vm.Assign.brno } }).Count() > 0) { return JsonBack(new JsonRtn() { code = 2 }); } vm.Assign.uno = SUserInfo.UserNo; vm.Assign.uip = GetUserIP(); if (Request.Files.GetMultiple("fgnobno").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.Assign.fgnobno = SetFile(Request.Files.GetMultiple("fgnobno").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.Assign.fgnobno ?? 0, "assign", "fgnobno"); } if (Request.Files.GetMultiple("fgnobank").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.Assign.fgnobank = SetFile(Request.Files.GetMultiple("fgnobank").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.Assign.fgnobank ?? 0, "assign", "fgnobank"); } if (vm.Assign.asno < 1) { Dao.Insert("users.assign.in", vm.Assign); return JsonOK(vm.Assign.asno); } else { //고객사관리자는 회원번호,회원여부,회원사구분,계열,키워드,가입일,탈퇴일,상태 변경 없음 vm.Assign.saveflag = SUserInfo.IsAdmin ? "1" : null; return JsonOK(Dao.Save("users.assign.up", vm.Assign)); } } [HttpPost] public JsonResult AssignDel(int asno) { if (!SUserInfo.IsAdmin) { return JsonOK(0); } return JsonOK(Dao.Save("users.assign.del", new Hashtable() { { "asno", asno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } [HttpPost] public JsonResult AssignManSave(AssignMan d) { d.uno = SUserInfo.UserNo; d.uip = GetUserIP(); //정일때 해당하는 정보가 있는지 체크 if (d.jtype == 0) { if (Dao.Get("users.assignmans", new Hashtable() { { "asno", d.asno }, { "mtype", d.mtype }, { "jtype", d.jtype } }).Where(w => w.asmno != d.asmno).Count() > 0) { return JsonOK(-1); } } if (d.asmno > 0) { LogSet(new ActLog() { logtype = 51, logtarget = 32, logdata = d.mname, userno = d.asmno, uno = SUserInfo.UserNo, uip = GetUserIP() }); } return JsonOK(Dao.Save("users.assignman." + (d.asmno < 1 ? "in" : "up"), d)); } [HttpPost] public JsonResult AssignManDel(Int32 asmno, String mname) { LogSet(new ActLog() { logtype = 51, logtarget = 32, logdata = mname, userno = asmno, uno = SUserInfo.UserNo, uip = GetUserIP() }); return JsonOK(Dao.Save("users.assignman.del", new Hashtable() { { "asmno", asmno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } [HttpPost] public JsonResult AssignFeeSave(AssignFee d, bool isin, bool isdel = false) { d.uno = SUserInfo.UserNo; d.uip = GetUserIP(); if (isdel) { return JsonOK(Dao.Save("users.assignfee.del", d)); } return JsonOK(Dao.Save("users.assignfee." + (isin ? "in" : "up"), d)); } [HttpPost] [ValidateInput(false)] public JsonResult AssignSiteSave(Assign d) { d.uno = SUserInfo.UserNo; d.uip = GetUserIP(); if (d.issite == 1) { if (Dao.Get("users.assignsite", new Hashtable() { { "asnonot", d.asno > 0 ? d.asno : (int?)null }, { "subdomain", d.subdomain } }).Count() > 0) { return JsonOK(-1); } } if (Request.Files.GetMultiple("sitelogofile").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { d.sitelogo = SetFile(Request.Files.GetMultiple("sitelogofile").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), d.sitelogo ?? 0, "assign", "sitelogo"); } if (d.issite == 1) { //고객사마이페이지 공지사항 추가 Dao.Save("board.bmassign.save", d); } else { Dao.Save("board.bmassign.save2", d); } return JsonOK(Dao.Save("users.assignsite.save", d)); } [HttpPost] public JsonResult UserLeave(String usernos) { return JsonOK(Dao.Save("users.exitjoin", new Hashtable() { { "usernos", usernos }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } [HttpPost] public JsonResult CouncelSave(VMUser vm) { vm.Councel.uno = SUserInfo.UserNo; vm.Councel.uip = GetUserIP(); vm.Councel.userno = vm.intval2; //수정 if(vm.Councel.bno < 1) { Dao.Insert("councel.in", vm.Councel); return JsonOK(vm.Councel.bno); } else { return JsonOK(Dao.Save("councel.up", vm.Councel)); } } [HttpPost] public JsonResult CouncelDel(int bno) { return JsonOK(Dao.Save("councel.del",new Hashtable(){ {"bno",bno },{"uno",SUserInfo.UserNo },{"uip",GetUserIP() } })); } /// /// pwchange partial 팝업 내 비밀번로 변경 /// /// /// [HttpPost] public JsonResult PwChange(VMUser vm) { if (string.IsNullOrEmpty(vm.User.userpass) || vm.User.userpass.Trim() == "") { if (Dao.Save("users.resetuserpass", new Hashtable() { { "userno", vm.User.userno } }) > 0) { return JsonOK(1); } } if (vm.User.userno > 0 && !string.IsNullOrEmpty(vm.User.userpass) && vm.User.userpass.Trim() != "") { if (Dao.Save("users.resetuserpass", new Hashtable() { { "userpass", NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass) }, { "userno", vm.User.userno } }) > 0) { return JsonOK(1); } } return JsonOK(0); } /// /// 개인정보수정 /// /// /// [HttpPost] [ValidateInput(false)] public JsonResult UserEdit(VMUser vm) { vm.User.uno = SUserInfo.UserNo; vm.User.uip = GetUserIP(); if (!string.IsNullOrEmpty(vm.User.userpass)) { vm.User.userpass = NP.Base.Lib.KISA_SHA256.SHA256Hash(vm.User.userpass); } vm.User.userid = vm.User.userid.Trim(); if (!string.IsNullOrEmpty(vm.User.email)) { vm.User.email = vm.User.email.Trim(); } vm.User.mobile = vm.User.MobileFormat; var check = Dao.Get("users.checkuser", new Hashtable() { { "usernonot", vm.User.userno > 0 ? vm.User.userno : (int?)null }, { "userid", vm.User.userno > 0 ? null : vm.User.userid }, { "email", vm.User.email }, { "mobile", string.IsNullOrEmpty(vm.User.mobile) ? null : vm.User.mobile } }).First(); if (check < 9) { if (vm.User.usertype == 1 || check != 3) { return JsonOK(check * -1); } } if (Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.User.fgnoprofile = SetFile(Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.User.fgnoprofile ?? 0, "users", "fgnoprofile"); } if (vm.User.usertype > 90) { vm.User.asno = 1; } LogSet(new ActLog() { logtype = 30, logtarget = 21, logdata = vm.User.username + "(" + vm.User.userid + ")", userno = vm.User.userno, uno = SUserInfo.UserNo, uip = GetUserIP() }); if (vm.User.usertype > 1) { AuthSet(new AuthLog() { uno = SUserInfo.UserNo, uip = GetUserIP(), logtype = 1, usertypenew = vm.User.usertype, userno = vm.User.userno }); } return JsonOK(Dao.Save("users.edit", vm.User)); } /// /// 회원 탈퇴 /// /// , 로 구분자 생성된 회원번호들 /// 탈퇴신청상태 (1:완료, 2:취소) /// [HttpPost] public JsonResult UserLeaves(string usernos, int leaveStatus) { var p = new Hashtable(); try { int resultCode = 0; using (var t = new TransactionScope()) { if (leaveStatus == 1) { #region + Save: users.dormant.delete (휴면회원정보 완전삭제, 데이터가 없을 수있다.) p.Clear(); p.Add("usernos", usernos); resultCode = Dao.Save("users.dormant.delete", p); #endregion #region + Save: users.leave (탈퇴완료 처리 (완전히 회원정보 삭제)) p.Clear(); p.Add("usernos", usernos); p.Add("uno", SUserInfo.UserNo); p.Add("uip", GetUserIP()); resultCode = Dao.Save("users.leave", p); #endregion #region + Save: users.leave.update (탈퇴히스토라 상태 업데이트(1)) if (resultCode > 0) { p.Clear(); p.Add("status", leaveStatus); p.Add("usernos", usernos); p.Add("uno", SUserInfo.UserNo); p.Add("uip", GetUserIP()); resultCode = Dao.Save("users.leave.update", p); } #endregion } else if (leaveStatus == 2) { #region + Save: users.status.update (탈퇴취소: users테이블 status 업데이트) p.Clear(); p.Add("usernos", usernos); p.Add("status", 1); // 탈퇴취소로 정상으로 되돌림 p.Add("uno", SUserInfo.UserNo); p.Add("uip", GetUserIP()); resultCode = Dao.Save("users.status.update", p); #endregion #region + Save: users.leave.update (탈퇴히스토라 상태 업데이트(2)) if (resultCode > 0) { p.Clear(); p.Add("status", leaveStatus); p.Add("usernos", usernos); p.Add("uno", SUserInfo.UserNo); p.Add("uip", GetUserIP()); resultCode = Dao.Save("users.leave.update", p); } #endregion } // 쿼리 2건 실행에 대한 최종 커밋 if (resultCode > 0) { t.Complete(); } } return JsonOK(resultCode); } catch (Exception ex) { SetError($"회원 탈퇴처리 실패: {ex.Message}"); return JsonBack(new JsonRtn() { code = 1 }); } } } }