1
0
Переглянути джерело

feat(server): 课程统计

Go 4 роки тому
батько
коміт
864ea7f19a
17 змінених файлів з 441 додано та 19 видалено
  1. 16 0
      server/data/src/main/java/com/qxgmat/data/relation/CourseNoRelationMapper.java
  2. 7 0
      server/data/src/main/java/com/qxgmat/data/relation/UserAskCourseRelationMapper.java
  3. 33 0
      server/data/src/main/java/com/qxgmat/data/relation/entity/CourseNoStatRelation.java
  4. 43 0
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserAskCourseStatRelation.java
  5. 37 0
      server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseNoRelationMapper.xml
  6. 29 0
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskCourseRelationMapper.xml
  7. 11 7
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/CourseController.java
  8. 93 12
      server/gateway-api/src/main/java/com/qxgmat/controller/api/CourseController.java
  9. 20 0
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDataDetailDto.java
  10. 10 0
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDataListDto.java
  11. 30 0
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDetailDto.java
  12. 10 0
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CoursePackageDetailDto.java
  13. 20 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/CourseNoService.java
  14. 19 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskCourseService.java
  15. 10 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseDataSubscribeService.java
  16. 36 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderCheckoutService.java
  17. 17 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderRecordService.java

+ 16 - 0
server/data/src/main/java/com/qxgmat/data/relation/CourseNoRelationMapper.java

@@ -0,0 +1,16 @@
+package com.qxgmat.data.relation;
+
+import com.qxgmat.data.relation.entity.CourseNoStatRelation;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Created by gaojie on 2017/11/9.
+ */
+public interface CourseNoRelationMapper {
+    List<CourseNoStatRelation> statCourse(
+            @Param("courseId") Integer courseId
+    );
+}

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/relation/UserAskCourseRelationMapper.java

@@ -2,8 +2,10 @@ package com.qxgmat.data.relation;
 
 import com.qxgmat.data.dao.entity.UserAskCourse;
 import com.qxgmat.data.dao.entity.UserAskQuestion;
+import com.qxgmat.data.relation.entity.UserAskCourseStatRelation;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -24,6 +26,11 @@ public interface UserAskCourseRelationMapper {
             String direction
     );
 
+    List<UserAskCourseStatRelation> statGroupCourse(
+            @Param("courseIds") Collection courseIds,
+            @Param("showStatus") Integer showStatus
+    );
+
     void accumulation(
             @Param("id") Number id,
             @Param("view") int view

+ 33 - 0
server/data/src/main/java/com/qxgmat/data/relation/entity/CourseNoStatRelation.java

@@ -0,0 +1,33 @@
+package com.qxgmat.data.relation.entity;
+
+import javax.persistence.Column;
+
+public class CourseNoStatRelation {
+    /**
+     * 数量
+     */
+    @Column(name = "`number`")
+    private Integer number;
+
+    /**
+     * 总时长
+     */
+    @Column(name = "`time`")
+    private Integer time;
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setTime(Integer time) {
+        this.time = time;
+    }
+
+    public Integer getTime() {
+        return time;
+    }
+}

+ 43 - 0
server/data/src/main/java/com/qxgmat/data/relation/entity/UserAskCourseStatRelation.java

@@ -0,0 +1,43 @@
+package com.qxgmat.data.relation.entity;
+
+import javax.persistence.Column;
+
+public class UserAskCourseStatRelation {
+    @Column(name = "`course_id`")
+    private Integer courseId;
+    /**
+     * 数量
+     */
+    @Column(name = "`number`")
+    private Integer number;
+
+    /**
+     * 回答数
+     */
+    @Column(name = "`answer`")
+    private Integer answer;
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setAnswer(Integer answer) {
+        this.answer = answer;
+    }
+
+    public Integer getAnswer() {
+        return answer;
+    }
+
+    public Integer getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Integer courseId) {
+        this.courseId = courseId;
+    }
+}

+ 37 - 0
server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseNoRelationMapper.xml

@@ -0,0 +1,37 @@
+<?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.qxgmat.data.relation.CourseNoRelationMapper">
+  <resultMap id="IdMap" type="com.qxgmat.data.dao.entity.CourseNo">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+  </resultMap>
+  <resultMap id="statMap" type="com.qxgmat.data.relation.entity.CourseNoStatRelation">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="number" jdbcType="INTEGER" property="number" />
+    <id column="time" jdbcType="INTEGER" property="time" />
+  </resultMap>
+  <sql id="Id_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    cn.`id`
+  </sql>
+
+  <!--
+    课程统计
+  -->
+  <select id="statCourse" resultMap="statMap">
+    select sum(cn.`time`) as `time`, count(cn.`id`) as `number`
+    from `course_no` cn
+    where
+    1
+    <if test="courseId != null">
+      and cn.`course_id` = #{courseId,jdbcType=VARCHAR}
+    </if>
+    group by cn.`course_id`
+  </select>
+</mapper>

+ 29 - 0
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskCourseRelationMapper.xml

@@ -7,6 +7,14 @@
     -->
     <id column="id" jdbcType="INTEGER" property="id" />
   </resultMap>
+  <resultMap id="statMap" type="com.qxgmat.data.relation.entity.UserAskCourseStatRelation">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="course_id" jdbcType="INTEGER" property="courseId" />
+    <id column="number" jdbcType="INTEGER" property="number" />
+    <id column="answer" jdbcType="INTEGER" property="answer" />
+  </resultMap>
   <sql id="Id_Column_List">
     <!--
       WARNING - @mbg.generated
@@ -71,4 +79,25 @@
     </if>
     order by ${order} ${direction}
   </select>
+
+  <!--
+    课程统计
+  -->
+  <select id="statGroupCourse" resultMap="statMap">
+    select uac.`course_id` as `course_id`, count(uac.`id`) as `number`, sum(if(uac.`answer_status`=1,1,0)) as `answer`
+    from `user_ask_course` uac
+    where
+    1
+    <if test="courseIds != null">
+      and uac.`course_id` IN
+      <foreach collection="courseIds" item="item" index="index" open="(" close=")" separator=",">
+        #{item}
+      </foreach>
+    </if>
+    <if test="showStatus != null">
+      and uac.`show_status` = #{showStatus,jdbcType=INTEGER}
+    </if>
+
+    group by uac.`course_id`
+  </select>
 </mapper>

+ 11 - 7
server/gateway-api/src/main/java/com/qxgmat/controller/admin/CourseController.java

@@ -14,6 +14,7 @@ import com.qxgmat.data.constants.enums.trade.RecordSource;
 import com.qxgmat.data.constants.enums.user.DataType;
 import com.qxgmat.data.constants.enums.user.MoneyRange;
 import com.qxgmat.data.dao.entity.*;
+import com.qxgmat.data.relation.entity.CourseNoStatRelation;
 import com.qxgmat.data.relation.entity.CourseStudentNumberRelation;
 import com.qxgmat.dto.admin.extend.*;
 import com.qxgmat.dto.admin.request.*;
@@ -437,8 +438,8 @@ public class CourseController {
         CourseNo entity = Transform.dtoToEntity(dto);
         entity = courseNoService.addNo(entity);
         // 统计课时数
-        Course course = courseService.get(dto.getCourseId());
-        courseService.edit(Course.builder().id(course.getId()).noNumber(course.getNoNumber() + 1).build());
+        CourseNoStatRelation relation = courseNoService.statCourse(dto.getCourseId());
+        courseService.edit(Course.builder().id(dto.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
         managerLogService.log(request);
         return ResponseHelp.success(Transform.convert(entity, CourseNo.class));
     }
@@ -448,7 +449,10 @@ public class CourseController {
     public Response<Boolean> editNo(@RequestBody @Validated CourseNoDto dto, HttpServletRequest request) {
         // 调整课时顺序
         CourseNo entity = Transform.dtoToEntity(dto);
-        entity = courseNoService.editNo(entity);
+        entity = courseNoService.editNo(entity);// 统计课时数
+        CourseNoStatRelation relation = courseNoService.statCourse(dto.getCourseId());
+        courseService.edit(Course.builder().id(dto.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
+
         managerLogService.log(request);
         return ResponseHelp.success(true);
     }
@@ -459,11 +463,11 @@ public class CourseController {
         CourseNo in = courseNoService.get(id);
         courseNoService.deleteNo(id);
         // 统计课时数
-        Course course = courseService.get(in.getCourseId());
-        courseService.edit(Course.builder().id(course.getId()).noNumber(course.getNoNumber() - 1).build());
+        CourseNoStatRelation relation = courseNoService.statCourse(in.getCourseId());
+        courseService.edit(Course.builder().id(in.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
         // 删除对应预习作业关系
-        previewPaperService.removeCourseNo(course.getId(), in.getId());
-        previewAssignService.removeCourseNo(course.getId(), in.getId());
+        previewPaperService.removeCourseNo(in.getCourseId(), in.getId());
+        previewAssignService.removeCourseNo(in.getCourseId(), in.getId());
         managerLogService.log(request);
         return ResponseHelp.success(true);
     }

+ 93 - 12
server/gateway-api/src/main/java/com/qxgmat/controller/api/CourseController.java

@@ -8,10 +8,12 @@ import com.nuliji.tools.exception.ParameterException;
 import com.qxgmat.data.constants.enums.ExperienceDayRange;
 import com.qxgmat.data.constants.enums.ExperienceScoreRange;
 import com.qxgmat.data.constants.enums.module.CourseModule;
+import com.qxgmat.data.constants.enums.module.ProductType;
 import com.qxgmat.data.constants.enums.module.VsCourseType;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.DataType;
 import com.qxgmat.data.dao.entity.*;
+import com.qxgmat.data.relation.entity.UserAskCourseStatRelation;
 import com.qxgmat.data.relation.entity.UserPreviewPaperRelation;
 import com.qxgmat.dto.extend.*;
 import com.qxgmat.dto.request.*;
@@ -97,6 +99,9 @@ public class CourseController {
     private UserOrderRecordService userOrderRecordService;
 
     @Autowired
+    private UserOrderCheckoutService userOrderCheckoutService;
+
+    @Autowired
     private UserCourseDataSubscribeService userCourseDataSubscribeService;
 
     @Autowired
@@ -120,6 +125,7 @@ public class CourseController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
+        User user = (User) shiroHelp.getLoginUser();
 
         Page<Course> p = courseService.list(page, size, CourseModule.VIDEO, structId, order, DirectionStatus.ValueOf(direction));
 
@@ -128,13 +134,32 @@ public class CourseController {
         // 评论
         Map<Object, Collection<Comment>> commentMap = commentService.groupByPosition("course-video", ids, 1);
         Transform.combine(pr, commentMap, CourseListDto.class, "id", "comments", CommentExtendDto.class);
-        // 已购买
+
+        // 优质问答
+        List<UserAskCourseStatRelation> relationList = userAskCourseService.statGroupCourse(ids, 1);
+        Map relationMap = Transform.getMap(relationList, UserAskCourseStatRelation.class, "courseId");
+        for(CourseListDto dto : pr){
+            UserAskCourseStatRelation relation = (UserAskCourseStatRelation) relationMap.getOrDefault(dto.getId(), null);
+            if (relation != null){
+                dto.setAskNumber(relation.getNumber());
+            }
+        }
 
 
-        // 添加购物车
+        if(user != null){
+            // 已购买: 查看当前服务
+            List<UserCourse> userCourseList = userCourseService.listByCourse(user.getId(), ids);
+            Map userCourseMap = Transform.getMap(userCourseList, UserCourse.class, "courseId");
 
+            // 添加购物车
+            List<UserOrderCheckout> userOrderCheckoutList = userOrderCheckoutService.listWithProduct(user.getId(), ProductType.COURSE, ids);
+            Map userOrderCheckoutMap = Transform.getMap(userOrderCheckoutList, UserOrderCheckout.class, "productId");
 
-        // 优质问答
+            for(CourseListDto dto : pr){
+                dto.setHave(userCourseMap.containsKey(dto.getId()));
+                dto.setAdd(userOrderCheckoutMap.containsKey(dto.getId()));
+            }
+        }
 
         return ResponseHelp.success(pr, page, size, p.getTotal());
     }
@@ -165,11 +190,22 @@ public class CourseController {
         List<Faq> faqList = faqService.list(1, 10, "course-"+course.getCourseModule(), course.getId().toString());
         dto.setFaqs(Transform.convert(faqList, FaqExtendDto.class));
 
-        // 已购买
+        // 优质问答
+        UserAskCourseStatRelation relation = userAskCourseService.statCourse(courseId, 1);
+        if (relation != null){
+            dto.setAskNumber(relation.getNumber());
+        }
 
-        // 购物车
+        if(user != null){
+            // 已购买
+            UserCourse userCourse = userCourseService.getCourse(user.getId(), courseId);
 
-        // 优质问答
+            // 购物车
+            UserOrderCheckout userOrderCheckout = userOrderCheckoutService.getWithProduct(user.getId(), ProductType.COURSE, courseId);
+
+            dto.setHave(userCourse != null);
+            dto.setAdd(userOrderCheckout != null);
+        }
         return ResponseHelp.success(dto);
     }
 
@@ -253,6 +289,7 @@ public class CourseController {
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
 
+        User user = (User) shiroHelp.getLoginUser();
         Page<CoursePackage> p = coursePackageService.list(page, size, structId, isSpecial, order, DirectionStatus.ValueOf(direction));
 
         List<CoursePackageListDto> pr = Transform.convert(p, CoursePackageListDto.class);
@@ -269,7 +306,16 @@ public class CourseController {
         Map<Object, Collection<Comment>> commentMap = commentService.groupByPosition("course-package", ids, 1);
         Transform.combine(pr, commentMap, CourseListDto.class, "id", "comments", CommentExtendDto.class);
 
-        // 购物车
+
+        if(user != null){
+            // 添加购物车
+            List<UserOrderCheckout> userOrderCheckoutList = userOrderCheckoutService.listWithProduct(user.getId(), ProductType.COURSE_PACKAGE, ids);
+            Map userOrderCheckoutMap = Transform.getMap(userOrderCheckoutList, UserOrderCheckout.class, "productId");
+
+            for(CoursePackageListDto dto : pr){
+                dto.setAdd(userOrderCheckoutMap.containsKey(dto.getId()));
+            }
+        }
 
         return ResponseHelp.success(pr, page, size, p.getTotal());
     }
@@ -295,7 +341,12 @@ public class CourseController {
         List<Faq> faqList = faqService.list(1, 10, "course-package", coursePackage.getId().toString());
         dto.setFaqs(Transform.convert(faqList, FaqExtendDto.class));
 
-        // 购物车
+        if(user != null){
+            // 购物车
+            UserOrderCheckout userOrderCheckout = userOrderCheckoutService.getWithProduct(user.getId(), ProductType.COURSE_PACKAGE, packageId);
+
+            dto.setAdd(userOrderCheckout != null);
+        }
 
         return ResponseHelp.success(dto);
     }
@@ -312,8 +363,11 @@ public class CourseController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
+        User user = (User) shiroHelp.getLoginUser();
 
         Page<CourseData> p = courseDataService.list(page, size, structId, DataType.ValueOf(dataType), isNovice, isOriginal, order, DirectionStatus.ValueOf(direction));
+        courseExtendService.refreshDataResource(user, p);
+
         List<CourseDataListDto> pr = Transform.convert(p, CourseDataListDto.class);
         Collection ids = Transform.getIds(pr, CourseDataListDto.class, "id");
 
@@ -321,10 +375,31 @@ public class CourseController {
         Map<Object, Collection<Comment>> commentMap = commentService.groupByPosition("course_data", ids, 1);
         Transform.combine(pr, commentMap, CourseListDto.class, "id", "comments", CommentExtendDto.class);
 
-        // 已购买
+        // 订阅
+        if (user != null){
+            List<UserCourseDataSubscribe> subscribeList = userCourseDataSubscribeService.listWithData(user.getId(), ids);
+            Map subscribeMap = Transform.getMap(subscribeList, UserCourseDataSubscribe.class, "dataId");
+
+            for(CourseDataListDto dto : pr){
+                dto.setSubscribe(subscribeMap.containsKey(dto.getId()));
+
+            }
+        }
 
+        if(user != null){
+            // 已购买: 查看当前服务
+            List<UserOrderRecord> userOrderRecordList = userOrderRecordService.listWithUserData(user.getId(), ids);
+            Map userOrderRecordMap = Transform.getMap(userOrderRecordList, UserOrderRecord.class, "productId");
 
-        // 添加购物车
+            // 添加购物车
+            List<UserOrderCheckout> userOrderCheckoutList = userOrderCheckoutService.listWithProduct(user.getId(), ProductType.DATA, ids);
+            Map userOrderCheckoutMap = Transform.getMap(userOrderCheckoutList, UserOrderCheckout.class, "productId");
+
+            for(CourseDataListDto dto : pr){
+                dto.setHave(userOrderRecordMap.containsKey(dto.getId()));
+                dto.setAdd(userOrderCheckoutMap.containsKey(dto.getId()));
+            }
+        }
 
         return ResponseHelp.success(pr, page, size, p.getTotal());
     }
@@ -357,10 +432,16 @@ public class CourseController {
             dto.setSubscribe(subscribe != null);
         }
 
-        // 已购买
+        if(user != null){
+            // 已购买: 查看当前服务
+            UserOrderRecord userOrderRecord = userOrderRecordService.getWithUserData(user.getId(), dataId);
 
+            // 添加购物车
+            UserOrderCheckout userOrderCheckout = userOrderCheckoutService.getWithProduct(user.getId(), ProductType.COURSE_PACKAGE, dataId);
 
-        // 添加购物车
+            dto.setHave(userOrderRecord != null);
+            dto.setAdd(userOrderCheckout != null);
+        }
 
         return ResponseHelp.success(dto);
     }

+ 20 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDataDetailDto.java

@@ -17,6 +17,10 @@ public class CourseDataDetailDto extends CourseData {
 
     private Boolean subscribe;
 
+    private Boolean have;
+
+    private Boolean add;
+
     public Collection<CommentExtendDto> getComments() {
         return comments;
     }
@@ -40,4 +44,20 @@ public class CourseDataDetailDto extends CourseData {
     public void setSubscribe(Boolean subscribe) {
         this.subscribe = subscribe;
     }
+
+    public Boolean getHave() {
+        return have;
+    }
+
+    public void setHave(Boolean have) {
+        this.have = have;
+    }
+
+    public Boolean getAdd() {
+        return add;
+    }
+
+    public void setAdd(Boolean add) {
+        this.add = add;
+    }
 }

+ 10 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDataListDto.java

@@ -35,6 +35,8 @@ public class CourseDataListDto {
 
     private Integer saleNumber;
 
+    private Boolean subscribe;
+
     private Boolean have;
 
     private Boolean add;
@@ -168,4 +170,12 @@ public class CourseDataListDto {
     public void setAdd(Boolean add) {
         this.add = add;
     }
+
+    public Boolean getSubscribe() {
+        return subscribe;
+    }
+
+    public void setSubscribe(Boolean subscribe) {
+        this.subscribe = subscribe;
+    }
 }

+ 30 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDetailDto.java

@@ -43,6 +43,12 @@ public class CourseDetailDto extends Course {
 
     private Integer useExpireDays;
 
+    private Integer askNumber;
+
+    private Boolean have;
+
+    private Boolean add;
+
     private Collection<CourseNoExtendDto> courseNos;
 
     private Collection<CommentExtendDto> comments;
@@ -204,4 +210,28 @@ public class CourseDetailDto extends Course {
     public void setExpirePreDays(Integer expirePreDays) {
         this.expirePreDays = expirePreDays;
     }
+
+    public Boolean getHave() {
+        return have;
+    }
+
+    public void setHave(Boolean have) {
+        this.have = have;
+    }
+
+    public Boolean getAdd() {
+        return add;
+    }
+
+    public void setAdd(Boolean add) {
+        this.add = add;
+    }
+
+    public Integer getAskNumber() {
+        return askNumber;
+    }
+
+    public void setAskNumber(Integer askNumber) {
+        this.askNumber = askNumber;
+    }
 }

+ 10 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/CoursePackageDetailDto.java

@@ -37,6 +37,8 @@ public class CoursePackageDetailDto {
 
     private Date updateTime;
 
+    private Boolean add;
+
     public Integer getId() {
         return id;
     }
@@ -132,4 +134,12 @@ public class CoursePackageDetailDto {
     public void setFaqs(Collection<FaqExtendDto> faqs) {
         this.faqs = faqs;
     }
+
+    public Boolean getAdd() {
+        return add;
+    }
+
+    public void setAdd(Boolean add) {
+        this.add = add;
+    }
 }

+ 20 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/CourseNoService.java

@@ -7,6 +7,9 @@ import com.nuliji.tools.exception.SystemException;
 import com.nuliji.tools.mybatis.Example;
 import com.qxgmat.data.dao.CourseNoMapper;
 import com.qxgmat.data.dao.entity.CourseNo;
+import com.qxgmat.data.relation.CourseNoRelationMapper;
+import com.qxgmat.data.relation.entity.CourseNoStatRelation;
+import com.qxgmat.data.relation.entity.UserRankStatRelation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -21,6 +24,9 @@ public class CourseNoService extends AbstractService {
     @Resource
     private CourseNoMapper courseNoMapper;
 
+    @Resource
+    private CourseNoRelationMapper courseNoRelationMapper;
+
     public List<CourseNo> allCourse(Integer courseId){
         Example example = new Example(CourseNo.class);
         if(courseId != null){
@@ -61,6 +67,20 @@ public class CourseNoService extends AbstractService {
         return relationMap;
     }
 
+    /**
+     * 计算课程的汇总信息
+     * @param courseId
+     * @return
+     */
+    public CourseNoStatRelation statCourse(Integer courseId){
+        List<CourseNoStatRelation> relation = courseNoRelationMapper.statCourse(courseId);
+        if (relation != null && relation.size() > 0){
+            return relation.get(0);
+        }else{
+            return null;
+        }
+    }
+
     public CourseNo addNo(CourseNo course){
         List<CourseNo> nos = allCourse(course.getCourseId());
         Integer max = 0;

+ 19 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskCourseService.java

@@ -13,6 +13,7 @@ import com.qxgmat.data.constants.enums.user.MoneyRange;
 import com.qxgmat.data.dao.UserAskCourseMapper;
 import com.qxgmat.data.dao.entity.UserAskCourse;
 import com.qxgmat.data.relation.UserAskCourseRelationMapper;
+import com.qxgmat.data.relation.entity.UserAskCourseStatRelation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -220,6 +221,24 @@ public class UserAskCourseService extends AbstractService {
     }
 
     /**
+     * 计算课程的汇总信息
+     * @param courseIds
+     * @return
+     */
+    public List<UserAskCourseStatRelation> statGroupCourse(Collection courseIds, Integer showStatus){
+        return userAskCourseRelationMapper.statGroupCourse(courseIds, showStatus);
+    }
+
+    public UserAskCourseStatRelation statCourse(Integer courseId, Integer showStatus){
+        List<UserAskCourseStatRelation> relation = userAskCourseRelationMapper.statGroupCourse(new ArrayList(){{add(courseId);}}, showStatus);
+        if (relation != null && relation.size() > 0){
+            return relation.get(0);
+        }else{
+            return null;
+        }
+    }
+
+    /**
      * 累加访问记录
      */
     public void accumulation(Integer id, int view){

+ 10 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseDataSubscribeService.java

@@ -34,6 +34,16 @@ public class UserCourseDataSubscribeService extends AbstractService {
         return select(userCourseDataSubscribeMapper, example, page, size);
     }
 
+    public List<UserCourseDataSubscribe> listWithData(Integer userId, Collection dataIds){
+        Example example = new Example(UserCourseDataSubscribe.class);
+        example.and(
+                example.createCriteria()
+                        .andEqualTo("userId", userId)
+                        .andIn("dataId", dataIds)
+        );
+        return select(userCourseDataSubscribeMapper, example);
+    }
+
     public UserCourseDataSubscribe getByData(Integer userId, Integer dataId){
         Example example = new Example(UserCourseDataSubscribe.class);
         example.and(

+ 36 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderCheckoutService.java

@@ -2,6 +2,8 @@ package com.qxgmat.service.inline;
 
 import com.github.pagehelper.Page;
 import com.nuliji.tools.AbstractService;
+import com.nuliji.tools.Tools;
+import com.nuliji.tools.Transform;
 import com.nuliji.tools.exception.ParameterException;
 import com.nuliji.tools.exception.SystemException;
 import com.nuliji.tools.mybatis.Example;
@@ -40,6 +42,40 @@ public class UserOrderCheckoutService extends AbstractService {
         return select(userOrderCheckoutMapper, example);
     }
 
+
+    /**
+     * 列出对应类型的购物信息
+     * @param userId
+     * @param productType
+     * @param productIds
+     * @return
+     */
+    public List<UserOrderCheckout> listWithProduct(Integer userId, ProductType productType, Collection productIds){
+        Example example = new Example(UserOrderCheckout.class);
+        example.and(
+                example.createCriteria()
+                        .andEqualTo("orderId", 0)
+                        .andEqualTo("userId", userId)
+                        .andEqualTo("productType", productType.key)
+                        .andIn("productId", productIds)
+        );
+
+        return select(userOrderCheckoutMapper, example);
+    }
+
+    public UserOrderCheckout getWithProduct(Integer userId, ProductType productType, Integer productId){
+        Example example = new Example(UserOrderCheckout.class);
+        example.and(
+                example.createCriteria()
+                        .andEqualTo("orderId", 0)
+                        .andEqualTo("userId", userId)
+                        .andEqualTo("productType", productType.key)
+                        .andEqualTo("productId", productId)
+        );
+
+        return one(userOrderCheckoutMapper, example);
+    }
+
     public boolean changeByUser(Integer userId, Integer orderId, UserOrderCheckout checkout){
         Example example = new Example(UserOrderCheckout.class);
         example.and(

+ 17 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderRecordService.java

@@ -144,6 +144,23 @@ public class UserOrderRecordService extends AbstractService {
     }
 
     /**
+     * 列出购买资料的记录
+     * @param userId
+     * @param dataId
+     * @return
+     */
+    public UserOrderRecord getWithUserData(Integer userId, Integer dataId){
+        Example example = new Example(UserOrderRecord.class);
+        example.and(
+                example.createCriteria()
+                        .andEqualTo("userId", userId)
+                        .andEqualTo("productType", ProductType.DATA.key)
+                        .andEqualTo("productId", dataId)
+        );
+        return one(userOrderRecordMapper, example);
+    }
+
+    /**
      * 获取小班课程学员列表
      * @param page
      * @param size