using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NP.Model; using System.Collections; using NP.Dao.MyBatis; namespace NP.Dao { public partial class CommonDao : BaseDao { public IList GetFiles(Int64 FGNo) { return base.Get("sys.file.getbygroup", new Hashtable() { { "fgno", FGNo } }); } public IList GetFiles(string FGNos) { return base.Get("sys.file.getbygroup", new Hashtable() { { "fgnos", FGNos } }); } public IList GetFilesByKey(Int64 FileNo) { return base.Get("sys.file.getbyfileno", FileNo); } public Int64 SaveExam(CMEX e) { Trans(); try { if (e.exno < 1) { base.Insert("cm.cmex.in", e); if (e.exno < 1) { RollBack(); return 0; } } else { if (base.Save("cm.cmex.up", e) < 1) { RollBack(); return 0; } //현재 저장하려는 문항 이회의 기존 저장된 문항풀 삭제 if (e.cmexqs.Count() < 1 || e.cmexqs.Where(w => w.eqno > 0).Count() < 1) { base.Save("cm.cmexq.deleteall", e.exno); } else if (e.cmexqs.Where(w => w.eqno > 0).Count() > 0) { base.Save("cm.cmexq.delete", new Hashtable() { { "exno", e.exno }, { "eqnos", string.Join(",", e.cmexqs.Where(w => w.eqno > 0).Select(s => s.eqno)) } }); } } if (e.eqtype == 1) { base.Save("cm.cmexlayer.del", e.exno); if (e.cmexlayers.Count() > 0) { base.Save("cm.cmexlayer.in", e); } } if (e.cmexqs.Where(w => w.eqno > 0).Count() > 0) { var e2 = new CMEX() { exno = e.exno, uip = e.uip, uno = e.uno, cmexqs = e.cmexqs.Where(w => w.eqno > 0).ToList() }; base.Save("cm.cmexq.up", e2); } if (e.cmexqs.Where(w => w.eqno < 1).Count() > 0) { var e2 = new CMEX() { exno = e.exno, uip = e.uip, uno = e.uno, cmexqs = e.cmexqs.Where(w => w.eqno < 1).ToList() }; base.Save("cm.cmexq.in", e2); } Commit(); return e.exno; } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public IList Get(string v) { throw new NotImplementedException(); } public int SaveQuestionBatch(IList data, Int64 UNo, String UIP) { int rtn = 0; Trans(); try { Question q = new Question() { }; q.Qs = new List(); q.uno = UNo; q.uip = UIP; foreach (var d in data.ToList()) { if ((d.atype == 0 && d.QIs.Count() > 0) || d.atype != 0) { base.Insert("cm.question.in", d); if (d.qno > 0) { if (d.QIs.Count() > 0) { if (base.Save("cm.questionitem.in", d) < 1) { RollBack(); return 0; } } rtn++; } } else { RollBack(); return 0; } } Commit(); return rtn; } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public long SaveQuestion(Question q, int multicode) { var newQ = new Question(); if (q.qno > 0) { newQ.qno = q.qno; newQ.uno = q.uno; newQ.uip = q.uip; newQ.QIs = new List(); foreach (var nqi in q.QIs.Where(w => w.qino < 1).ToList()) { newQ.QIs.Add(new QuestionItem() { qno = q.qno, fgno = nqi.fgno, isright = nqi.isright, qitext = nqi.qitext }); } } Trans(); try { if (q.qno < 1) { base.Insert("cm.question.in", q); if (q.qno > 0 && q.QIs.Count() > 0) { if (base.Save("cm.questionitem.in", q) == q.QIs.Count()) { Commit(); return q.qno; } } else { Commit(); return q.qno; } } else { var isMapped = base.Get("cm.questionusings", q.qno).First() > 0; if (base.Save("cm.question.up" + (isMapped ? "top" : ""), q) > 0) { int upCount = 0; foreach (var qi in q.QIs.Where(w => w.qino > 0).ToList()) { qi.uno = q.uno; qi.uip = q.uip; upCount += base.Save("cm.questionitem.up", qi); } if (newQ.QIs != null && newQ.QIs.Count() > 0) { upCount += base.Save("cm.questionitem.in", newQ); } if (upCount == q.QIs.Count()) { Commit(); return upCount; } } } RollBack(); } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public int CMCopy(int cmno, int uno, String uip, List datas, int ismaster, int? tmno, String cname) { Trans(); try { var cm = new CM() { orgcmno = cmno, uno = uno, uip = uip, tmno = tmno, cname = cname, ismaster = ismaster }; //전체 복사 Insert("cm.cmcopy0", cm); //추가테이블 복사 Save("cm.cmcopy", cm); //시험데이터 복사 foreach(var d in datas.Where(w=>w.dtype == 0)) { var ex = new CMEX() { orgexno = d.intval, cmno = cm.cmno, uno = uno, uip = uip }; Insert("cm.cmcopy.ex0", ex); Save("cm.cmcopy.ex", ex); } //파일복제데이터 파일그룹번호 치환 foreach(var d in datas.Where(w=>w.dtype == 1 && w.longval3 > 0)) { Save("cm.cmsd.fgnoup", new Hashtable() { {"cmno", cm.cmno }, {"orgsdno", d.intval },{ "fgno", d.longval3} }); } foreach (var d in datas.Where(w => w.dtype == 2 && w.longval3 > 0)) { Save("cm.cminning.fgnoup", new Hashtable() { { "cmno", cm.cmno }, { "orgcmino", d.longval4 }, { "fgno", d.longval3 } }); } foreach (var d in datas.Where(w => w.dtype == 3 && w.longval3 > 0)) { Save("cm.cm.fgnocmup", new Hashtable() { { "cmno", cm.cmno }, { "fgnocm", d.longval3 } }); } Commit(); return cm.cmno; } catch (Exception ex) { RollBack(); try { Save("sys.error", new System.Collections.Hashtable() { { "err", ex.Message + ex.StackTrace }, { "userno", uno } }); } catch (Exception ex2) { Logger.TryError(ex.Message, ex2); } } return 0; } public int SaveContentsBatch(IList data) { int rtn = 0; Trans(); try { foreach (var d in data) { base.Insert("cm.ct.in", d); if (d.ctno > 0) { if (base.Save("cm.ctpage.in", d) < 1) { RollBack(); return 0; } rtn++; } else { RollBack(); return 0; } } Commit(); return rtn; } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public async Task Log(PageLog log) { int rtn = 0; using (MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(NP.Frame.DaoFactory.Instance.DataSource.ConnectionString)) { try { //int count = 0; MySql.Data.MySqlClient.MySqlCommand command = new MySql.Data.MySqlClient.MySqlCommand("insert into pagelog(logsite,userno,menuno,pno,loginfo,cdt,cno,udt,uno,uip)values(" + log.logsite + "," + log.uno + "," + (log.menuno == null ? "null" : log.menuno.ToString()) + "," + (log.pno == null ? "null" : log.pno.ToString()) + ",'" + (log.loginfo ?? "") + "',now()," + log.uno + ",now()," + log.uno + ",'" + log.uip + "')", conn); command.CommandType = System.Data.CommandType.Text; conn.Open(); //conn.OpenAsync(); //command.ExecuteNonQuery(); rtn = (int) await command.ExecuteNonQueryAsync(); //IAsyncResult result = command.BeginExecuteNonQuery(new AsyncCallback(logcompleted), command); //IAsyncResult result = command.BeginExecuteNonQuery(); //while (!result.IsCompleted) //{ // Console.WriteLine("Waiting ({0})", count++); // // Wait for 1/10 second, so the counter // // does not consume all available resources // // on the main thread. // System.Threading.Thread.Sleep(100); //} //Console.WriteLine("Command complete. Affected {0} rows.", // command.EndExecuteNonQuery(result)); //command.EndExecuteNonQuery(result); } catch (MySql.Data.MySqlClient.MySqlException ex) { //Console.WriteLine("Error ({0}): {1}", ex.Number, ex.Message); } catch (InvalidOperationException ex) { //Console.WriteLine("Error: {0}", ex.Message); } catch (Exception ex) { // You might want to pass these errors // back out to the caller. //Console.WriteLine("Error: {0}", ex.Message); } } return rtn; } public int SavePay(Pay p, bool inlect, bool inlectsedate = false) { Trans(); try { //결제헤더 base.Insert("pay.pay.in", p); foreach (var pi in p.PIs) { pi.payno = p.payno; //결제상세 base.Insert("pay.payitem.in", pi); if (inlect) { //수강데이터 base.Insert("pay.lect.in", pi); if (inlectsedate) { //온라인강좌 수강시작일, 수강종료일 수정 base.Save("pay.lect.sedate.save", p); } } } Commit(); return 1; } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public int SavePayBatch(String datas, int uno, String uip) { var pis = new List() { }; var pispc = new List() { }; var usernos = ""; foreach (var s in datas.Split(';')) { var v = s.Split(':'); usernos += "," + v[2]; var pi = new PayItem() { ptype = string.IsNullOrEmpty(v[0]) ? 0 : 1, pcno = string.IsNullOrEmpty(v[0]) ? (int?)null : Convert.ToInt32(v[0]), itemno = Convert.ToInt32(v[1]), userno = Convert.ToInt32(v[2]), pptype = Convert.ToInt32(v[3]), status = 1, ispc = string.IsNullOrEmpty(v[0])?0:1, pstatus = 1, pcnt = 1, payamt = Convert.ToInt32(v[4]), payamtcash = v[3] == "5" ? Convert.ToInt32(v[5]) : 0, payamtcard = v[3] == "5" ? Convert.ToInt32(v[6]) : 0, uno = uno, uip = uip }; if (pi.ptype == 0) { pis.Add(pi); } else { pispc.Add(pi); } } pispc = pispc.OrderBy(o => o.pcno).ThenBy(t => t.userno).ToList(); //정가 가져오기 var cmfees = new List() { }; var cmfeespc = new List() { }; if (pis.Count() > 0) { cmfees = base.Get("cm.cms.forpay2", string.Join(",", pis.Select(s => s.itemno).Distinct())).ToList(); } if (pispc.Count() > 0) { cmfeespc = base.Get("cm.cms.forpaypc2", string.Join(",", pispc.Select(s => s.pcno.Value).Distinct())).ToList(); } //사용자 소속 회원여부가져오기 var users = base.Get("users.byusernos", usernos.Substring(1)); Trans(); try { int pcno = 0; int userno = 0; foreach (var pi in pispc) { if (pcno != pi.pcno.Value || userno != pi.userno.Value) { pcno = Convert.ToInt32(pi.pcno.Value); userno = pi.userno.Value; var user = users.Where(w => w.userno == userno).First(); //결제헤더 var pay = new Pay() { ptype = pi.pptype, userno = pi.userno.Value, pstatus = 1, rstatus = 0, refunding = 0, orgamt = cmfeespc.Where(w => w.pcno == pcno).Sum(s => user.isjoin == 1 ? s.infee : s.outfee), isinmoney = 1, payamt = pispc.Where(w => w.pcno == pcno && w.userno == userno).Sum(s => s.payamt), PIs = pispc.Where(w => w.pcno == pcno && w.userno == userno).ToList(), uno = userno, uip = uip }; base.Insert("pay.pay.in", pay); foreach (var pi2 in pay.PIs) { pi2.isjoin = user.isjoin; pi2.payno = pay.payno; pi2.orgamt = cmfeespc.Where(w => w.pcno == pcno && w.cmno == pi2.itemno).Select(s => user.isjoin == 1 ? s.infee : s.outfee).First(); //결제상세 base.Insert("pay.payitem.in", pi2); //수강데이터 base.Insert("pay.lect.in", pi2); } } } var cmno = 0; userno = 0; foreach (var pi in pis) { if (cmno != pi.itemno || userno != pi.userno.Value) { cmno = Convert.ToInt32(pi.itemno); userno = pi.userno.Value; var user = users.Where(w => w.userno == userno).First(); //결제헤더 var pay = new Pay() { ptype = pi.pptype, userno = pi.userno.Value, pstatus = 1, rstatus = 0, refunding = 0, orgamt = cmfees.Where(w => w.cmno == cmno).Sum(s => user.isjoin == 1 ? s.infee : s.outfee), isinmoney = 1, payamt = pis.Where(w => w.itemno == cmno && w.userno == userno).First().payamt, PIs = pis.Where(w => w.itemno == cmno && w.userno == userno).ToList(), uno = userno, uip = uip }; base.Insert("pay.pay.in", pay); foreach (var pi2 in pay.PIs) { pi2.isjoin = user.isjoin; pi2.payno = pay.payno; pi2.orgamt = cmfees.Where(w => w.cmno == pi2.itemno).Select(s => user.isjoin == 1 ? s.infee : s.outfee).First(); //결제상세 base.Insert("pay.payitem.in", pi2); //수강데이터 base.Insert("pay.lect.in", pi2); } } } Commit(); return 1; } catch (Exception ex) { RollBack(); Logger.TryError(ex.Message, ex); } return 0; } public Int64 PayIn(Pay pay) { Trans(); try { Insert("pay.pay.pgin", pay); if (pay.payno > 0) { if (Save("pay.payitem.pgin", pay) == pay.PIs.Count()) { if (pay.isdvr == 1) { pay.PayDVR.payno = pay.payno; pay.PayDVR.uno = pay.uno; pay.PayDVR.uip = pay.uip; Save("pay.paydvr.in", pay.PayDVR); } if (pay.ptype == 6) { //0원강좌는 바로 수강완료 처리 Save("pay.freeok", pay.payno); } Commit(); return pay.payno; } } RollBack(); return 0; } catch (Exception ex) { RollBack(); Save("sys.error", new System.Collections.Hashtable() { { "err", ex.StackTrace }, { "userno", pay.uno } }); Logger.TryError(ex.Message, ex); } return 0; } //private void logcompleted(IAsyncResult result) //{ // MySql.Data.MySqlClient.MySqlCommand command = (MySql.Data.MySqlClient.MySqlCommand)result.AsyncState; // MySql.Data.MySqlClient.MySqlDataReader reader = command.EndExecuteReader(result); // while (reader.Read()) // { // } // reader.Close(); //} } }