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 = new List(); using (var db = Global.Instance.OpenDataBase) { orderObject = db.Query(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(condition).ToList(); //支付明细 var _pays = db.Query(condition).ToList(); List _stationTrades = new List(); 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("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); } } } } }