zouxuan 2 vuotta sitten
vanhempi
commit
9ba2d41006

+ 16 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/TenantFeignService.java

@@ -0,0 +1,16 @@
+package com.yonge.cooleshow.api.feign;
+
+import com.yonge.cooleshow.api.feign.fallback.AdminFeignServiceFallback;
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.feign.config.FeignConfiguration;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(name = AppConstant.APPLICATION_TENANT + AppConstant.SERVER, configuration = FeignConfiguration.class,
+        fallback = AdminFeignServiceFallback.class)
+public interface TenantFeignService {
+
+    //机构人员汇总
+    @GetMapping(value = "/task/tenantPersonStat")
+    void tenantPersonStat();
+}

+ 16 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/TenantFeignServiceFallback.java

@@ -0,0 +1,16 @@
+package com.yonge.cooleshow.api.feign.fallback;
+
+import com.yonge.cooleshow.api.feign.TenantFeignService;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-06
+ */
+public class TenantFeignServiceFallback implements TenantFeignService {
+
+    @Override
+    public void tenantPersonStat() {
+    }
+}

+ 4 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java

@@ -23,6 +23,10 @@ public interface AppConstant {
      */
     String APPLICATION_ADMIN = "admin";
     /**
+     * 管理端
+     */
+    String APPLICATION_TENANT = "tenant";
+    /**
      * 老师端
      */
     String APPLICATION_TEACHER = "teacher";

+ 19 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/TenantPersonStatTask.java

@@ -0,0 +1,19 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.TenantFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TenantPersonStatTask extends BaseTask {
+
+    @Autowired
+    private TenantFeignService tenantFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        tenantFeignService.tenantPersonStat();
+    }
+}

+ 2 - 19
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -1,17 +1,6 @@
 package com.yonge.cooleshow.admin.task;
 
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
-import com.yonge.cooleshow.biz.dal.service.CustomerServiceBatchSendingService;
-import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.PlatformCashAccountRecordService;
-import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
-import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
-import com.yonge.cooleshow.biz.dal.service.UserBindingTeacherService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
-import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -20,11 +9,7 @@ import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.io.File;
@@ -67,8 +52,6 @@ public class TaskController extends BaseController {
     private TeacherStyleVideoService teacherStyleVideoService;
 
     @Autowired
-    private VideoLessonGroupService videoLessonGroupService;
-    @Autowired
     private CustomerServiceBatchSendingService customerServiceBatchSendingService;
 
     /***

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java

@@ -40,10 +40,10 @@ public class SysMusicCompareRecordQueryInfo {
 
     @Data
     public static class WechatCompareRecordQueryInfo extends QueryInfo{
-        @ApiModelProperty(name = "训练开始时间")
+        @ApiModelProperty(name = "训练开始时间(年月日 时分秒)")
         private String startTime;
 
-        @ApiModelProperty(name = "训练结束时间")
+        @ApiModelProperty(name = "训练结束时间(年月日 时分秒)")
         private String endTime;
 
         @ApiModelProperty(name = "机构编号")
@@ -142,13 +142,13 @@ public class SysMusicCompareRecordQueryInfo {
         private String subjectName;
 
         @ApiModelProperty(name = "训练总时长")
-        private Integer trainTimes;
+        private Integer trainTimes = 0;
 
         @ApiModelProperty(name = "训练天数")
-        private Integer trainDays;
+        private Integer trainDays = 0;
 
         @ApiModelProperty(name = "平均训练时长")
-        private Integer avgTrainTimes;
+        private Integer avgTrainTimes = 0;
 
     }
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantPersonStatServiceImpl.java

@@ -30,7 +30,7 @@ public class TenantPersonStatServiceImpl extends ServiceImpl<TenantPersonStatMap
         Date date = DateUtil.addDays(new Date(), -1);
         String day = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
         this.lambdaUpdate().eq(TenantPersonStat::getDay,day).remove();
-        String month = DateUtil.getMonth(date);
+        String month = DateUtil.format(date,DateUtil.ISO_YEAR_MONTH_FORMAT);
         String year = DateUtil.getYear(date);
         //获取初始化数据
         List<TenantPersonStat> stats = baseMapper.init();

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantPersonStatWrapper.java

@@ -43,6 +43,12 @@ public class TenantPersonStatWrapper {
         public TenantPersonStatDto(String date) {
             this.date = date;
         }
+
+        public TenantPersonStatDto(Integer studentNum, Integer teacherNum, String date) {
+            this.studentNum = studentNum;
+            this.teacherNum = teacherNum;
+            this.date = date;
+        }
     }
 
 	@Data

+ 35 - 22
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -345,28 +345,38 @@
 	</select>
     <select id="queryWeChatStudentTrainData"
             resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$WechatCompareRecordPageDto">
-		select su.id_ userId,su.avatar_ avatar,su.username_ username,GROUP_CONCAT(DISTINCT sb.name_) subjectName,
-			   SUM(mprs.playTime) trainTimes,COUNT(DISTINCT mprs.create_time_) trainDays,
-			   SUM(mprs.playTime) / COUNT(DISTINCT mprs.create_time_) avgTrainTimes
-		from (select st.user_id_,DATE_FORMAT(smcr.create_time_,'%Y-%m-%d') create_time_,SUM(smcr.play_time_) playTime,st.subject_id_
-			  from student st
-					   LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
-			  where st.membership_end_time_ >= NOW()
-			  <if test="startTime != null and startTime != ''">
-				  AND smcr.create_time_ BETWEEN #{startTime} AND #{endTime}
-			  </if>
-			<if test="queryInfo.tenantId != null">
-				AND smcr.tenant_id_ = #{queryInfo.tenantId}
-			</if>
-			  group by st.user_id_,DATE_FORMAT(create_time_,'%Y-%m-%d')) mprs
-				 left join sys_user su ON mprs.user_id_ = su.id_
-				 left join subject sb ON FIND_IN_SET(sb.id_,mprs.subject_id_)
+		select st.user_id_                                                 userId,
+		su.avatar_                                             avatar,
+		su.username_                                           username,
+		GROUP_CONCAT(DISTINCT sb.name_)                        subjectName,
+		SUM(mprs.playTime)                                     trainTimes,
+		COUNT(DISTINCT mprs.create_time_)                      trainDays,
+		SUM(mprs.playTime) / COUNT(DISTINCT mprs.create_time_) avgTrainTimes
+		from student st
+		left join
+		(select smcr.user_id_,
+		DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') create_time_,
+		SUM(smcr.play_time_)                       playTime
+		from sys_music_compare_record smcr
 		<where>
-			<if test="search != null and search != ''">
-				AND su.username_ LIKE CONCAT('%',#{keyword},'%')
+			<if test="startTime != null and startTime != ''">
+				AND smcr.create_time_ BETWEEN #{startTime} AND #{endTime}
+			</if>
+			<if test="tenantId != null">
+				AND smcr.tenant_id_ = #{tenantId}
 			</if>
 		</where>
-		group by mprs.user_id_
+		group by smcr.user_id_, DATE_FORMAT(create_time_, '%Y-%m-%d')) mprs ON mprs.user_id_ = st.user_id_
+		left join sys_user su ON st.user_id_ = su.id_
+		left join subject sb ON sb.id_ = st.subject_id_
+		where st.membership_end_time_ >= NOW()
+		<if test="search != null and search != ''">
+			AND su.username_ LIKE CONCAT('%',#{keyword},'%')
+		</if>
+		<if test="tenantId != null">
+			AND st.tenant_id_ = #{tenantId}
+		</if>
+		group by st.user_id_
 		ORDER BY ${sortField} ${sortType}
 	</select>
 	<select id="countWeChatStudentTrainData" resultType="java.lang.Integer">
@@ -375,8 +385,8 @@
 		left join sys_user su ON st.user_id_ = su.id_
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		where st.membership_end_time_ >= NOW()
-		<if test="queryInfo.tenantId != null">
-			AND smcr.tenant_id_ = #{queryInfo.tenantId}
+		<if test="tenantId != null">
+			AND smcr.tenant_id_ = #{tenantId}
 		</if>
 		<if test="startTime != null and startTime != ''">
 			AND smcr.create_time_ BETWEEN #{startTime} AND #{endTime}
@@ -387,7 +397,7 @@
 	</select>
 	<select id="wechatCompareRecordSum"
 			resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$WechatCompareRecordSumDto">
-		select COUNT(st.user_id_),COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainNum,SUM(smcr.play_time_) playTime
+		select COUNT(st.user_id_) studentNum,COUNT(DISTINCT DATE_FORMAT(smcr.create_time_,'%Y-%m-%d')) trainDays,SUM(smcr.play_time_) trainTimes
 		from student st
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		where st.membership_end_time_ >= NOW()
@@ -397,6 +407,9 @@
 		<if test="queryInfo.tenantId != null">
 			AND smcr.tenant_id_ = #{queryInfo.tenantId}
 		</if>
+		<if test="queryInfo.tenantId != null">
+			AND st.tenant_id_ = #{queryInfo.tenantId}
+		</if>
 	</select>
     <select id="queryStudentTrain"
             resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$StudentMusicCompareRecord">

+ 1 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantPersonStatMapper.xml

@@ -1,9 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.yonge.cooleshow.biz.dal.mapper.TenantPersonStatMapper">
-
-	 
-    
     <!-- 表字段 -->
     <sql id="baseColumns">
          t.id_ AS id
@@ -24,7 +21,7 @@
     </select>
     <select id="indexSum"
             resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper$TenantPersonStatDto">
-        SELECT DATE_FORMAT(${query.groupBy},${query.format}) date,SUM(student_num_) studentNum,SUM(teacher_num_) teacherNum FROM tenant_person_stat
+        SELECT DATE_FORMAT(day_,#{query.format}) date,SUM(student_num_) studentNum,SUM(teacher_num_) teacherNum FROM tenant_person_stat
         WHERE tenant_id_ = #{query.tenantId} AND day_ BETWEEN #{query.startTime} AND #{query.endTime}
         GROUP BY ${query.groupBy}
     </select>

+ 23 - 2
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.tenant.controller;
 
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
@@ -16,12 +17,15 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 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.RestController;
 
+import java.util.Objects;
+
 @Api(tags = "首页统计")
 @RequestMapping("index")
 @RestController
@@ -47,12 +51,15 @@ public class IndexController extends BaseController {
         if (sysUser == null) {
             return failed("获取用户信息失败");
         }
+        if(StringUtils.isEmpty(queryInfo.getStartTime())){
+            throw new BizException("请选择筛选时间");
+        }
         queryInfo.setTenantId(sysUser.getTenantId());
         return succeed(sysMusicCompareRecordService.weChatStudentTrainData(queryInfo));
     }
 
 
-    @ApiOperation("学员训练数据统计列表")
+    @ApiOperation("首页学员训练数据统计列表、汇总")
     @PostMapping("studentTrainData")
     public HttpResponseResult<SysMusicCompareRecordQueryInfo.WechatCompareRecordDto> studentTrainData
             (@RequestBody SysMusicCompareRecordQueryInfo.WechatCompareRecordQueryInfo queryInfo){
@@ -60,10 +67,24 @@ public class IndexController extends BaseController {
         if (sysUser == null) {
             return failed("获取用户信息失败");
         }
+        if(StringUtils.isEmpty(queryInfo.getStartTime())){
+            throw new BizException("请选择筛选时间");
+        }
         queryInfo.setTenantId(sysUser.getTenantId());
         queryInfo.setRows(10);
         SysMusicCompareRecordQueryInfo.WechatCompareRecordDto result = new SysMusicCompareRecordQueryInfo.WechatCompareRecordDto();
-        result.setSumDto(sysMusicCompareRecordService.getDao().wechatCompareRecordSum(queryInfo));
+        SysMusicCompareRecordQueryInfo.WechatCompareRecordSumDto sumDto = sysMusicCompareRecordService.getDao().wechatCompareRecordSum(queryInfo);
+        if(Objects.nonNull(sumDto)){
+            if(sumDto.getStudentNum() > 0){
+                if(sumDto.getTrainDays() > 0){
+                    sumDto.setAvgTrainDays(sumDto.getTrainDays() / sumDto.getStudentNum());
+                }
+                if(sumDto.getTrainTimes() > 0){
+                    sumDto.setAvgTrainTimes(sumDto.getTrainTimes() / sumDto.getStudentNum());
+                }
+            }
+        }
+        result.setSumDto(sumDto);
         result.setPage(sysMusicCompareRecordService.weChatStudentTrainData(queryInfo).getRows());
         return succeed(result);
     }

+ 24 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TaskController.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.tenant.controller;
+
+import com.yonge.cooleshow.biz.dal.service.TenantPersonStatService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+@RestController
+@RequestMapping("/task")
+@ApiIgnore
+public class TaskController extends BaseController {
+
+    @Autowired
+    private TenantPersonStatService tenantPersonStatService;
+
+    //机构人员汇总
+    @GetMapping("/tenantPersonStat")
+    public void tenantPersonStat() {
+        tenantPersonStatService.tenantPersonStatTask();
+    }
+}

+ 0 - 17
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/task/TaskController.java

@@ -1,17 +0,0 @@
-package com.yonge.cooleshow.tenant.task;
-
-import com.yonge.cooleshow.common.controller.BaseController;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/28 15:50
- */
-@RestController
-@RequestMapping("/task")
-@ApiIgnore
-public class TaskController extends BaseController {
-
-}