You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
6.1 KiB
C#

9 months ago
using FluentScheduler;
using POSV.ShoppingCart;
using POSV.Utils;
using POSV.WebService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.Job
{
public class ShopOrderERP : IJob
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private static bool _lock = true;
public void Execute()
{
if (_lock)
{
_lock = false;
var _is = Global.Instance.GlobalConfigStringValue(ConfigConstant.ERP_API_ENABLED, "false");
var _data = Global.Instance.GlobalConfigStringValue(ConfigConstant.ERP_API_CONFIG, "");
if (_is.Equals("false"))
{
_lock = true;
return;
}
try
{
Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(_data);
string sql = string.Format("where createDate > '{0}' and IsUploadERP = '0' and orderStatus in ( 4,2)", DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd HH:mm:ss"));
List<OrderObject> orderObject = new List<OrderObject>();
using (var db = Global.Instance.OpenDataBase)
{
orderObject = db.Query<OrderObject>(sql).ToList();
logger.Info("ERP自动上传" + "共有" + orderObject.Count + "数据");
if (orderObject.Count > 0)
{
var ids = string.Join("','", orderObject.ConvertAll(x => x.Id).ToArray());
var condition = " where orderId in ('" + ids + "');";
logger.Debug(condition);
//单据明细
var _item = db.Query<OrderItem>(condition).ToList();
//支付明细
var _pays = db.Query<PayItem>(condition).ToList();
List<StationTradeChange> _stationTrades = new List<StationTradeChange>();
foreach (var item in orderObject)
{
item.Items = _item.Where(f => f.OrderId == item.Id).ToList();
StationTradeChange _stationTrade = new StationTradeChange();
_stationTrade.ShopNo = jObject["SHOPNO"].ToString();
_stationTrade.ShopName = jObject["SHOPNAME"].ToString();
_stationTrade.StationId = jObject["STATIONID"].ToString();
_stationTrade.StationName = jObject["STATIONNAME"].ToString();
_stationTrade.Branch = jObject["BRANCH"].ToString();
_stationTrade.BillNo = item.TradeNo;
_stationTrade.BillTime = item.CreateDate;
_stationTrade.BillAllPrices = item.PaidAmount.ToString();
_stationTrade.SourceType = "POS机";
_stationTrade.SourceNo = Global.Instance.Authc.PosNo;
_stationTrade.TransType = item.OrderStatus == OrderStatus.退 ? "退货" : "销售";
var _pay = db.Query<PayItem>("select * from pos_order_pay where orderId = '" + item.Id + "'").ToList();
if (_pay == null)
{
_stationTrade.Payment = "现金";
}
else
{
if (_pay.Count > 1)
{
_stationTrade.Payment = "非现金";
}
else
{
if (_pay[0].No.Equals("01"))
{
_stationTrade.Payment = "现金";
}
else
{
_stationTrade.Payment = "非现金";
}
}
}
_stationTrades.Add(_stationTrade);
}
var _dataSS = JsonUtils.Serialize(_stationTrades);
var _Return = WebServiceUtils.UploadStationTradeChange(jObject["ADDRESS"].ToString(), _stationTrades, jObject["KEY"].ToString()).ToString();
if (_Return.Contains("成功"))
{
orderObject.ForEach(f =>
{
f.IsUploadERP = 1;
SqliteUtils.Execute(string.Format("update pos_order set IsUploadERP = 1 where id = '{0}'", f.Id));
});
}
else if (_Return.Contains("违反唯一约束条件"))
{
orderObject.ForEach(f =>
{
f.IsUploadERP = 1;
SqliteUtils.Execute(string.Format("update pos_order set IsUploadERP = 1 where id = '{0}'", f.Id));
});
}
logger.Info("世界餐饮自动上传:" + _Return);
}
}
_lock = true;
}
catch (Exception ex)
{
_lock = true;
logger.Info(ex);
}
}
}
}
}