/// <summary> /// 计算超级分销商佣金,分润用到的批处理 /// </summary> public void CalculateSuperRetailTraderOrderJob() { var numCount = 50; var customerIDs = CustomerBLL.Instance.GetCustomerList(); foreach (var customer in customerIDs) { string connString = customer.Value; var count = RedisOpenAPI.Instance.CCSuperRetailTraderOrder().GetSuperRetailTraderOrderLength(new CC_Order { CustomerID = customer.Key }); if (count.Code != ResponseCode.Success) { BaseService.WriteLog("从redis获取待绑定优惠券数量失败"); continue; } if (count.Result <= 0) { continue; } if (count.Result < numCount) { numCount = Convert.ToInt32(count.Result); } DataTable dtProfitDetail = CreateTableProfitDetail(); DataTable dtAmountDetail = CreateTableAmountDetail(); DataTable dtAmount = CreateTableAmount(); for (var i = 0; i < numCount; i++) { var response = RedisOpenAPI.Instance.CCSuperRetailTraderOrder().GetSuperRetailTraderOrder(new CC_Order { CustomerID = customer.Key }); if (response.Code == ResponseCode.Success) { var orderInfo = response.Result.OrderInfo.JsonDeserialize <T_InoutEntity>(); //var loggingSessionInfo = response.Result.LogSession.JsonDeserialize<LoggingSessionInfo>(); var loggingSessionInfo = CustomerBLL.Instance.GetBSLoggingSession(customer.Key, "1"); T_InoutBLL inoutBLL = new T_InoutBLL(loggingSessionInfo); //inoutBLL.CalculateSuperRetailTraderOrder(loggingSessionInfo, orderInfo); if (orderInfo != null) { if (orderInfo.data_from_id == "35" || orderInfo.data_from_id == "36") { T_SuperRetailTraderBLL bllSuperRetailTrader = new T_SuperRetailTraderBLL(loggingSessionInfo); DataSet dsAllFather = bllSuperRetailTrader.GetAllFather(orderInfo.sales_user); if (dsAllFather != null && dsAllFather.Tables.Count > 0 && dsAllFather.Tables[0].Rows.Count > 0) { T_SuperRetailTraderProfitConfigBLL bllSuperRetailTraderProfitConfig = new T_SuperRetailTraderProfitConfigBLL(loggingSessionInfo); T_SuperRetailTraderConfigBLL bllSuperRetailTraderConfig = new T_SuperRetailTraderConfigBLL(loggingSessionInfo); T_SuperRetailTraderProfitDetailBLL bllSuperRetailTraderProfitDetail = new T_SuperRetailTraderProfitDetailBLL(loggingSessionInfo); VipAmountBLL bllVipAmount = new VipAmountBLL(loggingSessionInfo); VipAmountDetailBLL bllVipAmountDetail = new VipAmountDetailBLL(loggingSessionInfo); var entitySuperRetailTraderProfitConfig = bllSuperRetailTraderProfitConfig.QueryByEntity(new T_SuperRetailTraderProfitConfigEntity() { CustomerId = loggingSessionInfo.ClientID, IsDelete = 0, Status = "10" }, null); var entityConfig = bllSuperRetailTraderConfig.QueryByEntity(new T_SuperRetailTraderConfigEntity() { CustomerId = loggingSessionInfo.ClientID, IsDelete = 0 }, null).SingleOrDefault(); if (entityConfig != null && entitySuperRetailTraderProfitConfig != null) { //佣金比列 decimal SkuCommission = Convert.ToDecimal(entityConfig.SkuCommission) * Convert.ToDecimal(0.01); //商品分润比列 decimal DistributionProfit = Convert.ToDecimal(entityConfig.DistributionProfit) * Convert.ToDecimal(0.01); foreach (DataRow dr in dsAllFather.Tables[0].Rows) { decimal amount = 0; string strAmountSourceId = string.Empty; T_SuperRetailTraderProfitConfigEntity singlProfitConfig = new T_SuperRetailTraderProfitConfigEntity(); if (dr["level"].ToString() == "1") //佣金 { strAmountSourceId = "34"; singlProfitConfig = entitySuperRetailTraderProfitConfig.Where(a => a.Level == Convert.ToInt16(dr["level"].ToString())).SingleOrDefault(); if (singlProfitConfig != null) { if (singlProfitConfig.ProfitType == "Percent") { amount = Convert.ToDecimal(orderInfo.actual_amount) * SkuCommission; } } } else //分润 { strAmountSourceId = "33"; singlProfitConfig = entitySuperRetailTraderProfitConfig.Where(a => a.Level == Convert.ToInt16(dr["level"].ToString())).SingleOrDefault(); if (singlProfitConfig != null) { if (singlProfitConfig.ProfitType == "Percent") { //amount = Convert.ToDecimal(orderInfo.actual_amount) * DistributionProfit * Convert.ToDecimal(singlProfitConfig.Profit) * Convert.ToDecimal(0.01); amount = Convert.ToDecimal(orderInfo.actual_amount) * Convert.ToDecimal(singlProfitConfig.Profit) * Convert.ToDecimal(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 { T_SuperRetailTraderProfitDetailEntity entitySuperRetailTraderProfitDetail = new T_SuperRetailTraderProfitDetailEntity() { SuperRetailTraderProfitConfigId = singlProfitConfig.SuperRetailTraderProfitConfigId, SuperRetailTraderID = new Guid(dr["SuperRetailTraderID"].ToString()), Level = Convert.ToInt16(dr["level"].ToString()), ProfitType = "Cash", Profit = amount, OrderType = "Order", OrderId = orderInfo.order_id, OrderDate = Convert.ToDateTime(orderInfo.order_date), VipId = orderInfo.vip_no, OrderActualAmount = orderInfo.actual_amount, SalesId = new Guid(orderInfo.sales_user), OrderNo = orderInfo.order_no, CustomerId = loggingSessionInfo.ClientID }; bllSuperRetailTraderProfitDetail.Create(entitySuperRetailTraderProfitDetail, (SqlTransaction)tran); VipAmountEntity entityVipAmount = new VipAmountEntity(); VipAmountDetailEntity entityVipAmountDetail = new VipAmountDetailEntity(); entityVipAmountDetail = new VipAmountDetailEntity { VipAmountDetailId = Guid.NewGuid(), VipId = dr["SuperRetailTraderID"].ToString(), 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 = "超级分销商", IsWithdrawCash = 0 }; bllVipAmountDetail.Create(entityVipAmountDetail, (SqlTransaction)tran); //DataRow dr_ProfitDetail = dtProfitDetail.NewRow(); //dr_ProfitDetail["Id"] = Guid.NewGuid(); //dr_ProfitDetail["SuperRetailTraderProfitConfigId"] = new Guid(singlProfitConfig.SuperRetailTraderProfitConfigId.ToString()); //dr_ProfitDetail["SuperRetailTraderID"] = new Guid(dr["SuperRetailTraderID"].ToString()); //dr_ProfitDetail["Level"] = Convert.ToInt16(dr["level"].ToString()); //dr_ProfitDetail["ProfitType"] = "Cash"; //dr_ProfitDetail["Profit"] = amount; //dr_ProfitDetail["OrderType"] = "Order"; //dr_ProfitDetail["OrderId"] = orderInfo.order_id; //dr_ProfitDetail["OrderNo"] = orderInfo.order_no; //dr_ProfitDetail["OrderDate"] = Convert.ToDateTime(orderInfo.order_date); //dr_ProfitDetail["OrderActualAmount"] = orderInfo.actual_amount; //dr_ProfitDetail["SalesId"] = new Guid(orderInfo.sales_user); //dr_ProfitDetail["VipId"] = orderInfo.vip_no; //dr_ProfitDetail["CreateBy"] = loggingSessionInfo.ClientID; //dr_ProfitDetail["CreateTime"] = DateTime.Now; //dr_ProfitDetail["LastUpdateBy"] = loggingSessionInfo.ClientID; //dr_ProfitDetail["LastUpdateTime"] = DateTime.Now; //dr_ProfitDetail["CustomerId"] = loggingSessionInfo.ClientID; //dr_ProfitDetail["IsDelete"] = 0; //dtProfitDetail.Rows.Add(dr_ProfitDetail); //DataRow dr_AmountDetail = dtAmountDetail.NewRow(); //dr_AmountDetail["VipAmountDetailId"] = Guid.NewGuid(); //dr_AmountDetail["VipId"] = dr["SuperRetailTraderID"].ToString(); //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); entityVipAmount = bllVipAmount.QueryByEntity(new VipAmountEntity() { VipId = dr["SuperRetailTraderID"].ToString(), IsDelete = 0 }, null).SingleOrDefault(); if (entityVipAmount == null) { entityVipAmount = new VipAmountEntity { VipId = dr["SuperRetailTraderID"].ToString(), 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); //DataRow dr_Amount = dtAmount.NewRow(); //dr_Amount["VipId"] = dr["SuperRetailTraderID"].ToString(); //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); } 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 && dtProfitDetail.Rows.Count>0) //{ // Utils.SqlBulkCopy(connString, dtProfitDetail, "T_SuperRetailTraderProfitDetail"); // Utils.SqlBulkCopy(connString, dtAmountDetail, "VipAmountDetail"); //} } }
/// <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"); //} } }
/// <summary> /// 充值订单循环队列计算 /// </summary> public void CalculateRechargeOrderJob() { var numCount = 50; var customerIDs = CustomerBLL.Instance.GetCustomerList(); foreach (var customer in customerIDs) { string connString = customer.Value; var count = RedisOpenAPI.Instance.CCRechargeOrder().GetRechargeOrderLength(new CC_Order { CustomerID = customer.Key }); if (count.Code != ResponseCode.Success) { BaseService.WriteLog("从redis获取充值订单数据失败"); continue; } if (count.Result <= 0) { continue; } if (count.Result < numCount) { numCount = Convert.ToInt32(count.Result); } var loggingSessionInfo = CustomerBLL.Instance.GetBSLoggingSession(customer.Key, "RedisSystem"); VipCardProfitRuleBLL bllVipCardProfitRule = new VipCardProfitRuleBLL(loggingSessionInfo); VipCardProfitRuleEntity[] entityVipCardProfitRule = null; var bllVipCardGradeChangeLog = new VipCardGradeChangeLogBLL(loggingSessionInfo); VipAmountBLL bllVipAmount = new VipAmountBLL(loggingSessionInfo); VipAmountDetailBLL bllVipAmountDetail = new VipAmountDetailBLL(loggingSessionInfo); T_SplitProfitRecordBLL bllSplitProfitRecord = new T_SplitProfitRecordBLL(loggingSessionInfo); for (var i = 0; i < numCount; i++) { var response = RedisOpenAPI.Instance.CCRechargeOrder().GetRechargeOrder(new CC_Order { CustomerID = customer.Key }); if (response.Code == ResponseCode.Success) { var rechargeOrderInfo = response.Result.OrderInfo.JsonDeserialize <RechargeOrderEntity>(); entityVipCardProfitRule = bllVipCardProfitRule.QueryByEntity(new VipCardProfitRuleEntity() { VipCardTypeID = rechargeOrderInfo.VipCardTypeId, IsDelete = 0 }, null); if (entityVipCardProfitRule != null) { //DataTable dtAmountDetail = CreateTableAmountDetail(); //DataTable dtAmount = CreateTableAmount(); //DataTable dtSplitProfitRecord = CreateTableSplitProfitRecord(); VipAmountEntity entityVipAmount = new VipAmountEntity(); VipAmountDetailEntity entityVipAmountDetail = new VipAmountDetailEntity(); T_SplitProfitRecordEntity entitySplitProfitRecord = new T_SplitProfitRecordEntity(); foreach (var ProfitRule in entityVipCardProfitRule) { decimal amount = 0; string strAmountSourceId = string.Empty; string strVipId = string.Empty; string strUserType = string.Empty; if (ProfitRule.IsApplyAllUnits == 0) { VipCardProfitRuleUnitMappingBLL bllVipCardProfitRuleUnitMapping = new VipCardProfitRuleUnitMappingBLL(loggingSessionInfo); var vipCardProfitRuleUnitMapping = bllVipCardProfitRuleUnitMapping.QueryByEntity(new VipCardProfitRuleUnitMappingEntity() { CardBuyToProfitRuleId = ProfitRule.CardBuyToProfitRuleId, UnitID = rechargeOrderInfo.UnitId, IsDelete = 0, CustomerID = loggingSessionInfo.ClientID }, null).SingleOrDefault(); if (vipCardProfitRuleUnitMapping == null) { continue; } } if (ProfitRule.ProfitOwner == "Employee") { strAmountSourceId = "38"; strVipId = rechargeOrderInfo.UserId; strUserType = "User"; } if (ProfitRule.ProfitOwner == "Unit") { strAmountSourceId = "42"; strVipId = rechargeOrderInfo.UnitId; strUserType = "Unit"; } var vipAmountDetail = bllVipAmountDetail.QueryByEntity(new VipAmountDetailEntity() { ObjectId = rechargeOrderInfo.OrderID.ToString(), AmountSourceId = strAmountSourceId }, null); if (vipAmountDetail != null && vipAmountDetail.Length > 0) { continue; } if (rechargeOrderInfo.OrderDesc == "Upgrade") //首充 { amount = (decimal)ProfitRule.FirstRechargeProfitPct * (decimal)rechargeOrderInfo.ActuallyPaid * (decimal)0.01; } if (rechargeOrderInfo.OrderDesc == "ReRecharge")//续充 { VipCardReRechargeProfitRuleBLL bllVipCardReRechargeProfitRule = new VipCardReRechargeProfitRuleBLL(loggingSessionInfo); var entityVipCardReRechargeProfitRule = bllVipCardReRechargeProfitRule.QueryByEntity(new VipCardReRechargeProfitRuleEntity() { VipCardTypeID = rechargeOrderInfo.VipCardTypeId, CardBuyToProfitRuleId = ProfitRule.CardBuyToProfitRuleId, IsDelete = 0 }, null); if (entityVipCardReRechargeProfitRule != null) { decimal discount = 0; foreach (var ReRechargeProfitRule in entityVipCardReRechargeProfitRule.OrderByDescending(a => a.LimitAmount)) { if (ReRechargeProfitRule.ProfitType == "Superposition") { discount = (decimal)(ReRechargeProfitRule.LimitAmount * ReRechargeProfitRule.ProfitPct) * (decimal)0.01; amount = (decimal)(rechargeOrderInfo.ActuallyPaid / ReRechargeProfitRule.LimitAmount) * discount; } if (ReRechargeProfitRule.ProfitType == "Step") { if (rechargeOrderInfo.ActuallyPaid >= ReRechargeProfitRule.LimitAmount) { if (discount == 0) { discount = (decimal)ReRechargeProfitRule.ProfitPct * (decimal)0.01; amount = (decimal)rechargeOrderInfo.ActuallyPaid * discount; } } } } } } //入库 if (amount > 0) { IDbTransaction tran = new JIT.CPOS.BS.DataAccess.Base.TransactionHelper(loggingSessionInfo).CreateTransaction(); try { // 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"] = rechargeOrderInfo.OrderID.ToString(); // 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); //DataRow dr_SplitProfitRecord = dtSplitProfitRecord.NewRow(); //dr_SplitProfitRecord["Id"] = Guid.NewGuid(); //dr_SplitProfitRecord["SourceType"] = "Amount"; //dr_SplitProfitRecord["SourceId"] = strAmountSourceId; //dr_SplitProfitRecord["ObjectId"] = rechargeOrderInfo.OrderID.ToString(); //dr_SplitProfitRecord["UserType"] = strUserType; //dr_SplitProfitRecord["UserId"] = rechargeOrderInfo.UserId; //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); entitySplitProfitRecord = new T_SplitProfitRecordEntity() { ID = Guid.NewGuid().ToString(), SourceType = "Amount", SourceId = strAmountSourceId, ObjectId = rechargeOrderInfo.OrderID.ToString(), UserType = strUserType, UserId = rechargeOrderInfo.UserId, 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 = rechargeOrderInfo.OrderID.ToString(), CustomerID = loggingSessionInfo.ClientID, Reason = "充值", IsWithdrawCash = 0 }; bllVipAmountDetail.Create(entityVipAmountDetail, (SqlTransaction)tran); entityVipAmount = bllVipAmount.QueryByEntity(new VipAmountEntity() { VipId = strVipId, IsDelete = 0 }, null).SingleOrDefault(); if (entityVipAmount == null) { 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); //DataRow dr_Amount = dtAmount.NewRow(); //dr_Amount["VipId"] = strVipId; //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); } 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 && dtAmountDetail.Rows.Count == dtAmount.Rows.Count) //{ // 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"); //} } } } } }