public void CommodityDeductionTest()
 {
     using (var client = new TuboAllianceClient())
     {
         var model = new CommodityDeductionRequest();
         model.OrderId = "123502862";
         var result = client.CommodityDeductionAsync(model);
         Assert.IsNotNull(result.Result);
     }
 }
        /// <summary>
        /// 订单商品扣佣接口
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static async Task <CommodityDeductionResponse> CommodityDeductionManager(CommodityDeductionRequest request)
        {
            var resultModule = new CommodityDeductionResponse();

            resultModule.Success = true;

            try
            {
                var orderId = string.IsNullOrWhiteSpace(request.OrderId) ? 0 : Convert.ToInt32(request.OrderId);
                //红冲订单关联信息
                var orderRelationShipOnly = await GetOrderRelationShipOnly(orderId);

                if (orderRelationShipOnly?.Count > 0)
                {
                    //红冲订单的父订单ID
                    var redRushParentOrderId = orderRelationShipOnly.Where(a => a.RelationshipType ==
                                                                           Convert.ToInt32(OrderRelationshipTypeEnum.HCOrder)).Select(a => a.ParentOrderId).FirstOrDefault();

                    //获取拆单订单号集合
                    var relatedSplitOrderIds = await GetRelatedSplitOrderIDs(redRushParentOrderId);

                    //拆单是需要获取主订单号ID,关联订单集合最小的一位是主订单ID
                    var mainOrderId = relatedSplitOrderIds.OrderBy(splitOrderId
                                                                   => splitOrderId).FirstOrDefault() + "";

                    //下单商品记录集合
                    var orderItemRecordList = await DalTuboAlliance.GetOrderItemRecordListDal(mainOrderId);

                    //红冲订单主订单再下单记录表存在
                    if (orderItemRecordList?.Count > 0)
                    {
                        var orderModel = FetchOrderInfoByID(orderId).Result;

                        if (orderModel.OrderType == "5红冲订单")
                        {
                            await orderModel.OrderListModel.ForEachAsync(async orderItem =>
                            {
                                //去除套餐的子产品与赠品
                                if (orderItem.PayPrice < 0 && (orderItem.ParentId == null || orderItem.ParentId == 0))
                                {
                                    //当前订单的PID在父订单商品集合中查询
                                    var orderItemRecord = orderItemRecordList?.Where(p =>
                                                                                     p.PID == orderItem.Pid).FirstOrDefault();

                                    if (orderItemRecord != null)
                                    {
                                        var commissionFlowRecord =
                                            await DalTuboAlliance.GetCommissionFlowRecordDetalDal(redRushParentOrderId,
                                                                                                  orderItemRecord.CpsId, orderItemRecord.DarenID,
                                                                                                  orderItem.Pid, nameof(CpsEnum.CpsRunningType.VALUEADDED));

                                        if (commissionFlowRecord != null)
                                        {
                                            //计算退佣金使用实体
                                            var calculateCommissionModel             = new CalculateCommissionModel();
                                            calculateCommissionModel.OrderItem       = orderItem;
                                            calculateCommissionModel.CpsId           = orderItemRecord.CpsId;
                                            calculateCommissionModel.DarenId         = orderItemRecord.DarenID;
                                            calculateCommissionModel.Pid             = orderItem.Pid;
                                            calculateCommissionModel.Number          = orderItem.Num;
                                            calculateCommissionModel.CommissionRatio =
                                                commissionFlowRecord.CommissionRatio;
                                            calculateCommissionModel.OriOrderId          = "" + redRushParentOrderId;
                                            calculateCommissionModel.OriPayInstructionId =
                                                commissionFlowRecord.TransactionNo;
                                            await DeductionCommission(calculateCommissionModel);
                                        }
                                        else
                                        {
                                            Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】" +
                                                        $"【mainOrderId:{mainOrderId}】【PID:{orderItem.Pid}】" +
                                                        $"【CpsId:{orderItemRecord.CpsId}】【DarenID:{orderItemRecord.DarenID}】无增长流水记录");
                                        }
                                    }
                                    else
                                    {
                                        Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】" +
                                                    $"【mainOrderId:{mainOrderId}】【PID:{orderItem.Pid}】订单商品未在下单主记录表中存在");
                                    }
                                }
                                else
                                {
                                    Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】" +
                                                $"【mainOrderId:{mainOrderId}】【PID:{orderItem.Pid}】【ParentId:{orderItem.ParentId}】为套装子产品或者是赠品");
                                }
                            });
                        }
                        else
                        {
                            Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】非红冲订单");
                        }
                    }
                    else
                    {
                        Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】【mainOrderId:{mainOrderId}】红冲订单的主订单无下单商品记录");
                    }
                }
                else
                {
                    Logger.Info($"CommodityDeductionManager:【orderId:{orderId}】红冲关联订单为空");
                }
            }
            catch (Exception ex)
            {
                Logger.Error($"CommodityDeductionManager订单商品退佣佣接口异常:{ex.Message};堆栈信息:{ex.StackTrace}");
                resultModule.ErrorMessage = ex.Message;
                resultModule.Success      = false;
            }

            return(resultModule);
        }
 /// <summary>
 /// 订单商品扣佣接口
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public async Task <OperationResult <CommodityDeductionResponse> > CommodityDeductionAsync(CommodityDeductionRequest request)
 {
     if (request == null || string.IsNullOrEmpty(request.OrderId))
     {
         return(OperationResult.FromError <CommodityDeductionResponse>
                    (nameof(Resource.ParameterError), Resource.ParameterError));
     }
     else
     {
         return(OperationResult.FromResult(await TuboAllianceManager.CommodityDeductionManager(request)));
     }
 }