Browse Source

班级量化考核调整

dzx 4 months ago
parent
commit
9ac810e98f

+ 8 - 5
src/main/java/com/xjrsoft/module/evaluate/dto/MobileResultPageDto.java

@@ -3,8 +3,9 @@ package com.xjrsoft.module.evaluate.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
-import java.time.LocalDateTime;
+import java.time.LocalDate;
 
 
 /**
@@ -28,9 +29,11 @@ public class MobileResultPageDto extends MobileIndexPageDto {
     @ApiModelProperty(value = "专业id")
     private Long majorId;
 
-    @ApiModelProperty(value = "开始时间", hidden = true)
-    private LocalDateTime startTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("开始时间")
+    private String startTime;
 
-    @ApiModelProperty(value = "结束时间", hidden = true)
-    private LocalDateTime endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("结束时间")
+    private String endTime;
 }

+ 33 - 0
src/main/java/com/xjrsoft/module/evaluate/dto/TeaEvaluateClassDto.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.evaluate.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 被评价对象
+* @Author dzx
+* @Date: 2024-01-16
+* @Version 1.0
+*/
+@Data
+public class TeaEvaluateClassDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 评价管理编号
+    */
+    @ApiModelProperty("年份")
+    private Integer year;
+
+    @ApiModelProperty("月份")
+    private Integer month;
+
+    @ApiModelProperty("月份")
+    private String evaluateType;
+
+}

+ 4 - 0
src/main/java/com/xjrsoft/module/evaluate/mapper/EvaluateResultMapper.java

@@ -5,12 +5,14 @@ import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDetailDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultIndexPageDto;
+import com.xjrsoft.module.evaluate.dto.TeaEvaluateClassDto;
 import com.xjrsoft.module.evaluate.entity.EvaluateResult;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailList;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultIndexPageVo;
 import com.xjrsoft.module.evaluate.vo.ResultViewingPageVo;
+import com.xjrsoft.module.evaluate.vo.TeaEvaluateClassListVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -37,4 +39,6 @@ public interface EvaluateResultMapper extends MPJBaseMapper<EvaluateResult> {
     List<ResultViewingPageVo> listTopicScoreByObjectIdAndTopic(@Param("evaluateObjectIdList") List<Long> evaluateObjectIdList, @Param("evaluateManageItemIdList") List<Long> evaluateManageItemIdList);
 
     List<ResultViewingPageVo> listSynthesisScore(@Param("evaluateObjectIdList") List<Long> evaluateObjectIdList, @Param("evaluateManageItemIdList") List<Long> evaluateManageItemIdList);
+
+    List<TeaEvaluateClassListVo> getTeaEvaluateClassList(@Param("dto") TeaEvaluateClassDto dto);
 }

+ 29 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/TeaEvaluateClassListVo.java

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.evaluate.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 被评价对象表单出参
+* @Author dzx
+* @Date: 2024-01-16
+* @Version 1.0
+*/
+@Data
+public class TeaEvaluateClassListVo {
+
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("问题")
+    private String problem;
+
+    @ApiModelProperty("被评价对象数")
+    private Long userId;
+
+    @ApiModelProperty("参与评价的人数")
+    private Integer score;
+
+    @ApiModelProperty("班级id")
+    private Long evaluatedObjectId;
+}

+ 6 - 0
src/main/java/com/xjrsoft/module/student/dto/CalssQuantitativeAssessmentPageDto.java

@@ -63,4 +63,10 @@ public class CalssQuantitativeAssessmentPageDto extends PageInput {
      */
     @ApiModelProperty(value = "学期ID(base_semester)")
     private Long baseStudentAssessmentCategoryId;
+
+    @ApiModelProperty("年份")
+    private Integer year;
+
+    @ApiModelProperty("月份")
+    private Integer month;
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/student/service/IQuotaFormulaRuleService.java

@@ -15,4 +15,12 @@ import com.xjrsoft.module.student.vo.QuotaFormulaRulePageVo;
 
 public interface IQuotaFormulaRuleService extends MPJBaseService<QuotaFormulaRule> {
     Page<QuotaFormulaRulePageVo> getPage(Page<QuotaFormulaRulePageDto> page, QuotaFormulaRulePageDto dto);
+
+
+    /**
+     * 根据绑定的指标查询公式
+     * @param bindQuota
+     * @return
+     */
+    String getFormulaByQuota(String bindQuota);
 }

+ 51 - 1
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java

@@ -17,12 +17,16 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.AssessmentTypeEnum;
+import com.xjrsoft.common.enums.EvaluateTypeEnum;
 import com.xjrsoft.common.enums.ScoreTypeEnum;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
+import com.xjrsoft.module.evaluate.dto.TeaEvaluateClassDto;
+import com.xjrsoft.module.evaluate.mapper.EvaluateResultMapper;
+import com.xjrsoft.module.evaluate.vo.TeaEvaluateClassListVo;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.service.IUserService;
@@ -46,6 +50,7 @@ import com.xjrsoft.module.student.mapper.BaseStudentAssessmentProjectMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
 import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService;
+import com.xjrsoft.module.student.service.IQuotaFormulaRuleService;
 import com.xjrsoft.module.student.vo.BaseStudentAssessmentClassListVo;
 import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobilePageVo;
 import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobileVo;
@@ -58,12 +63,19 @@ import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
+import me.zhyd.oauth.log.Log;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.BeanUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
 import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
@@ -73,7 +85,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import static javax.swing.UIManager.put;
 
 /**
  * @title: 学生班级巡查考核
@@ -105,6 +116,10 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
     private final IWeChatService weChatService;
 
+    private final EvaluateResultMapper evaluateResultMapper;
+
+    private final IQuotaFormulaRuleService quotaFormulaRuleService;
+
     @Override
     public Page<BaseStudentAssessmentInspectionPageVo> getPage(Page<BaseStudentAssessmentInspectionPageDto> page, BaseStudentAssessmentInspectionPageDto dto) {
         Page<BaseStudentAssessmentInspectionPageVo> result = assessmentInspectionMapper.getPage(page, dto);
@@ -421,6 +436,15 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                 awardsAndHonorableMap.put(q.getClassId(), q);
             }
 
+            //查询任课教师查询班级的数据
+            TeaEvaluateClassDto evaluateClassDto = new TeaEvaluateClassDto();
+            evaluateClassDto.setEvaluateType(EvaluateTypeEnum.TEACHER_EVALUATE_CLASS.getCode());
+            evaluateClassDto.setYear(dto.getYear());
+            evaluateClassDto.setMonth(dto.getMonth());
+            List<TeaEvaluateClassListVo> teaEvaluateClassList = evaluateResultMapper.getTeaEvaluateClassList(evaluateClassDto);
+            Map<Long, List<TeaEvaluateClassListVo>> classEvaluateMap = teaEvaluateClassList.stream().collect(Collectors.groupingBy(TeaEvaluateClassListVo::getEvaluatedObjectId));
+            String jskhFormula = quotaFormulaRuleService.getFormulaByQuota("teacher_assessment");
+
             //将结果写进对应的班级里
             for(CalssQuantitativeAssessmentPageVo c: resultPage.getRecords()){
                 Long classId = Long.parseLong(c.getClassId());
@@ -458,6 +482,32 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                         c.setHonorScore(10D);
                     }
                 }
+
+                if(classEvaluateMap.containsKey(classId)){
+                    Map<Long, List<TeaEvaluateClassListVo>> evaluateCategoryMap = classEvaluateMap.get(classId).stream().collect(Collectors.groupingBy(TeaEvaluateClassListVo::getId));
+                    int evaluateItemSize = evaluateCategoryMap.size();
+
+                    List<Double> evaluateSocreList = new ArrayList<>();//存每个项的平均分
+                    for (Long id : evaluateCategoryMap.keySet()) {
+                        List<TeaEvaluateClassListVo> resultList = evaluateCategoryMap.get(id);
+                        int allSorce = resultList.stream().mapToInt(TeaEvaluateClassListVo::getScore).sum();
+                        double avgScore = BigDecimal.valueOf(allSorce).divide(BigDecimal.valueOf(resultList.size())).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                        evaluateSocreList.add(avgScore);
+                    }
+
+                    double jskhValue = evaluateSocreList.stream().mapToDouble(Double::doubleValue).sum();
+                    c.setTeacherAssessComprehensiveIndex(jskhValue);
+                    String replacedExpression = jskhFormula.replace("JSKH", Double.toString(jskhValue));
+
+                    ScriptEngineManager manager = new ScriptEngineManager();
+                    ScriptEngine engine = manager.getEngineByName("JavaScript");
+                    try {
+                        double result = ((Number) engine.eval(replacedExpression)).doubleValue();
+                        c.setTeacherAssessScore(result);
+                    } catch (ScriptException e) {
+                        Log.error(e.getMessage(), e);
+                    }
+                }
             }
         }
 

+ 18 - 0
src/main/java/com/xjrsoft/module/student/service/impl/QuotaFormulaRuleServiceImpl.java

@@ -1,7 +1,9 @@
 package com.xjrsoft.module.student.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.module.student.dto.QuotaFormulaRulePageDto;
 import com.xjrsoft.module.student.entity.QuotaFormulaRule;
 import com.xjrsoft.module.student.mapper.QuotaFormulaRuleMapper;
@@ -10,6 +12,8 @@ import com.xjrsoft.module.student.vo.QuotaFormulaRulePageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
 * @title: 指标公式规则管理
 * @Author szs
@@ -24,4 +28,18 @@ public class QuotaFormulaRuleServiceImpl extends MPJBaseServiceImpl<QuotaFormula
     public Page<QuotaFormulaRulePageVo> getPage(Page<QuotaFormulaRulePageDto> page, QuotaFormulaRulePageDto dto) {
         return quotaFormulaRuleMapper.getPage(page, dto);
     }
+
+    @Override
+    public String getFormulaByQuota(String bindQuota) {
+        List<QuotaFormulaRule> list = list(
+                new QueryWrapper<QuotaFormulaRule>().lambda()
+                        .eq(QuotaFormulaRule::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(QuotaFormulaRule::getBindQuota, bindQuota)
+                        .orderByDesc(QuotaFormulaRule::getCreateDate)
+        );
+        if(!list.isEmpty()){
+            return list.get(0).getFormula();
+        }
+        return null;
+    }
 }

+ 7 - 5
src/main/resources/mapper/evaluate/EvaluateManageMapper.xml

@@ -99,11 +99,13 @@
             <if test="dto.status != null">
                 and t.status = #{dto.status}
             </if>
-            <if test="dto.startTime != null and dto.startTime != ''">
-                and t1.start_time >= #{dto.startTime}
-            </if>
-            <if test="dto.endTime != null and dto.startTime != ''">
-                and #{dto.endTime} >= t1.end_time
+            <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.startTime != ''">
+                AND (
+                (t1.start_time BETWEEN #{dto.startTime} and #{dto.endTime})
+                OR (t1.end_time BETWEEN #{dto.startTime} and #{dto.endTime})
+                OR (t1.start_time > #{dto.startTime} and #{dto.endTime} > t1.end_time)
+                OR (#{dto.startTime} > t1.start_time and t1.end_time > #{dto.endTime})
+                )
             </if>
         order by t.status;
     </select>

+ 12 - 0
src/main/resources/mapper/evaluate/EvaluateResultMapper.xml

@@ -188,4 +188,16 @@
         </foreach>
         group by t1.object_id;
     </select>
+
+    <select id="getTeaEvaluateClassList" parameterType="com.xjrsoft.module.evaluate.dto.TeaEvaluateClassDto" resultType="com.xjrsoft.module.evaluate.vo.TeaEvaluateClassListVo">
+        SELECT t2.evaluate_item_id, t2.problem,t1.score,t1.userId,t1.evaluated_object_id FROM evaluate_result t1
+        INNER JOIN evaluate_manage_item t2 ON t1.evaluate_item_id = t2.id
+        INNER JOIN evaluate_manage t3 ON t3.id = t2.evaluate_manage_id
+        INNER JOIN evaluate_template t4 ON t3.evaluate_template_id = t4.id
+        WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND t3.delete_mark
+        AND t4.delete_mark = 0
+        AND t3.year = #{dto.year}
+        AND t3.month = #{dto.month}
+        AND t4.evaluate_type = #{dto.evaluateType}
+    </select>
 </mapper>