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; namespace NP.Base.Controllers { public partial class ACommonController : NP.Base.BaseController { /// /// 기수저장 /// /// /// [HttpPost] public JsonResult TermSave(VMCM vm) { if (Dao.Get("cm.terms", new Hashtable() { {"tmnonot", vm.Term.tmno },{"tyear", vm.Term.tyear },{"tseq", vm.Term.tseq } }).Count() > 0) { return JsonOK(-1); } vm.Term.uno = SUserInfo.UserNo; vm.Term.uip = GetUserIP(); return JsonOK(Dao.Save("cm.term."+ GetIU(vm.Term.tmno), vm.Term)); } /// /// 과정분류저장 /// /// /// [HttpPost] public JsonResult CGSave(CG cg) { cg.uno = SUserInfo.UserNo; cg.uip = GetUserIP(); if (cg.isdel == 1) { cg.saveflag = "del"; } else { if (Dao.Get("cm.cgs", new Hashtable() { { "cgnonot", cg.cgno }, { "cgcode", cg.cgcode } }).Count() > 0) { return JsonOK(-1); } } return JsonOK(Dao.Save("cm.cg." + GetIU(cg.cgno), cg)); } /// /// 과정분류 가져오기 /// /// /// /// [HttpPost] public JsonResult CGGet(int cgno = 0, int pcgno = 0) { if (cgno > 0) { return JsonBack(Dao.Get("cm.cgs", new Hashtable { { "cgno", cgno } }).First()); } else if (pcgno > 0) { return JsonBackList(Dao.Get("cm.cgs", new Hashtable { { "pcgno", pcgno },{ "isuse",1},{"isdel",0 } })); } return JsonNoData(); } /// /// 과정을 통해 강좌 생성 /// /// /// [HttpPost] public JsonResult CMCreateByCMMaster(int cgno) { return JsonBackList(Dao.Get("cm.datacreatecmbycmmaster", cgno)); } /// /// 과정,강좌 가져오기 /// /// /// /// /// /// /// /// /// /// /// /// /// /// [HttpPost] public JsonResult CMGet(int? ismaster,int? iscurrent,String orderby, int? cgno, String cname, String notcmnos, int? notcmno, int? pno, int? cshape, int? tmno, String cshapes, int? isall) { return JsonBackList(Dao.Get("cm.cms", new Hashtable { { "tmno", tmno }, { "cshape", cshape },{ "cgno", cgno }, { "isuse"+(isall==1?"x":""), 1 }, { "ismaster" + ((ismaster??0) == 91?"02":""), ismaster},{ "listcolumn",1 }, { "cname", cname },{ "notcmnos", notcmnos==""?null:notcmnos }, { "notcmno", (notcmno ?? 0) < 1 ? (int?)null : notcmno }, { "pagenum", pno }, { "pagerowsize", 10 },{ "cshapes", cshapes }, { "iscurrent", iscurrent }, { "orderby", orderby } })); } /// /// KFCF잔재 /// /// /// [HttpPost] public JsonResult BookFind(String bkname) { return JsonBackList(Dao.Get("cm.books", new Hashtable { { "isuse", 1 }, { "bknamelike", bkname } })); } [HttpPost] public JsonResult NcsFind(int ncsdepth, String ncsname) { return JsonBackList(Dao.Get("cm.ncses" + ncsdepth, new Hashtable { { "ncsname", ncsname } })); } [HttpPost] public JsonResult CMPRPfee(int userno, String sd) { var cmpr = new CMPR() { userno = userno, uno = SUserInfo.UserNo, uip = GetUserIP(), CMPRs = new List() { } }; foreach(var d in sd.Split(';')) { cmpr.CMPRs.Add(new CMPR() { cmno = GetInt(d.Split(':')[0]), pfee = GetInt(d.Split(':')[1]) }); } return JsonOK(Dao.Save("cm.cmprpfee", cmpr)); } [HttpPost] [ValidateInput(false)] public JsonResult BookSave(VMCM vm) { vm.Book.uno = SUserInfo.UserNo; vm.Book.uip = GetUserIP(); if (Request.Files.GetMultiple("fgnothumb").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.Book.fgnothumb = SetFile(Request.Files.GetMultiple("fgnothumb").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.Book.fgnothumb ?? 0, "book", "fgnothumb"); } if (Request.Files.GetMultiple("fgno").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.Book.fgno = SetFile(Request.Files.GetMultiple("fgno").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.Book.fgno ?? 0, "book", "fgno"); } if (vm.Book.bkno < 1) { return JsonOK(Dao.Save("cm.bookin", vm.Book)); } else { return JsonOK(Dao.Save("cm.bookup", vm.Book)); } } [HttpPost] [ValidateInput(false)] public JsonResult BookDel(Int64 bkno) { return JsonOK(Dao.Save("cm.bookdel", new Hashtable() { {"bkno",bkno } })); } /// /// 강좌 저장 /// /// /// [HttpPost] [ValidateInput(false)] public JsonResult CMSave(VMCM vm) { vm.CM.outfee = vm.CM.infee; //영남은 비회원가격 없이 회원가격으로 통일 2020-11-16 if(vm.CM.ismaster == 0) { vm.CM.retime = Convert.ToDateTime(vm.CM.retimeymd + " 23:59:59"); vm.CM.setime = Convert.ToDateTime(vm.CM.setimeymd + " 23:59:59"); vm.CM.getime = Convert.ToDateTime(vm.CM.getimeymd + " 23:59:59"); if (vm.CM.retimeymd == "2099-12-31") { vm.CM.sstime = null; vm.CM.setime = null; vm.CM.gstime = null; vm.CM.getime = null; vm.CM.rstime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); } } if (vm.CM.isrefund == 0) { vm.CM.ncsnos = null; } int orgcmno = vm.CM.cmno; vm.CM.uno = SUserInfo.UserNo; vm.CM.uip = GetUserIP(); if (Request.Files.GetMultiple("fgnocm").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.CM.fgnocm = SetFile(Request.Files.GetMultiple("fgnocm").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.CM.fgnocm ?? 0, "cm", "fgnocm"); } if (vm.CM.cmno < 1) { Dao.Insert("cm.cmin", vm.CM); if (vm.CM.cmno < 1) { return JsonOK(0); } //평가기준 기본등록 Dao.Save("cm.cmev.in", new Hashtable() { { "cmno", vm.CM.cmno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }); //강의실메뉴 기본값 삽입 Dao.Save("cm.cmmenu.in", new Hashtable() { { "cmno", vm.CM.cmno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }); } else if (Dao.Save("cm.cmup", vm.CM) < 1) { return JsonOK(0); } //담당자, 교재, 선행, 후행, ncs직무저장 if (orgcmno > 0) { //삭제정리 Dao.Save("cm.data.delete", new Hashtable() { { "cmno", vm.CM.cmno }, { "usernos", vm.CM.usernos }, { "bknos", vm.CM.bknos }, { "rcmnospre", vm.CM.cmnospre }, { "rcmnosnext", vm.CM.cmnosnext }, { "ndnos", vm.CM.ncsnos } }); } //저장 Dao.Save("cm.data.save", new Hashtable() { { "cmno", vm.CM.cmno }, { "usernos", vm.CM.usernos ?? "0" }, { "bknos", vm.CM.bknos ?? "0" }, { "rcmnospre", vm.CM.cmnospre ?? "0" }, { "rcmnosnext", vm.CM.cmnosnext ?? "0" }, { "ndnos", vm.CM.ncsnos ?? "0" }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } }); if (orgcmno > 0) { //회차강사 정리 Dao.Save("cm.cminning.profclear", vm.CM.cmno); } return JsonOK(vm.CM.cmno); } /// /// KFCF잔재 /// /// /// [HttpPost] public JsonResult CMPCSave(VMCM vm) { vm.CM.sstime = vm.CM.setime = DateTime.Now; vm.CM.uno = SUserInfo.UserNo; vm.CM.uip = GetUserIP(); if (vm.CM.cmno < 1) { Dao.Insert("cm.cmpcin", vm.CM); if (vm.CM.cmno < 1) { return JsonOK(0); } } else { if (Dao.Save("cm.cmpcup", vm.CM) < 1) { return JsonOK(0); } //결제내역있으면 강좌 추가, 삭제 막기, 설계안에 없지만 나중에 할인가를 변경해야 할 수도 있겠지. if (Dao.Get("cm.check.cmpcpay", vm.CM.cmno).First() > 0) { //강좌정보 저장 //isnew:cmno:dseq:orginfee:orgoutfee:drate:infee:outfee vm.CM.cmnos = ""; vm.CM.inquery = ""; vm.CM.upquery = ""; vm.CM.Ds = new List() { }; foreach (var s in vm.savedata.Split(';')) { var cm = s.Split(':'); vm.CM.cmnos += "," + cm[1]; if (cm[0] != "1") { vm.CM.Ds.Add(new CM() { cmno = GetInt(cm[1]), dseq = GetInt(cm[2]), orginfee = GetInt(cm[3]), orgoutfee = GetInt(cm[4]), drate = GetInt(cm[5]), infee = GetInt(cm[6]), outfee = GetInt(cm[7]) }); } } vm.CM.cmnos = vm.CM.cmnos.Substring(1); vm.CM.inquery = vm.CM.inquery == "" ? null : vm.CM.inquery.Substring(1); vm.CM.upquery = vm.CM.Ds.Count() > 0 ? "1" : null; //삭제, 삽입, 수정, 금액롤업 Dao.Save("cm.cmpccm.save", vm.CM); return JsonOK(vm.CM.cmno); } } //강좌정보 저장 //isnew:cmno:dseq:orginfee:orgoutfee:drate:infee:outfee vm.CM.cmnos = ""; vm.CM.inquery = ""; vm.CM.upquery = ""; vm.CM.Ds = new List() { }; foreach (var s in vm.savedata.Split(';')) { var cm = s.Split(':'); vm.CM.cmnos += "," + cm[1]; if (cm[0] == "1") { vm.CM.inquery += string.Format(",({0},{1},{2},{3},{4},{5},{6},{7},now(),{8},now(),{8},'{9}')", vm.CM.cmno, cm[1], cm[2], cm[3], cm[4], cm[5], cm[6], cm[7],vm.CM.uno, vm.CM.uip); } else { vm.CM.Ds.Add(new CM() { cmno = GetInt(cm[1]), dseq = GetInt(cm[2]), orginfee = GetInt(cm[3]), orgoutfee = GetInt(cm[4]), drate = GetInt(cm[5]), infee = GetInt(cm[6]), outfee = GetInt(cm[7]) }); } } vm.CM.cmnos = vm.CM.cmnos.Substring(1); vm.CM.inquery = vm.CM.inquery == "" ? null : vm.CM.inquery.Substring(1); vm.CM.upquery = vm.CM.Ds.Count() > 0 ? "1" : null; //삭제, 삽입, 수정, 금액롤업 Dao.Save("cm.cmpccm.save", vm.CM); return JsonOK(vm.CM.cmno); } /// /// 강좌 삭제 /// /// /// [HttpPost] public JsonResult CMDel(int cmno) { //패키지 등록 현황 확인 if (Dao.Get("cm.check.cmpcpay",cmno ).First() > 0) { return JsonBack(new JsonRtn() { code = 1 }); } return JsonOK(Dao.Save("cm.del", new Hashtable() { { "cmno", cmno },{"uno",SUserInfo.UserNo },{"uip",GetUserIP() } })); } /// /// 강좌회차삭제 /// /// /// /// [HttpPost] public JsonResult CMInningDel(int im, Int64 cmino) { return JsonOK(Dao.Save("cm.cminning.del" + (im==1?"2":""), cmino)); } /// /// 교육장교육회차 삭제 /// /// /// /// [HttpPost] public JsonResult CMInningByScdDel(int im, Int64 cmino) { return JsonOK(Dao.Save("cm.cminning.del3" + (im == 1 ? "2" : ""), cmino)); } /// /// 교육일정삭제 /// /// /// /// [HttpPost] public JsonResult CMInningScdDel(int im, Int64 cmisno) { return JsonOK(Dao.Save("cm.cminningscd.del" + (im == 1 ? "2" : ""), cmisno)); } /// /// 강좌 순차학습 저장(0:임의학습,1:순차학습) /// /// /// /// [HttpPost] public JsonResult CMSeqSave(int cmno, int isseq) { return JsonOK(Dao.Save("cm.cmseqsave", new Hashtable() { { "cmno", cmno },{ "isseq", isseq }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } /// /// 강좌회차 가져오기 /// /// /// [HttpPost] public JsonResult CMInningGet(Int64 cmino) { return JsonBack(Dao.Get("cm.cminnings", new Hashtable() { { "cmino", cmino } }).First()); } /// /// 교육일정 가져오기 /// /// /// /// [HttpPost] public JsonResult CMInningScdGet(Int64 cmino ,Int64 cmisno) { var data = Dao.Get("cm.cminningscds", new Hashtable() { { "cmino", cmino }, { "cmisno", cmisno } }).First(); data.estart2 = data.estart.ToString("yyyy-MM-dd HH:mm"); data.eend2 = data.eend.ToString("yyyy-MM-dd HH:mm"); return JsonBack(data); } /// /// 강좌회차저장 /// /// /// [HttpPost] public JsonResult CMInningSave(CMInning cmi) { cmi.uno = SUserInfo.UserNo; cmi.uip = GetUserIP(); cmi.week = 1; int rtn = 0; if (Request.Files.GetMultiple("filetf").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { cmi.fgnotf = SetFile(Request.Files.GetMultiple("filetf").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), cmi.fgnotf ?? 0, "cminning", "fgnotf"); } if (cmi.cmino < 1) { Dao.Insert("cm.cminnings.in", cmi); rtn = cmi.cmino > 0 ? 1 : 0; } else { rtn = Dao.Save("cm.cminnings." + (cmi.cmino > 0 ? "up" : "in"), cmi); } //집체교육일정,온라인일시 if(cmi.cmino > 0 && cmi.isscd == 1 && cmi.scdtype == 1) { Dao.Save("cm.cminningscd.clear", cmi); Dao.Save("cm.cmev.clear", cmi); } if (cmi.istaste == 1){ Dao.Save("cm.cminnings.istasteclear", cmi); } return JsonOK(rtn, true); } /// /// 강좌교육일정 저장 /// /// /// [HttpPost] public JsonResult CMInningScdSave(CMinningscd cmis) { if(!string.IsNullOrEmpty(cmis.estart2)) cmis.estart = Convert.ToDateTime(cmis.estart2); if (!string.IsNullOrEmpty(cmis.eend2)) cmis.eend = Convert.ToDateTime(cmis.eend2); cmis.uno = SUserInfo.UserNo; cmis.uip = GetUserIP(); int rtn = 0; if (cmis.cmisno < 1) { Dao.Insert("cm.cminningscd.in", cmis); rtn = cmis.cmisno > 0 ? 1 : 0; } else { rtn = Dao.Save("cm.cminningscd." + (cmis.cmisno > 0 ? "up" : "in"), cmis); Dao.Save("cm.cminningscd.up.lect",cmis); } return JsonOK(rtn, true); } /// /// 컨텐츠 검색 /// /// /// /// /// [HttpPost] public JsonResult ContentFind(int? cmno, String ctname, int pno) { return JsonBackList(Dao.Get("cm.contents", new Hashtable() { { "cmno", cmno }, { "ctname", ctname }, { "pagenum", pno }, { "pagerowsize", 10 },{"isuse",1 } })); } /// /// 강좌평가정보 /// /// /// [HttpPost] public JsonResult CMEVSave(CMEV cmev) { cmev.uno = SUserInfo.UserNo; cmev.uip = GetUserIP(); return JsonOK(Dao.Save("cm.cmevsave", cmev)); } /// /// 강좌 시험 저장 /// /// /// [HttpPost] public JsonResult CMEXSave(VMCM vm) { vm.CMEX.uip = GetUserIP(); vm.CMEX.uno = SUserInfo.UserNo; //최종평가는 과정/강좌당 1개만 if (vm.CMEX.extype == 1 && Dao.Get("cm.cmex.extype1count", new Hashtable() { { "cmno", vm.CMEX.cmno }, { "exno", vm.CMEX.exno } }).First() > 0) { return JsonBack(new JsonRtn() { code = 1, obj = -1 }); } if (vm.CMEX.exno > 0 && ExamSaveValid(vm.CMEX.exno) != "") { //응시자데이터 존재하므로 일부데이터만 저장 return JsonOK(Dao.Save("cm.cmex.savetop", vm.CMEX), false); } vm.CMEX.cmexqs = new List(); vm.CMEX.cmexlayers = new List(); if (vm.CMEX.eqtype == 1 && !string.IsNullOrEmpty(vm.savedata)) { //임의문항 foreach (String s in vm.savedata.Split(';')) { var s2 = s.Split(':'); vm.CMEX.cmexlayers.Add(new CMEXLayer() { exno = vm.CMEX.exno, qdiff = GetInt(s2[0]) , cc1 = GetInt(s2[1]), cc2 = GetInt(s2[2]), cc3 = GetInt(s2[3]), cc4 = GetInt(s2[4]), cc5 = GetInt(s2[5]), qcount = GetInt(s2[6]), rpoint = GetInt(s2[7])}); vm.CMEX.tpoint += GetInt(s2[6]) * GetInt(s2[7]); vm.CMEX.qcount += GetInt(s2[6]); } } if (!string.IsNullOrEmpty(vm.savedata2)) { foreach (var q in vm.savedata2.Split(';')) { var qi = q.Split(':'); vm.CMEX.cmexqs.Add(new CMEXQ() { eqno = GetInt(qi[0]), qseq = GetInt(qi[1]), qno = GetInt(qi[2]), rpoint = GetInt(qi[3]) }); if (vm.CMEX.eqtype == 0) { vm.CMEX.tpoint += GetInt(qi[3]); } } if (vm.CMEX.eqtype == 0) { vm.CMEX.qcount = vm.CMEX.cmexqs.Count(); } } //2025-12-24 / KHJ / 시험응시 시작일/종료일 모델 바인딩 vm.CMEX.testsdate = vm.stringval18 + " " + vm.stringval19 + ":" + vm.stringval20; vm.CMEX.testedate = vm.stringval21 + " " + vm.stringval22 + ":" + vm.stringval23; return JsonOK(Dao.SaveExam(vm.CMEX), false); } /// /// 가상번호 extype 1: 진행평가, 2: 최종평가, 11: 과제, 21: 토론, 31: 강사설문, 32: 강의평가 /// /// /// /// public JsonResult ESTDel(int extype, int no) { if (extype == 1 || extype == 2) {if (ExamSaveValid(no) == ""){return JsonOK(Dao.Save("cm.cmex.del", no));}} else if(extype == 11 || extype == 21){ if (SDSaveValid(no) == "") { return JsonOK(Dao.Save("cm.cmsd.del", no)); } } else if (extype == 31 || extype == 32){ if (RSSaveValid(no) == "") { return JsonOK(Dao.Save("cm.cmrs.del", no)); } } return JsonOK(0); } /// /// 문제 삭제 /// /// /// [HttpPost] public JsonResult QuestionDel(String qnos) { return JsonOK(Dao.Save("cm.question.del", new Hashtable() { { "qnos", qnos } }), true); } /// /// 문제사용여부변경 /// /// /// /// [HttpPost] public JsonResult QuestionChangeUYN(String qnos, int flag) { return JsonOK(Dao.Save("cm.question.isusechange", new Hashtable() { { "qnos", qnos }, { "isuse", flag == 8 ? 1 : 0 } }), true); } /// /// 문제저장 /// /// /// [HttpPost] [ValidateInput(false)] public JsonResult QuestionSave(VMCM vm) { vm.Question.uip = GetUserIP(); vm.Question.uno = SUserInfo.UserNo; vm.Question.QIs = new List(); if (vm.Question.atype != 2) { foreach (var idx in vm.savedata.Split(',')) { if (vm.Question.atype == 0 || !string.IsNullOrEmpty(Request["qitext2" + idx])) { var qi = new QuestionItem() { qino = GetInt(Request["qino" + idx]), fgno = GetLong(Request["qifile" + idx]) < 1 ? (Int64?)null : GetLong(Request["qifile" + idx]), isright = vm.Question.atype == 1 ? 1 : GetInt(Request["chkqi" + idx]), qitext = vm.Question.atype == 0 ? Request["qitext" + idx] : Request["qitext2" + idx] }; if (vm.Question.atype == 0) { if (Request.Files.GetMultiple("file" + idx).Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { qi.fgno = SetFile(Request.Files.GetMultiple("file" + idx).Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), qi.fgno ?? 0, "questionitem", "fgno"); } } vm.Question.rightcount += qi.isright; vm.Question.QIs.Add(qi); } } } return JsonOK(Dao.SaveQuestion(vm.Question, 1), false); } /// /// 강좌과제저장 /// /// /// [HttpPost] public JsonResult CMSDSave(VMCM vm) { vm.CMSD.uno = SUserInfo.UserNo; vm.CMSD.uip = GetUserIP(); if (Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.CMSD.fgno = SetFile(Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.CMSD.fgno ?? 0, "cmsd", "fgno"); } if (vm.CMSD.sdno < 1) { Dao.Insert("cm.cmsd.in", vm.CMSD); return JsonOK(vm.CMSD.sdno); } if (base.SDSaveValid(vm.CMSD.sdno) == "") { return JsonOK(Dao.Save("cm.cmsd.up", vm.CMSD)); } return JsonOK(Dao.Save("cm.cmsd.uplock", vm.CMSD)); } /// /// 강좌설문저장 /// /// /// [HttpPost] public JsonResult CMRSSave(VMCM vm) { vm.CMRS.uno = SUserInfo.UserNo; vm.CMRS.uip = GetUserIP(); if (vm.CMRS.rstype == 1) { vm.CMRS.rscondition = 0; }//강의평가일 때 cmino 저장 안함 else { vm.CMRS.cmino = 0; } //등록일 때 if (vm.CMRS.rsno < 1) { //설문(강사설문) 일 때 복수 등록 가능 //설문(강의평가)은 1개씩만 등록가능 if (Dao.Get("cm.cmrs.check", new Hashtable() { {"cmno",vm.CMRS.cmno }, { "rsno", vm.CMRS.rsno }, { "rstype", vm.CMRS.rstype } }).First() > 0 && vm.CMRS.rstype != 1) { return JsonOK(0); } Dao.Insert("cm.cmrs.in", vm.CMRS); return JsonOK(vm.CMRS.rsno); } //수정일 때 if (base.RSSaveValid(vm.CMRS.rsno) == "") { return JsonOK(Dao.Save("cm.cmrs.up", vm.CMRS)); } return JsonOK(Dao.Save("cm.cmrs.uplock", vm.CMRS)); } /// /// 강좌메뉴권한 저장 /// /// /// [HttpPost] public JsonResult CMMenuSave(VMCM vm) { vm.CMMenu.uno = SUserInfo.UserNo; vm.CMMenu.uip = GetUserIP(); vm.CMMenu.bmnos = vm.CMMenu.bmnos == "" ? null : vm.CMMenu.bmnos; return JsonOK(Dao.Save("cm.cmmenu.up", vm.CMMenu)); } /// /// 설문저장 /// /// /// [HttpPost] public JsonResult RSCSave(VMCM vm) { vm.RSC.uno = SUserInfo.UserNo; vm.RSC.uip = GetUserIP(); if (!string.IsNullOrEmpty(vm.savedata2)) { vm.RSC.Ds = new List() { }; foreach (var q in vm.savedata2.Split(';')) { var qi = q.Split(':'); vm.RSC.Ds.Add(new RSCQ() { rscqno = GetInt(qi[0]), dseq = GetInt(qi[1]), qno = GetInt(qi[2]) }); } } if (vm.RSC.rscno < 1) { Dao.Insert("cm.rsc.in", vm.RSC); if (vm.RSC.rscno > 0) { Dao.Save("cm.rscq.in", vm.RSC); return JsonOK(vm.RSC.rscno); } } else { vm.RSC.Dsin = vm.RSC.Ds.Where(w => w.rscqno < 1).ToList(); vm.RSC.Dsup = vm.RSC.Ds.Where(w => w.rscqno > 0).ToList(); vm.RSC.QNosin = string.Join(",", vm.RSC.Dsin.Select(s => s.qno)); vm.RSC.QNosup = string.Join(",", vm.RSC.Dsup.Select(s => s.qno)); if ("".Equals(base.RSCSaveValid(vm.RSC.rscno))) { return JsonOK(Dao.Save("cm.rsc.up", vm.RSC)); } else { return JsonOK(Dao.Save("cm.rsc.uplock", vm.RSC)); } } return Json(0); } /// /// 강좌복제(저장) /// /// /// /// /// /// [HttpPost] public JsonResult CMCopy(int cmno, String cname, int? tmno = null, bool nomaster = false) { int uno = SUserInfo.UserNo; String uip = GetUserIP(); //해당 강좌가 회차정보가 존재하는지 확인 if (nomaster && Dao.Get("cm.cminnings", new System.Collections.Hashtable() { { "cmno", cmno } }).Count < -1 ) { return JsonBack(new JsonRtn() { code = 1 }); } //복제할 대상 중 첨부파일이 있는 데이터 확인하여 파일 복제 var datas = Dao.Get("cm.cminfile", cmno).ToList(); var dtype = 0; var intval = 0; Int64 longval3 = 0; foreach (var d in datas.Where(w=>w.dtype == 1)) { var vm = new VMCM() { }; //과제토론첨부파일복제 if (dtype != d.dtype || intval != d.intval) { //테이블키(테이블유형 및 테이블키번호가 달라지면 파일그룹번호를 생성한다) var fg = new NP.Model.File() { tablename = "cmsd", columnname = "fgno", uno = uno, uip = uip }; Dao.Insert("sys.filegroup.insert", fg); longval3 = d.longval3 = fg.fgno; dtype = d.dtype; intval = d.intval; //파일정보 복사 Dao.Save("sys.file.copy", new Hashtable() { { "ofgno", d.longval }, { "nfgno", d.longval3 }, { "uno", uno }, { "uip", uip },{ "copytype",tmno == null || nomaster ? "copy" : "inherit" } }); } //파일복제 System.IO.FileInfo fi = new System.IO.FileInfo(Server.MapPath(vm.Files + d.strval)); System.IO.File.Copy(Server.MapPath(vm.Files + d.strval) , Server.MapPath(vm.Files + d.strval.Substring(0, d.strval.IndexOf('.')) + "_"+ (tmno == null || nomaster ? "copy" : "inherit") + "_" + uno + "_" + longval3 + d.strval.Substring(d.strval.IndexOf('.')))); } longval3 = 0; Int64 longval4 = 0; foreach (var d in datas.Where(w => w.dtype == 2)) { var vm = new VMCM() { }; //오프라인학습교안파일복제 if (longval4 != d.longval4) { //테이블키(테이블유형 및 테이블키번호가 달라지면 파일그룹번호를 생성한다) var fg = new NP.Model.File() { tablename = "cminning", columnname = "fgnotf", uno = uno, uip = uip }; Dao.Insert("sys.filegroup.insert", fg); longval3 = d.longval3 = fg.fgno; longval4 = d.longval4; //파일정보 복사 Dao.Save("sys.file.copy", new Hashtable() { { "ofgno", d.longval }, { "nfgno", d.longval3 }, { "uno", uno }, { "uip", uip }, { "copytype", tmno == null || nomaster ? "copy" : "inherit" } }); } //파일복제 System.IO.FileInfo fi = new System.IO.FileInfo(Server.MapPath(vm.Files + d.strval)); System.IO.File.Copy(Server.MapPath(vm.Files + d.strval) , Server.MapPath(vm.Files + d.strval.Substring(0, d.strval.IndexOf('.')) + "_" + (tmno == null || nomaster ? "copy" : "inherit") + "_" + uno + "_" + longval3 + d.strval.Substring(d.strval.IndexOf('.')))); } longval3 = 0; longval4 = 0; foreach (var d in datas.Where(w => w.dtype == 3)) { var vm = new VMCM() { }; //강좌첨부파일복제 if (longval4 != d.longval) { //테이블키(테이블유형 및 테이블키번호가 달라지면 파일그룹번호를 생성한다) var fg = new NP.Model.File() { tablename = "cm", columnname = "fgnocm", uno = uno, uip = uip }; Dao.Insert("sys.filegroup.insert", fg); longval3 = d.longval3 = fg.fgno; longval4 = d.longval; //파일정보 복사 Dao.Save("sys.file.copy", new Hashtable() { { "ofgno", d.longval }, { "nfgno", d.longval3 }, { "uno", uno }, { "uip", uip }, { "copytype", tmno == null || nomaster ? "copy" : "inherit" } }); } //파일복제 System.IO.FileInfo fi = new System.IO.FileInfo(Server.MapPath(vm.Files + d.strval)); System.IO.File.Copy(Server.MapPath(vm.Files + d.strval) , Server.MapPath(vm.Files + d.strval.Substring(0, d.strval.IndexOf('.')) + "_" + (tmno == null || nomaster ? "copy" : "inherit") + "_" + uno + "_" + longval3 + d.strval.Substring(d.strval.IndexOf('.')))); } return JsonOK(Dao.CMCopy(cmno,uno,uip,datas, tmno == null?1:0, tmno, cname)); } /// /// KFCF잔재 /// /// /// /// [HttpPost] public JsonResult CMCheck(int cmno, String check) { switch (check) { case "cmpcpay": //패키지 등록 현황 확인 if (Dao.Get("cm.check.cmpcpay", cmno).First() > 0) { return JsonBack(new JsonRtn() { code = 1 }); } else { return JsonBack(new JsonRtn() { code = 1000, obj = Dao.Get("cm.check.cmpcpay",new Hashtable() { {"cmno",cmno } } ).First() }); } } return JsonOK(0); } /// /// 컨텐츠페이지 삭제 /// /// /// /// [HttpPost] public JsonResult CTPDel(int ctno, int cpno) { return JsonOK(Dao.Save("cm.ctpdel", new Hashtable() { { "ctno", ctno }, { "cpno", cpno }, { "uno", SUserInfo.UserNo}, {"uip", GetUserIP() } })); } /// /// 컨텐츠 저장 /// /// /// [HttpPost] [ValidateInput(false)] public JsonResult CTSave(VMCM vm) { vm.CT.uno = SUserInfo.UserNo; vm.CT.uip = GetUserIP(); if (!string.IsNullOrEmpty(vm.CT.ccode)) { if (Dao.Get("cm.check.ctccode", new Hashtable() { { "ctnonot" + (vm.CT.ctno > 0 ? "" : "x"), vm.CT.ctno }, { "ccode", vm.CT.ccode } }).Count() > 0) { return JsonBack(new JsonRtn() { code = 1, obj = -9 }); } } if (vm.CT.ctype < 2 && Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { if ((vm.CT.fgno ?? 0) > 0) { //기존등록된 콘텐츠파일 삭제 Dao.Save("sys.file.del2", new Hashtable() { { "fgno", vm.CT.fgno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() }, { "isadmin", SUserInfo.IsAdmin ? 1 : 0 } }); } vm.CT.fgno = SetFile(Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.CT.fgno ?? 0, "ct", "fgno", 1, "XX", true); //콘텐츠파일이 업로드되었는데 수정모드라면 기존 폴더이름을 현재폴더이름 + 현재시간초 로 변경 /* /Contents스토리지폴더/콘텐츠코드/* */ if (!string.IsNullOrEmpty(vm.CT.ccode)) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Server.MapPath(vm.Contents+"/" + vm.CT.ccode)); if (di.Exists) { di.MoveTo(Server.MapPath(vm.Contents+"/" + vm.CT.ccode + "_backup_" + DateTime.Now.ToString("yyyyMMddHHmmss"))); } } if (!System.IO.Directory.Exists(Server.MapPath(vm.Contents+"/" + vm.CT.ccode))) { System.IO.Directory.CreateDirectory(Server.MapPath(vm.Contents+"/" + vm.CT.ccode)); } if (Request.Files.GetMultiple("file").First().FileName.Split('.').Last().ToUpper() == "ZIP") { //압축해제 var zf = GetFiles(vm.CT.fgno.Value); Helpers.UnZipFiles(Server.MapPath(vm.Contents + zf.First().fileurl), Server.MapPath(vm.Contents + "/" + vm.CT.ccode)); } else { Request.Files.GetMultiple("file").First().SaveAs(Server.MapPath(vm.Contents+"/" + vm.CT.ccode + "/" + Request.Files.GetMultiple("file").First().FileName.Split('\\').Last())); } } if (vm.CT.ctype == 0 && Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.CT.isoversize2 = 0; if (Request.Files.GetMultiple("file").Where(w => !string.IsNullOrEmpty(w.FileName)).First().ContentLength > 50000000) { vm.CT.isoversize = 1; vm.CT.isoversize2 = 1; } } if (Request.Files.GetMultiple("filetf").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.CT.fgnotf = SetFile(Request.Files.GetMultiple("filetf").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.CT.fgnotf ?? 0, "ct", "fgnotf"); } if (Request.Files.GetMultiple("filethumb").Where(w => !string.IsNullOrEmpty(w.FileName)).Count() > 0) { vm.CT.fgnothumb = SetFile(Request.Files.GetMultiple("filethumb").Where(w => !string.IsNullOrEmpty(w.FileName)).ToList(), vm.CT.fgnothumb ?? 0, "ct", "fgnothumb"); } if (vm.CT.ctno < 1) { vm.CT.Ds = new List() { }; Dao.Insert("cm.ct.in", vm.CT); int i = 1; vm.CT.inquery = ""; foreach(var s in vm.savedata.Split(';')) { var sv = s.Split(':'); vm.CT.inquery += ",(" + vm.CT.ctno + "," + (i++) + ",'" + sv[1].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "','" + sv[2].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "','" + sv[3].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "',0,now()," + vm.CT.uno + ",now()," + vm.CT.uno + ",'" + vm.CT.uip + "')"; } vm.CT.inquery = vm.CT.inquery.Substring(1); Dao.Save("cm.ctpage.in2", vm.CT); return JsonOK(vm.CT.ctno); } else { Dao.Save("cm.ct.up", vm.CT); vm.CT.Ds = new List() { }; int i = 1; //매핑된 과정/강좌 있을 경우 페이지 추가 막는다 if (Dao.Get("cm.ct.checkcmi", vm.CT.ctno).First() > 0) { vm.CT.inquery = ""; foreach (var s in vm.savedata.Split(';')) { var sv = s.Split(':'); if (sv[0] != "0") { vm.CT.Ds.Add(new CTPage() { cpno = GetInt(sv[0]), pseq = i++, cpname = sv[1].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";"), srcp = sv[2].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";"), srcm = sv[3].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") }); } } Dao.Save("cm.ctp.up", vm.CT); return JsonBack(new JsonRtn() { code = 1000, obj = 999 }); } else { vm.CT.inquery = ""; foreach (var s in vm.savedata.Split(';')) { var sv = s.Split(':'); if (sv[0] == "0") { vm.CT.inquery += ",(" + vm.CT.ctno + "," + (i++) + ",'" + sv[1].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "','" + sv[2].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "','" + sv[3].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") + "',0,now()," + vm.CT.uno + ",now()," + vm.CT.uno + ",'" + vm.CT.uip + "')"; } else { vm.CT.Ds.Add(new CTPage() { cpno = GetInt(sv[0]), pseq = i++, cpname = sv[1].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";"), srcp = sv[2].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";"), srcm = sv[3].Replace("nptechseconddeveloperphd", ":").Replace("nptechdeveloperphd", ";") }); } } if (vm.CT.inquery != "") { vm.CT.inquery = vm.CT.inquery.Substring(1); Dao.Save("cm.ctpage.in2", vm.CT); } if (vm.CT.Ds.Count() > 0) { Dao.Save("cm.ctp.up", vm.CT); } return JsonOK(vm.CT.ctno); } } } /// /// 컨텐츠 삭제 /// /// /// /// [HttpPost] public JsonResult CTDel(int ctno = 0, String ctnos = "") { if (ctno > 0) { return JsonOK(Dao.Save("cm.ct.del", new Hashtable() { { "ctno", ctno }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } else { return JsonOK(Dao.Save("cm.ct.del2", new Hashtable() { { "ctnos", ctnos }, { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() } })); } } /// /// 강의실게시판 강좌목록 /// /// /// [HttpPost] public JsonResult CMGetForBoard(int tmno) { if (SUserInfo.IsTeacher) { return JsonBack(Dao.Get("cm.mycms", new Hashtable() { { "tmno", tmno }, { "userno", SUserInfo.UserNo } })); } return JsonBack(Dao.Get("cm.cms", new System.Collections.Hashtable() { { "tmno", tmno }, { "ismaster", 0 }, { "orderby", "d.cname,d.classno" } })); } /// /// 게시판목록 /// /// /// [HttpPost] public JsonResult BMGetForBoard(int cmno) { CMMenu cmmenu = Dao.Get("cm.cmmenus", new System.Collections.Hashtable() { { "cmno", cmno } }).First(); return JsonBack(Dao.Get("board.bms", new System.Collections.Hashtable() { { "bmposition", 1 },{"bmnos",cmmenu.bmnos } })); } /// /// KFCF잔재 /// /// /// [HttpPost] public JsonResult CMCalc(String data) { var sd = new Hashtable() { { "uno", SUserInfo.UserNo }, { "uip", GetUserIP() }, { "Ds", new List() { } } }; var ds = new List() { }; foreach(var s in data.Split(';')) { var v = s.Split(':'); ds.Add(new CMCalc() { cmno = GetInt(v[0]), infee = GetInt(v[1]), outfee = GetInt(v[2]), feeloc = GetInt(v[3]), feebkpr = GetInt(v[4]), feebrt = GetInt(v[5]), feemat = GetInt(v[6]), feefoo = GetInt(v[7]), feeetc = GetInt(v[8]), prtcnt = GetInt(v[9]) }); } sd["Ds"] = ds; return JsonOK(Dao.Save("cm.cmcalc", sd)); } [HttpPost] public JsonResult CheckCmCalc(int cmno) { return JsonBack(new JsonRtn() { code = 1000 ,obj = Dao.Get("cm.cmcalc.print", cmno)}); } /// /// 강좌패키지 가져오기 /// /// /// [HttpPost] public JsonResult CMPCGet(int pcno) { return JsonBack(Dao.Get("cm.pcms", new System.Collections.Hashtable() { { "pcno", pcno } })); } /// /// 문제가져오기 /// /// /// [HttpPost] public JsonResult QuestionGet(int qno) { var rtn = new Hashtable() { }; rtn.Add("q", Dao.Get("cm.questions", new Hashtable() { { "qno", qno } }).First()); rtn.Add("qis", Dao.Get("cm.questionitems", new Hashtable() { { "qno", qno } })); return JsonBack(rtn); } /// /// 강좌설정 > 시험설정 > 시험목록 /// /// /// /// /// [HttpPost] public JsonResult ExamList(VMCM vm) { var p = new Hashtable(); p.Clear(); p.Add("cmno", vm.CM.cmno); p.Add("estart", vm.CM.estart); p.Add("eend", vm.CM.eend); p.Add("instructors", vm.CM.instructors); vm.ESTs = Dao.Get("cm.exlist", p); return JsonBackList(vm.ESTs); } /// /// 강좌 시험 저장 - 2025-12-26 / KHJ / 혹시 몰라서 최종평가(시험설정) 저장 로직을 따로 만들었음..ㅡㅡ /// /// /// [HttpPost] public JsonResult CMEXSave2025(VMCM vm) { vm.CMEX.uip = GetUserIP(); vm.CMEX.uno = SUserInfo.UserNo; //최종평가는 과정/강좌당 1개만 //if (vm.CMEX.extype == 1 && Dao.Get("cm.cmex.extype1count", new Hashtable() { { "cmno", vm.CMEX.cmno }, { "exno", vm.CMEX.exno } }).First() > 0) { // return JsonBack(new JsonRtn() { code = 1, obj = -1 }); //} if (vm.CMEX.exno > 0 && ExamSaveValid(vm.CMEX.exno) != "") { //응시자데이터 존재하므로 일부데이터만 저장 return JsonOK(Dao.Save("cm.cmex.savetop", vm.CMEX), false); } vm.CMEX.cmexqs = new List(); vm.CMEX.cmexlayers = new List(); if (vm.CMEX.eqtype == 1 && !string.IsNullOrEmpty(vm.savedata)) { //임의문항 foreach (String s in vm.savedata.Split(';')) { var s2 = s.Split(':'); vm.CMEX.cmexlayers.Add(new CMEXLayer() { exno = vm.CMEX.exno, qdiff = GetInt(s2[0]) , cc1 = GetInt(s2[1]), cc2 = GetInt(s2[2]), cc3 = GetInt(s2[3]), cc4 = GetInt(s2[4]), cc5 = GetInt(s2[5]), qcount = GetInt(s2[6]), rpoint = GetInt(s2[7]) }); vm.CMEX.tpoint += GetInt(s2[6]) * GetInt(s2[7]); vm.CMEX.qcount += GetInt(s2[6]); } } if (!string.IsNullOrEmpty(vm.savedata2)) { foreach (var q in vm.savedata2.Split(';')) { var qi = q.Split(':'); vm.CMEX.cmexqs.Add(new CMEXQ() { eqno = GetInt(qi[0]), qseq = GetInt(qi[1]), qno = GetInt(qi[2]), rpoint = GetInt(qi[3]) }); if (vm.CMEX.eqtype == 0) { vm.CMEX.tpoint += GetInt(qi[3]); } } if (vm.CMEX.eqtype == 0) { vm.CMEX.qcount = vm.CMEX.cmexqs.Count(); } } //2025-12-24 / KHJ / 시험응시 시작일/종료일 모델 바인딩 vm.CMEX.testsdate = vm.stringval18 + " " + vm.stringval19 + ":" + vm.stringval20; vm.CMEX.testedate = vm.stringval21 + " " + vm.stringval22 + ":" + vm.stringval23; return JsonOK(Dao.SaveExam(vm.CMEX), false); } } }