|
|
@@ -5,25 +5,52 @@ import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.xjrsoft.common.annotation.XjrLog;
|
|
|
+import com.xjrsoft.common.enums.DeleteMark;
|
|
|
+import com.xjrsoft.common.enums.EnabledMark;
|
|
|
+import com.xjrsoft.common.enums.EnrollTypeEnum;
|
|
|
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
|
|
|
import com.xjrsoft.common.enums.RoleCodeEnum;
|
|
|
+import com.xjrsoft.common.enums.StudyStatusEnum;
|
|
|
import com.xjrsoft.common.model.result.RT;
|
|
|
import com.xjrsoft.common.page.ConventPage;
|
|
|
import com.xjrsoft.common.page.PageOutput;
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
import com.xjrsoft.module.banding.dto.BandingTaskClassPageDto;
|
|
|
+import com.xjrsoft.module.banding.entity.BandingTask;
|
|
|
import com.xjrsoft.module.banding.service.IBandingTaskClassService;
|
|
|
import com.xjrsoft.module.banding.service.IBandingTaskClassStudentService;
|
|
|
+import com.xjrsoft.module.banding.service.IBandingTaskService;
|
|
|
import com.xjrsoft.module.banding.vo.BandingTaskClassPageVo;
|
|
|
+import com.xjrsoft.module.banding.vo.BandingTaskClassReportStatisticsVo;
|
|
|
+import com.xjrsoft.module.base.entity.BaseGrade;
|
|
|
+import com.xjrsoft.module.base.service.IBaseGradeService;
|
|
|
+import com.xjrsoft.module.base.service.IBaseSemesterService;
|
|
|
+import com.xjrsoft.module.databoard.vo.ItemCountVo;
|
|
|
+import com.xjrsoft.module.organization.dto.GetUserByParamDto;
|
|
|
+import com.xjrsoft.module.organization.entity.User;
|
|
|
+import com.xjrsoft.module.organization.service.IUserService;
|
|
|
import com.xjrsoft.module.student.dto.ChangeBandingStatusDto;
|
|
|
import com.xjrsoft.module.student.dto.StudentReportRecordPageDto;
|
|
|
+import com.xjrsoft.module.student.dto.StudentReportRecordStatisticsDto;
|
|
|
import com.xjrsoft.module.student.dto.StudentReportSignDto;
|
|
|
+import com.xjrsoft.module.student.dto.StudentTryReadingReportPageDto;
|
|
|
+import com.xjrsoft.module.student.entity.BaseNewStudent;
|
|
|
+import com.xjrsoft.module.student.entity.EnrollmentPlan;
|
|
|
import com.xjrsoft.module.student.entity.StudentReportPlan;
|
|
|
import com.xjrsoft.module.student.entity.StudentReportRecord;
|
|
|
+import com.xjrsoft.module.student.service.IBaseNewStudentService;
|
|
|
+import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
|
|
|
+import com.xjrsoft.module.student.service.IEnrollmentPlanService;
|
|
|
import com.xjrsoft.module.student.service.IStudentReportPlanService;
|
|
|
import com.xjrsoft.module.student.service.IStudentReportRecordService;
|
|
|
import com.xjrsoft.module.student.vo.StudentReportRecordExcelVo;
|
|
|
+import com.xjrsoft.module.student.vo.StudentReportRecordItemVo;
|
|
|
import com.xjrsoft.module.student.vo.StudentReportRecordPlanPageVo;
|
|
|
+import com.xjrsoft.module.student.vo.StudentReportRecordStatisticsVo;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
@@ -32,13 +59,18 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @title: 新生维护信息
|
|
|
@@ -56,17 +88,39 @@ public class StudentTryReadingReportController {
|
|
|
private final IBandingTaskClassStudentService classStudentService;
|
|
|
private final IStudentReportPlanService reportPlanService;
|
|
|
private final IBandingTaskClassService bandingTaskClassService;
|
|
|
+ private final IBaseSemesterService semesterService;
|
|
|
+ private final IBaseGradeService gradeService;
|
|
|
+ private final IEnrollmentPlanService enrollmentPlanService;
|
|
|
+ private final IBandingTaskService bandingTaskService;
|
|
|
+ private final IUserService userService;
|
|
|
+ private final IBaseStudentSchoolRollService rollService;
|
|
|
+ private final IBaseNewStudentService newStudentService;
|
|
|
|
|
|
|
|
|
@GetMapping(value = "/page")
|
|
|
@ApiOperation(value="试读报到(分页)")
|
|
|
@SaCheckPermission("tryreadingreport:detail")
|
|
|
@XjrLog(value="试读报到(分页)")
|
|
|
- public RT<PageOutput<StudentReportRecordPlanPageVo>> page(@Valid StudentReportRecordPageDto dto){
|
|
|
+ public RT<PageOutput<StudentReportRecordPlanPageVo>> page(@Valid StudentTryReadingReportPageDto dto){
|
|
|
List<String> roleList = StpUtil.getRoleList();
|
|
|
if(roleList.contains("CLASSTE") && roleList.contains("TEACHER")){
|
|
|
dto.setTeacherId(StpUtil.getLoginIdAsLong());
|
|
|
}
|
|
|
+ if(dto.getIsMoible() != null && dto.getIsMoible() == 1){
|
|
|
+ StudentReportPlan plan = reportPlanService.getLastTryReadingPlan();
|
|
|
+ BandingTask bandingTask = bandingTaskService.getById(plan.getBandingTaskId());
|
|
|
+ List<EnrollmentPlan> enrollmentPlans = enrollmentPlanService.list(
|
|
|
+ new QueryWrapper<EnrollmentPlan>().lambda()
|
|
|
+ .eq(EnrollmentPlan::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(EnrollmentPlan::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .eq(EnrollmentPlan::getEnrollType, bandingTask.getEnrollType())
|
|
|
+ .eq(EnrollmentPlan::getGradeId, bandingTask.getGradeId())
|
|
|
+ .orderByDesc(EnrollmentPlan::getId)
|
|
|
+ );
|
|
|
+ if(!enrollmentPlans.isEmpty()){
|
|
|
+ dto.setEnrollmentPlanId(enrollmentPlans.get(0).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
Page<StudentReportRecordPlanPageVo> page = recordService.getTryReadingPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
|
|
|
PageOutput<StudentReportRecordPlanPageVo> pageOutput = ConventPage.getPageOutput(page, StudentReportRecordPlanPageVo.class);
|
|
|
return RT.ok(pageOutput);
|
|
|
@@ -82,6 +136,17 @@ public class StudentTryReadingReportController {
|
|
|
List<Long> list = new ArrayList<>();
|
|
|
list.add(record.getUserId());
|
|
|
classStudentService.removeStudent(list, reportPlan.getBandingTaskId());
|
|
|
+ BaseNewStudent newStudent = newStudentService.getById(record.getUserId());
|
|
|
+ if(newStudent != null){
|
|
|
+ User user = userService.getUserByParam(new GetUserByParamDto() {{
|
|
|
+ setCredentialNumber(newStudent.getCredentialNumber());
|
|
|
+ }});
|
|
|
+ if(user != null){
|
|
|
+ rollService.disableStudent(user.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
return RT.ok(true);
|
|
|
}
|
|
|
|
|
|
@@ -128,7 +193,7 @@ public class StudentTryReadingReportController {
|
|
|
@ApiOperation(value="导出")
|
|
|
@SaCheckPermission("studentreportrecord:detail")
|
|
|
@XjrLog(value = "导出")
|
|
|
- public ResponseEntity<byte[]> exportQuerty(@Valid @RequestBody StudentReportRecordPageDto dto){
|
|
|
+ public ResponseEntity<byte[]> exportQuerty(@Valid @RequestBody StudentTryReadingReportPageDto dto){
|
|
|
List<StudentReportRecordExcelVo> dataList = new ArrayList<>();
|
|
|
|
|
|
List<String> roleList = StpUtil.getRoleList();
|
|
|
@@ -162,22 +227,199 @@ public class StudentTryReadingReportController {
|
|
|
@GetMapping(value = "/class-list")
|
|
|
@ApiOperation(value="查询班级信息")
|
|
|
@SaCheckPermission("studentreportrecord:detail")
|
|
|
- @XjrLog(value = "导出")
|
|
|
- public RT<List<BandingTaskClassPageVo>> classList(@Valid Long teacherId){
|
|
|
- BandingTaskClassPageDto dto = new BandingTaskClassPageDto();
|
|
|
- if(teacherId != null){
|
|
|
- dto.setTeacherId(teacherId);
|
|
|
+ @XjrLog(value = "查询班级信息")
|
|
|
+ public RT<List<BandingTaskClassPageVo>> classList(@Valid StudentReportRecordPageDto dto){
|
|
|
+ BandingTaskClassPageDto classDto = new BandingTaskClassPageDto();
|
|
|
+ if(dto.getEnrollmentPlanId() == null){
|
|
|
+ if(dto.getTeacherId() != null){
|
|
|
+ classDto.setTeacherId(dto.getTeacherId());
|
|
|
+ }else{
|
|
|
+ classDto.setTeacherId(StpUtil.getLoginIdAsLong());
|
|
|
+ }
|
|
|
+ StudentReportPlan plan = reportPlanService.getLastTryReadingPlan();
|
|
|
+ if(plan == null){
|
|
|
+ return RT.ok(new ArrayList<>());
|
|
|
+ }
|
|
|
+ classDto.setBandingTaskId(plan.getBandingTaskId());
|
|
|
}else{
|
|
|
- dto.setTeacherId(StpUtil.getLoginIdAsLong());
|
|
|
- }
|
|
|
- StudentReportPlan plan = reportPlanService.getLastTryReadingPlan();
|
|
|
- if(plan == null){
|
|
|
- return RT.ok(new ArrayList<>());
|
|
|
+ EnrollmentPlan enrollmentPlan = enrollmentPlanService.getById(dto.getEnrollmentPlanId());
|
|
|
+ if(enrollmentPlan != null){
|
|
|
+ List<BandingTask> list = bandingTaskService.list(
|
|
|
+ new QueryWrapper<BandingTask>().lambda()
|
|
|
+ .eq(BandingTask::getEnrollType, enrollmentPlan.getEnrollType())
|
|
|
+ .eq(BandingTask::getGradeId, enrollmentPlan.getGradeId())
|
|
|
+ .eq(BandingTask::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(BandingTask::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .orderByDesc(BandingTask::getId)
|
|
|
+ );
|
|
|
+ if(!list.isEmpty()){
|
|
|
+ classDto.setBandingTaskId(list.get(0).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- dto.setBandingTaskId(plan.getBandingTaskId());
|
|
|
- List<BandingTaskClassPageVo> list = bandingTaskClassService.getList(dto);
|
|
|
+
|
|
|
+ List<BandingTaskClassPageVo> list = bandingTaskClassService.getList(classDto);
|
|
|
return RT.ok(list);
|
|
|
}
|
|
|
|
|
|
+ @GetMapping(value = "/class-statistics")
|
|
|
+ @ApiOperation(value="班级数据统计")
|
|
|
+ @SaCheckPermission("studentreportrecord:detail")
|
|
|
+ @XjrLog(value = "班级数据统计")
|
|
|
+ public RT<BandingTaskClassReportStatisticsVo> classStatistics(@RequestParam Long classId){
|
|
|
+ return RT.ok(bandingTaskClassService.getTryReadingReportClassStatistics(classId));
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping(value = "/statistics")
|
|
|
+ @ApiOperation(value="领导统计")
|
|
|
+ @SaCheckPermission("studentreportrecord:detail")
|
|
|
+ public RT<StudentReportRecordStatisticsVo> statistics(@Valid StudentReportRecordStatisticsDto dto){
|
|
|
+ if(dto.getGradeId() == null && (dto.getCategory() == null || dto.getCategory() == 1)){
|
|
|
+ LambdaQueryWrapper<BaseGrade> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper
|
|
|
+ .orderByDesc(BaseGrade::getTitle)
|
|
|
+ .select(BaseGrade.class,x -> VoToColumnUtil.fieldsToColumns(BaseGrade.class).contains(x.getProperty()));
|
|
|
+ List<BaseGrade> gradeList = gradeService.list(queryWrapper);
|
|
|
+ if(!gradeList.isEmpty()){
|
|
|
+ dto.setGradeId(gradeList.get(0).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(dto.getEnrollType() == null || dto.getEnrollType().isEmpty()){
|
|
|
+ dto.setEnrollType(EnrollTypeEnum.AUTUMN_ENROLLMENT.getCode());
|
|
|
+ }
|
|
|
+ if(dto.getCategory() != null && dto.getCategory() == 2 && dto.getBaseSemesterId() == null){
|
|
|
+ dto.setBaseSemesterId(semesterService.getLastSemester());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<EnrollmentPlan> enrollmentPlanList = enrollmentPlanService.list(
|
|
|
+ new QueryWrapper<EnrollmentPlan>().lambda()
|
|
|
+ .eq(EnrollmentPlan::getEnrollType, dto.getEnrollType())
|
|
|
+ .eq(EnrollmentPlan::getGradeId, dto.getGradeId())
|
|
|
+ .eq(EnrollmentPlan::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .eq(EnrollmentPlan::getEnabledMark, EnabledMark.ENABLED.getCode())
|
|
|
+ .orderByDesc(EnrollmentPlan::getId)
|
|
|
+ );
|
|
|
+ if(enrollmentPlanList.isEmpty()){
|
|
|
+ return RT.ok(new StudentReportRecordStatisticsVo());
|
|
|
+ }
|
|
|
+
|
|
|
+ StudentTryReadingReportPageDto recordPageDto = new StudentTryReadingReportPageDto();
|
|
|
+ recordPageDto.setEnrollmentPlanId(enrollmentPlanList.get(0).getId());
|
|
|
+
|
|
|
+ List<StudentReportRecordPlanPageVo> dataList = recordService.getTryReadingList(recordPageDto);
|
|
|
+ StudentReportRecordStatisticsVo statisticsVo = new StudentReportRecordStatisticsVo();
|
|
|
+ statisticsVo.setAllCount(dataList.stream().count());
|
|
|
+
|
|
|
+ statisticsVo.setArrivedCount(dataList.stream().filter(x -> x.getReportTime() != null).count());
|
|
|
+ statisticsVo.setNotArrivedCount(dataList.stream().filter(x -> x.getReportTime() == null).count());
|
|
|
+ statisticsVo.setArrivedMaleCount(dataList.stream().filter(x -> x.getReportTime() != null && GenderDictionaryEnum.MALE.getCode().equals(x.getGender())).count());
|
|
|
+ statisticsVo.setArrivedFemaleCount(dataList.stream().filter(x -> x.getReportTime() != null && GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender())).count());
|
|
|
+
|
|
|
+ statisticsVo.setStayMaleCount(dataList.stream().filter(
|
|
|
+ x -> GenderDictionaryEnum.MALE.getCode().equals(x.getGender())
|
|
|
+ && StudyStatusEnum.InResidence.getCode().equals(x.getStduyStatusCn())
|
|
|
+ && x.getReportTime() != null
|
|
|
+ ).count());
|
|
|
+ statisticsVo.setStayFemaleCount(dataList.stream().filter(
|
|
|
+ x -> GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender())
|
|
|
+ && StudyStatusEnum.InResidence.getCode().equals(x.getStduyStatusCn())
|
|
|
+ && x.getReportTime() != null
|
|
|
+ ).count());
|
|
|
+ statisticsVo.setNotStayMaleCount(dataList.stream().filter(
|
|
|
+ x -> GenderDictionaryEnum.MALE.getCode().equals(x.getGender())
|
|
|
+ && StudyStatusEnum.AttendDaySchool.getCode().equals(x.getStduyStatusCn())
|
|
|
+ && x.getReportTime() != null
|
|
|
+ ).count());
|
|
|
+ statisticsVo.setNotStayFemaleCount(dataList.stream().filter(
|
|
|
+ x -> GenderDictionaryEnum.FEMALE.getCode().equals(x.getGender())
|
|
|
+ && StudyStatusEnum.AttendDaySchool.getCode().equals(x.getStduyStatusCn())
|
|
|
+ && x.getReportTime() != null
|
|
|
+ ).count());
|
|
|
+
|
|
|
+ if(dto.getCategory() != null && dto.getCategory() == 1){
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> graduatedUniversityMap = dataList.stream().filter(x -> x.getReportTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getGraduateSchool));
|
|
|
+ List<ItemCountVo> graduatedUniversityList = new ArrayList<>();
|
|
|
+ for (String graduatedUniversity : graduatedUniversityMap.keySet()) {
|
|
|
+ graduatedUniversityList.add(
|
|
|
+ new ItemCountVo(){{
|
|
|
+ setItem(graduatedUniversity);
|
|
|
+ setCount(graduatedUniversityMap.get(graduatedUniversity).size());
|
|
|
+ }}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ statisticsVo.setGraduatedUniversityList(graduatedUniversityList);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> classMap = dataList.stream().filter(x -> x.getReportTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getClassName));
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> classNotMap = dataList.stream().filter(x -> x.getReportTime() == null)
|
|
|
+ .collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getClassName));
|
|
|
+ List<StudentReportRecordItemVo> classList = new ArrayList<>();
|
|
|
+ for (String className : classMap.keySet()) {
|
|
|
+ classList.add(
|
|
|
+ new StudentReportRecordItemVo(){{
|
|
|
+ setItem(className);
|
|
|
+ setCount(classMap.get(className).size());
|
|
|
+ if(classNotMap.get(className) != null && !(classNotMap.get(className).isEmpty())){
|
|
|
+ setCount2(classNotMap.get(className).size());
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ statisticsVo.setClassList(classList);
|
|
|
+
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> classTypeMap = dataList.stream().filter(x -> x.getReportTime() != null).collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getClassType));
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> classTypeNotMap = dataList.stream().filter(x -> x.getReportTime() == null).collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getClassType));
|
|
|
+ List<StudentReportRecordItemVo> classTypeList = new ArrayList<>();
|
|
|
+ for (String classType : classTypeMap.keySet()) {
|
|
|
+ classTypeList.add(
|
|
|
+ new StudentReportRecordItemVo(){{
|
|
|
+ setItem(classType);
|
|
|
+ setCount(classTypeMap.get(classType).size());
|
|
|
+ if(classTypeNotMap.get(classType) != null && !(classTypeNotMap.get(classType).isEmpty())){
|
|
|
+ setCount2(classTypeNotMap.get(classType).size());
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ statisticsVo.setClassTypeList(classTypeList);
|
|
|
+
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> majorMap = dataList.stream().filter(x -> x.getReportTime() != null && x.getMajorName() != null).collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getMajorName));
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> majorNotMap = dataList.stream().filter(x -> x.getReportTime() == null && x.getMajorName() != null).collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getMajorName));
|
|
|
+ List<StudentReportRecordItemVo> majorList = new ArrayList<>();
|
|
|
+ for (String majorName : majorMap.keySet()) {
|
|
|
+ majorList.add(
|
|
|
+ new StudentReportRecordItemVo(){{
|
|
|
+ setItem(majorName);
|
|
|
+ setCount(majorMap.get(majorName).size());
|
|
|
+ if(majorNotMap.get(majorName) != null && !(majorNotMap.get(majorName).isEmpty())){
|
|
|
+ setCount2(majorNotMap.get(majorName).size());
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ statisticsVo.setMajorList(majorList);
|
|
|
+
|
|
|
+ Map<String, List<StudentReportRecordPlanPageVo>> deptMap = dataList.stream().filter(x -> x.getReportTime() != null && x.getDeptName() != null).collect(Collectors.groupingBy(StudentReportRecordPlanPageVo::getDeptName));
|
|
|
+ List<ItemCountVo> deptList = new ArrayList<>();
|
|
|
+ for (String deptName : deptMap.keySet()) {
|
|
|
+ deptList.add(
|
|
|
+ new ItemCountVo(){{
|
|
|
+ setItem(deptName);
|
|
|
+ setCount(deptMap.get(deptName).size());
|
|
|
+ }}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ statisticsVo.setDeptList(deptList);
|
|
|
+
|
|
|
+ BigDecimal divide = BigDecimal.ZERO;
|
|
|
+ if( statisticsVo.getAllCount() != 0){
|
|
|
+ divide = BigDecimal.valueOf(statisticsVo.getArrivedCount()).divide(BigDecimal.valueOf(statisticsVo.getAllCount()), 4, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ statisticsVo.setReportRate(divide.doubleValue());
|
|
|
+ return RT.ok(statisticsVo);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|