AssessmentService.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.etotem.cfc.service;
  2. import com.etotem.cfc.service.api.AssessmentServiceInterface;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.etotem.cfc.entity.AssessmentMaterial;
  6. import com.etotem.cfc.entity.AssessmentPointsConfig;
  7. import com.etotem.cfc.entity.AssessmentRecord;
  8. import com.etotem.cfc.entity.DanAssessmentResult;
  9. import com.etotem.cfc.entity.FamilyAssessmentConfig;
  10. import com.etotem.cfc.mapper.AssessmentMaterialMapper;
  11. import com.etotem.cfc.mapper.AssessmentPointsConfigMapper;
  12. import com.etotem.cfc.mapper.AssessmentRecordMapper;
  13. import com.etotem.cfc.mapper.DanAssessmentResultMapper;
  14. import com.etotem.cfc.mapper.FamilyAssessmentConfigMapper;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.ArrayList;
  18. import java.util.Calendar;
  19. import java.util.Date;
  20. import java.util.List;
  21. @Service
  22. public class AssessmentService extends ServiceImpl<AssessmentMaterialMapper, AssessmentMaterial> {
  23. @Resource
  24. private AssessmentPointsConfigMapper pointsConfigMapper;
  25. @Resource
  26. private FamilyAssessmentConfigMapper familyConfigMapper;
  27. @Resource
  28. private AssessmentRecordMapper recordMapper;
  29. @Resource
  30. private DanAssessmentResultMapper danAssessmentResultMapper;
  31. public AssessmentMaterial getActiveMaterial() {
  32. LambdaQueryWrapper<AssessmentMaterial> wrapper = new LambdaQueryWrapper<>();
  33. wrapper.eq(AssessmentMaterial::getStatus, "active");
  34. return this.getOne(wrapper);
  35. }
  36. public List<AssessmentMaterial> getMaterialList() {
  37. LambdaQueryWrapper<AssessmentMaterial> wrapper = new LambdaQueryWrapper<>();
  38. wrapper.orderByDesc(AssessmentMaterial::getCreatedAt);
  39. return this.list(wrapper);
  40. }
  41. public AssessmentMaterial createMaterial(String title, String content, String coverImage) {
  42. AssessmentMaterial material = new AssessmentMaterial();
  43. material.setTitle(title);
  44. material.setContent(content);
  45. material.setCoverImage(coverImage);
  46. material.setStatus("active");
  47. material.setCreatedAt(new Date());
  48. material.setUpdatedAt(new Date());
  49. this.save(material);
  50. return material;
  51. }
  52. public AssessmentPointsConfig getPointsConfig() {
  53. LambdaQueryWrapper<AssessmentPointsConfig> wrapper = new LambdaQueryWrapper<>();
  54. wrapper.eq(AssessmentPointsConfig::getIsActive, 1);
  55. return pointsConfigMapper.selectOne(wrapper);
  56. }
  57. public boolean updatePointsConfig(Integer pointsValue, Double pointsValueYuan) {
  58. AssessmentPointsConfig config = getPointsConfig();
  59. if (config == null) {
  60. config = new AssessmentPointsConfig();
  61. config.setPointsValue(pointsValue);
  62. config.setPointsValueYuan((int)(pointsValueYuan * 100));
  63. config.setIsActive(1);
  64. config.setCreatedAt(new Date());
  65. config.setUpdatedAt(new Date());
  66. return pointsConfigMapper.insert(config) > 0;
  67. }
  68. config.setPointsValue(pointsValue);
  69. config.setPointsValueYuan((int)(pointsValueYuan * 100));
  70. config.setUpdatedAt(new Date());
  71. return pointsConfigMapper.updateById(config) > 0;
  72. }
  73. public FamilyAssessmentConfig getFamilyConfig(Long familyId) {
  74. LambdaQueryWrapper<FamilyAssessmentConfig> wrapper = new LambdaQueryWrapper<>();
  75. wrapper.eq(FamilyAssessmentConfig::getFamilyId, familyId);
  76. return familyConfigMapper.selectOne(wrapper);
  77. }
  78. public boolean enableFamilyAssessment(Long familyId, Long materialId, Integer remindMonths, Long createdBy) {
  79. FamilyAssessmentConfig config = getFamilyConfig(familyId);
  80. Date now = new Date();
  81. Calendar cal = Calendar.getInstance();
  82. cal.add(Calendar.MONTH, remindMonths);
  83. Date nextRemind = cal.getTime();
  84. if (config == null) {
  85. config = new FamilyAssessmentConfig();
  86. config.setFamilyId(familyId);
  87. config.setMaterialId(materialId);
  88. config.setRemindMonths(remindMonths);
  89. config.setLastRemindAt(now);
  90. config.setNextRemindAt(nextRemind);
  91. config.setIsEnabled(1);
  92. config.setCreatedBy(createdBy);
  93. config.setCreatedAt(now);
  94. config.setUpdatedAt(now);
  95. return familyConfigMapper.insert(config) > 0;
  96. }
  97. config.setMaterialId(materialId);
  98. config.setRemindMonths(remindMonths);
  99. config.setNextRemindAt(nextRemind);
  100. config.setIsEnabled(1);
  101. config.setUpdatedAt(now);
  102. return familyConfigMapper.updateById(config) > 0;
  103. }
  104. public boolean disableFamilyAssessment(Long familyId) {
  105. FamilyAssessmentConfig config = getFamilyConfig(familyId);
  106. if (config == null) {
  107. return false;
  108. }
  109. config.setIsEnabled(0);
  110. config.setUpdatedAt(new Date());
  111. return familyConfigMapper.updateById(config) > 0;
  112. }
  113. public List<FamilyAssessmentConfig> getEnabledConfigs() {
  114. LambdaQueryWrapper<FamilyAssessmentConfig> wrapper = new LambdaQueryWrapper<>();
  115. wrapper.eq(FamilyAssessmentConfig::getIsEnabled, 1);
  116. return familyConfigMapper.selectList(wrapper);
  117. }
  118. public List<FamilyAssessmentConfig> getFamiliesByTeacher(Long teacherId) {
  119. if (teacherId == null) {
  120. return familyConfigMapper.selectList(null);
  121. }
  122. LambdaQueryWrapper<FamilyAssessmentConfig> wrapper = new LambdaQueryWrapper<>();
  123. wrapper.eq(FamilyAssessmentConfig::getCreatedBy, teacherId);
  124. return familyConfigMapper.selectList(wrapper);
  125. }
  126. public AssessmentRecord createRecord(Long familyId, Long childId, Long materialId) {
  127. AssessmentRecord record = new AssessmentRecord();
  128. record.setFamilyId(familyId);
  129. record.setChildId(childId);
  130. record.setMaterialId(materialId);
  131. record.setStatus("pending");
  132. record.setCreatedAt(new Date());
  133. recordMapper.insert(record);
  134. return record;
  135. }
  136. public boolean completeRecord(Long recordId) {
  137. AssessmentRecord record = recordMapper.selectById(recordId);
  138. if (record == null) {
  139. return false;
  140. }
  141. record.setStatus("completed");
  142. record.setCompletedAt(new Date());
  143. return recordMapper.updateById(record) > 0;
  144. }
  145. public List<AssessmentRecord> getFamilyRecords(Long familyId) {
  146. LambdaQueryWrapper<AssessmentRecord> wrapper = new LambdaQueryWrapper<>();
  147. wrapper.eq(AssessmentRecord::getFamilyId, familyId);
  148. wrapper.orderByDesc(AssessmentRecord::getCreatedAt);
  149. return recordMapper.selectList(wrapper);
  150. }
  151. public AssessmentRecord getCurrentAssessment(Long familyId) {
  152. LambdaQueryWrapper<AssessmentRecord> wrapper = new LambdaQueryWrapper<>();
  153. wrapper.eq(AssessmentRecord::getFamilyId, familyId);
  154. wrapper.eq(AssessmentRecord::getStatus, "pending");
  155. wrapper.orderByDesc(AssessmentRecord::getCreatedAt);
  156. wrapper.last("LIMIT 1");
  157. return recordMapper.selectOne(wrapper);
  158. }
  159. public DanAssessmentResult recordResult(DanAssessmentResult result) {
  160. result.setStatus("completed");
  161. result.setCreatedAt(new Date());
  162. result.setUpdatedAt(new Date());
  163. if (result.getAssessmentDate() == null) {
  164. result.setAssessmentDate(new Date());
  165. }
  166. danAssessmentResultMapper.insert(result);
  167. return result;
  168. }
  169. public List<DanAssessmentResult> getResultsByGuide(Long guideId) {
  170. LambdaQueryWrapper<DanAssessmentResult> wrapper = new LambdaQueryWrapper<>();
  171. wrapper.eq(DanAssessmentResult::getTeacherId, guideId);
  172. wrapper.orderByDesc(DanAssessmentResult::getCreatedAt);
  173. return danAssessmentResultMapper.selectList(wrapper);
  174. }
  175. public DanAssessmentResult getByAppointmentId(Long appointmentId) {
  176. LambdaQueryWrapper<DanAssessmentResult> wrapper = new LambdaQueryWrapper<>();
  177. wrapper.eq(DanAssessmentResult::getAppointmentId, appointmentId);
  178. wrapper.last("LIMIT 1");
  179. return danAssessmentResultMapper.selectOne(wrapper);
  180. }
  181. public List<DanAssessmentResult> getAccessibleResults(Long userId, String role) {
  182. if ("teacher".equals(role)) {
  183. return getResultsByGuide(userId);
  184. }
  185. return new ArrayList<>();
  186. }
  187. }