/// <summary> /// 发货后15天后未确认收货的订单自动确认收货 /// </summary> public static void ComfirmTimePassOrder() { //订单状态是5已发货物流状态是1付款中 List <DSMTMALL.DB.Model.M_OrderInfo> orderInfoList = new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Slave).GetModelList <DSMTMALL.DB.Model.M_OrderInfo>(" OrderStatus=5 AND ShippingStatus=1 ", null); DateTime nowTime = DateTime.Now; if (orderInfoList != null && orderInfoList.Count > 0) { foreach (var item in orderInfoList) { if (item.ShippingTime.AddDays(15) <= nowTime) { if (new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateModel <DSMTMALL.DB.Model.M_OrderInfo>(" OrderID=@_OrderID AND OrderStatus=5 AND ShippingStatus=1 ", new { _OrderID = item.OrderID, OrderStatus = 8, ShippingStatus = 2, ConfirmTime = nowTime })) { WeChatAPI.SendMsg("系统自动确认收货", "您的订单" + item.OrderSn + "由系统自动确认收货成功,感谢您的购买", item.OpenID); } } } } }
/// <summary> /// 查询订单-更新发货信息//每天晚上24点之后执行一次,一次同步所有发货信息 /// </summary> public static void WMSNotifyQueryStockOut() { //基础配置 OrderHelper wmsStringHandler = new OrderHelper(); DateTime nowTime = DateTime.Now; string method = MethodQuery; WMSNotifyQuery notifyQuery = new WMSNotifyQuery(Owner); WMSReturnQuery resJsonArr = null; List <DSMTMALL.DB.Model.M_OrderInfo> orderInfo = null; DSMTMALL.DB.Model.M_OrderInfo orderInfoNow = null; SortedDictionary <string, string> dicQuery = null; // new SortedDictionary<string, string>();//每一订单推送后都必须要这个键值对初始化 //string strWhere = "SuppliersID=101 AND ( OrderStatus=9 OR OrderStatus=1) AND PayStatus=2 ";//1.订单的商品来源要是海淘的,2.订单的状态要已推送订单,3.订单的支付状态是已付款的 string strWhere = "SuppliersID=101 AND OrderStatus=9 AND IsVerify=1 AND PayStatus=2 "; //1.订单的商品来源要是海淘的,2.订单的状态要已推送订单,3.订单的支付状态是已付款的 4.已校对的 try { orderInfo = new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Slave).GetModelList <DSMTMALL.DB.Model.M_OrderInfo>(strWhere, null);//获取所有要校对的订单列表 } catch (Exception esql) { orderInfo = null; FileHelper.logger.Warn("获取要同步物流状态的订单列表信息出错,错误信息:" + esql.Message); } if (orderInfo != null || orderInfo.Count > 0) { for (int i = 0; i < orderInfo.Count; i++)//对符合条件的内容进行for循环 { string dicSignStr = string.Empty; string resWMSVal = string.Empty; nowTime = DateTime.Now; string param = string.Empty; resJsonArr = null; if (!string.IsNullOrEmpty(orderInfo[i].TPLOrderNo)) //第三方系统推送回的订单号不为空的情况下执行订单校对 { dicQuery = new SortedDictionary <string, string>(); //每一订单推送后都必须要这个键值对初始化 notifyQuery.Code = orderInfo[i].TPLOrderNo; string wmsNotifyQueryStr = new JavaScriptSerializer().Serialize(notifyQuery); //将该笔订单信息JSON格式化 dicQuery.Add("appkey", AppKey); dicQuery.Add("method", method); dicQuery.Add("param", wmsNotifyQueryStr); dicQuery.Add("v", V); dicQuery.Add("timestamp", nowTime.ToString()); dicSignStr = wmsStringHandler.WMSStringHanlder(dicQuery, Appsecret); param = "appkey=" + AppKey + "×tamp=" + nowTime + "&v=" + V + "&method=" + method + "¶m=" + wmsNotifyQueryStr + "&sign=" + dicSignStr; try { resWMSVal = ToolHelper.Post(Url, param); resJsonArr = new JavaScriptSerializer().Deserialize <WMSReturnQuery>(resWMSVal); if (resJsonArr != null) //返回数据反序列化成功 { if (resJsonArr.Code == "0") //返回0-成功 ,并且订单物流状态为0已取消或者40已发货 { if (resJsonArr.Status == "40" || resJsonArr.Status == "10" || (resJsonArr.Status == "20" || resJsonArr.Status == "30") && !string.IsNullOrEmpty(resJsonArr.WhsStatus)) { orderInfoNow = new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Slave).GetModel <DSMTMALL.DB.Model.M_OrderInfo>(" OrderID=@_OrderID ", new { _OrderID = orderInfo[i].OrderID });//为了严谨再次查数据库从数据库取这个实体 if (orderInfoNow != null) { if (resJsonArr.Status == "40")//对方已发货更新物流状态 { orderInfoNow.Logistical = string.IsNullOrEmpty(resJsonArr.Result.LogisticCompany) ? string.Empty : resJsonArr.Result.LogisticCompany; orderInfoNow.LogisticalNumber = string.IsNullOrEmpty(resJsonArr.Result.LogisiticNumber) ? string.Empty : resJsonArr.Result.LogisiticNumber; orderInfoNow.ShippingTime = string.IsNullOrEmpty(resJsonArr.Result.StockOutDate) ? nowTime : Convert.ToDateTime(resJsonArr.Result.StockOutDate); if (new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateModel <DSMTMALL.DB.Model.M_OrderInfo>(" OrderID=@_OrderID ", new { _OrderID = orderInfo[i].OrderID, Logistical = orderInfoNow.Logistical, LogisticalNumber = orderInfoNow.LogisticalNumber, ShippingTime = orderInfoNow.ShippingTime, ShippingStatus = 1, OrderStatus = 5, Version = orderInfoNow.Version + 1 }) )//更新数据,更新失败不做任何处理--如果成功则发送微信-发货成功 { WeChatAPI.SendMsg("商品发货提醒", "您的订单" + orderInfo[i].OrderSn + "已从仓库发出,请等待收货,物流单号为:" + orderInfoNow.LogisticalNumber, orderInfo[i].OpenID); } } else if (resJsonArr.Status == "10")//对方已取消发货 { new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateModel <DSMTMALL.DB.Model.M_OrderInfo>(" OrderID=@_OrderID ", new { _OrderID = orderInfo[i].OrderID, OrderStatus = 7, Postscript = "海淘取消订单发货:" + resJsonArr.WhsStatus, //异常状态描述 Version = orderInfoNow.Version + 1 }); //更新数据,更新失败不做任何处理 } else if ((resJsonArr.Status == "20" || resJsonArr.Status == "30") && !string.IsNullOrEmpty(resJsonArr.WhsStatus)) //对方订单待确认或已配送确认,并且订单异常状态描述不为空,代表有异常信息 { if (resJsonArr.WhsStatus != "未推送到海关系统" || nowTime > orderInfo[i].PayTime.AddDays(1)) //如果返回的错误信息不是 未推送到海关系统 或者 订单付款时间已经超过24小时 { new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateModel <DSMTMALL.DB.Model.M_OrderInfo>(" OrderID=@_OrderID ", new { _OrderID = orderInfo[i].OrderID, OrderStatus = 7, Postscript = "海淘返回的订单状态存在异常,异常原因:" + resJsonArr.WhsStatus, //异常状态描述 Version = orderInfoNow.Version + 1 }); //更新数据,更新失败不做任何处理 } } } }//海淘尚未推送订单给海关,暂不作任何处理 } else { FileHelper.logger.Warn(string.Format("{0}订单物流状态更新失败,失败原因:{1}", orderInfo[i].OrderSn, resWMSVal)); } } } catch (Exception exmsg) { FileHelper.logger.Warn(string.Format("{0}订单物流状态更新失败,失败原因:{1}", orderInfo[i].OrderSn, exmsg.Message)); } } } } }
/// <summary> /// 调用XF系统接口进行交易退款状态同步查询 /// </summary> public static void GetReBackPayAccStatusSync() { List <DSMTMALL.DB.Model.M_ReBackTrade> orderTradeList = new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Slave).GetModelList <DSMTMALL.DB.Model.M_ReBackTrade>(" ComfirmStatus=10 ORDER BY CreateTime ASC LIMIT 50 ", null); if (orderTradeList != null && orderTradeList.Count > 0) { DSMT_TAE_ServiceSoapClient taeCilent = new DSMT_TAE_ServiceSoapClient(); GetQueryTradeStatusEntity queryTradeStatusEntity = null; VerifyHelper verifyHelper = new VerifyHelper(); BackQueryTradeStatusEntity backQueryTradeStatusEntity = null; DateTime nowTime = DateTime.Now; string outOpenID = string.Empty; foreach (var item in orderTradeList) { queryTradeStatusEntity = new GetQueryTradeStatusEntity(); //初始化 backQueryTradeStatusEntity = null; if (!string.IsNullOrEmpty(item.TradeNo) && !string.IsNullOrEmpty(item.CpySysID) && item.CreateTime.AddMinutes(10) < nowTime) //判断流水号公司ID都存在的情况下调用XF接口,并且流水号的创建时间超时10分钟 { if (item.CreateTime.AddMinutes(360) > nowTime) //如果超过6个小时,XF系统还未同步完成,记录异常 { queryTradeStatusEntity.CpySysID = item.CpySysID; queryTradeStatusEntity.TradeNo = item.ReBackTradeNo; verifyHelper.EncryptPmtEntity(queryTradeStatusEntity);//加密加签 try { backQueryTradeStatusEntity = taeCilent.QueryTradeStatus(queryTradeStatusEntity); //调用XF接口 } catch (Exception e) //通讯异常 { ToolHelper.WriteTxt(logPathErr, DateTime.Now + "退款流水号:" + item.ReBackTradeNo + "与XF系统退款状态同步查询出错,错误信息:" + e.Message, false); continue; } if (verifyHelper.CheckPmtSign(ref backQueryTradeStatusEntity))//尝试解签,解签失败的话不执行任何代码 { if (backQueryTradeStatusEntity.TradeType == "1") { if (backQueryTradeStatusEntity.TradeStatus == "10" || backQueryTradeStatusEntity.TradeStatus == "20") //交易状态10-已完成20-已撤销(即失败)30-待同步40-交易信息不存在 { if (new DSMTMALL.DB.BLL.MY_Bll(DBEnum.Master).UpdateReBackPayAccByXFPaymentToComfirm(ToolHelper.ConventToDecimal(backQueryTradeStatusEntity.TradeMoney, 999), item.ReBackTradeSysID, backQueryTradeStatusEntity.TradeStatus, out outOpenID)) { WeChatAPI.SendMsg("退款资金到账通知", "您有一笔退款金额已通过原支付方式退还至您的账户,请注意查收", outOpenID); } } else if (backQueryTradeStatusEntity.TradeStatus == "40") { string resMsg = DateTime.Now + "退款流水号:" + item.ReBackTradeNo + "与XF系统退款状态同步查询出错,错误信息:XF系统该笔流水号信息不存在"; new DSMTMALL.DB.BLL.MB_Bll(DBEnum.Master).RecordErrInfoNote("同步程序查询XF系统退款状态发现异常", resMsg); new TryCatchErrHelper().HandlerReBackTradeError(item.ReBackTradeSysID); ToolHelper.WriteTxt(logPathErr, resMsg, false); }//30就不做任何处理 } } } else { new DSMTMALL.DB.BLL.MB_Bll(DBEnum.Master).RecordErrInfoNote("同步程序查询XF系统退款状态发现异常", "退款流水号:" + item.TradeNo + "与XF系统退款状态同步查询已过6个小时,XF系统仍未同步完成"); new TryCatchErrHelper().HandlerReBackTradeError(item.ReBackTradeSysID); } } } } }