using Jp.WinAutoService.Common; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.Net.Http; using System.ServiceProcess; using System.Text; using System.Threading; using Pcb.Business; using Pcb.Business.BizCore.BizCashLog; using Pcb.Business.BizCore.BizMember; using Pcb.Business.BizCore.BizMemberCoupon; using Pcb.Business.BizCore.BizMemberCoupon.Interfaces; using Pcb.Business.BizCore.BizMemberIntegralLog; using Pcb.Business.BizCore.BizOrderMain; using Pcb.Business.BizCore.BizPcbOrder; using Pcb.Common; using Pcb.Domain; using Pcb.Business.BizCore; using Pcb.Common.Enum; namespace Jp.WinAutoService { /// /// 捷配window自动运行服务 /// 可根据自主需求添加线程,独立处理对应的业务逻辑即可 /// add by sunyichao 2018-09-07 /// public partial class WinServerAutoRun : ServiceBase { #region 服务相关变量 /// /// 任务标志,为true时执行任务 /// public static bool flag = false; /// /// 订单自动确认收货线程 /// Thread orderAutoReceive = null; /// /// ds /// Thread orderAutoReceive2 = null; //业务类对象 LogisticBaseInfoAsycAdminBiz _logisticbiz = new LogisticBaseInfoAsycAdminBiz(); OrderWaitSyncBiz orderSync = new OrderWaitSyncBiz(); #endregion /// /// 服务构造函数 /// public WinServerAutoRun() { InitializeComponent(); } /// /// 服务开启执行函数 /// /// protected override void OnStart(string[] args) { flag = true; try { orderAutoReceive = new Thread(new ThreadStart(DoCreateOrderShipInfoAsyc)); orderAutoReceive.Name = "JpDoCreateOrderShipInfoAsycThread"; orderAutoReceive.Start(); //接口失败后调用 orderAutoReceive2 = new Thread(new ThreadStart(DoPinbanAsyc)); orderAutoReceive2.Name = "DoPinbanAsycThread"; orderAutoReceive2.Start(); } catch (Exception ex) { SaveEventLog(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.StackTrace, Thread.CurrentThread.Name); } } /// /// 服务停止时执行函数 /// protected override void OnStop() { flag = false; try { if (orderAutoReceive != null) { SaveEventLog("线程终止。。。", "JpDoCreateOrderShipInfoAsycThread"); //orderAutoReceive.Abort(); orderAutoReceive = null; } } catch (Exception) { throw; } } /// /// 自动同步外单入库 /// add by sunyichao 2018-10-25 /// public void DoOrderAutoSync() { DataTable list = null; while (flag) { try { list = orderSync.GetWaitSyncOrder(); if (list.Rows.Count > 0) { foreach (DataRow item in list.Rows) { #region 外贸入库处理 string businessOrderNo = item["BusinessOrderNo"].ToString(); string businessGroupNo = item["BusinessGroupNo"].ToString(); int receiveNum = item["ReceiveNum"].ToString().ToInt2(); var orderService = new PcbWayOrder.OrderServiceClient(); var orderNService = new PcbWayOrderN.OrderNServiceClient(); var pcbService = new PcbWayPcb.PCBServiceClient(); bool flag2 = orderService.UpdateActualReceiveNumByOrderNo(businessOrderNo, receiveNum, businessGroupNo, ""); var mod_detail = orderService.GetOrderDetailByNo(businessOrderNo); //添加板子、钢网、万能版等收货日志 add by sunyichao 2016-11-14 int logId = orderNService.AddOrderReceiveLog(new PcbWayOrderN.OrderReceiveLog() { GroupNo = businessGroupNo, ProId = mod_detail.ProId, ProType = mod_detail.ProType, BomRelationId = 0, ReceiveNum = receiveNum, CreateBy = 56,//外贸物流专员 CreateTime = DateTime.Now, Remark = "PCB收货:子订单编号【" + businessOrderNo + "】,当前已收 " + receiveNum + " PCS。" }); //添加板子、钢网、万能版等添加订单日志 add by sunyichao 2016-11-14 bool logFlag = orderService.AddLog(new PcbWayOrder.OrderMainLog() { OrderId = mod_detail.MainId, Note = "PCB收货:子订单编号【" + businessOrderNo + "】,当前已收 " + receiveNum + " PCS。", CreateTime = DateTime.Now }); if (flag2) { if (mod_detail.ActualReceiveNum >= mod_detail.BuyNum) { pcbService.AddPcbOrderLog(new PcbWayPcb.OrderLog() { AdminId = 56, OrderId = mod_detail.ProId, AddTime = DateTime.Now, SendFlag = 0, Note = "子订单" + mod_detail.ProName + ":入库完成###。", LogType = 0, PointType = 80 }); } //验证是否全部入库 var isAllReceived = orderService.CheckGroupNoIsAllReceivedByOrderNo(businessOrderNo); if (isAllReceived) { //全部入库收货完成添加订单收货日志 add by sunyichao 2016-11-14 logFlag = orderService.AddLog(new PcbWayOrder.OrderMainLog() { OrderId = mod_detail.MainId, Note = "订单包G" + mod_detail.MainId + ":已全部收货完成。", CreateTime = DateTime.Now }); } } #endregion //修改数据状态 orderSync.UpdateStatusById(item["Id"].ToInt2()); } SaveEventLog("订单自动同步入库任务完成,共处理" + list.Rows.Count + "条数据,休眠1分钟。。。", Thread.CurrentThread.Name); Thread.Sleep(60000); } else { SaveEventLog("暂无可同步外单,休眠1分钟。。。", Thread.CurrentThread.Name); Thread.Sleep(60000); } } catch (Exception ex) { //服务程序错误时,线程休眠,十分钟后重新请求 add by sunyichao 2018-11-13 SaveEventLog("同步程序错误。。。\r\n" + ex.Message + "\r\n" + ex.Source + "\r\n" + ex.StackTrace + "\r\n休眠10分钟", Thread.CurrentThread.Name); Thread.Sleep(60000 * 10); } } } /// /// 保存事件日志 /// /// private void SaveEventLog(string message, string suffix) { string filePath = ServerConfig.LogPath + "EventLogV" + suffix + ".txt"; FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fileStream); streamWriter.BaseStream.Seek(0, SeekOrigin.End); streamWriter.WriteLine("" + DateTime.Now.ToString() + "【Flag=" + flag + "】:" + message); streamWriter.Flush(); streamWriter.Close(); fileStream.Close(); } /// /// 同步发货信息到财务系统 /// add by hongkai 2020-3-26 /// public void DoCreateOrderShipInfoAsyc() { DataTable dt = null; while (flag) { try { dt = _logisticbiz.GetNeedReceiveOrders(ServerConfig.TopForHandle); if (dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { int result = _logisticbiz.CreateOrderShipInfo(dr["Id"].ToInt2()); if (result > 0) { _logisticbiz.SetStatusSql(dr["Id"].ToInt2(), EnumLogisticBaseInfoAsycStatus.Sended.GetHashCode()); } else { _logisticbiz.SetStatusSql(dr["Id"].ToInt2(), EnumLogisticBaseInfoAsycStatus.SendFail.GetHashCode()); SaveEventLog("同步发货信息到财务系统任务失败,同步编号是" + dr["Id"].ToInt2(), Thread.CurrentThread.Name); } } SaveEventLog("同步发货信息到财务系统任务完成,共处理" + dt.Rows.Count + "条数据,休眠" + ServerConfig.TimeForSeconds / 60000 + "分钟。。。", Thread.CurrentThread.Name); Thread.Sleep(ServerConfig.TimeForSeconds); } else { if (Thread.CurrentThread.IsAlive) { SaveEventLog("暂无可同步订单,休眠" + ServerConfig.TimeForSeconds / 60000 + "分钟。。。", Thread.CurrentThread.Name); Thread.Sleep(ServerConfig.TimeForSeconds); } } } catch (Exception ex) { SaveEventLog("同步发货信息任务异常1..." + ex.Message + "\r\n" + ex.Source + "\r\n" + ex.StackTrace, Thread.CurrentThread.Name); Thread.Sleep(ServerConfig.TimeForSeconds); } } } /// /// 重新调用接口表 /// add by dyb 2020-05-15 /// public void DoPinbanAsyc() { while (flag) { var bll = new WebInterfaceRequestBaseBiz(); var msg = bll.AutoCall(); MngLog.Error("服务DoPinbanAsyc:" + msg); LogHelper.Info("bbb"); Thread.Sleep(300000); } } } }