KmtExerciseSysServiceImpl.java 157 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157
  1. package com.ssj.service.kmt.exercisesys;
  2. import com.alibaba.dubbo.config.annotation.Service;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.ssj.bean.common.files.domain.FileInfo;
  7. import com.ssj.bean.kmt.kmt.domain.*;
  8. import com.ssj.bean.sys.cardinfo.domain.TbCardInfo;
  9. import com.ssj.bean.sys.fx.domain.Merchant;
  10. import com.ssj.bean.sys.wallet.domain.Bank;
  11. import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
  12. import com.ssj.bean.weixin.libmy.domain.TbLibManager;
  13. import com.ssj.bean.weixin.libmy.domain.TbLibManagerAudit;
  14. import com.ssj.bean.weixin.user.domain.User;
  15. import com.ssj.dao.kmt.correctsys.OneDayAndOneMonthDao;
  16. import com.ssj.dao.weixin.library.dao.IBookManagerDao;
  17. import com.ssj.es.service.ExerciseQuestionSearchService;
  18. import com.ssj.es.service.base.BaseSearchService;
  19. import com.ssj.es.utils.ElasticUtil;
  20. import com.ssj.framework.basic.config.bean.Config;
  21. import com.ssj.framework.basic.config.service.ConfigService;
  22. import com.ssj.framework.basic.utils.DateHelper;
  23. import com.ssj.framework.core.persistence.PagingHibernateJdbcDao;
  24. import com.ssj.framework.core.security.manager.TokenManager;
  25. import com.ssj.framework.core.util.*;
  26. import com.ssj.framework.files.service.FileInfoService;
  27. import com.ssj.framework.idworker.IdWorker;
  28. import com.ssj.framework.weixin.util.DateUtil;
  29. import com.ssj.framework.weixin.util.WeixinOauth2Token;
  30. import com.ssj.service.conch.parents.service.ParentService;
  31. import com.ssj.service.conch.utils.MapUtils;
  32. import com.ssj.service.kmt.constant.KnowledgeVersion;
  33. import com.ssj.service.kmt.correctsys.dto.CheckTeacherDetailDto;
  34. import com.ssj.service.kmt.correctsys.request.ApplyOperateReq;
  35. import com.ssj.service.kmt.dto.ExerciseBookCourseClassDto;
  36. import com.ssj.service.kmt.dto.ExerciseQuetionDto;
  37. import com.ssj.service.kmt.dto.KmtExerciseLibExportDto;
  38. import com.ssj.service.kmt.dto.exercise.ExerciseBookAndLibExportDto;
  39. import com.ssj.service.kmt.dto.exercise.KmtExerciseBookLibDto;
  40. import com.ssj.service.kmt.exercisesys.dto.*;
  41. import com.ssj.service.kmt.exercisesys.enums.ExerciseBookStatusEnum;
  42. import com.ssj.service.kmt.exercisesys.enums.ExportExerciseBookStatusEnum;
  43. import com.ssj.service.kmt.exercisesys.request.*;
  44. import com.ssj.service.kmt.exercisesys.service.KmtExerciseSysService;
  45. import com.ssj.service.kmt.request.KmtExerciseBookLibReq;
  46. import com.ssj.service.kmt.service.*;
  47. import com.ssj.service.mapper.KmtExerciseMapper;
  48. import com.ssj.service.mapper.KmtQuestionMapper;
  49. import com.ssj.service.mapper.LibManagerAuditMapper;
  50. import com.ssj.service.mapper.LibManagerMapper;
  51. import com.ssj.service.sys.cardinfo.service.ICardInfoService;
  52. import com.ssj.service.sys.push.service.SconPushMessageService;
  53. import com.ssj.service.sys.push.service.task.UpdateExerciseQuestionThreadTask;
  54. import com.ssj.service.sys.role.service.AdminService;
  55. import com.ssj.service.sys.wallet.service.BankService;
  56. import com.ssj.service.task.SyncRefreshExerciseBookDistributionCountTask;
  57. import com.ssj.service.weixin.library.service.IBookManagerService;
  58. import com.ssj.service.weixin.library.service.ILibJoinService;
  59. import com.ssj.service.weixin.library.service.LibManagerAuditService;
  60. import com.ssj.service.weixin.user.service.UserAccountService;
  61. import com.ssj.service.weixin.user.service.UserService;
  62. import com.ssj.taskthread.ThreadPool;
  63. import com.ssj.utils.Paging;
  64. import com.ssj.weixin.utils.LoginWxUtil;
  65. import org.apache.commons.collections.CollectionUtils;
  66. import org.apache.commons.lang3.StringUtils;
  67. import org.apache.commons.lang3.time.DateFormatUtils;
  68. import org.elasticsearch.action.search.SearchRequest;
  69. import org.elasticsearch.action.search.SearchResponse;
  70. import org.elasticsearch.index.query.BoolQueryBuilder;
  71. import org.elasticsearch.index.query.QueryBuilders;
  72. import org.elasticsearch.index.query.TermsQueryBuilder;
  73. import org.elasticsearch.script.Script;
  74. import org.elasticsearch.search.aggregations.Aggregation;
  75. import org.elasticsearch.search.aggregations.AggregationBuilders;
  76. import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
  77. import org.elasticsearch.search.aggregations.bucket.terms.Terms;
  78. import org.elasticsearch.search.aggregations.metrics.ParsedSum;
  79. import org.elasticsearch.search.builder.SearchSourceBuilder;
  80. import org.slf4j.Logger;
  81. import org.slf4j.LoggerFactory;
  82. import org.springframework.beans.factory.annotation.Autowired;
  83. import org.springframework.data.domain.Page;
  84. import org.springframework.data.domain.Pageable;
  85. import org.springframework.data.domain.Sort;
  86. import org.springframework.data.mongodb.core.MongoTemplate;
  87. import org.springframework.transaction.annotation.Transactional;
  88. import org.springframework.web.multipart.MultipartFile;
  89. import java.math.BigDecimal;
  90. import java.text.SimpleDateFormat;
  91. import java.util.*;
  92. import java.util.stream.Collectors;
  93. /**
  94. * @author Mount Liu
  95. * @date 2020/3/18
  96. */
  97. @Service(version = "1.0")
  98. @Transactional
  99. public class KmtExerciseSysServiceImpl implements KmtExerciseSysService {
  100. private Logger logger = LoggerFactory.getLogger(this.getClass());
  101. final static int SUCCESS = 1;
  102. final static int FAIL = 2;
  103. @Autowired
  104. private UserService userService;
  105. @Autowired
  106. private ParentService parentService;
  107. @Autowired
  108. private TokenManager tokenManager;
  109. @Autowired
  110. private IBookManagerService managerService;
  111. @Autowired
  112. private LibManagerMapper libManagerMapper;
  113. @Autowired
  114. private LibManagerAuditService libManagerAuditService;
  115. @Autowired
  116. private BankService bankService;
  117. @Autowired
  118. private ICardInfoService cardInfoService;
  119. @Autowired
  120. private OneDayAndOneMonthDao oneDayAndOneMonthDao;
  121. @Autowired
  122. private KmtExerciseMapper kmtExerciseMapper;
  123. @Autowired
  124. private BaseSearchService baseSearchService;
  125. @Autowired
  126. private PagingHibernateJdbcDao pagingHibernateJdbcDao;
  127. @Autowired
  128. private ExerciseQuestionSearchService exerciseQuestionSearchService;
  129. @Autowired
  130. private KmtExerciseMapperService kmtExerciseMapperService;
  131. @Autowired
  132. private KmtQuestionMapper kmtQuestionMapper;
  133. @Autowired
  134. private KnowledgeVersion knowledgeVersion;
  135. @Autowired
  136. private KmtExerciseQuestionService kmtExerciseQuestionService;
  137. @Autowired
  138. private LibManagerAuditMapper managerAuditMapper;
  139. @Autowired
  140. private AdminService adminService;
  141. @Autowired
  142. private FileInfoService fileInfoService;
  143. @Autowired
  144. private KmtExerciseBookService kmtExerciseBookService;
  145. @Autowired
  146. private ConfigService configService;
  147. @Autowired
  148. private KmtExerciseBookLibService KmtExerciseBookLibService;
  149. @Autowired
  150. private ILibJoinService libJoinService;
  151. @Autowired
  152. private IBookManagerDao bookManagerDao;
  153. @Autowired
  154. private MongoTemplate mongoTemplate;
  155. @Autowired
  156. private KmtExerciseTeacherRecordService kmtExerciseTeacherRecordService;
  157. @Autowired
  158. private SconPushMessageService sconPushMessageService;
  159. @Autowired
  160. private UserAccountService userAccountService;
  161. @Autowired
  162. private KmtExerciseLibPriorityService kmtExerciseLibPriorityService;
  163. @Autowired
  164. private KmtExerciseService kmtExerciseService;
  165. @Autowired
  166. private KmtQualityQuestionsService kmtQualityQuestionsService;
  167. @Autowired
  168. private RedisUtil redisUtil;
  169. @Override
  170. public ResponseEntity getVerificationCode(String phone, int type, String userId) throws Exception {
  171. ResponseEntity responseEntity = new ResponseEntity();
  172. User phoneUser = userService.findByMobile(phone);
  173. //短信类型 1:用户注册;2:忘记密码;3:换绑手机号
  174. //忘记密码
  175. if (type == 1) {
  176. if (phoneUser != null) {
  177. return responseEntity.failure(ResponseConstant.CODE_000, "已存在该用户,请直接登录");
  178. }
  179. } else if (type == 2) {
  180. if (phoneUser == null) {
  181. return responseEntity.failure(ResponseConstant.CODE_000, "不存在此手机号码用户");
  182. }
  183. } else if (type == 3) {
  184. if (StringUtil.isNotBlank(userId)) {
  185. User user = userService.getById(userId);
  186. if (user != null && phone.equals(user.getMobile())) {
  187. return responseEntity.failure(ResponseConstant.CODE_000, "请换绑新号码");
  188. }
  189. }
  190. if (phoneUser != null) {
  191. return responseEntity.failure(ResponseConstant.CODE_000, "此手机号码已存在");
  192. }
  193. }
  194. parentService.sendSms(phone, 1);
  195. return responseEntity.success("验证码发送成功,请注意接收短信!");
  196. }
  197. @Override
  198. public ResponseEntity verifyCode(String phone, String code) throws Exception {
  199. ResponseEntity responseEntity = parentService.confirmSms(phone, code);
  200. if (responseEntity.getCode().equals("999")) {
  201. //清除验证码
  202. tokenManager.delString(phone);
  203. }
  204. return responseEntity;
  205. }
  206. @Override
  207. public ResponseEntity accountLogin(String loginName, String password) {
  208. ResponseEntity responseEntity = new ResponseEntity();
  209. String sysEnv = (String) SystemResourceLocator.getValue("SYS_ENV");
  210. if ("1".equals(sysEnv) && adminService.loginLocking(loginName, "KMT_SYS")) {
  211. return responseEntity.failure("您的账号已被锁定,请30分钟后重试");
  212. }
  213. User user = userService.findByMobile(loginName);
  214. if (user == null) {
  215. responseEntity.failure(ResponseConstant.CODE_000, "用户名或密码错误");
  216. return responseEntity;
  217. } else {
  218. User loginUser = userService.getUserByPassword(loginName, password);
  219. if (loginUser != null) {
  220. String userLoginToken = tokenManager.getToken(user.getId(), "PC");
  221. if (StringUtils.isBlank(userLoginToken)) {
  222. userLoginToken = tokenManager.createToken(null, user.getId(), "PC");
  223. }
  224. Map<String, Object> data = new HashMap<>(18);
  225. data.put("accessToken", userLoginToken);
  226. data.put("binded", 0);
  227. //有unionid是绑定过微信的账户
  228. if (StringUtil.isNotBlank(loginUser.getUnionid())){
  229. data.put("binded", 1);
  230. }
  231. //测试环境无须绑定
  232. if ("2".equals(sysEnv)){
  233. data.put("binded", 1);
  234. }
  235. responseEntity.success(data, "登录成功");
  236. tokenManager.clearPasswordWrongRecord(loginName);
  237. } else {
  238. int wrongCount = tokenManager.recordPasswordWrong(loginName, "KMT_SYS");
  239. if (wrongCount >= 5) {
  240. responseEntity.failure("用户名或密码错误,您的账号已被锁定,请30分钟后重试");
  241. } else if (wrongCount >= 2) {
  242. responseEntity.failure(String.format("您再输错%s次账号将会锁定", 5 - wrongCount));
  243. } else {
  244. responseEntity.failure("用户名或密码错误,请重新输入");
  245. }
  246. }
  247. }
  248. return responseEntity;
  249. }
  250. @Override
  251. public ResponseEntity setPassword(SetPasswordReq req) {
  252. ResponseEntity responseEntity = new ResponseEntity();
  253. if (req.getPassword().equals(req.getPhone())) {
  254. return responseEntity.failure("密码不能和用户名一致");
  255. }
  256. if (!PasswordUtil.checkRule(req.getPassword())) {
  257. return responseEntity.failure(PasswordUtil.CHECK_FAIL_MESSAGE);
  258. }
  259. User user = userService.findByMobile(req.getPhone());
  260. if (user == null) {
  261. user = new User();
  262. String userId = IdWorker.generateId();
  263. user.setId(userId);
  264. user.setCreateTime(new Date());
  265. user.setSubscribe(0);
  266. }
  267. user.setMobile(req.getPhone());
  268. String pwdSalt = PasswordUtil.generateSalt();
  269. String password = PasswordUtil.initPassword(req.getPassword(), pwdSalt);
  270. user.setPwdSalt(pwdSalt);
  271. user.setPassword(password);
  272. userService.save(user);
  273. return responseEntity.success("注册成功");
  274. }
  275. @Override
  276. public ResponseEntity resetPassword(ResetPasswordReq req, String userId) {
  277. ResponseEntity responseEntity = new ResponseEntity();
  278. User user = userService.getById(userId);
  279. if (!userService.verificationPassword(userId, req.getOldPassword())) {
  280. return responseEntity.failure("原始密码错误");
  281. }
  282. if (req.getNewPassword().equals(user.getMobile())) {
  283. return responseEntity.failure("密码不能和用户名一致");
  284. }
  285. if (PasswordUtil.verificationPassword(req.getNewPassword(), user.getPassword(), user.getPwdSalt())) {
  286. return responseEntity.failure("新密码不能与旧密码一致");
  287. }
  288. if (!PasswordUtil.checkRule(req.getNewPassword())) {
  289. return responseEntity.failure(PasswordUtil.CHECK_FAIL_MESSAGE);
  290. }
  291. userService.updateByResetPassword(user.getId(), req.getNewPassword());
  292. return responseEntity.success("重置成功");
  293. }
  294. @Override
  295. public ResponseEntity forgetPassword(ForgetPasswordReq req) throws Exception {
  296. ResponseEntity responseEntity = new ResponseEntity();
  297. User user = userService.findByMobile(req.getPhone());
  298. if (user == null) {
  299. return responseEntity.failure("此手机号码,非本站用户");
  300. }
  301. responseEntity = parentService.confirmSms(req.getPhone(), req.getVcode());
  302. if (!responseEntity.getCode().equals("999")) {
  303. return responseEntity.failure("验证码错误");
  304. }
  305. if (req.getPassword().equals(user.getMobile())) {
  306. return responseEntity.failure("密码不能和用户名一致");
  307. }
  308. if (PasswordUtil.verificationPassword(req.getPassword(), user.getPassword(), user.getPwdSalt())) {
  309. return responseEntity.failure("新密码不能与旧密码一致");
  310. }
  311. if (!PasswordUtil.checkRule(req.getPassword())) {
  312. return responseEntity.failure(PasswordUtil.CHECK_FAIL_MESSAGE);
  313. }
  314. String pwdSalt = PasswordUtil.generateSalt();
  315. String password = PasswordUtil.initPassword(req.getPassword(), pwdSalt);
  316. user.setPwdSalt(pwdSalt);
  317. user.setPassword(password);
  318. userService.save(user);
  319. //清除验证码
  320. tokenManager.delString(req.getPhone());
  321. return responseEntity.success("设置成功");
  322. }
  323. /**
  324. * 换绑手机号
  325. *
  326. * @return
  327. */
  328. @Override
  329. public ResponseEntity updateBindPhone(ForgetPasswordReq req, String userId) throws Exception {
  330. ResponseEntity responseEntity = parentService.confirmSms(req.getPhone(), req.getVcode());
  331. if (!responseEntity.getCode().equals("999")) {
  332. return responseEntity.failure("验证码错误");
  333. }
  334. if (!userService.verificationPassword(userId, req.getPassword())) {
  335. return responseEntity.failure("原始密码错误");
  336. }
  337. //照看此手机号是否已被别的用户绑定
  338. User phoneUser = userService.findByMobile(req.getPhone());
  339. if (phoneUser != null) {
  340. return responseEntity.failure(ResponseConstant.CODE_000, "此手机号码已存在");
  341. }
  342. User user = userService.getById(userId);
  343. user.setMobile(req.getPhone());
  344. userService.save(user);
  345. //清除验证码
  346. tokenManager.delString(req.getPhone());
  347. return responseEntity.success("换绑成功");
  348. }
  349. @Override
  350. public ResponseEntity saveInfo(String userId, SaveInfoExesysReq req) {
  351. ResponseEntity responseEntity = new ResponseEntity();
  352. //所有同名的老师
  353. String sameNameUserId = libManagerMapper.findExerciseTeacherByName(req.getName());
  354. List <TbLibManager> list = managerService.findAllByUserIdAndTypeAndStatus(userId, 17);
  355. TbLibManager tbLibManager=null;
  356. if(CollectionUtils.isNotEmpty(list)){
  357. tbLibManager=list.get(0);
  358. }
  359. if (StringUtil.isNotBlank(sameNameUserId) && !userId.equals(sameNameUserId)) {
  360. return responseEntity.failure("您的姓名与已有老师重复,可改为XXX1,XXX2等");
  361. }
  362. if ((req.getType().contains("7") || req.getType().contains("8")) && req.getType().length() > 1) {
  363. return responseEntity.failure("老师类型选择错误");
  364. }
  365. Map<String, Object> map = new HashMap<>(16);
  366. Date now = new Date();
  367. if (tbLibManager == null) {
  368. tbLibManager = new TbLibManager();
  369. //设为无效
  370. tbLibManager.setState(2);
  371. //录题管理员
  372. tbLibManager.setType(17);
  373. tbLibManager.setUserId(userId);
  374. tbLibManager.setCreateTime(now);
  375. }else{
  376. //查找所有审批中的记录
  377. List<TbLibManagerAudit> auditList = libManagerAuditService.findByLibManagerIdAndStatus(tbLibManager.getId(), 3);
  378. if (CollectionUtils.isNotEmpty(auditList)) {
  379. return responseEntity.failure("你已提交过资料,请勿重复提交");
  380. }
  381. }
  382. //设置头像
  383. if (StringUtil.isNotBlank(req.getImgUrl())) {
  384. tbLibManager.settPhoto(req.getImgUrl());
  385. } else {
  386. User user = userService.getById(userId);
  387. tbLibManager.settPhoto(user.getPhoto());
  388. }
  389. //提交资料则设置为下线
  390. tbLibManager.setIsOnline(0);
  391. managerService.save(tbLibManager);
  392. TbLibManagerAudit tbLibManagerAudit = new TbLibManagerAudit();
  393. tbLibManagerAudit.setUserId(userId);
  394. tbLibManagerAudit.setSex(req.getSex());
  395. tbLibManagerAudit.setMajor(req.getMajor());
  396. tbLibManagerAudit.setAuthority(req.getType());
  397. tbLibManagerAudit.setLibManagerId(tbLibManager.getId());
  398. tbLibManagerAudit.setName(req.getName());
  399. tbLibManagerAudit.setTelephone(req.getPhone());
  400. tbLibManagerAudit.setSchool(req.getSchool());
  401. tbLibManagerAudit.setImgUrl(req.getImgUrl());
  402. tbLibManagerAudit.setIdNum(req.getIdNumber());
  403. tbLibManagerAudit.setIdCon(req.getIdCon());
  404. tbLibManagerAudit.setIdFace(req.getIdFace());
  405. tbLibManagerAudit.setCertification(req.getCertification());
  406. //银行卡相关
  407. tbLibManagerAudit.setBankcardFace(req.getBankcardFace());
  408. tbLibManagerAudit.setBankcardCon(req.getBankcardCon());
  409. tbLibManagerAudit.setBankName(req.getBankName());
  410. tbLibManagerAudit.setBankIcon(req.getBankIcon());
  411. tbLibManagerAudit.setCardholder(req.getCardholder());
  412. tbLibManagerAudit.setCardNumber(req.getCardNumber());
  413. tbLibManagerAudit.setBankBranch(req.getBankBranch());
  414. //同tb_lib_manager.type
  415. tbLibManagerAudit.setType(17);
  416. //状态:审核中
  417. tbLibManagerAudit.setStatus(3);
  418. tbLibManagerAudit.setCreateTime(now);
  419. tbLibManagerAudit.setSubject(req.getSubject());
  420. //保存审批老师信息
  421. libManagerAuditService.save(tbLibManagerAudit);
  422. //清除PC用户token
  423. String accessToken = tokenManager.getToken(userId, "PC");
  424. if (StringUtils.isNotBlank(accessToken)) {
  425. tokenManager.removeToken(accessToken, "PC");
  426. //提交资料后强制下线,给前端的标识
  427. tokenManager.setString("invalid_reason_" + accessToken, "3");
  428. }
  429. responseEntity.success(map, "成功");
  430. return responseEntity;
  431. }
  432. @Override
  433. public ResponseEntity bindWxUnionId2PhoneUser (String code, String userId){
  434. ResponseEntity responseEntity = new ResponseEntity();
  435. responseEntity.success("绑定成功,请关注私塾家公众号");
  436. if(StringUtil.isNotBlank(code)) {
  437. User phoneUser = userService.getById(userId);
  438. if (phoneUser != null && StringUtil.isNotBlank(phoneUser.getMobile())){
  439. if (StringUtil.isBlank(phoneUser.getAccount()) || StringUtil.isBlank(phoneUser.getUnionid())){
  440. WeixinOauth2Token token = LoginWxUtil.getOauth2AccessToken(code,PropertiesUtil.getValue("weixin_aipc_appId"),
  441. PropertiesUtil.getValue("weixin_aipc_appSecret"));
  442. logger.info("从KMT---WeixinOauth2Token获取 ---openid----)" + token.getOpenId());
  443. logger.info("从KMT---WeixinOauth2Token获取 ---uunion----)" + token.getUnionId());
  444. if(StringUtil.isNotBlank(token.getUnionId())){
  445. User user = userService.getUserByUnionid(token.getUnionId());
  446. //微信用户记录的手机号为空, 需要删除微信记录, 清除tb_user_account的对应记录, 手机号不为空且不等于手机用户的手机号码,返回错误给前端,微信用户已绑定其他手机号,需要解绑
  447. if(user != null){
  448. if (StringUtil.isBlank(user.getMobile())){
  449. if (StringUtil.isNotBlank(user.getAccount())){
  450. phoneUser.setAccount(user.getAccount());
  451. }
  452. //清除废弃用户token信息
  453. tokenManager.delToken(user.getId());
  454. tokenManager.batchDel("user_id" + user.getUnionid() + "*");
  455. String sb = "合并校长端微信授权+手机注册用户信息:" + "微信用户userid(" +
  456. user.getId() + ")" + "--->" +
  457. "手机用户userid(" + phoneUser.getId() + ")";
  458. sconPushMessageService.savePushMessage(user.getId(), Constant.SCHOOL_MASTER_PLATFORM_TYPE, null, sb, "SYSTEM");
  459. user.setAccount(null);
  460. user.setUnionid(null);
  461. user.setUserName(user.getUserName() + "(已废弃)");
  462. userService.save(user);
  463. //清除tb_user_account
  464. userAccountService.updateByUserId(user.getId(), phoneUser.getId());
  465. } else if (!user.getMobile().equals(phoneUser.getMobile())){
  466. responseEntity.failure("微信用户已绑定其他手机号,绑定失败");
  467. return responseEntity;
  468. }
  469. }
  470. //保存手机用户
  471. //phoneUser.setAccount(token.getOpenId());
  472. phoneUser.setUnionid(token.getUnionId());
  473. userService.save(phoneUser);
  474. } else {
  475. responseEntity.failure("扫码获取信息失败, 请重新扫码");
  476. }
  477. } else {
  478. responseEntity.success("该用户已绑定微信");
  479. }
  480. } else {
  481. responseEntity.failure("非手机用户,请先用手机号注册登录");
  482. }
  483. }
  484. return responseEntity;
  485. }
  486. @Override
  487. public ResponseEntity getMyInfo(String userId) {
  488. ResponseEntity responseEntity = new ResponseEntity();
  489. UserDto dto = new UserDto();
  490. TbLibManager libManager;
  491. User user = userService.getById(userId);
  492. if (user == null) {
  493. return responseEntity.failure("未找到该用户");
  494. }
  495. //17 录题老师,18录题管理员
  496. int[] type = {17, 18};
  497. //是否是新注册的用户
  498. boolean isNewUser = true;
  499. //包含无效的数据,注销的数据
  500. List<TbLibManager> libManagerList = managerService.findAllByUserIdAndTypeIn(userId, type);
  501. if (libManagerList.size() > 0) {
  502. //单角色,多权限
  503. libManager = libManagerList.get(0);
  504. //如果是注销用户,则看有没有重新提交资料
  505. if (libManager.getIsCancelled() == 1) {
  506. //最新的审批记录
  507. TbLibManagerAudit audit = libManagerAuditService.findNewestOneByLibManagerId(libManager.getId());
  508. //审核中状态
  509. if (audit != null && audit.getStatus() == 3) {
  510. isNewUser = false;
  511. }
  512. } else {
  513. isNewUser = false;
  514. }
  515. if(!isNewUser){
  516. //没有头像自动更新头像
  517. if (StringUtil.isBlank(libManager.gettPhoto())) {
  518. libManager.settPhoto(user.getPhoto());
  519. managerService.save(libManager);
  520. }
  521. if (libManager.getType() == 17) {
  522. this.getTeacherInfo(libManager, dto);
  523. } else if (libManager.getType() == 18) {
  524. this.getManagerInfo(libManager, dto);
  525. return responseEntity.success(dto, "成功");
  526. }
  527. }
  528. }
  529. //注册
  530. if(isNewUser){
  531. dto.setImgUrl(user.getPhoto());
  532. //第一次审核
  533. dto.setIsFirst(1);
  534. //未审核
  535. dto.setApproveStatus(0);
  536. }
  537. dto.setUserId(userId);
  538. Sort sort = new Sort("bankName");
  539. List<Bank> bankList = bankService.findAll(sort);
  540. List<UserDto.Bank> bankDtoList = new ArrayList<>();
  541. if (CollectionUtils.isNotEmpty(bankList)) {
  542. for (Bank bank : bankList) {
  543. UserDto.Bank bankDto = dto.new Bank();
  544. bankDto.setBankName(bank.getBankName());
  545. bankDto.setBankIcon(bank.getBankIcon());
  546. bankDtoList.add(bankDto);
  547. }
  548. }
  549. dto.setBankList(bankDtoList);
  550. responseEntity.success(dto, "成功");
  551. return responseEntity;
  552. }
  553. private void getTeacherInfo(TbLibManager libManager, UserDto dto) {
  554. TbLibManagerAudit auditManager = null;
  555. //审批记录信息
  556. List<TbLibManagerAudit> auditList = libManagerAuditService.findByLibManagerId(libManager.getId());
  557. //isFirst=1的情况:审批记录是“审批拒绝”和“审核中”(所有审批记录都是被拒绝;审批记录有且只有一条为“审核中”)
  558. int isFirst = 0;
  559. int approveStatus = 0;
  560. int i = 0;
  561. if (auditList != null && auditList.size() > 0) {
  562. for (TbLibManagerAudit audit : auditList) {
  563. if (audit.getStatus() == 1) {
  564. i++;
  565. }
  566. }
  567. //第2种情况
  568. if (i == 0) {
  569. isFirst = 1;
  570. }
  571. auditManager = auditList.get(0);
  572. approveStatus = auditManager.getStatus();
  573. dto.setReason(auditManager.getReason());
  574. }
  575. dto.setIsFirst(isFirst);
  576. dto.setApproveStatus(approveStatus);
  577. //审批中和审批拒绝,显示填写的审批的数据
  578. if (dto.getApproveStatus() == 3 || dto.getApproveStatus() == 2) {
  579. dto.setImgUrl(auditManager.getImgUrl());
  580. dto.setName(auditManager.getName());
  581. dto.setSex(auditManager.getSex());
  582. dto.setSchool(auditManager.getSchool());
  583. dto.setMajor(auditManager.getMajor());
  584. dto.setPhone(auditManager.getTelephone());
  585. dto.setType(auditManager.getAuthority());
  586. //银行卡相关信息
  587. dto.setBankcardFace(auditManager.getBankcardFace());
  588. dto.setBankcardCon(auditManager.getBankcardCon());
  589. dto.setBankName(auditManager.getBankName());
  590. dto.setBankIcon(auditManager.getBankIcon());
  591. dto.setCardholder(auditManager.getCardholder());
  592. dto.setCardNumber(auditManager.getCardNumber());
  593. dto.setBankBranch(auditManager.getBankBranch());
  594. //身份证、证件
  595. dto.setIdNumber(auditManager.getIdNum());
  596. dto.setIdFace(auditManager.getIdFace());
  597. dto.setIdCon(auditManager.getIdCon());
  598. dto.setCertification(auditManager.getCertification());
  599. dto.setSubject(auditManager.getSubject());
  600. } else {
  601. dto.setImgUrl(libManager.gettPhoto());
  602. dto.setName(libManager.getName());
  603. dto.setSex(libManager.getSex());
  604. dto.setSchool(libManager.getSchool());
  605. dto.setMajor(libManager.getMajor());
  606. dto.setPhone(libManager.getTelephone());
  607. dto.setType(libManager.getAuthority());
  608. //银行卡相关信息
  609. TbCardInfo cardInfo = cardInfoService.findByUserIdValid(libManager.getUserId());
  610. if (cardInfo == null) {
  611. cardInfo = new TbCardInfo();
  612. }
  613. dto.setBankcardFace(cardInfo.getBankcardFace());
  614. dto.setBankcardCon(cardInfo.getBankcardCon());
  615. dto.setBankName(cardInfo.getCardBank());
  616. dto.setBankIcon(cardInfo.getBankIcon());
  617. dto.setCardholder(cardInfo.getCardName());
  618. dto.setCardNumber(cardInfo.getCardNum());
  619. dto.setBankBranch(cardInfo.getSubbranch());
  620. //身份证、证件
  621. dto.setIdNumber(libManager.getIdNum());
  622. dto.setIdFace(libManager.getIdFace());
  623. dto.setIdCon(libManager.getIdCon());
  624. dto.setCertification(libManager.getCertification());
  625. dto.setSubject(libManager.getCourseName());
  626. }
  627. //注册日期
  628. dto.setCreateDate(DateHelper.format(libManager.getCreateTime(),"yyyy.MM.dd"));
  629. dto.setIsBanned(libManager.getIsBanned());
  630. dto.setRole(libManager.getType());
  631. }
  632. private void getManagerInfo(TbLibManager libManager, UserDto dto) {
  633. dto.setUserId(libManager.getUserId());
  634. dto.setName(libManager.getName());
  635. dto.setImgUrl(libManager.gettPhoto());
  636. dto.setRole(libManager.getType());
  637. }
  638. @Override
  639. public ResponseEntity queryAllRegisterTeacher(ExercisePageReq req, Pageable pageable){
  640. ResponseEntity responseEntity=new ResponseEntity();
  641. Map<String,Object> param=new HashMap<>();
  642. List<ApplyRegisterTeacherDto> list=new ArrayList<>();
  643. Map<String,Object> data=new HashMap<>();
  644. param.put("EQ_status",3);
  645. param.put("EQ_type",17);
  646. String name=null;
  647. String author=null;
  648. if(StringUtils.isNotBlank(req.getName())){
  649. name=req.getName();
  650. if(StringUtils.isNotBlank(this.getExerciseTeacherType(req.getName()))){
  651. author=this.getExerciseTeacherType(req.getName()).toString();
  652. }
  653. }
  654. com.baomidou.mybatisplus.extension.plugins.pagination.Page page =
  655. new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  656. List<TbLibManagerAudit> libManagerAuditList= managerAuditMapper.findPageByName(page,name,name, author);
  657. libManagerAuditList.forEach(it->{
  658. ApplyRegisterTeacherDto dto=new ApplyRegisterTeacherDto();
  659. dto.setTeacherId(it.getUserId());
  660. dto.setImgUrl(it.getImgUrl());
  661. dto.setName(it.getName());
  662. dto.setSex(it.getSex());
  663. dto.setSchool(it.getSchool());
  664. dto.setTelephone(it.getTelephone());
  665. dto.setProfession(it.getMajor());
  666. dto.setAuthority(it.getAuthority());
  667. dto.setIdFace(it.getIdFace());
  668. dto.setIdCon(it.getIdCon());
  669. dto.setIdNumber(it.getIdNum());
  670. dto.setStudentNum(it.getCertification());
  671. dto.setBankName(it.getBankName());
  672. dto.setBankFace(it.getBankcardFace());
  673. dto.setBankCon(it.getBankcardCon());
  674. dto.setCardHolder(it.getCardholder());
  675. dto.setCardNumber(it.getCardNumber());
  676. dto.setBankBranch(it.getBankBranch());
  677. dto.setBankIcon(it.getBankIcon());
  678. dto.setRegisTime(DateUtil.format_yyyyMMddHHmmss(it.getCreateTime()));
  679. dto.setSubject(it.getSubject());
  680. list.add(dto);
  681. });
  682. data.put("total",(int) page.getTotal());
  683. data.put("pages",page.getPages());
  684. data.put("pageNo",req.getPageNo());
  685. data.put("pageSize",req.getPageSize());
  686. data.put("list",list);
  687. return responseEntity.success(data,"成功");
  688. }
  689. private StringBuilder getExerciseTeacherType(String name){
  690. List<String> list=new ArrayList<>();
  691. StringBuilder str=new StringBuilder();
  692. list.add("1练习册加工");
  693. list.add("2练习册审核");
  694. list.add("3练习册解析");
  695. list.add("4练习册解审");
  696. list.add("5题库迁移");
  697. list.add("6题库审核");
  698. list.add("7题库录入");
  699. list.add("8答案校对");
  700. HashMap<String,Object> map=new HashMap<>();
  701. list= list.stream().filter(it->it.contains(name)).collect(Collectors.toList());
  702. if(CollectionUtils.isNotEmpty(list)){
  703. list.forEach(it->{
  704. str.append(it.substring(0,1));
  705. });
  706. }
  707. return str;
  708. }
  709. @Override
  710. public ResponseEntity applyExerciseTeacherOperate(ApplyOperateReq req){
  711. ResponseEntity responseEntity = new ResponseEntity();
  712. TbLibManagerAudit audit = libManagerAuditService.findByUserIdAndTypeAndStatus(req.getApplicantId(),17,3);
  713. if (audit == null) {
  714. responseEntity.failure("无审批记录,失败");
  715. return responseEntity;
  716. }
  717. //审批通过
  718. if (SUCCESS == req.getOperate()) {
  719. TbLibManager teacher = managerService.findAllByUserIdAndTypeAndCancelled(req.getApplicantId(), 17);
  720. if (teacher == null) {
  721. responseEntity.failure("不存在该老师,请联系管理员");
  722. return responseEntity;
  723. }
  724. //将注销了的老师设置为失效
  725. managerService.updateByUserIdAndTypeAndCancelled(req.getApplicantId(),17,1);
  726. teacher.setSex(audit.getSex());
  727. teacher.setName(audit.getName());
  728. teacher.setTelephone(audit.getTelephone());
  729. teacher.setSchool(audit.getSchool());
  730. teacher.setMajor(audit.getMajor());
  731. teacher.setAuthority(audit.getAuthority());
  732. teacher.settPhoto(audit.getImgUrl());
  733. teacher.setState(1);
  734. teacher.setType(audit.getType());
  735. teacher.setIdNum(audit.getIdNum());
  736. teacher.setIdFace(audit.getIdFace());
  737. teacher.setIdCon(audit.getIdCon());
  738. teacher.setCertification(audit.getCertification());
  739. teacher.setCourseName(audit.getSubject());
  740. //如果有注销的设置为非注销的
  741. teacher.setIsCancelled(0);
  742. managerService.save(teacher);
  743. //插入银行卡相关信息
  744. TbCardInfo cardInfo = cardInfoService.findByUserIdValid(teacher.getUserId());
  745. if (cardInfo == null) {
  746. cardInfo = new TbCardInfo();
  747. cardInfo.setUserId(teacher.getUserId());
  748. cardInfo.setState(1);
  749. }
  750. cardInfo.setCardBank(audit.getBankName());
  751. cardInfo.setBankcardCon(audit.getBankcardCon());
  752. cardInfo.setBankcardFace(audit.getBankcardFace());
  753. cardInfo.setBankIcon(audit.getBankIcon());
  754. cardInfo.setCardName(audit.getCardholder());
  755. cardInfo.setCardNum(audit.getCardNumber());
  756. cardInfo.setSubbranch(audit.getBankBranch());
  757. cardInfoService.save(cardInfo);
  758. audit.setStatus(SUCCESS);
  759. } else if (FAIL == req.getOperate()) {
  760. //审批拒绝
  761. audit.setStatus(FAIL);
  762. audit.setReason(req.getReason());
  763. }
  764. libManagerAuditService.save(audit);
  765. String token = tokenManager.getToken(audit.getUserId(), "APP_TEACHER");
  766. if (StringUtils.isNotBlank(token)) {
  767. tokenManager.removeToken(token, "APP_TEACHER");
  768. }
  769. //清除PC用户token
  770. String accessToken = tokenManager.getToken(req.getApplicantId(), "PC");
  771. if (StringUtils.isNotBlank(accessToken)) {
  772. tokenManager.removeToken(accessToken, "PC");
  773. }
  774. responseEntity.success("成功");
  775. return responseEntity;
  776. }
  777. @Override
  778. public ResponseEntity findTeacherInfoList(MonthPageReq req, Pageable pageable){
  779. ResponseEntity responseEntity=new ResponseEntity();
  780. Map<String,Object> param=new HashMap<>();
  781. List<ExerciseTeachersDTo> list=new ArrayList<>();
  782. Map<String,Object> data=new HashMap<>();
  783. param.put("month",req.getMonth());
  784. if(StringUtils.isNotBlank(req.getName())){
  785. param.put("name",req.getName());
  786. }
  787. Page<Map<String, Object>> page = oneDayAndOneMonthDao.findAllExreciseTeacherInfo(pageable, param);
  788. for (Map<String, Object> pages : page) {
  789. MapGetterTool mapGetterTool = new MapGetterTool(pages);
  790. ExerciseTeachersDTo teacherInfoDto = new ExerciseTeachersDTo();
  791. teacherInfoDto.setTeacherId(mapGetterTool.getString("user_id"));
  792. teacherInfoDto.setImgUrl(mapGetterTool.getString("t_photo"));
  793. teacherInfoDto.setIdNumber(mapGetterTool.getString("id_num"));
  794. teacherInfoDto.setTelephone(mapGetterTool.getString("telephone"));
  795. teacherInfoDto.setName(mapGetterTool.getString("name"));
  796. teacherInfoDto.setSchool(mapGetterTool.getString("school"));
  797. teacherInfoDto.setProfession(mapGetterTool.getString("major"));
  798. teacherInfoDto.setType(mapGetterTool.getString("authority"));
  799. teacherInfoDto.setIdFace(mapGetterTool.getString("id_face"));
  800. teacherInfoDto.setIdCon(mapGetterTool.getString("id_con"));
  801. teacherInfoDto.setBankName(mapGetterTool.getString("card_bank"));
  802. teacherInfoDto.setIdNumber(mapGetterTool.getString("id_num"));
  803. teacherInfoDto.setStudentNum(mapGetterTool.getString("certification"));
  804. teacherInfoDto.setBankBranch(mapGetterTool.getString("subbranch"));
  805. teacherInfoDto.setBankFace(mapGetterTool.getString("bankcard_face"));
  806. teacherInfoDto.setBankCon(mapGetterTool.getString("bankcard_con"));
  807. teacherInfoDto.setBankIcon(mapGetterTool.getString("bank_icon"));
  808. teacherInfoDto.setCardHolder(mapGetterTool.getString("card_name"));
  809. teacherInfoDto.setCardNumber(mapGetterTool.getString("card_num"));
  810. teacherInfoDto.setSex(mapGetterTool.getInteger("sex"));
  811. teacherInfoDto.setSubject(mapGetterTool.getString("course_name"));
  812. teacherInfoDto.setRegisTime(Optional.ofNullable(DateUtil.format_yyyyMMddHHmmss(mapGetterTool.getDate("create_time"))).orElse(""));
  813. int workStatus=0;
  814. if (Objects.equals(mapGetterTool.getInteger("is_cancelled"), 1)) {
  815. workStatus = 4;
  816. } else if (Objects.equals(mapGetterTool.getInteger("is_banned"), 1)) {
  817. workStatus = 3;
  818. } else if (Objects.equals(mapGetterTool.getInteger("is_formal"), 1)) {
  819. workStatus = 2;
  820. } else {
  821. workStatus = 1;
  822. }
  823. teacherInfoDto.setWorkStatus(workStatus);
  824. list.add(teacherInfoDto);
  825. }
  826. //查询未注册审核的老师数量
  827. int unapplyOperateNum= libManagerAuditService.countUnOperateNum();
  828. data.put("unapplyOperateNum",unapplyOperateNum);
  829. data.put("pages",page.getTotalPages());
  830. data.put("total",page.getTotalElements());
  831. data.put("pageNo",pageable.getPageNumber());
  832. data.put("pageSize",pageable.getPageSize());
  833. data.put("list",list);
  834. return responseEntity.success(data,"成功");
  835. }
  836. @Override
  837. public ResponseEntity findLastInsertMonth(){
  838. ResponseEntity responseEntity=new ResponseEntity();
  839. String month=null;
  840. Map<String,Object> data=new HashMap<>();
  841. TbLibManager tbLibManager=managerService.findByTypeAndState(17,1);
  842. if(null==tbLibManager){
  843. month= DateFormatUtils.format(new Date(),"yyyy-MM-dd");
  844. }
  845. month=DateFormatUtils.format(tbLibManager.getCreateTime(),"yyyy-MM-dd");
  846. data.put("month",month);
  847. return responseEntity.success(data,"成功");
  848. }
  849. @Override
  850. public ResponseEntity findExerciseTeacherList(ExerciseTeacherListReq req) {
  851. ResponseEntity responseEntity = new ResponseEntity();
  852. try {
  853. DateUtil.parse_yyyyMMddHHmmss(req.getMaxCreateTime());
  854. } catch (Exception e) {
  855. return responseEntity.failure("最大创建时间格式错误");
  856. }
  857. com.baomidou.mybatisplus.extension.plugins.pagination.Page page =
  858. new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  859. List<ExerciseTeacherDTO> list1=new ArrayList<>();
  860. List<TbLibManager> list=libManagerMapper.findTbLibManagersByCreateTime(page,req);
  861. list.forEach(a->{
  862. ExerciseTeacherDTO dto=new ExerciseTeacherDTO();
  863. String userId=a.getUserId();
  864. Map<String,Object> map=libManagerMapper.findKmtTeacherLists(userId);
  865. int unFinishCount=0;
  866. int totalCount=0;
  867. if(null!=map){
  868. unFinishCount= Integer.parseInt(map.get("unFinishCount").toString());
  869. totalCount= Integer.parseInt(map.get("totalCount").toString());
  870. }
  871. dto.setTeacherId(a.getUserId());
  872. dto.setImage(a.gettPhoto());
  873. dto.setName(a.getName());
  874. dto.setSubject(a.getCourseName());
  875. dto.setAuthority(a.getAuthority());
  876. dto.setTeacherTypeStr(dto.getTeacherTypeStr());
  877. dto.setTeacherWorkingType(dto.getTeacherWorkingType());
  878. dto.setUnFinishCount(unFinishCount);
  879. dto.setTotalCount(totalCount);
  880. list1.add(dto);
  881. });
  882. Map<String, Object> resultMap = new HashMap<>();
  883. resultMap.put("pageNo", page.getCurrent());
  884. resultMap.put("pageSize", page.getSize());
  885. resultMap.put("pages", page.getPages());
  886. resultMap.put("total", page.getTotal());
  887. resultMap.put("list", list1);
  888. return responseEntity.success(resultMap, "查询成功");
  889. }
  890. @Override
  891. public List<ExerciseTeachersDTo> findAllExerciseTeachersDto(String month, Pageable pageable){
  892. Map<String,Object> params=new HashMap<>();
  893. List<ExerciseTeachersDTo> list=new ArrayList<>();
  894. params.put("month",month);
  895. params.put("type",17);
  896. Page<Map<String, Object>> page = oneDayAndOneMonthDao.findAllExreciseTeacherInfo(pageable, params);
  897. for (Map<String, Object> pages : page) {
  898. MapGetterTool mapGetterTool = new MapGetterTool(pages);
  899. ExerciseTeachersDTo teacherInfoDto = new ExerciseTeachersDTo();
  900. teacherInfoDto.setName(mapGetterTool.getString("name"));
  901. teacherInfoDto.setSchool(mapGetterTool.getString("school"));
  902. teacherInfoDto.setSex(mapGetterTool.getInteger("sex"));
  903. teacherInfoDto.setProfession(mapGetterTool.getString("major"));
  904. teacherInfoDto.setTelephone(mapGetterTool.getString("telephone"));
  905. teacherInfoDto.setType(mapGetterTool.getString("authority"));
  906. teacherInfoDto.setBankName(mapGetterTool.getString("card_bank"));
  907. teacherInfoDto.setIdNumber(mapGetterTool.getString("id_num"));
  908. teacherInfoDto.setBankBranch(mapGetterTool.getString("subbranch"));
  909. teacherInfoDto.setCardHolder(mapGetterTool.getString("card_name"));
  910. teacherInfoDto.setCardNumber(mapGetterTool.getString("card_num"));
  911. teacherInfoDto.setRegisTime(Optional.ofNullable(DateUtil.format_yyyyMMddHHmmss(mapGetterTool.getDate("create_time"))).orElse(""));
  912. list.add(teacherInfoDto);
  913. }
  914. return list;
  915. }
  916. @Override
  917. public ResponseEntity findKmtTeacherList(FindKmtTeacherListReq req) {
  918. ResponseEntity responseEntity = new ResponseEntity();
  919. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  920. List<ExerciseTeacherDTO> list = libManagerMapper.findKmtTeacherList(req.getSubject(), req.getType(), 2, req.getTeacherName(), page);
  921. StringBuilder teacherTypeStr;
  922. for (ExerciseTeacherDTO item : list){
  923. teacherTypeStr = new StringBuilder();
  924. if (item.getAuthority().contains("5")){
  925. teacherTypeStr.append("加工、");
  926. }
  927. if (item.getAuthority().contains("6")){
  928. teacherTypeStr.append("审核、");
  929. }
  930. if (teacherTypeStr.length() > 0) {
  931. teacherTypeStr.deleteCharAt(teacherTypeStr.length() - 1);
  932. }
  933. item.setTeacherTypeStr(teacherTypeStr.toString());
  934. }
  935. Map<String, Object> resultMap = new HashMap<>();
  936. resultMap.put("pageNo", page.getCurrent());
  937. resultMap.put("pageSize", page.getSize());
  938. resultMap.put("pages", page.getPages());
  939. resultMap.put("total", page.getTotal());
  940. resultMap.put("list", list);
  941. return responseEntity.success(resultMap, "查询成功");
  942. }
  943. @Override
  944. public ResponseEntity changeTeacherWorkingStatus(ChangeTeacherWorkingStatusReq req) {
  945. ResponseEntity responseEntity = new ResponseEntity();
  946. TbLibManager libManager = managerService.findByUserIdAndType(req.getTeacherId(), 17);
  947. if (libManager != null){
  948. //1解冻账号, 2转正,3冻结账号,4注销账号
  949. switch (req.getTeacherWorkingType()) {
  950. case 1:
  951. libManager.setIsBanned(0);
  952. break;
  953. case 2:
  954. libManager.setIsFormal("1");
  955. break;
  956. case 3:
  957. libManager.setIsBanned(1);
  958. //将老师设置为下线
  959. String accessToken=tokenManager.getToken(req.getTeacherId(),"PC");
  960. if(StringUtils.isNotBlank(accessToken)){
  961. tokenManager.removeToken(accessToken,"PC");
  962. tokenManager.setString("invalid_reason_"+accessToken,"1");
  963. }
  964. //更改在线状态
  965. bookManagerDao.updateTeacherOnlineStatusByTeacherid(req.getTeacherId());
  966. break;
  967. //注销账号如果有资料审批,则设置为审批拒绝
  968. case 4:
  969. libManager.setIsCancelled(1);
  970. //如果是校对中的老师,校对中的校对id为空
  971. kmtExerciseMapper.updateKmtExerciseBookAnswerCorrecterId(req.getTeacherId());
  972. TbLibManagerAudit audit = libManagerAuditService.findNewestOneByLibManagerId(libManager.getId());
  973. if (audit != null && audit.getStatus() == 3) {
  974. audit.setStatus(2);
  975. audit.setReason("用户被注销,自动设置为拒绝");
  976. libManagerAuditService.save(audit);
  977. }
  978. //将老师设置为下线
  979. String accessToken1=tokenManager.getToken(req.getTeacherId(),"PC");
  980. if(StringUtils.isNotBlank(accessToken1)){
  981. tokenManager.removeToken(accessToken1,"PC");
  982. tokenManager.setString("invalid_reason_"+accessToken1,"1");
  983. }
  984. //更改在线状态
  985. bookManagerDao.updateTeacherOnlineStatusByTeacherid(req.getTeacherId());
  986. break;
  987. }
  988. managerService.save(libManager);
  989. responseEntity.success(ResponseConstant.CODE_999, "操作成功");
  990. } else {
  991. responseEntity.success(ResponseConstant.CODE_000, "用户已注销");
  992. }
  993. return responseEntity;
  994. }
  995. @Override
  996. public ResponseEntity findKmtTeacherReviseQuestions(FindTeacherReviseQuestionsReq req) {
  997. ResponseEntity responseEntity = new ResponseEntity();
  998. Map<String, String> param = new HashMap<>();
  999. param.put("detailId", req.getDetailId());
  1000. param.put("bookId", req.getBookId());
  1001. param.put("teacherId", req.getTeacherId());
  1002. //es的题目数据
  1003. List<Map> list = exerciseQuestionSearchService.findKmtRollbackQuestions(param);
  1004. List<ExerciseQuetionDto> questions = kmtQualityQuestionsService.parseMapToExerciseQuestionList(list);
  1005. questions = kmtExerciseMapperService.findAndAppendBigQuestion2List(questions);
  1006. Map<String, Object> data = new HashMap<>();
  1007. data.put("list", kmtExerciseQuestionService.getQuestionGroupList(questions, false));
  1008. return responseEntity.success(data, "查询成功");
  1009. }
  1010. @Override
  1011. public ResponseEntity findKmtTeacherDetails(FindKmtTeacherDetailReq req) {
  1012. ResponseEntity responseEntity = new ResponseEntity();
  1013. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1014. List<KmtTeacherDetailDto> list = kmtQuestionMapper.findKmtTeacherDetails(req.getTeacherId(), req.getDetailName(), 4, page);
  1015. for (KmtTeacherDetailDto item : list){
  1016. item.setVersionName(knowledgeVersion.getVersionNameBySubjectAndVersionNum(item.getCourseName(), item.getVersionType()));
  1017. item.setUnFinishCount(item.getTotalCount().intValue() - item.getUnFinishCount().intValue());
  1018. }
  1019. Map<String, Object> resultMap = new HashMap<>();
  1020. resultMap.put("pageNo", page.getCurrent());
  1021. resultMap.put("pageSize", page.getSize());
  1022. resultMap.put("pages", page.getPages());
  1023. resultMap.put("total", page.getTotal());
  1024. resultMap.put("list", list);
  1025. return responseEntity.success(resultMap, "查询成功");
  1026. }
  1027. @Override
  1028. public ResponseEntity findExerciseTeacherDetails(ExerciseTeacherDetailReq req) {
  1029. ResponseEntity responseEntity = new ResponseEntity();
  1030. try {
  1031. DateUtil.parse_yyyyMMddHHmmss(req.getMaxCreateTime());
  1032. } catch (Exception e) {
  1033. return responseEntity.failure("最大创建时间格式错误");
  1034. }
  1035. IPage<ExerciseTeacherDetailDTO> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(req.getPageNo(), req.getPageSize());
  1036. libManagerMapper.findExerciseTeacherDetails(page, req);
  1037. Map<String, Object> resultMap = new HashMap<>();
  1038. resultMap.put("pageNo", page.getCurrent());
  1039. resultMap.put("pageSize", page.getSize());
  1040. resultMap.put("pages", page.getPages());
  1041. resultMap.put("total", page.getTotal());
  1042. resultMap.put("list", page.getRecords());
  1043. return responseEntity.success(resultMap, "查询成功");
  1044. }
  1045. @Override
  1046. public int refreshBookStatus(List<String> selectedExerciseBookIdList) {
  1047. int offset = 0;
  1048. int pageSize = 50;
  1049. int updateCount = 0;
  1050. List<KmtExerciseBook> kmtExerciseBookList;
  1051. List<KmtExerciseBookCount> kmtExerciseBookCountList = new ArrayList<>(pageSize);
  1052. KmtExerciseBookCount kmtExerciseBookCount;
  1053. Map<String, List<KmtExerciseBook>> listMap;
  1054. Set<String> exerciseBookIdSet;
  1055. SearchRequest searchRequest = null;
  1056. SearchResponse searchResponse;
  1057. ParsedStringTerms groupByExerciseBookId;
  1058. ParsedStringTerms groupByUnitId;
  1059. do {
  1060. kmtExerciseBookList = kmtExerciseMapper.findAllExerciseBookPage(selectedExerciseBookIdList, offset, pageSize);
  1061. if (kmtExerciseBookList.isEmpty()) {
  1062. break;
  1063. }
  1064. if (searchRequest == null) {
  1065. // es统计联系测题目状态
  1066. searchRequest = new SearchRequest("kmt_exercise_questions");
  1067. searchRequest.source(SearchSourceBuilder.searchSource());
  1068. searchRequest.source()
  1069. .aggregation(AggregationBuilders.terms("group_by_exerciseBookId")
  1070. .field("exerciseBookId.keyword")
  1071. .size(pageSize)
  1072. .subAggregation(AggregationBuilders.terms("groupByUnitId_handle")
  1073. .field("unitId.keyword")
  1074. .size(200)
  1075. .subAggregation(AggregationBuilders.sum("unprocessedCount")
  1076. .script(new Script("if(doc['dealStatus'].value == 0){return 1}else{return 0}")))
  1077. .subAggregation(AggregationBuilders.sum("processedCount")
  1078. .script(new Script("if(doc['dealStatus'].value > 1){return 1}else{return 0}")))
  1079. .subAggregation(AggregationBuilders.sum("repulseCount")
  1080. .script(new Script("if(doc['dealStatus'].value == 1){return 1}else{return 0}"))))
  1081. .subAggregation(AggregationBuilders.terms("groupByUnitId_handleAudit")
  1082. .field("unitId.keyword")
  1083. .size(200)
  1084. .subAggregation(AggregationBuilders.sum("unprocessedCount")
  1085. .script(new Script("if(doc['dealStatus'].value < 4){return 1}else{return 0}")))
  1086. .subAggregation(AggregationBuilders.sum("processedCount")
  1087. .script(new Script("if(doc['dealStatus'].value > 3 && doc['dealStatus'].value != 7){return 1}else{return 0}")))
  1088. .subAggregation(AggregationBuilders.sum("repulseCount")
  1089. .script(new Script("if(doc['dealStatus'].value == 7){return 1}else{return 0}"))))
  1090. .subAggregation(AggregationBuilders.terms("groupByUnitId_analysis")
  1091. .field("unitId.keyword")
  1092. .size(200)
  1093. .subAggregation(AggregationBuilders.sum("unprocessedCount")
  1094. .script(new Script("if(doc['dealStatus'].value < 8){return 1}else{return 0}")))
  1095. .subAggregation(AggregationBuilders.sum("processedCount")
  1096. .script(new Script("if(doc['dealStatus'].value > 8){return 1}else{return 0}")))
  1097. .subAggregation(AggregationBuilders.sum("repulseCount")
  1098. .script(new Script("if(doc['dealStatus'].value == 8){return 1}else{return 0}"))))
  1099. .subAggregation(AggregationBuilders.terms("groupByUnitId_analysisAudit")
  1100. .field("unitId.keyword")
  1101. .size(200)
  1102. .subAggregation(AggregationBuilders.sum("unprocessedCount")
  1103. .script(new Script("if(doc['dealStatus'].value < 10){return 1}else{return 0}")))
  1104. .subAggregation(AggregationBuilders.sum("processedCount")
  1105. .script(new Script("if(doc['dealStatus'].value == 11){return 1}else{return 0}")))
  1106. .subAggregation(AggregationBuilders.sum("repulseCount")
  1107. .script(new Script("if(doc['dealStatus'].value == 10){return 1}else{return 0}")))));
  1108. }
  1109. // 查询每本练习册更新,加工状态
  1110. listMap = kmtExerciseBookList.stream().collect(Collectors.groupingBy(KmtExerciseBook::getId));
  1111. exerciseBookIdSet = kmtExerciseBookList.stream()
  1112. .map(KmtExerciseBook::getId)
  1113. .collect(Collectors.toSet());
  1114. searchRequest.source()
  1115. .query(QueryBuilders.boolQuery()
  1116. .filter(new TermsQueryBuilder("exerciseBookId.keyword", exerciseBookIdSet))
  1117. .mustNot(new TermsQueryBuilder("dealStatus", Arrays.asList(2, 6))));
  1118. searchResponse = baseSearchService.search(searchRequest, null);
  1119. if (searchResponse != null) {
  1120. // 解析es查询结果
  1121. groupByExerciseBookId = searchResponse.getAggregations().get("group_by_exerciseBookId");
  1122. String exerciseBookId;
  1123. for (Terms.Bucket groupByExerciseBookIdBucket : groupByExerciseBookId.getBuckets()) {
  1124. exerciseBookId = groupByExerciseBookIdBucket.getKeyAsString();
  1125. if (StringUtils.isBlank(exerciseBookId)) {
  1126. continue;
  1127. }
  1128. groupByUnitId = groupByExerciseBookIdBucket.getAggregations().get("groupByUnitId_handle");
  1129. kmtExerciseBookCount = this.parseAndSaveExerciseBookCount(exerciseBookId, 1, groupByUnitId.getBuckets(), listMap);
  1130. if (kmtExerciseBookCount != null) {
  1131. kmtExerciseBookCountList.add(kmtExerciseBookCount);
  1132. }
  1133. groupByUnitId = groupByExerciseBookIdBucket.getAggregations().get("groupByUnitId_handleAudit");
  1134. kmtExerciseBookCount = this.parseAndSaveExerciseBookCount(exerciseBookId, 2, groupByUnitId.getBuckets(), listMap);
  1135. if (kmtExerciseBookCount != null) {
  1136. kmtExerciseBookCountList.add(kmtExerciseBookCount);
  1137. }
  1138. groupByUnitId = groupByExerciseBookIdBucket.getAggregations().get("groupByUnitId_analysis");
  1139. kmtExerciseBookCount = this.parseAndSaveExerciseBookCount(exerciseBookId, 3, groupByUnitId.getBuckets(), listMap);
  1140. if (kmtExerciseBookCount != null) {
  1141. kmtExerciseBookCountList.add(kmtExerciseBookCount);
  1142. }
  1143. groupByUnitId = groupByExerciseBookIdBucket.getAggregations().get("groupByUnitId_analysisAudit");
  1144. kmtExerciseBookCount = this.parseAndSaveExerciseBookCount(exerciseBookId, 4, groupByUnitId.getBuckets(), listMap);
  1145. if (kmtExerciseBookCount != null) {
  1146. kmtExerciseBookCountList.add(kmtExerciseBookCount);
  1147. }
  1148. }
  1149. if (CollectionUtils.isNotEmpty(kmtExerciseBookCountList)) {
  1150. pagingHibernateJdbcDao.batchUpdate(kmtExerciseBookCountList);
  1151. updateCount += kmtExerciseBookCountList.size();
  1152. kmtExerciseBookCountList.clear();
  1153. }
  1154. }
  1155. offset += pageSize;
  1156. } while (kmtExerciseBookList.size() >= pageSize);
  1157. return updateCount;
  1158. }
  1159. /**
  1160. * 解析并保存练习册加工状态 kmt_exercise_book_count
  1161. * @param exerciseBookId 练习册id
  1162. * @param type 老师身份类型
  1163. * @param bucketList es统计结果
  1164. * @param listMap kmtExerciseBook
  1165. * @return 更新记录数
  1166. */
  1167. private KmtExerciseBookCount parseAndSaveExerciseBookCount(String exerciseBookId, int type, List<? extends Terms.Bucket> bucketList,
  1168. Map<String, List<KmtExerciseBook>> listMap) {
  1169. List<KmtExerciseBook> tempKmtExerciseBookList = listMap.get(exerciseBookId);
  1170. if (CollectionUtils.isEmpty(tempKmtExerciseBookList)) {
  1171. return null;
  1172. }
  1173. KmtExerciseBook kmtExerciseBook = tempKmtExerciseBookList.get(0);
  1174. if (CollectionUtils.isEmpty(bucketList)) {
  1175. return null;
  1176. }
  1177. String userId;
  1178. switch (type) {
  1179. case 1:
  1180. userId = kmtExerciseBook.getHandleUserId();
  1181. break;
  1182. case 2:
  1183. userId = kmtExerciseBook.getAuditingUserId();
  1184. break;
  1185. case 3:
  1186. userId = kmtExerciseBook.getAnalysisUserId();
  1187. break;
  1188. case 4:
  1189. userId = kmtExerciseBook.getAnalysisAuditerId();
  1190. break;
  1191. default:
  1192. return null;
  1193. }
  1194. if (StringUtils.isBlank(userId)) {
  1195. return null;
  1196. }
  1197. String unitId;
  1198. ParsedSum unprocessedCountParsedSum;
  1199. double unprocessedCount = 0.0;
  1200. ParsedSum processedCountParsedSum;
  1201. double processedCount = 0.0;
  1202. ParsedSum repulseCountParsedSum;
  1203. double repulseCount = 0.0;
  1204. int bookStatus = 0;
  1205. int unfinishedUnitCount = 0;
  1206. int totalUnitCount = 0;
  1207. long accuracy = 10000;
  1208. List<KmtExerciseBookCount> kmtExerciseBookCountList = new ArrayList<>(bucketList.size());
  1209. try {
  1210. KmtExerciseBookCount kmtExerciseBookCount;
  1211. Date now = new Date();
  1212. // 遍历每个单元,统计未加工、打回、已加工的题目数,统计未完成、已完成单元数
  1213. for (Terms.Bucket groupByUnitIdBucket : bucketList) {
  1214. unitId = groupByUnitIdBucket.getKeyAsString();
  1215. if (StringUtils.isBlank(unitId)) {
  1216. continue;
  1217. }
  1218. unprocessedCountParsedSum = groupByUnitIdBucket.getAggregations().get("unprocessedCount");
  1219. unprocessedCount += unprocessedCountParsedSum.getValue();
  1220. processedCountParsedSum = groupByUnitIdBucket.getAggregations().get("processedCount");
  1221. processedCount += processedCountParsedSum.getValue();
  1222. repulseCountParsedSum = groupByUnitIdBucket.getAggregations().get("repulseCount");
  1223. repulseCount += repulseCountParsedSum.getValue();
  1224. if (unprocessedCountParsedSum.getValue() > 0 || repulseCountParsedSum.getValue() > 0) {
  1225. unfinishedUnitCount++;
  1226. }
  1227. totalUnitCount++;
  1228. }
  1229. // 判断练习册当前加工状态
  1230. if (repulseCount > 0) {
  1231. // 打回
  1232. bookStatus = 2;
  1233. } else if (unprocessedCount > 0 && processedCount > 0) {
  1234. // 加工中
  1235. bookStatus = 3;
  1236. } else if (unprocessedCount < 1 && processedCount > 0) {
  1237. // 已加工
  1238. bookStatus = 4;
  1239. } else if (unprocessedCount > 0 && processedCount < 1) {
  1240. // 未加工
  1241. bookStatus = 1;
  1242. }
  1243. // 正确率计算,百分比的整数部分
  1244. int errorCount = kmtExerciseMapper.countQuestionErrorCountByExerciseBookId(userId, exerciseBookId, type);
  1245. if (errorCount > 0) {
  1246. BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("exerciseBookId.keyword", exerciseBookId));
  1247. SearchSourceBuilder searchSourceBuilder = ElasticUtil.initSearchSourceBuilder(queryBuilder);
  1248. long totalQuestions = exerciseQuestionSearchService.count("kmt_exercise_questions", searchSourceBuilder);
  1249. accuracy = Math.round((totalQuestions - errorCount) * 10000 / (float) totalQuestions);
  1250. }
  1251. // 插入或更新数据
  1252. kmtExerciseBookCount =
  1253. kmtExerciseMapper.findKmtExerciseBookCountByExerciseBookIdAndType(exerciseBookId, type);
  1254. if (kmtExerciseBookCount == null) {
  1255. kmtExerciseBookCount = new KmtExerciseBookCount();
  1256. kmtExerciseBookCount.setExerciseBookId(exerciseBookId);
  1257. kmtExerciseBookCount.setBookId(kmtExerciseBook.getBookId());
  1258. kmtExerciseBookCount.setBookName(kmtExerciseBook.getBookName());
  1259. kmtExerciseBookCount.setCourseName(kmtExerciseBook.getCourseName());
  1260. kmtExerciseBookCount.setGrade(kmtExerciseBook.getGrade());
  1261. kmtExerciseBookCount.setSemester(kmtExerciseBook.getSemester());
  1262. kmtExerciseBookCount.setVersion(kmtExerciseBook.getVersion());
  1263. kmtExerciseBookCount.setBookType(kmtExerciseBook.getBookType());
  1264. kmtExerciseBookCount.setType(type);
  1265. kmtExerciseBookCount.setCreateTime(now);
  1266. }
  1267. kmtExerciseBookCount.setUserId(userId);
  1268. kmtExerciseBookCount.setUnprocessedCount((int) unprocessedCount);
  1269. kmtExerciseBookCount.setRepulseCount((int) repulseCount);
  1270. kmtExerciseBookCount.setProcessedCount((int) processedCount);
  1271. kmtExerciseBookCount.setUnfinishedUnitCount(unfinishedUnitCount);
  1272. kmtExerciseBookCount.setTotalUnitCount(totalUnitCount);
  1273. kmtExerciseBookCount.setBookStatus(bookStatus);
  1274. kmtExerciseBookCount.setAccuracy((int) accuracy);
  1275. kmtExerciseBookCount.setUpdateTime(now);
  1276. kmtExerciseBookCountList.add(kmtExerciseBookCount);
  1277. return kmtExerciseBookCount;
  1278. } catch (Exception e) {
  1279. logger.error("kmtExerciseBookCountList={}", kmtExerciseBookCountList);
  1280. logger.error("插入或更新异常", e);
  1281. }
  1282. return null;
  1283. }
  1284. @Override
  1285. public ResponseEntity findTeacherStatusDetail(TeacherInfoStatusDetailReq req) {
  1286. ResponseEntity responseEntity = new ResponseEntity();
  1287. TeacherInfoStatusDetailDTO teacherInfoStatusDetailDTO = libManagerMapper.findTeacherStatusDetail(req.getTeacherId());
  1288. if (teacherInfoStatusDetailDTO == null) {
  1289. responseEntity.failure("老师不存在");
  1290. }
  1291. return responseEntity.success(teacherInfoStatusDetailDTO, "查询成功");
  1292. }
  1293. @Override
  1294. public ResponseEntity findOrgRecordRateList(KmtExerciseBookLibReq req) {
  1295. ResponseEntity responseEntity = new ResponseEntity();
  1296. Map<String, Object> data = new HashMap<>();
  1297. List<ExerciseBookAndLibExportDto> list0=new ArrayList<>();
  1298. String key=null;
  1299. if("语文".equals(req.getSubject())){
  1300. key="yuwen"+DateUtil.format_yyyyMMdd(new Date());
  1301. }
  1302. if("数学".equals(req.getSubject())){
  1303. key="shuxue"+DateUtil.format_yyyyMMdd(new Date());
  1304. }
  1305. if("英语".equals(req.getSubject())){
  1306. key="yingyu"+DateUtil.format_yyyyMMdd(new Date());
  1307. }
  1308. if(redisUtil.exists(key)){
  1309. String result = redisUtil.get(key);
  1310. List<ExerciseBookAndLibExportDto> list = JSON.parseArray(result, ExerciseBookAndLibExportDto.class);
  1311. Paging paging = Paging.pagination(list.size(), req.getPageSize(), req.getPageNo());
  1312. int fromIndex = paging.getQueryIndex();
  1313. int toIndex = 0;
  1314. if (fromIndex + paging.getPageSize() >= list.size()) {
  1315. toIndex = list.size();
  1316. } else {
  1317. toIndex = fromIndex + paging.getPageSize();
  1318. }
  1319. list0=new ArrayList<>(list.subList(fromIndex, toIndex));
  1320. data.put("total", (int) paging.getTotalNum());
  1321. data.put("pages", paging.getTotalPage());
  1322. }else {
  1323. data.put("total", 0);
  1324. data.put("pages", 0);
  1325. }
  1326. data.put("pageNo", req.getPageNo());
  1327. data.put("pageSize", req.getPageSize());
  1328. data.put("list", list0);
  1329. return responseEntity.success(data, "成功");
  1330. }
  1331. @Override
  1332. public ResponseEntity uploadForm(String userId, int type, List<MultipartFile> files) {
  1333. //0: 随机文件; 1: 练习册分配表格; 2:kmt分配表格; 3:练习册导入文件; 4:练习册表格
  1334. ResponseEntity responseEntity = new ResponseEntity();
  1335. List<FileInfo> fileInfos = null;
  1336. if (type > 0){
  1337. fileInfos = uploadFormByType(userId, type, files);
  1338. } else {
  1339. fileInfos = fileInfoService.uploadFilePicture(userId,files);
  1340. }
  1341. if (files.size() == fileInfos.size()) {
  1342. Map<String, Object> data = new HashMap<String, Object>();
  1343. data.put("pics", fileInfos);
  1344. responseEntity.success(data, "上传图片成功 ");
  1345. } else {
  1346. responseEntity.failure(ResponseConstant.CODE_000, "上传图片失败");
  1347. }
  1348. return responseEntity;
  1349. }
  1350. /**
  1351. * 上传文件 1: 练习册分配表格; 2:kmt分配表格; 3:练习册导入文件; 4:练习册表格
  1352. * @param userId
  1353. * @param type
  1354. * @return
  1355. */
  1356. private List<FileInfo> uploadFormByType (String userId, int type, List<MultipartFile> fileList){
  1357. String dir;
  1358. switch (type){
  1359. case 1: dir = "/www/files/data/upload/bak/exercise/distribute-teacher/exercise/teacher/"; break;
  1360. case 2: dir = "/www/files/data/upload/bak/exercise/distribute-teacher/kmt-questions/teacher/"; break;
  1361. case 3: dir = "/www/files/data/upload/bak/exercise/import-exercise/temp/"; break;
  1362. case 4: dir = "/www/files/data/upload/bak/exercise/import-exercise/exercise_book_list/"; break;
  1363. default: dir = "/www/files/data/upload/bak/exercise/import-exercise/temp/"; break;
  1364. }
  1365. String[] filePaths = new String[fileList.size()];
  1366. String[] fileNames = new String[fileList.size()];
  1367. String[] fileCodes = new String[fileList.size()];
  1368. MultipartFile fileItem;
  1369. for (int i = 0; i < fileList.size(); i++) {
  1370. fileItem = fileList.get(i);
  1371. //图片保存文件名
  1372. filePaths[i] = dir + IdWorker.generateId() + "-" + fileItem.getOriginalFilename();
  1373. fileNames[i] = fileItem.getOriginalFilename();
  1374. ImageTools.uploadFile(filePaths[i], fileItem);
  1375. }
  1376. List<FileInfo> fileInfoList = new ArrayList<>();
  1377. if (filePaths != null && filePaths.length > 0){
  1378. fileInfoList = fileInfoService.saveFilePicture(userId, filePaths, fileNames);
  1379. }
  1380. return fileInfoList;
  1381. }
  1382. @Override
  1383. public ResponseEntity findExerciseList(ExerciseListReq req) {
  1384. ResponseEntity responseEntity = new ResponseEntity();
  1385. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = null;
  1386. if (req.getPageNo() != null && req.getPageSize() != null) {
  1387. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1388. }else{
  1389. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(1, Integer.MAX_VALUE);
  1390. }
  1391. Map<String, Object> params = new HashMap<>(16);
  1392. //params.put("bookType", "in (0,1,3)");
  1393. params.put("progress", req.getProgress());
  1394. params.put("subject", req.getSubject());
  1395. params.put("grade", req.getGrade());
  1396. params.put("bookName", req.getBookName());
  1397. params.put("versionName", req.getVersionName());
  1398. params.put("semester", req.getSemester());
  1399. params.put("bookType", req.getBookType());
  1400. params.put("bookYear", req.getBookYear());
  1401. params.put("searchType", req.getSearchType());
  1402. params.put("assignedBatch", req.getAssignedBatch());
  1403. List<Exercise1Dto> list = kmtExerciseMapper.findExerciseList(page, params);
  1404. Map<String, Object> resultMap = new HashMap<>(16);
  1405. resultMap.put("pageNo", page.getCurrent());
  1406. resultMap.put("pageSize", page.getSize());
  1407. resultMap.put("pages", page.getPages());
  1408. resultMap.put("total", page.getTotal());
  1409. resultMap.put("list", list);
  1410. return responseEntity.success(resultMap, "成功");
  1411. }
  1412. @Override
  1413. public ResponseEntity addOrEditExerciseBook(AddOrEditExerciseReq req, String userId) {
  1414. ResponseEntity responseEntity = new ResponseEntity();
  1415. KmtExerciseBook exerciseBook;
  1416. boolean existsBook = kmtExerciseBookService.findSameBook(req.getBookName(), req.getGrade(), req.getSubject(), req.getSemester(), req.getVersion(), req.getUseYear(), req.getBookType()) != null ? true : false;
  1417. //存在修改
  1418. boolean existsModify = true;
  1419. Date now = new Date();
  1420. //机构数
  1421. int orgNums = 0;
  1422. if (StringUtil.isNotBlank(req.getExerciseBookId())) {
  1423. exerciseBook = kmtExerciseBookService.getById(req.getExerciseBookId());
  1424. existsModify = !(req.getBookName().equals(exerciseBook.getBookName()) && req.getGrade().equals(exerciseBook.getGrade())
  1425. && req.getSemester() == exerciseBook.getSemester() && req.getVersion() == exerciseBook.getVersion()
  1426. && req.getUseYear() == exerciseBook.getBookYear() && req.getBookType() == exerciseBook.getBookType());
  1427. } else {
  1428. exerciseBook = new KmtExerciseBook();
  1429. exerciseBook.setCreateTime(now);
  1430. exerciseBook.setPartFlag(3);
  1431. exerciseBook.setBookId(IdWorker.generateId());
  1432. }
  1433. if (existsBook && existsModify) {
  1434. return responseEntity.failure("此练习册系统已有,请查对后重试");
  1435. }
  1436. exerciseBook.setUrl1(req.getUrl1());
  1437. exerciseBook.setUrl2(req.getUrl2());
  1438. exerciseBook.setBookName(req.getBookName());
  1439. exerciseBook.setPress(req.getPress());
  1440. exerciseBook.setCourseName(req.getSubject());
  1441. exerciseBook.setGrade(req.getGrade());
  1442. exerciseBook.setVersion(req.getVersion());
  1443. exerciseBook.setVersionName(req.getVersionName());
  1444. exerciseBook.setSemester(req.getSemester());
  1445. exerciseBook.setPrintYear(req.getPrintYear());
  1446. exerciseBook.setBookYear(req.getUseYear());
  1447. exerciseBook.setProgress(req.getProgress());
  1448. exerciseBook.setBookType(req.getBookType());
  1449. exerciseBook.setTotalGradePriority(req.getPriority());
  1450. exerciseBook.setAssignedBatch(req.getAssignedBatch());
  1451. //编辑人
  1452. User user = userService.getById(userId);
  1453. exerciseBook.setUserId(userId);
  1454. exerciseBook.setUpdatedTime(now);
  1455. exerciseBook.setUserName(user.getUserName());
  1456. //关联机构列表
  1457. List<KmtExerciseBookLib> exerciseLibList = KmtExerciseBookLibService.findByExerciseBookId(req.getExerciseBookId());
  1458. if (CollectionUtils.isNotEmpty(exerciseLibList)) {
  1459. //软删除
  1460. exerciseLibList.forEach(e -> e.setIsDelete(1));
  1461. KmtExerciseBookLibService.save(exerciseLibList);
  1462. }
  1463. if (CollectionUtils.isNotEmpty(req.getLibList())) {
  1464. orgNums = req.getLibList().size();
  1465. }
  1466. exerciseBook.setOrgNums(orgNums);
  1467. kmtExerciseBookService.save(exerciseBook);
  1468. if (orgNums > 0) {
  1469. exerciseBook.setOrgNums(req.getLibList().size());
  1470. req.getLibList().forEach(libId -> {
  1471. KmtExerciseBookLib exerciseBookLib = new KmtExerciseBookLib();
  1472. exerciseBookLib.setExerciseBookId(exerciseBook.getId());
  1473. exerciseBookLib.setLibId(libId);
  1474. KmtExerciseBookLibService.save(exerciseBookLib);
  1475. //实时将统计数据记录到库
  1476. kmtExerciseLibPriorityService.deleteOrgCountByLibIdAndSubject(libId,req.getSubject());
  1477. List<KmtExerciseBookLibDto> list=kmtExerciseMapperService.findOrgCount(libId,req.getSubject());
  1478. int totalCount=(int)list.stream().filter(a->!Objects.equals("未购买",a.getProgress())).count();
  1479. int recogeCount=(int)list.stream().filter(a->Objects.equals("已发布",a.getProgress())).count();
  1480. int unrecogeCount=(int)list.stream().filter(a->!Objects.equals("未购买",a.getProgress())&&!Objects.equals("已发布",a.getProgress())).count();
  1481. int unPurchaseCount=(int)list.stream().filter(a->Objects.equals("未购买",a.getProgress())).count();
  1482. KmtExerciseLibPriority kmtExerciseLibPriority=new KmtExerciseLibPriority();
  1483. kmtExerciseLibPriority.setLibId(libId);
  1484. kmtExerciseLibPriority.setSubject(req.getSubject());
  1485. kmtExerciseLibPriority.setRecogeNum(recogeCount);
  1486. kmtExerciseLibPriority.setTotalNum(totalCount);
  1487. kmtExerciseLibPriority.setUnrecogeNum(unrecogeCount);
  1488. kmtExerciseLibPriority.setUnpurchaNum(unPurchaseCount);
  1489. String chineseRecogeRate="0.00%";
  1490. if(0!=totalCount){
  1491. chineseRecogeRate=new BigDecimal(recogeCount).multiply(new BigDecimal(100)).divide(new BigDecimal(totalCount),2,BigDecimal.ROUND_HALF_UP) +"%";
  1492. }
  1493. kmtExerciseLibPriority.setRecogeRate(chineseRecogeRate);
  1494. kmtExerciseLibPriorityService.save(kmtExerciseLibPriority);
  1495. });
  1496. }
  1497. Map<String, Object> resultMap = new HashMap<>(16);
  1498. resultMap.put("exerciseBookId", exerciseBook.getId());
  1499. return responseEntity.success(resultMap, "成功");
  1500. }
  1501. @Override
  1502. public ResponseEntity findExerciseDetail(ExerciseDetailReq req){
  1503. ResponseEntity responseEntity = new ResponseEntity();
  1504. KmtExerciseBook exerciseBook = kmtExerciseBookService.getById(req.getExerciseBookId());
  1505. Exercise2Dto dto = new Exercise2Dto();
  1506. dto.setUrl1(exerciseBook.getUrl1());
  1507. dto.setUrl2(exerciseBook.getUrl2());
  1508. dto.setBookName(exerciseBook.getBookName());
  1509. dto.setPress(exerciseBook.getPress());
  1510. dto.setSubject(exerciseBook.getCourseName());
  1511. dto.setGrade(exerciseBook.getGrade());
  1512. dto.setVersion(exerciseBook.getVersion());
  1513. dto.setVersionName(exerciseBook.getVersionName());
  1514. dto.setSemester(exerciseBook.getSemester());
  1515. dto.setPrintYear(exerciseBook.getPrintYear());
  1516. dto.setUseYear(exerciseBook.getBookYear()+"");
  1517. dto.setStatus(exerciseBook.getStatus());
  1518. dto.setProgress(exerciseBook.getProgress());
  1519. dto.setPriority(exerciseBook.getTotalGradePriority());
  1520. dto.setIdentifiedNums(exerciseBook.getIdentifiedNums());
  1521. dto.setEditName(exerciseBook.getUserName());
  1522. dto.setBookType(exerciseBook.getBookType());
  1523. dto.setUpdateTime(exerciseBook.getUpdatedTime() != null ? DateHelper.format(exerciseBook.getUpdatedTime(), "yyyy-MM-dd HH:mm:ss") : null);
  1524. dto.setAssignedBatch(exerciseBook.getAssignedBatch());
  1525. //机构相关
  1526. List<KmtExerciseBookLib> exerciseLibList = KmtExerciseBookLibService.findByExerciseBookId(req.getExerciseBookId());
  1527. List<Exercise2Dto.Library> libraryList = new ArrayList<>();
  1528. exerciseLibList.forEach(e -> {
  1529. Exercise2Dto.Library library = dto.new Library();
  1530. TbLibJoin libJoin = libJoinService.getById(e.getLibId());
  1531. if (libJoin != null) {
  1532. library.setLibId(libJoin.getId());
  1533. library.setLibName(libJoin.getLeagueName());
  1534. }
  1535. libraryList.add(library);
  1536. });
  1537. dto.setLibList(libraryList);
  1538. return responseEntity.success(dto, "成功");
  1539. }
  1540. @Override
  1541. public ResponseEntity findLibList(FindLibReq req){
  1542. ResponseEntity responseEntity = new ResponseEntity();
  1543. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = null;
  1544. if (req.getPageNo() != null && req.getPageSize() != null) {
  1545. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1546. }
  1547. Map<String,Object> params = new HashMap<>(16);
  1548. params.put("name",req.getName());
  1549. List<TbLibJoin> list = kmtExerciseMapper.findLibList(page, params);
  1550. List<LibraryDto> dtoList = new ArrayList<>();
  1551. list.forEach(e -> {
  1552. LibraryDto dto = new LibraryDto();
  1553. dto.setLibId(e.getId());
  1554. dto.setLibName(e.getLeagueName());
  1555. dtoList.add(dto);
  1556. });
  1557. Map<String, Object> resultMap = new HashMap<>(16);
  1558. if (page != null) {
  1559. resultMap.put("pageNo", page.getCurrent());
  1560. resultMap.put("pageSize", page.getSize());
  1561. resultMap.put("pages", page.getPages());
  1562. resultMap.put("total", page.getTotal());
  1563. } else {
  1564. resultMap.put("pageNo", 0);
  1565. resultMap.put("pageSize", 0);
  1566. resultMap.put("pages", 0);
  1567. resultMap.put("total", list.size());
  1568. }
  1569. resultMap.put("list", dtoList);
  1570. return responseEntity.success(resultMap, "成功");
  1571. }
  1572. @Override
  1573. public ResponseEntity findPressList() {
  1574. ResponseEntity responseEntity = new ResponseEntity();
  1575. String key = "exercise_press";
  1576. Map<String, Object> resultMap = new HashMap<>(16);
  1577. List<String> list = tokenManager.getList(key, String.class);
  1578. if (list == null || list.size() == 0) {
  1579. Config config = configService.findConfigByParamCode(key);
  1580. tokenManager.setString(key, config.getParamVal());
  1581. list = tokenManager.getList(key, String.class);
  1582. }
  1583. resultMap.put("list", list);
  1584. return responseEntity.success(resultMap, "成功");
  1585. }
  1586. @Override
  1587. public int refreshExerciseBookCount(List<String> selectedExerciseBookIdList) {
  1588. int offset = 0;
  1589. int pageSize = 500;
  1590. int updateCount = 0;
  1591. List<KmtExerciseBook> kmtExerciseBookList;
  1592. List<KmtExerciseBook> tempKmtExerciseBookList;
  1593. KmtExerciseBook kmtExerciseBook;
  1594. int status;
  1595. int dataStatus;
  1596. Map<String, List<KmtExerciseBook>> listMap;
  1597. Set<String> exerciseBookIdSet;
  1598. SearchRequest searchRequest = null;
  1599. SearchResponse searchResponse;
  1600. ParsedStringTerms groupByExerciseBookId;
  1601. ParsedSum parsedSum;
  1602. StringBuilder statusSb = new StringBuilder();
  1603. do {
  1604. kmtExerciseBookList = kmtExerciseMapper.findAllExerciseBookPage(selectedExerciseBookIdList, offset, pageSize);
  1605. if (kmtExerciseBookList.isEmpty()) {
  1606. break;
  1607. }
  1608. if (searchRequest == null) {
  1609. // es统计练习册题目状态
  1610. searchRequest = new SearchRequest("kmt_exercise_questions");
  1611. searchRequest.source(SearchSourceBuilder.searchSource());
  1612. searchRequest.source()
  1613. .aggregation(AggregationBuilders.terms("group_by_exerciseBookId")
  1614. .field("exerciseBookId.keyword")
  1615. .size(pageSize)
  1616. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Repulse2AI.getName())
  1617. .script(new Script("if(doc['dealStatus'].value == 2){return 1}else{return 0}")))
  1618. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Processing.getName())
  1619. .script(new Script("if(doc['dealStatus'].value == 0){return 1}else{return 0}")))
  1620. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Repulse2Process.getName())
  1621. .script(new Script("if(doc['dealStatus'].value == 1){return 1}else{return 0}")))
  1622. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Auditing.getName())
  1623. .script(new Script("if(doc['dealStatus'].value == 3){return 1}else{return 0}")))
  1624. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Repulse2Audit.getName())
  1625. .script(new Script("if(doc['dealStatus'].value == 7){return 1}else{return 0}")))
  1626. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.QuestionPublished.getName())
  1627. .script(new Script("if(doc['dealStatus'].value == 4){return 1}else{return 0}")))
  1628. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.AnalysisProcessing.getName())
  1629. .script(new Script("if(doc['dealStatus'].value == 5){return 1}else{return 0}")))
  1630. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Repulse2AnalysisProcessing.getName())
  1631. .script(new Script("if(doc['dealStatus'].value == 8){return 1}else{return 0}")))
  1632. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.AnalysisAuditing.getName())
  1633. .script(new Script("if(doc['dealStatus'].value == 9){return 1}else{return 0}")))
  1634. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.Repulse2AnalysisAuditing.getName())
  1635. .script(new Script("if(doc['dealStatus'].value == 10){return 1}else{return 0}")))
  1636. .subAggregation(AggregationBuilders.sum(ExerciseBookStatusEnum.AnalysisPublished.getName())
  1637. .script(new Script("if(doc['dealStatus'].value == 11){return 1}else{return 0}"))));
  1638. }
  1639. // 查询每本练习册更新,加工状态
  1640. listMap = kmtExerciseBookList.stream().collect(Collectors.groupingBy(KmtExerciseBook::getId));
  1641. exerciseBookIdSet = kmtExerciseBookList.stream()
  1642. .map(KmtExerciseBook::getId)
  1643. .collect(Collectors.toSet());
  1644. searchRequest.source()
  1645. .query(QueryBuilders.boolQuery()
  1646. .filter(new TermsQueryBuilder("exerciseBookId.keyword", exerciseBookIdSet)));
  1647. searchResponse = baseSearchService.search(searchRequest, null);
  1648. if (searchResponse != null) {
  1649. // 解析es查询结果
  1650. groupByExerciseBookId = searchResponse.getAggregations().get("group_by_exerciseBookId");
  1651. String exerciseBookId;
  1652. for (Terms.Bucket groupByExerciseBookIdBucket : groupByExerciseBookId.getBuckets()) {
  1653. exerciseBookId = groupByExerciseBookIdBucket.getKeyAsString();
  1654. if (StringUtils.isBlank(exerciseBookId)) {
  1655. continue;
  1656. }
  1657. tempKmtExerciseBookList = listMap.get(exerciseBookId);
  1658. if (CollectionUtils.isEmpty(tempKmtExerciseBookList)) {
  1659. continue;
  1660. }
  1661. kmtExerciseBook = tempKmtExerciseBookList.get(0);
  1662. if (kmtExerciseBook == null) {
  1663. continue;
  1664. }
  1665. for (Aggregation aggregation : groupByExerciseBookIdBucket.getAggregations().asList()) {
  1666. parsedSum = (ParsedSum) aggregation;
  1667. dataStatus = parsedSum.getValue() > 0 ? 1 : 0;
  1668. status = this.saveOrUpdateKmtExerciseBookStatusCount(parsedSum.getName(), dataStatus, kmtExerciseBook);
  1669. updateCount ++;
  1670. if (dataStatus == 1) {
  1671. if (statusSb.length() > 0) {
  1672. statusSb.append(",");
  1673. }
  1674. statusSb.append(status);
  1675. }
  1676. }
  1677. kmtExerciseBookService.updateExerciseBookStatus(exerciseBookId, statusSb.toString());
  1678. statusSb = new StringBuilder();
  1679. }
  1680. }
  1681. offset += pageSize;
  1682. } while (kmtExerciseBookList.size() >= pageSize);
  1683. return updateCount;
  1684. }
  1685. @Override
  1686. public ResponseEntity findExerciseBookCount() {
  1687. ResponseEntity responseEntity = new ResponseEntity();
  1688. return responseEntity.success(Collections.singletonMap("list", kmtExerciseMapper.findExerciseBookCount()), "成功");
  1689. }
  1690. @Override
  1691. public ResponseEntity findExerciseBookCountSubjectDetail(ExerciseBookCountSubjectDetailReq req) {
  1692. ResponseEntity responseEntity = new ResponseEntity();
  1693. IPage<ExerciseBookCountSubjectDetailDTO> page =
  1694. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(req.getPageNo(), req.getPageSize());
  1695. page = kmtExerciseMapper.findExerciseBookCountSubjectDetail(page, req);
  1696. Map<String, Object> resultMap = new HashMap<>();
  1697. resultMap.put("pageNo", page.getCurrent());
  1698. resultMap.put("pageSize", page.getSize());
  1699. resultMap.put("pages", page.getPages());
  1700. resultMap.put("total", page.getTotal());
  1701. resultMap.put("list", page.getRecords());
  1702. return responseEntity.success(resultMap, "成功");
  1703. }
  1704. /**
  1705. * 保存或更新练习册状态统计数据
  1706. *
  1707. * @param statusName 状态名
  1708. * @param dataStatus 数据状态(0无效,1有效)
  1709. * @param kmtExerciseBook 练习册
  1710. *
  1711. * @return 练习册状态
  1712. */
  1713. private int saveOrUpdateKmtExerciseBookStatusCount(String statusName, int dataStatus, KmtExerciseBook kmtExerciseBook) {
  1714. int status = ExerciseBookStatusEnum.getCodeByName(statusName);
  1715. KmtExerciseBookStatusCount kmtExerciseBookStatusCount =
  1716. kmtExerciseMapper.findKmtExerciseBookStatusCountByExerciseBookIdAndStatus(kmtExerciseBook.getId(), status);
  1717. if (kmtExerciseBookStatusCount == null) {
  1718. kmtExerciseBookStatusCount = new KmtExerciseBookStatusCount();
  1719. kmtExerciseBookStatusCount.setCreateTime(new Date());
  1720. }
  1721. kmtExerciseBookStatusCount.setExerciseBookId(kmtExerciseBook.getId());
  1722. kmtExerciseBookStatusCount.setBookId(kmtExerciseBook.getBookId());
  1723. kmtExerciseBookStatusCount.setBookName(kmtExerciseBook.getBookName());
  1724. kmtExerciseBookStatusCount.setBookYear(kmtExerciseBook.getBookYear());
  1725. kmtExerciseBookStatusCount.setCourseName(kmtExerciseBook.getCourseName());
  1726. kmtExerciseBookStatusCount.setStatus(status);
  1727. kmtExerciseBookStatusCount.setDataStatus(dataStatus);
  1728. pagingHibernateJdbcDao.batchUpdate(Collections.singletonList(kmtExerciseBookStatusCount));
  1729. return status;
  1730. }
  1731. @Override
  1732. public List<ExerciseBookAndLibExportDto> findAllExportExerciseLib(String subject){
  1733. List<ExerciseBookAndLibExportDto> list0=new ArrayList<>();
  1734. List<Map<String,Object>> list=kmtExerciseMapper.findAllExportLib(subject);
  1735. if(CollectionUtils.isNotEmpty(list)){
  1736. list.forEach(it->{
  1737. ExerciseBookAndLibExportDto exerciseBookAndLibExportDto=new ExerciseBookAndLibExportDto();
  1738. Map<String,Object> map=new HashMap<>();
  1739. String leagueLet=it.get("leagueLet").toString();
  1740. String leagueLng=it.get("leagueLng").toString();
  1741. Map addressMap = MapUtils.regeoByAmapApi(Double.valueOf(leagueLng), Double.valueOf(leagueLet));
  1742. String address=addressMap.get("address").toString();
  1743. String leagueName=it.get("leagueName").toString();
  1744. int signService=Integer.parseInt(it.get("signService").toString());
  1745. List<KmtExerciseBookLibDto>list1=kmtExerciseMapper.findAllExerciseBook(it.get("libId").toString(),subject);
  1746. Map<String,List<KmtExerciseBookLibDto>> map1=list1.stream().collect(Collectors.groupingBy(p->p.getExerciseName()+"_"+p.getVersion()+"_"+p.getSemester()+"_"+p.getPriority()));
  1747. List<KmtExerciseLibExportDto> exportList= map1.keySet().stream().map(key->{
  1748. String [] u=key.split("_");
  1749. String exerciseName=u[0];
  1750. String version=u[1];
  1751. String semester=u[2];
  1752. String priority=u[3];
  1753. if(Objects.equals(priority,"null")){
  1754. priority="";
  1755. }
  1756. KmtExerciseLibExportDto kmt=new KmtExerciseLibExportDto();
  1757. kmt.setExerciseName(exerciseName);
  1758. kmt.setVersion(version);
  1759. kmt.setSemester(semester);
  1760. kmt.setPriority(priority);
  1761. List<KmtExerciseBookLibDto> exerciseBookLibDtos=map1.get(key);
  1762. kmt=this.getKmtList(exerciseBookLibDtos,exerciseName,version,semester,priority);
  1763. return kmt;
  1764. }).collect(Collectors.toList());
  1765. long totalCount=list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())).count();
  1766. long recogeCount=list1.stream().filter(a->Objects.equals("已发布",a.getProgress())).count();
  1767. long unrecogeCount=list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())&&!Objects.equals("已发布",a.getProgress())).count();
  1768. long unPurchaseCount=list1.stream().filter(a->Objects.equals("未购买",a.getProgress())).count();
  1769. String chineseRecogeRate="0.00%";
  1770. if(0!=totalCount){
  1771. chineseRecogeRate=new BigDecimal(recogeCount).multiply(new BigDecimal(100)).divide(new BigDecimal(totalCount),2,BigDecimal.ROUND_HALF_UP) +"%";
  1772. }
  1773. exerciseBookAndLibExportDto.setLibName(leagueName);
  1774. exerciseBookAndLibExportDto.setLibArea(address);
  1775. exerciseBookAndLibExportDto.setSignService(signService);
  1776. exerciseBookAndLibExportDto.setTotalCount(totalCount);
  1777. exerciseBookAndLibExportDto.setRecogeCount(recogeCount);
  1778. exerciseBookAndLibExportDto.setUnrecogeCount(unrecogeCount);
  1779. exerciseBookAndLibExportDto.setUnPurchaseCount(unPurchaseCount);
  1780. exerciseBookAndLibExportDto.setChineseRecogeRate(chineseRecogeRate);
  1781. exerciseBookAndLibExportDto.setLibExportDtoList(exportList);
  1782. list0.add(exerciseBookAndLibExportDto);
  1783. });
  1784. }
  1785. List<ExerciseBookAndLibExportDto>list1= list0.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(
  1786. Comparator.comparing(
  1787. ExerciseBookAndLibExportDto::getLibName))), ArrayList::new));
  1788. return list1;
  1789. }
  1790. private KmtExerciseLibExportDto getKmtList(List<KmtExerciseBookLibDto> list, String exerciseName, String version, String semester, String priority){
  1791. KmtExerciseLibExportDto dto=new KmtExerciseLibExportDto();
  1792. list.forEach(it->{
  1793. String grade=it.getGrade();
  1794. String progress=it.getProgress();
  1795. if(Objects.equals("一年级",grade)){
  1796. dto.setGradeOne(progress);
  1797. }
  1798. if(Objects.equals("二年级",grade)){
  1799. dto.setGradeTwo(progress);
  1800. }
  1801. if(Objects.equals("三年级",grade)){
  1802. dto.setGradeThree(progress);
  1803. }
  1804. if(Objects.equals("四年级",grade)){
  1805. dto.setGradeFour(progress);
  1806. }
  1807. if(Objects.equals("五年级",grade)){
  1808. dto.setGradeFive(progress);
  1809. }
  1810. if(Objects.equals("六年级",grade)){
  1811. dto.setGradeSix(progress);
  1812. }
  1813. });
  1814. dto.setExerciseName(exerciseName);
  1815. dto.setVersion(version);
  1816. dto.setSemester(semester);
  1817. dto.setPriority(priority);
  1818. return dto;
  1819. }
  1820. /*@Override
  1821. public String getPriority(){
  1822. //查询所有的练习册及其关联到的馆
  1823. List<ExercisePriorityDto> list= kmtExerciseMapper.findLibSignCount();
  1824. Map<String,IntSummaryStatistics> list1=list.stream().collect(Collectors.groupingBy(ExercisePriorityDto::getExerciseBookId,Collectors.summarizingInt(ExercisePriorityDto::getSignService)));
  1825. list1.forEach((key,value)->{
  1826. int totalNum=(int)value.getSum();
  1827. kmtExerciseMapper.updateKmtExerciseBookByExerciseBookId(totalNum,key);
  1828. });
  1829. List<KmtExerciseBook> list2=kmtExerciseMapper.findAllExerciseBookBySignNum();
  1830. Map<String,List<KmtExerciseBook>> map0=list2.stream()
  1831. .collect(Collectors.groupingBy(p->p.getBookName()+"_"+p.getVersionName()+"_"+p.getSemester()+"_"+p.getCourseName()));
  1832. Map<String,Integer> map1=list2.stream()
  1833. .collect(Collectors.groupingBy(p->p.getBookName()+"_"+p.getVersionName()+"_"+p.getSemester()+"_"+p.getCourseName(),
  1834. LinkedHashMap::new, Collectors.summingInt(a->a.getExerciseRelevancyNum())));
  1835. Map<String, Integer> result = new LinkedHashMap<>();
  1836. map1.entrySet().stream()
  1837. .sorted(Map.Entry.<String, Integer>comparingByValue()
  1838. .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
  1839. String [] str1=result.keySet().toArray(new String[map0.keySet().size()]);
  1840. BigDecimal db1=new BigDecimal(result.size());
  1841. Map<String,String> priorityMap=new HashMap<>();
  1842. result.keySet().forEach(b->{
  1843. List<KmtExerciseBook> list4=map0.get(b);
  1844. String priority;
  1845. int index1=this.searchEle1(str1,b);
  1846. if(0==index1){
  1847. priority="P0";
  1848. priorityMap.put(b,priority);
  1849. }else {
  1850. int sum=result.get(b);
  1851. BigDecimal db3=new BigDecimal(index1);
  1852. if(sum==result.get(str1[index1-1])){
  1853. priority=priorityMap.get(str1[index1-1]);
  1854. priorityMap.put(b,priority);
  1855. }else {
  1856. BigDecimal db4=db3.divide(db1,2,BigDecimal.ROUND_HALF_UP);
  1857. priority=this.getPriorityByPercent(db4);
  1858. priorityMap.put(b,priority);
  1859. }
  1860. }
  1861. list4.forEach(m->{
  1862. String id=m.getId();
  1863. kmtExerciseMapper.updateKmtExerciseBookByPriority(priority,id);
  1864. });
  1865. });
  1866. return null;
  1867. }*/
  1868. @Override
  1869. public ResponseEntity findEnterTeacherList(FindKmtTeacherListReq req) {
  1870. ResponseEntity responseEntity = new ResponseEntity();
  1871. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1872. List<ExerciseTeacherDTO> list = libManagerMapper.findKmtTeacherList(req.getSubject(), "7", 5, req.getTeacherName(), page);
  1873. Map<String, Object> resultMap = new HashMap<>();
  1874. resultMap.put("pageNo", page.getCurrent());
  1875. resultMap.put("pageSize", page.getSize());
  1876. resultMap.put("pages", page.getPages());
  1877. resultMap.put("total", page.getTotal());
  1878. resultMap.put("list", list);
  1879. return responseEntity.success(resultMap, "查询成功");
  1880. }
  1881. @Override
  1882. public ResponseEntity findEnterTeacherDetails(FindKmtTeacherDetailReq req) {
  1883. ResponseEntity responseEntity = new ResponseEntity();
  1884. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1885. List<KmtTeacherDetailDto> list = kmtQuestionMapper.findKmtTeacherDetails(req.getTeacherId(), req.getDetailName(), 6, page);
  1886. list.forEach(item -> {
  1887. item.setVersionName(knowledgeVersion.getVersionNameBySubjectAndVersionNum(item.getCourseName(), item.getVersionType()));
  1888. });
  1889. Map<String, Object> resultMap = new HashMap<>();
  1890. resultMap.put("pageNo", page.getCurrent());
  1891. resultMap.put("pageSize", page.getSize());
  1892. resultMap.put("pages", page.getPages());
  1893. resultMap.put("total", page.getTotal());
  1894. resultMap.put("list", list);
  1895. return responseEntity.success(resultMap, "查询成功");
  1896. }
  1897. @Override
  1898. public ResponseEntity findCheckTeacherList(FindCheckTeacherListReq req) {
  1899. req.setType(8);
  1900. return findTeacherListByType(req);
  1901. }
  1902. @Override
  1903. public ResponseEntity findTeacherListByType(FindCheckTeacherListReq req) {
  1904. ResponseEntity responseEntity = new ResponseEntity();
  1905. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  1906. Map<String, Object> resultMap = new HashMap<>();
  1907. resultMap.put("teacherList", libManagerMapper.findCheckTeacherList(req.getTeacherName(), req.getType(), req.getSubjects(), page));
  1908. resultMap.put("pageNo", page.getCurrent());
  1909. resultMap.put("pageSize", page.getSize());
  1910. resultMap.put("pages", page.getPages());
  1911. resultMap.put("total", page.getTotal());
  1912. return responseEntity.success(resultMap, "查询成功");
  1913. }
  1914. @Override
  1915. public ResponseEntity allotCheckTeacher(AllotCheckTeacherReq req) {
  1916. ResponseEntity responseEntity = new ResponseEntity();
  1917. if(CollectionUtils.isNotEmpty(req.getExerciseBookIdList())) {
  1918. //更新练习册表答案校对员id
  1919. kmtExerciseBookService.updateAnswerCorrecterIdByIds(req.getTeacherId(),req.getExerciseBookIdList());
  1920. //异步更新练习册题目表答案校对员id
  1921. ExerciseTeacherClassRequest request = new ExerciseTeacherClassRequest();
  1922. request.setTeacherId(req.getTeacherId());
  1923. request.setType(8);
  1924. ThreadPool.getInstance().addTask(new UpdateExerciseQuestionThreadTask(Collections.singletonList(request), req.getExerciseBookIdList(), kmtExerciseQuestionService));
  1925. //更新练习册题目表答案校对员id
  1926. //kmtExerciseQuestionService.updateAnswerCorrecterIdByExerciseBookIds(req.getTeacherId(),req.getExerciseBookIdList());
  1927. //kmtExerciseQuestionService.bulkBookExerciseQuestions(req.getExerciseBookIdList());
  1928. }
  1929. return responseEntity.success();
  1930. }
  1931. @Override
  1932. public ResponseEntity findAnswerProofreadExerciseBookList(AnswerProofreadExerciseBookListReq req) {
  1933. ResponseEntity responseEntity = new ResponseEntity();
  1934. IPage<AnswerProofreadExerciseBookDTO> page =
  1935. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(req.getPageNo(), req.getPageSize());
  1936. page = kmtExerciseMapper.findAnswerProofreadExerciseBookList(page, req);
  1937. Map<String, Object> resultMap = new HashMap<>();
  1938. resultMap.put("pageNo", page.getCurrent());
  1939. resultMap.put("pageSize", page.getSize());
  1940. resultMap.put("pages", page.getPages());
  1941. resultMap.put("total", page.getTotal());
  1942. resultMap.put("bookList", page.getRecords());
  1943. return responseEntity.success(resultMap, "成功");
  1944. }
  1945. @Override
  1946. public ResponseEntity findAnswerProofreadQuestionList(AnswerProofreadQuestionListReq req) {
  1947. ResponseEntity responseEntity = new ResponseEntity();
  1948. IPage<ExerciseQuetionDto> page =
  1949. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(req.getPageNo(), req.getPageSize());
  1950. page = kmtExerciseMapper.findQuestionListAnswerWrong(page, req);
  1951. //从文件读取大字段
  1952. List<ExerciseQuetionDto> records = page.getRecords();
  1953. kmtExerciseService.appendQuestionDtoDataFromJSONFile(records);
  1954. List<ExerciseBookCourseClassDto> exerciseBookCourseClassDtoList =
  1955. kmtExerciseQuestionService.getQuestionGroupList(records, true);
  1956. Map<String, Object> resultMap = new HashMap<>();
  1957. resultMap.put("pageNo", page.getCurrent());
  1958. resultMap.put("pageSize", page.getSize());
  1959. resultMap.put("pages", page.getPages());
  1960. resultMap.put("total", page.getTotal());
  1961. resultMap.put("list", exerciseBookCourseClassDtoList);
  1962. return responseEntity.success(resultMap, "成功");
  1963. }
  1964. //获取数组中某个元素的位置
  1965. private int searchEle(Integer[] arr,Integer target){
  1966. for(int i = 0;i<arr.length;i++){
  1967. if(arr[i]==target){
  1968. return i; }
  1969. }
  1970. return -1;
  1971. }
  1972. //获取数组中某个元素的位置
  1973. private int searchEle1(String[] arr,String target){
  1974. for(int i = 0;i<arr.length;i++){
  1975. if(arr[i]==target){
  1976. return i; }
  1977. }
  1978. return -1;
  1979. }
  1980. //获取数组中某个元素的位置
  1981. private int searchEle2(Long[] arr,Long target){
  1982. for(int i = 0;i<arr.length;i++){
  1983. if(arr[i]==target){
  1984. return i; }
  1985. }
  1986. return -1;
  1987. }
  1988. private int sum(Long a[], int n){
  1989. int mun = 0;
  1990. for (int i = 0; i < n; i++) {
  1991. mun+=a[i];
  1992. }
  1993. return mun;
  1994. }
  1995. //通过百分比判断等级
  1996. private String getPriorityByPercent(BigDecimal bigDecimal){
  1997. BigDecimal db1=new BigDecimal("0.80");
  1998. BigDecimal db2=new BigDecimal("0.50");
  1999. BigDecimal db3=new BigDecimal("0.20");
  2000. if(bigDecimal.compareTo(db1)==1){
  2001. return "P3";
  2002. }else if(bigDecimal.compareTo(db2)==1){
  2003. return "P2";
  2004. }else if(bigDecimal.compareTo(db3)==1){
  2005. return "P1";
  2006. }else {
  2007. return "P0";
  2008. }
  2009. }
  2010. @Override
  2011. public ResponseEntity findUncheckedExerciseBookList(CheckExerciseBookReq req) {
  2012. ResponseEntity responseEntity = new ResponseEntity();
  2013. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  2014. Map<String, Object> params = new HashMap<>(16);
  2015. params.put("proofreadStatus", "0");
  2016. params.put("subject", req.getSubject());
  2017. params.put("grade", req.getGrade());
  2018. params.put("bookName", req.getBookName());
  2019. params.put("semester", Objects.equals(req.getSemester(), 1) || Objects.equals(req.getSemester(), 2) ? req.getSemester() : null);
  2020. List<Exercise1Dto> list = kmtExerciseMapper.findExerciseList(page, params);
  2021. List<Exercise3Dto> exerciseDtoList = new ArrayList<>();
  2022. list.forEach(entity -> {
  2023. Exercise3Dto exerciseDto = new Exercise3Dto();
  2024. exerciseDto.setBookName(entity.getBookName());
  2025. exerciseDto.setBookType(entity.getBookType() == 3 ? 0 : entity.getBookType());
  2026. exerciseDto.setExerciseBookId(entity.getExerciseBookId());
  2027. exerciseDto.setGrade(entity.getGrade());
  2028. exerciseDto.setSemester(entity.getSemester());
  2029. exerciseDto.setSubject(entity.getSubject());
  2030. exerciseDto.setVersionName(entity.getVersionName());
  2031. exerciseDtoList.add(exerciseDto);
  2032. });
  2033. Map<String, Object> resultMap = new HashMap<>(16);
  2034. resultMap.put("pageNo", page.getCurrent());
  2035. resultMap.put("pageSize", page.getSize());
  2036. resultMap.put("pages", page.getPages());
  2037. resultMap.put("total", page.getTotal());
  2038. resultMap.put("list", exerciseDtoList);
  2039. return responseEntity.success(resultMap, "成功");
  2040. }
  2041. @Override
  2042. public ResponseEntity findCheckExerciseBookList(CheckExerciseBookReq req) {
  2043. ResponseEntity responseEntity = new ResponseEntity();
  2044. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  2045. Map<String, Object> params = new HashMap<>(16);
  2046. params.put("type", req.getType() + "");
  2047. params.put("teacherName", req.getTeacherName());
  2048. List<Exercise1Dto> list = kmtExerciseMapper.findTeacherExerciseList(page, params);
  2049. List<Map<String, Object>> dtoList = new ArrayList<>();
  2050. Map<String, List<Exercise3Dto>> exerciseMap = new LinkedHashMap<>();
  2051. list.forEach(entity -> {
  2052. List<Exercise3Dto> exerciseDtoList;
  2053. String key = entity.getTeacherName() == null ? "" : entity.getTeacherName();
  2054. if (exerciseMap.get(key) == null) {
  2055. exerciseDtoList = new ArrayList<>();
  2056. } else {
  2057. exerciseDtoList = exerciseMap.get(key);
  2058. }
  2059. Exercise3Dto exerciseDto = new Exercise3Dto();
  2060. exerciseDto.setBookName(entity.getBookName());
  2061. exerciseDto.setBookType(entity.getBookType() == 3 ? 0 : entity.getBookType());
  2062. exerciseDto.setExerciseBookId(entity.getExerciseBookId());
  2063. exerciseDto.setGrade(entity.getGrade());
  2064. exerciseDto.setSemester(entity.getSemester());
  2065. exerciseDto.setSubject(entity.getSubject());
  2066. exerciseDto.setVersionName(entity.getVersionName());
  2067. exerciseDtoList.add(exerciseDto);
  2068. exerciseMap.put(key, exerciseDtoList);
  2069. });
  2070. exerciseMap.forEach((key, value) -> {
  2071. Map<String, Object> teacherMap = new LinkedHashMap<>();
  2072. teacherMap.put("teacherName", key);
  2073. teacherMap.put("bookList", value);
  2074. dtoList.add(teacherMap);
  2075. });
  2076. Map<String, Object> resultMap = new HashMap<>(16);
  2077. resultMap.put("pageNo", page.getCurrent());
  2078. resultMap.put("pageSize", page.getSize());
  2079. resultMap.put("pages", page.getPages());
  2080. resultMap.put("total", page.getTotal());
  2081. resultMap.put("teacherList", dtoList);
  2082. return responseEntity.success(resultMap, "成功");
  2083. }
  2084. @Override
  2085. public ResponseEntity findCheckedExerciseBookList(CheckedExerciseBookReq req) {
  2086. ResponseEntity responseEntity = new ResponseEntity();
  2087. com.baomidou.mybatisplus.extension.plugins.pagination.Page page;
  2088. if (req.getPageNo() != null && req.getPageSize() != null) {
  2089. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  2090. }else{
  2091. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(1, Integer.MAX_VALUE);
  2092. }
  2093. Map<String, Object> params = new HashMap<>(16);
  2094. params.put("type", "2");
  2095. params.put("beginTime",req.getBeginTime());
  2096. if(StringUtils.isNotBlank(req.getEndTime())){
  2097. req.setEndTime(req.getEndTime()+" "+"24:00:00");
  2098. }
  2099. params.put("endTime",req.getEndTime());
  2100. params.put("teacherName", req.getTeacherName());
  2101. params.put("exerciseName", req.getExerciseName());
  2102. List<Exercise1Dto> list = kmtExerciseMapper.findTeacherExerciseList(page, params);
  2103. List<Exercise5Dto> exerciseDtoList = new ArrayList<>();
  2104. list.forEach(entity -> {
  2105. Exercise5Dto exerciseDto = new Exercise5Dto();
  2106. exerciseDto.setBookName(entity.getBookName());
  2107. exerciseDto.setBookType(entity.getBookType() == 3 ? 0 : entity.getBookType());
  2108. exerciseDto.setExerciseBookId(entity.getExerciseBookId());
  2109. exerciseDto.setGrade(entity.getGrade());
  2110. exerciseDto.setSemester(entity.getSemester());
  2111. exerciseDto.setSubject(entity.getSubject());
  2112. exerciseDto.setVersionName(entity.getVersionName());
  2113. exerciseDto.setTeacherName(entity.getTeacherName());
  2114. exerciseDto.setCheckedTime(DateHelper.format(entity.getCheckTime(),"yyyy.MM.dd"));
  2115. exerciseDto.setUseYear(entity.getBookYear());
  2116. exerciseDto.setAiRollbackImport(entity.getAiRollbackImport());
  2117. exerciseDtoList.add(exerciseDto);
  2118. });
  2119. Map<String, Object> resultMap = new HashMap<>(16);
  2120. resultMap.put("pageNo", page.getCurrent());
  2121. resultMap.put("pageSize", page.getSize());
  2122. resultMap.put("pages", page.getPages());
  2123. resultMap.put("total", page.getTotal());
  2124. resultMap.put("list", exerciseDtoList);
  2125. return responseEntity.success(resultMap, "成功");
  2126. }
  2127. @Override
  2128. public List<Exercise4Dto> exportCheckExerciseBookList(CheckExerciseBookReq req){
  2129. com.baomidou.mybatisplus.extension.plugins.pagination.Page page;
  2130. if (req.getPageNo() != null && req.getPageSize() != null) {
  2131. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(req.getPageNo(), req.getPageSize());
  2132. }else{
  2133. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(1, Integer.MAX_VALUE);
  2134. }
  2135. Map<String, Object> params = new HashMap<>(16);
  2136. params.put("type", req.getType() + "");
  2137. params.put("teacherName", req.getTeacherName());
  2138. List<Exercise1Dto> list = kmtExerciseMapper.findTeacherExerciseList(page, params);
  2139. Map<String, List<Exercise3Dto>> exerciseMap = new LinkedHashMap<>();
  2140. list.forEach(entity -> {
  2141. List<Exercise3Dto> exerciseDtoList;
  2142. String key = entity.getTeacherName() == null ? "" : entity.getTeacherName();
  2143. if (exerciseMap.get(key) == null) {
  2144. exerciseDtoList = new ArrayList<>();
  2145. } else {
  2146. exerciseDtoList = exerciseMap.get(key);
  2147. }
  2148. Exercise3Dto exerciseDto = new Exercise3Dto();
  2149. exerciseDto.setBookName(entity.getBookName());
  2150. exerciseDto.setBookType(entity.getBookType() == 3 ? 0 : entity.getBookType());
  2151. exerciseDto.setExerciseBookId(entity.getId());
  2152. exerciseDto.setGrade(entity.getGrade());
  2153. exerciseDto.setSemester(entity.getSemester());
  2154. exerciseDto.setSubject(entity.getSubject());
  2155. exerciseDto.setVersionName(entity.getVersionName());
  2156. exerciseDtoList.add(exerciseDto);
  2157. exerciseMap.put(key, exerciseDtoList);
  2158. });
  2159. List<Exercise4Dto> exercise4DtoList=new ArrayList<>();
  2160. exerciseMap.forEach((key, value) -> {
  2161. Exercise4Dto exercise4Dto = new Exercise4Dto();
  2162. exercise4Dto.setTeacherName(key);
  2163. exercise4Dto.setExercise3DtoList(value);
  2164. exercise4DtoList.add(exercise4Dto);
  2165. });
  2166. return exercise4DtoList;
  2167. }
  2168. @Override
  2169. public ResponseEntity findRoleHistoryList(String userId) {
  2170. ResponseEntity responseEntity = new ResponseEntity();
  2171. TbLibManager teacher = managerService.findTopByUserIdAndTypeIn(userId, new int[]{17});
  2172. if (teacher == null) {
  2173. return responseEntity.failure("不存在该老师");
  2174. }
  2175. Map<String, Object> data = new HashMap<>(16);
  2176. List<Map<String, String>> list = new ArrayList<>();
  2177. //所有审批通过的记录
  2178. List<TbLibManagerAudit> auditList = libManagerAuditService.findByLibManagerIdAndStatus(teacher.getId(), 1);
  2179. auditList.forEach(e -> {
  2180. Map<String, String> roleMap = new HashMap<>(16);
  2181. roleMap.put("time",DateHelper.format(e.getCreateTime(),"yyyy.MM.dd"));
  2182. roleMap.put("role",this.getRole(e.getAuthority()));
  2183. list.add(roleMap);
  2184. });
  2185. data.put("list", list);
  2186. return responseEntity.success(data, "成功");
  2187. }
  2188. @Override
  2189. public ResponseEntity findExerciseTeacherReviseQuestions(ExerciseTeacherReviseQuestionReq req) {
  2190. ResponseEntity responseEntity = new ResponseEntity();
  2191. TbLibManager libManager = managerService.findByUserIdAndType(req.getTeacherId(), 17);
  2192. if (libManager == null || StringUtils.isBlank(libManager.getAuthority())) {
  2193. return responseEntity.failure("该老师还没有录题权限");
  2194. }
  2195. List<String> authorityList = Arrays.asList(libManager.getAuthority().split(","));
  2196. List<Integer> dealStatusList = new ArrayList<>();
  2197. if (authorityList.contains("1")) {
  2198. dealStatusList.add(1);
  2199. }
  2200. if (authorityList.contains("2")) {
  2201. dealStatusList.add(7);
  2202. }
  2203. if (authorityList.contains("3")) {
  2204. dealStatusList.add(8);
  2205. }
  2206. if (authorityList.contains("4")) {
  2207. dealStatusList.add(10);
  2208. }
  2209. if (CollectionUtils.isEmpty(dealStatusList)) {
  2210. return responseEntity.failure("该老师还没有录题权限");
  2211. }
  2212. List<ExerciseQuetionDto> exerciseQuestionDtoList = kmtExerciseMapper.findRepulsedQuestion(req, dealStatusList);
  2213. kmtExerciseService.appendQuestionDtoDataFromJSONFile(exerciseQuestionDtoList);
  2214. List<ExerciseBookCourseClassDto> exerciseBookCourseClassDtoList =
  2215. kmtExerciseQuestionService.getQuestionGroupList(exerciseQuestionDtoList, true);
  2216. return responseEntity.success(Collections.singletonMap("list", exerciseBookCourseClassDtoList), "成功");
  2217. }
  2218. @Override
  2219. public ResponseEntity findDistributionCount() {
  2220. ExerciseDistributionCountDTO exerciseDistributionCountDTO = kmtExerciseMapper.findDistributionCount();
  2221. return new ResponseEntity().success(exerciseDistributionCountDTO, "查询成功");
  2222. }
  2223. @Override
  2224. public ResponseEntity findDistributionExerciseBookFilterOption() {
  2225. JSONObject resultObject = JSON.parseObject("{\"gradeOptionList\":[{\"optionName\":\"全部\",\"value\":\"\"},{\"optionName\":\"一年级\",\"value\":\"一年级\"},{\"optionName\":\"二年级\",\"value\":\"二年级\"},{\"optionName\":\"三年级\",\"value\":\"三年级\"},{\"optionName\":\"四年级\",\"value\":\"四年级\"},{\"optionName\":\"五年级\",\"value\":\"五年级\"},{\"optionName\":\"六年级\",\"value\":\"六年级\"}],\"semesterOptionList\":[{\"optionName\":\"全部\",\"value\":0},{\"optionName\":\"上册\",\"value\":1},{\"optionName\":\"下册\",\"value\":2}],\"halfBookOptionList\":[{\"optionName\":\"全部\",\"value\":-1},{\"optionName\":\"整本\",\"value\":0},{\"optionName\":\"上半本\",\"value\":1},{\"optionName\":\"下半本\",\"value\":2},{\"optionName\":\"不同\",\"value\":3}],\"handlerOptionList\":[{\"optionName\":\"全部\",\"value\":0},{\"optionName\":\"无加工人\",\"value\":1}],\"handleAuditUserOptionList\":[{\"optionName\":\"全部\",\"value\":0},{\"optionName\":\"无加审人\",\"value\":1}],\"analyserOptionList\":[{\"optionName\":\"全部\",\"value\":0},{\"optionName\":\"无解析人\",\"value\":1}],\"analysisAuditUserOptionList\":[{\"optionName\":\"全部\",\"value\":0},{\"optionName\":\"无解审人\",\"value\":1}]}");
  2226. // 科目-版本选项
  2227. List<Map<String, Object>> subjectOptionList = new ArrayList<>();
  2228. resultObject.put("subjectOptionList", subjectOptionList);
  2229. // 全部
  2230. Map<String, Object> subjectOptionMap = new HashMap<>();
  2231. subjectOptionMap.put("optionName", "全部");
  2232. subjectOptionMap.put("value", "");
  2233. Map<String, Object> versionOptionMap = new HashMap<>();
  2234. versionOptionMap.put("name", "全部");
  2235. versionOptionMap.put("type", 0);
  2236. List<Map<String, Object>> versionOptionMapList = new ArrayList<>();
  2237. versionOptionMapList.add(versionOptionMap);
  2238. subjectOptionMap.put("versionOptionList", versionOptionMapList);
  2239. subjectOptionList.add(subjectOptionMap);
  2240. // 系统内科目
  2241. List<String> subjectList = Arrays.asList("语文", "数学", "英语");
  2242. for (String subject : subjectList) {
  2243. subjectOptionMap = new LinkedHashMap<>();
  2244. subjectOptionMap.put("optionName", subject);
  2245. subjectOptionMap.put("value", subject);
  2246. subjectOptionMap.put("versionOptionList", knowledgeVersion.getVersionListBySubject(subject));
  2247. subjectOptionList.add(subjectOptionMap);
  2248. }
  2249. return new ResponseEntity().success(resultObject, "查询成功");
  2250. }
  2251. @Override
  2252. public ResponseEntity findDistributionExerciseBookList(DistributionExerciseBookListReq req) {
  2253. int totalCount = kmtExerciseMapper.countDistributionExerciseBook(req);
  2254. Integer pageSize = req.getPageSize();
  2255. Integer pageNo = req.getPageNo();
  2256. List<DistributionExerciseBookDTO> distributionExerciseBookDTOList =
  2257. kmtExerciseMapper.findDistributionExerciseBookList(req, (pageNo - 1) * pageSize, pageSize);
  2258. this.appendQuestionNum2List(distributionExerciseBookDTOList);
  2259. Map<String, Object> resultMap = new HashMap<>();
  2260. resultMap.put("pageNo", pageNo);
  2261. resultMap.put("pageSize", pageSize);
  2262. resultMap.put("pages", (totalCount - 1) / pageSize + 1);
  2263. resultMap.put("total", totalCount);
  2264. resultMap.put("bookList", distributionExerciseBookDTOList);
  2265. return new ResponseEntity().success(resultMap, "查询成功");
  2266. }
  2267. /**
  2268. * 增加题数反参
  2269. * @param list
  2270. */
  2271. private void appendQuestionNum2List (List<DistributionExerciseBookDTO> list) {
  2272. if (CollectionUtils.isNotEmpty(list)){
  2273. List<String> exerciseBookIds = list.stream().map(DistributionExerciseBookDTO::getExerciseBookId).collect(Collectors.toList());
  2274. List<DistributionExerciseBookDTO> questionNumList = kmtExerciseMapper.findExerciseQuestionNum(exerciseBookIds);
  2275. for (DistributionExerciseBookDTO item : list){
  2276. for (DistributionExerciseBookDTO questionNumItem : questionNumList){
  2277. if (questionNumItem.getExerciseBookId().equals(item.getExerciseBookId())){
  2278. item.setQuestionNum(questionNumItem.getQuestionNum());
  2279. break;
  2280. }
  2281. }
  2282. }
  2283. }
  2284. }
  2285. private String getRole(String authority) {
  2286. StringBuilder exerciseTeacherTypeBuilder = new StringBuilder("");
  2287. if (authority.contains("1")) {
  2288. exerciseTeacherTypeBuilder.append("加工、");
  2289. }
  2290. if (authority.contains("2")) {
  2291. exerciseTeacherTypeBuilder.append("加审、");
  2292. }
  2293. if (authority.contains("3")) {
  2294. exerciseTeacherTypeBuilder.append("解析、");
  2295. }
  2296. if (authority.contains("4")) {
  2297. exerciseTeacherTypeBuilder.append("解审、");
  2298. }
  2299. if (exerciseTeacherTypeBuilder.length() > 0) {
  2300. exerciseTeacherTypeBuilder.deleteCharAt(exerciseTeacherTypeBuilder.length() - 1);
  2301. }
  2302. StringBuilder kmtTeacherTypeBuilder = new StringBuilder("");
  2303. if (authority.contains("5")) {
  2304. kmtTeacherTypeBuilder.append("加工、");
  2305. }
  2306. if (authority.contains("6")) {
  2307. kmtTeacherTypeBuilder.append("审核、");
  2308. }
  2309. if (kmtTeacherTypeBuilder.length() > 0) {
  2310. kmtTeacherTypeBuilder.deleteCharAt(kmtTeacherTypeBuilder.length() - 1);
  2311. }
  2312. String teacherTypeStr = (exerciseTeacherTypeBuilder.length() > 0 ? String.format("练习册(%s) ", exerciseTeacherTypeBuilder.toString()) : "") +
  2313. (kmtTeacherTypeBuilder.length() > 0 ? String.format("KMT (%s)", kmtTeacherTypeBuilder.toString()) : "");
  2314. if (authority.contains("7")) {
  2315. teacherTypeStr = "题库录入老师";
  2316. }
  2317. if (authority.contains("8")) {
  2318. teacherTypeStr = "答案校对老师";
  2319. }
  2320. return teacherTypeStr;
  2321. }
  2322. /*
  2323. * 更新练习册
  2324. */
  2325. @Override
  2326. public void updateExerciseAnwerStatus(){
  2327. List<Map<String,Object>> list=kmtExerciseMapper.findUnproofreadExerciseId();
  2328. if(CollectionUtils.isNotEmpty(list)){
  2329. list.forEach(a->{
  2330. String value=a.get("id").toString();
  2331. //查询练习册id判断练习册状态
  2332. List<KmtExerciseQuestion> list1=kmtExerciseMapper.findExerciseStatusByBookId(value);
  2333. int bookStatus=0;
  2334. if(CollectionUtils.isNotEmpty(list1)){
  2335. List<Integer> statusList=list1.stream().map(KmtExerciseQuestion::getProofreadStatus).collect(Collectors.toList());
  2336. if(statusList.contains(2)){
  2337. bookStatus=2;
  2338. }else {
  2339. if(statusList.contains(3)){
  2340. bookStatus=3;
  2341. }else {
  2342. if(statusList.contains(1)){
  2343. bookStatus=1;
  2344. }else {
  2345. bookStatus=0;
  2346. }
  2347. }
  2348. }
  2349. }
  2350. kmtExerciseMapper.updateExerciseBookStatusByIdAndStatus(bookStatus,value);
  2351. });
  2352. }
  2353. }
  2354. @Override
  2355. public ResponseEntity findCheckTeacherDetailsList(CheckTeacherDetailsRequest request){
  2356. ResponseEntity responseEntity=new ResponseEntity();
  2357. Map<String,Object> data=new HashMap<>();
  2358. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(request.getPageNo(), request.getPageSize());
  2359. List<Map<String,Object>> list=libManagerMapper.findCheckTeacherDetailsList(request.getTeacherId(),request.getMaxCreateTime(),page);
  2360. List<CheckTeacherDetailDto> checkList=new ArrayList<>();
  2361. list.forEach(a->{
  2362. CheckTeacherDetailDto dto=new CheckTeacherDetailDto();
  2363. dto.setBookId(Optional.ofNullable(a.get("bookId")).orElse("").toString());
  2364. dto.setBookName(Optional.ofNullable(a.get("bookName")).orElse("").toString());
  2365. dto.setExerciseBookId(Optional.ofNullable(a.get("id")).orElse("").toString());
  2366. dto.setGrade(Optional.ofNullable(a.get("grade")).orElse("").toString());
  2367. dto.setSemester(Integer.parseInt(a.get("semester").toString()));
  2368. dto.setCourseName(Optional.ofNullable(a.get("subject")).orElse("").toString());
  2369. dto.setVersionName(Optional.ofNullable(a.get("version")).orElse("").toString());
  2370. dto.setBookStatus(Integer.parseInt(a.get("bookStatus").toString())==0?1:2);
  2371. dto.setCheckTime(a.containsKey("checkTime")?new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(a.get("checkTime")):"无");
  2372. int bookType=Integer.parseInt(a.get("bookType").toString());
  2373. if(1==bookType){
  2374. dto.setHalfBook("整本");
  2375. }else if(1==bookType){
  2376. dto.setHalfBook("上半本");
  2377. }else {
  2378. dto.setHalfBook("下半本");
  2379. }
  2380. checkList.add(dto);
  2381. });
  2382. Map<String,Object> map= libManagerMapper.findCheckTeacherDetails(request.getTeacherId(),request.getMaxCreateTime());
  2383. int uncheckCount=0;
  2384. int checkCount=0;
  2385. if(null!=map){
  2386. uncheckCount=Integer.parseInt(map.get("uncheckCount").toString());
  2387. checkCount=Integer.parseInt(map.get("checkCount").toString());
  2388. }
  2389. data.put("pageNo",request.getPageNo());
  2390. data.put("pageSize",request.getPageSize());
  2391. data.put("pages",page.getPages());
  2392. data.put("total",page.getTotal());
  2393. data.put("uncheckCount",uncheckCount);
  2394. data.put("checkCount",checkCount);
  2395. data.put("list",checkList);
  2396. return responseEntity.success(data,"成功");
  2397. }
  2398. @Override
  2399. public List<CheckTeacherDetailDto> findCheckTeacherList(CheckTeacherDetailsRequest request){
  2400. com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(request.getPageNo(), request.getPageSize());
  2401. List<Map<String,Object>> list=libManagerMapper.findCheckTeacherDetailsList(request.getTeacherId(),request.getMaxCreateTime(),page);
  2402. List<CheckTeacherDetailDto> checkList=new ArrayList<>();
  2403. list.forEach(a->{
  2404. CheckTeacherDetailDto dto=new CheckTeacherDetailDto();
  2405. dto.setBookId(Optional.ofNullable(a.get("bookId")).orElse("").toString());
  2406. dto.setBookName(Optional.ofNullable(a.get("bookName")).orElse("").toString());
  2407. dto.setExerciseBookId(Optional.ofNullable(a.get("id")).orElse("").toString());
  2408. dto.setGrade(Optional.ofNullable(a.get("grade")).orElse("").toString());
  2409. dto.setSemester(Integer.parseInt(a.get("semester").toString()));
  2410. dto.setCourseName(Optional.ofNullable(a.get("subject")).orElse("").toString());
  2411. dto.setVersionName(Optional.ofNullable(a.get("version")).orElse("").toString());
  2412. dto.setBookStatus(Integer.parseInt(a.get("bookStatus").toString())==0?1:2);
  2413. dto.setCheckTime(a.containsKey("checkTime")?new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(a.get("checkTime")):"无");
  2414. int bookType=Integer.parseInt(a.get("bookType").toString());
  2415. if(1==bookType){
  2416. dto.setHalfBook("整本");
  2417. }else if(1==bookType){
  2418. dto.setHalfBook("上半本");
  2419. }else {
  2420. dto.setHalfBook("下半本");
  2421. }
  2422. checkList.add(dto);
  2423. });
  2424. return checkList;
  2425. }
  2426. @Override
  2427. public ResponseEntity allotExerciseDealTeacher(AllotExerciseTeacherRequest req) {
  2428. ResponseEntity responseEntity = new ResponseEntity();
  2429. if(CollectionUtils.isNotEmpty(req.getExerciseBookIdList())) {
  2430. List<KmtExerciseBook> exerciseBooks = kmtExerciseMapper.findAllExerciseBookPage(req.getExerciseBookIdList(), 0, 500);
  2431. for (ExerciseTeacherClassRequest teacherClassRequest : req.getTeacherList()) {
  2432. TbLibManager manager = managerService.findByUserIdAndType(teacherClassRequest.getTeacherId(), 17);
  2433. if (manager == null) {
  2434. return responseEntity.failure("该老师没有权限");
  2435. }
  2436. //保存分配记录
  2437. this.saveKmtExerciseTeacherRecord(teacherClassRequest, req.getExerciseBookIdList(), manager.getName());
  2438. //更新练习册表老师id
  2439. this.updateTeacherIdByType(teacherClassRequest.getTeacherId(), teacherClassRequest.getType(), exerciseBooks);
  2440. }
  2441. kmtExerciseBookService.save(exerciseBooks);
  2442. //异步更新练习册题目表老师id
  2443. ThreadPool.getInstance().addTask(new UpdateExerciseQuestionThreadTask(req.getTeacherList(), req.getExerciseBookIdList(), kmtExerciseQuestionService));
  2444. }
  2445. return responseEntity.success();
  2446. }
  2447. /**
  2448. * 更新练习册加工老师
  2449. * @param teacherId
  2450. * @param type
  2451. * @param exerciseBooks
  2452. */
  2453. private void updateTeacherIdByType (String teacherId, int type, List<KmtExerciseBook> exerciseBooks){
  2454. if (CollectionUtils.isNotEmpty(exerciseBooks)){
  2455. for (KmtExerciseBook exerciseBook : exerciseBooks){
  2456. switch (type) {
  2457. case 1:
  2458. exerciseBook.setHandleUserId(teacherId);
  2459. break;
  2460. case 2:
  2461. exerciseBook.setAuditingUserId(teacherId);
  2462. break;
  2463. case 3:
  2464. exerciseBook.setAnalysisUserId(teacherId);
  2465. break;
  2466. case 4:
  2467. exerciseBook.setAnalysisAuditerId(teacherId);
  2468. break;
  2469. default:
  2470. break;
  2471. }
  2472. }
  2473. }
  2474. }
  2475. /**
  2476. * 保存分配记录
  2477. * @param req
  2478. */
  2479. private void saveKmtExerciseTeacherRecord (ExerciseTeacherClassRequest req, List<String> exercisebookIds, String teacherName){
  2480. Date now = new Date();
  2481. List<KmtExerciseBookTeacherRecord> teacherRecords = kmtExerciseMapper.findExerciseTeacherByExerciseBookIdsAndAuthType (exercisebookIds, req.getType());
  2482. if (CollectionUtils.isNotEmpty(teacherRecords)){
  2483. for (KmtExerciseBookTeacherRecord record : teacherRecords){
  2484. if (record.getLastFlag() == 1){
  2485. record.setLastFlag(0);
  2486. kmtExerciseTeacherRecordService.save(record);
  2487. }
  2488. }
  2489. }
  2490. for (String exerciseBookId : exercisebookIds){
  2491. KmtExerciseBookTeacherRecord teacherRecord = new KmtExerciseBookTeacherRecord();
  2492. teacherRecord.setCreateTime(now);
  2493. teacherRecord.setAuthorityType(req.getType());
  2494. teacherRecord.setExerciseBookId(exerciseBookId);
  2495. teacherRecord.setTeacherId(req.getTeacherId());
  2496. teacherRecord.setTeacherName(teacherName);
  2497. teacherRecord.setLastFlag(1);
  2498. kmtExerciseTeacherRecordService.save(teacherRecord);
  2499. }
  2500. }
  2501. @Override
  2502. public ResponseEntity exerciseTeacherSalary(ExerciseTeacherSalaryReq req) {
  2503. //查询老师分配的最新记录,记录结薪时间
  2504. ResponseEntity responseEntity = new ResponseEntity();
  2505. KmtExerciseBookTeacherRecord teacherRecord = kmtExerciseTeacherRecordService.findByExerciseBookIdAndAuthorityType(req.getExerciseBookId(), req.getType());
  2506. Date now = new Date();
  2507. if (teacherRecord != null){
  2508. teacherRecord.setSalaryGiven(1);
  2509. teacherRecord.setSalaryGivenTime(new Date());
  2510. kmtExerciseTeacherRecordService.save(teacherRecord);
  2511. } else{
  2512. TbLibManager manager = managerService.findByUserIdAndType(req.getTeacherId(), 17);
  2513. teacherRecord = new KmtExerciseBookTeacherRecord();
  2514. teacherRecord.setTeacherId(req.getTeacherId());
  2515. teacherRecord.setCreateTime(now);
  2516. if (manager != null){
  2517. teacherRecord.setTeacherName(manager.getName());
  2518. }
  2519. teacherRecord.setExerciseBookId(req.getExerciseBookId());
  2520. teacherRecord.setAuthorityType(req.getType());
  2521. teacherRecord.setSalaryGiven(1);
  2522. teacherRecord.setSalaryGivenTime(new Date());
  2523. kmtExerciseTeacherRecordService.save(teacherRecord);
  2524. }
  2525. // 异步刷新已分配练习册导出数据
  2526. ThreadPool.getInstance().addTask(new SyncRefreshExerciseBookDistributionCountTask(Collections.singletonList(req.getExerciseBookId()), 3));
  2527. return responseEntity.success();
  2528. }
  2529. @Override
  2530. public List<ExportDistributionExerciseBookDTO> findExportDistributionExerciseBookList(ExportDistributionExerciseBookListReq req) {
  2531. return kmtExerciseMapper.findExportDistributionExerciseBookList(req, Integer.MAX_VALUE);
  2532. }
  2533. @Override
  2534. public ResponseEntity CountOrgRate(String subject){
  2535. ResponseEntity responseEntity=new ResponseEntity();
  2536. //将统计数据的所有旧记录清楚
  2537. com.baomidou.mybatisplus.extension.plugins.pagination.Page page;
  2538. kmtExerciseLibPriorityService.deleteOrgCountBySubject(subject);
  2539. page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(1, Integer.MAX_VALUE);
  2540. List<Map<String,Object>> list=kmtExerciseMapper.findAllLib(page,subject);
  2541. if(CollectionUtils.isNotEmpty(list)){
  2542. list.forEach(it->{
  2543. List<KmtExerciseBookLibDto>list1=kmtExerciseMapper.findAllExerciseBook(it.get("libId").toString(),subject);
  2544. int totalCount=(int)list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())).count();
  2545. int recogeCount=(int)list1.stream().filter(a->Objects.equals("已发布",a.getProgress())).count();
  2546. int unrecogeCount=(int)list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())&&!Objects.equals("已发布",a.getProgress())).count();
  2547. int unPurchaseCount=(int)list1.stream().filter(a->Objects.equals("未购买",a.getProgress())).count();
  2548. KmtExerciseLibPriority kmtExerciseLibPriority=new KmtExerciseLibPriority();
  2549. kmtExerciseLibPriority.setLibId(Optional.ofNullable(it.get("libId")).orElse("").toString());
  2550. kmtExerciseLibPriority.setSubject(subject);
  2551. kmtExerciseLibPriority.setRecogeNum(recogeCount);
  2552. kmtExerciseLibPriority.setTotalNum(totalCount);
  2553. kmtExerciseLibPriority.setUnrecogeNum(unrecogeCount);
  2554. kmtExerciseLibPriority.setUnpurchaNum(unPurchaseCount);
  2555. String chineseRecogeRate="0.00%";
  2556. if(0!=totalCount){
  2557. chineseRecogeRate=new BigDecimal(recogeCount).multiply(new BigDecimal(100)).divide(new BigDecimal(totalCount),2,BigDecimal.ROUND_HALF_UP) +"%";
  2558. }
  2559. kmtExerciseLibPriority.setRecogeRate(chineseRecogeRate);
  2560. kmtExerciseLibPriorityService.save(kmtExerciseLibPriority);
  2561. });
  2562. }
  2563. return responseEntity.success("成功");
  2564. }
  2565. @Override
  2566. public int refreshExerciseBookDistributionCount(List<String> selectedExerciseBookIdList, int triggerType) {
  2567. int offset = 0;
  2568. int pageSize = 500;
  2569. int count = 0;
  2570. List<KmtExerciseBook> kmtExerciseBookList;
  2571. List<KmtExerciseBookDistributionCount> kmtExerciseBookDistributionCountList = new ArrayList<>(pageSize);
  2572. do {
  2573. kmtExerciseBookList = kmtExerciseMapper.findAllExerciseBookPage(selectedExerciseBookIdList, offset, pageSize);
  2574. if (Objects.equals(1, triggerType)) {
  2575. // 分配练习册触发
  2576. this.refreshKmtExerciseBookDistributionCountByAllot(kmtExerciseBookList, kmtExerciseBookDistributionCountList);
  2577. } else if (Objects.equals(2, triggerType)) {
  2578. // 各加工身份提交触发
  2579. this.refreshKmtExerciseBookDistributionCountByHandleSubmit(kmtExerciseBookList, kmtExerciseBookDistributionCountList);
  2580. } else if (Objects.equals(3, triggerType)) {
  2581. // 结薪触发
  2582. this.refreshKmtExerciseBookDistributionCountByPayOff(kmtExerciseBookList, kmtExerciseBookDistributionCountList);
  2583. } else if (Objects.equals(4, triggerType)) {
  2584. // 题目报错触发
  2585. this.refreshKmtExerciseBookDistributionCountByQuestionError(kmtExerciseBookList, kmtExerciseBookDistributionCountList);
  2586. }
  2587. if (CollectionUtils.isNotEmpty(kmtExerciseBookDistributionCountList)) {
  2588. pagingHibernateJdbcDao.batchUpdate(kmtExerciseBookDistributionCountList);
  2589. count += kmtExerciseBookDistributionCountList.size();
  2590. kmtExerciseBookDistributionCountList.clear();
  2591. }
  2592. offset += pageSize;
  2593. } while (kmtExerciseBookList.size() >= pageSize);
  2594. return count;
  2595. }
  2596. /**
  2597. * 练习册题目报错触发刷新
  2598. *
  2599. * @param kmtExerciseBookList 练习册list
  2600. * @param kmtExerciseBookDistributionCountList 练习册已分配导出数据list
  2601. */
  2602. private void refreshKmtExerciseBookDistributionCountByQuestionError(List<KmtExerciseBook> kmtExerciseBookList,
  2603. List<KmtExerciseBookDistributionCount> kmtExerciseBookDistributionCountList) {
  2604. if (CollectionUtils.isNotEmpty(kmtExerciseBookList)) {
  2605. String exerciseBookId;
  2606. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount;
  2607. Date now = new Date();
  2608. for (KmtExerciseBook kmtExerciseBook : kmtExerciseBookList) {
  2609. exerciseBookId = kmtExerciseBook.getId();
  2610. kmtExerciseBookDistributionCount =
  2611. kmtExerciseMapper.findKmtExerciseBookDistributionCountByExerciseBookId(exerciseBookId);
  2612. if (kmtExerciseBookDistributionCount != null) {
  2613. this.setKmtExerciseBookAccuracy(exerciseBookId, kmtExerciseBookDistributionCount);
  2614. kmtExerciseBookDistributionCount.setUpdateTime(now);
  2615. kmtExerciseBookDistributionCountList.add(kmtExerciseBookDistributionCount);
  2616. }
  2617. }
  2618. }
  2619. }
  2620. /**
  2621. * 各加工身份结薪触发刷新
  2622. *
  2623. * @param kmtExerciseBookList 练习册list
  2624. * @param kmtExerciseBookDistributionCountList 练习册已分配导出数据list
  2625. */
  2626. private void refreshKmtExerciseBookDistributionCountByPayOff(List<KmtExerciseBook> kmtExerciseBookList,
  2627. List<KmtExerciseBookDistributionCount> kmtExerciseBookDistributionCountList) {
  2628. if (CollectionUtils.isNotEmpty(kmtExerciseBookList)) {
  2629. String exerciseBookId;
  2630. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount;
  2631. Date now = new Date();
  2632. for (KmtExerciseBook kmtExerciseBook : kmtExerciseBookList) {
  2633. exerciseBookId = kmtExerciseBook.getId();
  2634. kmtExerciseBookDistributionCount =
  2635. kmtExerciseMapper.findKmtExerciseBookDistributionCountByExerciseBookId(exerciseBookId);
  2636. if (kmtExerciseBookDistributionCount != null) {
  2637. this.setKmtExerciseBookHandleUsers(exerciseBookId, kmtExerciseBookDistributionCount);
  2638. kmtExerciseBookDistributionCount.setUpdateTime(now);
  2639. kmtExerciseBookDistributionCountList.add(kmtExerciseBookDistributionCount);
  2640. }
  2641. }
  2642. }
  2643. }
  2644. /**
  2645. * 各加工身份提交触发刷新
  2646. *
  2647. * @param kmtExerciseBookList 练习册list
  2648. * @param kmtExerciseBookDistributionCountList 练习册已分配导出数据list
  2649. */
  2650. private void refreshKmtExerciseBookDistributionCountByHandleSubmit(List<KmtExerciseBook> kmtExerciseBookList,
  2651. List<KmtExerciseBookDistributionCount> kmtExerciseBookDistributionCountList) {
  2652. if (CollectionUtils.isNotEmpty(kmtExerciseBookList)) {
  2653. String exerciseBookId;
  2654. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount;
  2655. Date now = new Date();
  2656. for (KmtExerciseBook kmtExerciseBook : kmtExerciseBookList) {
  2657. exerciseBookId = kmtExerciseBook.getId();
  2658. kmtExerciseBookDistributionCount =
  2659. kmtExerciseMapper.findKmtExerciseBookDistributionCountByExerciseBookId(exerciseBookId);
  2660. if (kmtExerciseBookDistributionCount != null) {
  2661. this.setKmtExerciseBookStatus(kmtExerciseBookDistributionCount, kmtExerciseBook);
  2662. this.setKmtExerciseBookLastSubmitTime(exerciseBookId, kmtExerciseBookDistributionCount);
  2663. kmtExerciseBookDistributionCount.setUpdateTime(now);
  2664. kmtExerciseBookDistributionCountList.add(kmtExerciseBookDistributionCount);
  2665. }
  2666. }
  2667. }
  2668. }
  2669. /**
  2670. * 练习册分配各加工身份触发刷新
  2671. *
  2672. * @param kmtExerciseBookList 练习册list
  2673. * @param kmtExerciseBookDistributionCountList 练习册已分配导出数据list
  2674. */
  2675. private void refreshKmtExerciseBookDistributionCountByAllot(List<KmtExerciseBook> kmtExerciseBookList,
  2676. List<KmtExerciseBookDistributionCount> kmtExerciseBookDistributionCountList) {
  2677. if (CollectionUtils.isNotEmpty(kmtExerciseBookList)) {
  2678. String exerciseBookId;
  2679. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount;
  2680. Date now = new Date();
  2681. long begin = System.currentTimeMillis();
  2682. for (KmtExerciseBook kmtExerciseBook : kmtExerciseBookList) {
  2683. // 刷新锁的过期时间,避免锁过期
  2684. if (System.currentTimeMillis() - begin > 5000) {
  2685. tokenManager.refreshExpireTime("exercise_book_distribution_count_lock", 60);
  2686. begin = System.currentTimeMillis();
  2687. }
  2688. // 四个身份都已分配才需要生成导出数据
  2689. if (StringUtils.isNotBlank(kmtExerciseBook.getHandleUserId()) &&
  2690. StringUtils.isNotBlank(kmtExerciseBook.getAuditingUserId()) &&
  2691. StringUtils.isNotBlank(kmtExerciseBook.getAnalysisUserId()) &&
  2692. StringUtils.isNotBlank(kmtExerciseBook.getAnalysisAuditerId())) {
  2693. exerciseBookId = kmtExerciseBook.getId();
  2694. kmtExerciseBookDistributionCount =
  2695. kmtExerciseMapper.findKmtExerciseBookDistributionCountByExerciseBookId(exerciseBookId);
  2696. if (kmtExerciseBookDistributionCount == null) {
  2697. // 不存在就创建
  2698. kmtExerciseBookDistributionCount = new KmtExerciseBookDistributionCount();
  2699. kmtExerciseBookDistributionCount.setHandlerAccuracy(100);
  2700. kmtExerciseBookDistributionCount.setHandleAuditUserAccuracy(100);
  2701. kmtExerciseBookDistributionCount.setAnalyserAccuracy(100);
  2702. kmtExerciseBookDistributionCount.setCreateTime(now);
  2703. this.setKmtExerciseBookBaseInfo(kmtExerciseBookDistributionCount, kmtExerciseBook);
  2704. this.setKmtExerciseBookStatus(kmtExerciseBookDistributionCount, kmtExerciseBook);
  2705. this.setKmtExerciseBookUnitCourse(exerciseBookId, kmtExerciseBookDistributionCount);
  2706. this.setKmtExerciseBookLastSubmitTime(exerciseBookId, kmtExerciseBookDistributionCount);
  2707. this.setKmtExerciseBookAccuracy(exerciseBookId, kmtExerciseBookDistributionCount);
  2708. }
  2709. this.setKmtExerciseBookHandleUsers(exerciseBookId, kmtExerciseBookDistributionCount);
  2710. kmtExerciseBookDistributionCount.setUpdateTime(now);
  2711. kmtExerciseBookDistributionCountList.add(kmtExerciseBookDistributionCount);
  2712. }
  2713. }
  2714. }
  2715. }
  2716. /**
  2717. * 设置练习册各加工身份正确率
  2718. *
  2719. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2720. * @param exerciseBookId 练习册
  2721. */
  2722. private void setKmtExerciseBookAccuracy(String exerciseBookId,
  2723. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount) {
  2724. List<Map<String, Integer>> accuracyMapList = kmtExerciseMapper.findAccuracy(exerciseBookId);
  2725. if (CollectionUtils.isNotEmpty(accuracyMapList)) {
  2726. int type;
  2727. for (Map<String, Integer> accuracyMap : accuracyMapList) {
  2728. type = Optional.ofNullable(accuracyMap.get("type")).orElse(0);
  2729. if (Objects.equals(1, type)) {
  2730. kmtExerciseBookDistributionCount.setHandlerAccuracy(Optional.ofNullable(accuracyMap.get("accuracy")).orElse(10000));
  2731. } else if (Objects.equals(2, type)) {
  2732. kmtExerciseBookDistributionCount.setHandleAuditUserAccuracy(Optional.ofNullable(accuracyMap.get("accuracy")).orElse(10000));
  2733. } else if (Objects.equals(3, type)) {
  2734. kmtExerciseBookDistributionCount.setAnalyserAccuracy(Optional.ofNullable(accuracyMap.get("accuracy")).orElse(10000));
  2735. }
  2736. }
  2737. }
  2738. }
  2739. /**
  2740. * 设置练习册各加工身份最新提交时间
  2741. *
  2742. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2743. * @param exerciseBookId 练习册
  2744. */
  2745. private void setKmtExerciseBookLastSubmitTime(String exerciseBookId,
  2746. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount) {
  2747. Map<String, Date> lastSubmitTimeMap = kmtExerciseMapper.findLastSubmitTime(exerciseBookId);
  2748. if (lastSubmitTimeMap != null) {
  2749. kmtExerciseBookDistributionCount.setHandlerLastSubmitTime(lastSubmitTimeMap.get("handlerLastSubmitTime"));
  2750. kmtExerciseBookDistributionCount.setHandleAuditUserLastSubmitTime(lastSubmitTimeMap.get("handleAuditUserLastSubmitTime"));
  2751. kmtExerciseBookDistributionCount.setAnalyserLastSubmitTime(lastSubmitTimeMap.get("analyserLastSubmitTime"));
  2752. kmtExerciseBookDistributionCount.setAnalysisAuditUserLastSubmitTime(lastSubmitTimeMap.get("analysisAuditUserLastSubmitTime"));
  2753. }
  2754. }
  2755. /**
  2756. * 设置练习册各加工身份信息
  2757. *
  2758. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2759. * @param exerciseBookId 练习册
  2760. */
  2761. private void setKmtExerciseBookHandleUsers(String exerciseBookId,
  2762. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount) {
  2763. List<KmtExerciseBookTeacherRecord> kmtExerciseBookTeacherRecordList = kmtExerciseTeacherRecordService.findByExerciseBookId(exerciseBookId);
  2764. if (CollectionUtils.isNotEmpty(kmtExerciseBookTeacherRecordList)) {
  2765. for (KmtExerciseBookTeacherRecord kmtExerciseBookTeacherRecord : kmtExerciseBookTeacherRecordList) {
  2766. if (Objects.equals(1, kmtExerciseBookTeacherRecord.getAuthorityType())) {
  2767. kmtExerciseBookDistributionCount.setHandlerName(kmtExerciseBookTeacherRecord.getTeacherName());
  2768. kmtExerciseBookDistributionCount.setHandlerSalaryGiven(kmtExerciseBookTeacherRecord.getSalaryGiven());
  2769. kmtExerciseBookDistributionCount.setHandlerSalaryGivenTime(kmtExerciseBookTeacherRecord.getSalaryGivenTime());
  2770. }
  2771. if (Objects.equals(2, kmtExerciseBookTeacherRecord.getAuthorityType())) {
  2772. kmtExerciseBookDistributionCount.setHandleAuditUserName(kmtExerciseBookTeacherRecord.getTeacherName());
  2773. kmtExerciseBookDistributionCount.setHandleAuditUserSalaryGiven(kmtExerciseBookTeacherRecord.getSalaryGiven());
  2774. kmtExerciseBookDistributionCount.setHandleAuditUserSalaryGivenTime(kmtExerciseBookTeacherRecord.getSalaryGivenTime());
  2775. }
  2776. if (Objects.equals(3, kmtExerciseBookTeacherRecord.getAuthorityType())) {
  2777. kmtExerciseBookDistributionCount.setAnalyserName(kmtExerciseBookTeacherRecord.getTeacherName());
  2778. kmtExerciseBookDistributionCount.setAnalyserSalaryGiven(kmtExerciseBookTeacherRecord.getSalaryGiven());
  2779. kmtExerciseBookDistributionCount.setAnalyserSalaryGivenTime(kmtExerciseBookTeacherRecord.getSalaryGivenTime());
  2780. }
  2781. if (Objects.equals(4, kmtExerciseBookTeacherRecord.getAuthorityType())) {
  2782. kmtExerciseBookDistributionCount.setAnalysisAuditUserName(kmtExerciseBookTeacherRecord.getTeacherName());
  2783. kmtExerciseBookDistributionCount.setAnalysisAuditUserSalaryGiven(kmtExerciseBookTeacherRecord.getSalaryGiven());
  2784. kmtExerciseBookDistributionCount.setAnalysisAuditUserSalaryGivenTime(kmtExerciseBookTeacherRecord.getSalaryGivenTime());
  2785. }
  2786. }
  2787. }
  2788. }
  2789. /**
  2790. * 设置练习册单元课时
  2791. *
  2792. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2793. * @param exerciseBookId 练习册id
  2794. */
  2795. private void setKmtExerciseBookUnitCourse(String exerciseBookId,
  2796. KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount) {
  2797. Map<String, Long> unitAndCourseCountMap = kmtExerciseMapper.countUnitAndCourse(exerciseBookId);
  2798. if (unitAndCourseCountMap != null) {
  2799. kmtExerciseBookDistributionCount.setUnitCount(Math.toIntExact(Optional.ofNullable(unitAndCourseCountMap.get("unitCount")).orElse(0L)));
  2800. kmtExerciseBookDistributionCount.setCourseCount(Math.toIntExact(Optional.ofNullable(unitAndCourseCountMap.get("courseCount")).orElse(0L)));
  2801. }
  2802. }
  2803. /**
  2804. * 设置练习册加工状态
  2805. *
  2806. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2807. * @param kmtExerciseBook 练习册
  2808. */
  2809. private void setKmtExerciseBookStatus(KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount,
  2810. KmtExerciseBook kmtExerciseBook) {
  2811. if (Objects.equals(kmtExerciseBook.getHadHandle(), 0)) {
  2812. kmtExerciseBookDistributionCount.setBookStatus(ExportExerciseBookStatusEnum.Processing.getCode());
  2813. } else if (Objects.equals(kmtExerciseBook.getHadAuditing(), 0)) {
  2814. kmtExerciseBookDistributionCount.setBookStatus(ExportExerciseBookStatusEnum.Auditing.getCode());
  2815. } else if (Objects.equals(kmtExerciseBook.getAnalysisHandled(), 0)) {
  2816. kmtExerciseBookDistributionCount.setBookStatus(ExportExerciseBookStatusEnum.AnalysisProcessing.getCode());
  2817. } else if (Objects.equals(kmtExerciseBook.getAnalysisAudited(), 0)) {
  2818. kmtExerciseBookDistributionCount.setBookStatus(ExportExerciseBookStatusEnum.AnalysisAuditing.getCode());
  2819. } else {
  2820. kmtExerciseBookDistributionCount.setBookStatus(ExportExerciseBookStatusEnum.Published.getCode());
  2821. }
  2822. }
  2823. /**
  2824. * 设置练习册基本信息
  2825. *
  2826. * @param kmtExerciseBookDistributionCount 练习册已分配导出数据
  2827. * @param kmtExerciseBook 练习册
  2828. */
  2829. private void setKmtExerciseBookBaseInfo(KmtExerciseBookDistributionCount kmtExerciseBookDistributionCount,
  2830. KmtExerciseBook kmtExerciseBook) {
  2831. kmtExerciseBookDistributionCount.setExerciseBookId(kmtExerciseBook.getId());
  2832. kmtExerciseBookDistributionCount.setImportDate(kmtExerciseBook.getCreateTime());
  2833. kmtExerciseBookDistributionCount.setBookName(kmtExerciseBook.getBookName());
  2834. kmtExerciseBookDistributionCount.setSubject(kmtExerciseBook.getCourseName());
  2835. kmtExerciseBookDistributionCount.setGrade(kmtExerciseBook.getGrade());
  2836. kmtExerciseBookDistributionCount.setVersion(kmtExerciseBook.getVersion());
  2837. kmtExerciseBookDistributionCount.setSemester(kmtExerciseBook.getSemester());
  2838. kmtExerciseBookDistributionCount.setBookType(kmtExerciseBook.getBookType());
  2839. }
  2840. @Override
  2841. public void updateOrgRateCount(){
  2842. String [] str=new String[]{"语文","数学","英语"};
  2843. for(String subject:str){
  2844. com.baomidou.mybatisplus.extension.plugins.pagination.Page page=new com.baomidou.mybatisplus.extension.plugins.pagination.Page(1, 999999);
  2845. List<ExerciseBookAndLibExportDto> list0=new ArrayList<>();
  2846. List<Map<String,Object>> list=kmtExerciseMapper.findAllDistinctLibBySubject(page,subject);
  2847. if(CollectionUtils.isNotEmpty(list)){
  2848. list.forEach(it->{
  2849. TbLibJoin tbLibJoin=libJoinService.getById(it.get("lib_id").toString());
  2850. Merchant merchant=kmtExerciseMapper.findSignService(it.get("lib_id").toString());
  2851. String leagueLet=tbLibJoin.getLeagueLat();
  2852. String leagueLng=tbLibJoin.getLeagueLng();
  2853. Map addressMap = MapUtils.regeoByAmapApi(Double.valueOf(leagueLng), Double.valueOf(leagueLet));
  2854. String leagueName=tbLibJoin.getLeagueName();
  2855. String address=addressMap.get("address").toString();
  2856. int signService=merchant.getSignService();
  2857. List<KmtExerciseBookLibDto>list1=kmtExerciseMapper.findAllExerciseBook(it.get("lib_id").toString(),subject);
  2858. ExerciseBookAndLibExportDto exerciseBookAndLibExportDto=new ExerciseBookAndLibExportDto();
  2859. Map<String,Object> map=new HashMap<>();
  2860. Map<String,List<KmtExerciseBookLibDto>> map1=list1.stream().collect(Collectors.groupingBy(p->p.getExerciseName()+"_"+p.getVersion()+"_"+p.getSemester()+"_"+p.getPriority()));
  2861. List<KmtExerciseLibExportDto> exportList= map1.keySet().stream().map(key->{
  2862. String [] u=key.split("_");
  2863. String exerciseName=u[0];
  2864. String version=u[1];
  2865. String semester=u[2];
  2866. String priority=u[3];
  2867. if(Objects.equals(priority,"null")){
  2868. priority="";
  2869. }
  2870. KmtExerciseLibExportDto kmt=new KmtExerciseLibExportDto();
  2871. kmt.setExerciseName(exerciseName);
  2872. kmt.setVersion(version);
  2873. kmt.setSemester(semester);
  2874. kmt.setPriority(priority);
  2875. List<KmtExerciseBookLibDto> exerciseBookLibDtos=map1.get(key);
  2876. kmt=this.getKmtList(exerciseBookLibDtos,exerciseName,version,semester,priority);
  2877. return kmt;
  2878. }).collect(Collectors.toList());
  2879. //通过libId和科目获取机构识别信息
  2880. long totalCount=list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())).count();
  2881. long recogeCount=list1.stream().filter(a->Objects.equals("已发布",a.getProgress())).count();
  2882. long unrecogeCount=list1.stream().filter(a->!Objects.equals("未购买",a.getProgress())&&!Objects.equals("已发布",a.getProgress())).count();
  2883. long unPurchaseCount=list1.stream().filter(a->Objects.equals("未购买",a.getProgress())).count();
  2884. String chineseRecogeRate="0.00%";
  2885. if(0!=totalCount){
  2886. chineseRecogeRate=new BigDecimal(recogeCount).multiply(new BigDecimal(100)).divide(new BigDecimal(totalCount),2,BigDecimal.ROUND_HALF_UP) +"%";
  2887. }
  2888. exerciseBookAndLibExportDto.setLibName(leagueName);
  2889. exerciseBookAndLibExportDto.setLibArea(address);
  2890. exerciseBookAndLibExportDto.setSignService(signService);
  2891. exerciseBookAndLibExportDto.setTotalCount(totalCount);
  2892. exerciseBookAndLibExportDto.setRecogeCount(recogeCount);
  2893. exerciseBookAndLibExportDto.setUnrecogeCount(unrecogeCount);
  2894. exerciseBookAndLibExportDto.setUnPurchaseCount(unPurchaseCount);
  2895. exerciseBookAndLibExportDto.setChineseRecogeRate(chineseRecogeRate);
  2896. exerciseBookAndLibExportDto.setLibExportDtoList(exportList);
  2897. list0.add(exerciseBookAndLibExportDto);
  2898. });
  2899. if("语文".equals(subject)&&CollectionUtils.isNotEmpty(list0)){
  2900. String key="yuwen"+DateUtil.format_yyyyMMdd(new Date());
  2901. if(redisUtil.exists(key)){
  2902. redisUtil.del(key);
  2903. }
  2904. redisUtil.set(key,JSON.toJSONString(list0),60*60*24);
  2905. }
  2906. if("数学".equals(subject)&&CollectionUtils.isNotEmpty(list0)){
  2907. String key="shuxue"+DateUtil.format_yyyyMMdd(new Date());
  2908. if(redisUtil.exists(key)){
  2909. redisUtil.del(key);
  2910. }
  2911. redisUtil.set(key,JSON.toJSONString(list0),60*60*24);
  2912. }
  2913. if("英语".equals(subject)&&CollectionUtils.isNotEmpty(list0)){
  2914. String key="yingyu"+DateUtil.format_yyyyMMdd(new Date());
  2915. if(redisUtil.exists(key)){
  2916. redisUtil.del(key);
  2917. }
  2918. redisUtil.set(key,JSON.toJSONString(list0),60*60*24);
  2919. }
  2920. }
  2921. }
  2922. }
  2923. }