diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/annotation/BigDecimalFormat.java b/admin-core/src/main/java/com/ibeetl/admin/core/annotation/BigDecimalFormat.java new file mode 100644 index 00000000..b689e289 --- /dev/null +++ b/admin-core/src/main/java/com/ibeetl/admin/core/annotation/BigDecimalFormat.java @@ -0,0 +1,20 @@ +package com.ibeetl.admin.core.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ibeetl.admin.core.conf.JasonConfig; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@JacksonAnnotationsInside +@JsonSerialize(using = JasonConfig.BigDecimalSerializer.class) +@JsonDeserialize(using = JasonConfig.BigDecimalDeSerializer.class) +public @interface BigDecimalFormat { + String value() default "#####0.00"; +} \ No newline at end of file diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/conf/JasonConfig.java b/admin-core/src/main/java/com/ibeetl/admin/core/conf/JasonConfig.java index 2c12f77c..d99a93ec 100644 --- a/admin-core/src/main/java/com/ibeetl/admin/core/conf/JasonConfig.java +++ b/admin-core/src/main/java/com/ibeetl/admin/core/conf/JasonConfig.java @@ -1,24 +1,29 @@ package com.ibeetl.admin.core.conf; import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.ibeetl.admin.core.annotation.BigDecimalFormat; import com.ibeetl.admin.core.web.JsonResult; import org.apache.commons.lang3.StringUtils; import org.beetl.sql.core.engine.PageQuery; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.jackson.JsonComponent; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.IOException; +import java.math.BigDecimal; import java.math.BigInteger; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Map; +import java.util.Objects; @Configuration public class JasonConfig { @@ -84,4 +89,43 @@ public class JasonConfig { } } + + @JsonComponent + public class BigDecimalSerializer extends JsonSerializer implements ContextualSerializer { + private String format = "#####0.00"; + + @Override + public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(new DecimalFormat(format).format(bigDecimal)); + } + + @Override + public JsonSerializer createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException { + if(beanProperty !=null ){ + if(Objects.equals(beanProperty.getType().getRawClass(),BigDecimal.class)){ + BigDecimalFormat bigDecimalFormat = beanProperty.getAnnotation((BigDecimalFormat.class)); + if(bigDecimalFormat == null){ + bigDecimalFormat = beanProperty.getContextAnnotation(BigDecimalFormat.class); + } + BigDecimalSerializer bigDecimalSerializer = new BigDecimalSerializer(); + if(bigDecimalFormat != null){ + bigDecimalSerializer.format = bigDecimalFormat.value(); + } + return bigDecimalSerializer; + } + return serializerProvider.findValueSerializer(beanProperty.getType(),beanProperty); + } + return serializerProvider.findNullValueSerializer(beanProperty); + } + } + + @JsonComponent + public class BigDecimalDeSerializer extends JsonDeserializer { + @Override + public BigDecimal deserialize(JsonParser jsonParser, + DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + + return new BigDecimal(jsonParser.getText().replaceAll(",","")); + } + } } diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseStudentSigninLogDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseStudentSigninLogDao.java index e6cec19b..dbb67170 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseStudentSigninLogDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseStudentSigninLogDao.java @@ -1,6 +1,7 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLog; +import com.ibeetl.jlw.entity.vo.TeacherOpenCourseStudentSigninLogSummaryVO; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.mapper.BaseMapper; @@ -26,4 +27,10 @@ public interface TeacherOpenCourseStudentSigninLogDao extends BaseMapper getValuesByQueryNotWithPermission(TeacherOpenCourseStudentSigninLogQuery teacherOpenCourseStudentSigninLogQuery); List> getExcelValues(TeacherOpenCourseStudentSigninLogQuery teacherOpenCourseStudentSigninLogQuery); + + /** + * 签到汇总 + * @param teacherOpenCourseId + */ + TeacherOpenCourseStudentSigninLogSummaryVO summary(Long teacherOpenCourseId); } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseStudentSigninLogSummaryVO.java b/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseStudentSigninLogSummaryVO.java new file mode 100644 index 00000000..c4e5f283 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/vo/TeacherOpenCourseStudentSigninLogSummaryVO.java @@ -0,0 +1,37 @@ +package com.ibeetl.jlw.entity.vo; + +import com.ibeetl.admin.core.annotation.BigDecimalFormat; +import lombok.Data; + +import java.math.BigDecimal; + +/** + *

+ * 学生签到-DTO + *

+ * + * @author mlx + * @date 2022/10/11 + * @modified + */ +@Data +public class TeacherOpenCourseStudentSigninLogSummaryVO { + + // 合计签到次数 + + private Long totalSigninCount; + + // 合计签到人数 + + private Long totalSigninNumber; + + // 合计缺勤 + + private Long totalUnSigninNumber; + + // 合计到课率 最大单位:100 + + @BigDecimalFormat + private BigDecimal TotalAttendanceRate; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java index f07f2262..ea5cace3 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java @@ -27,6 +27,7 @@ import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogManualMergeDTO import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO.ManualClass; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninSettingManualDTO; +import com.ibeetl.jlw.entity.vo.TeacherOpenCourseStudentSigninLogSummaryVO; import com.ibeetl.jlw.enums.StartStatusEnum; import com.ibeetl.jlw.validator.TeacherOpenCourseStudentSigninLogSigninDTOValidator; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; @@ -609,4 +610,13 @@ public class TeacherOpenCourseStudentSigninLogService extends CoreBaseService