EasArcTlsAttendanceServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package com.koobietech.eas.service.impl;
  2. import cn.afterturn.easypoi.excel.ExcelExportUtil;
  3. import cn.afterturn.easypoi.excel.entity.ExportParams;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import com.koobietech.eas.common.constant.FileType;
  6. import com.koobietech.eas.common.exception.EasException;
  7. import com.koobietech.eas.common.result.PageData;
  8. import com.koobietech.eas.common.utils.SecurityUtils;
  9. import com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo;
  10. import com.koobietech.eas.dao.Pojo.EasArcTlsScoresPojo;
  11. import com.koobietech.eas.dao.dto.ArchivesDto;
  12. import com.koobietech.eas.mbg.mapper.*;
  13. import com.koobietech.eas.mbg.model.*;
  14. import com.koobietech.eas.service.EasArcTlsAttendanceService;
  15. import com.koobietech.eas.service.EasArchivesFilesService;
  16. import org.apache.poi.ss.usermodel.Workbook;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.util.StringUtils;
  19. import javax.annotation.Resource;
  20. import java.time.LocalDate;
  21. import java.time.ZoneOffset;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. /**
  25. * @author lc
  26. */
  27. @Service
  28. public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceService {
  29. @Resource
  30. private EasArcTlsAttendanceMapper easArcTlsAttendanceMapper;
  31. @Resource
  32. private EasEduCltRelationMapper easEduCltRelationMapper;
  33. @Resource
  34. private EasSysStudentMapper easSysStudentMapper;
  35. @Resource
  36. private EasEduScheduleMapper easEduScheduleMapper;
  37. @Resource
  38. EasArchivesFilesService easArchivesFilesService;
  39. @Resource
  40. EasArcArchivesMapper arcArchivesMapper;
  41. @Override
  42. public PageData query(EasArcTlsAttendance attendance) {
  43. EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
  44. EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
  45. if (Objects.nonNull(attendance)) {
  46. if (Objects.nonNull(attendance.getId()) && attendance.getId() != 0) {
  47. criteria.andIdEqualTo(attendance.getId());
  48. }
  49. if (Objects.nonNull(attendance.getCheckinDate())) {
  50. criteria.andCheckinDateEqualTo(attendance.getCheckinDate());
  51. }
  52. if (Objects.nonNull(attendance.getScheduleId()) && attendance.getScheduleId() != 0) {
  53. criteria.andScheduleIdEqualTo(attendance.getScheduleId());
  54. }
  55. if (Objects.nonNull(attendance.getMonth()) && attendance.getMonth() != 0) {
  56. criteria.andMonthEqualTo(attendance.getMonth());
  57. }
  58. if (StringUtils.hasText(attendance.getMorning())) {
  59. criteria.andMorningEqualTo(attendance.getMorning());
  60. }
  61. if (StringUtils.hasText(attendance.getAfternoon())) {
  62. criteria.andAfternoonEqualTo(attendance.getAfternoon());
  63. }
  64. if (StringUtils.hasText(attendance.getStudentNumber())) {
  65. criteria.andStudentNumberLike("%" + attendance.getStudentNumber() + "%");
  66. }
  67. if (Objects.nonNull(attendance.getCreateUid()) && attendance.getCreateUid() != 0) {
  68. criteria.andCreateUidEqualTo(attendance.getCreateUid());
  69. }
  70. if (Objects.nonNull(attendance.getCreateTime())) {
  71. criteria.andCreateTimeEqualTo(attendance.getCreateTime());
  72. }
  73. if (Objects.nonNull(attendance.getModifyTime())) {
  74. criteria.andModifyTimeEqualTo(attendance.getModifyTime());
  75. }
  76. }
  77. List<EasArcTlsAttendance> easArcTlsAttendances =
  78. easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
  79. long l = easArcTlsAttendanceMapper.countByExample(easArcTlsAttendanceExample);
  80. PageData ret = new PageData();
  81. ret.setData(easArcTlsAttendances);
  82. ret.setTotal(l);
  83. return ret;
  84. }
  85. @Override
  86. public Boolean add(EasArcTlsAttendance attendance) {
  87. //签到日期前端会自己传 所以就不需要再写一次了
  88. attendance.setCreateTime(new Date());
  89. attendance.setModifyTime(new Date());
  90. int insert = easArcTlsAttendanceMapper.insert(attendance);
  91. saveStudentAttendanceArchive(attendance);
  92. return insert == 1;
  93. }
  94. @Override
  95. public Boolean delete(EasArcTlsAttendance attendance) {
  96. //虽然接收的是对象,但是后端是根据checkin_date和student_number来删除的
  97. EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
  98. EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
  99. if (Objects.nonNull(attendance)) {
  100. if (Objects.nonNull(attendance.getCheckinDate())
  101. && StringUtils.hasText(attendance.getStudentNumber())) {
  102. criteria.andCheckinDateEqualTo(attendance.getCheckinDate());
  103. criteria.andStudentNumberEqualTo(attendance.getStudentNumber());
  104. return easArcTlsAttendanceMapper.deleteByExample(easArcTlsAttendanceExample) == 1;
  105. }
  106. }
  107. return false;
  108. }
  109. @Override
  110. public Boolean update(EasArcTlsAttendance attendance) {
  111. attendance.setModifyTime(new Date());
  112. int i = easArcTlsAttendanceMapper.updateByPrimaryKey(attendance);
  113. saveStudentAttendanceArchive(attendance);
  114. return i == 1;
  115. }
  116. @Override
  117. public boolean isExist(EasArcTlsAttendance attendance) {
  118. EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
  119. EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
  120. if (Objects.nonNull(attendance)) {
  121. if (Objects.nonNull(attendance.getCheckinDate())
  122. && StringUtils.hasText(attendance.getStudentNumber())) {
  123. criteria.andCheckinDateEqualTo(attendance.getCheckinDate());
  124. criteria.andStudentNumberEqualTo(attendance.getStudentNumber());
  125. return easArcTlsAttendanceMapper.countByExample(easArcTlsAttendanceExample) == 1;
  126. }
  127. }
  128. return false;
  129. }
  130. @Override
  131. public List<EasArcTlsAttendance> getStudentList(Long scheduleId) {
  132. // 根据课表ID查找EasEduSchedule表,获取班级ID
  133. EasEduSchedule easEduSchedule = easEduScheduleMapper.selectByPrimaryKey(scheduleId);
  134. Long classId = Optional.ofNullable(easEduSchedule)
  135. .map(s -> Long.valueOf(s.getClassId()))
  136. .orElseThrow(() -> new EasException("未查询到对应课表,请检查数据库", 9595));
  137. // 根据班级ID查找EasEduCltRelation表,获取学生ID列表
  138. EasEduCltRelationExample easEduCltRelationExample = new EasEduCltRelationExample();
  139. easEduCltRelationExample.createCriteria().andClassIdEqualTo(classId);
  140. // 查询EasEduCltRelation表,获取符合条件的学生ID列表
  141. List<Long> studentIds = easEduCltRelationMapper.selectByExample(easEduCltRelationExample)
  142. .stream()
  143. .map(r -> Long.valueOf(r.getStudentId()))
  144. .collect(Collectors.toList());
  145. // 根据学生ID列表查询EasSysStudent表,获取学生信息
  146. EasSysStudentExample easSysStudentExample = new EasSysStudentExample();
  147. easSysStudentExample.createCriteria().andIdIn(studentIds);
  148. List<EasSysStudent> easSysStudents = easSysStudentMapper.selectByExample(easSysStudentExample);
  149. // 封装查询结果到PageData对象并返回
  150. return easSysStudents.stream()
  151. .map(s -> {
  152. EasArcTlsAttendance easArcTlsAttendance = new EasArcTlsAttendance();
  153. easArcTlsAttendance.setStudentNumber(s.getStudentNumber());
  154. easArcTlsAttendance.setStudentName(s.getStudentName());
  155. return easArcTlsAttendance;
  156. })
  157. .collect(Collectors.toList());
  158. }
  159. public boolean saveStudentAttendanceArchive(EasArcTlsAttendance attendance){
  160. EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
  161. EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
  162. criteria.andStudentNumberEqualTo(attendance.getStudentNumber());
  163. //criteria.andScheduleIdEqualTo(attendance.getScheduleId());
  164. List<EasArcTlsAttendance> easArcTlsAttendances = easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
  165. ArchivesDto archivesDto = saveEasArcTlsAttendanceToExcel(easArcTlsAttendances, attendance.getStudentNumber());
  166. EasArcArchives easArcArchives = new EasArcArchives();
  167. easArcArchives.setStudentNumber(attendance.getStudentNumber());
  168. easArcArchives.setArchiveNumber(archivesDto.getArchiveCode());
  169. easArcArchives.setFilePath(archivesDto.getPath());
  170. easArcArchives.setCreateTime(new Date());
  171. easArcArchives.setCreateUid( SecurityUtils.getLoginUid().intValue() );
  172. easArcArchives.setModifyTime(new Date());
  173. easArcArchives.setArctype(FileType.XLSX.name());
  174. easArcArchives.setManagerId( SecurityUtils.getLoginUid().intValue() );
  175. easArcArchives.setValidityTime( new Date(LocalDate.now().plusMonths(20)
  176. .atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()) );
  177. int insert = arcArchivesMapper.insert(easArcArchives);
  178. return insert == 1;
  179. }
  180. private ArchivesDto saveEasArcTlsAttendanceToExcel(List<EasArcTlsAttendance> easArcTlsAttendances, String studentNumber) {
  181. List<EasArcTlsAttendancePojo> arcTlsAttendanceList = new ArrayList<>();
  182. for (EasArcTlsAttendance tlsAttendance: easArcTlsAttendances) {
  183. EasArcTlsAttendancePojo easArcTlsAttendancePojo = new EasArcTlsAttendancePojo();
  184. BeanUtil.copyProperties(tlsAttendance, easArcTlsAttendancePojo);
  185. arcTlsAttendanceList.add(easArcTlsAttendancePojo);
  186. }
  187. ExportParams params = new ExportParams("学员签到表", "签到");
  188. Workbook workbook = ExcelExportUtil.exportExcel(params,
  189. EasArcTlsScoresPojo.class, arcTlsAttendanceList);
  190. ArchivesDto archivesDto = easArchivesFilesService.saveArchiveFile(studentNumber, workbook);
  191. return archivesDto;
  192. }
  193. }