YNICTE/Dao/CommonDao.cs

526 lines
20 KiB
C#
Raw Normal View History

2020-10-12 14:39:23 +09:00
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;
using MySql.Data.MySqlClient;
2020-10-12 14:39:23 +09:00
namespace NP.Dao
{
public partial class CommonDao : BaseDao
{
public IList<File> GetFiles(Int64 FGNo)
{
return base.Get<File>("sys.file.getbygroup", new Hashtable() { { "fgno", FGNo } });
}
public IList<File> GetFiles(string FGNos)
{
return base.Get<File>("sys.file.getbygroup", new Hashtable() { { "fgnos", FGNos } });
}
public IList<File> GetFilesByKey(Int64 FileNo)
{
return base.Get<File>("sys.file.getbyfileno", FileNo);
}
public Int64 SaveExam(CMEX e)
{
Trans();
try
{
if (e.exno < 1) { base.Insert<CMEX>("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<T> Get<T>(string v)
{
throw new NotImplementedException();
}
public int SaveQuestionBatch(IList<Question> data, Int64 UNo, String UIP)
{
int rtn = 0;
Trans();
try
{
Question q = new Question() { };
q.Qs = new List<Question>();
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<Question>("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<QuestionItem>();
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<Question>("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<int>("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<Data> 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>("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<CMEX>("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<CT> data)
{
int rtn = 0;
Trans();
try
{
foreach (var d in data)
{
base.Insert<CT>("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;
}
/// <summary>
/// 접속로그 등록
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
2020-10-12 14:39:23 +09:00
public async Task<int> Log(PageLog log)
{
int rtn = 0;
using (var conn = new MySqlConnection(Frame.DaoFactory.Instance.DataSource.ConnectionString))
2020-10-12 14:39:23 +09:00
{
try
{
await conn.OpenAsync();
using (var command = new MySqlCommand("insert into pagelog(logsite, userno, menuno, pno, loginfo, cdt, cno, udt, uno, uip) values (@logsite, @uno, @menuno, @pno, @loginfo, now(), @uno, now(), @uno, @uip)", conn))
{
command.Parameters.AddWithValue("@logsite", log.logsite);
command.Parameters.AddWithValue("@uno", log.uno);
command.Parameters.AddWithValue("@menuno", log.menuno ?? (object)DBNull.Value);
command.Parameters.AddWithValue("@pno", log.pno ?? (object)DBNull.Value);
command.Parameters.AddWithValue("@loginfo", log.loginfo ?? "");
command.Parameters.AddWithValue("@uip", log.uip);
rtn = await command.ExecuteNonQueryAsync();
}
2020-10-12 14:39:23 +09:00
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
2020-10-12 14:39:23 +09:00
}
}
2020-10-12 14:39:23 +09:00
return rtn;
}
public int SavePay(Pay p, bool inlect, bool inlectsedate = false)
2020-10-12 14:39:23 +09:00
{
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);
}
2020-10-12 14:39:23 +09:00
}
}
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<PayItem>() { };
var pispc = new List<PayItem>() { };
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<CM>() { };
var cmfeespc = new List<CM>() { };
if (pis.Count() > 0)
{
cmfees = base.Get<CM>("cm.cms.forpay2", string.Join(",", pis.Select(s => s.itemno).Distinct())).ToList();
}
if (pispc.Count() > 0)
{
cmfeespc = base.Get<CM>("cm.cms.forpaypc2", string.Join(",", pispc.Select(s => s.pcno.Value).Distinct())).ToList();
}
//사용자 소속 회원여부가져오기
var users = base.Get<Users>("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;
}
2020-10-12 14:39:23 +09:00
//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();
//}
}
}