using System; using System.Collections.Generic; using System.Data; using System.Data.Odbc; using System.Drawing; using System.Runtime.InteropServices; using System.Threading; using System.Web; using System.Windows; using System.Windows.Forms; using ZXing; using ZXing.Common; using ZXing.QrCode.Internal; namespace DataUpdate { public partial class DataUpdate : Form { //EncodingOptions options = null; //BarcodeWriter writer = null; //调用API [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern IntPtr GetForegroundWindow(); //获得本窗体的句柄 [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")] public static extern bool SetForegroundWindow(IntPtr hWnd);//设置此窗体为活动窗体 public static string _type; public static decimal days = -3; public string serverpartcode { get { return ConfigUrationValues("serverpartcode", "").Trim(); } } public string shopcode { get { return ConfigUrationValues("shopcode", "").Trim(); } } public string machinecode { get { return ConfigUrationValues("machinecode", "").Trim(); } } /// /// 服务器IP /// public string dbip { get { return ConfigUrationValues("server_ip", "").Trim() == "" ? ConfigUrationValues("dbip", "").Trim() : ConfigUrationValues("server_ip", "").Trim(); } } /// /// webservice服务端口 /// public string serviceport { get { return ConfigUrationValues("service_port", "7080").Trim(); } } Thread UpLoadThread; public DataUpdate(string[] type) { InitializeComponent(); WindowState = FormWindowState.Normal; Width = 1; Height = 1; //_type = type[0]; //QRCodeThread(); //TimerHandle.Interval = 1000; //TimerHandle.Start(); } string checkcode; DataTable DataList { get; set; } DataTable UploadTable { get; set; } private void TimerHandle_Tick(object sender, EventArgs e) { if (Handle != GetForegroundWindow()) //持续使该窗体置为最前,屏蔽该行则单次置顶 { SetForegroundWindow(Handle); } } #region 方法 --> 开始二维码生成 /// /// 开始二维码生成 /// public void QRCodeThread() { //if (_type == "CommoditySale") //{ InputMain Input = new InputMain(_type); Input.Text = "选择上传天数"; Input.ShowDialog(); if (Input.DialogResult == DialogResult.OK) { double _double = Convert.ToDouble(Input.StrValue) * -1; if (_double < 0) QRcodeAdd(_type, DateTime.Now.AddDays(_double).ToShortDateString()); else QRcodeAdd(_type, strUpload_Date(_type)); } else { QRcodeAdd(_type, strUpload_Date(_type)); } } #endregion #region 方法 --> 生成本次单品集合数据二维码字符串列表 /// /// 生成单品集合数据 /// private DataTable SaleQrCode(string Upload_Date) { string _strSalestart = ""; string _strSaleend = ""; string strtmp = ""; string saletmp = ""; int m = 0; //List _listSale = new List(); DataTable _DataTable = new DataTable("list"); _DataTable.Columns.Add("id", typeof(decimal)); _DataTable.Columns.Add("startdate", typeof(DateTime)); _DataTable.Columns.Add("enddate", typeof(DateTime)); _DataTable.Columns.Add("salestr", typeof(string)); _DataTable.Columns.Add("salerow", typeof(int)); _DataTable.Columns.Add("checkMD5", typeof(string)); //获取未上传单品记录(交班时间) string strsql = "select transfer_id, serverpartcode, shopcode,machinecode, startdate, enddate from t_transfer_sale a " + "where serverpartcode = '" + serverpartcode + "' and shopcode = '" + shopcode + "' and enddate > datetime('" + Upload_Date + "') and not exists ( select 1 from t_dataupdate b " + " where a.transfer_id = b.data_id and enddate = b.data_date and b.data_type = 3001 and " + "b.data_date <= datetime('" + Upload_Date + "')) order by transfer_id asc "; using (OdbcDataAdapter da = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet ds = new DataSet(); da.Fill(ds, "t_transfer_sale"); DataTable _TransferSaleTable = ds.Tables["t_transfer_sale"]; UploadTable = _TransferSaleTable; DataTable _TempTable = _TransferSaleTable.DefaultView.ToTable(true, new string[] { "serverpartcode", "shopcode", "machinecode", "startdate", "enddate" }); for (int i = 0; i < _TempTable.Rows.Count; i++) { m = 0; _strSalestart = _TempTable.Rows[i]["serverpartcode"].ToString() + "|" + _TempTable.Rows[i]["shopcode"].ToString() + "|" + _TempTable.Rows[i]["machinecode"].ToString() + "|" + Convert.ToDateTime(_TempTable.Rows[i]["startdate"]).ToString("yyyyMMddHHmmss") + "|" + Convert.ToDateTime(_TempTable.Rows[i]["enddate"]).ToString("yyyyMMddHHmmss"); //根据交班时间获取单品记录 strsql = "select b.commodity_symbol,a.totalcount,a.totalsellamount from t_commoditysale a, t_commodityex b " + " where a.startdate = datetime('" + _TempTable.Rows[i]["startdate"].ToString() + "') and a.enddate = datetime('" + _TempTable.Rows[i]["enddate"].ToString() + "') and a.serverpartcode = '" + _TempTable.Rows[i]["serverpartcode"].ToString() + "' and shopcode = '" + _TempTable.Rows[i]["shopcode"].ToString() + "' and a.commodity_code = b.commodity_code " + " order by commoditysale_id"; using (OdbcDataAdapter saleda = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet _DataSet = new DataSet(); saleda.Fill(_DataSet, "t_commoditysale"); DataTable _SaleTable = _DataSet.Tables["t_commoditysale"]; for (int n = 0; n < _SaleTable.Rows.Count; n++) { saletmp = _SaleTable.Rows[n]["commodity_symbol"].ToString() + "^" + _SaleTable.Rows[n]["totalcount"].ToString().Replace(".00", "") + "^" + _SaleTable.Rows[n]["totalsellamount"].ToString().Replace(".00", ""); if ((strtmp.Length + saletmp.Length) > 300) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = m; _row["startdate"] = _TempTable.Rows[i]["startdate"]; _row["enddate"] = _TempTable.Rows[i]["enddate"]; _row["salestr"] = strtmp; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } strtmp += (strtmp == "" ? _strSalestart + "|" : ",") + saletmp; if (n == (_SaleTable.Rows.Count - 1)) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = m; _row["startdate"] = _TempTable.Rows[i]["startdate"]; _row["enddate"] = _TempTable.Rows[i]["enddate"]; _row["salestr"] = strtmp; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } } } //根据交班时间获取企业会员、大巴券单品记录 strsql = "select b.commodity_symbol,a.totalcount,a.totalsellamount,a.flag from t_commoditysale_extar a, t_commodityex b " + " where a.startdate = datetime('" + _TempTable.Rows[i]["startdate"].ToString() + "') and a.enddate = datetime('" + _TempTable.Rows[i]["enddate"].ToString() + "') and a.serverpartcode = '" + _TempTable.Rows[i]["serverpartcode"].ToString() + "' and shopcode = '" + _TempTable.Rows[i]["shopcode"].ToString() + "' and a.commodity_code = b.commodity_code " + " order by commoditysale_id"; using (OdbcDataAdapter saleda = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet _DataSet = new DataSet(); saleda.Fill(_DataSet, "t_commoditysale_extar"); DataTable _SaleTable = _DataSet.Tables["t_commoditysale_extar"]; for (int n = 0; n < _SaleTable.Rows.Count; n++) { decimal.TryParse(_SaleTable.Rows[n]["totalcount"].ToString(), out decimal totalcount); decimal.TryParse(_SaleTable.Rows[n]["totalsellamount"].ToString(), out decimal totalsellamount); saletmp = _SaleTable.Rows[n]["commodity_symbol"].ToString() + "^" + totalcount.ToString("F2").Replace(".00", "") + "^" + totalsellamount.ToString("F2").Replace(".00", "") + "^" + _SaleTable.Rows[n]["flag"].ToString(); if ((strtmp.Length + saletmp.Length) > 300) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = m; _row["startdate"] = _TempTable.Rows[i]["startdate"]; _row["enddate"] = _TempTable.Rows[i]["enddate"]; _row["salestr"] = strtmp; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } strtmp += (strtmp == "" ? _strSalestart + "|" : ",") + saletmp; if (n == (_SaleTable.Rows.Count - 1)) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = m; _row["startdate"] = _TempTable.Rows[i]["startdate"]; _row["enddate"] = _TempTable.Rows[i]["enddate"]; _row["salestr"] = strtmp; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } } } } if (_DataTable.Rows.Count > 0) { string MD5 = "", strMD5 = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { strMD5 += (strMD5 == "" ? "" : ",") + _DataTable.Rows[i]["salestr"].ToString(); } MD5 = CreateMD5(strMD5); for (int i = 0; i < _DataTable.Rows.Count; i++) { _DataTable.Rows[i]["checkMD5"] = MD5; } checkcode = MD5; } } return _DataTable; } /// /// 生成单品集合数据 /// private DataTable SaleQrCodeOld(string Upload_Date) { string _strSalestart = ""; string _strSaleend = ""; string strtmp = ""; int m = 0; //List _listSale = new List(); DataTable _DataTable = new DataTable("list"); _DataTable.Columns.Add("id", typeof(decimal)); _DataTable.Columns.Add("startdate", typeof(DateTime)); _DataTable.Columns.Add("enddate", typeof(DateTime)); _DataTable.Columns.Add("salestr", typeof(string)); _DataTable.Columns.Add("salerow", typeof(int)); _DataTable.Columns.Add("checkMD5", typeof(string)); string strsql = "select transfer_id, serverpartcode, shopcode,machinecode, startdate, enddate, transfer_firstdatas, " + "transfer_seconddatas, transfer_thirddatas, transfer_forthdatas, transfer_fifthdatas, transfer_sixthdatas, " + "transfer_seventhdatas, transfer_eighthdatas, transfer_ninthtdatas, transfer_tenthdatas, transfer_eleventhdatas, " + "transfer_twelfthdatas,transfer_thirteenthdatas, transfer_fourteenthdatas, transfer_fifteenthdatas " + "from t_transfer_sale a where serverpartcode = '" + serverpartcode + "' and shopcode = '" + shopcode + "' and enddate > datetime('" + Upload_Date + "') and not exists ( select 1 from t_dataupdate b " + "where a.transfer_id = b.data_id and enddate = b.data_date and b.data_type = 3001 and " + "b.data_date <= datetime('" + Upload_Date + "')) order by transfer_id asc"; using (OdbcDataAdapter da = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet ds = new DataSet(); da.Fill(ds, "t_transfer_sale"); DataTable dt = ds.Tables["t_transfer_sale"]; int indexstart = 0, indexend = 0; for (int i = 0; i < dt.Columns.Count; i++) { if (dt.Columns[i].ColumnName.ToLower() == "transfer_firstdatas") { indexstart = i; } else if (dt.Columns[i].ColumnName.ToLower() == "transfer_thirteenthdatas") { indexend = i; } } foreach (DataRow row in dt.Rows) { List _listTmp = new List(); _strSalestart = ""; _strSaleend = ""; strtmp = ""; m = 0; for (int i = 0; i < dt.Columns.Count; i++) { if (i < indexstart) { _strSalestart += (_strSalestart == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() == "System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") : row[i].ToString().Replace(".00", "")); } else if (i >= indexstart && i < indexend) { if (row[i] != DBNull.Value) { List _tmp = new List(row[i].ToString().Split(',')); _listTmp.AddRange(_tmp); } } else if (i >= indexend && i < (dt.Columns.Count - 1)) _strSaleend += (_strSaleend == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() == "System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") : row[i].ToString().Replace(".00", "")); } for (int i = 0; i < _listTmp.Count; i++) { if ((strtmp.Length + _listTmp[i].Length) > 300) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = row["transfer_id"]; _row["startdate"] = row["startdate"]; _row["enddate"] = row["enddate"]; _row["salestr"] = strtmp; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } strtmp += (strtmp == "" ? _strSalestart + "|" : ",") + _listTmp[i].Replace(".00", "").Replace("&&", "^"); if (i == (_listTmp.Count - 1)) { m++; DataRow _row = _DataTable.NewRow(); _row["id"] = row["transfer_id"]; _row["startdate"] = row["startdate"]; _row["enddate"] = row["enddate"]; _row["salestr"] = strtmp + "|" + _strSaleend; _row["salerow"] = m; _DataTable.Rows.Add(_row); strtmp = ""; } } string MD5 = "", strMD5 = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { strMD5 += (strMD5 == "" ? "" : ",") + _DataTable.Rows[i]["salestr"].ToString(); } MD5 = CreateMD5(strMD5); for (int i = 0; i < _DataTable.Rows.Count; i++) { _DataTable.Rows[i]["checkMD5"] = MD5; } checkcode = MD5; } } //QRcodeAdd("CommoditySale", _DataTable); return _DataTable; } #endregion #region 方法 --> 生成本次结账及收银交班数据二维码字符串列表 /// /// 生成结账数据 /// private DataTable EndAccountQrCode(string Upload_Date) { string _strEndAccount = ""; string _strPersonSell = ""; string _strTemp = ""; //List _listEndAccount = new List(); DataTable _DataTable = new DataTable("list"); _DataTable.Columns.Add("id", typeof(decimal)); _DataTable.Columns.Add("startdate", typeof(DateTime)); _DataTable.Columns.Add("enddate", typeof(DateTime)); _DataTable.Columns.Add("endaccountstr", typeof(string)); _DataTable.Columns.Add("personsellstr", typeof(string)); _DataTable.Columns.Add("flag", typeof(string)); _DataTable.Columns.Add("checkMD5", typeof(string)); //_DataTable.Columns.Add("sellrow", typeof(string)); string strsql = "select endaccount_id, endaccount_startdate, endaccount_date, serverpartcode, shopcode, " + "machinecode, endpersoncode, ticketcount, totalcount, totalsellamount, totaloffamount, cash, creditcard, " + "ticketbill, vipperson, costbill, otherpay, cashpay, flag from t_endaccount a where serverpartcode = '" + serverpartcode + "' and shopcode = '" + shopcode + "' and machinecode = '" + machinecode + "' and endaccount_date > datetime('" + Upload_Date + "') and not exists ( select 1 from t_dataupdate b " + "where a.endaccount_id = b.data_id and endaccount_date = b.data_date and b.data_type in (1001,1002)" + " and b.data_date <= datetime('" + Upload_Date + "')) order by endaccount_date asc"; using (OdbcDataAdapter da = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet ds = new DataSet(); da.Fill(ds, "t_endaccount"); DataTable dt = ds.Tables["t_endaccount"]; UploadTable = dt; //int index = 0; //for (int i = 0; i < dt.Columns.Count; i++) //{ // if (dt.Columns[i].ColumnName.ToLower() == "flag") // { // index = i; // break; // } //} foreach (DataRow row in dt.Rows) { _strEndAccount = ""; _strPersonSell = ""; _strTemp = ""; for (int i = 0; i < dt.Columns.Count; i++) { _strEndAccount += (_strEndAccount == "" ? "" : "|") + (dt.Columns[i].DataType.ToString() == "System.DateTime" ? Convert.ToDateTime(row[i]).ToString("yyyyMMddHHmmss") : row[i].ToString().Replace(".00", "")); } strsql = "select personsell_id, serverpartcode, shopcode, machinecode, startdate, enddate, " + "cashworker_code, ticketcount, totalcount, totalsellamount, totaloffamount, cash, ticketbill, " + "creditcard, vipperson, costbill, otherpay, cashpay, endpersoncode, reserve_firstnum, " + "reserve_secondnum, reserve_thirdnum, reserve_firstchar, reserve_secondchar, reserve_thirdchar, " + "reserve_firstdate, reserve_seconddate, reserve_thirddate from t_personsell where serverpartcode = '" + serverpartcode + "' and shopcode = '" + shopcode + "' and machinecode = '" + machinecode + "' and startdate >= datetime('" + row["endaccount_startdate"].ToString() + "') and enddate <= datetime('" + row["endaccount_date"].ToString() + "') order by personsell_id asc"; using (OdbcDataAdapter personsell = new OdbcDataAdapter(strsql, AnyWhereConn())) { DataSet personsellds = new DataSet(); personsell.Fill(personsellds, "t_personsell"); DataTable person = personsellds.Tables["t_personsell"]; //int _index = 0; //for (int i = 0; i < dt.Columns.Count; i++) //{ // if (dt.Columns[i].ColumnName.ToLower() == "worknumber") // { // _index = i; // break; // } //} foreach (DataRow _DataRow in person.Rows) { _strTemp = ""; for (int i = 0; i < dt.Columns.Count; i++) { _strTemp += (_strTemp == "" ? "" : "|") + (person.Columns[i].DataType.ToString() == "System.DateTime" ? Convert.ToDateTime(_DataRow[i]).ToString("yyyyMMddHHmmss") : _DataRow[i].ToString().Replace(".00", "")); } _strPersonSell += (_strPersonSell == "" ? "" : ",") + _strTemp; } } //if (_strPersonSell != "") //{ DataRow _row = _DataTable.NewRow(); _row["id"] = row["endaccount_id"]; _row["startdate"] = row["endaccount_startdate"]; _row["enddate"] = row["endaccount_date"]; _row["endaccountstr"] = _strEndAccount; _row["personsellstr"] = _strPersonSell; _row["flag"] = row["flag"]; _DataTable.Rows.Add(_row); //} string MD5 = "", strMD5 = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { strMD5 += (strMD5 == "" ? "" : ",") + _DataTable.Rows[i]["endaccountstr"].ToString(); } MD5 = CreateMD5(strMD5); for (int i = 0; i < _DataTable.Rows.Count; i++) { _DataTable.Rows[i]["checkMD5"] = MD5; } checkcode = MD5; } } //QRcodeAdd("EndAccount", _DataTable); return _DataTable; } #endregion #region 创建md5 16位大写加密 public static string CreateMD5(string text) { var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //换成utf8后对于中文加密也适用 byte[] output = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text)); string pass2md5 = BitConverter.ToString(output, 4, 8).Replace("-", ""); //pass2md5 = pass2md5.ToUpper(); return pass2md5; } #endregion #region 方法 --> 显示二维码列表 /// /// 显示二维码列表 /// /// 显示类型 /// 字符串列表 private void QRcodeAdd(string name, string Upload_date) { int _Length = 0, _RowCount = 0, _RecordCount = 0, _ScanIndex = 0, _ScanCount = 0; string _data1 = "", _data2 = ""; //DataTable list = new DataTable(); lblProvince.ForeColor = Color.White; if (name == "CommoditySale") { switch (ConfigUrationValues("CommoditySaleURL", "http://syyw.eshangtech.com:8060/ScanUpdate/CommoditySale.html")) { case "http://syyw.eshangtech.com:8060/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:四川"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:浙江"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate_GZ/CommoditySale.html": lblProvince.Text = "当前上传省份:贵州"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate_Test/CommoditySale.html": lblProvince.Text = "当前上传省份:驿商测试"; break; case "http://113.16.255.162:6060/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:广西恒信"; break; case "http://60.191.61.27:8080/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:广西交投"; break; case "http://47.92.38.105:6060/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:甘肃"; break; case "http://220.177.42.231:6060/ScanUpdate/CommoditySale.html": lblProvince.Text = "当前上传省份:江西"; break; default: lblProvince.Text = ""; break; } label2.Text = "单品数据扫码上传"; label1.Text = "扫码结束后,需按Enter键扫手机确认码"; DataList = SaleQrCode(Upload_date); } else { switch (ConfigUrationValues("EndAccountURL", "http://syyw.eshangtech.com:8060/ScanUpdate/EndAccount.html")) { case "http://syyw.eshangtech.com:8060/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:四川"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:浙江"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate_GZ/EndAccount.html": lblProvince.Text = "当前上传省份:贵州"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate_Test/EndAccount.html": lblProvince.Text = "当前上传省份:驿商测试"; break; case "http://113.16.255.162:6060/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:广西恒信"; break; case "http://60.191.61.27:8080/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:广西交投"; break; case "http://47.92.38.105:6060/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:甘肃"; break; case "http://220.177.42.231:6060/ScanUpdate/EndAccount.html": lblProvince.Text = "当前上传省份:江西"; break; default: lblProvince.Text = ""; break; } label2.Text = "日结营收扫码上传"; label1.Text = "扫码结束后,需按Enter键扫手机确认码"; DataList = EndAccountQrCode(Upload_date); } flowLayoutPanel1.Controls.Clear(); if (DataList.Rows.Count > 0) { //_SaveTable = list; for (int n = 0; n < DataList.Rows.Count; n++) { //建立图像显示 PictureBox qrbox = new PictureBox { Height = 210, Width = 210, Name = "qrbox" + n, Location = new System.Drawing.Point(12, 8), Margin = new Padding(5), BackColor = Color.Red }; //建立图像说明 Label qrdate = new Label { Height = 20, Width = 95 }; qrdate.Font = new Font(qrdate.Font.FontFamily, 10, System.Drawing.FontStyle.Bold); qrdate.Location = new System.Drawing.Point(10, 220); qrdate.Margin = new Padding(0); qrdate.Name = "qrdate" + n; qrdate.TextAlign = ContentAlignment.MiddleCenter; Label qrtime = new Label { Height = 20, Width = 135 }; qrtime.Font = new Font(qrtime.Font.FontFamily, 10, qrtime.Font.Style); qrtime.Location = new System.Drawing.Point(100, 220); qrtime.Margin = new Padding(0); qrtime.Name = "qrtime" + n; qrtime.TextAlign = ContentAlignment.MiddleCenter; if (name == "EndAccount") { qrdate.Text = Convert.ToDateTime(DataList.Rows[n]["enddate"]).ToString("yyyy-MM-dd"); qrtime.Text = Convert.ToDateTime(DataList.Rows[n]["enddate"]).ToString("HH:mm:ss") + (DataList.Rows[n]["flag"].ToString() == "5" ? " <稽核>" : " <日结>"); } else { qrdate.Text = Convert.ToDateTime(DataList.Rows[n]["enddate"]).ToString("yyyy-MM-dd"); int t = 0; for (int x = 0; x < DataList.Rows.Count; x++) { if (Convert.ToDateTime(DataList.Rows[x]["enddate"]) == Convert.ToDateTime(DataList.Rows[n]["enddate"])) { t++; } } qrtime.Text = Convert.ToDateTime(DataList.Rows[n]["enddate"]).ToString("HH:mm:ss") + (t == 1 ? "" : " <" + DataList.Rows[n]["salerow"].ToString() + "/" + t + ">"); } //建立显示及说明容器 Panel qrpanel = new Panel { Location = new System.Drawing.Point(0, 0), BackColor = Color.FromArgb(140, 215, 255), Name = "qrpanel" + n, Height = 240, Width = 235 }; //构造二维码写码器 MultiFormatWriter writer = new MultiFormatWriter(); Dictionary hint = new Dictionary { { EncodeHintType.CHARACTER_SET, "UTF-8" }, { EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L } }; //options = new QrCodeEncodingOptions //{ // DisableECI = true, // CharacterSet = "UTF-8", // Width = qrbox.Height, // Height = qrbox.Width, //}; //writer = new BarcodeWriter //{ // Format = BarcodeFormat.QR_CODE, // Options = options, //}; string text = ""; if (name == "CommoditySale") { _data1 = HttpUtility.UrlEncode(DataList.Rows[n]["salestr"].ToString()); _Length = DataList.Rows[n]["salestr"].ToString().Length; _RowCount = Convert.ToInt16(DataList.Rows[n]["salerow"]); _ScanIndex = n + 1; _ScanCount = DataList.Rows.Count; int t = 0; for (int x = 0; x < DataList.Rows.Count; x++) { if (Convert.ToDateTime(DataList.Rows[x]["enddate"]) == Convert.ToDateTime(DataList.Rows[n]["enddate"])) { t++; } } _RecordCount = t; text = ConfigUrationValues("CommoditySaleURL", "http://syyw.eshangtech.com:8060/ScanUpdate/CommoditySale.html") + "?" + name + "_New=" + _data1 + "&Length=" + _Length + "&RowCount=" + _RowCount + "&RecordCount=" + _RecordCount + "&CheckCode=" + DataList.Rows[n]["checkMD5"].ToString() + "&ScanIndex=" + _ScanIndex + "&ScanCount=" + _ScanCount; } else { _data1 = HttpUtility.UrlEncode(DataList.Rows[n]["endaccountstr"].ToString()); _data2 = HttpUtility.UrlEncode(DataList.Rows[n]["personsellstr"].ToString()); _Length = DataList.Rows[n]["endaccountstr"].ToString().Length + DataList.Rows[n]["personsellstr"].ToString().Length; _RowCount = n + 1; _ScanIndex = n + 1; _ScanCount = DataList.Rows.Count; _RecordCount = DataList.Rows.Count; text = ConfigUrationValues("EndAccountURL", "http://syyw.eshangtech.com:8060/ScanUpdate/EndAccount.html") + "?" + name + "=" + _data1 + (_data2 == "" ? "" : "&Personsell=" + _data2) + "&Length=" + _Length + "&RowCount=" + _RowCount + "&RecordCount=" + _RecordCount + "&CheckCode=" + DataList.Rows[n]["checkMD5"].ToString() + "&ScanIndex=" + _RowCount + "&ScanCount=" + _RecordCount; } //生成二维码 BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, qrbox.Width, qrbox.Height, hint); BarcodeWriter barcodeWriter = new BarcodeWriter(); Bitmap bitmap = barcodeWriter.Write(bm); //Bitmap bitmap = writer.Write(text); qrbox.Image = bitmap; qrpanel.Controls.Add(qrbox); qrpanel.Controls.Add(qrdate); qrpanel.Controls.Add(qrtime); flowLayoutPanel1.Controls.Add(qrpanel); } } else { DialogResult _DialogResult = System.Windows.Forms.MessageBox.Show("当前无未上传信息,是否查看最近日结信息上传状态?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly); if (_DialogResult == DialogResult.Yes) { MachineInfo machineInfo = new MachineInfo { TopMost = true, ShowInTaskbar = false }; machineInfo.ShowDialog(); Environment.Exit(0); } else { Environment.Exit(0); } } } #endregion #region 事件 --> 窗体按键事件 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) Close(); else if (e.KeyCode == Keys.Enter) { TimerHandle.Stop(); MessageForm _MessageBox = new MessageForm(_type, checkcode, ConfigUrationValues("shopcode", "")); _MessageBox.ShowDialog(); if (_MessageBox.DialogResult == DialogResult.OK) { //标记上传记录 if (_type == "CommoditySale") //单品 { DataTable distinctTable = UploadTable.DefaultView.ToTable(true, new string[] { "id", "enddate" }); for (int i = 0; i < UploadTable.Rows.Count; i++) { //string _datetime = TimeHelper.ConvertLongDateTime(Convert.ToInt64(_MessageBox.StrValue)).ToString(); if (Convert.ToDateTime(UploadTable.Rows[i]["enddate"]) > Convert.ToDateTime(strUpload_Date(_type))) { UpdateConfigUration(_type, UploadTable.Rows[i]["enddate"].ToString()); } string _selectstr = "SELECT dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, data_type, " + "update_date, update_state,update_checknum, dataupdate_desc FROM t_dataupdate " + "WHERE data_date = datetime('" + UploadTable.Rows[i]["enddate"].ToString() + "') and data_id = " + UploadTable.Rows[i]["id"] + " and data_type = 3001"; if (DBHelper.ExecuteDataSet(_selectstr).Tables[0].Rows.Count == 0) { decimal maxid = 0; try { maxid = decimal.Parse(DBHelper.ExecuteDataSet("select max(dataupdate_id) from t_dataupdate").Tables[0].Rows[0][0].ToString()); } catch { maxid = 0; } string _insertstr = "INSERT INTO t_dataupdate (dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, data_type, update_date, update_state) VALUES (" + (maxid + 1) + ",'" + ConfigUrationValues("serverpartcode", "") + "','" + ConfigUrationValues("shopcode", "") + "','" + ConfigUrationValues("machinecode", "") + "'," + UploadTable.Rows[i]["id"] + ",datetime('" + UploadTable.Rows[i]["enddate"].ToString() + "'),3001,datetime('" + DateTime.Now.ToString() + "'),2)"; try { int rows = DBHelper.ExcuteSql(_insertstr); } catch { } } } } else //日结 { for (int i = 0; i < DataList.Rows.Count; i++) { if (Convert.ToDateTime(DataList.Rows[i]["enddate"]) > Convert.ToDateTime(strUpload_Date(_type))) { UpdateConfigUration(_type, DataList.Rows[i]["enddate"].ToString()); } string _selectstr = "SELECT dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, data_type, " + "update_date, update_state,update_checknum, dataupdate_desc FROM t_dataupdate " + "WHERE data_date = datetime('" + DataList.Rows[i]["enddate"].ToString() + "') and data_id = " + DataList.Rows[i]["id"] + " and data_type = " + (DataList.Rows[i]["flag"].ToString() == "5" ? 1002 : 1001); if (DBHelper.ExecuteDataSet(_selectstr).Tables[0].Rows.Count == 0) { decimal maxid = 0; try { maxid = decimal.Parse(DBHelper.ExecuteDataSet("select max(dataupdate_id) from t_dataupdate").Tables[0].Rows[0][0].ToString()); } catch { maxid = 0; } string _insertstr = "INSERT INTO t_dataupdate (dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, data_type, update_date, update_state) VALUES (" + (maxid + 1) + ",'" + ConfigUrationValues("serverpartcode", "") + "','" + ConfigUrationValues("shopcode", "") + "','" + ConfigUrationValues("machinecode", "") + "'," + DataList.Rows[i]["id"] + ",datetime('" + DataList.Rows[i]["enddate"].ToString() + "')," + (DataList.Rows[i]["flag"].ToString() == "5" ? 1002 : 1001) + ",datetime('" + DateTime.Now.ToString() + "'),2)"; try { int rows = DBHelper.ExcuteSql(_insertstr); } catch { } } _selectstr = "select personsell_id, serverpartcode, shopcode, machinecode, startdate, enddate, cashworker_code, " + "ticketcount, totalcount, totalsellamount, totaloffamount, cash, ticketbill, creditcard, vipperson, costbill, " + "otherpay, cashpay, endpersoncode, reserve_firstnum, reserve_secondnum, reserve_thirdnum, reserve_firstchar, " + "reserve_secondchar, reserve_thirdchar, reserve_firstdate, reserve_seconddate, reserve_thirddate from t_personsell " + "where serverpartcode = '" + serverpartcode + "' and shopcode = '" + shopcode + "' and machinecode = '" + machinecode + "' and startdate >= datetime('" + DataList.Rows[i]["startdate"].ToString() + "') and enddate <= datetime('" + DataList.Rows[i]["enddate"].ToString() + "') order by personsell_id asc"; DataTable dataTable = DBHelper.ExecuteDataSet(_selectstr).Tables[0]; if (dataTable.Rows.Count > 0) { foreach (DataRow row in dataTable.Rows) { _selectstr = "SELECT dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, " + "data_type, update_date, update_state,update_checknum, dataupdate_desc FROM t_dataupdate " + "WHERE data_date = datetime('" + row["enddate"].ToString() + "') and data_id = " + row["personsell_id"] + " and data_type = 2001"; if (DBHelper.ExecuteDataSet(_selectstr).Tables[0].Rows.Count == 0) { decimal maxid = 0; try { maxid = decimal.Parse(DBHelper.ExecuteDataSet("select max(dataupdate_id) from t_dataupdate").Tables[0].Rows[0][0].ToString()); } catch { maxid = 0; } string _insertstr = "INSERT INTO t_dataupdate (dataupdate_id, serverpartcode, shopcode, machinecode, data_id, data_date, data_type, update_date, update_state) VALUES (" + (maxid + 1) + ",'" + row["serverpartcode"].ToString() + "','" + row["shopcode"].ToString() + "','" + row["machinecode"].ToString() + "'," + row["personsell_id"] + ",datetime('" + row["enddate"].ToString() + "'),2001,datetime('" + DateTime.Now.ToString() + "'),2)"; try { int rows = DBHelper.ExcuteSql(_insertstr); } catch { } } } } } } DialogResult _DialogResult = System.Windows.Forms.MessageBox.Show((_type == "CommoditySale" ? "单品信息" : "日结营收") + "上传完成,按确定键返回收银系统", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly); if (_DialogResult == DialogResult.OK) Environment.Exit(0); } } else if (e.KeyCode == Keys.Up) { if (flowLayoutPanel1.VerticalScroll.Value > flowLayoutPanel1.VerticalScroll.Minimum) { if (flowLayoutPanel1.VerticalScroll.Value > 246) { flowLayoutPanel1.VerticalScroll.Value -= 246; flowLayoutPanel1.VerticalScroll.Value -= 246; } else { flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Minimum; flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Minimum; } } } else if (e.KeyCode == Keys.Down) { if (flowLayoutPanel1.VerticalScroll.Value < flowLayoutPanel1.VerticalScroll.Maximum && flowLayoutPanel1.VerticalScroll.Maximum > 246) { flowLayoutPanel1.VerticalScroll.Value += 246; flowLayoutPanel1.VerticalScroll.Value += 246; } else { flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum; flowLayoutPanel1.VerticalScroll.Value = flowLayoutPanel1.VerticalScroll.Maximum; } } else if (e.KeyCode == Keys.F12) { TimerHandle.Stop(); ProvinceMain _MessageBox = new ProvinceMain(_type); _MessageBox.ShowDialog(); if (_MessageBox.DialogResult == DialogResult.OK) { QRcodeAdd(_type, strUpload_Date(_type)); } TimerHandle.Start(); } else if (e.KeyCode == Keys.F11) { if (UpLoadThread == null || !UpLoadThread.IsAlive) { UpLoadThread = new Thread(UpluadDate) { IsBackground = true }; UpLoadThread.Start(); } } } #endregion private void UpluadDate() { //ShowWaiteForm(); int _Length = 0, _RowCount = 0, _RecordCount = 0, _ScanIndex = 0, _ScanCount = 0; string _data1 = "", _data2 = ""; if (DataList.Rows.Count > 0) { ProgressBarValue("正在上传数据请稍侯.....1%", 1); string Url = "http://183.129.232.104:8010/MobileServicePlatform/Handler/handler_ajax.ashx"; switch (ConfigUrationValues("EndAccountURL", "http://syyw.eshangtech.com:8060/ScanUpdate/EndAccount.html")) { case "http://syyw.eshangtech.com:8060/ScanUpdate/EndAccount.html": Url = "http://syyw.eshangtech.com:8060/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate/EndAccount.html": Url = "http://183.129.232.104:8010/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://cloud.eshangtech.com:8000/ScanUpdate_GZ/EndAccount.html": Url = "http://60.191.61.26:60600/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://113.16.255.162:6060/ScanUpdate/EndAccount.html": Url = "http://113.16.255.162:6060/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://60.191.61.27:8080/ScanUpdate/EndAccount.html": Url = "http://60.191.61.27:8080/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://47.92.38.105:6060/ScanUpdate/EndAccount.html": Url = "http://47.92.38.105:6060/MobileServicePlatform/Handler/handler_ajax.ashx"; break; case "http://220.177.42.231:6060/ScanUpdate/EndAccount.html": Url = "http://220.177.42.231:6060/MobileServicePlatform/Handler/handler_ajax.ashx"; break; } for (int n = 0; n < DataList.Rows.Count; n++) { string text = ""; if (_type == "CommoditySale") { _data1 = HttpUtility.UrlEncode(DataList.Rows[n]["salestr"].ToString()); _Length = DataList.Rows[n]["salestr"].ToString().Length; _RowCount = Convert.ToInt16(DataList.Rows[n]["salerow"]); _ScanIndex = n + 1; _ScanCount = DataList.Rows.Count; int t = 0; for (int x = 0; x < DataList.Rows.Count; x++) { if (Convert.ToDateTime(DataList.Rows[x]["enddate"]) == Convert.ToDateTime(DataList.Rows[n]["enddate"])) { t++; } } _RecordCount = t; text = _type + "_New=" + _data1 + "&Length=" + _Length + "&RowCount=" + _RowCount + "&RecordCount=" + _RecordCount + "&CheckCode=" + DataList.Rows[n]["checkMD5"].ToString() + "&ScanIndex=" + _ScanIndex + "&ScanCount=" + _ScanCount; } else { _data1 = HttpUtility.UrlEncode(DataList.Rows[n]["endaccountstr"].ToString()); _data2 = HttpUtility.UrlEncode(DataList.Rows[n]["personsellstr"].ToString()); _Length = DataList.Rows[n]["endaccountstr"].ToString().Length + DataList.Rows[n]["personsellstr"].ToString().Length; _RowCount = n + 1; _ScanIndex = n + 1; _ScanCount = DataList.Rows.Count; _RecordCount = DataList.Rows.Count; text = _type + "=" + _data1 + (_data2 == "" ? "" : "&Personsell=" + _data2) + "&Length=" + _Length + "&RowCount=" + _RowCount + "&RecordCount=" + _RecordCount + "&CheckCode=" + DataList.Rows[n]["checkMD5"].ToString() + "&ScanIndex=" + _RowCount + "&ScanCount=" + _RecordCount; } string postDataStr = "action_type=ScanCodeUpdate&action_data=" + HttpUtility.UrlEncode(text) + "&action_record=1"; string _strServiceURL = String.Format("http://{0}:{1}/service.asmx", dbip, serviceport); try { System.Collections.Hashtable hashtable = new System.Collections.Hashtable { { "url", Url }, { "postDataStr", postDataStr } }; string retString = ESSupport.Lib.SoapWSHelper.QuerySoapWebServiceString(_strServiceURL, "UploadSeller", hashtable); ProgressBarValue("正在上传数据请稍侯....." + ((decimal)(n + 1) / DataList.Rows.Count * 100).ToString("F2") + "%", (int)((decimal)(n + 1) / DataList.Rows.Count * 100)); if (checkcode == retString) { System.Windows.Forms.MessageBox.Show("数据上传成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly); ProgressBarValue("", 101); return; } } catch (Exception ex) { LogHelper.WriteServiceLog("扫码直接上传异常:" + ex.Message); } } System.Windows.Forms.MessageBox.Show("上传失败,请重试!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly); ProgressBarValue("", 101); return; } } public void ProgressBarValue(string txt, int progValue) { Invoke(new ProgressBarMess(ProgBar), new object[] { txt, progValue }); } delegate void ProgressBarMess(string txt, int progValue); void ProgBar(string txt, int progValue) { if (progValue > 100) { TimerHandle.Start(); progressBar1.Value = 100; lblProg.Text = txt; progressBar1.Visible = false; lblProg.Visible = false; label1.Visible = true; } else { TimerHandle.Stop(); progressBar1.Value = progValue; lblProg.Text = txt; progressBar1.Visible = true; lblProg.Visible = true; label1.Visible = false; } } #region 方法 --> 获取上次上传时间 /// /// 获取已上传信息日期 /// /// 上传类型名称 /// 日期 public static string strUpload_Date(string ConfigUration_Name) { DateTime _EndAccount; //string sqlstr = "select configuration_values from t_configuration where lower(configuration_name) = lcase('" + ConfigUration_Name + "')"; //using (OdbcConnection conn = AnyWhereConn()) //{ // try // { // conn.Open(); // using (OdbcCommand com = new OdbcCommand(sqlstr, conn)) // { // OdbcDataReader dr = com.ExecuteReader(); // dr.Read(); // _EndAccount = Convert.ToDateTime(dr["configuration_values"]); // } // conn.Close(); // } // catch (Exception ex) // { // int _int = Convert.ToInt32(ConfigUrationValues("endaccounttimes", "20")) * -1; // _EndAccount = Convert.ToDateTime(DateTime.Now.AddDays(_int).ToShortDateString()); // } //} _EndAccount = Convert.ToDateTime(DateTime.Now.AddDays(-3).ToShortDateString()); return _EndAccount.ToString(); } #endregion #region 方法 --> 更新本地配置信息 /// /// 更新本地配置信息 /// /// 配置名称 /// 配置内容 /// public static bool UpdateConfigUration(string ConfigUration_Name, string ConfigUration_Values) { string strsql = "select count(*) from t_configuration where configuration_name = '" + ConfigUration_Name + "'"; using (OdbcConnection conn = AnyWhereConn()) { try { conn.Open(); OdbcCommand com = new OdbcCommand(strsql, conn); OdbcDataReader dr = com.ExecuteReader(); dr.Read(); if (dr[0].ToString() == "0") { OdbcCommand max = new OdbcCommand("select max(configuration_id) from t_configuration", conn); OdbcDataReader read = max.ExecuteReader(); read.Read(); decimal maxid = Convert.ToDecimal(read[0]); strsql = "insert into t_configuration(configuration_id, configuration_date, configuration_name, configuration_values)values(" + (maxid + 1) + ", now(),'" + ConfigUration_Name + "','" + ConfigUration_Values + "')"; OdbcCommand insert = new OdbcCommand(strsql, conn); insert.ExecuteNonQuery(); return true; } else { strsql = "update t_configuration set configuration_values = '" + ConfigUration_Values + "' where configuration_name = '" + ConfigUration_Name + "'"; OdbcCommand insert = new OdbcCommand(strsql, conn); insert.ExecuteNonQuery(); return true; } } catch { return false; } } } #endregion #region 方法 --> 获取配置信息 /// /// 获取配置信息 /// /// 配置名称 /// 无配置信息时默认值 /// public static string ConfigUrationValues(string ConfigUrationName, string defaultValue) { string strSQL = "select configuration_name,configuration_values from dba.t_configuration where lower(configuration_name) = lcase('" + ConfigUrationName + "')"; string strValues = ""; try { using (DataTable _DataTable = ExecuteDataSet(strSQL).Tables[0]) { if (_DataTable.Rows.Count > 0) { foreach (DataRow row in _DataTable.Rows) { if (row["configuration_name"].ToString().ToLower() == ConfigUrationName.ToLower()) { strValues = row["configuration_values"].ToString(); } } } else { strValues = ConfigHelper.Win32API.INIGetStringValue(Environment.CurrentDirectory + "\\setup.ini", "DBCONECT", ConfigUrationName, defaultValue); if (strValues == "") strValues = ConfigHelper.Win32API.INIGetStringValue(Environment.CurrentDirectory + "\\set.ini", "DBCONECT", ConfigUrationName, defaultValue); } } } catch { strValues = ConfigHelper.Win32API.INIGetStringValue(Environment.CurrentDirectory + "\\setup.ini", "DBCONECT", ConfigUrationName, defaultValue); if (strValues == "") strValues = ConfigHelper.Win32API.INIGetStringValue(Environment.CurrentDirectory + "\\set.ini", "DBCONECT", ConfigUrationName, defaultValue); } return strValues; } #endregion /// /// 本地数据库连接 /// /// public static OdbcConnection AnyWhereConn() { string strConn = "DSN=anysql1;UID=dba;PWD=sql;"; OdbcConnection Conany = new OdbcConnection(strConn); return Conany; } /// /// 本地执行SQL语句并返回DataSet /// /// SQL语句 /// public static DataSet ExecuteDataSet(string SelectSql) { using (OdbcConnection conany = AnyWhereConn()) { DataSet _DataSet = new DataSet(); try { OdbcDataAdapter _OdbcDataAdapter = new OdbcDataAdapter(SelectSql, conany); _OdbcDataAdapter.Fill(_DataSet); return _DataSet; } catch (Exception ex) { throw new Exception(ex.Message); } } } private void DataUpdate_Load(object sender, EventArgs e) { Window win_ScanDataUpload = new SacnUpload.ScanDataUpload(); System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(win_ScanDataUpload); System.Windows.Interop.WindowInteropHelper helper = new System.Windows.Interop.WindowInteropHelper(win_ScanDataUpload); helper.Owner = this.Handle; win_ScanDataUpload.WindowStartupLocation = WindowStartupLocation.CenterOwner; win_ScanDataUpload.ShowDialog(); Environment.Exit(0); } } }