he2802 3 gadi atpakaļ
vecāks
revīzija
eae3bf999d
17 mainītis faili ar 112 papildinājumiem un 22 dzēšanām
  1. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java
  2. 8 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java
  3. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java
  4. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundAddBo.java
  5. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundEditBo.java
  6. 4 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundQueryBo.java
  7. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java
  8. 24 7
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
  9. 6 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsRefundVo.java
  10. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInputVo.java
  11. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/ExamStudyRecordVo.java
  12. 9 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/GoodsStudyRecordVo.java
  13. 5 1
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  14. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  15. 7 2
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsRefundMapper.xml
  16. 3 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderInputMapper.xml
  17. 9 2
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java

@@ -195,14 +195,14 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
      */
     private void validEntityBeforeSave(Exam entity){
         //TODO 做一些数据校验,如唯一约束
-        if(Validator.isNotEmpty(entity.getExamId())&&entity.getStatus()==-1){
+        if(Validator.isNotEmpty(entity.getExamId())&&Validator.isNotEmpty(entity.getStatus())&&entity.getStatus()==-1){
             //判断是否有被课程章关联,有不允许删除
             CourseMenuExam menuExam = iCourseMenuExamService.getOne(new LambdaQueryWrapper<CourseMenuExam>().eq(CourseMenuExam::getExamId, entity.getExamId()).last("limit 1"));
             if(Validator.isNotEmpty(menuExam)){
                 throw new CustomException("该卷已被课程章关联,无法删除");
             }
         }
-        if(entity.getExamId()!=null&&entity.getPublishStatus()!=null&&entity.getPublishStatus()==0){
+        if(entity.getExamId()!=null&&Validator.isNotEmpty(entity.getPublishStatus())&&entity.getPublishStatus()==0){
             GoodsAttached one = iGoodsAttachedService.getOne(new LambdaQueryWrapper<GoodsAttached>().eq(GoodsAttached::getMajorId, entity.getExamId()).eq(GoodsAttached::getType,3).last("limit 1"));
             if(one!=null){
                 throw new CustomException("该卷已被绑定,不允许修改发布状态为未发布");

+ 8 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java

@@ -163,5 +163,12 @@ public class ClassGradeStudentVo {
 	@Excel(name = "复购老订单商品ID")
 	@ApiModelProperty("复购老订单商品ID")
 	private Long rebuyOrderGoodsId;
-
+	/** 服务有效期开始 */
+	@Excel(name = "服务有效期开始")
+	@ApiModelProperty("服务有效期开始")
+	private Long serviceStartTime;
+	/** 服务有效期结束 */
+	@Excel(name = "服务有效期结束")
+	@ApiModelProperty("服务有效期结束")
+	private Long serviceEndTime;
 }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java

@@ -183,4 +183,12 @@ public class ClassPeriodStudentVo {
 	@Excel(name = "官方学时推送次数")
 	@ApiModelProperty("官方学时推送次数")
 	private Long periodStatusNum;
+	/** 服务有效期开始 */
+	@Excel(name = "服务有效期开始")
+	@ApiModelProperty("服务有效期开始")
+	private Long serviceStartTime;
+	/** 服务有效期结束 */
+	@Excel(name = "服务有效期结束")
+	@ApiModelProperty("服务有效期结束")
+	private Long serviceEndTime;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundAddBo.java

@@ -58,4 +58,8 @@ public class OrderGoodsRefundAddBo {
     @ApiModelProperty("复审时间")
     private Long periodReviewTime;
 
+    /** 退款时间 */
+    @ApiModelProperty("退款时间")
+    private Long refundTime;
+
 }

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundEditBo.java

@@ -68,7 +68,7 @@ public class OrderGoodsRefundEditBo {
     @ApiModelProperty("订单商品ID")
     private Long orderGoodsId;
     /** 审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过 */
-    @ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过")
+    @ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款  -1初审不通过 -2复审不通过 3复审通过已退款")
     private Integer periodStatus;
 
     /** 初审结果原因 */
@@ -95,4 +95,8 @@ public class OrderGoodsRefundEditBo {
     @ApiModelProperty("复审时间")
     private Long periodReviewTime;
 
+    /** 退款时间 */
+    @ApiModelProperty("退款时间")
+    private Long refundTime;
+
 }

+ 4 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsRefundQueryBo.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -60,8 +61,7 @@ public class OrderGoodsRefundQueryBo extends BaseEntity {
 	private String wxpayRefundId;
 	@ApiModelProperty("退款类型 1小程序 2系统录单")
 	private Integer type;
-	/** 审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过 */
-	private Integer periodStatus;
+
 	/** 初审结果原因 */
 	private String periodReason;
 	/** 复审结果原因 */
@@ -76,4 +76,6 @@ public class OrderGoodsRefundQueryBo extends BaseEntity {
 	private Long businessId;
 	@ApiModelProperty("商品类型 1视频2题库 3补考 4前培 ")
 	private Integer goodsType;
+
+	private List<Integer> periodStatus;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java

@@ -71,4 +71,6 @@ private static final long serialVersionUID=1L;
     private Long periodTime;
     /** 复审时间 */
     private Long periodReviewTime;
+    /** 退款时间 */
+    private Long refundTime;
 }

+ 24 - 7
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -357,13 +357,13 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
             if(Validator.isEmpty(bo.getPeriodStatus())||Validator.isEmpty(bo.getRefundId())){
                 throw new CustomException("参数不全");
             }
-            if(bo.getPeriodStatus()!=2&&bo.getPeriodStatus()!=-2){
+            if(bo.getPeriodStatus()!=2&&bo.getPeriodStatus()!=-2&&bo.getPeriodStatus()!=3){
                 throw new CustomException("参数错误");
             }
             OrderGoodsRefund orderGoodsRefund = getOne(new LambdaQueryWrapper<OrderGoodsRefund>()
                     .eq(OrderGoodsRefund::getRefundId, bo.getRefundId())
                     .last("limit 1"));
-            if(Validator.isEmpty(orderGoodsRefund)||orderGoodsRefund.getPeriodStatus()!=1){
+            if(Validator.isEmpty(orderGoodsRefund)||(orderGoodsRefund.getPeriodStatus()!=1&&orderGoodsRefund.getPeriodStatus()!=2)){
                 throw new CustomException("状态错误,无法操作");
             }
             LoginUser loginUser = SecurityUtils.getLoginUser();
@@ -373,22 +373,39 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
                     throw new CustomException("您没有确认审核权限");
                 }
             }
+            if(orderGoodsRefund.getPeriodStatus()==3&&bo.getPeriodStatus()==2){
+                throw new CustomException("操作状态错误");
+            }
             LambdaUpdateWrapper<OrderGoodsRefund> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper.eq(OrderGoodsRefund::getRefundId, bo.getRefundId());
-
             objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodStatus, bo.getPeriodStatus());
             objectLambdaUpdateWrapper.set(OrderGoodsRefund::getUpdateTime,DateUtils.getNowTime());
-            objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewTime,DateUtils.getNowTime());
-            objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewReason, bo.getPeriodReviewReason());
             objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewUsername, SecurityUtils.getUsername());
+            if(Validator.isNotEmpty(bo.getPeriodReviewReason())){
+                objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewReason, bo.getPeriodReviewReason());
+            }
+            //上一次是待退款状态,本次已退款
+            if(orderGoodsRefund.getPeriodStatus()==2&&bo.getPeriodStatus()==3){
+                objectLambdaUpdateWrapper.set(OrderGoodsRefund::getRefundTime,DateUtils.getNowTime());
+            }
+            //上一次是初审状态,本次已退款
+            if(orderGoodsRefund.getPeriodStatus()==1&&bo.getPeriodStatus()==3){
+                objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewTime,DateUtils.getNowTime());
+                objectLambdaUpdateWrapper.set(OrderGoodsRefund::getRefundTime,DateUtils.getNowTime());
+            }
+            //上一次是初审状态,本次待退款
+            if(orderGoodsRefund.getPeriodStatus()==1&&bo.getPeriodStatus()==2){
+                objectLambdaUpdateWrapper.set(OrderGoodsRefund::getPeriodReviewTime,DateUtils.getNowTime());
+            }
 
             this.update(null, objectLambdaUpdateWrapper);
 
-            if(bo.getPeriodStatus()==2){
+            //同意且已退款
+            if(bo.getPeriodStatus()==3){
                 //修改订单商品退款状态
                 OrderGoods orderGoodsUpdate = new OrderGoods();
                 orderGoodsUpdate.setOrderGoodsId(orderGoodsRefund.getOrderGoodsId());
-                orderGoodsUpdate.setRefundStatus(2); //同意退款
+                orderGoodsUpdate.setRefundStatus(3); //同意退款
                 orderGoodsUpdate.setUpdateTime(DateUtils.getNowTime());
                 iOrderGoodsService.updateById(orderGoodsUpdate);
             }

+ 6 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsRefundVo.java

@@ -76,8 +76,8 @@ public class OrderGoodsRefundVo {
 	@ApiModelProperty("订单商品ID")
 	private Long orderGoodsId;
 	/** 审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过 */
-	@Excel(name = "审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过")
-	@ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过 -1初审不通过 -2复审不通过")
+	@Excel(name = "审批状态 0 待审核 1初审通过 2复审通过待退款  -1初审不通过 -2复审不通过 3复审通过已退款")
+	@ApiModelProperty("审批状态 0 待审核 1初审通过 2复审通过待退款  -1初审不通过 -2复审不通过 3复审通过已退款")
 	private Integer periodStatus;
 	/** 初审结果原因 */
 	@Excel(name = "初审结果原因")
@@ -132,4 +132,8 @@ public class OrderGoodsRefundVo {
 	private String telphone;
 	@ApiModelProperty("年份")
 	private Long year;
+	/** 退款时间 */
+	@Excel(name = "退款时间")
+	@ApiModelProperty("退款时间")
+	private Long refundTime;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInputVo.java

@@ -96,4 +96,6 @@ public class OrderInputVo {
 	private String orderSn;
 	@ApiModelProperty("订单来源 1业务员普通单 2祥粤云学堂小程序 3祥粤云学堂网站 4祥粤e管证小程序 5业务员录单")
 	private String orderFrom;
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/ExamStudyRecordVo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.user.vo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -90,5 +91,14 @@ public class ExamStudyRecordVo {
     @ApiModelProperty("试卷详情")
     private List<ExamSonStudyRecordVo> examSonStudyRecordVos;
 
+    /** 服务有效期开始 */
+    @Excel(name = "服务有效期开始")
+    @ApiModelProperty("服务有效期开始")
+    private Long serviceStartTime;
+    /** 服务有效期结束 */
+    @Excel(name = "服务有效期结束")
+    @ApiModelProperty("服务有效期结束")
+    private Long serviceEndTime;
+
 
 }

+ 9 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/GoodsStudyRecordVo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.user.vo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -97,6 +98,13 @@ public class GoodsStudyRecordVo {
     /** 課程科目返回 */
     @ApiModelProperty("課程科目返回")
     private List<SubjectStudyRecordVo> subjectStudyRecordVos;
-
+    /** 服务有效期开始 */
+    @Excel(name = "服务有效期开始")
+    @ApiModelProperty("服务有效期开始")
+    private Long serviceStartTime;
+    /** 服务有效期结束 */
+    @Excel(name = "服务有效期结束")
+    @ApiModelProperty("服务有效期结束")
+    private Long serviceEndTime;
 
 }

+ 5 - 1
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -152,6 +152,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="interfacePushId" column="interface_push_id"/>
         <result property="periodPlush" column="period_plush"/>
         <result property="rebuyOrderGoodsId" column="rebuy_order_goods_id"/>
+        <result property="serviceStartTime" column="service_start_time"/>
+        <result property="serviceEndTime" column="service_end_time"/>
     </resultMap>
 
 
@@ -319,7 +321,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         (SELECT COUNT(DISTINCT ubr.module_id,ubr.chapter_id,ubr.exam_id) FROM user_bank_record ubr LEFT JOIN class_grade_goods cgg on cgg.goods_id = ubr.goods_id where ubr.`status`=1 and ubr.user_id = u.user_id and ubr.grade_id = cgu.grade_id and ubr.report_status=1 and ubr.current_status = 1) as record_num,
         (og.study_count) as study_count,
         og.order_goods_id,
-        og.rebuy_order_goods_id
+        og.rebuy_order_goods_id,
+        og.service_start_time,
+        og.service_end_time
         FROM
         class_grade_user cgu
         LEFT JOIN class_grade cg ON cgu.grade_id = cg.grade_id

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -107,6 +107,8 @@
         <result property="classStartTime" column="class_start_time"/>
         <result property="classEndTime" column="class_end_time"/>
         <result property="periodStatusNum" column="period_status_num"/>
+        <result property="serviceStartTime" column="service_start_time"/>
+        <result property="serviceEndTime" column="service_end_time"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.grade.vo.ClassPeriodUserVo" id="ClassPeriodUserVo">
@@ -314,6 +316,8 @@
         up.key_value,
         </if>
         cgu.period_time as end_time,
+        (SELECT og.service_start_time FROM order_goods og  where og.order_goods_id = cgu.order_goods_id ) as service_start_time,
+        (SELECT og.service_end_time FROM order_goods og  where og.order_goods_id = cgu.order_goods_id ) as service_end_time,
         (SELECT COUNT(DISTINCT ubr.module_id,ubr.chapter_id,ubr.exam_id) FROM user_bank_record ubr  where ubr.`status`=1 and ubr.report_status=1 and ubr.grade_id = cgu.grade_id and ubr.user_id = cgu.user_id and ubr.current_status = 1) as record_num
         <if test="userPhoto == null">
       ,(select COUNT(up.id) from user_period up LEFT JOIN user_period_status ups on up.id=ups.period_id where up.goods_id = (SELECT cgg.goods_id FROM class_grade_goods cgg where cg.grade_id=cgg.grade_id) and up.grade_id = cgu.grade_id and up.user_id = u.user_id

+ 7 - 2
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsRefundMapper.xml

@@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="periodReviewUsername" column="period_review_username"/>
         <result property="periodTime" column="period_time"/>
         <result property="periodReviewTime" column="period_review_time"/>
+        <result property="refundTime" column="refund_time"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.order.vo.OrderGoodsRefundVo" id="OrderGoodsRefundVoResult">
@@ -62,6 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="idCard" column="id_card"/>
         <result property="telphone" column="telphone"/>
         <result property="year" column="year"/>
+        <result property="refundTime" column="refund_time"/>
     </resultMap>
 
     <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderGoodsRefundQueryBo" resultMap="OrderGoodsRefundVoResult">
@@ -98,8 +100,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="type != null">
             AND gr.type = #{type}
         </if>
-        <if test="periodStatus != null">
-            AND gr.period_status = #{periodStatus}
+        <if test="periodStatus != null ">
+            AND gr.period_status in
+            <foreach collection="periodStatus" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
         </if>
         <if test="businessId != null and businessId != ''">
             AND g.business_id = #{businessId}

+ 3 - 1
zhongzheng-system/src/main/resources/mapper/modules/order/OrderInputMapper.xml

@@ -42,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="orderSn" column="order_sn"/>
         <result property="userId" column="user_id"/>
         <result property="orderFrom" column="order_from"/>
+        <result property="orderGoodsId" column="order_goods_id"/>
     </resultMap>
 
     <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderInputQueryBo" resultMap="OrderInputVoResult">
@@ -134,7 +135,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             g.goods_id,
             g.goods_name,
             o.order_sn,
-            o.order_from
+            o.order_from,
+            og.order_goods_id
         FROM
             order_input oi
                 LEFT JOIN `order` o ON oi.input_order_sn = o.input_order_sn

+ 9 - 2
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -39,7 +39,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="educationName" column="education_name"/>
         <result property="startTime" column="start_time"/>
         <result property="endTime" column="end_time"/>
-
+        <result property="studyStartTime" column="study_start_time"/>
+        <result property="studyEndTime" column="study_end_time"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.user.vo.SubjectStudyRecordVo" id="SubjectStudyRecordVoResult">
@@ -86,6 +87,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="educationName" column="education_name"/>
         <result property="examNum" column="exam_num"/>
         <result property="stuAllNum" column="stu_all_num"/>
+        <result property="serviceStartTime" column="service_start_time"/>
+        <result property="serviceEndTime" column="service_end_time"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.user.vo.ExamSonStudyRecordVo" id="ExamSonStudyRecordVoResult">
@@ -158,6 +161,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         g.goods_id,
         u.grade_id,
         u.user_id,
+        (SELECT og.service_start_time FROM order_goods og  where og.order_goods_id = u.order_goods_id ) as service_start_time,
+        (SELECT og.service_end_time FROM order_goods og  where og.order_goods_id = u.order_goods_id ) as service_end_time,
         (SELECT i.business_name FROM course_business i where i.id = g.business_id) as business_name,
         (SELECT p.project_name FROM course_project_type p where p.id = g.project_id) as project_name,
         (SELECT s.school_name FROM school s  where s.id = g.school_id) as school_name,
@@ -408,7 +413,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         (SELECT COUNT(a.id)+(SELECT COUNT(a.id) FROM goods_attached e LEFT JOIN question_chapter_exam a on e.major_id = a.chapter_exam_id where e.goods_id = g.goods_id and e.type=2)+(SELECT COUNT(h.id) FROM goods_attached e LEFT JOIN question_module_chapter a on e.major_id = a.module_exam_id LEFT JOIN question_chapter_exam h on a.chapter_exam_id = h.chapter_exam_id  where e.goods_id = g.goods_id and e.type=1) FROM goods_attached a where a.goods_id=g.goods_id and a.type = 3) as exam_num,
         (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.user_id = #{userId} ORDER BY create_time ASC LIMIT 1) as start_time,
         (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.user_id = #{userId} ORDER BY create_time DESC LIMIT 1) as end_time,
-        (SELECT COUNT(DISTINCT exam_id) FROM user_exam_record r where r.goods_id=g.goods_id  AND r.user_id = #{userId}) as stu_all_num
+        (SELECT COUNT(DISTINCT exam_id) FROM user_exam_record r where r.goods_id=g.goods_id  AND r.user_id = #{userId}) as stu_all_num,
+        s.service_start_time,
+        s.service_end_time
         FROM
         goods g
         LEFT JOIN order_goods s ON g.goods_id = s.goods_id AND s.pay_status in (2,3)