using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Transmission.SDK; namespace TransmissionClient { public class OrderOnline { /// /// 订单状态 /// public enum OrderState { /// /// 待支付 /// PendingPay = 1005, /// /// 已支付 /// AlreadyPaid = 1010, /// /// 已接收 /// Received = 1090, /// /// 制作中 /// Making = 2000, /// /// 待提取 /// Extract = 2010, /// /// 已完成 /// Completed = 3000 } #region 方法 -> 同步订单状态至本地 /// /// 本地订单状态同步 /// /// 订单接口IP /// 订单接口端口 /// 服务区编码 /// 门店编码 /// 省份编码 /// public static OnlineTransferResult OrderBillStateUpdate(OracleHelper oracleHelper, string serviceURL, string serverPartCode, string provinceCode = "330000") { OnlineTransferResult transferResult = new OnlineTransferResult(); try { string _strURL = $"{serviceURL}/MobileServicePlatform/Handler/handler_ajax.ashx"; string _strPostData = $"action_type=GetOrderBillInfo&action_data={provinceCode}" + $"&SERVERPART_CODE={serverPartCode}&SALEBILL_STATE=2000,3000" + $"&ORDER_DATE={DateTime.Today.AddDays(-1).ToString("yyyyMMddHHmmss")}" + $"&SALEBILL_TYPE=6000"; string _Result = HttpDataHelper.OnPost(_strURL, _strPostData); if (_Result != "") { _Result = _Result.Replace(" ", ""); using (DataTable _DataTable = JsonHelper.JsonToDataSet(_Result).Tables[0]) { List _UpdateList = new List(); if (_DataTable.Rows.Count > 0) { int _MinId = 0; try { _MinId = int.Parse(_DataTable.Compute("MIN(SALEBILL_ID)", "").ToString()); } catch { _MinId = 0; } DataTable _SaleBill = oracleHelper.ExcuteSqlGetDataSet( $@"SELECT SALEBILL_ID,SALEBILL_CODE FROM HIGHWAY_EXCHANGE.T_SALEBILL WHERE SALEBILL_ID >= {_MinId} AND SERVERPART_CODE = '{serverPartCode}' ").Tables[0]; if (_DataTable.Rows.Count > 0) { for (int i = 0; i < _DataTable.Rows.Count; i++) { if (_SaleBill.Select("SALEBILL_ID = '" + _DataTable.Rows[i]["SALEBILL_ID"].ToString() + "' AND SALEBILL_CODE = '" + _DataTable.Rows[i]["SALEBILL_CODE"].ToString() + "'").Count() > 0) { _UpdateList.Add($@"UPDATE HIGHWAY_EXCHANGE.T_SALEBILL SET SALEBILL_STATE = {_DataTable.Rows[i]["SALEBILL_STATE"].ToString()} WHERE SALEBILL_ID = '{_DataTable.Rows[i]["SALEBILL_ID"].ToString()}' AND SALEBILL_STATE < {_DataTable.Rows[i]["SALEBILL_STATE"].ToString()}"); } } } } if (_UpdateList.Count > 0) { oracleHelper.ExecuteSqlTran(_UpdateList); } } } } catch { } return transferResult; } #endregion #region 方法 -> 线上订单批量下载 /// /// 线上订单批量下载 /// /// /// /// /// /// /// public static OnlineTransferResult OrderBillDown(OracleHelper oracleHelper, string serviceURL, string serverPartCode, string provinceCode = "330000") { OnlineTransferResult transferResult = new OnlineTransferResult(); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); try { string _strURL = $"{serviceURL}/MobileServicePlatform/Handler/handler_ajax.ashx"; string _strPostData = $"action_type=GetOrderBillInfo&action_data={provinceCode}" + $"&SERVERPART_CODE={serverPartCode}&SALEBILL_STATE=1010" + $"&ORDER_DATE={DateTime.Today.AddDays(-1).ToString("yyyyMMddHHmmss")}" + $"&SALEBILL_TYPE=6000"; string _Result = HttpDataHelper.OnPost(_strURL, _strPostData); if (_Result != "") { _Result = _Result.Replace(" ", ""); using (DataTable _DataTable = JsonHelper.JsonToDataSet(_Result).Tables[0]) { transferResult.TotalCount = _DataTable.Rows.Count; List _InsertList = new List(); if (_DataTable.Rows.Count > 0) { int _MinId = 0; try { _MinId = int.Parse(_DataTable.Compute("MIN(SALEBILL_ID)", "").ToString()); } catch { _MinId = 0; } DataTable _SaleBill = oracleHelper.ExcuteSqlGetDataSet( $@"SELECT SALEBILL_ID,SALEBILL_CODE, SALEBILL_STATE,MACHINECODE,MAKE_DATE FROM HIGHWAY_EXCHANGE.T_SALEBILL WHERE SALEBILL_ID >= {_MinId} AND SERVERPART_CODE = '{serverPartCode}' ").Tables[0]; string _strSaleBillValues = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { if ((i + 1) % 50 == 0 && _strSaleBillValues != "") { _InsertList.Add($"INSERT ALL {_strSaleBillValues} SELECT * FROM DUAL"); _strSaleBillValues = ""; } DataRow[] _DataRowList = _SaleBill.Select("SALEBILL_ID = '" + _DataTable.Rows[i]["SALEBILL_ID"].ToString() + "' AND SALEBILL_CODE = '" + _DataTable.Rows[i]["SALEBILL_CODE"].ToString() + "'"); if (_DataRowList.Count() == 0) { List _OrderDetailList = OrderDetailDown(oracleHelper, serviceURL, _DataTable.Rows[i]["SALEBILL_ID"].ToString(), _DataTable.Rows[i]["SALEBILL_CODE"].ToString()); if (_OrderDetailList != null && _OrderDetailList.Count > 0) { _InsertList = _InsertList.Concat(_OrderDetailList).ToList(); } else { transferResult.FailCount++; continue; } transferResult.SuccessCount++; string SALEBILL_ID = _DataTable.Rows[i]["SALEBILL_ID"].ToString(); string SALEBILL_CODE = _DataTable.Rows[i]["SALEBILL_CODE"].ToString(); string MEMBERSHIP_ID = _DataTable.Rows[i]["MEMBERSHIP_ID"].ToString(); string SALEBILL_TYPE = _DataTable.Rows[i]["SALEBILL_TYPE"].ToString(); string TABLE_NUMBER = _DataTable.Rows[i]["TABLE_NUMBER"].ToString(); string TAKE_TYPE = _DataTable.Rows[i]["TAKE_TYPE"].ToString(); string PROVINCE_CODE = _DataTable.Rows[i]["PROVINCE_CODE"].ToString(); string SERVERPART_ID = _DataTable.Rows[i]["SERVERPART_ID"].ToString(); string SERVERPART_CODE = _DataTable.Rows[i]["SERVERPART_CODE"].ToString(); string SERVERPART_NAME = _DataTable.Rows[i]["SERVERPART_NAME"].ToString(); string SERVERPARTSHOP_ID = _DataTable.Rows[i]["SERVERPARTSHOP_ID"].ToString(); string SHOPCODE = _DataTable.Rows[i]["SHOPCODE"].ToString(); string SHOPNAME = _DataTable.Rows[i]["SHOPNAME"].ToString(); string ORDER_PERSON = _DataTable.Rows[i]["ORDER_PERSON"].ToString(); string ORDER_PERSONTEL = _DataTable.Rows[i]["ORDER_PERSONTEL"].ToString(); string ORDER_DATE = _DataTable.Rows[i]["ORDER_DATE"].ToString(); string RESERVATION_DATE = _DataTable.Rows[i]["RESERVATION_DATE"].ToString(); string RECORD_COUNT = _DataTable.Rows[i]["RECORD_COUNT"].ToString(); string TOTAL_COUNT = _DataTable.Rows[i]["TOTAL_COUNT"].ToString(); string ORDER_AMOUNT = _DataTable.Rows[i]["ORDER_AMOUNT"].ToString(); string SALEBILL_STATE = _DataTable.Rows[i]["SALEBILL_STATE"].ToString(); string SALEBILL_DESC = _DataTable.Rows[i]["SALEBILL_DESC"].ToString(); string WECHAT_OPENID = _DataTable.Rows[i]["WECHAT_OPENID"].ToString(); string WECHAT_UNIONID = _DataTable.Rows[i]["WECHAT_UNIONID"].ToString(); string COUPON_AMOUNT = _DataTable.Rows[i]["COUPON_AMOUNT"].ToString(); string PAY_AMOUNT = _DataTable.Rows[i]["PAY_AMOUNT"].ToString(); string COUPON_ID = _DataTable.Rows[i]["COUPON_ID"].ToString(); string COUPON_SEND_ID = _DataTable.Rows[i]["COUPON_SEND_ID"].ToString(); string CHANNEL_TYPE = _DataTable.Rows[i]["CHANNEL_TYPE"].ToString(); string PACK_TYPE = _DataTable.Rows[i]["PACK_TYPE"].ToString(); string PACK_AMOUNT = _DataTable.Rows[i]["PACK_AMOUNT"].ToString(); _strSaleBillValues += $@" INTO HIGHWAY_EXCHANGE.T_SALEBILL (SALEBILL_ID,SALEBILL_CODE,MEMBERSHIP_ID,SALEBILL_TYPE, TABLE_NUMBER,TAKE_TYPE,PROVINCE_CODE,SERVERPART_ID, SERVERPART_CODE,SERVERPART_NAME,SERVERPARTSHOP_ID, SHOPCODE,SHOPNAME,ORDER_PERSON,ORDER_PERSONTEL, ORDER_DATE,RESERVATION_DATE,RECORD_COUNT,TOTAL_COUNT, ORDER_AMOUNT,SALEBILL_STATE,SALEBILL_DESC,WECHAT_OPENID, WECHAT_UNIONID,COUPON_AMOUNT,PAY_AMOUNT,COUPON_ID, COUPON_SEND_ID,CHANNEL_TYPE,PACK_TYPE,PACK_AMOUNT ) VALUES ({SALEBILL_ID},'{SALEBILL_CODE}', {(MEMBERSHIP_ID == "" ? "NULL" : MEMBERSHIP_ID)}, {(SALEBILL_TYPE == "" ? "NULL" : SALEBILL_TYPE)}, '{TABLE_NUMBER}',{(TAKE_TYPE == "" ? "NULL" : TAKE_TYPE)}, {(PROVINCE_CODE == "" ? "NULL" : PROVINCE_CODE)}, {(SERVERPART_ID == "" ? "NULL" : SERVERPART_ID)}, '{SERVERPART_CODE}','{SERVERPART_NAME}', {(SERVERPARTSHOP_ID == "" ? "NULL" : SERVERPARTSHOP_ID)}, '{SHOPCODE}','{SHOPNAME}','{ORDER_PERSON}','{ORDER_PERSONTEL}', {(ORDER_DATE == "" ? "NULL" : $"TO_DATE('{ORDER_DATE}','YYYY/MM/DD HH24:MI:SS')")}, {(RESERVATION_DATE == "" ? "NULL" : $"TO_DATE('{RESERVATION_DATE}','YYYY/MM/DD HH24:MI:SS')")}, {(RECORD_COUNT == "" ? "NULL" : RECORD_COUNT)}, {(TOTAL_COUNT == "" ? "NULL" : TOTAL_COUNT)}, {(ORDER_AMOUNT == "" ? "NULL" : ORDER_AMOUNT)}, {SALEBILL_STATE},'{SALEBILL_DESC}','{WECHAT_OPENID}','{WECHAT_UNIONID}', {(COUPON_AMOUNT == "" ? "NULL" : COUPON_AMOUNT)}, {(PAY_AMOUNT == "" ? "NULL" : PAY_AMOUNT)}, {(COUPON_ID == "" ? "NULL" : COUPON_ID)}, {(COUPON_SEND_ID == "" ? "NULL" : COUPON_SEND_ID)}, {(CHANNEL_TYPE == "" ? "NULL" : CHANNEL_TYPE)}, {(PACK_TYPE == "" ? "NULL" : PACK_TYPE)}, {(PACK_AMOUNT == "" ? "NULL" : PACK_AMOUNT)})"; } else { transferResult.FilterCount++; if (int.Parse(_DataRowList[0]["SALEBILL_STATE"].ToString()) > int.Parse(_DataTable.Rows[i]["SALEBILL_STATE"].ToString())) { DateTime _MakeDate; if (!DateTime.TryParse(_DataRowList[0]["MAKE_DATE"].ToString(), out _MakeDate)) { _MakeDate = DateTime.Now; } OrderStateChange(serviceURL, _DataRowList[0]["MACHINECODE"].ToString(), int.Parse(_DataRowList[0]["SALEBILL_ID"].ToString()), int.Parse(_DataRowList[0]["SALEBILL_STATE"].ToString()), _MakeDate); } } if ((i + 1) == _DataTable.Rows.Count && _strSaleBillValues != "") { _InsertList.Add($"INSERT ALL {_strSaleBillValues} SELECT * FROM DUAL"); _strSaleBillValues = ""; } } } if (_InsertList.Count > 0) { oracleHelper.ExecuteSqlTran(_InsertList); } } } } catch (Exception ex) { transferResult.SuccessCount = 0; transferResult.FilterCount = 0; transferResult.FailCount = transferResult.TotalCount; LogHelper.WriteServiceLog("在线订单下载失败:" + ex.Message); } stopwatch.Stop(); transferResult.TotalSeconds = stopwatch.Elapsed.TotalSeconds;//这里是输出的总运行秒数,精确到毫秒的 return transferResult; } #endregion #region 方法 -> 订单详情下载 /// /// 订单详情下载 /// /// /// /// /// /// public static List OrderDetailDown(OracleHelper oracleHelper, string serviceURL, string SaleBillID, string SaleBillCode) { string _Result = ""; List _InsertList = new List(); try { string _strURL = $"{serviceURL}/MobileServicePlatform/Handler/handler_ajax.ashx"; string _strPostData = $"action_type=GetOrderDetail&action_data={SaleBillID}"; _Result = HttpDataHelper.OnPost(_strURL, _strPostData); if (_Result != "") { _Result = _Result.Replace(" ", ""); using (DataTable _DataTable = JsonHelper.JsonToDataSet(_Result).Tables[0]) { if (_DataTable.Rows.Count > 0) { int _MinId = 0; try { _MinId = int.Parse(_DataTable.Compute("MIN(SALEDETAIL_ID)", "").ToString()); } catch { _MinId = 0; } DataTable _SaleDetail = oracleHelper.ExcuteSqlGetDataSet( $@"SELECT SALEDETAIL_ID,SALEBILL_ID FROM HIGHWAY_EXCHANGE.T_SALEDETAIL WHERE SALEDETAIL_ID >= {_MinId}").Tables[0]; string _strSaleDetailValues = ""; for (int i = 0; i < _DataTable.Rows.Count; i++) { if ((i + 1) % 50 == 0 && _strSaleDetailValues != "") { _InsertList.Add("INSERT ALL " + _strSaleDetailValues + " SELECT * FROM DUAL"); _strSaleDetailValues = ""; } if (_SaleDetail.Select("SALEDETAIL_ID = " + _DataTable.Rows[i]["SALEDETAIL_ID"].ToString() + " AND SALEBILL_ID = " + _DataTable.Rows[i]["SALEBILL_ID"].ToString()).Count() == 0) { string SALEDETAIL_ID = _DataTable.Rows[i]["SALEDETAIL_ID"].ToString(); string SALEBILL_ID = _DataTable.Rows[i]["SALEBILL_ID"].ToString(); string PROVINCE_CODE = _DataTable.Rows[i]["PROVINCE_CODE"].ToString(); string COMMODITY_ID = _DataTable.Rows[i]["COMMODITY_ID"].ToString(); string COMMODITY_CODE = _DataTable.Rows[i]["COMMODITY_CODE"].ToString(); string COMMODITY_NAME = _DataTable.Rows[i]["COMMODITY_NAME"].ToString(); string COMMODITY_BARCODE = _DataTable.Rows[i]["COMMODITY_BARCODE"].ToString(); string COMMODITY_UNIT = _DataTable.Rows[i]["COMMODITY_UNIT"].ToString(); string COMMODITY_RULE = _DataTable.Rows[i]["COMMODITY_RULE"].ToString(); string ORDER_COUNT = _DataTable.Rows[i]["ORDER_COUNT"].ToString(); string AVERAGE_PRICE = _DataTable.Rows[i]["AVERAGE_PRICE"].ToString(); string DISCOUNT_AMOUNT = _DataTable.Rows[i]["DISCOUNT_AMOUNT"].ToString(); string ORDER_AMOUNT = _DataTable.Rows[i]["ORDER_AMOUNT"].ToString(); string SALEDETAIL_DESC = _DataTable.Rows[i]["SALEDETAIL_DESC"].ToString(); _strSaleDetailValues += $@" INTO HIGHWAY_EXCHANGE.T_SALEDETAIL ( SALEDETAIL_ID,SALEBILL_ID,PROVINCE_CODE,COMMODITY_ID, COMMODITY_CODE,COMMODITY_NAME,COMMODITY_BARCODE, COMMODITY_UNIT,COMMODITY_RULE,ORDER_COUNT,AVERAGE_PRICE, DISCOUNT_AMOUNT,ORDER_AMOUNT,SALEDETAIL_DESC ) VALUES ( {SALEDETAIL_ID},{SALEBILL_ID},{(PROVINCE_CODE == "" ? "NULL" : PROVINCE_CODE)}, {(COMMODITY_ID == "" ? "NULL" : COMMODITY_ID)},'{COMMODITY_CODE}', '{COMMODITY_NAME}','{COMMODITY_BARCODE}','{COMMODITY_UNIT}', '{COMMODITY_RULE}',{(ORDER_COUNT == "" ? "0" : ORDER_COUNT)}, {(AVERAGE_PRICE == "" ? "0" : AVERAGE_PRICE)}, {(DISCOUNT_AMOUNT == "" ? "0" : DISCOUNT_AMOUNT)}, {(ORDER_AMOUNT == "" ? "0" : ORDER_AMOUNT)},'{SALEDETAIL_DESC}' ) "; } if ((i + 1) == _DataTable.Rows.Count && _strSaleDetailValues != "") { _InsertList.Add("INSERT ALL " + _strSaleDetailValues + " SELECT * FROM DUAL"); _strSaleDetailValues = ""; } } } } } } catch { } if (_InsertList.Count > 0) { return _InsertList; } else { return null; } } #endregion #region 方法 -> 在线订单状态批量上传 /// /// 在线订单状态批量上传 /// /// 本地订单数据库连接 /// 线上订单服务地址 /// 线上订单服务端口 /// 待上传服务区 /// 待上传省份 /// public static OnlineTransferResult OrderBillUpload(OracleHelper oracleHelper, string serviceURL, string serverPartCode, string provinceCode = "330000") { OnlineTransferResult transferResult = new OnlineTransferResult(); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); try { DataTable _SaleBillTbale = oracleHelper.ExcuteSqlGetDataSet( $@"SELECT SALEBILL_ID,SALEBILL_CODE, SALEBILL_STATE,MACHINECODE,MAKE_DATE FROM HIGHWAY_EXCHANGE.T_SALEBILL WHERE SALEBILL_STATE IN ( 2000,3000 ) AND PROVINCE_CODE = {provinceCode} AND SERVERPART_CODE = '{serverPartCode}' AND NVL(TRANSFER_STATE,0) = 0").Tables[0]; transferResult.TotalCount = _SaleBillTbale.Rows.Count; for (int i = 0; i < _SaleBillTbale.Rows.Count; i++) { if (string.IsNullOrWhiteSpace(_SaleBillTbale.Rows[i]["MAKE_DATE"].ToString())) { if (OrderStateChange(serviceURL, _SaleBillTbale.Rows[i]["MACHINECODE"].ToString(), int.Parse(_SaleBillTbale.Rows[i]["SALEBILL_ID"].ToString()), int.Parse(_SaleBillTbale.Rows[i]["SALEBILL_STATE"].ToString()), null)) { oracleHelper.ExecuteSqlTran( $@"UPDATE HIGHWAY_EXCHANGE.T_SALEBILL SET TRANSFER_STATE = 9 WHERE SALEBILL_ID = {_SaleBillTbale.Rows[i]["SALEBILL_ID"].ToString()}"); transferResult.SuccessCount++; } else { transferResult.FailCount++; } } else if (OrderStateChange(serviceURL, _SaleBillTbale.Rows[i]["MACHINECODE"].ToString(), int.Parse(_SaleBillTbale.Rows[i]["SALEBILL_ID"].ToString()), int.Parse(_SaleBillTbale.Rows[i]["SALEBILL_STATE"].ToString()), DateTime.Parse(_SaleBillTbale.Rows[i]["MAKE_DATE"].ToString()))) { oracleHelper.ExecuteSqlTran( $@"UPDATE HIGHWAY_EXCHANGE.T_SALEBILL SET TRANSFER_STATE = 9 WHERE SALEBILL_ID = {_SaleBillTbale.Rows[i]["SALEBILL_ID"].ToString()}"); transferResult.SuccessCount++; } else { transferResult.FailCount++; } } } catch (Exception ex) { LogHelper.WriteServiceLog("在线订单状态上传失败:" + ex.Message); transferResult.SuccessCount = 0; transferResult.FilterCount = 0; transferResult.FailCount = transferResult.TotalCount; } stopwatch.Stop(); transferResult.TotalSeconds = stopwatch.Elapsed.TotalSeconds;//这里是输出的总运行秒数,精确到毫秒的 return transferResult; } #endregion #region 方法 -> 订单状态变更上传 /// /// 订单状态变更上传 /// /// 线上订单服务地址 /// 线上订单服务端口 /// 接单收银机号 /// 线上订单内码 /// 待上传订单状态 /// 订单打印时间 /// public static bool OrderStateChange(string serviceURL, string machineCode, int saleBillID, int orderState, DateTime? printTime) { try { string _strURL = $"{serviceURL}/MobileServicePlatform/Handler/handler_ajax.ashx"; string _strPostData = $"action_type=MachineUpdateOrderState" + $"&action_data={saleBillID}&SALEBILL_STATE={orderState}&MACHINECODE={machineCode}" + $"&PRINTDATE={((printTime == null || printTime.Value == DateTime.MinValue) ? "" : printTime.Value.ToString())}"; string _Result = HttpDataHelper.OnPost(_strURL, _strPostData); _Result = _Result.Replace(" ", ""); Newtonsoft.Json.Linq.JObject _JObject = Newtonsoft.Json.Linq.JObject.Parse(_Result); if (_JObject.Property("error") != null && _JObject.Property("error").Value.ToString() == "1") { return true; } else { return false; } } catch (Exception ex) { LogHelper.WriteServiceLog("在线订单状态变更失败:" + ex.Message); return false; } } #endregion /// /// 传输结果 /// public class OnlineTransferResult { /// /// 传输总数 /// public int TotalCount { get; set; } /// /// 成功总数 /// public int SuccessCount { get; set; } /// /// 失败总数 /// public int FailCount { get; set; } /// /// 过滤总数 /// public int FilterCount { get; set; } /// /// 总耗时 /// public double TotalSeconds { get; set; } } } }