TaskService.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  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(userId);
  120. zxConference.setYear(year);
  121. List<ZxConference> zxConferences = zxConferenceMapper.selectZxConferenceList(zxConference);
  122. //查询活动
  123. ZxActivity zxActivity = new ZxActivity();
  124. zxActivity.setUserId(userId);
  125. zxActivity.setYear(year);
  126. List<ZxActivity> zxActivities = zxActivityMapper.selectZxActivityList(zxActivity);
  127. //招商
  128. ZxInvestment zxInvestment = new ZxInvestment();
  129. zxInvestment.setUserId(userId);
  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(NO) && !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(NO) && (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) && YES.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) && YES.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) && YES.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. //查询这个人是否有全体会议期间,无故缺席大会或分组讨论,请假未通过
  245. List<ZxConference> collect = zxConferences.stream().filter(e -> e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  246. if (collect.size() > 0) {
  247. proposalCount = 0L;
  248. for (ZxConference conference : collect) {
  249. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  250. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  251. //获取到不参加会议的数量
  252. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  253. proposalCount = proposalCount + proposalCount + zxConferenceUserList.stream().filter(e -> e.getIsJoin() == null).count();
  254. }
  255. }
  256. if (proposalCount > 0) {
  257. //获取对应类型的分值
  258. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  259. .get(0).getAssessmentScore();
  260. //计算当前分数
  261. nowScore = nowScore + proposalCount * assessmentScore;
  262. }
  263. }
  264. //查询这个人是否无故缺席市政协办公室,各专委会,各界别组织召开的其他会议和学习培训活动
  265. List<ZxConference> collectTwo = zxConferences.stream().filter(e -> !e.getConferenceType().equals(ONE)).collect(Collectors.toList());
  266. if (collectTwo.size() > 0) {
  267. proposalCount = 0L;
  268. for (ZxConference conference : collectTwo) {
  269. List<ZxConferenceUser> zxConferenceUserList = conference.getZxConferenceUserList();
  270. if (zxConferenceUserList != null && zxConferenceUserList.size() > 0) {
  271. //获取到不参加会议的数量
  272. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  273. proposalCount = proposalCount + zxConferenceUserList.stream().filter(e -> e.getIsJoin() == null).count();
  274. }
  275. }
  276. if (proposalCount > 0) {
  277. //获取对应类型的分值
  278. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  279. .get(0).getAssessmentScore();
  280. //计算当前分数
  281. nowScore = nowScore + proposalCount * assessmentScore;
  282. }
  283. }
  284. //判断分是否扣完
  285. nowScore = assessmentTotal - nowScore;
  286. if (nowScore < 0) {
  287. nowScore = 0;
  288. }
  289. if (nowScore > assessmentTotal) {
  290. nowScore = assessmentTotal;
  291. }
  292. memberAssessmentInf.setConferenceScore(nowScore);
  293. }
  294. //计算活动分值
  295. if (zxActivities != null && zxActivities.size() > 0) {
  296. //定义当前分数
  297. /* nowScore = 0L;
  298. //先去查询是否有学习培训活动未参加
  299. List<ZxActivity> collect = zxActivities.stream().filter(e -> e.getActivityType().equals(ONE)).collect(Collectors.toList());
  300. if (collect.size() > 0) {
  301. for (ZxActivity activity : collect) {
  302. List<ZxActivityUser> zxActivityUserList = activity.getZxActivityUserList();
  303. if (zxActivityUserList != null && zxActivityUserList.size() > 0) {
  304. //获取到不参加活动的数量
  305. proposalCount = proposalCount + zxActivityUserList.stream().filter(e -> "N".equals(e.getIsJoin()) && THR.equals(e.getApproval())).count();
  306. }
  307. }
  308. if (proposalCount > 0) {
  309. //获取对应类型的分值
  310. assessmentScore = zxAssessments.stream().filter(e -> "assessment_conference".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  311. .get(0).getAssessmentScore();
  312. //计算当前分数
  313. nowScore = nowScore + proposalCount * assessmentScore;
  314. }
  315. Long conferenceScore = memberAssessmentInf.getConferenceScore();
  316. if (conferenceScore > 0) {
  317. //判断分是否扣完
  318. nowScore = conferenceScore - nowScore;
  319. if (nowScore < 0) {
  320. nowScore = 0;
  321. }
  322. memberAssessmentInf.setConferenceScore(nowScore);
  323. }
  324. }*/
  325. nowScore = 0L;
  326. //获取分值上限
  327. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  328. .get(0).getAssessmentTotal();
  329. //获取所有活动设置的子类分项
  330. List<ZxAssessment> collectZxAssessment = zxAssessments.stream().filter(e -> "assessment_activity".equals(e.getAssessmentProjectId()) && 0 != e.getParentId()).collect(Collectors.toList());
  331. if (collectZxAssessment.size() > 0) {
  332. for (ZxAssessment zxAssessment : collectZxAssessment) {
  333. //获取到的对应活动分数
  334. Long assessmentScore1 = zxAssessment.getAssessmentScore();
  335. //判断是否参加过对应活动
  336. String assessmentTypeId = zxAssessment.getAssessmentTypeId();
  337. //获取参与数量
  338. proposalCount = zxActivities.stream().filter(e -> e.getActivityType().equals(assessmentTypeId)).count();
  339. if (proposalCount > 0) {
  340. if (ONE.equals(assessmentTypeId)) {
  341. memberAssessmentInf.setActivityScdyScore(assessmentScore1);
  342. } else if (TWO.equals(assessmentTypeId)) {
  343. memberAssessmentInf.setActivityJbScore(assessmentScore1);
  344. } else if (THR.equals(assessmentTypeId)) {
  345. memberAssessmentInf.setActivityLlzScore(assessmentScore1);
  346. } else if (FOR.equals(assessmentTypeId)) {
  347. memberAssessmentInf.setActivityBssScore(assessmentScore1);
  348. }
  349. nowScore = nowScore + assessmentScore1;
  350. }
  351. }
  352. if (nowScore > assessmentTotal) {
  353. nowScore = assessmentTotal;
  354. }
  355. memberAssessmentInf.setActivityScore(nowScore);
  356. }
  357. }
  358. //计算招商分数
  359. if (zxInvestments != null && zxInvestments.size() > 0) {
  360. //定义当前分数
  361. nowScore = 0L;
  362. //获取加分分值上限
  363. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  364. .get(0).getAssessmentTotal();
  365. //去查询这个是否有有效的招商线索
  366. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(ONE)).count();
  367. if (proposalCount > 0) {
  368. //获取对应类型的分值
  369. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && ONE.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  370. .get(0).getAssessmentScore();
  371. //计算当前分数
  372. nowScore = nowScore + proposalCount * assessmentScore;
  373. }
  374. //当前分数小于上限值,继续找下一个条件
  375. if (nowScore < assessmentTotal) {
  376. //查询这个人是否有招商线索转换为签约项目
  377. proposalCount = zxInvestments.stream().filter(e -> e.getUserId().equals(userId) && e.getType().equals(TWO)).count();
  378. if (proposalCount > 0) {
  379. //获取对应类型的分值
  380. assessmentScore = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && TWO.equals(e.getAssessmentTypeId())).collect(Collectors.toList())
  381. .get(0).getAssessmentScore();
  382. //计算当前分数
  383. nowScore = nowScore + proposalCount * assessmentScore;
  384. }
  385. }
  386. if (nowScore > assessmentTotal) {
  387. nowScore = assessmentTotal;
  388. }
  389. memberAssessmentInf.setInvestmentScore(nowScore);
  390. memberAssessmentInf.setBonusScore(nowScore);
  391. }
  392. //计算加分
  393. ZxBonus zxBonus = new ZxBonus();
  394. zxBonus.setUserId(userId);
  395. List<ZxBonus> zxBonuses = zxBonusMapper.selectZxBonusList(zxBonus);
  396. if (zxBonuses != null && zxBonuses.size() > 0) {
  397. //总加分包括招商加分
  398. long bonusScore = zxBonuses.stream().filter(e -> e.getScore() != null).mapToLong(BaseEntity::getScore).sum() + memberAssessmentInf.getInvestmentScore();
  399. //获取加分分值上限
  400. assessmentTotal = zxAssessments.stream().filter(e -> "assessment_bonus".equals(e.getAssessmentProjectId()) && 0 == e.getParentId()).collect(Collectors.toList())
  401. .get(0).getAssessmentTotal();
  402. if (bonusScore > assessmentTotal) {
  403. memberAssessmentInf.setBonusScore(assessmentTotal);
  404. }
  405. }
  406. }
  407. //总分 = 提案得分+社情民意得分+会议得分+活动得分+加分(招商引资算加分)
  408. long totalScore = memberAssessmentInf.getProposalScore() + memberAssessmentInf.getSqmyScore() + memberAssessmentInf.getConferenceScore() + memberAssessmentInf.getActivityScore() + memberAssessmentInf.getBonusScore();
  409. //判断总分是否大于满分
  410. if (totalScore > memberAssessmentInf.getFullScore()) {
  411. totalScore = memberAssessmentInf.getFullScore();
  412. }
  413. memberAssessmentInf.setTotalScore(totalScore);
  414. memberAssessmentInfoListNew.add(memberAssessmentInf);
  415. }
  416. List<MemberAssessmentInfo> collect = memberAssessmentInfoListNew.stream().sorted(Comparator.comparing(MemberAssessmentInfo::getTotalScore).reversed()).collect(Collectors.toList());
  417. //计算排名
  418. int index = 0;
  419. //最近的一次分数
  420. Long lastScore = -1L;
  421. //执行任务
  422. for (int i = 0; i < collect.size(); i++) {
  423. MemberAssessmentInfo memberAssessmentInfoNew = collect.get(i);
  424. Long totalScore = memberAssessmentInfoNew.getTotalScore();
  425. if (!lastScore.equals(totalScore)) {
  426. lastScore = totalScore;
  427. index++;
  428. }
  429. memberAssessmentInfoNew.setRank(String.valueOf(index));
  430. }
  431. //开启多线程处理
  432. //获取线程池中的@bean
  433. ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
  434. //定义每个线程处理多少用户
  435. int count = 50;
  436. //根据用户数确定需要多少个线程
  437. List<List<MemberAssessmentInfo>> lists = BranchThreadUtils.splitList(collect, count);
  438. for (List<MemberAssessmentInfo> list : lists) {
  439. executor.execute(() -> {
  440. System.out.println("线程" + Thread.currentThread().getId() + "启动");
  441. for (MemberAssessmentInfo assessmentInfo : list) {
  442. //判断是更新还是新增
  443. if (memberAssessmentInfoList != null && memberAssessmentInfoList.size() > 0) {
  444. //更新
  445. int i = memberAssessmentInfoMapper.updateMemberAssessmentInfo(assessmentInfo);
  446. if (i == 0){
  447. memberAssessmentInfoMapper.insertMemberAssessmentInfo(assessmentInfo);
  448. }
  449. } else {
  450. memberAssessmentInfoMapper.insertMemberAssessmentInfo(assessmentInfo);
  451. }
  452. MemberInfo memberInfo = new MemberInfo();
  453. memberInfo.setUserId(assessmentInfo.getUserId());
  454. memberInfo.setScore(assessmentInfo.getTotalScore());
  455. memberInfo.setRanking(assessmentInfo.getRank());
  456. //更新委员主表
  457. memberInfoMapper.updateMemberInfoByUserId(memberInfo);
  458. }
  459. });
  460. }
  461. }
  462. System.out.println("定时任务结束");
  463. }
  464. }