我们将对接口的调用提出优化方案,让大家学会如何提升请求访问效率。
如何学会高并发接口设计?
如何掌握线程与线程池?
如何学会CompletableFuture异步编排?
如何学会线程有序与并行?
如何学会线程任务、多任务组组合?
1-2 企业审核 - 查询企业列表
运营端查询企业,由于并发量不会像前端那么大,所以直接查数据库就行。
controller
service:
自定义mapper:
<select id="queryCompanyList"
resultType="com.imooc.pojo.vo.CompanyInfoVO"
parameterType="Map">
SELECT
c.id AS companyId,
c.company_name AS companyName,
c.short_name AS shortName,
c.logo AS logo,
c.address AS address,
c.nature AS nature,
c.people_size AS peopleSize,
c.industry AS industry,
c.financ_stage AS financStage,
c.review_status AS reviewStatus,
c.commit_date AS commitDate,
u.real_name AS commitUser
FROM
company c
LEFT JOIN
users u
ON
c.commit_user_id = u.id
WHERE
1 = 1
<if test="paramMap.companyName != null and paramMap.companyName != ''">
AND c.company_name LIKE '%${paramMap.companyName}%'
</if>
<if test="paramMap.commitUser != null and paramMap.commitUser != ''">
AND u.real_name LIKE '%${paramMap.commitUser}%'
</if>
<if test="paramMap.reviewStatus != null and paramMap.reviewStatus >= 0">
AND c.review_status = #{paramMap.reviewStatus}
</if>
<if test="paramMap.commitDateStart != null">
AND c.commit_date >= #{paramMap.commitDateStart}
</if>
<if test="paramMap.commitDateEnd != null">
AND c.commit_date <= #{paramMap.commitDateEnd}
</if>
ORDER BY c.commit_date DESC
</select>
1-3 企业审核 - 获得企业详情
controller:service:
自定义mapper:
<select id="getCompanyInfo"
resultType="com.imooc.pojo.vo.CompanyInfoVO"
parameterType="Map">
SELECT
c.id AS companyId,
c.company_name AS companyName,
c.short_name AS shortName,
c.logo AS logo,
c.province AS province,
c.city AS city,
c.district AS district,
c.address AS address,
c.nature AS nature,
c.people_size AS peopleSize,
c.industry AS industry,
c.financ_stage AS financStage,
c.work_time AS workTime,
c.introduction AS introduction,
c.advantage AS advantage,
c.benefits AS benefits,
c.bonus AS bonus,
c.subsidy AS subsidy,
c.review_status AS reviewStatus,
c.review_replay AS reviewReplay,
c.commit_date AS commitDate,
c.commit_user_id AS commitUserId,
u.real_name AS commitUser,
c.commit_user_mobile AS commitMobile,
c.legal_representative AS legalRepresentative,
c.regist_capital AS registCapital,
c.regist_place AS registPlace,
c.build_date AS buildDate,
c.auth_letter AS authLetter,
c.biz_license AS bizLicense
FROM
company c
LEFT JOIN
users u
ON
c.commit_user_id = u.id
WHERE
c.id = #{paramMap.companyId}
</select>
1-4 企业审核 - 执行审核
更新企业状态
controller:service:
修改用户角色
controller:service:
feign:
1-5 审核流程的优化思考
拓展:针对审核流程的思考以及优化?
目前审核,其实我们是把审核的状态和审核的驳回信息放在了企业表:
其实这么做也不太好,因为用户第一次入驻的时候审核没问题,但是一旦企业审核通过,如果有人需要再次入驻,申请成为这家企业的HR,那么这个时候企业的状态又会重新变更为审核状态。
考虑一下怎么优化:
- 新增审核表,审核企业的时候需要做三表关联查询,也就是
用户表+企业表+审核表
。这样做可以看到更多信息,也可以有每次的审核记录,现有的做法是无法看到历史审核记录的。而且客服审核的时候只需要关注用户就行,用户的信息以及授权书没问题就审核通过了。 - 当然这么做,也会有缺点,缺点是,三表关联查询很多企业是不可以使用的,甚至有的公司禁止三表,只允许到两表关联,一般来说基本上3表是上限,超过3表查询一定要拆分组装。因为高并发下一定会有性能影响。
所以关于这个拓展大家可以课后去实现一些,作为第二种的审核记录的模式。
那么目前,我们这里做的是针对单表企业表查询并且审核:
优点是单表查询更快更便捷,而且从业务上来说,如果企业的营业执照发生变更,我们也可以重新进行审核。缺点是没有HR提交的审核记录。但是可以一定程度上对企业进行重新审查,因为审核字段是在企业表里的,所以在进行新HR入驻的时候,可以再次对企业信息做一个核查,这其实也可以。
所以说,各自有各自的优缺点,业务规范和流程要按照自身情况去决定,不要为了技术而技术,当你能够考虑的更多的时候,你就成长了,毕竟我们未来是要向架构师成长的嘛。
如果说,在这个地方,一定要满足性能的情况之下,也要有审核记录呢?那么可以使用mongodb,审核记录插入到mongo,因为这是非重要数据,从业务上来说,允许丢失,而且mongo的并发能力比数据库高。所以可以使用。但是mongodb也不支持多表关联或者说多表查询不太好,所以可以做数据的冗余,把审核相关字段,提交者的相关信息,企业信息,全部写到一