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 ;
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 ;
}
public async Task < int > 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 )
{
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 ) ;
}
}
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-28 10:06:43 +09:00
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();
//}
}
}