using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace InvoicingTool { public partial class CheckBill : Form { QualityHelper _QualityHelper = new QualityHelper(); BackgroundWorker bgCheckBill = new BackgroundWorker(); Timer StartTimer = new Timer(); decimal _ApplyTime = 0; DateTime? _StartTime; string _ServerPartCode = ""; string _ShopCode = ""; string _MachineCode = ""; string _SellWorkerName = ""; string _ShopName = ""; string _ServiceUrl = ""; int _ExitTime = 5; bool _Working = true; public CheckBill() { InitializeComponent(); _StartTime = DateTime.Now; _ServerPartCode = _QualityHelper.serverpartcode; _ShopName = _QualityHelper.shopname; _ShopCode = _QualityHelper.shopcode; _MachineCode = _QualityHelper.machinecode; _ServiceUrl = "http://" + _QualityHelper.dbip + ":" + _QualityHelper.serviceport + "/Service.asmx"; bgCheckBill.WorkerReportsProgress = true; bgCheckBill.WorkerSupportsCancellation = true; bgCheckBill.DoWork += BgCheckBill_DoWork; bgCheckBill.RunWorkerCompleted += BgCheckBill_RunWorkerCompleted; StartTimer.Tick += new EventHandler(StartTimer_Tick); StartTimer.Interval = 1000; StartTimer.Start(); loadingCircle1.Switch(); } private void BgCheckBill_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //StartTimer.Stop(); } private void BgCheckBill_DoWork(object sender, DoWorkEventArgs e) { CheckBillCreate(); } private void StartTimer_Tick(object sender, EventArgs e) { if (_StartTime == null) { _StartTime = DateTime.Now; } //检查是否正在执行申请 if (!_Working) { LabelText("lblStartTime", "当前窗口将在(" + _ExitTime + ")秒后自动关闭。", Color.Black); if (_ExitTime <= 0) { this.Close(); } _ExitTime--; } else { if (!bgCheckBill.IsBusy) { bgCheckBill.RunWorkerAsync(); } TimeSpan _TimeSpan = DateTime.Now - _StartTime.Value; LabelText("lblStartTime", _TimeSpan.Minutes.ToString().PadLeft(2, '0') + "分" + _TimeSpan.Seconds.ToString().PadLeft(2, '0') + "秒", Color.Black); } } private void CheckBillCreate() { string _CheckDate = ""; string _Result = ""; if (_ServerPartCode == "" || _ShopCode == "" || _MachineCode == "") { return; } string _SelectSql = string.Format("select enddate from t_endaccount_new " + "where enddate = ( select max(enddate) from t_endaccount_new " + "where serverpartcode = {0} and shopcode = {1} and machinecode = {2} and endaccount_type <> 5 )", _ServerPartCode, _ShopCode, _MachineCode); try { _CheckDate = DBHelper.QueryOdbc(_SelectSql).Tables[0].Rows[0]["enddate"].ToString(); } catch { _CheckDate = ""; } if (_CheckDate == "") { LabelText("lblCheckDate", _CheckDate, Color.White); LabelText("lblShopName", _ShopName, Color.White); LabelText("lblMess", "当前收银机从未结账,不能进行盘点操作。", Color.Red); _Working = false; } else { LabelText("lblCheckDate", _CheckDate, Color.White); LabelText("lblShopName", _ShopName, Color.White); LabelText("lblMess", "正在申请创建盘点单......", Color.Red); string[] args = { _ServerPartCode, _ShopCode, _CheckDate, _SellWorkerName, "1000", "0", "0" }; try { _Result = WSHelper.InvokeWebService(_ServiceUrl, "CreateCheckBill", args).ToString(); } catch { _Result = ""; } if (_Result != "") { switch (_Result) { case "101": LabelText("lblMess", "盘点单申请成功,正在生成盘点明细。", Color.Black); break; case "201": LabelText("lblMess", "当前门店状态异常,请联系系统管理员。", Color.Black); break; case "300": LabelText("lblMess", "门店存在调拨退货业务,请前往综管平台处理。", Color.Black); break; case "301": LabelText("lblMess", "门店正在盘点,不能创建新的盘点申请。", Color.Black); break; case "302": LabelText("lblMess", "门店存在未校验的结账信息,请前往综管平台处理。", Color.Black); break; case "303": LabelText("lblMess", "门店存在未扣除库存的单品信息,请稍后重试。", Color.Black); break; case "304": LabelText("lblMess", "门店结账信息未上传,不能进行盘点操作。", Color.Black); break; case "999": LabelText("lblMess", "通讯异常,盘点单创建申请失败,请稍后重试。", Color.Black); break; default: LabelText("lblMess", "正在验证盘点申请结果,请稍候......", Color.Black); DataSet _DataSet = JsonHelper.JsonToDataSet(_Result.Replace(" ", "")); if (_DataSet.Tables.Count > 0) { DataTable _DataTable = _DataSet.Tables["CheckBill"]; if (_DataTable.Rows.Count > 0) { string _DeleteSql = "delete from t_checkcommoditydetail a where not exists ( " + "select 1 from t_checkcommodityex b where a.checkcommodity_id = " + "b.checkcommodity_id and b.check_state = 9)"; DBHelper.ExecuteSqlTran(_DeleteSql); _DeleteSql = "delete from t_checkcommodityex where check_state <> 9"; DBHelper.ExecuteSqlTran(_DeleteSql); foreach (DataRow _Row in _DataTable.Rows) { string checkcommodity_id = _Row["checkcommodity_id"].ToString(); string checkperson = _Row["checkperson"].ToString(); string checkdate = _Row["checkdate"].ToString(); string serverpart_id = _Row["serverpart_id"].ToString(); string serverpartshop_id = _Row["serverpartshop_id"].ToString(); string checkcommodity_desc = _Row["checkcommodity_desc"].ToString(); string check_state = _Row["check_state"].ToString(); string check_passport_guid = _Row["check_passport_guid"].ToString(); string check_type = _Row["check_type"].ToString(); //checkcommodity_id, checkperson, checkdate, serverpart_id, serverpartshop_id, checkcommodity_desc, check_state, check_passport_guid, check_type if (DBHelper.QueryOdbc("select 1 from t_checkcommodityex " + "where checkdate = datetime('" + checkdate + "')").Tables[0].Rows.Count == 0) { string _InsertSql = "insert into t_checkcommodityex (checkcommodity_id, checkperson," + " checkdate, serverpart_id, serverpartshop_id, checkcommodity_desc, check_state," + " check_passport_guid, check_type ) values(" + checkcommodity_id + ",'" + checkperson + "',datetime('" + checkdate + "')," + serverpart_id + "," + serverpartshop_id + ",'" + checkcommodity_desc + "'," + check_state + ",'" + check_passport_guid + "'," + check_type + ")"; DBHelper.ExecuteSqlTran(_InsertSql); } } LabelText("lblMess", "盘点单创建成功,系统正在生成盘点明细。", Color.Black); } else { LabelText("lblMess", "盘点单验证失败,请重试。", Color.Black); } } else { LabelText("lblMess", "盘点单验证失败,请重试。", Color.Black); } break; } _Working = false; } } } /// /// 线程输出文本 /// /// 控件名称 /// 文本内容 /// 文本颜色 public void LabelText(string name, string txt, Color color) { try { Invoke(new text(lbltext), new object[] { name, txt, color }); } catch (Exception ex) { } } delegate void text(string name, string txt, Color color); void lbltext(string name, string txt, Color color) { Label _Label = (Label)findControl(tlpCheckBill, name); _Label.ForeColor = color; _Label.Text = txt; } /// /// 在winform中查找控件 /// /// /// /// private Control findControl(Control control, string controlName) { Control c1; foreach (Control c in control.Controls) { if (c.Name == controlName) { return c; } else if (c.Controls.Count > 0) { c1 = findControl(c, controlName); if (c1 != null) { return c1; } } } return null; } private void CheckBill_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Escape: this.Close(); break; } } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } } }