public IActionResult change_job_state(string id, bool state = true)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var jobtype = dbContext.job_type.Where(x => x.uuid.Equals(id)).FirstOrDefault();
                if (jobtype != null && jobtype.user_id.Equals(signedUser.user_uuid))
                {
                    jobtype.is_enabled = state;
                    dbContext.SaveChanges();
                    return(Content("修改成功"));
                }
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            return(Content("修改失败"));
        }
        /// <summary>
        /// 设置用户的笔试题分数
        /// </summary>
        /// <param name="id"></param>
        /// <param name="score"></param>
        /// <returns></returns>
        public IActionResult set_user_score(string id, int score = 0)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "或者参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var m = dbContext.user_score.Where(x => x.id.Equals(id)).FirstOrDefault();
                if (m != null)
                {
                    m.eq_score = score;
                    dbContext.SaveChanges();
                }
                return(Content("设置成功"));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        public IActionResult AddJobType(string job_name)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(job_name))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = "参数错误"
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            try
            {
                job_type jt = new job_type()
                {
                    job_name = job_name, addtime = DateTime.Now, user_id = signedUser.user_uuid, uuid = UUID.getUUID()
                };
                dbContext.job_type.Add(jt);
                dbContext.SaveChanges();
                var list = dbContext.job_type.Where(x => x.user_id.Equals(signedUser.user_uuid)).ToList();
                return(Json(list));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 分页显示测试题
        /// </summary>
        /// <param name="job_id"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public IActionResult get_exam_data(string job_id, int page = 1)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(job_id) || page < 1)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(job_id) + "或者" + nameof(page) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var p     = new EFPaging <exam_data>();
                var q     = dbContext.exam_data.Where(x => x.job_id.Equals(job_id) && x.user_id.Equals(signedUser.user_uuid)).OrderByDescending(x => x.is_enabled).OrderBy(x => x.exam_type);
                var list  = p.getPageList(q, "/api/company/get_exam_data?job_id=" + job_id, page);
                var pages = p.pageAjaxHref;

                return(Json(new { list, pages }));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 获取邀请码列表
        /// </summary>
        /// <returns></returns>
        public IActionResult get_invitation_code_list()
        {
            ErrorRequestData err = null;

            try
            {
                var list = from s in dbContext.user_score
                           join t in dbContext.job_type on s.job_id equals t.uuid
                           join u in dbContext.recruit_user on t.user_id equals u.uuid
                           where s.user_id.Equals(signedUser.user_uuid) && s.invitation_code.Length > 0
                           orderby s.addtime
                           select new
                {
                    u.company_name,
                    u.company_address,
                    u.company_contact,
                    s.invitation_code,
                    t.job_name
                };
                return(Json(list.ToList()));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 获取所有的岗位列表
        /// </summary>
        /// <returns></returns>
        public IActionResult get_job_names()
        {
            ErrorRequestData err = null;

            try
            {
                var list = dbContext.job_type.Where(x => x.user_id.Equals(signedUser.user_uuid)).OrderByDescending(x => x.is_enabled).ToList();
                return(Json(list));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 根据 user_score 的id获取 user_answer 所有答题的记录
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IActionResult get_user_answer_by_id(string id)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "或者参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                // 此处应改为联合查询, 加载测试题的数据
                var list = from a in dbContext.user_answer
                           join e in dbContext.exam_data on a.exam_id equals e.id
                           where a.user_score_id.Equals(id)
                           orderby e.exam_type
                           select new
                {
                    a.id,
                    a.addtime,
                    a.exam_answer,
                    a.exam_type,
                    e.exam_content,
                    e.exam_cq_anwser,
                    e.exam_eq_answer
                };
                return(Json(list.ToList()));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 根据岗位id查找 用户的测试题答案
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IActionResult get_user_answer(string id, int page = 1)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id) || page < 1)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "或者参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var q = from s in dbContext.user_score
                        join u in dbContext.recruit_user on s.user_id equals u.uuid
                        where s.job_id == id
                        select new user_score_info
                {
                    uname           = u.uname,
                    cq_score        = s.cq_score,
                    eq_score        = s.eq_score,
                    invitation_code = s.invitation_code,
                    addtime         = s.addtime,
                    phone           = u.phone,
                    email           = u.email,
                    id = s.id
                };
                var p     = new EFPaging <user_score_info>(); // 需要定义视图模型
                var list  = p.getPageList(q, "/api/company/get_user_answer/" + id, page);
                var pages = p.pageAjaxHref;
                return(Json(new { list, pages }));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        public IActionResult add_exam_data(exam_data model)
        {
            ErrorRequestData err = null;

            if (model == null)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(model) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            if ("cq".Equals(model.exam_type))
            {
                if (string.IsNullOrWhiteSpace(model.exam_content) ||
                    string.IsNullOrWhiteSpace(model.exam_cq_anwser) ||
                    string.IsNullOrWhiteSpace(model.anwser_a) ||
                    string.IsNullOrWhiteSpace(model.anwser_b) ||
                    string.IsNullOrWhiteSpace(model.anwser_c) ||
                    string.IsNullOrWhiteSpace(model.anwser_d))
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 401, ErrorMessage = nameof(model) + "参数错误"
                    };
                    return(new ContentResult()
                    {
                        Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                    });
                }
                model.exam_eq_answer = string.Empty;
            }
            else if ("eq".Equals(model.exam_type))
            {
                if (string.IsNullOrWhiteSpace(model.exam_content) || string.IsNullOrWhiteSpace(model.exam_eq_answer))
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 401, ErrorMessage = nameof(model) + "参数错误"
                    };
                    return(new ContentResult()
                    {
                        Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                    });
                }
                model.exam_cq_anwser = string.Empty;
                model.anwser_a       = string.Empty;
                model.anwser_b       = string.Empty;
                model.anwser_c       = string.Empty;
                model.anwser_d       = string.Empty;
            }
            try
            {
                model.user_id = signedUser.user_uuid;
                dbContext.exam_data.Add(model);
                dbContext.SaveChanges();
                return(Content("添加成功"));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        public IActionResult Login([FromForm] string uname, [FromForm] string pwd)
        {
            var err = new ErrorRequestData();

            err.Description = HttpContext.Request.GetAbsoluteUri();

            if (string.IsNullOrWhiteSpace(uname) || string.IsNullOrEmpty(pwd))
            {
                err.HttpStatusCode = 401;
                err.ErrorType      = ConstantTypeString.TokenError;
                err.ErrorMessage   = "参数错误";
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }

            var user = dbContext.recruit_user.Where(x => (x.nickname.Equals(uname) || x.email.Equals(uname) || x.phone.Equals(uname)) && x.pwd.Equals(Sha1.getSha1String(pwd))).FirstOrDefault();

            if (user == null)
            {
                err.HttpStatusCode = 403;
                err.ErrorType      = ConstantTypeString.NormalError;
                err.ErrorMessage   = "用户或者密码错误";
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }

            try
            {
                var guid = Guid.NewGuid().ToString();   // 唯一标识

                var payload = new Dictionary <string, object>()
                {
                    { "jti", guid }
                };

                string            secret     = jwtTokenConfig.Secret;
                IJwtAlgorithm     algorithm  = new HMACSHA256Algorithm();
                IJsonSerializer   serializer = new JsonNetSerializer();
                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                IJwtEncoder       encoder    = new JwtEncoder(algorithm, serializer, urlEncoder);

                var      jwtToken = encoder.Encode(payload, secret); // 生成jwtToken
                DateTime utcNow   = DateTime.UtcNow;

                // 可以添加多个role , 但是role type 必须相同, 如果是正式的产品, 这里需要单独提取一张权限表, 仅做测试阶段使用
                var userClaims = new List <Claim>();
                if (user.auth_role.Equals("admin"))
                {
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), user.auth_role));
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), "user"));
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), "company"));
                }
                else if (user.auth_role.Equals("company"))
                {
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), user.auth_role));
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), "user"));
                }
                else
                {
                    userClaims.Add(new Claim(nameof(TokenAttribute.role), user.auth_role));
                }

                // 将用户token保存到内存缓存
                MemoryCacheService.SetChacheValue(guid,
                                                  new SignedUser()
                {
                    guid        = guid,
                    Audience    = jwtTokenConfig.Audience,
                    Issuer      = jwtTokenConfig.Issuer,
                    utc_time    = utcNow,
                    user_token  = jwtToken,
                    user_uuid   = user.uuid,
                    user_claims = userClaims,
                    Validity    = jwtTokenConfig.Validity,
                    TokenType   = jwtTokenConfig.TokenType
                });

                // 将token写入响应流中
                var response = new { token = jwtToken, expires_in = jwtTokenConfig.Validity, token_type = jwtTokenConfig.TokenType, user.auth_role };
                return(Json(response));
            }
            catch (Exception ex)
            {
                err.HttpStatusCode = 500;
                err.ErrorType      = ConstantTypeString.TokenError;
                err.ErrorMessage   = ex.Message;
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        public IActionResult get_company_list(int page = 1)
        {
            ErrorRequestData err = null;

            if (page < 1)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(page) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var p     = new EFPaging <recruit_user>(); // 查询公司数据
                var q     = dbContext.recruit_user.Where(x => x.auth_role.Equals("company")).OrderBy(x => x.addtime);
                var temp  = p.getPageList(q, "/api/Recruit/get_company_list", page);
                var pages = p.pageAjaxHref;

                List <object> list = new List <object>();
                temp.ForEach(x =>
                {
                    var a = new
                    {
                        x.company_address,
                        x.company_code,
                        x.company_contact,
                        x.company_name,
                        x.uuid,
                        jobs = dbContext.job_type.Where(m => m.user_id.Equals(x.uuid) && m.is_enabled == true)
                               .Select(t => new { t.uuid, t.job_name }).ToList(),
                        job_id = string.Empty   // 绑定下拉框的字段, 占位用的
                    };
                    list.Add(a);
                });

                return(Json(new { list, pages }));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 提交测试题答案
        /// </summary>
        /// <param name="job_id"></param>
        /// <param name="list"></param>
        /// <returns></returns>
        public IActionResult submit_exam_data(string job_id, List <user_answer> list)
        {
            ErrorRequestData err = null;

            if (list != null && list.Count > 0 && !string.IsNullOrWhiteSpace(job_id))
            {
                try
                {
                    var score = new user_score()
                    {
                        job_id = job_id, user_id = signedUser.user_uuid
                    };
                    var exam_dict = dbContext.exam_data.Where(x => x.job_id.Equals(job_id)).Select(x => new { x.id, x.exam_type, x.exam_cq_anwser }).ToDictionary(x => x.id);
                    list.ForEach(x =>
                    {
                        if (exam_dict.ContainsKey(x.exam_id))
                        {
                            if (x.exam_type.Equals("cq") && x.exam_answer.Equals(exam_dict[x.exam_id].exam_cq_anwser))
                            {
                                ++score.cq_score;
                            }
                            x.id            = UUID.getUUID();
                            x.user_score_id = score.id;
                            dbContext.user_answer.Add(x);
                        }
                    });
                    dbContext.user_score.Add(score);
                    dbContext.SaveChanges();
                    return(Content("提交成功"));
                }
                catch (DbUpdateException dbex)
                {
                    if (dbex.InnerException is PostgresException npge)
                    {
                        err = new ErrorRequestData()
                        {
                            HttpStatusCode = 500, ErrorMessage = npge.Detail
                        };
                    }
                    else
                    {
                        err = new ErrorRequestData()
                        {
                            HttpStatusCode = 500, ErrorMessage = dbex.Message
                        };
                    }
                    return(new ContentResult()
                    {
                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                    });
                }
                catch (Exception ex)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = ex.Message
                    };
                    return(new ContentResult()
                    {
                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                    });
                }
            }
            else
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(job_id) + "或" + nameof(list) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }
        }
        public IActionResult search_company_list(string com_type, string keywords, int page = 1)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(com_type) || string.IsNullOrWhiteSpace(keywords))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(com_type) + "或" + nameof(keywords) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                List <recruit_user> temp = null;
                var pages = string.Empty;
                var p     = new EFPaging <recruit_user>();
                if (com_type.Equals("com_name"))
                {
                    var q = dbContext.recruit_user.Where(x => x.auth_role.Equals("company") && x.company_name.Contains(keywords)).OrderBy(x => x.addtime);
                    temp  = p.getPageList(q, string.Format("/api/Recruit/search_company_list?com_type={0}&keywords={1}", com_type, keywords), page);
                    pages = p.pageAjaxHref;
                }
                else if (com_type.Equals("com_code"))
                {
                    var q = dbContext.recruit_user.Where(x => x.auth_role.Equals("company") && x.company_code.Contains(keywords)).OrderBy(x => x.addtime);
                    temp  = p.getPageList(q, string.Format("/api/Recruit/search_company_list?com_type={0}&keywords={1}", com_type, keywords), page);
                    pages = p.pageAjaxHref;
                }
                else if (com_type.Equals("com_addr"))
                {
                    var q = dbContext.recruit_user.Where(x => x.auth_role.Equals("company") && x.company_address.Contains(keywords)).OrderBy(x => x.addtime);
                    temp  = p.getPageList(q, string.Format("/api/Recruit/search_company_list?com_type={0}&keywords={1}", com_type, keywords), page);
                    pages = p.pageAjaxHref;
                }


                List <object> list = new List <object>();
                temp.ForEach(x =>
                {
                    var a = new
                    {
                        x.company_address,
                        x.company_code,
                        x.company_contact,
                        x.company_name,
                        x.uuid,
                        jobs = dbContext.job_type.Where(m => m.user_id.Equals(x.uuid) && m.is_enabled == true)
                               .Select(t => new { t.uuid, t.job_name }).ToList(),
                        job_id = string.Empty   // 绑定下拉框的字段, 占位用的
                    };
                    list.Add(a);
                });

                return(Json(new { list, pages }));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        /// <summary>
        /// 获取测试题数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IActionResult get_exam_by_job_id(string id)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var list = dbContext.exam_data.Where(x => x.job_id.Equals(id) && x.is_enabled == true).OrderBy(x => x.exam_type)
                           .Select(x => new
                {
                    x.anwser_a,
                    x.anwser_b,
                    x.anwser_c,
                    x.anwser_d,
                    x.exam_content,
                    x.exam_type,
                    exam_eq_answer = "",
                    x.id
                }).ToList();
                return(Json(list));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
Beispiel #15
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var err = new ErrorRequestData();

            err.ShowMsgBox  = showMsgBox;
            err.Description = context.HttpContext.Request.GetAbsoluteUri();

            if (!context.HttpContext.Request.Headers.ContainsKey("token_type"))
            {
                err.HttpStatusCode = 401;
                err.ErrorType      = ConstantTypeString.TokenError;
                err.ErrorMessage   = "JwtToken的类型不正确";
                context.Result     = new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                };
                return;
            }

            if (!context.HttpContext.Request.Headers.ContainsKey("token"))
            {
                err.HttpStatusCode = 401;
                err.ErrorType      = ConstantTypeString.TokenError;
                err.ErrorMessage   = "请求数据中没有包含Token";
                context.Result     = new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                };
                return;
            }


            // 只有通过验证才能继续执行, 否则返回错误信息
            if (context.HttpContext.Request.Headers["token_type"].ToString().Equals(Config.configuration["JwtTokenConfig:TokenType"]))
            {
                var token = context.HttpContext.Request.Headers["token"].ToString();    // 请求头的token
                try
                {
                    IJsonSerializer   serializer = new JsonNetSerializer();
                    IDateTimeProvider provider   = new UtcDateTimeProvider();
                    IJwtValidator     validator  = new JwtValidator(serializer, provider);
                    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                    IJwtDecoder       decoder    = new JwtDecoder(serializer, validator, urlEncoder);

                    // 使用私钥解析 token 中的 guid
                    var claims = decoder.DecodeToObject <Dictionary <string, object> >(token, Config.configuration["JwtTokenConfig:Secret"], true);
                    if (claims != null)
                    {
                        // 根据token获取 guid 查找内存缓存中的用户信息
                        if (claims.ContainsKey("jti"))
                        {
                            var guid = claims["jti"].ToString();

                            // 冲内存缓存中读取guid包含的用户权限
                            var su = MemoryCacheService.GetCacheValue <SignedUser>(guid);
                            if (su != null)
                            {
                                // 验证是否过期
                                if (DateTime.UtcNow > su.utc_time.AddHours(su.Validity))
                                {
                                    err.HttpStatusCode = 403;
                                    err.ErrorType      = ConstantTypeString.TokenError;
                                    err.ErrorMessage   = "token过期";
                                    context.Result     = new ContentResult()
                                    {
                                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                                    };
                                    return;
                                }

                                // 验证权限
                                if (su.user_claims.Where(x => x.Type.Equals(nameof(role)) && x.Value.Equals(role)).Count() > 0)
                                {
                                    // 将 user 写入本次请求数据, 也可以保存在 ViewBag中
                                    if (context.Controller is BaseController baseController)
                                    {
                                        baseController.signedUser = su;
                                    }
                                    else
                                    {
                                        // 没有继承与基类则保存到本次请求上下文中, 需要自己手动进行类型转换
                                        var controller = context.Controller as Controller;
                                        controller.ViewData["signedUser"] = su;
                                    }
                                }
                                else
                                {
                                    err.HttpStatusCode = 403;
                                    err.ErrorType      = ConstantTypeString.UnAuthorization;
                                    err.ErrorMessage   = "你没有所需的权限";
                                    context.Result     = new ContentResult()
                                    {
                                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                                    };
                                    return;
                                }
                            }
                            else
                            {
                                err.HttpStatusCode = 401;
                                err.ErrorType      = ConstantTypeString.TokenError;
                                err.ErrorMessage   = "你的token可能已经失效";
                                context.Result     = new ContentResult()
                                {
                                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                                };
                                return;
                            }
                        }
                        else
                        {
                            err.HttpStatusCode = 401;
                            err.ErrorType      = ConstantTypeString.TokenError;
                            err.ErrorMessage   = "token中不包含jti";
                            context.Result     = new ContentResult()
                            {
                                StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                            };
                            return;
                        }
                    }
                }
                catch (SignatureVerificationException)
                {
                    err.HttpStatusCode = 401;
                    err.ErrorType      = ConstantTypeString.TokenError;
                    err.ErrorMessage   = "token签名验证失败,捕获到SignatureVerificationException";
                    context.Result     = new ContentResult()
                    {
                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                    };
                    return;
                }
                catch (Exception ex)
                {
                    err.HttpStatusCode = 401;
                    err.ErrorType      = ConstantTypeString.TokenError;
                    err.ErrorMessage   = ex.Message;
                    context.Result     = new ContentResult()
                    {
                        StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                    };
                    return;
                }
            }
            else
            {
                err.HttpStatusCode = 401;
                err.ErrorType      = ConstantTypeString.TokenError;
                err.ErrorMessage   = "你的token类型不正确";
                context.Result     = new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                };
                return;
            }
            base.OnActionExecuting(context);
        }
        /// <summary>
        /// 设置邀请码
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public IActionResult set_invitation_code(string id)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "或者参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var m = dbContext.user_score.Where(x => x.id.Equals(id)).FirstOrDefault();
                if (m != null)
                {
                    if (string.IsNullOrWhiteSpace(m.invitation_code))
                    {
                        m.invitation_code = Guid.NewGuid().ToString("D").Replace("-", "").Substring(0, 8).ToUpper();
                    }
                    else
                    {
                        m.invitation_code = string.Empty;
                    }
                    dbContext.SaveChanges();
                    return(Json(new { result = true, message = m.invitation_code }));
                }
                return(Json(new { result = false, message = "设置邀请码失败" }));
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
        }
        public IActionResult delete_job_type(string id)
        {
            ErrorRequestData err = null;

            if (string.IsNullOrWhiteSpace(id))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = nameof(id) + "参数错误"
                };
                return(new ContentResult()
                {
                    Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType, StatusCode = err.HttpStatusCode
                });
            }

            try
            {
                var j = dbContext.job_type.Where(x => x.uuid.Equals(id)).FirstOrDefault();
                if (j != null && signedUser.user_uuid.Equals(j.user_id))
                {
                    var ent = dbContext.Entry(j);
                    ent.State = EntityState.Deleted;
                    dbContext.SaveChanges();
                    return(Content("ok"));
                }
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            return(Content("删除失败"));
        }
        /// <summary>
        /// 注册用户的方法
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public IActionResult RegisterUser(recruit_user user)
        {
            ErrorRequestData err = null;

            if (user == null || string.IsNullOrWhiteSpace(user.pwd))
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 401, ErrorMessage = "参数错误"
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }

            try
            {
                user.pwd = Sha1.getSha1String(user.pwd);
                if ("user".Equals(user.auth_role))
                {
                    if (string.IsNullOrWhiteSpace(user.uname) || string.IsNullOrWhiteSpace(user.birthday))
                    {
                        err = new ErrorRequestData()
                        {
                            HttpStatusCode = 401, ErrorMessage = "参数错误"
                        };
                        return(new ContentResult()
                        {
                            StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                        });
                    }
                    dbContext.recruit_user.Add(user);
                    dbContext.SaveChanges();
                    return(Content("请求成功"));
                }
                else if ("company".Equals(user.auth_role))
                {
                    if (string.IsNullOrWhiteSpace(user.company_address) ||
                        string.IsNullOrWhiteSpace(user.company_code) ||
                        string.IsNullOrWhiteSpace(user.company_contact) ||
                        string.IsNullOrWhiteSpace(user.company_name))
                    {
                        err = new ErrorRequestData()
                        {
                            HttpStatusCode = 401, ErrorMessage = "参数错误"
                        };
                        return(new ContentResult()
                        {
                            StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                        });
                    }
                    dbContext.recruit_user.Add(user);
                    dbContext.SaveChanges();
                    return(Content("请求成功"));
                }
            }
            catch (DbUpdateException dbex)
            {
                if (dbex.InnerException is PostgresException npge)
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = npge.Detail
                    };
                }
                else
                {
                    err = new ErrorRequestData()
                    {
                        HttpStatusCode = 500, ErrorMessage = dbex.Message
                    };
                }
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }
            catch (Exception ex)
            {
                err = new ErrorRequestData()
                {
                    HttpStatusCode = 500, ErrorMessage = ex.Message
                };
                return(new ContentResult()
                {
                    StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
                });
            }

            err = new ErrorRequestData()
            {
                HttpStatusCode = 401, ErrorMessage = "注册失败"
            };
            return(new ContentResult()
            {
                StatusCode = err.HttpStatusCode, Content = err.toJosnString(), ContentType = ConstantTypeString.JsonContentType
            });
        }