Ejemplo n.º 1
0
        private void UpdateTeamInfo(List <long> userIds, TeamConfig userConfig)
        {
            var sqlList = new List <string>();

            IEnumerable <BatchParameter> batchParameters = new List <BatchParameter>();

            foreach (var userId in userIds)
            {
                var userMap = GetSingle(userId);
                if (userMap != null)
                {
                    // 设置当前会员的直推数量和子会员数据为空
                    var sql =
                        $"update User_UserMap set LevelNumber=0 , ChildNode='',TeamNumber=0 where UserId={userId}";
                    sqlList.Add(sql);
                    var parentMap = new List <ParentMap>();
                    try
                    {
                        parentMap = userMap.ParentMap.DeserializeJson <List <ParentMap> >();
                    }
                    catch (Exception ex)
                    {
                        // 组织架构图数据出错处理
                        Console.WriteLine(ex.Message);
                        userMap.ParentMap = new List <ParentMap>().ToJson(); // 默认值
                        UpdateMap(userMap.UserId, userMap.ParentMap);
                        parentMap = userMap.ParentMap.DeserializeJson <List <ParentMap> >();
                    }

                    // 更新直推会员数量
                    var parentUser = parentMap?.FirstOrDefault(r => r.ParentLevel == 1); // 直推用户Id
                    if (parentUser != null)
                    {
                        sql = $"update User_UserMap set LevelNumber=LevelNumber+1  where UserId={parentUser.UserId}";
                        sqlList.Add(sql);
                    }

                    // 更新团队有效人数的会员数
                    var teamUserIds = parentMap.Where(r => r.ParentLevel <= userConfig.TeamLevel).Select(r => r.UserId)
                                      .ToList();
                    if (teamUserIds.Count > 0)
                    {
                        sql =
                            $"update User_UserMap set  TeamNumber=TeamNumber+1 ,ChildNode=ChildNode+',{userId}' where UserId in ({teamUserIds.ToSqlString()})";
                        sqlList.Add(sql);
                    }
                }
            }

            var count = RepositoryContext.ExecuteSqlList(sqlList);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Updates the sku price.
        ///     批量更新商品Sku价格,
        ///     自动处理,确保商品价格正确
        /// </summary>
        /// <param name="productSkus"></param>
        public void UpdateSkuPrice(IEnumerable <ProductSku> productSkus)
        {
            var sqlList = new List <string>();

            foreach (var item in productSkus)
            {
                var sql =
                    $"update Shop_ProductSku set DisplayPrice='{item.DisplayPrice}',MaxPayPrice='{item.MaxPayPrice}',MinPayCash='{item.MinPayCash}' where id={item.Id}";
                sqlList.Add(sql);
            }

            // 批量更新数据库
            RepositoryContext.ExecuteSqlList(sqlList);
        }
Ejemplo n.º 3
0
        public bool Delete(long userId)
        {
            var sqlList = new List <string>
            {
                $"delete from User_User where Id={userId};",
                $"delete from User_UserType where UserId={userId};",
                $"delete from [Asset_Account] where UserId={userId};",
                $"delete from [User_UserMap] where UserId={userId};",
                $"delete from [User_UserDetail] where UserId={userId};"
            };
            var count = RepositoryContext.ExecuteSqlList(sqlList);

            if (count > 0)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     支付完成后更新订单状态
        ///     更新支付订单状态
        /// </summary>
        /// <param name="entityIdList">The entity identifier list.</param>
        /// <param name="pay">The pay.</param>
        /// <param name="isPaySucess">是否支出成功</param>
        public ServiceResult AfterPay(List <object> entityIdList, Pay pay, bool isPaySucess)
        {
            var sqlList = new List <string>();
            var sql     = string.Empty;
            var result  = ServiceResult.Success;

            //扣除解冻后的虚拟资产(支付成功后,冻结资产减少)
            foreach (var payPair in pay.AccountPayPair)
            {
                if (payPair.Value > 0)
                {
                    var accountSql =
                        $"select FreezeAmount from Asset_Account where MoneyTypeId='{payPair.Key}' and UserId={pay.UserId}";
                    var freezeAmount = RepositoryContext.ExecuteScalar(accountSql).ToDecimal();
                    if (freezeAmount < payPair.Value)
                    {
                        return(ServiceResult.Failure("冻结账户余额不足"));
                    }

                    // 扣除冻结资产
                    sql =
                        $"update Asset_Account set FreezeAmount=FreezeAmount-{payPair.Value} where UserId={pay.UserId} and MoneyTypeId='{payPair.Key}'";
                    sqlList.Add(sql);
                    // 财务记录
                    var intro =
                        $"支付订单(编号{pay.PayExtension.TradeNo})后,减少冻结资产,减少金额{payPair.Value},冻结金额账后{freezeAmount - payPair.Value}";
                    sql =
                        $@"INSERT INTO [dbo].[Asset_Bill]([UserId] ,[OtherUserId] ,[Type]  ,[Flow] ,[MoneyTypeId],[Amount] ,[AfterAmount],[Intro] ,[CreateTime] ,[EntityId])
                                 VALUES
                                 ({pay.UserId},0,{Convert.ToInt16(BillActionType.Shopping)},{
                                Convert.ToInt16(AccountFlow.Spending)
                            },'{payPair.Key}',{-payPair.Value},{freezeAmount - payPair.Value},'{intro}',GETDATE(),{
                                pay.Id
                            })";
                    sqlList.Add(sql);
                }
            }

            //支付成功
            if (isPaySucess)
            {
                // 更新支付账单状态
                sql =
                    $"UPDATE [dbo].[Asset_Pay] SET [Message] = '{pay.Message}',[PayType]={Convert.ToInt16(pay.PayType)}  ,[ResponseSerial] ='{pay.ResponseSerial}' ,[Status] =2 ,[ResponseTime] = '{pay.ResponseTime}' where id={pay.Id} and Status=1";
                sqlList.Add(sql);
                // 插入分润订单
                if (pay.Type == CheckoutType.Order)
                {
                    //更新支付状态
                    var orderStatus = 2; // 代发货
                    if (pay.PayExtension.IsGroupBuy)
                    {
                        orderStatus = 10; // 如果是团购商品,状态改成待分享
                    }

                    sql =
                        $"update  Shop_Order set OrderStatus={orderStatus},PayId='{pay.Id}'  where OrderStatus=1 and id  in  ({entityIdList.ToSqlString()})";
                    sqlList.Add(sql);

                    foreach (var item in entityIdList)
                    {
                        // 如果是管理员代付
                        var orderUserId = pay.UserId;
                        if (pay.PayExtension?.OrderUser?.Id >= 0) // 订单Id使用实际订单Id
                        {
                            orderUserId = pay.PayExtension.OrderUser.Id;
                        }

                        if (pay.PayType == PayType.AdminPay)
                        {
                            var order = EntityDynamicService.GetSingleOrder((long)item);
                            orderUserId = order.UserId;
                        }

                        // 通过支付记录,修改分入订单的触发类型
                        var triggerType = TriggerType.Order;
                        if (Convert.ToInt16(pay.PayExtension.TriggerType) > 0)
                        {
                            triggerType = pay.PayExtension.TriggerType;
                        }

                        //TODO 2019年9月22日  订单完成后分润 重构
                        //var shareOrderConfig = Ioc.Resolve<IAutoConfigService>().GetValue<ShopOrderShareConfig>();
                        //int pending = (int)ShareOrderSystemStatus.Pending;
                        //if (shareOrderConfig.OrderSuccess) {
                        //    pending = (int)ShareOrderSystemStatus.OrderPendingSucess;
                        //}

                        // 分润订单, UserId 有等于 OrderId的可能, 用 EntityId = {trade.Id}) AND TriggerType != 1 联合进行限制
                        sql =
                            $" IF NOT EXISTS(SELECT * FROM Things_Trade WHERE EntityId = {(long)item} AND TriggerType != 1) " +
                            "INSERT INTO [dbo].[Things_Trade]([UserId] ,[Amount] ,[EntityId],[Parameters] ,[Status],[SystemStatus] , [TriggerType] ,[Summary] ,[CreateTime] ,[UpdateTime],[Extension],[ExecuteCount]) " +
                            $"VALUES ({orderUserId} ,{pay.Amount},{(long)item},'{string.Empty}' ,{(int)ShareOrderStatus.Pending} ,{(int)ShareOrderSystemStatus.Pending} ,{(int)triggerType} ,'{string.Empty}' ,'{DateTime.Now}' ,'{DateTime.Now}','',0)";
                        sqlList.Add(sql);

                        // 订单操作记录
                        sql =
                            "INSERT INTO [dbo].[Shop_OrderAction] ([OrderId] ,[ActionUserId] ,[Intro]  ,[Extensions]  ,[CreateTime],[OrderActionType])" +
                            $"VALUES({(long)item},{pay.UserId},'会员支付订单,支付方式为{pay.PayType.GetDisplayName()},支付现金金额为{pay.Amount}','','{DateTime.Now}',102)";
                        sqlList.Add(sql);

                        #region 如果是拼团购买

                        //更新活动记录状态
                        if (pay.PayExtension.IsGroupBuy)
                        {
                            sql = $"update Shop_ActivityRecord set Status=2 where OrderId={item} and Status=1";
                            sqlList.Add(sql);

                            sql =
                                $"  select count(id) from Shop_ActivityRecord where ParentId = (select ParentId from Shop_ActivityRecord where OrderId = {item}) and ParentId> 0";
                            var gourpBuyCount = RepositoryContext.ExecuteScalar(sql).ConvertToLong();
                            if (gourpBuyCount > 0 && gourpBuyCount + 1 == pay.PayExtension.BuyerCount &&
                                pay.PayExtension.BuyerCount > 0)
                            {
                                // 拼团结束(修改订单状态)
                                var parentId = RepositoryContext
                                               .ExecuteScalar($"select ParentId from Shop_ActivityRecord where OrderId={item}")
                                               .ConvertToLong();

                                //将订单状态从待分享修改成待发货
                                sql =
                                    $"update Shop_Order set OrderStatus=2 where Id in( select OrderId from Shop_ActivityRecord where (ParentId={parentId} or Id={parentId}) and Status=2) and OrderStatus=10";
                                sqlList.Add(sql);
                                //修改活动记录支付状态,为成功
                                sql =
                                    $"update  Shop_ActivityRecord set Status=5 where Id in( select Id from Shop_ActivityRecord where (ParentId={parentId} or Id={parentId}) and Status=2)";
                                sqlList.Add(sql);
                            }
                        }

                        #endregion 如果是拼团购买
                    }
                }

                #region 支付时附加的Sql后操作

                var excecuteSqlList = pay.PayExtension?.ExcecuteSqlList;
                if (excecuteSqlList != null)
                {
                    // 动态调用执行
                    var resolveResult = DynamicService.ResolveMethod(excecuteSqlList.ServiceName,
                                                                     excecuteSqlList.Method, entityIdList);
                    if (resolveResult.Item1.Succeeded)
                    {
                        var afterSqlList = (IList <string>)resolveResult.Item2;
                        if (afterSqlList.Count > 0)
                        {
                            sqlList.AddRange(afterSqlList);
                        }
                    }
                }

                #endregion 支付时附加的Sql后操作
            }

            //支付失败
            else
            {
                if (pay.Type == CheckoutType.Order)
                {
                    foreach (var payPair in pay.AccountPayPair)
                    {
                        if (payPair.Value > 0)
                        {
                            // 减少冻结资产
                            var accountSql =
                                $"select Amount from Asset_Account where MoneyTypeId='{payPair.Key}' and UserId={pay.UserId}";
                            var amount = RepositoryContext.ExecuteScalar(accountSql).ToDecimal();
                            // 扣除冻结资产
                            sql =
                                $"update Asset_Account set amount=amount+{payPair.Value} where UserId={pay.UserId} and MoneyTypeId='{payPair.Key}'";
                            sqlList.Add(sql);
                            // 财务记录
                            var intro =
                                $"支付订单(编号{pay.PayExtension.TradeNo})失败后,解冻金额,金额{payPair.Value},解冻账后{amount + payPair.Value}";
                            sql =
                                $@"INSERT INTO [dbo].[Asset_Bill]([UserId] ,[OtherUserId] ,[Type]  ,[Flow] ,[MoneyTypeId],[Amount] ,[AfterAmount],[Intro] ,[CreateTime] ,[EntityId])
                                 VALUES
                                 ({pay.UserId},0,{Convert.ToInt16(BillActionType.Shopping)},{
                                        Convert.ToInt16(AccountFlow.Income)
                                    },'{payPair.Key}',{payPair.Value},{amount + payPair.Value},'{intro}',GETDATE(),{
                                        pay.Id
                                    })";
                            sqlList.Add(sql);
                        }
                    }
                }

                //更新数据库
            }

            var count = RepositoryContext.ExecuteSqlList(sqlList);
            if (count <= 0) //      Ioc. Resolve<IPayService>().Log("订单支付后,数据库相关处理失败", LogsLevel.Error);
            {
                return(ServiceResult.Failure("订单支付后,数据库相关处理失败"));
            }

            // 支付成功后处理
            var afterSuccess = pay.PayExtension?.AfterSuccess;
            if (afterSuccess != null) // 动态调用执行
            {
                DynamicService.ResolveMethod(afterSuccess.ServiceName, afterSuccess.Method, entityIdList);
            }

            return(result);
        }