public string SaveItemData(string pRequest)
        {
            var rp = pRequest.DeserializeJSONTo <APIRequest <SaveItemDataRP> >();

            if (string.IsNullOrEmpty(rp.Parameters.Item_Category_Id))
            {
                throw new APIException("缺少参数【Item_Category_Id】或参数值为空")
                      {
                          ErrorCode = 135
                      };
            }
            if (string.IsNullOrEmpty(rp.Parameters.Item_Name))
            {
                throw new APIException("缺少参数【Item_Name】或参数值为空")
                      {
                          ErrorCode = 135
                      };
            }
            var loggingSessionInfo = new SessionManager().CurrentUserLoginInfo;//获取session数据
            var itemService        = new ItemService(loggingSessionInfo);


            var item = new ItemInfo();

            if (string.IsNullOrEmpty(rp.Parameters.Item_Id))
            {
                item.Item_Id = Utils.NewGuid();
            }
            else
            {
                item.Item_Id = rp.Parameters.Item_Id;
            }
            item.Item_Code        = rp.Parameters.Item_Code;
            item.Item_Name        = rp.Parameters.Item_Name;
            item.Item_Category_Id = rp.Parameters.Item_Category_Id;

            if (string.IsNullOrEmpty(rp.Parameters.Item_Code))
            {
                item.Item_Code = itemService.GetGreatestItemCode(loggingSessionInfo);
                if (item.Item_Code.Length == 0)
                {
                    throw new APIException("商品编码自动生成失败,请联系管理员。")
                          {
                              ErrorCode = 135
                          };
                }
            }
            else
            {
                //if (!string.IsNullOrEmpty(item.Item_Id))
                //{
                if (!itemService.IsExistItemCode(loggingSessionInfo, item.Item_Code, item.Item_Id))
                {
                    throw new APIException("商品编码不能重复。")
                          {
                              ErrorCode = 135
                          };
                }
                //}
            }
            item.OperationType = rp.Parameters.OperationType;
            item.ItemImageList = rp.Parameters.ItemImageList;
            item.ItemPropList  = rp.Parameters.ItemPropList;

            item.T_ItemSkuProp      = rp.Parameters.T_ItemSkuProp;
            item.SkuList            = rp.Parameters.SkuList;            //
            item.SalesPromotionList = rp.Parameters.SalesPromotionList; //促销分组
            item.OperationType      = rp.Parameters.OperationType;
            item.ifservice          = rp.Parameters.ifservice;
            item.isGB = rp.Parameters.IsGB; // 0-非标商品,1-标准商品

            //对应的虚拟商品
            //item.ObjecetTypeId = rp.Parameters.ObjecetTypeId;
            //item.VirtualItemTypeId = rp.Parameters.VirtualItemTypeId;

            // edit by liangx 2016-09-22 虚拟商品修改为一个套餐,包含多个虚拟商品
            item.VirtualItems = rp.Parameters.VirtualItems;

            // liangx 2016-09-22 添加配送方式数据到 T_Item_Delivery_Mapping
            item.ItemDeliverySettings = rp.Parameters.ItemDeliverySettings;



            //保存配送方式
            if (item.ItemDeliverySettings != null && item.ItemDeliverySettings.Count > 0)
            {
                //如果是修改,且商品已有添加过的虚拟商品,则删除掉
                T_VirtualItemTypeSettingBLL bllVirtualItem = new T_VirtualItemTypeSettingBLL(loggingSessionInfo);

                var entityVirtualItemList = bllVirtualItem.QueryByEntity(new T_VirtualItemTypeSettingEntity()
                {
                    ItemId = item.Item_Id
                }, null);

                if (entityVirtualItemList != null && entityVirtualItemList.Any())
                {
                    bllVirtualItem.Delete(entityVirtualItemList);
                }

                //获取当前商品的配送方式
                var bllItemDelivery = new T_Item_Delivery_MappingBLL(loggingSessionInfo);

                var itemDeliverys = bllItemDelivery.QueryByEntity(new T_Item_Delivery_MappingEntity()
                {
                    Item_Id = item.Item_Id
                }, null);

                //没有配送方式,则新增,否则删除当前配送方式,再新增
                if (itemDeliverys != null && itemDeliverys.Any())
                {
                    bllItemDelivery.Delete(itemDeliverys);
                }

                foreach (var itemDelivery in item.ItemDeliverySettings)
                {
                    itemDelivery.Item_Delivery_Id = Utils.NewGuid();
                    itemDelivery.Item_Id          = item.Item_Id;
                    itemDelivery.CustomerId       = loggingSessionInfo.ClientID;
                    itemDelivery.Create_Time      = DateTime.Now.ToString();
                    itemDelivery.Create_User_Id   = loggingSessionInfo.UserID;
                    itemDelivery.Modify_Time      = DateTime.Now.ToString();
                    itemDelivery.Modify_User_Id   = loggingSessionInfo.UserID;

                    bllItemDelivery.Create(itemDelivery);
                }
            }

            /**
             *          //sku值
             *          if (item.SkuList != null && item.SkuList.Count > 0)//在单个的时候都已经添加过了
             *          {
             *              foreach (var tmpSku in item.SkuList)
             *              {
             *                  tmpSku.item_id = item.Item_Id;
             *                  //SkuId为空,新生成SkuId
             *                  if (tmpSku.sku_id == null || tmpSku.sku_id.Length == 0)
             *                  {
             *                      tmpSku.sku_id = Utils.NewGuid();
             *                  }
             *                  //处理sku相关价格(jifeng.cao 20140224)
             *                  foreach (var skuprice in tmpSku.sku_price_list)
             *                  {
             *                      skuprice.sku_id = tmpSku.sku_id;
             *                      //SkuPriceId为空,新生成SkuPriceId
             *                      if (skuprice.sku_price_id == null || skuprice.sku_price_id.Length == 0)
             *                      {
             *                          skuprice.sku_price_id = Utils.NewGuid();
             *                      }
             *                  }
             *
             *              }
             *          }
             *          else
             *          {
             *              //对于无SKU配置的客户,默认生成一个SKU
             *              SkuInfo skuInfo = new SkuInfo();
             *              skuInfo.sku_id = Utils.NewGuid();
             *              skuInfo.item_id = item.Item_Id;
             *              // item_id = skuInfo.sku_id;
             *              //skuInfo.barcode = skuInfo.item_code;
             *              //skuInfo.prop_1_detail_id = "--";
             *              //skuInfo.prop_2_detail_id = "--";
             *              //skuInfo.prop_3_detail_id = "--";
             *              //skuInfo.prop_4_detail_id = "--";
             *              //skuInfo.prop_5_detail_id = "--";
             *              //skuInfo.status = "1";
             *              //skuInfo.create_user_id = "System";
             *              //skuInfo.create_time = DateTime.Now.ToString();
             *
             *              item.SkuList.Add(skuInfo);
             *          }
             *
             *          //虚拟商品处理
             *          if (rp.Parameters.ifservice == 1)
             *          {
             *              T_VirtualItemTypeSettingBLL bllVirtualItem = new T_VirtualItemTypeSettingBLL(loggingSessionInfo);
             *              T_VirtualItemTypeSettingEntity entityVirtualItem = new T_VirtualItemTypeSettingEntity();
             *              //entityVirtualItem = bllVirtualItem.QueryByEntity(new T_VirtualItemTypeSettingEntity() { ItemId = rp.Parameters.Item_Id, SkuId = rp.Parameters.SkuList[0].sku_id }, null).FirstOrDefault();
             *              entityVirtualItem = bllVirtualItem.QueryByEntity(new T_VirtualItemTypeSettingEntity() { ItemId = rp.Parameters.Item_Id }, null).FirstOrDefault();
             *              if (entityVirtualItem != null)
             *              {
             *                  entityVirtualItem.VirtualItemTypeId = new Guid(rp.Parameters.VirtualItemTypeId);
             *                  entityVirtualItem.ObjecetTypeId = rp.Parameters.ObjecetTypeId;
             *                  bllVirtualItem.Update(entityVirtualItem);
             *              }
             *              else
             *              {
             *                  entityVirtualItem = new T_VirtualItemTypeSettingEntity
             *                  {
             *                      Id = Guid.NewGuid(),
             *                      ItemId = item.Item_Id,
             *                      SkuId = rp.Parameters.SkuList[0].sku_id,
             *                      VirtualItemTypeId = new Guid(rp.Parameters.VirtualItemTypeId),
             *                      ObjecetTypeId = rp.Parameters.ObjecetTypeId,
             *                      CustomerId = loggingSessionInfo.ClientID
             *                  };
             *                  bllVirtualItem.Create(entityVirtualItem);
             *              }
             *          }
             *
             ***/
            //保存sku属性名****

            string error  = "";
            bool   result = itemService.SetItemInfoNew(item, out error);
            //item.Item_Id
            var rd = new SaveItemDataRD();//返回值

            rd.Item_Id = item.Item_Id;
            var rsp = new SuccessResponse <IAPIResponseData>(rd);

            rsp.Message = error;

            return(rsp.ToJSON());
        }
        /// <summary>
        /// 计算购卡分润
        /// </summary>
        public void CalculateSalesVipCardOrderJob()
        {
            var numCount = 50;

            var customerIDs = CustomerBLL.Instance.GetCustomerList();

            foreach (var customer in customerIDs)
            {
                string connString = customer.Value;
                var    count      = RedisOpenAPI.Instance.CCSalesCardOrder().GetSalesCardOrderLength(new CC_Order
                {
                    CustomerID = customer.Key
                });
                if (count.Code != ResponseCode.Success)
                {
                    BaseService.WriteLog("从redis获取vipcard订单数据失败");
                    continue;
                }
                if (count.Result <= 0)
                {
                    continue;
                }
                if (count.Result < numCount)
                {
                    numCount = Convert.ToInt32(count.Result);
                }
                //DataTable dtAmountDetail = CreateTableAmountDetail();
                //DataTable dtAmount = CreateTableAmount();
                //DataTable dtSplitProfitRecord = CreateTableSplitProfitRecord();

                for (var i = 0; i < numCount; i++)
                {
                    var response = RedisOpenAPI.Instance.CCSalesCardOrder().GetSalesCardOrder(new CC_Order
                    {
                        CustomerID = customer.Key
                    });
                    if (response.Code == ResponseCode.Success)
                    {
                        var        orderInfo          = response.Result.OrderInfo.JsonDeserialize <T_InoutEntity>();
                        var        loggingSessionInfo = CustomerBLL.Instance.GetBSLoggingSession(customer.Key, "RedisSystem");
                        T_InoutBLL inoutBLL           = new T_InoutBLL(loggingSessionInfo);
                        if (orderInfo != null)
                        {
                            VipBLL                      bllVip                    = new VipBLL(loggingSessionInfo);
                            T_Inout_DetailBLL           bllInoutDetail            = new T_Inout_DetailBLL(loggingSessionInfo);
                            T_VirtualItemTypeSettingBLL bllVirtualItemTypeSetting = new T_VirtualItemTypeSettingBLL(loggingSessionInfo);
                            VipCardUpgradeRuleBLL       bllVipCardUpgradeRule     = new VipCardUpgradeRuleBLL(loggingSessionInfo);
                            VipAmountBLL                bllVipAmount              = new VipAmountBLL(loggingSessionInfo);
                            VipAmountDetailBLL          bllVipAmountDetail        = new VipAmountDetailBLL(loggingSessionInfo);
                            T_SplitProfitRecordBLL      bllSplitProfitRecord      = new T_SplitProfitRecordBLL(loggingSessionInfo);

                            VipAmountEntity           entityVipAmount         = new VipAmountEntity();
                            VipAmountDetailEntity     entityVipAmountDetail   = new VipAmountDetailEntity();
                            T_SplitProfitRecordEntity entitySplitProfitRecord = new T_SplitProfitRecordEntity();

                            DataSet dsVipCardLevel    = bllVip.GetVipCardLevel(orderInfo.vip_no, loggingSessionInfo.ClientID);
                            var     entityInoutDetail = bllInoutDetail.QueryByEntity(new T_Inout_DetailEntity()
                            {
                                order_id = orderInfo.order_id
                            }, null).FirstOrDefault();
                            if (entityInoutDetail == null)
                            {
                                continue;
                            }
                            var vipCardType = bllVirtualItemTypeSetting.QueryByEntity(new T_VirtualItemTypeSettingEntity()
                            {
                                SkuId = entityInoutDetail.sku_id, IsDelete = 0
                            }, null).FirstOrDefault();
                            if (vipCardType != null)
                            {
                                int intVipCardTypeID         = Convert.ToInt32(vipCardType.ObjecetTypeId);
                                var entityVipCardUpgradeRule = bllVipCardUpgradeRule.QueryByEntity(new VipCardUpgradeRuleEntity()
                                {
                                    VipCardTypeID = intVipCardTypeID, IsPurchaseUpgrade = 1, IsDelete = 0
                                }, null).SingleOrDefault();
                                if (entityVipCardUpgradeRule != null)
                                {
                                    VipCardProfitRuleBLL bllVipCardProfitRule = new VipCardProfitRuleBLL(loggingSessionInfo);
                                    var entityVipCardProfitRule = bllVipCardProfitRule.QueryByEntity(new VipCardProfitRuleEntity()
                                    {
                                        VipCardTypeID = intVipCardTypeID, IsDelete = 0
                                    }, null);
                                    foreach (var ProfitRule in entityVipCardProfitRule)
                                    {
                                        if (ProfitRule.IsApplyAllUnits == 0)
                                        {
                                            VipCardProfitRuleUnitMappingBLL bllVipCardProfitRuleUnitMapping = new VipCardProfitRuleUnitMappingBLL(loggingSessionInfo);
                                            var vipCardProfitRuleUnitMapping = bllVipCardProfitRuleUnitMapping.QueryByEntity(new VipCardProfitRuleUnitMappingEntity()
                                            {
                                                CardBuyToProfitRuleId = ProfitRule.CardBuyToProfitRuleId, UnitID = orderInfo.sales_unit_id, IsDelete = 0, CustomerID = loggingSessionInfo.ClientID
                                            }, null).SingleOrDefault();
                                            if (vipCardProfitRuleUnitMapping == null)
                                            {
                                                continue;
                                            }
                                        }
                                        decimal amount            = 0;
                                        string  strAmountSourceId = string.Empty;
                                        string  strVipId          = string.Empty;
                                        string  strUserType       = string.Empty;
                                        if (ProfitRule.ProfitOwner == "Employee")
                                        {
                                            strAmountSourceId = "37";
                                            strVipId          = orderInfo.sales_user;
                                            strUserType       = "User";
                                        }
                                        if (ProfitRule.ProfitOwner == "Unit")
                                        {
                                            strAmountSourceId = "40";
                                            strVipId          = orderInfo.sales_unit_id;
                                            strUserType       = "Unit";
                                        }
                                        amount = (decimal)ProfitRule.FirstCardSalesProfitPct * (decimal)orderInfo.actual_amount * (decimal)0.01;
                                        var vipAmountDetail = bllVipAmountDetail.QueryByEntity(new VipAmountDetailEntity()
                                        {
                                            ObjectId = orderInfo.order_id, AmountSourceId = strAmountSourceId
                                        }, null);
                                        if (vipAmountDetail != null && vipAmountDetail.Length > 0)
                                        {
                                            continue;
                                        }
                                        if (amount > 0)
                                        {
                                            IDbTransaction tran = new JIT.CPOS.BS.DataAccess.Base.TransactionHelper(loggingSessionInfo).CreateTransaction();
                                            try {
                                                //                                 DataRow dr_SplitProfitRecord = dtSplitProfitRecord.NewRow();
                                                //                                 dr_SplitProfitRecord["Id"] = Guid.NewGuid();
                                                //                                 dr_SplitProfitRecord["SourceType"] = "Amount";
                                                //                                 dr_SplitProfitRecord["SourceId"] = strAmountSourceId;
                                                //                                 dr_SplitProfitRecord["ObjectId"] = orderInfo.order_id;
                                                //dr_SplitProfitRecord["UserType"] = strUserType;
                                                //                                 dr_SplitProfitRecord["UserId"] = orderInfo.sales_user;
                                                //                                 dr_SplitProfitRecord["SplitAmount"] = amount;
                                                //                                 dr_SplitProfitRecord["SplitSattus"] = "10";
                                                //                                 dr_SplitProfitRecord["CustomerId"] = loggingSessionInfo.ClientID;
                                                //                                 dr_SplitProfitRecord["CreateTime"] = DateTime.Now;
                                                //                                 dr_SplitProfitRecord["CreateBy"] = loggingSessionInfo.ClientID;
                                                //                                 dr_SplitProfitRecord["LastUpdateTime"] = DateTime.Now;
                                                //                                 dr_SplitProfitRecord["LastUpdateBy"] = loggingSessionInfo.ClientID;
                                                //                                 dr_SplitProfitRecord["IsDelete"] = 0;
                                                //                                 dtSplitProfitRecord.Rows.Add(dr_SplitProfitRecord);

                                                //                                 DataRow dr_AmountDetail = dtAmountDetail.NewRow();
                                                //                                 dr_AmountDetail["VipAmountDetailId"] = Guid.NewGuid();
                                                //dr_AmountDetail["VipId"] = strVipId;
                                                //                                 dr_AmountDetail["VipCardCode"] = "";
                                                //                                 dr_AmountDetail["UnitID"] = "";
                                                //                                 dr_AmountDetail["UnitName"] = "";
                                                //                                 dr_AmountDetail["SalesAmount"] = 0;
                                                //                                 dr_AmountDetail["Amount"] = amount;
                                                //                                 dr_AmountDetail["UsedReturnAmount"] = 0;
                                                //                                 dr_AmountDetail["Reason"] = "首次售卡分润";
                                                //                                 dr_AmountDetail["EffectiveDate"] = DateTime.Now;
                                                //                                 dr_AmountDetail["DeadlineDate"] = Convert.ToDateTime("9999-12-31 23:59:59");
                                                //                                 dr_AmountDetail["AmountSourceId"] = strAmountSourceId;
                                                //                                 dr_AmountDetail["ObjectId"] = orderInfo.order_id;
                                                //                                 dr_AmountDetail["Remark"] = "首次售卡分润";
                                                //                                 dr_AmountDetail["IsValid"] = 0;
                                                //                                 dr_AmountDetail["IsWithdrawCash"] = 0;
                                                //                                 dr_AmountDetail["CustomerID"] = loggingSessionInfo.ClientID;
                                                //                                 dr_AmountDetail["CreateTime"] = DateTime.Now;
                                                //                                 dr_AmountDetail["CreateBy"] = loggingSessionInfo.ClientID;
                                                //                                 dr_AmountDetail["LastUpdateBy"] = loggingSessionInfo.ClientID;
                                                //                                 dr_AmountDetail["LastUpdateTime"] = DateTime.Now;
                                                //                                 dr_AmountDetail["IsDelete"] = 0;
                                                //                                 //dr_AmountDetail["IsCalculated"] = 1;
                                                //                                 dtAmountDetail.Rows.Add(dr_AmountDetail);

                                                entitySplitProfitRecord = new T_SplitProfitRecordEntity()
                                                {
                                                    ID          = Guid.NewGuid().ToString(),
                                                    SourceType  = "Amount",
                                                    SourceId    = strAmountSourceId,
                                                    ObjectId    = orderInfo.order_id,
                                                    UserType    = strUserType,
                                                    UserId      = orderInfo.sales_user,
                                                    SplitAmount = amount,
                                                    SplitSattus = "10",
                                                    CustomerID  = loggingSessionInfo.ClientID
                                                };
                                                bllSplitProfitRecord.Create(entitySplitProfitRecord, tran);


                                                entityVipAmountDetail = new VipAmountDetailEntity {
                                                    VipAmountDetailId = Guid.NewGuid(),
                                                    VipId             = strVipId,
                                                    Amount            = amount,
                                                    UsedReturnAmount  = 0,
                                                    EffectiveDate     = DateTime.Now,
                                                    DeadlineDate      = Convert.ToDateTime("9999-12-31 23:59:59"),
                                                    AmountSourceId    = strAmountSourceId,
                                                    ObjectId          = orderInfo.order_id,
                                                    CustomerID        = loggingSessionInfo.ClientID,
                                                    Reason            = "首次售卡分润",
                                                    Remark            = "首次售卡分润",
                                                    IsWithdrawCash    = 0
                                                };
                                                bllVipAmountDetail.Create(entityVipAmountDetail, (SqlTransaction)tran);

                                                entityVipAmount = bllVipAmount.QueryByEntity(new VipAmountEntity()
                                                {
                                                    VipId = orderInfo.sales_user, IsDelete = 0
                                                }, null).SingleOrDefault();
                                                if (entityVipAmount == null)
                                                {
                                                    //DataRow dr_Amount = dtAmount.NewRow();
                                                    //dr_Amount["VipId"] = orderInfo.sales_user;
                                                    //dr_Amount["VipCardCode"] = "";
                                                    //dr_Amount["BeginAmount"] = 0;
                                                    //dr_Amount["InAmount"] = amount;
                                                    //dr_Amount["OutAmount"] = 0;
                                                    //dr_Amount["EndAmount"] = amount;
                                                    //dr_Amount["TotalAmount"] = amount;
                                                    //dr_Amount["BeginReturnAmount"] = 0;
                                                    //dr_Amount["InReturnAmount"] = 0;
                                                    //dr_Amount["OutReturnAmount"] = 0;
                                                    //dr_Amount["ReturnAmount"] = 0;
                                                    //dr_Amount["ImminentInvalidRAmount"] = 0;
                                                    //dr_Amount["InvalidReturnAmount"] = 0;
                                                    //dr_Amount["ValidReturnAmount"] = 0;
                                                    //dr_Amount["TotalReturnAmount"] = 0;
                                                    //dr_Amount["PayPassword"] = "";
                                                    //dr_Amount["IsLocking"] = 0;
                                                    //dr_Amount["CustomerID"] = loggingSessionInfo.ClientID;
                                                    //dr_Amount["CreateTime"] = DateTime.Now;
                                                    //dr_Amount["CreateBy"] = loggingSessionInfo.ClientID;
                                                    //dr_Amount["LastUpdateBy"] = loggingSessionInfo.ClientID;
                                                    //dr_Amount["LastUpdateTime"] = DateTime.Now;
                                                    //dr_Amount["IsDelete"] = 0;
                                                    //dtAmount.Rows.Add(dr_Amount);
                                                    entityVipAmount = new VipAmountEntity {
                                                        VipId                  = strVipId,
                                                        BeginAmount            = 0,
                                                        InAmount               = amount,
                                                        OutAmount              = 0,
                                                        EndAmount              = amount,
                                                        TotalAmount            = amount,
                                                        BeginReturnAmount      = 0,
                                                        InReturnAmount         = 0,
                                                        OutReturnAmount        = 0,
                                                        ReturnAmount           = 0,
                                                        ImminentInvalidRAmount = 0,
                                                        InvalidReturnAmount    = 0,
                                                        ValidReturnAmount      = 0,
                                                        TotalReturnAmount      = 0,
                                                        IsLocking              = 0,
                                                        CustomerID             = loggingSessionInfo.ClientID,
                                                        VipCardCode            = ""
                                                    };
                                                    bllVipAmount.Create(entityVipAmount, tran);
                                                }
                                                else
                                                {
                                                    entityVipAmount.InReturnAmount    = (entityVipAmount.InReturnAmount == null ? 0 : entityVipAmount.InReturnAmount.Value) + amount;
                                                    entityVipAmount.TotalReturnAmount = (entityVipAmount.TotalReturnAmount == null ? 0 : entityVipAmount.TotalReturnAmount.Value) + amount;

                                                    entityVipAmount.ValidReturnAmount = (entityVipAmount.ValidReturnAmount == null ? 0 : entityVipAmount.ValidReturnAmount.Value) + amount;
                                                    entityVipAmount.ReturnAmount      = (entityVipAmount.ReturnAmount == null ? 0 : entityVipAmount.ReturnAmount.Value) + amount;

                                                    bllVipAmount.Update(entityVipAmount);
                                                }
                                                tran.Commit();
                                            }
                                            catch (Exception) {
                                                tran.Rollback();
                                                throw;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                //if (dtAmount.Rows.Count > 0)
                //{
                //    Utils.SqlBulkCopy(connString, dtAmount, "VipAmount");
                //}
                //if (dtAmountDetail.Rows.Count > 0 && dtSplitProfitRecord.Rows.Count > 0)
                //{
                //    Utils.SqlBulkCopy(connString, dtSplitProfitRecord, "T_SplitProfitRecord");
                //    Utils.SqlBulkCopy(connString, dtAmountDetail, "VipAmountDetail");

                //}
            }
        }