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
|
{
|
/// <summary>
|
/// 捷配window自动运行服务
|
/// 可根据自主需求添加线程,独立处理对应的业务逻辑即可
|
/// add by sunyichao 2018-09-07
|
/// </summary>
|
public partial class WinServerAutoRun : ServiceBase
|
{
|
#region 服务相关变量
|
|
/// <summary>
|
/// 任务标志,为true时执行任务
|
/// </summary>
|
public static bool flag = false;
|
|
/// <summary>
|
/// 订单自动确认收货线程
|
/// </summary>
|
Thread orderAutoReceive = null;
|
|
/// <summary>
|
/// ds
|
/// </summary>
|
Thread orderAutoReceive2 = null;
|
|
|
|
//业务类对象
|
LogisticBaseInfoAsycAdminBiz _logisticbiz = new LogisticBaseInfoAsycAdminBiz();
|
OrderWaitSyncBiz orderSync = new OrderWaitSyncBiz();
|
|
#endregion
|
|
/// <summary>
|
/// 服务构造函数
|
/// </summary>
|
public WinServerAutoRun()
|
{
|
InitializeComponent();
|
}
|
|
|
/// <summary>
|
/// 服务开启执行函数
|
/// </summary>
|
/// <param name="args"></param>
|
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);
|
}
|
|
}
|
|
|
/// <summary>
|
/// 服务停止时执行函数
|
/// </summary>
|
protected override void OnStop()
|
{
|
flag = false;
|
|
try
|
{
|
if (orderAutoReceive != null)
|
{
|
SaveEventLog("线程终止。。。", "JpDoCreateOrderShipInfoAsycThread");
|
//orderAutoReceive.Abort();
|
orderAutoReceive = null;
|
}
|
|
}
|
catch (Exception)
|
{
|
throw;
|
}
|
}
|
|
|
/// <summary>
|
/// 自动同步外单入库
|
/// add by sunyichao 2018-10-25
|
/// </summary>
|
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);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 保存事件日志
|
/// </summary>
|
/// <param name="message"></param>
|
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();
|
}
|
|
/// <summary>
|
/// 同步发货信息到财务系统
|
/// add by hongkai 2020-3-26
|
/// </summary>
|
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);
|
}
|
}
|
|
}
|
/// <summary>
|
/// 重新调用接口表
|
/// add by dyb 2020-05-15
|
/// </summary>
|
public void DoPinbanAsyc()
|
{
|
while (flag)
|
{
|
var bll = new WebInterfaceRequestBaseBiz();
|
var msg = bll.AutoCall();
|
MngLog.Error("服务DoPinbanAsyc:" + msg);
|
LogHelper.Info("bbb");
|
Thread.Sleep(300000);
|
}
|
}
|
}
|
}
|