using BizCom; using Castle.ActiveRecord; using Castle.ActiveRecord.Framework.Config; using Newtonsoft.Json; using NHibernate.Hql.Ast.ANTLR.Tree; using NHibernate.Mapping; using SiteCore; using SiteCore.Handler; using SiteCore.taobao; using SiteCore.taoObj; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.IO; using System.Linq; using System.Management; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Threading; using System.Windows.Forms; using Utils; using static Castle.ActiveRecord.Framework.DictionaryAdapter; using static SiteCore.taoObj.dataShopResponseVo; namespace ErpServer { public partial class MainForm : Form { private static readonly string iniFile = Application.StartupPath + "\\config.ini"; private static readonly string logPath = Application.StartupPath + "\\log"; #region hideform [DllImport("user32.dll")] public static extern Int32 GetWindowLong(IntPtr hwnd, Int32 index); [DllImport("user32.dll")] public static extern Int32 SetWindowLong(IntPtr hwnd, Int32 index, Int32 newValue); public const int GWL_EXSTYLE = (-20); private static void AddWindowExStyle(IntPtr hwnd, Int32 val) { int oldValue = GetWindowLong(hwnd, GWL_EXSTYLE); if (oldValue == 0) { throw new System.ComponentModel.Win32Exception(); } if (0 == SetWindowLong(hwnd, GWL_EXSTYLE, oldValue | val)) { throw new System.ComponentModel.Win32Exception(); } } public static int WS_EX_TOOLWINDOW = 0x00000080; //我把这个过程封装下: public static void SetFormToolWindowStyle(Form form) { AddWindowExStyle(form.Handle, WS_EX_TOOLWINDOW); } #endregion public MainForm() { InitializeComponent(); } private void initActiveRecord() { //IConfigurationSource source = ConfigurationManager.GetSection("activerecord") as IConfigurationSource; InPlaceConfigurationSource source = new InPlaceConfigurationSource(); System.Collections.Generic.IDictionary properties = new System.Collections.Generic.Dictionary(); properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver"); properties.Add("proxyfactory.factory_class", "NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle"); properties.Add("dialect", "NHibernate.Dialect.MsSql2005Dialect"); properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); string conn = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; properties.Add("connection.connection_string", conn); source.Add(typeof(ActiveRecordBase), properties); Type[] acTypes = new[] { typeof(XUser), typeof(XModular), typeof(CeErpModular), typeof(CeErpUser), typeof(CeErpPost), //typeof(CeErpPersonPost), typeof(CeErpUserInfo), typeof(CeErpOrganization), typeof(CeErpShop), typeof(CeErpSupplier), typeof(CeErpProduct), typeof(CeErpProductHour), typeof(CeErpSupplierProduct), typeof(CeErpTrade), typeof(CeErpTradeOrder), typeof(CeErpTradeCell), typeof(CeErpTradeLog), typeof(CeErpTradeResponsible), typeof(CeErpTradeRefund), typeof(CeErpTradeSample), typeof(CeErpBill), typeof(CeErpReturnCash), typeof(CeErpExpressInfo), typeof(CeErpUserPost), typeof(CeErpZhangDan), typeof(CeErpInvoicingInfo), typeof(CeErpCustomer), typeof(CeErpTmcLog), typeof(XPermission), typeof(XLog), typeof(CeErpMessageTip), typeof(CeErpSpecialRefund), typeof(CEErpPrintModel), typeof(CeErpProductPrice), typeof(CeErpDesignerBill), typeof(CeErpOrderFormData ), typeof(CeErpDesignerFinishRateNew), typeof(CeErpDesignerBillLog), typeof(CeErpTradeAfterSaleExtend), typeof(CeErpDataSendOrderInfo), typeof(CeErpDesignInfo), typeof(shopInfo), typeof(CeErpTradeCellExtend), typeof(CeErpTradeSpu), typeof(CeErpSukuraData), typeof(CeErpTradeAfterSaleLog) }; ActiveRecordStarter.Initialize(source, acTypes); //ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source); } int tb_err = 0; int bu_err = 0; int refund_tb_err = 0; int refund_bu_err = 0; HttpHelper http = null; TimerCallback syncTaoBaoBack = null; TimerCallback syncRefundTB = null; System.Threading.Timer disTimer = null; System.Threading.Timer refundDisTimer = null; string paidanSync = ""; string dinggaolvSync = ""; string unusualSync = ""; string refundSync = ""; private void MainForm_Load(object sender, EventArgs e) { SetFormToolWindowStyle(this); CheckForIllegalCrossThreadCalls = false; this.SetVisibleCore(false); if (!Directory.Exists(logPath)) Directory.CreateDirectory(logPath); http = new HttpHelper(); //siteUrl = INI.GetIniValue("Config", "siteUrl", iniFile); //apiUrl = INI.GetIniValue("Config", "apiUrl", iniFile); //siteProcUser = INI.GetIniValue("Config", "siteProcUser", iniFile); helper.clearLog(); //设置数据库连接 SqlHelper.connString = webConfig.ConnStr; if (SqlHelper.connString == null || SqlHelper.connString == "") { helper.writeLog("没有数据库连接无法执行"); return; } initActiveRecord(); /****淘宝同步***/ string taobaoSync = INI.GetIniValue("Config", "tbSync", iniFile); if (taobaoSync == "1") { helper.writeLog("淘宝同步"); syncTaoBaoBack = new TimerCallback(syncTaoBaoCall); disTimer = new System.Threading.Timer(syncTaoBaoBack, null, 3000, 3000); } //****售后退款推送同步****/ string refundTBSync = INI.GetIniValue("Config", "refundTbSync", iniFile); if (refundTBSync == "1") { helper.writeLog("淘宝退款同步"); syncRefundTB = new TimerCallback(syncRefundTaoBaoCall); refundDisTimer = new System.Threading.Timer(syncRefundTB, null, 80000, 80000); } paidanSync = INI.GetIniValue("Config", "paidanSync", iniFile); dinggaolvSync = INI.GetIniValue("Config", "dinggaolvSync", iniFile); unusualSync = INI.GetIniValue("Config", "unusualSync", iniFile); refundSync = INI.GetIniValue("Config", "refundSync", iniFile); string APP_NAME = INI.GetIniValue("Global", "AppName", iniFile); notifyIcon.Text = APP_NAME + ""; this.Text = APP_NAME + ""; System.Timers.Timer pTimer = new System.Timers.Timer(60000); pTimer.Elapsed += PTimer_Elapsed; pTimer.AutoReset = true;//获取该定时器自动执行 pTimer.Enabled = true;//这个一定要写,要不然定时器不会执行的 helper.writeLog(APP_NAME + "服务端启动"); AppendLog(APP_NAME + "服务端启动"); } private void PTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; string im = intMinute.ToString(); string hm = e.SignalTime.ToString("HH:mm"); WriteLog(string.Format("自动派单:" + paidanSync)); if (paidanSync == "1")//自动派单 { WriteLog(string.Format("自动派单:" + hm)); disTimerCall(null); syncDataSendOrder(); sendOrderInfo(); } if (intHour == 2 && intMinute == 0) { dayClearTimerCall(null); helper.clearLog(); } if (dinggaolvSync == "1") { if (intHour == 2 && intMinute % 10 == 0 && intMinute < 41) { commonHelper.saveErpDesignerGather(); } } if (unusualSync == "1") { if (intMinute == 1) { unUsualOrderTimerCall(null); } } if (refundSync == "1") { if (intMinute == 2) { reFundsDataTimerCall(null); } } if (intMinute > 0 && intMinute % 10 != 0) { syncBuChaJiaCall(); } } /// /// 补差价 /// private void syncBuChaJiaCall() { new Thread(new ThreadStart(delegate () { try { string sql = "select top 100 * from s_buchajia order by addtime asc"; DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0]; if (dt == null || dt.Rows.Count < 1) return; List idLst = new List(); foreach (DataRow dr in dt.Rows) { idLst.Add(dr["id"].ToString()); while (true) { if (bu_err >= 15) { Environment.Exit(0); return; } try { switch (dr["dotype"].ToString().ToLower().Trim()) { case "updatestate_close": { sql = "update CE_ErpTradeCell WITH(ROWLOCK) set OrderState=" + dr["orderstate"] + ",IsUrgency=0,isReturn=0,isRefund=2 where tid='" + dr["ctid"] + "' and isAfterSaleOrder=0"; SqlHelper.ExecuteNonQuery(sql); break; } case "updatestate_complete": { //sql.AppendFormat("update ce_ErpTradeCell set OrderState={1},IsUrgency=0 where IsPreDelivery=0 and tid='{0}' and SplitTag='' and isAfterSaleOrder=0;", tObj.refOid, (int)OrderState.交易完成); //拆分单更新,只有下单完成的才更新成已发货已完成 //sql.AppendFormat("update ce_ErpTradeCell set OrderState={1},IsUrgency=0 where IsPreDelivery=0 and tid='{0}' and SplitTag!='' and OrderState>5 and isAfterSaleOrder=0;", tObj.refOid, (int)OrderState.交易完成); sql = "update CE_ErpTradeCell WITH(ROWLOCK) set OrderState=" + dr["orderstate"] + ",IsUrgency=0,isReturn=0 where tid='" + dr["ctid"] + "' and IsPreDelivery=0 and SplitTag='' and isAfterSaleOrder=0 ;"; sql += "update CE_ErpTradeCell WITH(ROWLOCK) set OrderState=" + dr["orderstate"] + ",IsUrgency=0,isReturn=0 where tid='" + dr["ctid"] + "' and IsPreDelivery=0 and SplitTag!='' and OrderState>6 and isAfterSaleOrder=0 ;"; SqlHelper.ExecuteNonQuery(sql); break; } case "updatestate_shipped": { sql = "update CE_ErpTradeCell WITH(ROWLOCK) set OrderState=" + dr["orderstate"] + ",IsUrgency=0,isReturn=0 where tid='" + dr["ctid"] + "' and IsPreDelivery=0 and SplitTag='' and isAfterSaleOrder=0 ;"; sql += "update CE_ErpTradeCell WITH(ROWLOCK) set OrderState=" + dr["orderstate"] + ",IsUrgency=0,isReturn=0 where tid='" + dr["ctid"] + "' and IsPreDelivery=0 and SplitTag!='' and OrderState>6 and isAfterSaleOrder=0 ;"; SqlHelper.ExecuteNonQuery(sql); break; } case "refund": { if (Convert.ToInt32(dr["refundState"]) == 1) { sql = "update CE_ErpTradeCell WITH(ROWLOCK) set IsRefund=" + dr["refundState"] + ",IsReadTag=2 where isAfterSaleOrder=0 and tid='" + dr["ctid"] + "'"; } else sql = "update CE_ErpTradeCell WITH(ROWLOCK) set IsRefund=" + dr["refundState"] + " where isAfterSaleOrder=0 and tid='" + dr["ctid"] + "'"; SqlHelper.ExecuteNonQuery(sql); break; } case "billres": { commonHelper.checkBillResult(Convert.ToInt32(dr["ctid"])); break; } case "bucha_delivery": { commonHelper.setBuChaDelivery(dr["ctid"].ToString(), dr["poscode"].ToString(), dr["comcode"].ToString(), dr["outSid"].ToString()); break; } default: { DataTable dataTable = SqlHelper.ExecuteDataset(string.Format("SELECT orderFrom FROM [dbo].[Ce_ErpTradeCellExtend] WHERE ctid = '{0}'", dr["ctid"].ToString())).Tables[0]; int num = Convert.ToInt16(dataTable.Rows[0]["orderFrom"]); SqlParameter[] sqlParameter ={ new SqlParameter("@mainctids", SqlDbType.VarChar,200), new SqlParameter("@res", SqlDbType.VarChar, 4000) }; sqlParameter[0].Value = dr["ctid"].ToString(); sqlParameter[1].Direction = ParameterDirection.Output; if (num == 30) { SqlHelper.ExecuteNonQueryStore("sp_set_bucha_ctid", sqlParameter); } else { SqlHelper.ExecuteNonQueryStore("sp_set_bucha", sqlParameter); } break; } } bu_err = 0; break; } catch (Exception ex) { if (ex.Message.IndexOf("死锁") != -1) { bu_err++; helper.writeLog("buchajia,死锁了,继续执行"); Thread.Sleep(1000); } else { XLog.SaveLog(0, "syncBuChaJiaCall------" + ex.Message); break; } } } } if (idLst.Count > 0) { sql = "delete from s_buchajia where id in (" + string.Join(",", idLst.ToArray()) + ") ;"; SqlHelper.ExecuteNonQuery(sql); helper.writeLog("补差价调整完成" + idLst.Count); } } catch (Exception ex) { XLog.SaveLog(0, "syncBuChaJiaCall" + ex.Message); } })).Start(); } /// /// 分解数据表 /// /// 需要分解的表 /// 每个表包含的数据量 /// public DataSet SplitDataTable(DataTable originalTab, int rowsNum) { //获取所需创建的表数量 if (rowsNum == 0) { rowsNum = 1; } int tableNum = originalTab.Rows.Count / rowsNum; //获取数据余数 int remainder = originalTab.Rows.Count % rowsNum; DataSet ds = new DataSet(); //如果只需要创建1个表,直接将原始表存入DataSet if (tableNum == 0) { if (originalTab.Rows.Count == 0) { ds.Tables.Add(new DataTable()); } else { ds.Tables.Add(originalTab); } } else { DataTable[] tableSlice = new DataTable[tableNum]; //Save orginal columns into new table. for (int c = 0; c < tableNum; c++) { tableSlice[c] = new DataTable(); foreach (DataColumn dc in originalTab.Columns) { tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType); } } //Import Rows for (int i = 0; i < tableNum; i++) { // if the current table is not the last one if (i != tableNum - 1) { for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++) { tableSlice[i].ImportRow(originalTab.Rows[j]); } } else { for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++) { tableSlice[i].ImportRow(originalTab.Rows[k]); } } } //add all tables into a dataset foreach (DataTable dt in tableSlice) { ds.Tables.Add(dt); } } return ds; } bool isGet = false; int tbt_count = 0; int tbt_max = 0; private void syncTaoBaoCall(object obj) { if (isGet) return; isGet = true; try { string sql = "select top 200 * from S_TaoBaoTmc2 order by id asc"; DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0]; if (dt != null && dt.Rows.Count > 0) { taobaoThread(dt); } //DataSet ds = SplitDataTable(dt,100); //tbt_count = 0; //tbt_max = ds.Tables.Count; //for (int i = 0; i < tbt_max; i++) //{ // ThreadPool.QueueUserWorkItem(stat => { // taobaoThread(stat); // }, ds.Tables[i]); //} //while (tbt_count < tbt_max) //{ // Thread.Sleep(1000); //} //helper.writeLog("整批同步完成!!"); } catch (Exception ex) { XLog.SaveLog(0, "syncTaoBaoCall" + ex.Message); } finally { isGet = false; } } private void taobaoThread(object _dt) { try { DataTable dt = (DataTable)_dt; List idLst = new List(); helper.writeLog(dt.Rows[0]["id"].ToString()); foreach (DataRow dr in dt.Rows) { idLst.Add(dr["id"].ToString()); while (true) { if (tb_err >= 15) { Environment.Exit(0); return; } try { tmcHelper.Api_TmcTradeMsg(dr["message"].ToString()); tb_err = 0; break; } catch (Exception ex) { if (ex.Message.IndexOf("死锁") != -1) { tb_err++; helper.writeLog("同步死锁了,继续执行"); Thread.Sleep(1000); } else { XLog.SaveLog(0, dr["message"].ToString() + "------" + ex.Message); break; } } } } if (idLst.Count > 0) { string sql = "delete from S_TaoBaoTmc2 where id in (" + string.Join(",", idLst.ToArray()) + ") ;"; SqlHelper.ExecuteNonQuery(sql); helper.writeLog("同步完成" + idLst.Count); } } catch (Exception ex) { } finally { tbt_count++; } } bool refundisGet = false; int refund_tbt_count = 0; int refundtbt_max = 0; private void syncRefundTaoBaoCall(object obj) { if (refundisGet) return; refundisGet = true; try { string sql = "select top 50 * from S_RefundTmc order by id asc"; DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0]; if (dt != null && dt.Rows.Count > 0) { refundTaobaoThread(dt); } } catch (Exception ex) { XLog.SaveLog(0, "syncRefundTaoBaoCall" + ex.Message); } finally { refundisGet = false; } } private void refundTaobaoThread(object _dt) { try { DataTable dt = (DataTable)_dt; List idLst = new List(); helper.writeLog(dt.Rows[0]["id"].ToString()); foreach (DataRow dr in dt.Rows) { idLst.Add(dr["id"].ToString()); while (true) { if (refund_tb_err >= 15) { Environment.Exit(0); return; } try { refundTmcHelper.Api_TmcRefundMsg(dr["message"].ToString()); refund_tb_err = 0; break; } catch (Exception ex) { if (ex.Message.IndexOf("死锁") != -1) { refund_tb_err++; helper.writeLog("同步死锁了,继续执行"); Thread.Sleep(1000); } else { XLog.SaveLog(0, dr["message"].ToString() + "------" + ex.Message); break; } } } } if (idLst.Count > 0) { string sql = "delete from S_RefundTmc where id in (" + string.Join(",", idLst.ToArray()) + ") ;"; SqlHelper.ExecuteNonQuery(sql); helper.writeLog("退款同步完成" + idLst.Count); } } catch (Exception ex) { } finally { refund_tbt_count++; } } bool disPop = false; /// /// 自动派单 /// /// private void disTimerCall(object obj) { if (disPop) return; DateTime nowTime = DateTime.Now; if (nowTime.Minute % 10 != 0)//超出时间 { disPop = false; return; } disPop = true; new Thread(new ThreadStart(delegate () { try { WriteLog(string.Format("自动派单设计共创")); string sql1 = "select ID, Name, DayOrderReceive, pemDesign, pemShop, DayOrderLimit,OldOrder from view_ErpUser where Name='设计共创'"; DataTable dt1 = SqlHelper.ExecuteDataset(sql1).Tables[0]; int ID = Convert.ToInt32(dt1.Rows[0]["ID"]); bool OldOrder = Convert.ToBoolean(dt1.Rows[0]["OldOrder"]); string design_sql = string.Format("select * from Ce_ErpDesignInfo where designId > 0 and tarId={0}", 3542); DataTable design_dt = SqlHelper.ExecuteDataset(design_sql).Tables[0]; DateTime selfTime = DateTime.Now; Dictionary> shop_orders = new Dictionary>(); foreach (DataRow row in design_dt.Rows) { List designIds = null; if (shop_orders.ContainsKey(row["shopId"].ToString())) { shop_orders.TryGetValue(row["shopId"].ToString(), out designIds); } else { designIds = new List(); } designIds.Add(row["designId"].ToString()); shop_orders[row["shopId"].ToString()] = designIds; } StringBuilder sql2 = new StringBuilder(); sql2.AppendFormat("select ctid ,shopId,productId from view_ErpTradeCell where orderstate=2 and designuserid=0 and payment>0 and isrefund=0 and productId>0 and shopId>0 "); if (!OldOrder) { sql2.AppendFormat(" and IsOldCustomer != 1 "); } sql2.AppendFormat(" order by IsUrgency desc,pay_time asc "); DataTable dth = SqlHelper.ExecuteDataset(sql2.ToString()).Tables[0]; foreach (DataRow dr in dth.Rows) { try { List designIds = null; if (!shop_orders.ContainsKey(dr["shopId"].ToString())) { continue; } shop_orders.TryGetValue(dr["shopId"].ToString(), out designIds); if (designIds == null || designIds.Count == 0) { continue; } if (!designIds.Contains(dr["productId"])) { continue; } CeErpTradeCell ce = CeErpTradeCell.GetByCtid(dr["ctid"].ToString()); designApiResponseVo response = designHelper.API_GetPrintData_CreateOrder(ce, ""); if (response.code != 200) { continue; } if (response.msg == "设计共创:成功") { ce.OrderState = Convert.ToInt32(OrderState.待设计); ce.DesignUserId = 3542; ce.WaitDesignTime = DateTime.Now; ce.DispatchSort = 2; ce.Update(); } addLog(dr["ctid"].ToString(), 3542, "自动派单:" + response.msg, Convert.ToInt32(OrderState.待抢单)); } catch (Exception ex) { WriteLog(string.Format("共创派单出错 | {0} | {1}", DateTime.Now.ToString(), dr["ctid"].ToString() + ex.Message.ToString())); } } if (selfTime.Hour >= 9 && selfTime.Hour <= 21 && !(selfTime.Hour == 9 && selfTime.Minute < 10)) { string sql = "select tid,ctid,IsOldCustomer,shopid,payment,ProductId,isDianziOrder from view_ErpTradeCell where orderstate=2 and productid<>0 and designuserid=0 and payment>0 and isrefund=0 order by IsUrgency desc,pay_time asc;"; DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0]; //object result = SqlHelper.ExecuteScalar(sql); if (dt != null && dt.Rows.Count > 0) { bool changeBl = false; //int c = Convert.ToInt32(result);// / 20 + 1; WriteLog(string.Format("派单 | {0} | {1}", DateTime.Now.ToString(), "开始自动派单!" + dt.Rows.Count)); int i = 0; foreach (DataRow dr in dt.Rows) { i++; //能派往系统的不派内部 designApiResponseVo result = null; try { if (nowTime.Hour > 12 && nowTime.Hour < 17) { //这段时间白班晚班平均分配 if (changeBl) { changeBl = false; } else { changeBl = true; } } else changeBl = false; string IsOldCustomer = dr["IsOldCustomer"].ToString(); string isDianziOrder = dr["isDianziOrder"].ToString(); string res = ""; int ProductId = Convert.ToInt32(dr["ProductId"]); CeErpShop ceErpShop = CeErpShop.Get(dr["shopid"]); int userId = 0; if (ceErpShop != null) { userId = ceErpShop.UserID; } SqlParameter[] sqlParameter = { new SqlParameter("@inctid", SqlDbType.VarChar,200), new SqlParameter("@intype", SqlDbType.Int,5), new SqlParameter("@res", SqlDbType.VarChar, 50) }; sqlParameter[0].Value = dr["ctid"].ToString(); sqlParameter[1].Value = changeBl ? 1 : 0; sqlParameter[2].Direction = ParameterDirection.Output; if (isDianziOrder == "1") { continue; } //指定店铺老客户和指定店铺单价500以上分给指定部门 if ((IsOldCustomer == "1" && userId == 241) || (userId == 241 && Convert.ToDouble(dr["payment"]) >= 500)) { //手绘 logo 画册 海报 宣传单 if ((IsOldCustomer == "1" && (ProductId == 28 || ProductId == 57 || ProductId == 40 || ProductId == 4 || ProductId == 13))) { result = commonHelper.checkOrderListDesignInfo(dr["tid"].ToString()); if (result != null && result.code == 200) { continue; } int ceErpTradeLogg = CeErpTradeLog.GetByTidAndStatus(dr["ctid"].ToString(), Convert.ToInt32(OrderState.待设计)); if (ceErpTradeLogg == 0) { addLog(dr["ctid"].ToString(), 0, "自动派单:" + result.msg, Convert.ToInt32(OrderState.待设计)); } } SqlHelper.ExecuteNonQueryStoreWithTimeOut("sp_autodispatch_day", sqlParameter, 10); } else { if (userId != 82) { result = commonHelper.checkOrderListDesignInfo(dr["tid"].ToString()); if (result != null && result.code == 200) { continue; } int ceErpTradeLogg = CeErpTradeLog.GetByTidAndStatus(dr["ctid"].ToString(), Convert.ToInt32(OrderState.待设计)); if (ceErpTradeLogg == 0) { addLog(dr["ctid"].ToString(), 0, "自动派单:" + result.msg, Convert.ToInt32(OrderState.待设计)); } } SqlHelper.ExecuteNonQueryStoreWithTimeOut("sp_autodispatch", sqlParameter, 10); } res = sqlParameter[2].Value.ToString(); helper.writeLog("自动派单:" + dr["ctid"].ToString() + "-" + res); if (res.IndexOf("派单完成") != -1) { CeErpSukuraData.createInfo(dr["ctid"].ToString(), 2); //commonHelper.updateDataTradeCellDesignInfo(dr["ctid"].ToString()); } else { } continue; } catch (Exception ex) { helper.writeLog("自动派单出错:" + dr["ctid"].ToString() + ex.Message); continue; } //Thread.Sleep(10); } WriteLog(string.Format("派单 | {0} | {1}", DateTime.Now.ToString(), dt.Rows.Count + "次循环结束")); } else { WriteLog(string.Format("派单 | {0} | {1}", DateTime.Now.ToString(), "无单可派!")); } } } catch (Exception ex) { disPop = false; } finally { disPop = false; } })).Start(); } /// /// 每日清除数据 /// /// private void dayClearTimerCall(object obj) { new Thread(new ThreadStart(delegate () { WriteLog(string.Format("清除 | {0} | {1}", DateTime.Now.ToString(), "开始自动清除数据!")); try { SqlHelper.ExecuteNonQuery("update CE_ErpUserInfo set DayOrderReceive=0,DayOrderPer=0,OnDuty=0,beonduty=0"); WriteLog(string.Format("清除 | {0} | {1}", DateTime.Now.ToString(), "结束自动清除数据!")); } catch (Exception ed) { WriteLog(string.Format("清除 | {0} | {1}", DateTime.Now.ToString(), ed.Message)); } })).Start(); } private void dayToDesign() { try { WriteLog(string.Format("自动派单设计共创")); string sql1 = "select ID, Name, DayOrderReceive, pemDesign, pemShop, DayOrderLimit,OldOrder from view_ErpUser where Name='设计共创'"; DataTable dt = SqlHelper.ExecuteDataset(sql1).Tables[0]; int ID = Convert.ToInt32(dt.Rows[0]["ID"]); bool OldOrder = Convert.ToBoolean(dt.Rows[0]["OldOrder"]); string design_sql = string.Format("select * from Ce_ErpDesignInfo where designId > 0 and tarId={0}", 3542); DataTable design_dt = SqlHelper.ExecuteDataset(design_sql).Tables[0]; Dictionary> shop_orders = new Dictionary>(); foreach (DataRow row in design_dt.Rows) { List designIds = null; if (shop_orders.ContainsKey(row["shopId"].ToString())) { shop_orders.TryGetValue(row["shopId"].ToString(), out designIds); } else { designIds = new List(); } designIds.Add(row["designId"].ToString()); shop_orders[row["shopId"].ToString()] = designIds; } StringBuilder sql = new StringBuilder(); sql.AppendFormat("select ctid ,shopId,productId from view_ErpTradeCell where orderstate=2 and designuserid=0 and payment>0 and isrefund=0 and productId>0 and shopId>0 "); if (!OldOrder) { sql.AppendFormat(" and IsOldCustomer != 1 "); } sql.AppendFormat(" order by IsUrgency desc,pay_time asc "); DataTable dth = SqlHelper.ExecuteDataset(sql.ToString()).Tables[0]; foreach (DataRow dr in dth.Rows) { List designIds = null; if (!shop_orders.ContainsKey(dr["shopId"].ToString())) { continue; } shop_orders.TryGetValue(dr["shopId"].ToString(), out designIds); if (designIds != null || designIds.Count == 0) { continue; } if (!designIds.Contains(dr["productId"])) { continue; } CeErpTradeCell ce = CeErpTradeCell.GetByCtid(dr["ctid"].ToString()); designApiResponseVo response = designHelper.API_GetPrintData_CreateOrder(ce); if (response.code != 200) { continue; } int ceErpTradeLogg = CeErpTradeLog.GetByTidAndStatus(dr["ctid"].ToString(), Convert.ToInt32(OrderState.待设计)); if (ceErpTradeLogg == 0) { ce.OrderState = Convert.ToInt32(OrderState.待设计); ce.DesignUserId = 3542; ce.WaitDesignTime = DateTime.Now; ce.Update(); addLog(dr["ctid"].ToString(), 3542, "自动派单设计共创", Convert.ToInt32(OrderState.待设计)); } } } catch (Exception ex) { WriteLog(string.Format("自动派单设计共创 | {0} | {1}", DateTime.Now.ToString(), "发生错误" + ex.Message + "!")); } } private void dayTimerTOdesign() { DateTime currentTime = DateTime.Now; DateTime currentDate = currentTime; // 获取指定日期的开始时间 DateTime startTime = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, 0, 0, 0);//日 DateTime endTime = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, 23, 59, 59).AddSeconds(-1);//日 WriteLog(string.Format("自动派单设计系统")); // 获取指定日期的结束时间(即下一天的开始时间,减去1秒) StringBuilder sql1 = new StringBuilder(); sql1.AppendFormat("select ctid from view_ErpTradeCell where DesignUserId = '2125' and OrderState = '3' and WaitDesignTime BETWEEN '{0}' AND '{1}' and ctid not in (SELECT ctid FROM CE_ErpToDesignLog where ctime BETWEEN '{0}' AND '{1}') ", startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss")); DataTable dth1 = SqlHelper.ExecuteDataset(sql1.ToString()).Tables[0]; foreach (DataRow dr in dth1.Rows) { CeErpTradeCell ce = CeErpTradeCell.GetByCtid(dr["ctid"].ToString()); apiDesign.API_GetPrintData_CreateOrder(ce); } DateTime now = DateTime.Now; DateTime today = DateTime.Today; DateTime todayFourPM = today.AddHours(16); //等到晚上四点过后开始自动派单给设计系统 CeErpUser ceErpUser = CeErpUser.GetByUserName("设计系统"); String pemDesign = ""; String pemShop = ""; pemDesign = ceErpUser.pemDesign; pemShop = ceErpUser.pemShop; String[] pemDesigns = pemDesign.Split(','); String[] pemShops = pemShop.Split(','); StringBuilder sb = new StringBuilder(); for (int i = 0; i < pemShops.Length; i++) { sb.Append("'" + pemShops[i] + "'"); if (i < pemShops.Length - 1) { sb.Append(","); } } string inClause = sb.ToString(); StringBuilder sbs = new StringBuilder(); for (int i = 0; i < pemDesigns.Length; i++) { sbs.Append("'" + pemDesigns[i] + "'"); if (i < pemDesigns.Length - 1) { sbs.Append(","); } } string inClauses = sbs.ToString(); StringBuilder sql = new StringBuilder(); sql.AppendFormat("select ctid from view_ErpTradeCell where orderstate=2 and productid in (" + inClauses + ") and ShopId in (" + inClause + ")and designuserid=0 and payment>0 and isrefund=0 order by IsUrgency desc,pay_time asc"); /* sql.AppendFormat("select ctid from view_ErpTradeCell where orderstate=2 and productid in (" + inClauses + ") and ShopId in (" + inClause + ")and designuserid=2125 and payment>0 and isrefund=0 order by IsUrgency desc,pay_time asc");*/ DataTable dth = SqlHelper.ExecuteDataset(sql.ToString()).Tables[0]; foreach (DataRow dr in dth.Rows) { CeErpTradeCell ce = CeErpTradeCell.GetByCtid(dr["ctid"].ToString()); /* CeErpTradeCell ce = CeErpTradeCell.GetByCtid("2041933334263885688");*/ String id = apiDesign.API_GetPrintData_CreateOrder(ce); if (id == "请填写订单的手机号或者微信号才可指派到设计系统" || id == "补差价订单不需要过设计系统") { int ceErpTradeLog1 = CeErpTradeLog.GetByTidAndStatus(dr["ctid"].ToString(), Convert.ToInt32(OrderState.待抢单)); if (ceErpTradeLog1 == 0) { addLog(dr["ctid"].ToString(), 2125, id, Convert.ToInt32(OrderState.待抢单)); } if (id == "请填写订单的手机号或者微信号才可指派到设计系统" && ceErpTradeLog1 == 0) { ce.OrderState = Convert.ToInt32(OrderState.待抢单); ce.DesignUserId = 0; ce.Update(); } continue; } int ceErpTradeLogg = CeErpTradeLog.GetByTidAndStatus(dr["ctid"].ToString(), Convert.ToInt32(OrderState.待设计)); if (ceErpTradeLogg == 0) { ce.OrderState = Convert.ToInt32(OrderState.待设计); ce.DesignUserId = 2125; ce.WaitDesignTime = DateTime.Now; ce.Update(); addLog(dr["ctid"].ToString(), 2125, "自动派单设计系统", Convert.ToInt32(OrderState.待设计)); } Thread.Sleep(2000); // 等待一段时间 } } bool isDataSync = false; List shopIds = new List() { "598766","598825" }; public void syncDataSendOrder() { if (isDataSync) { return; } DateTime nowTime = DateTime.Now; if (nowTime.Minute % 30 != 0)//超出时间 { isDataSync = false; return; } isDataSync = true; WriteLog(string.Format("同步订单信息")); new Thread(new ThreadStart(delegate () { try { foreach (string id in shopIds) { apiHelper.Api_SyncOrderByTime(id); } StringBuilder sql = new StringBuilder(); sql.AppendFormat("select * from view_dataSendOrderInfo where isSync=0 and payment_cyt > 0"); DataTable dth = SqlHelper.ExecuteDataset(sql.ToString()).Tables[0]; if (dth != null && dth.Rows.Count > 0) { dataSendOrderBean dataSendOrderBean = null; foreach (DataRow item in dth.Rows) { try { dataSendOrderBean = new dataSendOrderBean(); dataSendOrderBean.Date1723191218572 = item["pay_time"].ToString(); dataSendOrderBean.RelevanceForm1723191634028 = item["SupplierId"].ToString(); dataSendOrderBean.RelevanceForm1723191239149 = item["ShopId"].ToString(); dataSendOrderBean.Date1723193880305 = item["FinishDeliveryTime"].ToString(); dataSendOrderBean.Date1723193870660 = item["FinishPlaceTime"].ToString(); dataSendOrderBean.LongText1723542734262 = item["seller_memo"].ToString(); dataSendOrderBean.ShortText1723542735637 = item["OtherMemo"].ToString(); dataSendOrderBean.ShortText1723542736542 = item["address"].ToString(); dataSendOrderBean.ShortText1723193907492 = item["OutSid"].ToString(); dataSendOrderBean.Number1723193919446 = item["payment_cyt"].ToString(); dataSendOrderBean.ShortText1723707899761 = item["ctid"].ToString(); dataSendOrderBean.Radio1723534706288 = item["IsReturn"].ToString() == "0" ? "未结算" : "打回"; dataResponseVo result = dataHelper.CreateBoFahuo(dataSendOrderBean); if (result != null) { if ("0".Equals(result.errcode)) { CeErpDataSendOrderInfo.updateAsync(item["ctid"].ToString(), JsonConvert.SerializeObject(dataSendOrderBean)); } else { CeErpDataSendOrderInfo.updateError(item["ctid"].ToString(), result.errmsg, JsonConvert.SerializeObject(dataSendOrderBean)); } } } catch (Exception ex) { WriteLog(string.Format(item["ctid"] + "同步订单信息:" + ex)); } } WriteLog(string.Format("同步订单信息结束")); } } catch (Exception ex) { isDataSync = false; } finally { isDataSync = false; } })).Start(); } bool isOrderSync = false; public void sendOrderInfo() { if (isOrderSync) { return; } DateTime nowTime = DateTime.Now; isOrderSync = true; WriteLog(string.Format("数仓同步订单信息")); new Thread(new ThreadStart(delegate () { try { StringBuilder sql = new StringBuilder(); sql.AppendFormat("select top 200 * from CE_ErpSukuraData "); DataTable dth = SqlHelper.ExecuteDataset(sql.ToString()).Tables[0]; if (dth != null && dth.Rows.Count > 0) { foreach (DataRow item in dth.Rows) { try { int type = Convert.ToInt32(item["type"]); string tid = item["tid"].ToString(); if (type == 0) { Api_tmc_trade_info_Obj fullObj = JsonConvert.DeserializeObject(item["json"].ToString()); if (fullObj == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } Api_tmc_trade_info_Obj.Content content = fullObj.content; if (content == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } dataHelper.sendErpTradeInfo(new dataSendTradeBean(content)); List orderList = content.lines; foreach (Api_tmc_trade_info_Obj.LinesItem line in orderList) { dataHelper.sendErpTradeOrderInfo(new dataSendTradeOrderBean(line, content)); } } if (type == 1) { CeErpTradeCell entity = CeErpTradeCell.GetByCtid(tid); if (entity == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } CeErpTrade father = CeErpTrade.Get(entity.tid); if (father == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } dataHelper.sendErpTradeCellInfo(new dataSendTradeCellBean(entity, father)); } if (type == 2) { commonHelper.updateDataTradeCellDesignInfo(tid); } if (type == 3) { commonHelper.updateDataTradeCellPlaceInfo(tid); } if (type == 4) { commonHelper.updateDataTradeCellDeliveInfo(tid); } if (type == 5) { commonHelper.updateDataTradeCellBackInfo(tid); } if (type == 6) { commonHelper.updateDataTradeCellCheckGoodInfo(tid); } if (type == 7) { commonHelper.updateDataTradeCellUrgentInfo(tid); } if (type == 8) { commonHelper.updateDataTradeCellAfterSaleInfo(tid); } if (type == 9) { CeErpTradeCell entity = CeErpTradeCell.GetByCtid(tid); if (entity == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } CeErpReturnCash father = CeErpReturnCash.GetByTid(entity.tid); if (father == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } commonHelper.updateDataTradeCellCashInfo(entity, father); } if (type == 10) { CeErpTradeCell entity = CeErpTradeCell.GetByCtid(tid); if (entity == null) { CeErpSukuraData.Del(item["ID"].ToString()); continue; } commonHelper.updateDataTradeCellStayInfo(entity); } CeErpSukuraData.Del(item["ID"].ToString()); } catch (Exception ex) { CeErpSukuraData.Del(item["ID"].ToString()); XLog.SaveLog(0, "sendOrderInfo2:---" + item["tid"].ToString() + "---" + ex.Message); } } } } catch (Exception ex) { XLog.SaveLog(0, "sendOrderInfo:---" + ex.Message); isOrderSync = false; } finally { isOrderSync = false; } })).Start(); } public static void addLog(string ctid, int userid, string con, int orderState = 0, int aftersaleState = 0) { CeErpTradeLog log = new CeErpTradeLog(); log.tid = ctid; log.UserId = userid; log.Con = con; log.OrderState = orderState; log.AfterSaleState = aftersaleState; log.OperateTime = DateTime.Now; log.Create(); } /// /// 更新异常订单状态 /// /// private void unUsualOrderTimerCall(object obj) { new Thread(new ThreadStart(delegate () { WriteLog(string.Format("更新异常订单 | {0} | {1}", DateTime.Now.ToString(), "开始更新异常订单状态!")); try { commonHelper.setDeliveryUnusualOrder(); //StringBuilder sql = new StringBuilder(); //sql.AppendFormat("update ce_erptradecell with(rowlock) set unusualTag=3,UnusualTime=WaitDesignTime where orderstate<5 and unusualTag=0 and datediff(hh,WaitDesignTime,getdate())>(select sjzTime from CE_ErpProductHour where CE_ErpProductHour.ProductID=ce_erptradecell.ProductId);"); //sql.AppendFormat("update ce_erptradecell with(rowlock) set unusualTag=4,UnusualTime=FinishDesignTime where orderstate=5 and unusualTag=0 and datediff(hh,FinishDesignTime,getdate())>(select xdTime from CE_ErpProductHour where CE_ErpProductHour.ProductID=ce_erptradecell.ProductId);"); //sql.AppendFormat("update ce_erptradecell with(rowlock) set unusualTag=5,UnusualTime=FinishPlaceTime where orderstate=6 and unusualTag=0 and datediff(hh,FinishPlaceTime,getdate())>(select fhTime from CE_ErpProductHour where CE_ErpProductHour.ProductID=ce_erptradecell.ProductId);"); //SqlHelper.ExecuteNonQuery(sql.ToString()); //WriteLog(string.Format("更新异常订单 | {0} | {1}", DateTime.Now.ToString(), "结束更新异常订单状态!")); } catch (Exception ex) { WriteLog(string.Format("更新异常订单 | {0} | {1}", DateTime.Now.ToString(), "发生错误" + ex.Message + "!")); } })).Start(); } /// /// 定时刷新退款 /// /// private void reFundsDataTimerCall(object obj) { new Thread(new ThreadStart(delegate () { //定时刷新退款确认状态,48小时自动确认 WriteLog(string.Format("刷新退款 | {0} | {1}", DateTime.Now.ToString(), "开始执行!")); try { commonHelper.autoRefreshRefundState(); //StringBuilder sql = new StringBuilder(); //sql.AppendFormat("update CE_ErpTradeRefund set RefundState=3 where RefundState=2 and DATEDIFF(hh,modified,getdate())>=72;"); //sql.AppendFormat("update ce_erptradecell set AfterSaleState=4,FinishAfterSaleTime=getdate() where AfterSaleState=3 and AfterSaleResSupId=0 and DATEDIFF(hh,AfterSalePreTime,getdate())>=72;"); //sql.AppendFormat("update ce_erptradecell set AfterSaleState=4,AfterSaleSupplierState=1,FinishAfterSaleTime=getdate() where AfterSaleState=3 and AfterSaleSupplierState=0 and AfterSaleResSupId>0 and DATEDIFF(hh,AfterSalePreTime,getdate())>=72;"); //sql.AppendFormat("update CE_ErpTradeResponsible set VerifyState=1 where VerifyState=0 and DATEDIFF(hh,createdTime,getdate())>=72;"); ////DataTable dt = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0]; //SqlHelper.ExecuteNonQuery(sql.ToString()); WriteLog(string.Format("2刷新退款 | {0} | {1}", DateTime.Now.ToString(), "执行完成!")); } catch (Exception ex) { WriteLog(string.Format("2刷新退款 | {0} | {1}", DateTime.Now.ToString(), "发生错误" + ex.Message + "!")); } })).Start(); } #region process private bool killProc(string user) { Process[] pProcess = Process.GetProcesses(); for (int i = 1; i <= pProcess.Length - 1; i++) { if (pProcess[i].ProcessName.ToLower() == "w3wp" && GetProcessUserName(pProcess[i].Id) == user) { pProcess[i].Kill(); helper.writeLog("结束w3wp"); return true; } } return false; } //获得进程的用户名 private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner", inPar, null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } #endregion #region private private void stripExit_Click(object sender, EventArgs e) { Application.ExitThread(); Environment.Exit(0); } private void stripKis_Click(object sender, EventArgs e) { WindowState = FormWindowState.Normal; this.Show(); } private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { //释放动态库 //bxdualsdk_56.bxDual_ReleaseSdk(); //VzClientSDK.VzLPRClient_Cleanup(); helper.writeLog("客户端关闭"); //if (ytjTh != null) ytjTh.Abort(); //KillSelf(); } //private void KillSelf() //{ // Process[] pProcess = Process.GetProcesses(); // for (int i = 1; i <= pProcess.Length - 1; i++) // { // if (pProcess[i].ProcessName == "AI无人值守称重系统") // { // pProcess[i].Kill(); // //更新 // break; // } // } //} private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { // 取消关闭 e.Cancel = true; this.Hide(); } } #endregion private void WriteLog(string msg) { helper.writeLog(msg); } private void stripPai_Click(object sender, EventArgs e) { disTimerCall(null); } } }