/// <summary>
        /// 封装顶踩控件
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="objectId">被顶踩的对象id</param>
        /// <param name="userId">被顶踩的对象的UserId,用于限制不能顶踩自己</param>
        /// <param name="tenantTypeId">租户类型id</param>
        /// <param name="mode">双向操作还是单向操作</param>
        /// <param name="style">顶踩的样式</param>
        /// <param name="onSuccessCallBack">js回调函数</param>
        /// <returns></returns>
        public static MvcHtmlString SupportOppose(this HtmlHelper htmlHelper, string tenantTypeId, long objectId, long userId, AttitudeMode mode, AttitudeStyle? style = null, string onSuccessCallBack = null)
        {
            IUser CurrentUser = UserContext.CurrentUser;
            AttitudeService attitudeService = new AttitudeService(tenantTypeId);

            //查询当前登录用户是否顶踩过该对象
            bool? isSupport = null;
            if (CurrentUser != null)
            {
                isSupport = attitudeService.IsSupport(objectId, CurrentUser.UserId);
            }
            htmlHelper.ViewData["isSupport"] = isSupport;

            //查询该对象总的顶踩次数
            Attitude attitude = attitudeService.Get(objectId);
            htmlHelper.ViewData["attitude"] = attitude;

            //向View传递用户设置参数
            htmlHelper.ViewData["tenantTypeId"] = tenantTypeId;
            htmlHelper.ViewData["objectId"] = objectId;
            htmlHelper.ViewData["userId"] = userId;
            htmlHelper.ViewData["mode"] = mode;
            htmlHelper.ViewData["style"] = style;
            htmlHelper.ViewData["onSuccessCallBack"] = onSuccessCallBack;

            //顶踩的全局设置
            htmlHelper.ViewData["attitudeSettings"] = DIContainer.Resolve<ISettingsManager<AttitudeSettings>>().Get();

            return htmlHelper.DisplayForModel("SupportOppose");
        }
Beispiel #2
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="tenantTypeId">租户类型Id</param>
 /// <param name="attitudeRepository">顶踩数据访问</param>
 /// <param name="attitudeRecordRepository">顶踩记录数据访问</param>
 public AttitudeService(string tenantTypeId, IAttitudeRepository attitudeRepository, IAttitudeRecordRepository attitudeRecordRepository, AttitudeMode mode = AttitudeMode.Bidirection)
 {
     this.mode = mode;
     this.tenantTypeId = tenantTypeId;
     this.attitudeRepository = attitudeRepository;
     this.attitudeRecordRepository = attitudeRecordRepository;
 }
Beispiel #3
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="tenantTypeId">租户类型Id</param>
 /// <param name="attitudeRepository">顶踩数据访问</param>
 /// <param name="attitudeRecordRepository">顶踩记录数据访问</param>
 public AttitudeService(string tenantTypeId, IAttitudeRepository attitudeRepository, IAttitudeRecordRepository attitudeRecordRepository, AttitudeMode mode = AttitudeMode.Bidirection)
 {
     this.mode                     = mode;
     this.tenantTypeId             = tenantTypeId;
     this.attitudeRepository       = attitudeRepository;
     this.attitudeRecordRepository = attitudeRecordRepository;
 }
Beispiel #4
0
 public AttitudeStateButton(FlightComputerGUI computerin, AttitudeMode modein, string namein)
 {
     this.computer = computerin;
     this.mode     = modein;
     this.name     = namein;
     if (mode == AttitudeMode.SURFACE)
     {
         HDG  = PIT = 90;
         HDGs = PITs = HDG.ToString();
         ROL  = 0;
         ROLs = ROL.ToString();
     }
 }
 public AttitudeStateButton(FlightComputerGUI computerin, AttitudeMode modein, string namein)
 {
     this.computer = computerin;
     this.mode = modein;
     this.name = namein;
     if (mode == AttitudeMode.SURFACE)
     {
         HDG = PIT = 90;
         HDGs = PITs = HDG.ToString();
         ROL = 0;
         ROLs = ROL.ToString();
     }
 }
Beispiel #6
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="tenantTypeId">租户类型Id</param>
 /// <param name="mode">双向或单向模式</param>
 public AttitudeService(string tenantTypeId, AttitudeMode mode = AttitudeMode.Bidirection)
     : this(tenantTypeId, new AttitudeRepository(), new AttitudeRecordRepository(), mode)
 {
 }
Beispiel #7
0
        public void SetMode(AttitudeMode mode, AttitudeButtonState input)
        {
            this.attitideActive = input.Active;
            if (!input.Active)
            {
                return;
            }
            switch (mode)
            {
            case AttitudeMode.MANEUVERNODE:
                if (input.MN != Quaternion.identity)
                {
                    Target    = input.MN;
                    Reference = AttitudeReference.INERTIAL;
                }
                else
                {
                    Target    = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
                    Reference = AttitudeReference.INERTIAL;
                }
                break;

            case AttitudeMode.KILLROT:
                Target    = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
                Reference = AttitudeReference.INERTIAL;
                break;

            case AttitudeMode.PROGRADE:
                Target    = Direction(Vector3d.forward, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.RETROGRADE:
                Target    = Direction(Vector3d.back, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.SRF_PROGRADE:
                Target    = Direction(Vector3d.forward, AttitudeReference.SURFACE_VELOCITY);
                Reference = AttitudeReference.SURFACE_VELOCITY;
                break;

            case AttitudeMode.SRF_RETROGRADE:
                Target    = Direction(Vector3d.back, AttitudeReference.SURFACE_VELOCITY);
                Reference = AttitudeReference.SURFACE_VELOCITY;
                break;

            case AttitudeMode.NORMAL_PLUS:
                Target    = Direction(Vector3d.left, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.NORMAL_MINUS:
                Target    = Direction(Vector3d.right, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.RADIAL_PLUS:
                Target    = Direction(Vector3d.up, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.RADIAL_MINUS:
                Target    = Direction(Vector3d.down, AttitudeReference.ORBIT);
                Reference = AttitudeReference.ORBIT;
                break;

            case AttitudeMode.SURFACE:
                if (input.USEROL)
                {
                    Target = Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Quaternion.AngleAxis(-input.ROL, Vector3.forward);
                }
                else
                {
                    Target = Direction(Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Vector3d.forward, AttitudeReference.SURFACE_NORTH);
                }
                Reference = AttitudeReference.SURFACE_NORTH;
                break;
            }
        }
Beispiel #8
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="tenantTypeId">租户类型Id</param>
 /// <param name="mode">双向或单向模式</param>
 public AttitudeService(string tenantTypeId, AttitudeMode mode = AttitudeMode.Bidirection)
     : this(tenantTypeId, new AttitudeRepository(), new AttitudeRecordRepository(), mode)
 {
 }
 public void SetMode(AttitudeMode mode, AttitudeButtonState input)
 {
     this.attitideActive = input.Active;
     if (!input.Active)
     {
         return;
     }
     switch (mode)
     {
         case AttitudeMode.MANEUVERNODE:
             if (input.MN != Quaternion.identity)
             {
                 Target = input.MN;
                 Reference = AttitudeReference.INERTIAL;
             }
             else
             {
                 Target = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
                 Reference = AttitudeReference.INERTIAL;
             }
             break;
         case AttitudeMode.KILLROT:
             Target = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
             Reference = AttitudeReference.INERTIAL;
             break;
         case AttitudeMode.PROGRADE:
             Target = Direction(Vector3d.forward, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.RETROGRADE:
             Target = Direction(Vector3d.back, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.SRF_PROGRADE:
             Target = Direction(Vector3d.forward, AttitudeReference.SURFACE_VELOCITY);
             Reference = AttitudeReference.SURFACE_VELOCITY;
             break;
         case AttitudeMode.SRF_RETROGRADE:
             Target = Direction(Vector3d.back, AttitudeReference.SURFACE_VELOCITY);
             Reference = AttitudeReference.SURFACE_VELOCITY;
             break;
         case AttitudeMode.NORMAL_PLUS:
             Target = Direction(Vector3d.left, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.NORMAL_MINUS:
             Target = Direction(Vector3d.right, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.RADIAL_PLUS:
             Target = Direction(Vector3d.up, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.RADIAL_MINUS:
             Target = Direction(Vector3d.down, AttitudeReference.ORBIT);
             Reference = AttitudeReference.ORBIT;
             break;
         case AttitudeMode.SURFACE:
             if (input.USEROL)
                 Target = Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Quaternion.AngleAxis(-input.ROL, Vector3.forward);
             else
                 Target = Direction(Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Vector3d.forward, AttitudeReference.SURFACE_NORTH);
             Reference = AttitudeReference.SURFACE_NORTH;
             break;
     }
 }
Beispiel #10
0
        public JsonResult _SupportOppose(string tenantTypeId, long objectId, long userId, AttitudeMode mode, bool operation)
        {
            IUser currentUser = UserContext.CurrentUser;

            //未登录用户不能操作
            if (currentUser == null)
            {
                return Json(new StatusMessageData(StatusMessageType.Error, "未登录用户不能操作!"));
            }

            //当前用户不能顶踩自己
            if (currentUser.UserId == userId)
            {
                return Json(new StatusMessageData(StatusMessageType.Error, "不能顶踩自己!"));
            }

            AttitudeService attitudeService = new AttitudeService(tenantTypeId, mode);
            AttitudeSettings attitudeSettings = attitudeSettingsManager.Get();

            //操作结果
            bool success = false;
            bool? isSupport = attitudeService.IsSupport(objectId, currentUser.UserId);

            if (mode == AttitudeMode.Bidirection)
            {
                //对于双向操作,已顶踩过的不能再进行同方向操作
                if (isSupport.HasValue && isSupport.Value == operation)
                {
                    return Json(new StatusMessageData(StatusMessageType.Error, "不能进行重复操作!"));
                }

                //对于双向操作,如果不可修改,也不可以进行反方向操作
                if (!attitudeSettings.IsModify && isSupport.HasValue && isSupport.Value != operation)
                {
                    return Json(new StatusMessageData(StatusMessageType.Error, "不能修改原有的操作!"));
                }

                if (operation)
                {
                    success = attitudeService.Support(objectId, currentUser.UserId);
                }
                else
                {
                    success = attitudeService.Oppose(objectId, currentUser.UserId);
                }
            }
            else
            {
                //对于单向操作,如果已经操作过,并且不可取消,则直接返回错误提示
                if (isSupport.HasValue && !attitudeSettings.EnableCancel)
                {
                    return Json(new StatusMessageData(StatusMessageType.Error, "不能取消原有的操作!"));
                }

                if (!isSupport.HasValue || !isSupport.Value)
                {
                    success = attitudeService.Support(objectId, currentUser.UserId);
                }
                else
                {
                    success = attitudeService.Oppose(objectId, currentUser.UserId);
                }
            }

            //返回操作结果
            if (success)
            {
                return Json(new StatusMessageData(StatusMessageType.Success, "操作成功!"));
            }
            else
            {
                return Json(new StatusMessageData(StatusMessageType.Error, "操作失败,请稍后再试!"));
            }
        }
Beispiel #11
0
        /// <summary>
        /// 对操作对象进行顶操作
        /// </summary>
        /// <param name="objectId">操作对象Id</param>
        /// <param name="tenantTypeId">租户类型Id</param>
        /// <param name="userId">操作用户Id</param>
        /// <param name="mode">顶踩的操作模式</param>
        /// <returns>是否操作成功,Ture-成功</returns>
        public bool Support(long objectId, string tenantTypeId, long userId, AttitudeMode mode = AttitudeMode.Bidirection)
        {
            Database dao = CreateDAO();

            dao.OpenSharedConnection();
            AttitudeSettings            attitudeSettings            = attitudeSettingsManager.Get();
            AttitudeOnlySupportSettings attitudeOnlySupportSettings = attitudeOnlySupportSettingsManager.Get();
            bool returnValue = false;

            var sql = Sql.Builder;

            sql.Where("ObjectId = @0 and  TenantTypeId = @1", objectId, tenantTypeId);
            Attitude entity = dao.FirstOrDefault <Attitude>(sql);

            if (entity == null)
            {
                entity = Attitude.New();
                entity.TenantTypeId = tenantTypeId;
                entity.ObjectId     = objectId;
                dao.Insert(entity);
            }

            #region 判断是否双向

            if (AttitudeMode.Bidirection == mode)
            {
                #region 判断是否可修改

                //判断是否可修改
                if (attitudeSettings.IsModify)
                {
                    #region 判断是否取消

                    //判断是否可取消
                    if (attitudeSettings.EnableCancel)
                    {
                        IList <Sql> sqls        = new List <Sql>();
                        int         affectCount = 0;
                        //判断是否有过操作记录
                        bool?isSupport = IsSupport(objectId, tenantTypeId, userId);
                        switch (isSupport)
                        {   //顶过记录
                        case true:
                            returnValue = false;
                            break;

                        //踩过记录
                        case false:
                            sqls.Add(Sql.Builder.Append(@"DELETE FROM tn_AttitudeRecords WHERE (UserId = @0) AND (TenantTypeId = @1) and (ObjectId = @2)"
                                                        , userId, tenantTypeId, objectId));
                            sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes
                                                              SET OpposeCount = OpposeCount - 1, Comprehensive = Comprehensive - @0
                                                              WHERE (ObjectId = @1) AND (TenantTypeId = @2)"
                                                        , attitudeSettings.OpposeWeights, objectId, tenantTypeId));

                            using (var transaction = dao.GetTransaction())
                            {
                                affectCount = dao.Execute(sqls);
                                transaction.Complete();
                            }

                            if (affectCount > 0)
                            {
                                if (RealTimeCacheHelper.EnableCache)
                                {
                                    EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);

                                    //更新缓存
                                    Get(objectId, tenantTypeId, false);

                                    //清除顶踩状态缓存
                                    cacheService.Remove(GetCacheKey_IsSupport(objectId, tenantTypeId, userId));
                                }
                                returnValue = true;
                            }
                            else
                            {
                                returnValue = false;
                            }
                            break;

                        default:
                            sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes
                                                              SET SupportCount = SupportCount + 1, Comprehensive = Comprehensive + @0
                                                              WHERE (ObjectId = @1) AND (TenantTypeId = @2)"
                                                        , attitudeSettings.SupportWeights, objectId, tenantTypeId));
                            sqls.Add(Sql.Builder.Append(@"INSERT INTO tn_AttitudeRecords (ObjectId, UserId, TenantTypeId, IsSupport) VALUES (@0, @1, @2, 1)"
                                                        , objectId, userId, tenantTypeId));

                            using (var transaction = dao.GetTransaction())
                            {
                                affectCount = dao.Execute(sqls);
                                transaction.Complete();
                            }
                            if (affectCount > 0)
                            {
                                if (RealTimeCacheHelper.EnableCache)
                                {
                                    EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                    //更新缓存
                                    Get(objectId, tenantTypeId, false);

                                    cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                                }

                                returnValue = true;
                            }
                            else
                            {
                                returnValue = false;
                            }

                            break;
                        }
                    }
                    else
                    {
                        IList <Sql> sqls        = new List <Sql>();
                        int         affectCount = 0;
                        //判断是否有过操作记录
                        bool?isSupport = IsSupport(objectId, tenantTypeId, userId);
                        switch (isSupport)
                        {  //已经顶过
                        case true:
                            returnValue = false;
                            break;

                        //已经踩过
                        case false:
                            sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes
                                                              SET  OpposeCount = OpposeCount - 1 ,SupportCount = SupportCount + 1, Comprehensive = Comprehensive + @0 - @1
                                                              WHERE (ObjectId = @2) AND (TenantTypeId = @3)"
                                                        , attitudeSettings.SupportWeights, attitudeSettings.OpposeWeights, objectId, tenantTypeId
                                                        ));
                            sqls.Add(Sql.Builder.Append(@"UPDATE tn_AttitudeRecords
                                                              SET IsSupport =1
                                                              WHERE(ObjectId = @0) AND (UserId = @1) AND (TenantTypeId = @2)"
                                                        , objectId, userId, tenantTypeId));

                            using (var transaction = dao.GetTransaction())
                            {
                                affectCount = dao.Execute(sqls);
                                transaction.Complete();
                            }
                            if (affectCount > 0)
                            {
                                if (RealTimeCacheHelper.EnableCache)
                                {
                                    EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                    //更新缓存
                                    Get(objectId, tenantTypeId, false);
                                    cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                                }

                                returnValue = true;
                            }
                            else
                            {
                                returnValue = false;
                            }
                            break;

                        default:
                            //没有操作过的记录就  添加记录
                            sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes
                                                              SET SupportCount = SupportCount + 1, Comprehensive =  Comprehensive + @0
                                                              WHERE (ObjectId = @1) AND (TenantTypeId = @2)"
                                                        , attitudeSettings.SupportWeights, objectId, tenantTypeId));
                            sqls.Add(Sql.Builder.Append(@"INSERT INTO tn_AttitudeRecords (ObjectId, UserId, TenantTypeId, IsSupport) VALUES (@0, @1, @2, 1)"
                                                        , objectId, userId, tenantTypeId));
                            using (var transaction = dao.GetTransaction())
                            {
                                affectCount = dao.Execute(sqls);
                                transaction.Complete();
                            }
                            if (affectCount > 0)
                            {
                                if (RealTimeCacheHelper.EnableCache)
                                {
                                    EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                    //更新缓存
                                    Get(objectId, tenantTypeId, false);
                                    cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                                }

                                returnValue = true;
                            }
                            else
                            {
                                returnValue = false;
                            }
                            break;
                        }
                    }

                    #endregion 判断是否取消
                }
                else
                {
                    //先判断一下是否有顶踩记录
                    IList <Sql> sqls        = new List <Sql>();
                    int         affectCount = 0;
                    //判断是否有过操作记录
                    bool?isSupport = IsSupport(objectId, tenantTypeId, userId);
                    if (isSupport == null)
                    {
                        //没有记录就  添加记录
                        sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes SET SupportCount = SupportCount + 1, Comprehensive = Comprehensive + @0
                                                                        WHERE (ObjectId = @2) AND (TenantTypeId = @3)"
                                                    , attitudeSettings.SupportWeights, attitudeSettings.OpposeWeights, objectId, tenantTypeId
                                                    ));
                        sqls.Add(Sql.Builder.Append(@"INSERT INTO tn_AttitudeRecords (ObjectId, UserId, TenantTypeId, IsSupport) VALUES (@0, @1, @2, 1)"
                                                    , objectId, userId, tenantTypeId));
                        using (var transaction = dao.GetTransaction())
                        {
                            affectCount = dao.Execute(sqls);
                            transaction.Complete();
                        }
                        if (affectCount > 0)
                        {
                            if (RealTimeCacheHelper.EnableCache)
                            {
                                EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                //更新缓存
                                Get(objectId, tenantTypeId, false);
                                cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                            }

                            returnValue = true;
                        }
                        else
                        {
                            returnValue = false;
                        }
                    }
                }

                #endregion 判断是否可修改
            }
            else
            {  //单向
                #region 是否可取消操作

                //是否可取消操作
                if (attitudeOnlySupportSettings.IsCancel)
                {
                    IList <Sql> sqls        = new List <Sql>();
                    int         affectCount = 0;
                    //判断是否有过操作记录
                    bool?isSupport = IsSupport(objectId, tenantTypeId, userId);
                    switch (isSupport)
                    {
                    //顶过记录
                    case true:
                        sqls.Add(Sql.Builder.Append(@"DELETE FROM tn_AttitudeRecords WHERE UserId = @0 and TenantTypeId = @1 and ObjectId = @2"
                                                    , userId, tenantTypeId, objectId));
                        sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes
                                                          SET SupportCount = SupportCount-1, Comprehensive = SupportCount-1
                                                          WHERE ObjectId = @0 and TenantTypeId = @1", objectId, tenantTypeId));
                        using (var transaction = dao.GetTransaction())
                        {
                            affectCount = dao.Execute(sqls);
                            transaction.Complete();
                        }
                        if (affectCount > 0)
                        {
                            if (RealTimeCacheHelper.EnableCache)
                            {
                                EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);    //更新缓存
                                Get(objectId, tenantTypeId, false);

                                //清除顶踩状态缓存
                                cacheService.Remove(GetCacheKey_IsSupport(objectId, tenantTypeId, userId));
                            }

                            returnValue = true;
                        }
                        else
                        {
                            returnValue = false;
                        }
                        break;

                    default:

                        sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes SET SupportCount = SupportCount+1, Comprehensive = SupportCount+1
                                                                        WHERE (ObjectId = @0) AND (TenantTypeId = @1)"
                                                    , objectId, tenantTypeId));
                        sqls.Add(Sql.Builder.Append(@"INSERT INTO tn_AttitudeRecords (ObjectId, UserId, TenantTypeId, IsSupport) VALUES (@0, @1, @2, 1)"
                                                    , objectId, userId, tenantTypeId));
                        using (var transaction = dao.GetTransaction())
                        {
                            affectCount = dao.Execute(sqls);
                            transaction.Complete();
                        }
                        if (affectCount > 0)
                        {
                            if (RealTimeCacheHelper.EnableCache)
                            {
                                EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                //更新缓存
                                Get(objectId, tenantTypeId, false);
                                cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                            }

                            returnValue = true;
                        }
                        else
                        {
                            returnValue = false;
                        }
                        break;
                    }
                }
                else
                {
                    //不可取消的单向操作
                    IList <Sql> sqls        = new List <Sql>();
                    int         affectCount = 0;
                    //判断是否有过操作记录
                    bool?isSupport = IsSupport(objectId, tenantTypeId, userId);
                    if (isSupport == null)
                    {
                        sqls.Add(Sql.Builder.Append(@"UPDATE tn_Attitudes SET SupportCount = SupportCount + 1, Comprehensive = SupportCount + 1
                                                      WHERE (ObjectId = @0) AND (TenantTypeId = @1)"
                                                    , objectId, tenantTypeId));
                        sqls.Add(Sql.Builder.Append(@"INSERT INTO tn_AttitudeRecords (ObjectId, UserId, TenantTypeId, IsSupport) VALUES (@0, @1, @2, 1)"
                                                    , objectId, userId, tenantTypeId));
                        using (var transaction = dao.GetTransaction())
                        {
                            affectCount = dao.Execute(sqls);
                            transaction.Complete();
                        }
                        if (affectCount > 0)
                        {
                            if (RealTimeCacheHelper.EnableCache)
                            {
                                EntityData.ForType(typeof(AttitudeRecord)).RealTimeCacheHelper.IncreaseAreaVersion("ObjectId", objectId);
                                //更新缓存
                                Get(objectId, tenantTypeId, false);
                                cacheService.Set(GetCacheKey_IsSupport(objectId, tenantTypeId, userId), true, CachingExpirationType.SingleObject);
                            }

                            returnValue = true;
                        }
                        else
                        {
                            returnValue = false;
                        }
                    }
                }

                #endregion 是否可取消操作
            }

            #endregion 判断是否双向

            dao.CloseSharedConnection();
            return(returnValue);
        }
        /// <summary>
        /// 封装顶踩控件
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="objectId">被顶踩的对象id</param>
        /// <param name="userId">被顶踩的对象的UserId,用于限制不能顶踩自己</param>
        /// <param name="tenantTypeId">租户类型id</param>
        /// <param name="mode">双向操作还是单向操作</param>
        /// <param name="style">顶踩的样式</param>
        /// <param name="onSuccessCallBack">js回调函数</param>
        /// <returns></returns>
        public static MvcHtmlString SupportOppose(this HtmlHelper htmlHelper, string tenantTypeId, long objectId, long userId, AttitudeMode mode, AttitudeStyle?style = null, string onSuccessCallBack = null)
        {
            IUser           CurrentUser     = UserContext.CurrentUser;
            AttitudeService attitudeService = new AttitudeService(tenantTypeId);

            //查询当前登录用户是否顶踩过该对象
            bool?isSupport = null;

            if (CurrentUser != null)
            {
                isSupport = attitudeService.IsSupport(objectId, CurrentUser.UserId);
            }
            htmlHelper.ViewData["isSupport"] = isSupport;

            //查询该对象总的顶踩次数
            Attitude attitude = attitudeService.Get(objectId);

            htmlHelper.ViewData["attitude"] = attitude;

            //向View传递用户设置参数
            htmlHelper.ViewData["tenantTypeId"]      = tenantTypeId;
            htmlHelper.ViewData["objectId"]          = objectId;
            htmlHelper.ViewData["userId"]            = userId;
            htmlHelper.ViewData["mode"]              = mode;
            htmlHelper.ViewData["style"]             = style;
            htmlHelper.ViewData["onSuccessCallBack"] = onSuccessCallBack;

            //顶踩的全局设置
            htmlHelper.ViewData["attitudeSettings"] = DIContainer.Resolve <IAttitudeSettingsManager>().Get();
            ;

            return(htmlHelper.DisplayForModel("SupportOppose"));
        }
Beispiel #13
0
 ///// <summary>
 ///// 顶踩
 ///// </summary>
 ///// <returns></returns>
 public string _SupportOppose(string tenantTypeId, long objectId, long userId, AttitudeMode mode, bool operation)
 {
     return CachedUrlHelper.Action("_SupportOppose", "Channel", CommonAreaName, new RouteValueDictionary { { "tenantTypeId", tenantTypeId }, { "objectId", objectId }, { "userId", userId }, { "mode", mode }, { "operation", operation } });
 }