/// <summary>
        /// 关注职业路径
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="firstId">一级职业路径ID</param>
        /// <returns></returns>
        public RetJsonModel FollowCareerPath(string userId, string firstId)
        {
            var db = DBContext.GetInstance;

            try
            {
                DateTime now       = db.GetDate();
                int      timestamp = FunctionHelper.GetTimestamp();

                RetJsonModel jsonModel = new RetJsonModel();
                jsonModel.time = timestamp;

                var ucData = db.Queryable <MAP_USER_CARREERPATH>()
                             .Where(x => x.USER_ID == userId && x.CP_FIRST_ID == firstId && x.STATE == "A")
                             .First();
                if (ucData == null)
                {
                    MAP_USER_CARREERPATH mapModel = new MAP_USER_CARREERPATH();
                    mapModel.ID = Guid.NewGuid().ToString();
                    mapModel.DATETIME_CREATED = now;
                    mapModel.STATE            = "A";
                    mapModel.USER_ID          = userId;
                    mapModel.CP_FIRST_ID      = firstId;
                    mapModel.TIMESTAMP_INT    = timestamp;
                    db.Insertable(mapModel).ExecuteCommand();

                    jsonModel.status = 1;
                    jsonModel.msg    = "关注成功";
                }
                else
                {
                    db.Deleteable <MAP_USER_CARREERPATH>().Where(x => x.ID == ucData.ID).ExecuteCommand();

                    jsonModel.status = 1;
                    jsonModel.msg    = "取关成功";
                }

                return(jsonModel);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 应用他人的计划
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="planId">计划头ID</param>
        /// <returns></returns>
        public RetJsonModel UserOtherPlan(string userId, string planId, string pathId)
        {
            var db = DBContext.GetInstance;

            try
            {
                DateTime now       = db.GetDate();
                int      timestamp = FunctionHelper.GetTimestamp();

                db.Ado.BeginTran();
                //更新原作者计划头表的被应用次数
                db.Updateable <BUS_PLAN_HEADER>().SetColumns(x => new BUS_PLAN_HEADER
                {
                    SHARED_COUNT = x.SHARED_COUNT + 1
                }).Where(x => x.ID == planId && x.IS_SHARED == 1 && x.STATE == "A").ExecuteCommand();

                //插入新应用人的计划头表
                var otherplan = db.Queryable <BUS_PLAN_HEADER>()
                                .Where(x => x.ID == planId && x.STATE == "A" && x.IS_SHARED == 1)
                                .Select(x => new BUS_PLAN_HEADER
                {
                    STATE          = x.STATE,
                    TIMESTAMP_INT  = timestamp,
                    USER_ID        = userId,
                    STATUS         = 0,
                    FAVOUR_COUNT   = 0,
                    SOURCE_TYPE    = 2,
                    FIRST_PATH_ID  = x.FIRST_PATH_ID,
                    IS_SHARED      = 0,
                    SOURCE_USER_ID = x.USER_ID,
                    SHARED_COUNT   = 0,
                    SHARE_VERSION  = 0
                }).First();
                otherplan.ID = Guid.NewGuid().ToString();
                otherplan.DATETIME_CREATED = now;
                db.Insertable(otherplan).ExecuteCommand();

                //删除仅自己可见的原计划
                var oldplanId = db.Queryable <BUS_PLAN_HEADER>()
                                .Where(x => x.USER_ID == userId && x.FIRST_PATH_ID == pathId && x.STATE == "A")
                                .Select(x => x.ID).First();
                db.Deleteable <BUS_PLAN_HEADER>().Where(x => x.ID == planId && x.STATE == "A").ExecuteCommand();
                db.Deleteable <BUS_PLAN_DETAIL>().Where(x => x.HEADER_ID == planId && x.VISIBLE_TYPE == 1 && x.STATE == "A").ExecuteCommand();

                //插入新应用人的计划明细表
                var otherplandtl = db.Queryable <BUS_PLAN_DETAIL>()
                                   .Where(x => x.HEADER_ID == planId && x.VISIBLE_TYPE == 2 && x.STATE == "A")
                                   .Select(x => new BUS_PLAN_DETAIL
                {
                    STATE         = x.STATE,
                    HEADER_ID     = otherplan.ID,
                    SEQ           = x.SEQ,
                    CONTENT       = x.CONTENT,
                    STATUS        = x.STATUS,
                    VISIBLE_TYPE  = 1,
                    TIMESTAMP_INT = timestamp
                }).ToList();
                otherplandtl.ForEach(x =>
                {
                    x.ID = Guid.NewGuid().ToString();
                    x.DATETIME_CREATED = now;
                });
                db.Insertable(otherplandtl).ExecuteCommand();

                //判断是否已经关注当前职业规划,若未关注则自动关注
                var isFocus = db.Queryable <MAP_USER_CARREERPATH>()
                              .Where(x => x.USER_ID == userId && x.CP_FIRST_ID == pathId && x.STATE == "A")
                              .Count();
                if (isFocus == 0)
                {
                    MAP_USER_CARREERPATH mapModel = new MAP_USER_CARREERPATH();
                    mapModel.ID = Guid.NewGuid().ToString();
                    mapModel.DATETIME_CREATED = now;
                    mapModel.STATE            = "A";
                    mapModel.USER_ID          = userId;
                    mapModel.CP_FIRST_ID      = pathId;
                    mapModel.TIMESTAMP_INT    = timestamp;
                    db.Insertable(mapModel).ExecuteCommand();
                }

                RetJsonModel jsonModel = new RetJsonModel();
                jsonModel.time   = timestamp;
                jsonModel.status = 1;
                jsonModel.msg    = "应用成功";

                db.Ado.CommitTran();
                return(jsonModel);
            }
            catch (Exception ex)
            {
                db.Ado.RollbackTran();
                throw ex;
            }
        }