TaskService.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. package com.ruoyi.system.service.impl;
  2. import com.ruoyi.common.core.domain.BaseEntity;
  3. import com.ruoyi.common.utils.BranchThreadUtils;
  4. import com.ruoyi.common.utils.SecurityUtils;
  5. import com.ruoyi.common.utils.spring.SpringUtils;
  6. import com.ruoyi.system.domain.ProposalInfo;
  7. import com.ruoyi.system.domain.activity.ZxActivity;
  8. import com.ruoyi.system.domain.activity.ZxActivityUser;
  9. import com.ruoyi.system.domain.assessment.ZxAssessment;
  10. import com.ruoyi.system.domain.bonus.ZxBonus;
  11. import com.ruoyi.system.domain.conference.ZxConference;
  12. import com.ruoyi.system.domain.conference.ZxConferenceUser;
  13. import com.ruoyi.system.domain.investment.ZxInvestment;
  14. import com.ruoyi.system.domain.member.MemberAssessmentInfo;
  15. import com.ruoyi.system.domain.member.MemberInfo;
  16. import com.ruoyi.system.domain.sqmy.SqmyInfo;
  17. import com.ruoyi.system.mapper.*;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  20. import org.springframework.stereotype.Service;
  21. import java.time.LocalDate;
  22. import java.util.ArrayList;
  23. import java.util.Comparator;
  24. import java.util.List;
  25. import java.util.stream.Collectors;
  26. import static com.ruoyi.common.constant.CommonConstants.*;
  27. /**
  28. * @Author: tjf
  29. * @Date: 2024/3/21 8:48
  30. * @Describe:
  31. */
  32. @Service
  33. public class TaskService extends Thread {
  34. @Autowired
  35. private MemberInfoMapper memberInfoMapper;
  36. @Autowired
  37. private ZxConferenceMapper zxConferenceMapper;
  38. @Autowired
  39. private ZxActivityMapper zxActivityMapper;
  40. @Autowired
  41. private ProposalInfoMapper proposalInfoMapper;
  42. @Autowired
  43. private SqmyInfoMapper sqmyInfoMapper;
  44. @Autowired
  45. private SysDictDataMapper dictDataMapper;
  46. @Autowired
  47. private ZxAssessmentMapper zxAssessmentMapper;
  48. @Autowired
  49. private ZxBonusMapper zxBonusMapper;
  50. @Autowired
  51. private MemberAssessmentInfoMapper memberAssessmentInfoMapper;
  52. @Autowired
  53. private ZxInvestmentMapper zxInvestmentMapper;
  54. /**
  55. * 更新所有委员分数,排名
  56. */
  57. public void assessmentScore() {
  58. System.out.println("开始计算委员分数定时任务");
  59. //查询的年份
  60. LocalDate currentDate = LocalDate.now();
  61. String year = String.valueOf(currentDate.getYear());
  62. //查询原先是否有数据
  63. MemberAssessmentInfo memberAssessmentInfo = new MemberAssessmentInfo();
  64. memberAssessmentInfo.setYear(year);
  65. List<MemberAssessmentInfo> memberAssessmentInfoList = memberAssessmentInfoMapper.selectMemberAssessmentInfoList(memberAssessmentInfo);
  66. //查询出所有委员信息
  67. List<MemberInfo> memberInfoSelect = memberInfoMapper.selectMemberInfoList(new MemberInfo());
  68. //查询履职考核标准
  69. List<ZxAssessment> zxAssessments = zxAssessmentMapper.selectZxAssessmentList(new ZxAssessment());
  70. if (memberInfoSelect != null && memberInfoSelect.size() > 0) {
  71. List<MemberAssessmentInfo> memberAssessmentInfoListNew = new ArrayList<>();
  72. //获取分值上限
  73. long assessmentTotal = 0L;
  74. //定义当前分数
  75. long nowScore = 0L;
  76. //设置的单项分数
  77. long assessmentScore = 0L;
  78. //符合条件的项目数量
  79. long proposalCount = 0L;
  80. //满分
  81. long fullScore = 0L;
  82. for (MemberInfo memberInfo : memberInfoSelect) {
  83. //定义当前分数
  84. nowScore = 0L;
  85. //满分
  86. fullScore = 0L;
  87. Long userId = memberInfo.getUserId();
  88. MemberAssessmentInfo memberAssessmentInf = new MemberAssessmentInfo();
  89. memberAssessmentInf.setUserId(userId);
  90. memberAssessmentInf.setYear(year);
  91. memberAssessmentInf.setTotalPeople(memberInfoSelect.size());
  92. memberAssessmentInf.setProposalScore(0L);
  93. memberAssessmentInf.setSqmyScore(0L);
  94. memberAssessmentInf.setConferenceScore(0L);
  95. memberAssessmentInf.setActivityScore(0L);
  96. memberAssessmentInf.setBonusScore(0L);
  97. memberAssessmentInf.setTotalScore(0L);
  98. //查询提案情况
  99. ProposalInfo proposalInfo = new ProposalInfo();
  100. proposalInfo.setProposalUserId(userId);
  101. proposalInfo.setYear(year);
  102. List<ProposalInfo> proposalInfos = proposalInfoMapper.selectProposalInfoListByUser(proposalInfo);
  103. //查询社情民意
  104. SqmyInfo sqmyInfo = new SqmyInfo();
  105. sqmyInfo.setSqmyUserId(userId);
  106. sqmyInfo.setYear(year);
  107. List<SqmyInfo> sqmyInfos = sqmyInfoMapper.selectSqmyInfoList(sqmyInfo);
  108. //查询政协会议
  109. ZxConference zxConference = new ZxConference();
  110. zxConference.setUserId(SecurityUtils.getUserId());
  111. zxConference.setYear(year);
  112. List<ZxConference> zxConferences = zxConferenceMapper.selectZxConferenceList(zxConference);
  113. //查询活动
  114. ZxActivity zxActivity = new ZxActivity();
  115. zxActivity.setUserId(SecurityUtils.getUserId());
  116. zxActivity.setYear(year);
  117. List<ZxActivity> zxActivities = zxActivityMapper.selectZxActivityList(zxActivity);
  118. //招商
  119. ZxInvestment zxInvestment = new ZxInvestment();
  120. zxInvestment.setUserId(SecurityUtils.getUserId());
  121. zxInvestment.setYear(year);
  122. List<ZxInvestment> zxInvestments = zxInvestmentMapper.selectZxInvestmentList(zxInvestment);
  123. //计算得分 勿删
  124. if (zxAssessments != null && zxAssessments.size() > 0) {
  125. //计算提案得分
  126. if (proposalInfos != null && proposalInfos.size() > 0) {
  127. //获取分值上限
  128. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  129. .get(0).getAssessmentTotal();
  130. //先去查询这个人是否有个人提案立案
  131. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && e.getIsJointly().equals(ONE) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  132. if (proposalCount > 0) {
  133. //获取对应类型的分值
  134. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  135. .get(0).getAssessmentScore();
  136. //计算当前分数
  137. nowScore = nowScore + proposalCount * assessmentScore;
  138. }
  139. //当前分数小于上限值,继续找下一个条件
  140. if (nowScore < assessmentTotal) {
  141. //查询这个人是否有个人提案未立案
  142. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && e.getIsJointly().equals(ONE) && (ONE.equals(e.getProposalProgress()) || THR.equals(e.getProposalProgress()))).count();
  143. if (proposalCount > 0) {
  144. //获取对应类型的分值
  145. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  146. .get(0).getAssessmentScore();
  147. //计算当前分数
  148. nowScore = nowScore + proposalCount * assessmentScore;
  149. }
  150. }
  151. //当前分数小于上限值,继续找下一个条件
  152. if (nowScore < assessmentTotal) {
  153. //查询这个人是否有联名提案、集体提案立案的,第一提案人,召集人
  154. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  155. if (proposalCount > 0) {
  156. //获取对应类型的分值
  157. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && THR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  158. .get(0).getAssessmentScore();
  159. //计算当前分数
  160. nowScore = nowScore + proposalCount * assessmentScore;
  161. }
  162. }
  163. //当前分数小于上限值,继续找下一个条件
  164. if (nowScore < assessmentTotal) {
  165. //查询这个人是否有联名提案、集体提案立案的,其余联名、参与者
  166. proposalCount = proposalInfos.stream().filter(e -> !e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  167. if (proposalCount > 0) {
  168. //获取对应类型的分值
  169. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && FOR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  170. .get(0).getAssessmentScore();
  171. //计算当前分数
  172. nowScore = nowScore + proposalCount * assessmentScore;
  173. }
  174. }
  175. //当前分数小于上限值,继续找下一个条件
  176. if (nowScore < assessmentTotal) {
  177. //查询这个人是否有未立案联名提案、集体提案参与者
  178. proposalCount = proposalInfos.stream().filter(e -> !e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && (ONE.equals(e.getProposalProgress()) || THR.equals(e.getProposalProgress()))).count();
  179. if (proposalCount > 0) {
  180. //获取对应类型的分值
  181. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && FOR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  182. .get(0).getAssessmentScore();
  183. //计算当前分数
  184. nowScore = nowScore + proposalCount * assessmentScore;
  185. }
  186. }
  187. if (nowScore > assessmentTotal) {
  188. nowScore = assessmentTotal;
  189. }
  190. memberAssessmentInf.setProposalScore(nowScore);
  191. //计算满分上限
  192. fullScore = fullScore + assessmentTotal;
  193. }
  194. //计算社情民义的分值
  195. if (sqmyInfos != null && sqmyInfos.size() > 0) {
  196. //获取分值上限
  197. assessmentTotal = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  198. .get(0).getAssessmentTotal();
  199. //定义当前分数
  200. nowScore = 0L;
  201. //查询这个人撰写并上报社情民意信息,被采用
  202. proposalCount = sqmyInfos.stream().filter(e -> e.getSqmyUserId().equals(userId) && "0".equals(e.getIsRecord())).count();
  203. if (proposalCount > 0) {
  204. //获取对应类型的分值
  205. assessmentScore = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  206. .get(0).getAssessmentScore();
  207. //计算当前分数
  208. nowScore = nowScore + proposalCount * assessmentScore;
  209. }
  210. //当前分数小于上限值,继续找下一个条件
  211. if (nowScore < assessmentTotal) {
  212. //查询这个人撰写并上报社情民意信息,未采用
  213. proposalCount = sqmyInfos.stream().filter(e -> e.getSqmyUserId().equals(userId) && ONE.equals(e.getIsRecord())).count();
  214. if (proposalCount > 0) {
  215. //获取对应类型的分值
  216. assessmentScore = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  217. .get(0).getAssessmentScore();
  218. //计算当前分数
  219. nowScore = nowScore + proposalCount * assessmentScore;
  220. }
  221. }
  222. if (nowScore > assessmentTotal) {
  223. nowScore = assessmentTotal;
  224. }
  225. memberAssessmentInf.setSqmyScore(nowScore);
  226. //计算满分上限
  227. fullScore = fullScore + assessmentTotal;
  228. }
  229. //计算会议分值
  230. if (zxConferences != null && zxConferences.size() > 0) {
  231. //查询会议默认所有人一开始的20分,缺勤扣分
  232. //获取分值上限
  233. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  234. .get(0).getAssessmentTotal();
  235. //定义当前分数
  236. nowScore = 0L;
  237. //查询这个人是否有全体会议期间,无故缺席大会或分组讨论
  238. List<ZxConference> collect = zxConferences.stream().filter(e -> e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  239. if (collect.size() > 0) {
  240. for (ZxConference conference : collect) {
  241. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  242. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  243. //获取到不参加会议的数量
  244. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  245. }
  246. }
  247. if (proposalCount > 0) {
  248. //获取对应类型的分值
  249. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  250. .get(0).getAssessmentScore();
  251. //计算当前分数
  252. nowScore = nowScore + proposalCount * assessmentScore;
  253. }
  254. }
  255. //查询这个人是否无故缺席市政协办公室,各专委会,各界别组织召开的其他会议和学习培训活动
  256. List<ZxConference> collectTwo = zxConferences.stream().filter(e -> !e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  257. if (collectTwo.size() > 0) {
  258. for (ZxConference conference : collectTwo) {
  259. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  260. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  261. //获取到不参加会议的数量
  262. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  263. }
  264. }
  265. if (proposalCount > 0) {
  266. //获取对应类型的分值
  267. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  268. .get(0).getAssessmentScore();
  269. //计算当前分数
  270. nowScore = nowScore + proposalCount * assessmentScore;
  271. }
  272. }
  273. //判断分是否扣完
  274. nowScore = assessmentTotal + nowScore;
  275. if (nowScore < 0) {
  276. nowScore = 0;
  277. }
  278. memberAssessmentInf.setConferenceScore(nowScore);
  279. //计算满分上限
  280. fullScore = fullScore + assessmentTotal;
  281. }
  282. //计算活动分值
  283. if (zxActivities != null && zxActivities.size() > 0) {
  284. //定义当前分数
  285. nowScore = 0L;
  286. //先去查询是否有学习培训活动未参加
  287. List<ZxActivity> collect = zxActivities.stream().filter(e -> e.getActivityType().equals(ONE)).collect(Collectors.toList());
  288. if (collect.size() > 0) {
  289. for (ZxActivity activity : collect) {
  290. List<ZxActivityUser> zxActivityUserList = activity.getZxActivityUserList();
  291. if (zxActivityUserList != null && zxActivityUserList.size() > 0) {
  292. //获取到不参加会议的数量
  293. proposalCount = proposalCount + zxActivityUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  294. }
  295. }
  296. if (proposalCount > 0) {
  297. //获取对应类型的分值
  298. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  299. .get(0).getAssessmentScore();
  300. //计算当前分数
  301. nowScore = nowScore + proposalCount * assessmentScore;
  302. }
  303. Object sqmyInfoScore = memberAssessmentInf.getSqmyScore();
  304. if (Integer.parseInt(sqmyInfoScore.toString()) > 0) {
  305. //判断分是否扣完
  306. nowScore = assessmentTotal + nowScore;
  307. if (nowScore < 0) {
  308. nowScore = 0;
  309. }
  310. memberAssessmentInf.setSqmyScore(nowScore);
  311. }
  312. }
  313. nowScore = 0L;
  314. //获取分值上限
  315. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  316. .get(0).getAssessmentTotal();
  317. //获取所有活动设置的子类分项
  318. List<ZxAssessment> collectZxAssessment = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 != e.getParentId()).collect(Collectors.toList());
  319. if (collectZxAssessment.size() > 0) {
  320. for (ZxAssessment zxAssessment : collectZxAssessment) {
  321. //获取到的对应活动分数
  322. Long assessmentScore1 = zxAssessment.getAssessmentScore();
  323. //判断是否参加过对应活动
  324. String assessmentTypeId = zxAssessment.getAssessmentTypeId();
  325. //获取参与数量
  326. proposalCount = zxActivities.stream().filter(e -> e.getActivityType().equals(assessmentTypeId)).count();
  327. if (ONE.equals(assessmentTypeId)) {
  328. memberAssessmentInf.setActivityScdyScore(assessmentScore1);
  329. } else if (TWO.equals(assessmentTypeId)) {
  330. memberAssessmentInf.setActivityLlzScore(assessmentScore1);
  331. } else if (THR.equals(assessmentTypeId)) {
  332. memberAssessmentInf.setActivityJbScore(assessmentScore1);
  333. } else if (FOR.equals(assessmentTypeId)) {
  334. memberAssessmentInf.setActivityBssScore(assessmentScore1);
  335. }
  336. if (proposalCount > 0) {
  337. nowScore = nowScore + assessmentScore1;
  338. }
  339. }
  340. if (nowScore > assessmentTotal) {
  341. nowScore = assessmentTotal;
  342. }
  343. memberAssessmentInf.setActivityScore(nowScore);
  344. //计算满分上限
  345. fullScore = fullScore + assessmentTotal;
  346. }
  347. }
  348. //计算招商分数
  349. if (zxInvestments != null && zxInvestments.size() > 0) {
  350. //定义当前分数
  351. nowScore = 0L;
  352. //获取加分分值上限
  353. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  354. .get(0).getAssessmentTotal();
  355. //去查询这个是否有有效的招商线索
  356. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(TWO)).count();
  357. if (proposalCount > 0) {
  358. //获取对应类型的分值
  359. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  360. .get(0).getAssessmentScore();
  361. //计算当前分数
  362. nowScore = nowScore + proposalCount * assessmentScore;
  363. }
  364. //当前分数小于上限值,继续找下一个条件
  365. if (nowScore < assessmentTotal) {
  366. //查询这个人是否有招商线索转换为签约项目
  367. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(THR)).count();
  368. if (proposalCount > 0) {
  369. //获取对应类型的分值
  370. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  371. .get(0).getAssessmentScore();
  372. //计算当前分数
  373. nowScore = nowScore + proposalCount * assessmentScore;
  374. }
  375. }
  376. if (nowScore > assessmentTotal) {
  377. nowScore = assessmentTotal;
  378. }
  379. memberAssessmentInf.setInvestmentScore(nowScore);
  380. //计算满分上限
  381. fullScore = fullScore + assessmentTotal;
  382. }
  383. //计算加分
  384. ZxBonus zxBonus = new ZxBonus();
  385. zxBonus.setUserId(userId);
  386. List<ZxBonus> zxBonuses = zxBonusMapper.selectZxBonusList(zxBonus);
  387. if (zxBonuses != null && zxBonuses.size() > 0) {
  388. //总加分包括招商加分
  389. long bonusScore = zxBonuses.stream().filter(e -> e.getScore() != null).mapToLong(BaseEntity::getScore).sum() + memberAssessmentInf.getInvestmentScore();
  390. //获取加分分值上限
  391. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  392. .get(0).getAssessmentTotal();
  393. if (bonusScore > assessmentTotal) {
  394. memberAssessmentInf.setBonusScore(assessmentTotal);
  395. }
  396. }
  397. memberAssessmentInf.setFullScore(fullScore);
  398. }
  399. //总分 = 提案得分+社情民意得分+会议得分+活动得分+加分
  400. long totalScore = memberAssessmentInf.getProposalScore() + memberAssessmentInf.getSqmyScore() + memberAssessmentInf.getConferenceScore() + memberAssessmentInf.getActivityScore() + memberAssessmentInf.getBonusScore();
  401. //判断总分是否大于满分
  402. if (totalScore > memberAssessmentInf.getFullScore()) {
  403. totalScore = memberAssessmentInf.getFullScore();
  404. }
  405. memberAssessmentInf.setTotalScore(totalScore);
  406. memberAssessmentInfoListNew.add(memberAssessmentInf);
  407. }
  408. List<MemberAssessmentInfo> collect = memberAssessmentInfoListNew.stream().sorted(Comparator.comparing(MemberAssessmentInfo::getTotalScore).reversed()).collect(Collectors.toList());
  409. //开启多线程处理
  410. //获取线程池中的@bean
  411. ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
  412. //定义每个线程处理多少用户
  413. Integer count = 50;
  414. //根据用户数确定需要多少个线程
  415. List<List<MemberAssessmentInfo>> lists = BranchThreadUtils.splitList(collect, count);
  416. for (List<MemberAssessmentInfo> list : lists) {
  417. executor.execute(() -> {
  418. System.out.println("线程" + Thread.currentThread().getId() + "启动");
  419. //计算排名
  420. int index = 0;
  421. //最近的一次分数
  422. Long lastScore = 0L;
  423. //执行任务
  424. for (int i = 0; i < list.size(); i++) {
  425. MemberAssessmentInfo memberAssessmentInfoNew = list.get(i);
  426. Long totalScore = memberAssessmentInfoNew.getTotalScore();
  427. if (!lastScore.equals(totalScore)) {
  428. lastScore = totalScore;
  429. index++;
  430. }
  431. memberAssessmentInfoNew.setRank(String.valueOf(index));
  432. //判断是更新还是新增
  433. if (memberAssessmentInfoList != null && memberAssessmentInfoList.size() > 0) {
  434. //更新
  435. memberAssessmentInfoMapper.updateMemberAssessmentInfo(memberAssessmentInfoNew);
  436. } else {
  437. memberAssessmentInfoMapper.insertMemberAssessmentInfo(memberAssessmentInfoNew);
  438. }
  439. MemberInfo memberInfo = new MemberInfo();
  440. memberInfo.setUserId(memberAssessmentInfoNew.getUserId());
  441. memberInfo.setScore(memberAssessmentInfoNew.getTotalScore());
  442. memberInfo.setRanking(memberAssessmentInfoNew.getRank());
  443. //更新委员主表
  444. memberInfoMapper.updateMemberInfoByUserId(memberInfo);
  445. }
  446. });
  447. }
  448. }
  449. System.out.println("定时任务结束");
  450. }
  451. }