using System; using System.Collections.Generic; using System.Linq; using System.Text; using DataLibrary; using System.Data; using System.Threading; using Sybase.DataWindow; using System.IO; namespace AppProcessing { public class AppProcessing { public String CURRENT_SAVING_PATH=""; public String CURRENT_SAVING_PATH_PBL = ""; public String process_log; public String process_id; public String connectionString; public String object_name=""; public String criteria_xml=""; public String criteria_xml_1=""; public String criteria_xml_2=""; public String application=""; public DateTime workdate; public String coop_id; public String coop_control; public Sta taMain; public Sta taQuery; public void startProcessMsgLog(String msg, int numOfAllstep) { WriteLine("startProcessMsgLog"); String sql = "update cmprocessing set runtime_message='" + msg + "',entry_date=sysdate,start_process=0,end_process=" + numOfAllstep + " where process_id='" + process_id + "'"; execAutoCommit( sql); } public void updateProcessMsgLog(String msg,int step) { WriteLine("updateProcessMsgLog"); String sql = "update cmprocessing set runtime_message='" + msg + "',entry_date=sysdate,start_process=" + step + " where process_id='" + process_id + "'"; execAutoCommit( sql); } public void finishProcessMsgLog(String msg, int step) { WriteLine("finishProcessMsgLog"); String sql = "update cmprocessing set runtime_message='" + msg + "',entry_date=sysdate,finish_date=sysdate,start_process=" + step + ",runtime_status=1 where process_id='" + process_id + "'"; execAutoCommit(sql); try { taMain.Commit(); WriteLine("taMain Commit()"); } catch { } } public void cancelProcessMsgLog(String msg) { WriteLine("cancelProcessMsgLog"); if (msg != null) { String sql = "update cmprocessing set runtime_message='" + msg + "',entry_date=sysdate,finish_date=sysdate,runtime_status=-9 where process_id='" + process_id + "'"; execAutoCommit(sql); } try { taMain.RollBack(); WriteLine("taMain rollback()"); } catch { } } public void execAutoCommit(String sql) { Sta ta = new Sta(connectionString); try { WriteLine(sql); ta.Exe(sql); } catch (Exception e) { ta.RollBack(); e.ToString(); WriteLine(e.ToString()); } finally { ta.Close(); } } public String getProcessInfo() { String sql = "select * from cmprocessing where process_id='" + process_id + "'"; Sdt sdt = taQuery.Query(sql); if (sdt.Next()) { object_name = sdt.GetString("object_name"); WriteLine("object_name=" + object_name); criteria_xml = sdt.GetString("criteria_xml"); WriteLine("criteria_xml=" + criteria_xml); criteria_xml_1 = sdt.GetString("criteria_xml_1"); WriteLine("criteria_xml_1=" + criteria_xml_1); criteria_xml_2 = sdt.GetString("criteria_xml_2"); WriteLine("criteria_xml_2=" + criteria_xml_2); application = sdt.GetString("application"); WriteLine("application=" + application); coop_id = sdt.GetString("coop_id"); WriteLine("coop_id=" + coop_id); coop_control = sdt.GetString("coop_control"); WriteLine("coop_control=" + coop_control); workdate = sdt.GetDate("workdate"); WriteLine("workdate=" + workdate); getCurrentDir(); WriteLine("CURRENT_SAVING_PATH=" + CURRENT_SAVING_PATH); WriteLine("CURRENT_SAVING_PATH_PBL=" + CURRENT_SAVING_PATH_PBL); } return object_name; } public void initProcessing() { WriteLine(process_id + " " + connectionString); taMain = new Sta(connectionString); taQuery = new Sta(connectionString); try { taMain.Transection(); } catch (Exception e) { e.ToString(); WriteLine(e.ToString()); } finally { } } public void WriteLine(String log) { Console.WriteLine(DateTime.Now.ToString()+":"+log); try { StreamWriter w = File.AppendText(this.process_log); w.WriteLine(log); w.Close(); }catch{} } public void closeProcessing(String msg) { try { taMain.Commit(); } catch (Exception e) { try { taMain.RollBack(); } catch (Exception e1) { e1.ToString(); //WriteLine(e1.ToString()); } e.ToString(); //WriteLine(e.ToString()); } finally { taMain.Close(); taQuery.Close(); WriteLine((msg!=null?msg:"")+"Close :taMain: Process_ID=" + process_id); WriteLine((msg != null ? msg : "") + "Close :taQuery: Process_ID=" + process_id); } this.WriteLine("=========================CloseProcess:" + msg + "====================="); } public void getCurrentDir() { CURRENT_SAVING_PATH = Directory.GetCurrentDirectory().Replace("\\AppProcessing\\bin\\Release", "") + "\\Saving\\"; CURRENT_SAVING_PATH_PBL = CURRENT_SAVING_PATH + "DataWindow\\" + application + "\\" + ""; } public string getXMLStringValue(String xml,String name){ string value = ""; name="<" + name + ">"; int pos = xml.IndexOf(name); if(pos>0){ string tmp = xml.Substring(pos + name.Length); pos = tmp.IndexOf(" 0) { flag = false; } } Thread.Sleep(2000); } catch { flag = false; } } appM.closeProcessing("Monitoring"); Environment.Exit(0); } public static void runProcess( String process_id, String connectionString) { AppProcessing app = new AppProcessing(process_id, connectionString,"Main"); app.initProcessing(); app.getProcessInfo(); ThreadStart childref = new ThreadStart(delegate() { monitoringCheckProcess(app, process_id, connectionString); }); Thread childThread = new Thread(childref); childThread.Start(); app.runObjectProcessing(); app.closeProcessing("Main"); } public AppProcessing(String process_id, String connectionString,String msg) { this.process_id = process_id; this.connectionString = connectionString; this.process_log = Environment.GetEnvironmentVariable("TEMP") + "\\" + process_id + ".log"; this.WriteLine("=========================StartProcess:" + msg + "====================="); } public static void Main(string[] args) { if (args == null || args.Length==0) { args=new string[2]; args[0] = "process_id=636253608529656792"; args[1] = "dbconnect=Server=desktop-srv8lgi;Port=3306;Database=iscocukj;Uid=iscocukj;Pwd=iscocukj;charset=utf8mb4;"; } String process_id=args[0].Replace("process_id=", ""); String connectionString=args[1].Replace("dbconnect=", ""); AppProcessing.runProcess( process_id, connectionString); } //ส่วนเรียก Processing หลัก public void runObjectProcessing() { //ประมวลตั้งยอดจ่าย ฟ.20 if (object_name == "DPF20PROCESS") { /* * //1.ในหน้าจอ ASP.NET c# .aspx.cs * String xml_tmp = DwMain.Describe("DataWindow.Data.Xml"); * String xml = "003"; * outputProcess = WebUtil.runProcessingCapp(state, "DPF20PROCESS", xml, "", ""); * * //2.ทำการ เอา outputProcess ไป วางที่ .aspx * <%=outputProcess%> */ //เรียก Custom method สำหรับ ประมวล ที่ SAVE ใน CMPROCESSING.OBJECT_NAME WriteLine("run_dpf20process"); run_dpf20process(); } } //สร้าง Custom method สำหรับ ประมวล public void run_dpf20process() { int allStep = 4;//กำหนด Step ทั้งหมด //ดึงค่าจาก XML criteria_xml = FIELD payrate_code string payrate_code = getXMLStringValue(criteria_xml, "payrate_code"), member_no = "", recpaytype_code=""; decimal pay_rate =0; int period = 0; DateTime process_date ; startProcessMsgLog("กำลังดำเนินการเริ่มประมวลผล", allStep); //updateProcessMsgLog("Process = payrate_code=" + payrate_code,1); //Thread.Sleep(5000); //for (int i = 1; i <= allStep; i++){ updateProcessMsgLog("STEP " + 1+":ดึงข้อมูลอัตราคำนวณ % การจ่าย", 1);//Update processing message //เขียนงานที่ต้องทำ ตรงนี้ String sql = ""; try { sql = "select * from dpf20ucfpayrate where active_flag=1 "; Sdt sdt=taQuery.Query(sql); if(sdt.Next()){ payrate_code = sdt.GetString("payrate_code"); pay_rate = sdt.GetDecimal("pay_rate"); period = (int)sdt.GetDecimal("period"); process_date = sdt.GetDate("process_date"); recpaytype_code = sdt.GetString("recpaytype_code"); //updateProcessMsgLog("STEP " + 2 + "ดึงยอดคงเหลือบัญชีฟ.20รายตัว ...", 2);//Update processing message //sql = "update dpf20master d set prncbal=COALESCE((select dp.prncbal from dpdeptmaster dp where d.deptaccount_no= dp.deptaccount_no),0.00) "; //taMain.Exec(sql); updateProcessMsgLog("STEP " + 3 + ": ดึงทำจ่ายรายคนในงวดที่ ...", 3);//Update processing message sql = "select * from dpf20master where credit_amt > 0 "; sdt = taQuery.Query(sql); updateProcessMsgLog("STEP " + 3.1 + ": ดึงทำจ่ายราย 0/"+sdt.Rows.Count+" คน ", 3);//Update processing message long cnt = 0; while (sdt.Next()) { cnt++; if ((cnt % 500) == 0) { updateProcessMsgLog("STEP " + 3.2 + ": ดึงทำจ่ายราย " + cnt + "/" + sdt.Rows.Count + " คน ", 3);//Update processing message } try { member_no = sdt.GetString("member_no"); //sql =@""; sql = @" insert into dpf20slippay ( member_no, ref_memberno , deptaccount_no, dppayslip_no , dppayslip_date,debtgroup_code , debt_no,recpaytype_code, payrate_code,pay_rate,period,bfcredit_amt ,adjustdebit_amt ,adjustcredit_amt , credit_amt, item_amt,post_flag ,print_flag ,slip_status ,memb_name ,entry_id ,entry_date ) ( select d.member_no as member_no, d.ref_memberno as ref_memberno , d.deptaccount_no as deptaccount_no, concat(concat( cast(( (cast(date_format(now(),'%Y') as decimal(4,0) )+543)-2500) as char),d.ref_memberno ),'" + payrate_code + @"') as dppayslip_no , convert('"+process_date.ToString("yyyy-MM-dd")+@"' ,date) as dppayslip_date, d.debtgroup_code as debtgroup_code , COALESCE(d.debt_no,'-') as debt_no, '"+recpaytype_code+@"' as recpaytype_code, '" + payrate_code + @"' as payrate_code, " + pay_rate + @" as pay_rate, '" + period + @"' as period, d.credit_amt as bfcredit_amt , 0 as adjustdebit_amt , 0 as adjustcredit_amt , d.credit_amt as credit_amt, if(dp.prncbal>(d.credit_amt*3.7) ,(d.credit_amt*3.7),dp.prncbal) as item_amt, 0 as post_flag , 0 as print_flag , 1 as slip_status , d.memb_name as memb_name , 'admin' as entry_id , now() as entry_date from dpf20master d ,dpdeptmaster dp where d.member_no='" + member_no + @"' and dp.deptaccount_no=d.deptaccount_no and d.credit_amt > 0 and not exists (select s.dppayslip_no from dpf20slippay s where s.member_no='" + member_no + @"' and s.dppayslip_no= concat(concat( cast(( (cast(date_format(now(),'%Y') as decimal(4,0) )+543)-2500) as char),d.ref_memberno ),'" + payrate_code + @"') ) ) "; taMain.Query(sql); } catch (Exception ea) { WriteLine(ea.Message+"\n"+sql+"\n"); } } updateProcessMsgLog("STEP " + 3.2 + " : ดึงทำจ่ายราย " + sdt.Rows.Count + "/" + sdt.Rows.Count + " คน ", 3);//Update processing message } } catch(Exception e) { WriteLine(e.Message); //กรณีทำรายการ และ Error cancelProcessMsgLog("ทำรายการไม่สำเร็จ"+e.Message+" "); } //Thread.Sleep(3000); //} //กรณีทำรายการเสร็จสมบรูณ์ finishProcessMsgLog("ทำรายการสำเร็จ", allStep); } } }