/// <summary> /// 根据日志编号更新日志Note /// </summary> /// <param name="logInfo"></param> public void UpdateSOLogNoteBySysNo(SOLogInfo logInfo) { DataCommand command = DataCommandManager.GetDataCommand("SO_Update_SOLogNoteBySysNo"); command.SetParameterValue <SOLogInfo>(logInfo, true, false); command.ExecuteNonQuery(); }
public void InsertSOLog(SOLogInfo logInfo) { DataCommand command = DataCommandManager.GetDataCommand("SO_Insert_SOLog"); command.SetParameterValue <SOLogInfo>(logInfo, true, false); command.ExecuteNonQuery(); }
public void WriteSOLog(ECCentral.BizEntity.Common.BizLogType logType, int soSysNo, string note) { SOLogInfo logInfo = new SOLogInfo(); logInfo.SOSysNo = soSysNo; logInfo.Note = note; logInfo.OperationType = logType; WriteSOLog(logInfo); }
public void WriteSOLog(SOLogInfo logInfo) { try { if (logInfo == null) { return; } logInfo.IP = ServiceContext.Current.ClientIP; logInfo.LogTime = DateTime.Now; logInfo.UserSysNo = ServiceContext.Current.UserSysNo; LogDA.InsertSOLog(logInfo); } catch (Exception ex) { ExceptionHelper.HandleException(ex); } }
public static void WriteLog(SOInfo soInfo, BizLogType OperationType, string operationName) { SOLogInfo logInfo = new SOLogInfo { OptType = OperationType, OperationName = operationName, OptIP = string.Empty,//TODO:ServiceContext.Current.ClientIP, OptTime = DateTime.Now, SOSysNo = soInfo.SOSysNo, UserSysNo = 0,//ServiceContext.Current.UserSysNo, CompanyCode = soInfo.CompanyCode }; SOLogNote notInfo = new SOLogNote { ActionName = logInfo.OperationName, SOSysNo = soInfo.SOSysNo, PayType = soInfo.Payment.PayTypeID, RecvSysNo = soInfo.ReceiveAreaSysNo, RecvAddress = soInfo.ReceiveAddress, CustomerSysNo = soInfo.CustomerSysNo, ShipType = soInfo.ShipType.ShipTypeSysNo, SOItems = (from item in soInfo.SOItemList select new SOLogItemEntity { ProductSysNo = 1, Qty = 1, Price = 0 }).ToList() }; logInfo.Note = SerializationUtility.XmlSerialize(notInfo); logInfo.OptIP = string.Empty; //TODO: ServiceContext.Current.ClientIP; logInfo.OptTime = DateTime.Now; logInfo.UserSysNo = 1; // ServiceContext.Current.UserSysNo; DataCommand command = DataCommandManager.GetDataCommand("SO_Insert_SOLog"); command.SetParameterValue <SOLogInfo>(logInfo, true, false); command.ExecuteNonQuery(); }
public void WriteSOLog(ECCentral.BizEntity.Common.BizLogType logType, string operationName, SOInfo soInfo) { try { SOLogInfo logInfo = new SOLogInfo { OperationType = logType, OperationName = operationName, IP = ServiceContext.Current.ClientIP, LogTime = DateTime.Now, SOSysNo = soInfo.SysNo.Value, UserSysNo = ServiceContext.Current.UserSysNo, CompanyCode = soInfo.CompanyCode }; SOLogNote notInfo = new SOLogNote { ActionName = logInfo.OperationName, SOSysNo = soInfo.SysNo, PayType = soInfo.BaseInfo.PayTypeSysNo, RecvSysNo = soInfo.ReceiverInfo.AreaSysNo, RecvAddress = soInfo.ReceiverInfo.Address, CustomerSysNo = soInfo.BaseInfo.CustomerSysNo, ShipType = soInfo.ShippingInfo.ShipTypeSysNo, SOItems = (from item in soInfo.Items select new SOLogItemEntity { ProductSysNo = 1, Qty = 1, Price = 0 }).ToList() }; logInfo.Note = ECCentral.Service.Utility.SerializationUtility.XmlSerialize(notInfo); WriteSOLog(logInfo); } catch (Exception ex) { ExceptionHelper.HandleException(ex); } }
/// <summary> /// 异步查询完成处理查询结果 /// </summary> /// <param name="ar"></param> private void QueryCompleted(IAsyncResult ar) { HttpWebRequest request = null; HttpWebResponse response = null; Stream streamResponse = null; StreamReader streamRead = null; string responseXml = null; try { request = (HttpWebRequest)ar.AsyncState; response = (HttpWebResponse)request.EndGetResponse(ar); streamResponse = response.GetResponseStream(); streamRead = new StreamReader(streamResponse, Encoding.UTF8); responseXml = streamRead.ReadToEnd(); } catch (Exception ex) { // } finally { if (streamRead != null) { streamRead.Close(); } if (streamResponse != null) { streamResponse.Close(); } } //check sign YTBatchQueryResponse result = AnalysisResponseXml(responseXml); if (result != null && result.orders != null && result.orders.Count > 0) { foreach (YTOrder item in result.orders) { //根据运单号获取订单号 int soSysNo = _SODA.GetSOSysNoByTrackingNumber(item.mailNo); if (soSysNo <= 0) { continue; } if (item.orderStatus == YTOrderStatus.UNACCEPT || item.orderStatus == YTOrderStatus.NOT_SEND || item.orderStatus == YTOrderStatus.FAILED) { //物流派件不成功,订单更新为物流派件不成功 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.ShippingReject, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流派件不成功" }; _SODA.UpdateSOStatus(soStatusChangeInfo); } if (item.orderStatus == YTOrderStatus.SIGNED) { //已收货,订单更新为已完成 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.Complete, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流已完成" }; _SODA.UpdateSOStatus(soStatusChangeInfo); //已收货,更新SO_CheckShipping表的LastChangeStatusDate字段,以便同步至WMS _SODA.UpdateSOCheckShippingLastChangeStatusDate(soSysNo); //已收货,检查并赠送优惠券 var soInfo = ObjectFactory <SOProcessor> .Instance.GetSOBySOSysNo(soSysNo); ObjectFactory <IMKTBizInteract> .Instance.CheckAndGivingPromotionCodeForSO(soInfo); } if (item.steps != null && item.steps.Count > 0) { #region 更新SOLog var routeList = EntityConverter <YTStep, SOLogisticsInfo> .Convert(item.steps, (s, t) => { t.AcceptAddress = s.acceptAddress; t.AcceptTime = s.acceptTime; t.Name = s.name; t.Status = s.status; t.Type = ExpressType.YT; }); string routeLogMsg = SerializationUtility.XmlSerialize(routeList); var logList = _SOLogDA.GetSOLogBySOSysNoAndLogType(soSysNo, BizLogType.Sale_SO_ShippingInfo); bool bIsCreate = logList == null || logList.Count == 0; if (bIsCreate) { //创建 SOLogInfo soLog = new SOLogInfo() { SOSysNo = soSysNo, IP = "::1", OperationType = BizLogType.Sale_SO_ShippingInfo, Note = routeLogMsg, UserSysNo = 0, CompanyCode = "8601" }; _SOLogDA.InsertSOLog(soLog); } else { //更新 SOLogInfo soLog = logList[0]; soLog.Note = routeLogMsg; _SOLogDA.UpdateSOLogNoteBySysNo(soLog); } #endregion } } } }
/// <summary> /// 申报订单 /// </summary> /// <param name="entity"></param> /// <returns></returns> public bool DeclareSO(WaitDeclareSO entity) { bool result = false; #region 0.先进行支付申报,申报成功再执行订单申报 if (!this.DeclarePayment(entity)) { return(result); } #endregion #region 1.单笔值计算 DeclareOrderInfo declareOrderInfo = SODA.DeclareGetOrderInfoBySOSysNo(entity.SOSysNo); VendorCustomsInfo customsInfo = SODA.LoadVendorCustomsInfo(entity.SOSysNo); PayType payType = ObjectFactory <ICommonBizInteract> .Instance.GetPayTypeByID(declareOrderInfo.PayTypeID); if (declareOrderInfo == null || declareOrderInfo.SOItemList == null || declareOrderInfo.SOItemList.Count == 0) { return(result); } decimal allCargoTotalPrice = 0m; string cargoDescript = ""; decimal totalTariffAmount = 0m; decimal otherPrice = Math.Abs(declareOrderInfo.Amount.PrepayAmt) * -1; List <EasiPayRequestDeclareOrderCargoes> cargoesList = new List <EasiPayRequestDeclareOrderCargoes>(); foreach (var item in declareOrderInfo.SOItemList) { cargoDescript += (string.IsNullOrEmpty(cargoDescript) ? "" : ";") + (item.ProductName.Replace("#", "").Replace("%", "").Replace("&", "").Replace("+", "") + "描述"); totalTariffAmount += item.TariffAmt * item.Quantity; item.ProductName = item.ProductName.Replace("#", "").Replace("%", "").Replace("&", "").Replace("+", ""); //折扣除不尽时,把多余的作为OtherPrice上送 decimal currOtherPrice = Math.Abs(item.DiscountAmt) % item.Quantity; otherPrice += currOtherPrice * -1; //Item上是商品本身的价格,需要排除折扣 decimal unitPrice = item.OriginalPrice - ((Math.Abs(item.DiscountAmt) - currOtherPrice) / item.Quantity); unitPrice = decimal.Parse(unitPrice.ToString("F2")); otherPrice += Math.Abs(item.PromotionDiscount * item.Quantity) * -1; allCargoTotalPrice += unitPrice * item.Quantity; cargoesList.Add(new EasiPayRequestDeclareOrderCargoes() { cargoName = item.ProductName, cargoCode = item.EntryCode, cargoNum = item.Quantity, cargoUnitPrice = decimal.Parse(unitPrice.ToString("F2")), cargoTotalPrice = decimal.Parse((unitPrice * item.Quantity).ToString("F2")), cargoTotalTax = decimal.Parse((item.TariffAmt * item.Quantity).ToString("F2")) }); } //积分支付作为其他金额报关 otherPrice += Math.Abs(declareOrderInfo.Amount.PointPay * 1.00m / 100.00m) * -1; #endregion #region 2.构造请求业务数据 int serialNumber = SODA.CreateSODeclareRecordsSysNo(); EasiPayRequestDeclareOrder requestInfo = new EasiPayRequestDeclareOrder(); requestInfo.version = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigVersion"); requestInfo.commitTime = DateTime.Now.ToString("yyyyMMddHHmmss"); requestInfo.coName = customsInfo.CBTMerchantName; requestInfo.coCode = customsInfo.CBTSRC_NCode; requestInfo.MerchantSecretKey = customsInfo.CBTSODeclareSecretKey; requestInfo.serialNumber = serialNumber.ToString(); requestInfo.merchantOrderId = entity.SOSysNo.ToString(); requestInfo.assBillNo = entity.TrackingNumber; requestInfo.orderCommitTime = declareOrderInfo.OrderDate.ToString("yyyyMMddHHmmss"); //发件信息,从Appsetting配置中取(改为从仓库表中读取 by cavin 2014-12-02) //仓库编号 //string warehouseNumber = declareOrderInfo.SOItemList[0].WarehouseNumber.Trim(); requestInfo.senderName = declareOrderInfo.senderName; //AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderName", warehouseNumber)); requestInfo.senderTel = declareOrderInfo.senderTel; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderTel", warehouseNumber)); requestInfo.senderCompanyName = declareOrderInfo.senderCompanyName; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderCompanyName", warehouseNumber)); requestInfo.senderAddr = declareOrderInfo.senderAddr; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderAddr", warehouseNumber)); requestInfo.senderZip = declareOrderInfo.senderZip; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderZip", warehouseNumber)); requestInfo.senderCity = declareOrderInfo.senderCity; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderCity", warehouseNumber)); requestInfo.senderProvince = declareOrderInfo.senderProvince; // AppSettingManager.GetSetting("SO", string.Format("EasiPayDeclareOrderConfig_Sender_{0}_SenderProvince", warehouseNumber)); //发件地国家,需要适配三位国家代码 requestInfo.senderCountry = declareOrderInfo.SOItemList.FirstOrDefault().CountryCode; requestInfo.cargoDescript = string.IsNullOrEmpty(cargoDescript) ? "无商品信息简述" : cargoDescript; requestInfo.allCargoTotalPrice = decimal.Parse(allCargoTotalPrice.ToString("F2")); requestInfo.allCargoTotalTax = decimal.Parse(totalTariffAmount.ToString("F2")); requestInfo.expressPrice = decimal.Parse(declareOrderInfo.Amount.ShipPrice.ToString("F2")); requestInfo.otherPrice = decimal.Parse(otherPrice.ToString("F2")); requestInfo.recPerson = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveName) ? "无" : declareOrderInfo.ReceiveName; requestInfo.recPhone = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveCellPhone) ? "无" : declareOrderInfo.ReceiveCellPhone; requestInfo.recCountry = "中国"; requestInfo.recProvince = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveProvinceName) ? "无" : declareOrderInfo.ReceiveProvinceName; requestInfo.recCity = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveCityName) ? "无" : declareOrderInfo.ReceiveCityName; requestInfo.recAddress = string.IsNullOrWhiteSpace(declareOrderInfo.ReceiveAddress) ? "无" : declareOrderInfo.ReceiveAddress; //为空 requestInfo.recZip = ""; requestInfo.serverType = declareOrderInfo.StockType == BizEntity.Common.TradeType.FTA ? "S02" : "S01"; requestInfo.custCode = declareOrderInfo.CustomsCode; requestInfo.operationCode = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigOperationCode"); //为空 requestInfo.spt = ""; requestInfo.cargoes = cargoesList; requestInfo.payMethod = AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigPayMethod"); requestInfo.payMerchantName = payType.CBTMerchantName; requestInfo.payMerchantCode = payType.CBTMerchantCode; //支付总金额=全部商品合计总价+税费+物流运费+其他金额(其他金额为负数)-余额支付金额 requestInfo.payAmount = decimal.Parse((allCargoTotalPrice + totalTariffAmount + declareOrderInfo.Amount.ShipPrice + otherPrice).ToString("F2")); requestInfo.payCUR = customsInfo.PayCurrencyCode; requestInfo.payID = string.IsNullOrWhiteSpace(declareOrderInfo.PayInfo.SerialNumber) ? "" : declareOrderInfo.PayInfo.SerialNumber.Substring(1).Trim();//因为支付有个前缀P requestInfo.payTime = declareOrderInfo.PayInfo.PayProcessTime.Trim(); #endregion #region 3.处理请求,解析请求结果 SOLogInfo soLogInfo = new SOLogInfo() { UserSysNo = 3025, IP = "Delcare SO Job", OperationType = ECCentral.BizEntity.Common.BizLogType.Sale_SO_Update, SOSysNo = entity.SOSysNo, Note = "", CompanyCode = "8601" }; string reqContent = BuildPostReqData(requestInfo, requestInfo.MerchantSecretKey); string strRequestResult = HttpPostRequest(AppSettingManager.GetSetting("SO", "EasiPayDeclareOrderConfigRequestUrl"), reqContent); strRequestResult = CommonUtility.HttpUrlDecode(strRequestResult); EasiPayRequestResult requestResult = SerializationUtility.JsonDeserialize <EasiPayRequestResult>(strRequestResult); if (requestResult.status.ToLower().Equals("success")) { result = true; soLogInfo.Note = "订单报关申报提交成功"; } else { soLogInfo.Note = string.Format("订单报关申报提交失败:{0}", requestResult.errorMsg); } ObjectFactory <ISOLogDA> .Instance.InsertSOLog(soLogInfo); #region 写系统Log ApplicationEventLog log = new ApplicationEventLog() { Source = "JOB SODeclare", ReferenceIP = ServiceContext.Current.ClientIP, EventType = 8, HostName = "JOB", EventTitle = "SODeclare Request", EventMessage = reqContent, LanguageCode = "zh-CN", CompanyCode = "8601", StoreCompanyCode = "8601", EventDetail = soLogInfo.Note, }; ObjectFactory <ICommonBizInteract> .Instance.CreateApplicationEventLog(log); #endregion #endregion #region 4.提交申报申请成功,创建申报记录 if (result) { SODeclareRecords declareRecord = new SODeclareRecords() { SysNo = serialNumber, SOSysNo = entity.SOSysNo, TrackingNumber = entity.TrackingNumber }; SODA.CreateSODeclareRecords(declareRecord); } #endregion return(result); }
/// <summary> /// 异步查询完成处理查询结果 /// </summary> /// <param name="ar"></param> private void QueryCompleted(string responseStr, string number) { #region old function //KD100QueryResponse result = AnalysisResponseXml(responseStr); //if (result != null) //{ // //根据运单号获取订单号 // int soSysNo = _SODA.GetSOSysNoByTrackingNumber(result.nu); // if (soSysNo <= 0) // return; // if (result.state == 2 || result.state == 4 || result.state == 6) // { // //物流派件不成功,订单更新为物流派件不成功 // SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() // { // SOSysNo = soSysNo, // OperatorType = SOOperatorType.System, // OperatorSysNo = 0, // Status = SOStatus.ShippingReject, // ChangeTime = DateTime.Now, // IsSendMailToCustomer = false, // Note = "物流派件不成功" // }; // _SODA.UpdateSOStatus(soStatusChangeInfo); // } // if (result.state == 3) // { // //已收货,订单更新为已完成 // SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() // { // SOSysNo = soSysNo, // OperatorType = SOOperatorType.System, // OperatorSysNo = 0, // Status = SOStatus.Complete, // ChangeTime = DateTime.Now, // IsSendMailToCustomer = false, // Note = "物流已完成" // }; // _SODA.UpdateSOStatus(soStatusChangeInfo); // //已收货,更新SO_CheckShipping表的LastChangeStatusDate字段,以便同步至WMS // _SODA.UpdateSOCheckShippingLastChangeStatusDate(soSysNo); // //已收货,检查并赠送优惠券 // var soInfo = ObjectFactory<SOProcessor>.Instance.GetSOBySOSysNo(soSysNo); // ObjectFactory<IMKTBizInteract>.Instance.CheckAndGivingPromotionCodeForSO(soInfo); // } // #region 更新SOLog // var routeList = ConverterSOLog(result.dataList); // string routeLogMsg = SerializationUtility.XmlSerialize(routeList); // var logList = _SOLogDA.GetSOLogBySOSysNoAndLogType(soSysNo, BizLogType.Sale_SO_ShippingInfo); // bool bIsCreate = logList == null || logList.Count == 0; // if (bIsCreate) // { // //创建 // SOLogInfo soLog = new SOLogInfo() // { // SOSysNo = soSysNo, // IP = "::1", // OperationType = BizLogType.Sale_SO_ShippingInfo, // Note = routeLogMsg, // UserSysNo = 0, // CompanyCode = "8601" // }; // _SOLogDA.InsertSOLog(soLog); // } // else // { // //更新 // SOLogInfo soLog = logList[0]; // soLog.Note = routeLogMsg; // _SOLogDA.UpdateSOLogNoteBySysNo(soLog); // } // #endregion //} #endregion if (!string.IsNullOrEmpty(responseStr)) { //根据运单号获取订单号 int soSysNo = _SODA.GetSOSysNoByTrackingNumber(number); if (soSysNo <= 0) { return; } var logList = _SOLogDA.GetSOLogBySOSysNoAndLogType(soSysNo, BizLogType.Sale_SO_ShippingInfo); bool bIsCreate = logList == null || logList.Count == 0; if (bIsCreate) { //创建 SOLogInfo soLog = new SOLogInfo() { SOSysNo = soSysNo, IP = "::1", OperationType = BizLogType.Sale_SO_ShippingInfo, Note = responseStr, UserSysNo = 0, CompanyCode = "8601" }; _SOLogDA.InsertSOLog(soLog); } else { //更新 SOLogInfo soLog = logList[0]; soLog.Note = responseStr; _SOLogDA.UpdateSOLogNoteBySysNo(soLog); } } }
/// <summary> /// 异步查询完成处理查询结果 /// </summary> /// <param name="ar"></param> private void QueryCompleted(IAsyncResult ar) { SFExpressQueryDelegate _SFExpressQuery = ar.AsyncState as SFExpressQueryDelegate; string responseXml = _SFExpressQuery.EndInvoke(ar); List <SFQueryResponseRouteResponse> result = AnalysisResponseXml(responseXml); if (result != null) { foreach (SFQueryResponseRouteResponse item in result) { if (item.RouteList != null) { //根据运单号获取订单号 int soSysNo = _SODA.GetSOSysNoByTrackingNumber(item.TrackingNumber); if (soSysNo <= 0) { continue; } if (item.RouteList.Exists(m => m.Code.Equals("70"))) { //物流派件不成功,订单更新为物流派件不成功 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.ShippingReject, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流派件不成功" }; _SODA.UpdateSOStatus(soStatusChangeInfo); } if (item.RouteList.Exists(m => m.Code.Equals("80"))) { //已收货,订单更新为已完成 SOStatusChangeInfo soStatusChangeInfo = new SOStatusChangeInfo() { SOSysNo = soSysNo, OperatorType = SOOperatorType.System, OperatorSysNo = 0, Status = SOStatus.Complete, ChangeTime = DateTime.Now, IsSendMailToCustomer = false, Note = "物流已完成" }; _SODA.UpdateSOStatus(soStatusChangeInfo); //已收货,更新SO_CheckShipping表的LastChangeStatusDate字段,以便同步至WMS _SODA.UpdateSOCheckShippingLastChangeStatusDate(soSysNo); //已收货,检查并赠送优惠券 var soInfo = ObjectFactory <SOProcessor> .Instance.GetSOBySOSysNo(soSysNo); ObjectFactory <IMKTBizInteract> .Instance.CheckAndGivingPromotionCodeForSO(soInfo); } #region 更新SOLog var routeList = EntityConverter <SFQueryResponseRoute, SOLogisticsInfo> .Convert(item.RouteList, (s, t) => { t.Type = ExpressType.SF; }); string routeLogMsg = SerializationUtility.XmlSerialize(routeList); var logList = _SOLogDA.GetSOLogBySOSysNoAndLogType(soSysNo, BizLogType.Sale_SO_ShippingInfo); bool bIsCreate = logList == null || logList.Count == 0; if (bIsCreate) { //创建 SOLogInfo soLog = new SOLogInfo() { SOSysNo = soSysNo, IP = "::1", OperationType = BizLogType.Sale_SO_ShippingInfo, Note = routeLogMsg, UserSysNo = 0, CompanyCode = "8601" }; _SOLogDA.InsertSOLog(soLog); } else { //更新 SOLogInfo soLog = logList[0]; soLog.Note = routeLogMsg; _SOLogDA.UpdateSOLogNoteBySysNo(soLog); } #endregion } } } }