コード例 #1
0
        /// <summary>
        /// 第三方电商售后服务退货结果回调
        /// </summary>
        /// <param name="resultJsonStr"></param>
        /// <returns></returns>
        public static ThirdResponse RefundResultCallback(string resultJsonStr)
        {
            LogHelper.Debug("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调,Input:" + resultJsonStr);
            if (string.IsNullOrEmpty(resultJsonStr))
            {
                return new ThirdResponse {
                           Code = 20500, Msg = "缺少参数serviceRefundResult"
                }
            }
            ;
            var result = new ThirdResponse {
                Code = 200, Msg = "ok"
            };

            try
            {
                var serviceResult = JsonConvert.DeserializeObject <ThirdServiceRefundResult>(resultJsonStr);

                if (serviceResult == null)
                {
                    return new ThirdResponse {
                               Code = 20501, Msg = "非法参数serviceRejectResult"
                    }
                }
                ;
                Guid     orderId, serviceId;
                DateTime auditTime;
                Guid.TryParse(serviceResult.OrderId, out orderId);
                Guid.TryParse(serviceResult.ServiceId, out serviceId);
                DateTime.TryParse(serviceResult.AuditTime, out auditTime);
                if (orderId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20502, Msg = "非法参数OrderId"
                    }
                }
                ;
                if (serviceId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20503, Msg = "非法参数ServiceId"
                    }
                }
                ;
                if (string.IsNullOrEmpty(serviceResult.SkuId))
                {
                    return new ThirdResponse {
                               Code = 20504, Msg = "非法参数SkuId"
                    }
                }
                ;
                if (auditTime == DateTime.MinValue)
                {
                    return new ThirdResponse {
                               Code = 20505, Msg = "非法参数AuditTime"
                    }
                }
                ;
                if (serviceResult.RefundStatus < 0 || serviceResult.RefundStatus > 1)
                {
                    return new ThirdResponse {
                               Code = 20506, Msg = "非法参数RefundStatus"
                    }
                }
                ;
                if (serviceResult.RefundStatus == 1 && string.IsNullOrEmpty(serviceResult.RejectReason))
                {
                    return new ThirdResponse {
                               Code = 20507, Msg = "缺少参数RejectReason"
                    }
                }
                ;
                #region 判断是否第三方电商售后服务单及获取售后服务单信息
                var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderId == orderId &&
                                                                        o.OrderRefundAfterSalesId == serviceId && o.SkuId == serviceResult.SkuId);
                if (service == null)
                {
                    return new ThirdResponse {
                               Code = 20508, Msg = "未找到此服务单"
                    }
                }
                ;
                var orderRefund = OrderRefundAfterSales.ObjectSet().FirstOrDefault(p => p.Id == service.OrderRefundAfterSalesId);
                if (service == null)
                {
                    return new ThirdResponse {
                               Code = 20509, Msg = "未找到此服务单"
                    }
                }
                ;
                if (service.AgreeRefundTime.HasValue || service.RejectRefundTime.HasValue)
                {
                    return(result);
                }
                #endregion
                #region 退款处理
                var errorMessage = string.Empty;
                if (serviceResult.RefundStatus == 0)
                {
                    var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderRefund.OrderId, orderRefund.OrderItemId ?? Guid.Empty);
                    if (refundResult.ResultCode == 0)
                    {
                        service.AgreeRefundTime = auditTime;
                        service.StateName       = "允许退货";
                        service.StateDesc       = "售后服务退货结果回调:允许退货";
                    }
                    else
                    {
                        errorMessage = refundResult.Message;
                        result       = new ThirdResponse {
                            Code = 20510, Msg = "内部异常"
                        };
                    }
                }
                else
                {
                    var refundResult = OrderHelper.RejectOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty, serviceResult.RejectReason);
                    if (refundResult.ResultCode == 0)
                    {
                        service.RejectRefundTime = auditTime;
                        service.StateName        = "拒绝退货";
                        service.StateDesc        = "售后服务退货结果回调:拒绝退货," + serviceResult.RejectReason;
                    }
                    else
                    {
                        errorMessage = refundResult.Message;
                        result       = new ThirdResponse {
                            Code = 20511, Msg = "内部异常"
                        };
                    }
                }
                #endregion
                #region 保存ThirdECOrderJournal
                var journal = new ThirdECServiceJournal
                {
                    Id                      = Guid.NewGuid(),
                    OrderId                 = service.OrderId,
                    OrderCode               = service.OrderCode,
                    OrderItemId             = service.OrderItemId,
                    OrderRefundAfterSalesId = service.OrderRefundAfterSalesId,
                    Name                    = serviceResult.RefundStatus == 0 ? "允许退货" : "拒绝退货",
                    Details                 = string.IsNullOrEmpty(errorMessage) ? service.StateDesc : errorMessage,
                    Json                    = resultJsonStr,
                    EntityState             = EntityState.Added
                };
                ContextFactory.CurrentThreadContext.SaveObject(journal);
                #endregion
                int count = ContextFactory.CurrentThreadContext.SaveChanges();
                if (count == 0)
                {
                    LogHelper.Error(string.Format("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调数据保存失败,入参:{0}", resultJsonStr));
                    result = new ThirdResponse {
                        Code = 20512, Msg = "内部异常"
                    };
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("ThirdECommerceServiceHelper.RefundResultCallback第三方电商售后服务退货结果回调异常,Input:" + resultJsonStr, ex);
                result = new ThirdResponse {
                    Code = 20513, Msg = "内部异常"
                };
            }
            return(result);
        }

        #endregion
    }
コード例 #2
0
        /// <summary>
        /// 第三方电商售后服务超过X天未收到退货物流回调
        /// </summary>
        /// <param name="resultJsonStr"></param>
        /// <returns></returns>
        public static ThirdResponse NotReceiveMailCallback(string resultJsonStr)
        {
            LogHelper.Debug("ThirdECommerceServiceHelper.NotReceiveMailCallback第三方电商售后服务超过X天未收到退货物流回调,Input:" + resultJsonStr);
            if (string.IsNullOrEmpty(resultJsonStr))
            {
                return new ThirdResponse {
                           Code = 20400, Msg = "缺少参数mailNotReceiveResult"
                }
            }
            ;
            var result = new ThirdResponse {
                Code = 200, Msg = "ok"
            };

            try
            {
                var mailResult = JsonConvert.DeserializeObject <ThirdMailNotReceiveResult>(resultJsonStr);

                if (mailResult == null)
                {
                    return new ThirdResponse {
                               Code = 20401, Msg = "非法参数mailNotReceiveResult"
                    }
                }
                ;
                Guid     orderId, serviceId;
                DateTime notReceiveTime;
                Guid.TryParse(mailResult.OrderId, out orderId);
                Guid.TryParse(mailResult.ServiceId, out serviceId);
                DateTime.TryParse(mailResult.NotifyTime, out notReceiveTime);
                if (orderId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20402, Msg = "非法参数OrderId"
                    }
                }
                ;
                if (orderId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20403, Msg = "非法参数ServiceId"
                    }
                }
                ;
                if (notReceiveTime == DateTime.MinValue)
                {
                    return new ThirdResponse {
                               Code = 20404, Msg = "非法参数ReceiveTime"
                    }
                }
                ;
                if (mailResult.Days <= 0)
                {
                    return new ThirdResponse {
                               Code = 20405, Msg = "非法参数Days"
                    }
                }
                ;
                #region 判断是否第三方电商售后服务单及获取售后服务单信息
                var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderId == orderId && o.OrderRefundAfterSalesId == serviceId);
                if (service == null)
                {
                    return new ThirdResponse {
                               Code = 20406, Msg = "未找到此服务单"
                    }
                }
                ;
                if (service.MailNotReceiveTime.HasValue)
                {
                    return(result);
                }
                service.MailNotReceiveTime = notReceiveTime;
                service.StateName          = "超过" + mailResult.Days + "天未收到退货物流";
                service.StateDesc          = service.StateDesc;
                #endregion
                #region 保存ThirdECOrderJournal
                var journal = new ThirdECServiceJournal
                {
                    Id                      = Guid.NewGuid(),
                    OrderId                 = service.OrderId,
                    OrderCode               = service.OrderCode,
                    OrderItemId             = service.OrderItemId,
                    OrderRefundAfterSalesId = service.OrderRefundAfterSalesId,
                    Name                    = service.StateDesc,
                    Details                 = service.StateDesc,
                    Json                    = resultJsonStr,
                    EntityState             = EntityState.Added
                };
                ContextFactory.CurrentThreadContext.SaveObject(journal);
                #endregion
                int count = ContextFactory.CurrentThreadContext.SaveChanges();
                if (count == 0)
                {
                    LogHelper.Error(string.Format("ThirdECommerceServiceHelper.NotReceiveMailCallback第三方电商售后服务超过X天未收到退货物流回调数据保存失败,入参:{0}", resultJsonStr));
                    result = new ThirdResponse {
                        Code = 20207, Msg = "内部异常"
                    };
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("ThirdECommerceServiceHelper.NotReceiveMailCallback第三方电商售后服务超过X天未收到退货物流回调异常,Input:" + resultJsonStr, ex);
                result = new ThirdResponse {
                    Code = 20208, Msg = "内部异常"
                };
            }
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// 第三方电商发起售后服务申请
        /// </summary>
        /// <returns></returns>
        public static ResultDTO CreateService(CommodityOrder order, OrderItem orderItem, OrderRefundAfterSales refund)
        {
            string param = string.Format("orderId={0}&refundId={1}", order.Id, refund.Id);

            LogHelper.Debug(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请,入参:{0}", param));
            var result = new ResultDTO {
                Message = "操作失败,请稍后重试", ResultCode = -1
            };

            try
            {
                #region 判断是否第三方电商订单及获取订单信息
                var orderSku = ThirdECOrderPackageSku.ObjectSet().FirstOrDefault(o => o.OrderId == order.Id && o.OrderItemId == orderItem.Id);
                if (orderSku == null)
                {
                    return(result);
                }
                var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(order.AppId);
                if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) ||
                    string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) ||
                    string.IsNullOrEmpty(thirdECommerce.ServiceCreateUrl))
                {
                    return(result);
                }
                if (ThirdECService.ObjectSet().Any(p => p.OrderRefundAfterSalesId == refund.Id))
                {
                    return(result);
                }
                #endregion
                #region 调用第三方发起售后服务申请接口
                var jsonStr  = string.Empty;
                var response = ThirdECommerceSV.CreateService(new ThirdApiInfo
                {
                    Apikey   = thirdECommerce.OpenApiKey,
                    CallerId = thirdECommerce.OpenApiCallerId,
                    ApiUrl   = thirdECommerce.ServiceCreateUrl
                }, new ThirdServiceCreate
                {
                    ServiceId     = refund.Id.ToString().ToLower(),
                    OrderId       = order.Id.ToString().ToLower(),
                    CustomerName  = order.ReceiptUserName,
                    CustomerPhone = order.ReceiptPhone,
                    SkuId         = orderSku.SkuId,
                    Number        = orderItem.Number,
                    RefundReason  = refund.RefundReason,
                    RefundDesc    = refund.RefundDesc,
                    RefundImgs    = refund.OrderRefundImgs
                }, ref jsonStr);
                #endregion
                var isSuccess = response.Successed && response.Result != null;
                #region 保存ThirdECService
                if (isSuccess)
                {
                    var stateName = string.Empty;
                    var stateDesc = string.Empty;
                    if (response.Result.ServiceStatus == 0)
                    {
                        stateName = "不支持售后";
                        result    = new ResultDTO {
                            Message = response.Result.RejectReason, ResultCode = 1
                        };
                    }
                    else if (response.Result.ServiceStatus == 1)
                    {
                        stateName = "待审核";
                        result    = new ResultDTO {
                            isSuccess = true, Message = "请等待审核", ResultCode = 2
                        };
                    }
                    stateDesc = response.Result.RejectReason;
                    var service = new ThirdECService
                    {
                        Id                      = Guid.NewGuid(),
                        OrderId                 = orderSku.OrderId,
                        OrderCode               = orderSku.OrderCode,
                        OrderItemId             = orderSku.OrderItemId,
                        OrderRefundAfterSalesId = refund.Id,
                        SubId                   = order.SubId,
                        SkuId                   = orderSku.SkuId,
                        Number                  = orderItem.Number,
                        StateName               = stateName,
                        StateDesc               = stateDesc,
                        EntityState             = EntityState.Added
                    };
                    ContextFactory.CurrentThreadContext.SaveObject(service);
                }
                else
                {
                    ContextFactory.ReleaseContextSession();
                }
                #endregion
                #region 保存ThirdECServiceJournal
                var journal = new ThirdECServiceJournal
                {
                    Id                      = Guid.NewGuid(),
                    OrderId                 = orderSku.OrderId,
                    OrderCode               = orderSku.OrderCode,
                    OrderItemId             = orderSku.OrderItemId,
                    OrderRefundAfterSalesId = refund.Id,
                    Name                    = "发起售后服务申请",
                    Details                 = response.Msg,
                    Json                    = jsonStr,
                    EntityState             = EntityState.Added
                };
                ContextFactory.CurrentThreadContext.SaveObject(journal);
                #endregion
                if (!isSuccess) //失败则只保存日志
                {
                    int count = ContextFactory.CurrentThreadContext.SaveChanges();
                    if (count == 0)
                    {
                        LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请数据保存失败,入参:{0}", param));
                    }
                }
                return(result);
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商发起售后服务申请异常,入参:{0}", param), ex);
                return(result);
            }
        }
コード例 #4
0
        /// <summary>
        /// 第三方电商允许售后结果回调
        /// </summary>
        /// <param name="resultJsonStr"></param>
        public static ThirdResponse AgreeServiceCallback(string resultJsonStr)
        {
            LogHelper.Debug("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调,Input:" + resultJsonStr);
            if (string.IsNullOrEmpty(resultJsonStr))
            {
                return new ThirdResponse {
                           Code = 20100, Msg = "缺少参数serviceAgreeResult"
                }
            }
            ;
            var result = new ThirdResponse {
                Code = 200, Msg = "ok"
            };

            try
            {
                var serviceResult = JsonConvert.DeserializeObject <ThirdServiceAgreeResult>(resultJsonStr);

                if (serviceResult == null)
                {
                    return new ThirdResponse {
                               Code = 20101, Msg = "非法参数serviceAgreeResult"
                    }
                }
                ;
                Guid     orderId, serviceId;
                DateTime agreeTime;
                Guid.TryParse(serviceResult.OrderId, out orderId);
                Guid.TryParse(serviceResult.ServiceId, out serviceId);
                DateTime.TryParse(serviceResult.AgreeTime, out agreeTime);
                if (orderId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20102, Msg = "非法参数OrderId"
                    }
                }
                ;
                if (serviceId == Guid.Empty)
                {
                    return new ThirdResponse {
                               Code = 20103, Msg = "非法参数ServiceId"
                    }
                }
                ;
                if (agreeTime == DateTime.MinValue)
                {
                    return new ThirdResponse {
                               Code = 20104, Msg = "非法参数AgreeTime"
                    }
                }
                ;
                if (serviceResult.Address == null)
                {
                    return new ThirdResponse {
                               Code = 20105, Msg = "非法参数Address"
                    }
                }
                ;
                if (string.IsNullOrEmpty(serviceResult.Address.Name))
                {
                    return new ThirdResponse {
                               Code = 20106, Msg = "缺少参数Address.Name"
                    }
                }
                ;
                if (string.IsNullOrEmpty(serviceResult.Address.Phone))
                {
                    return new ThirdResponse {
                               Code = 20107, Msg = "缺少参数Address.Phone"
                    }
                }
                ;
                //if (string.IsNullOrEmpty(serviceResult.Address.ProvinceName)) return new ThirdResponse { Code = 20108, Msg = "缺少参数Address.ProvinceName" };
                //if (string.IsNullOrEmpty(serviceResult.Address.CityName)) return new ThirdResponse { Code = 20109, Msg = "缺少参数Address.CityName" };
                //if (string.IsNullOrEmpty(serviceResult.Address.CountyName)) return new ThirdResponse { Code = 20110, Msg = "缺少参数Address.CountyName" };
                //if (string.IsNullOrEmpty(serviceResult.Address.TownName)) return new ThirdResponse { Code = 20111, Msg = "缺少参数Address.TownName" };
                //if (string.IsNullOrEmpty(serviceResult.Address.AddressDetail)) return new ThirdResponse { Code = 20112, Msg = "缺少参数Address.AddressDetail" };
                if (string.IsNullOrEmpty(serviceResult.Address.FullAddress))
                {
                    return new ThirdResponse {
                               Code = 20113, Msg = "缺少参数Address.FullAddress"
                    }
                }
                ;
                #region 判断是否第三方电商售后服务单及获取售后服务单信息
                var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderId == orderId && o.OrderRefundAfterSalesId == serviceId);
                if (service == null)
                {
                    return new ThirdResponse {
                               Code = 20114, Msg = "未找到此服务单"
                    }
                }
                ;
                var orderRefund = OrderRefundAfterSales.ObjectSet().FirstOrDefault(p => p.Id == service.OrderRefundAfterSalesId);
                if (service == null)
                {
                    return new ThirdResponse {
                               Code = 20115, Msg = "未找到此服务单"
                    }
                }
                ;
                if (service.AgreeApplyTime.HasValue)
                {
                    return(result);
                }
                #endregion
                #region 退款处理
                var refundResult = OrderHelper.ApproveOrderRefundAfterSales(orderId, orderRefund.OrderItemId ?? Guid.Empty);
                if (refundResult.ResultCode == 0)
                {
                    service.AgreeApplyTime = agreeTime;
                    service.StateName      = "允许售后";
                    service.StateDesc      = "售后服务申请审核结果回调:允许售后";
                    orderRefund.RefundReceiveFullAddress = serviceResult.Address.FullAddress;
                    orderRefund.RefundReceiveMobile      = serviceResult.Address.Phone;
                    orderRefund.RefundReceiveName        = serviceResult.Address.Name;
                }
                else
                {
                    result = new ThirdResponse {
                        Code = 20116, Msg = "内部异常"
                    }
                };
                #endregion
                #region 保存ThirdECOrderJournal
                var journal = new ThirdECServiceJournal
                {
                    Id                      = Guid.NewGuid(),
                    OrderId                 = service.OrderId,
                    OrderCode               = service.OrderCode,
                    OrderItemId             = service.OrderItemId,
                    OrderRefundAfterSalesId = service.OrderRefundAfterSalesId,
                    Name                    = "售后服务申请审核结果回调:允许售后",
                    Details                 = refundResult.ResultCode == 0 ? "售后服务申请审核结果回调:允许售后" : refundResult.Message,
                    Json                    = resultJsonStr,
                    EntityState             = EntityState.Added
                };
                ContextFactory.CurrentThreadContext.SaveObject(journal);
                #endregion
                int count = ContextFactory.CurrentThreadContext.SaveChanges();
                if (count == 0)
                {
                    LogHelper.Error(string.Format("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调数据保存失败,入参:{0}", resultJsonStr));
                    result = new ThirdResponse {
                        Code = 20117, Msg = "内部异常"
                    };
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("ThirdECommerceServiceHelper.AgreeServiceCallback第三方电商允许售后结果回调异常,Input:" + resultJsonStr, ex);
                result = new ThirdResponse {
                    Code = 20118, Msg = "内部异常"
                };
            }
            return(result);
        }
コード例 #5
0
        /// <summary>
        /// 第三方电商取消售后服务申请
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="orderId"></param>
        /// <param name="serviceId"></param>
        /// <returns></returns>
        public static ResultDTO CancelService(Guid appId, Guid orderId, Guid serviceId)
        {
            string param = string.Format("appId={0}&orderId={1}&serviceId={2}", appId, orderId, serviceId);

            LogHelper.Debug(string.Format("ThirdECommerceServiceHelper.CancelService第三方电商取消售后服务申请,入参:{0}", param));
            var result = new ResultDTO {
                Message = "操作失败,请稍后重试"
            };

            try
            {
                #region 判断是否第三方电商售后服务单及获取售后服务单信息
                var service = ThirdECService.ObjectSet().FirstOrDefault(o => o.OrderRefundAfterSalesId == serviceId);
                if (service == null)
                {
                    return(result);
                }
                var thirdECommerce = ThirdECommerceHelper.GetThirdECommerce(appId);
                if (thirdECommerce == null || string.IsNullOrEmpty(thirdECommerce.OpenApiKey) ||
                    string.IsNullOrEmpty(thirdECommerce.OpenApiCallerId) ||
                    string.IsNullOrEmpty(thirdECommerce.ServiceCancelUrl))
                {
                    return(result);
                }
                if (service.UserCancelTime.HasValue)
                {
                    return(result);
                }
                #endregion
                #region 调用第三方取消售后服务申请接口
                var jsonStr  = string.Empty;
                var response = ThirdECommerceSV.CancelService(new ThirdApiInfo
                {
                    Apikey   = thirdECommerce.OpenApiKey,
                    CallerId = thirdECommerce.OpenApiCallerId,
                    ApiUrl   = thirdECommerce.ServiceCancelUrl
                }, serviceId.ToString(), ref jsonStr);
                #endregion
                var isSuccess = response.Successed;
                #region 修改ThirdECService
                if (isSuccess)
                {
                    service.UserCancelTime = DateTime.Now;
                    service.StateName      = "取消售后服务申请成功";
                    result = new ResultDTO {
                        isSuccess = true
                    };
                }
                else
                {
                    ContextFactory.ReleaseContextSession();
                    service.StateName = "取消售后服务申请失败";
                    result            = new ResultDTO {
                        Message = response.Msg ?? "不允许取消"
                    };
                }
                service.StateDesc = response.Msg;
                #endregion
                #region 保存ThirdECServiceJournal
                var journal = new ThirdECServiceJournal
                {
                    Id                      = Guid.NewGuid(),
                    OrderId                 = service.OrderId,
                    OrderCode               = service.OrderCode,
                    OrderItemId             = service.OrderItemId,
                    OrderRefundAfterSalesId = service.OrderRefundAfterSalesId,
                    Name                    = "取消售后服务申请",
                    Details                 = response.Msg,
                    Json                    = jsonStr,
                    EntityState             = EntityState.Added
                };
                ContextFactory.CurrentThreadContext.SaveObject(journal);
                #endregion
                if (!isSuccess) //失败则只保存日志
                {
                    int count = ContextFactory.CurrentThreadContext.SaveChanges();
                    if (count == 0)
                    {
                        LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商取消售后服务申请数据保存失败,入参:{0}", param));
                    }
                }
                return(result);
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("ThirdECommerceServiceHelper.CreateService第三方电商取消售后服务申请异常,入参:{0}", param), ex);
                return(result);
            }
        }