TaskService.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  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. if (zxAssessments != null && zxAssessments.size() > 0) {
  83. //计算满分
  84. //获取分值上限
  85. fullScore = zxAssessments.stream().filter(e -> 0 == e.getParentId()).mapToLong(ZxAssessment::getAssessmentTotal).sum();
  86. }
  87. for (MemberInfo memberInfo : memberInfoSelect) {
  88. MemberAssessmentInfo memberAssessmentInf = new MemberAssessmentInfo();
  89. memberAssessmentInf.setFullScore(fullScore);
  90. //定义当前分数
  91. nowScore = 0L;
  92. Long userId = memberInfo.getUserId();
  93. memberAssessmentInf.setUserId(userId);
  94. memberAssessmentInf.setYear(year);
  95. memberAssessmentInf.setTotalPeople(memberInfoSelect.size());
  96. memberAssessmentInf.setProposalScore(nowScore);
  97. memberAssessmentInf.setSqmyScore(nowScore);
  98. memberAssessmentInf.setConferenceScore(nowScore);
  99. memberAssessmentInf.setActivityScore(nowScore);
  100. memberAssessmentInf.setBonusScore(nowScore);
  101. memberAssessmentInf.setTotalScore(nowScore);
  102. memberAssessmentInf.setActivityScdyScore(nowScore);
  103. memberAssessmentInf.setActivityLlzScore(nowScore);
  104. memberAssessmentInf.setActivityJbScore(nowScore);
  105. memberAssessmentInf.setActivityBssScore(nowScore);
  106. memberAssessmentInf.setInvestmentScore(nowScore);
  107. //查询提案情况
  108. ProposalInfo proposalInfo = new ProposalInfo();
  109. proposalInfo.setProposalUserId(userId);
  110. proposalInfo.setYear(year);
  111. List<ProposalInfo> proposalInfos = proposalInfoMapper.selectProposalInfoListByUser(proposalInfo);
  112. //查询社情民意
  113. SqmyInfo sqmyInfo = new SqmyInfo();
  114. sqmyInfo.setSqmyUserId(userId);
  115. sqmyInfo.setYear(year);
  116. List<SqmyInfo> sqmyInfos = sqmyInfoMapper.selectSqmyInfoList(sqmyInfo);
  117. //查询政协会议
  118. ZxConference zxConference = new ZxConference();
  119. zxConference.setUserId(SecurityUtils.getUserId());
  120. zxConference.setYear(year);
  121. List<ZxConference> zxConferences = zxConferenceMapper.selectZxConferenceList(zxConference);
  122. //查询活动
  123. ZxActivity zxActivity = new ZxActivity();
  124. zxActivity.setUserId(SecurityUtils.getUserId());
  125. zxActivity.setYear(year);
  126. List<ZxActivity> zxActivities = zxActivityMapper.selectZxActivityList(zxActivity);
  127. //招商
  128. ZxInvestment zxInvestment = new ZxInvestment();
  129. zxInvestment.setUserId(SecurityUtils.getUserId());
  130. zxInvestment.setYear(year);
  131. List<ZxInvestment> zxInvestments = zxInvestmentMapper.selectZxInvestmentList(zxInvestment);
  132. //计算得分 勿删
  133. if (zxAssessments != null && zxAssessments.size() > 0) {
  134. memberAssessmentInf.setFullScore(fullScore);
  135. //计算提案得分
  136. if (proposalInfos != null && proposalInfos.size() > 0) {
  137. //获取分值上限
  138. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  139. .get(0).getAssessmentTotal();
  140. //先去查询这个人是否有个人提案立案
  141. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && e.getIsJointly().equals(ONE) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  142. if (proposalCount > 0) {
  143. //获取对应类型的分值
  144. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  145. .get(0).getAssessmentScore();
  146. //计算当前分数
  147. nowScore = nowScore + proposalCount * assessmentScore;
  148. }
  149. //当前分数小于上限值,继续找下一个条件
  150. if (nowScore < assessmentTotal) {
  151. //查询这个人是否有个人提案未立案
  152. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && e.getIsJointly().equals(ONE) && (ONE.equals(e.getProposalProgress()) || THR.equals(e.getProposalProgress()))).count();
  153. if (proposalCount > 0) {
  154. //获取对应类型的分值
  155. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  156. .get(0).getAssessmentScore();
  157. //计算当前分数
  158. nowScore = nowScore + proposalCount * assessmentScore;
  159. }
  160. }
  161. //当前分数小于上限值,继续找下一个条件
  162. if (nowScore < assessmentTotal) {
  163. //查询这个人是否有联名提案、集体提案立案的,第一提案人,召集人
  164. proposalCount = proposalInfos.stream().filter(e -> e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  165. if (proposalCount > 0) {
  166. //获取对应类型的分值
  167. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && THR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  168. .get(0).getAssessmentScore();
  169. //计算当前分数
  170. nowScore = nowScore + proposalCount * assessmentScore;
  171. }
  172. }
  173. //当前分数小于上限值,继续找下一个条件
  174. if (nowScore < assessmentTotal) {
  175. //查询这个人是否有联名提案、集体提案立案的,其余联名、参与者
  176. proposalCount = proposalInfos.stream().filter(e -> !e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && !ONE.equals(e.getProposalProgress()) && !THR.equals(e.getProposalProgress())).count();
  177. if (proposalCount > 0) {
  178. //获取对应类型的分值
  179. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && FOR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  180. .get(0).getAssessmentScore();
  181. //计算当前分数
  182. nowScore = nowScore + proposalCount * assessmentScore;
  183. }
  184. }
  185. //当前分数小于上限值,继续找下一个条件
  186. if (nowScore < assessmentTotal) {
  187. //查询这个人是否有未立案联名提案、集体提案参与者
  188. proposalCount = proposalInfos.stream().filter(e -> !e.getProposalUserId().equals(userId) && "0".equals(e.getIsJointly()) && (ONE.equals(e.getProposalProgress()) || THR.equals(e.getProposalProgress()))).count();
  189. if (proposalCount > 0) {
  190. //获取对应类型的分值
  191. assessmentScore = zxAssessments.stream().filter(e -> "assessment_proposal".equals(e.getAssessmentProjectId()) && FOR.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  192. .get(0).getAssessmentScore();
  193. //计算当前分数
  194. nowScore = nowScore + proposalCount * assessmentScore;
  195. }
  196. }
  197. if (nowScore > assessmentTotal) {
  198. nowScore = assessmentTotal;
  199. }
  200. memberAssessmentInf.setProposalScore(nowScore);
  201. }
  202. //计算社情民义的分值
  203. if (sqmyInfos != null && sqmyInfos.size() > 0) {
  204. //获取分值上限
  205. assessmentTotal = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  206. .get(0).getAssessmentTotal();
  207. //定义当前分数
  208. nowScore = 0L;
  209. //查询这个人撰写并上报社情民意信息,被采用
  210. proposalCount = sqmyInfos.stream().filter(e -> e.getSqmyUserId().equals(userId) && "0".equals(e.getIsRecord())).count();
  211. if (proposalCount > 0) {
  212. //获取对应类型的分值
  213. assessmentScore = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  214. .get(0).getAssessmentScore();
  215. //计算当前分数
  216. nowScore = nowScore + proposalCount * assessmentScore;
  217. }
  218. //当前分数小于上限值,继续找下一个条件
  219. if (nowScore < assessmentTotal) {
  220. //查询这个人撰写并上报社情民意信息,未采用
  221. proposalCount = sqmyInfos.stream().filter(e -> e.getSqmyUserId().equals(userId) && ONE.equals(e.getIsRecord())).count();
  222. if (proposalCount > 0) {
  223. //获取对应类型的分值
  224. assessmentScore = zxAssessments.stream().filter(e -> "proposal_sqmy".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  225. .get(0).getAssessmentScore();
  226. //计算当前分数
  227. nowScore = nowScore + proposalCount * assessmentScore;
  228. }
  229. }
  230. if (nowScore > assessmentTotal) {
  231. nowScore = assessmentTotal;
  232. }
  233. memberAssessmentInf.setSqmyScore(nowScore);
  234. }
  235. //计算会议分值
  236. if (zxConferences != null && zxConferences.size() > 0) {
  237. //查询会议默认所有人一开始的20分,缺勤扣分
  238. //获取分值上限
  239. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  240. .get(0).getAssessmentTotal();
  241. //定义当前分数
  242. nowScore = 0L;
  243. //查询这个人是否有全体会议期间,无故缺席大会或分组讨论,请假未通过
  244. List<ZxConference> collect = zxConferences.stream().filter(e -> e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  245. if (collect.size() > 0) {
  246. for (ZxConference conference : collect) {
  247. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  248. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  249. //获取到不参加会议的数量
  250. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  251. }
  252. }
  253. if (proposalCount > 0) {
  254. //获取对应类型的分值
  255. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  256. .get(0).getAssessmentScore();
  257. //计算当前分数
  258. nowScore = nowScore + proposalCount * assessmentScore;
  259. }
  260. }
  261. //查询这个人是否无故缺席市政协办公室,各专委会,各界别组织召开的其他会议和学习培训活动
  262. List<ZxConference> collectTwo = zxConferences.stream().filter(e -> !e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  263. if (collectTwo.size() > 0) {
  264. for (ZxConference conference : collectTwo) {
  265. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  266. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  267. //获取到不参加会议的数量
  268. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  269. }
  270. }
  271. if (proposalCount > 0) {
  272. //获取对应类型的分值
  273. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  274. .get(0).getAssessmentScore();
  275. //计算当前分数
  276. nowScore = nowScore + proposalCount * assessmentScore;
  277. }
  278. }
  279. //判断分是否扣完
  280. nowScore = assessmentTotal + nowScore;
  281. if (nowScore < 0) {
  282. nowScore = 0;
  283. }
  284. memberAssessmentInf.setConferenceScore(nowScore);
  285. }
  286. //计算活动分值
  287. if (zxActivities != null && zxActivities.size() > 0) {
  288. //定义当前分数
  289. nowScore = 0L;
  290. //先去查询是否有学习培训活动未参加
  291. List<ZxActivity> collect = zxActivities.stream().filter(e -> e.getActivityType().equals(ONE)).collect(Collectors.toList());
  292. if (collect.size() > 0) {
  293. for (ZxActivity activity : collect) {
  294. List<ZxActivityUser> zxActivityUserList = activity.getZxActivityUserList();
  295. if (zxActivityUserList != null && zxActivityUserList.size() > 0) {
  296. //获取到不参加会议的数量
  297. proposalCount = proposalCount + zxActivityUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  298. }
  299. }
  300. if (proposalCount > 0) {
  301. //获取对应类型的分值
  302. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  303. .get(0).getAssessmentScore();
  304. //计算当前分数
  305. nowScore = nowScore + proposalCount * assessmentScore;
  306. }
  307. Object sqmyInfoScore = memberAssessmentInf.getSqmyScore();
  308. if (Integer.parseInt(sqmyInfoScore.toString()) > 0) {
  309. //判断分是否扣完
  310. nowScore = assessmentTotal + nowScore;
  311. if (nowScore < 0) {
  312. nowScore = 0;
  313. }
  314. memberAssessmentInf.setSqmyScore(nowScore);
  315. }
  316. }
  317. nowScore = 0L;
  318. //获取分值上限
  319. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  320. .get(0).getAssessmentTotal();
  321. //获取所有活动设置的子类分项
  322. List<ZxAssessment> collectZxAssessment = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 != e.getParentId()).collect(Collectors.toList());
  323. if (collectZxAssessment.size() > 0) {
  324. for (ZxAssessment zxAssessment : collectZxAssessment) {
  325. //获取到的对应活动分数
  326. Long assessmentScore1 = zxAssessment.getAssessmentScore();
  327. //判断是否参加过对应活动
  328. String assessmentTypeId = zxAssessment.getAssessmentTypeId();
  329. //获取参与数量
  330. proposalCount = zxActivities.stream().filter(e -> e.getActivityType().equals(assessmentTypeId)).count();
  331. if (proposalCount > 0){
  332. if (ONE.equals(assessmentTypeId)) {
  333. memberAssessmentInf.setActivityScdyScore(assessmentScore1);
  334. } else if (TWO.equals(assessmentTypeId)) {
  335. memberAssessmentInf.setActivityLlzScore(assessmentScore1);
  336. } else if (THR.equals(assessmentTypeId)) {
  337. memberAssessmentInf.setActivityJbScore(assessmentScore1);
  338. } else if (FOR.equals(assessmentTypeId)) {
  339. memberAssessmentInf.setActivityBssScore(assessmentScore1);
  340. }
  341. nowScore = nowScore + assessmentScore1;
  342. }
  343. }
  344. if (nowScore > assessmentTotal) {
  345. nowScore = assessmentTotal;
  346. }
  347. memberAssessmentInf.setActivityScore(nowScore);
  348. }
  349. }
  350. //计算招商分数
  351. if (zxInvestments != null && zxInvestments.size() > 0) {
  352. //定义当前分数
  353. nowScore = 0L;
  354. //获取加分分值上限
  355. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  356. .get(0).getAssessmentTotal();
  357. //去查询这个是否有有效的招商线索
  358. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(TWO)).count();
  359. if (proposalCount > 0) {
  360. //获取对应类型的分值
  361. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  362. .get(0).getAssessmentScore();
  363. //计算当前分数
  364. nowScore = nowScore + proposalCount * assessmentScore;
  365. }
  366. //当前分数小于上限值,继续找下一个条件
  367. if (nowScore < assessmentTotal) {
  368. //查询这个人是否有招商线索转换为签约项目
  369. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(THR)).count();
  370. if (proposalCount > 0) {
  371. //获取对应类型的分值
  372. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  373. .get(0).getAssessmentScore();
  374. //计算当前分数
  375. nowScore = nowScore + proposalCount * assessmentScore;
  376. }
  377. }
  378. if (nowScore > assessmentTotal) {
  379. nowScore = assessmentTotal;
  380. }
  381. memberAssessmentInf.setInvestmentScore(nowScore);
  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. }
  398. //总分 = 提案得分+社情民意得分+会议得分+活动得分+加分
  399. long totalScore = memberAssessmentInf.getProposalScore() + memberAssessmentInf.getSqmyScore() + memberAssessmentInf.getConferenceScore() + memberAssessmentInf.getActivityScore() + memberAssessmentInf.getBonusScore();
  400. //判断总分是否大于满分
  401. if (totalScore > memberAssessmentInf.getFullScore()) {
  402. totalScore = memberAssessmentInf.getFullScore();
  403. }
  404. memberAssessmentInf.setTotalScore(totalScore);
  405. memberAssessmentInfoListNew.add(memberAssessmentInf);
  406. }
  407. List<MemberAssessmentInfo> collect = memberAssessmentInfoListNew.stream().sorted(Comparator.comparing(MemberAssessmentInfo::getTotalScore).reversed()).collect(Collectors.toList());
  408. //计算排名
  409. int index = 0;
  410. //最近的一次分数
  411. Long lastScore = -1L;
  412. //执行任务
  413. for (int i = 0; i < collect.size(); i++) {
  414. MemberAssessmentInfo memberAssessmentInfoNew = collect.get(i);
  415. Long totalScore = memberAssessmentInfoNew.getTotalScore();
  416. if (!lastScore.equals(totalScore)) {
  417. lastScore = totalScore;
  418. index++;
  419. }
  420. memberAssessmentInfoNew.setRank(String.valueOf(index));
  421. }
  422. //开启多线程处理
  423. //获取线程池中的@bean
  424. ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
  425. //定义每个线程处理多少用户
  426. int count = 50;
  427. //根据用户数确定需要多少个线程
  428. List<List<MemberAssessmentInfo>> lists = BranchThreadUtils.splitList(collect, count);
  429. for (List<MemberAssessmentInfo> list : lists) {
  430. executor.execute(() -> {
  431. System.out.println("线程" + Thread.currentThread().getId() + "启动");
  432. for (MemberAssessmentInfo assessmentInfo : list) {
  433. //判断是更新还是新增
  434. if (memberAssessmentInfoList != null && memberAssessmentInfoList.size() > 0) {
  435. //更新
  436. memberAssessmentInfoMapper.updateMemberAssessmentInfo(assessmentInfo);
  437. } else {
  438. memberAssessmentInfoMapper.insertMemberAssessmentInfo(assessmentInfo);
  439. }
  440. MemberInfo memberInfo = new MemberInfo();
  441. memberInfo.setUserId(assessmentInfo.getUserId());
  442. memberInfo.setScore(assessmentInfo.getTotalScore());
  443. memberInfo.setRanking(assessmentInfo.getRank());
  444. //更新委员主表
  445. memberInfoMapper.updateMemberInfoByUserId(memberInfo);
  446. }
  447. });
  448. }
  449. }
  450. System.out.println("定时任务结束");
  451. }
  452. }