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);
}
}
}
}