瀏覽代碼

Merge branch 'dev'

yangdamao 1 年之前
父節點
當前提交
69db8590c5
共有 21 個文件被更改,包括 361 次插入32 次删除
  1. 1 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  2. 7 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  3. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  4. 2 2
      zhongzheng-api/src/main/resources/application-dev.yml
  5. 4 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  6. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationBo.java
  7. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationListBo.java
  8. 19 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationUserBo.java
  9. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  10. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  11. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  12. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassExpirationVo.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  14. 109 18
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  15. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/polyv/mapper/PolyvVideoMapper.java
  16. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java
  17. 64 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  18. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java
  19. 6 3
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  20. 14 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  21. 41 0
      zhongzheng-system/src/main/resources/mapper/modules/polyv/PolyvVideoMapper.xml

+ 1 - 0
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -168,6 +168,7 @@ oldOrder:
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
+    classEndSaleTipMsg: http://gdxypx.xy.com/WitSystem/BussinessApi/ClassEndSaleTipMsg
 oldSys:
 oldSys:
     host: http://gdxypx.xy.com
     host: http://gdxypx.xy.com
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin

+ 7 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -493,4 +493,11 @@ public class ScheduleController extends BaseController {
         iScheduleService.orderCourseNum();
         iScheduleService.orderCourseNum();
         return AjaxResult.success();
         return AjaxResult.success();
     }
     }
+
+    @ApiOperation("班级过期提示")
+    @GetMapping("/class/expiration/reminder")
+    public AjaxResult classExpirationReminder(){
+        iScheduleService.classExpirationReminder();
+        return AjaxResult.success();
+    }
 }
 }

+ 1 - 0
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -169,6 +169,7 @@ oldOrder:
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
+    classEndSaleTipMsg: http://gdxypx.xy.com/WitSystem/BussinessApi/ClassEndSaleTipMsg
 
 
 oldSys:
 oldSys:
     host: http://gdxypx.xy.com
     host: http://gdxypx.xy.com

+ 2 - 2
zhongzheng-api/src/main/resources/application-dev.yml

@@ -137,7 +137,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
-    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass0
 
 
 officialPush:
 officialPush:
     infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
     infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan
@@ -171,7 +171,7 @@ oldOrder:
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
     getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
-
+    classEndSaleTipMsg: http://gdxypx.xy.com/WitSystem/BussinessApi/ClassEndSaleTipMsg
 oldSys:
 oldSys:
     host: http://gdxypx.xy.com
     host: http://gdxypx.xy.com
     goods: http://gdxypx.xy.com/System/BussinessApi/NewYxtLogin
     goods: http://gdxypx.xy.com/System/BussinessApi/NewYxtLogin

+ 4 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -1122,6 +1122,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 //            if(Validator.isEmpty(bo.getIdCard())){
 //            if(Validator.isEmpty(bo.getIdCard())){
 //                throw new CustomException("用户身份证号码缺失");
 //                throw new CustomException("用户身份证号码缺失");
 //            }
 //            }
+            //身份证带X换大写
+            if (StringUtils.isNotBlank(bo.getIdCard()) && bo.getIdCard().contains("x")){
+                bo.setIdCard(bo.getIdCard().replace("x","X"));
+            }
             if (StringUtils.isNotBlank(bo.getIdCard())){
             if (StringUtils.isNotBlank(bo.getIdCard())){
                 User user2 = getOne(new LambdaQueryWrapper<User>()
                 User user2 = getOne(new LambdaQueryWrapper<User>()
                         .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));
                         .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationBo.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.grade.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月18日 14:09
+ */
+@Data
+public class ClassExpirationBo implements Serializable {
+
+    private String sign;
+
+    private Long stamp;
+
+    private List<ClassExpirationListBo> list;
+}

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationListBo.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.grade.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月18日 14:09
+ */
+@Data
+public class ClassExpirationListBo implements Serializable {
+
+    private String orderNo;
+
+    private String name;
+
+    private String remark;
+
+}

+ 19 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassExpirationUserBo.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.modules.grade.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月18日 14:09
+ */
+@Data
+public class ClassExpirationUserBo implements Serializable {
+
+    private String inputOrderSn;
+
+    private Long gradeId;
+
+}

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java

@@ -49,6 +49,11 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
 	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
 	private String isAsc;
 	private String isAsc;
 
 
+	/**
+	 * 排序標識
+	 */
+	private Integer ascSort = 0;
+
 	/**
 	/**
 	 * 学员ID
 	 * 学员ID
 	 */
 	 */

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.Page;
@@ -78,7 +79,6 @@ import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
 import com.zhongzheng.modules.user.mapper.UserStudyRecordPhotoMapper;
 import com.zhongzheng.modules.user.mapper.UserStudyRecordPhotoMapper;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.*;
 import com.zhongzheng.modules.user.vo.*;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -1128,6 +1128,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
 
     @Override
     @Override
     public List<ClassPeriodStudentVo> listUserPeriodManage(ClassGradeUserQueryBo bo) {
     public List<ClassPeriodStudentVo> listUserPeriodManage(ClassGradeUserQueryBo bo) {
+
         //查询班级学员信息
         //查询班级学员信息
         List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.listUserPeriod(bo);
         List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.listUserPeriod(bo);
         //查找学员学习记录
         //查找学员学习记录
@@ -2198,6 +2199,11 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
 
     @Override
     @Override
     public List<ClassPeriodStudentVo> listUserPeriod(ClassGradeUserQueryBo bo) {
     public List<ClassPeriodStudentVo> listUserPeriod(ClassGradeUserQueryBo bo) {
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        if (StringUtils.isNotBlank(tenantId) && tenantId.equals("779352047136603")){
+           //豪邦的學時審核按修改時間排序
+            bo.setAscSort(1);
+        }
         //查询班级学员信息
         //查询班级学员信息
         List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.listUserPeriod(bo);
         List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.listUserPeriod(bo);
         //查找学员学习记录
         //查找学员学习记录

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -609,6 +609,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     }
     }
 
 
     @Override
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean confirmRollbackPeriod(UserPeriodEditBo bo) {
     public Boolean confirmRollbackPeriod(UserPeriodEditBo bo) {
         if(Validator.isEmpty(bo.getOrderGoodsId())){
         if(Validator.isEmpty(bo.getOrderGoodsId())){
             throw new CustomException("参数错误");
             throw new CustomException("参数错误");
@@ -622,6 +623,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             throw new CustomException("数据错误");
             throw new CustomException("数据错误");
         }
         }
         bo.setGoodsId(orderGoods.getGoodsId());
         bo.setGoodsId(orderGoods.getGoodsId());
+
         CourseEducationType educationType = iCourseEducationTypeService.getOne(new LambdaQueryWrapper<CourseEducationType>().eq(CourseEducationType::getStatus, 1).eq(CourseEducationType::getEducationName,"继续教育").last("limit 1"));
         CourseEducationType educationType = iCourseEducationTypeService.getOne(new LambdaQueryWrapper<CourseEducationType>().eq(CourseEducationType::getStatus, 1).eq(CourseEducationType::getEducationName,"继续教育").last("limit 1"));
         CourseProjectType projectType = iCourseProjectTypeService.getOne(new LambdaQueryWrapper<CourseProjectType>().eq(CourseProjectType::getStatus, 1).eq(CourseProjectType::getEducationId,educationType.getId()).eq(CourseProjectType::getProjectName,"建造师").last("limit 1"));
         CourseProjectType projectType = iCourseProjectTypeService.getOne(new LambdaQueryWrapper<CourseProjectType>().eq(CourseProjectType::getStatus, 1).eq(CourseProjectType::getEducationId,educationType.getId()).eq(CourseProjectType::getProjectName,"建造师").last("limit 1"));
         CourseBusiness business = iCourseBusinessService.getOne(new LambdaQueryWrapper<CourseBusiness>().eq(CourseBusiness::getStatus, 1).eq(CourseBusiness::getProjectId,projectType.getId()).eq(CourseBusiness::getBusinessName,"二级").last("limit 1"));
         CourseBusiness business = iCourseBusinessService.getOne(new LambdaQueryWrapper<CourseBusiness>().eq(CourseBusiness::getStatus, 1).eq(CourseBusiness::getProjectId,projectType.getId()).eq(CourseBusiness::getBusinessName,"二级").last("limit 1"));
@@ -674,6 +676,8 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
             iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
             UserPeriodQueryBo periodQueryBo = new UserPeriodQueryBo();
             UserPeriodQueryBo periodQueryBo = new UserPeriodQueryBo();
             periodQueryBo.setOrderGoodsId(bo.getOrderGoodsId());
             periodQueryBo.setOrderGoodsId(bo.getOrderGoodsId());
+            periodQueryBo.setGradeId(classGradeUser.getGradeId());
+            periodQueryBo.setUserId(classGradeUser.getUserId());
             periodQueryBo.setPeriodStatus(1);
             periodQueryBo.setPeriodStatus(1);
             periodQueryBo.setUserId(classGradeUser.getUserId());
             periodQueryBo.setUserId(classGradeUser.getUserId());
             periodQueryBo.setGradeId(classGradeUser.getGradeId());
             periodQueryBo.setGradeId(classGradeUser.getGradeId());

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassExpirationVo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.grade.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月18日 10:54
+ */
+@Data
+public class ClassExpirationVo implements Serializable {
+
+    private Long gradeId;
+
+    private String className;
+
+    private Long classStartTime;
+
+    private Long classEndTime;
+
+    private String orderSn;
+
+    private String inputOrderSn;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java

@@ -70,4 +70,6 @@ public interface OrderMapper extends BaseMapper<Order> {
     List<String> getBusinessNameBySn(String orderSn);
     List<String> getBusinessNameBySn(String orderSn);
 
 
     Long getOrderGoodsByBo(@Param("goodsId") Long goodsId,@Param("userId") Long userId);
     Long getOrderGoodsByBo(@Param("goodsId") Long goodsId,@Param("userId") Long userId);
+
+    Long getCountByGoods(@Param("goodsIds") List<Long> goodsIds);
 }
 }

+ 109 - 18
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -1341,6 +1341,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         add.setOrderType(Order.CONSUME_ORDER);
         add.setOrderType(Order.CONSUME_ORDER);
         //订单运营类型
         //订单运营类型
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant tenant = sysTenantService.getById(tenantId);
+        if (ObjectUtils.isNotNull(tenant) && tenant.getSevenPayment() == 1){
+            //判断是否包含七大员商品
+            Long count = baseMapper.getCountByGoods(bo.getGoodsList().stream().map(OrderGoodsAddBo::getGoodsId).collect(Collectors.toList()));
+            if (count > 0){
+                throw new CustomException("您好,因报名资料需审核,该培训项目暂不支持线上支付,报名请联系客服13332983411(微信同号)",601);
+            }
+        }
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         if (ObjectUtils.isNotNull(oldOrg)){
         if (ObjectUtils.isNotNull(oldOrg)){
             add.setOperationType(oldOrg.getOperationType());
             add.setOperationType(oldOrg.getOperationType());
@@ -1777,6 +1785,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         add.setOrderType(Order.CONSUME_ORDER);
         add.setOrderType(Order.CONSUME_ORDER);
         //订单运营类型
         //订单运营类型
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant tenant = sysTenantService.getById(tenantId);
+        if (ObjectUtils.isNotNull(tenant) && tenant.getSevenPayment() == 1){
+            //判断是否包含七大员商品
+            Long count = baseMapper.getCountByGoods(bo.getGoodsList().stream().map(OrderGoodsAddBo::getGoodsId).collect(Collectors.toList()));
+            if (count > 0){
+                throw new CustomException("您好,因报名资料需审核,该培训项目暂不支持线上支付,报名请联系客服13332983411(微信同号)",601);
+            }
+        }
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         if (ObjectUtils.isNotNull(oldOrg)){
         if (ObjectUtils.isNotNull(oldOrg)){
             add.setOperationType(oldOrg.getOperationType());
             add.setOperationType(oldOrg.getOperationType());
@@ -2000,6 +2016,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         add.setOrderType(Order.CONSUME_ORDER);
         add.setOrderType(Order.CONSUME_ORDER);
         //订单运营类型
         //订单运营类型
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant tenant = sysTenantService.getById(tenantId);
+        if (ObjectUtils.isNotNull(tenant) && tenant.getSevenPayment() == 1){
+            //判断是否包含七大员商品
+            Long count = baseMapper.getCountByGoods(bo.getGoodsList().stream().map(OrderGoodsAddBo::getGoodsId).collect(Collectors.toList()));
+            if (count > 0){
+                throw new CustomException("您好,因报名资料需审核,该培训项目暂不支持线上支付,报名请联系客服13332983411(微信同号)",601);
+            }
+        }
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
         if (ObjectUtils.isNotNull(oldOrg)){
         if (ObjectUtils.isNotNull(oldOrg)){
             add.setOperationType(oldOrg.getOperationType());
             add.setOperationType(oldOrg.getOperationType());
@@ -3609,6 +3633,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
      */
      */
     @Override
     @Override
     public Long sysChangeGrade(Long goodsId, Long orderGoodsId, Long gradeId, Long userId) {
     public Long sysChangeGrade(Long goodsId, Long orderGoodsId, Long gradeId, Long userId) {
+        String businessFull = iGoodsService.getGoodsBusinessName(goodsId);
+        Goods goods = iGoodsService.getById(goodsId);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant sysTenant = iSysTenantService.getById(Long.valueOf(tenantId));
         //指定班级
         //指定班级
         if (gradeId != null && gradeId > 0) {
         if (gradeId != null && gradeId > 0) {
             ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
             ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
@@ -3623,31 +3651,94 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             if (gradeGoods == null) {
             if (gradeGoods == null) {
                 throw new CustomException("该班级不支持该商品使用");
                 throw new CustomException("该班级不支持该商品使用");
             }
             }
-            LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
-            lqw.eq(ClassGradeUser::getGradeId, gradeId);
-            lqw.eq(ClassGradeUser::getStatus, 1);
-            int studentNum = iClassGradeUserService.count(lqw);
-            //临时锁定的班级学员数量
-            LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
-            lqwLock.eq(ClassGradeUserTemp::getGradeId, gradeId);
-            lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
-            int locakStudentNum = iClassGradeUserTempService.count(lqwLock);
+
+            int locakStudentNum = 0;
+            Boolean sevenFlag = false;
+            if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
+                if (ObjectUtils.isNotNull(sysTenant.getSevenClass()) && sysTenant.getSevenClass() == 1){
+                    //七大员继教班级共享
+                    locakStudentNum = baseMapper.getStudeCountByCodeNoTenant(classGradeVo.getSevenCode());
+                }else {
+                    locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+                }
+                sevenFlag = true;
+            }else {
+                LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
+                lqw.eq(ClassGradeUser::getGradeId, gradeId);
+                lqw.eq(ClassGradeUser::getStatus, 1);
+                int studentNum = iClassGradeUserService.count(lqw);
+                //临时锁定的班级学员数量
+                LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
+                lqwLock.eq(ClassGradeUserTemp::getGradeId, gradeId);
+                lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
+                int count = iClassGradeUserTempService.count(lqwLock);
+                locakStudentNum = studentNum+count;
+
+            }
             //预留0空位避免超人数
             //预留0空位避免超人数
-            if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
-                //班级还有剩位,直接加入班级
-                Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, goodsId));
-                if (iClassGradeService.checkEjjjPeopleNumLimit(goods.getBusinessId(), gradeId)) { //判断全系统平台二建班级人数是否超300
-                    joinGrade(orderGoodsId, gradeId, userId);
-                    return gradeId;
-                } else {
-                    throw new CustomException("该二建班级学员已满,请重新选班");
+            if ((classGradeVo.getStudentUpper() - locakStudentNum) > 0) {
+                ClassGradeUser gradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>().eq(ClassGradeUser::getGradeId, gradeId)
+                        .eq(sevenFlag,ClassGradeUser::getOrderGoodsId,orderGoodsId)
+                        .eq(ClassGradeUser::getUserId, userId)
+                        .last("limit 1"));
+                if (ObjectUtils.isNotNull(gradeUser) && gradeUser.getStatus() == 1){
+                    throw new CustomException("学员已在此班级报名,请选择其他班级!");
                 }
                 }
+                //不在此班级内
+                if (Validator.isEmpty(gradeUser)) {
+                    //班级还有剩位,直接锁定班级
+                    if (iClassGradeService.checkEjjjPeopleNumLimit(goods.getBusinessId(), gradeId)) { //判断全系统平台二建班级人数是否超300
+                        joinGrade(orderGoodsId, gradeId, userId);
+                        return gradeId;
+                    }else {
+                        throw new CustomException("该二建班级学员已满,请重新选班");
+                    }
 
 
-            } else {
+                }
+            }else {
                 throw new CustomException("该班级学员已满,请重新选班");
                 throw new CustomException("该班级学员已满,请重新选班");
             }
             }
         }
         }
 
 
+        //指定班级
+//        if (gradeId != null && gradeId > 0) {
+//            ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
+//            if (classGradeVo == null) {
+//                throw new CustomException("班级不存在");
+//            }
+//            if (classGradeVo.getStatus() != 1) {
+//                throw new CustomException("班级已失效");
+//            }
+//            ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId, gradeId)
+//                    .eq(ClassGradeGoods::getGoodsId, goodsId));
+//            if (gradeGoods == null) {
+//                throw new CustomException("该班级不支持该商品使用");
+//            }
+//            LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
+//            lqw.eq(ClassGradeUser::getGradeId, gradeId);
+//            lqw.eq(ClassGradeUser::getStatus, 1);
+//            int studentNum = iClassGradeUserService.count(lqw);
+//            //临时锁定的班级学员数量
+//            LambdaQueryWrapper<ClassGradeUserTemp> lqwLock = new LambdaQueryWrapper<>();
+//            lqwLock.eq(ClassGradeUserTemp::getGradeId, gradeId);
+//            lqwLock.eq(ClassGradeUserTemp::getStatus, 1);
+//            int locakStudentNum = iClassGradeUserTempService.count(lqwLock);
+//            //预留0空位避免超人数
+//            if ((classGradeVo.getStudentUpper() - studentNum - locakStudentNum) > 0) {
+//                //班级还有剩位,直接加入班级
+//                Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, goodsId));
+//                if (iClassGradeService.checkEjjjPeopleNumLimit(goods.getBusinessId(), gradeId)) { //判断全系统平台二建班级人数是否超300
+//                    joinGrade(orderGoodsId, gradeId, userId);
+//                    return gradeId;
+//                } else {
+//                    throw new CustomException("该二建班级学员已满,请重新选班");
+//                }
+//
+//            } else {
+//                throw new CustomException("该班级学员已满,请重新选班");
+//            }
+//        }
+
         return null;
         return null;
     }
     }
 
 

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/polyv/mapper/PolyvVideoMapper.java

@@ -1,6 +1,8 @@
 package com.zhongzheng.modules.polyv.mapper;
 package com.zhongzheng.modules.polyv.mapper;
 
 
 import com.zhongzheng.modules.exam.vo.ExamUserApplyVo;
 import com.zhongzheng.modules.exam.vo.ExamUserApplyVo;
+import com.zhongzheng.modules.grade.bo.ClassExpirationUserBo;
+import com.zhongzheng.modules.grade.vo.ClassExpirationVo;
 import com.zhongzheng.modules.polyv.domain.PolyvVideo;
 import com.zhongzheng.modules.polyv.domain.PolyvVideo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
 import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
@@ -20,4 +22,8 @@ public interface PolyvVideoMapper extends BaseMapper<PolyvVideo> {
 
 
 
 
     Long selectGoodsPlanCount(@Param("goodsId") Long aLong,@Param("planId") Long planId);
     Long selectGoodsPlanCount(@Param("goodsId") Long aLong,@Param("planId") Long planId);
+
+    List<ClassExpirationVo> getClassExpirationList();
+
+    List<String> getOrderUserName(ClassExpirationUserBo bo);
 }
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java

@@ -126,4 +126,6 @@ public interface IScheduleService extends IService<PolyvVideo> {
 
 
     void orderCourseNum();
     void orderCourseNum();
 
 
+    void classExpirationReminder();
+
 }
 }

+ 64 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java

@@ -17,6 +17,7 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
@@ -63,11 +64,11 @@ import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.BankGoodsExamVo;
 import com.zhongzheng.modules.goods.vo.BankGoodsExamVo;
 import com.zhongzheng.modules.goods.vo.GoodsCourseVo;
 import com.zhongzheng.modules.goods.vo.GoodsCourseVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
-import com.zhongzheng.modules.grade.bo.ClassGradeQueryBo;
-import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.service.*;
+import com.zhongzheng.modules.grade.vo.ClassExpirationVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodVo;
@@ -111,6 +112,7 @@ import com.zhongzheng.modules.system.service.ISysTaskService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.top.financial.bo.CheckOrderStudentBo;
 import com.zhongzheng.modules.top.financial.bo.TopDivideOrderAddBo;
 import com.zhongzheng.modules.top.financial.bo.TopDivideOrderAddBo;
 import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
 import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
 import com.zhongzheng.modules.top.financial.domain.TopDivideLog;
 import com.zhongzheng.modules.top.financial.domain.TopDivideLog;
@@ -118,6 +120,10 @@ import com.zhongzheng.modules.top.financial.service.ITopDivideLogService;
 import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
 import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
 import com.zhongzheng.modules.top.financial.vo.TopCreateUserVo;
 import com.zhongzheng.modules.top.financial.vo.TopCreateUserVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderGoods;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderGoodsService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
 import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
 import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.*;
 import com.zhongzheng.modules.user.domain.*;
@@ -355,6 +361,10 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     private OssService ossService;
     private OssService ossService;
     @Autowired
     @Autowired
     private ClassGradeUserMapper classGradeUserMapper;
     private ClassGradeUserMapper classGradeUserMapper;
+    @Autowired
+    private ITopOldOrderService topOldOrderService;
+    @Autowired
+    private ITopOldOrderGoodsService topOldOrderGoodsService;
 
 
     @Value("${aliyun.sms.OpenTheGoodsCode}")
     @Value("${aliyun.sms.OpenTheGoodsCode}")
     private String OpenTheGoodsCode;
     private String OpenTheGoodsCode;
@@ -407,6 +417,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Value("${aliyun.sms.classEndRemind}")
     @Value("${aliyun.sms.classEndRemind}")
     private String classEndRemind;
     private String classEndRemind;
 
 
+    @Value("${oldOrder.classEndSaleTipMsg}")
+    private String CLASS_END_SALETIP_MSG;
+
     @Autowired
     @Autowired
     private RedisCache redisCache;
     private RedisCache redisCache;
 
 
@@ -2204,6 +2217,54 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
 
 
     }
     }
 
 
+    @Override
+    public void classExpirationReminder() {
+        List<ClassExpirationVo> expirationVos =  baseMapper.getClassExpirationList();
+        if (CollectionUtils.isEmpty(expirationVos)){
+            return;
+        }
+        Map<Long, List<ClassExpirationVo>> map = expirationVos.stream().collect(Collectors.groupingBy(ClassExpirationVo::getGradeId));
+        List<ClassExpirationListBo> list = new ArrayList<>();
+        map.forEach((k,v) -> {
+            String name = v.get(0).getClassName();
+            Map<String, List<ClassExpirationVo>> collect = v.stream().collect(Collectors.groupingBy(ClassExpirationVo::getInputOrderSn));
+            collect.forEach((j,h) -> {
+                TopOldOrder oldOrder = topOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>()
+                        .eq(TopOldOrder::getInputOrderSn, j)
+                        .eq(TopOldOrder::getCheckStatus,1)
+                        .eq(TopOldOrder::getStatus,1)
+                        .last("limit 1"));
+                if (ObjectUtils.isNull(oldOrder)){
+                    return;
+                }
+                ClassExpirationListBo listBo = new ClassExpirationListBo();
+                listBo.setOrderNo(oldOrder.getOrderSn());
+                ClassExpirationUserBo userBo = new ClassExpirationUserBo();
+                userBo.setInputOrderSn(j);
+                userBo.setGradeId(k);
+                List<String> userNames = baseMapper.getOrderUserName(userBo);
+                listBo.setName(userNames.stream().collect(Collectors.joining(",")));
+                listBo.setRemark(String.format("%s还有10天过期",name));
+                list.add(listBo);
+            });
+        });
+        ClassExpirationBo bo = new ClassExpirationBo();
+        bo.setList(list);
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5(nowTime + "pubilc2022");
+        bo.setStamp(nowTime);
+        bo.setSign(sign);
+        String respone = "";
+        try {
+            respone = HttpUtils.sendPostHeader(CLASS_END_SALETIP_MSG, JSONObject.parseObject(JSONObject.toJSONString(bo)), new HashMap<>());
+            if (!respone.contains("\"Status\":true")) {
+                throw new CustomException("旧系统班级过期提醒接口请求错误");
+            }
+        } catch (Exception e) {
+            throw new CustomException("旧系统班级过期提醒接口请求错误");
+        }
+    }
+
 
 
     private String getWeeks(Long time){
     private String getWeeks(Long time){
         Calendar calendar = Calendar.getInstance();
         Calendar calendar = Calendar.getInstance();
@@ -2830,7 +2891,7 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
     @Override
     @Override
     public void liveToReplay(UserQueryBo bo) {
     public void liveToReplay(UserQueryBo bo) {
         Long nowTime = DateUtils.getNowTime();
         Long nowTime = DateUtils.getNowTime();
-        Long startTime = nowTime - 3600 * 24 * 7;
+        Long startTime = nowTime - 3600 * 24 * 7 ;
         List<CourseSectionVo> list = iCourseSectionService.overSectionList(startTime, nowTime);
         List<CourseSectionVo> list = iCourseSectionService.overSectionList(startTime, nowTime);
         for (CourseSectionVo sectionVo : list) {
         for (CourseSectionVo sectionVo : list) {
             PolyvLiveQueryBo queryBo = new PolyvLiveQueryBo();
             PolyvLiveQueryBo queryBo = new PolyvLiveQueryBo();
@@ -2851,11 +2912,6 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                                 sectionVo.setDurationTime(info.getDuration().longValue());
                                 sectionVo.setDurationTime(info.getDuration().longValue());
                                 sectionVo.setRealLiveEndTime(info.getEndTime().getTime() / 1000);
                                 sectionVo.setRealLiveEndTime(info.getEndTime().getTime() / 1000);
                                 sectionVo.setRealLiveStartTime(info.getStartTime().getTime() / 1000);
                                 sectionVo.setRealLiveStartTime(info.getStartTime().getTime() / 1000);
-                                PolyvLiveQueryBo queryBo1 = new PolyvLiveQueryBo();
-                                queryBo1.setChannelId(sectionVo.getLiveUrl());
-                                queryBo1.setSessionId(info.getChannelSessionId());
-                                LiveListChannelVideoLibraryResponse.ChannelVideoLibrary channelVideoLibrary = iPolyvLiveService.ListChannelVideoLibrary(queryBo1);
-                                sectionVo.setRecordingUrl(channelVideoLibrary.getVideoPoolId());
                                 sectionVo.setSectionType(3);
                                 sectionVo.setSectionType(3);
                                 CourseSection section = BeanUtil.toBean(sectionVo, CourseSection.class);
                                 CourseSection section = BeanUtil.toBean(sectionVo, CourseSection.class);
                                 section.setUpdateTime(DateUtils.getNowTime());
                                 section.setUpdateTime(DateUtils.getNowTime());

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

@@ -117,4 +117,6 @@ private static final long serialVersionUID=1L;
     private Integer periodSign;
     private Integer periodSign;
     /** 经办订单对公收款账户 */
     /** 经办订单对公收款账户 */
     private String handleBank;
     private String handleBank;
+    /** 是否关闭七大员在线付款 */
+    private Integer sevenPayment;
 }
 }

+ 6 - 3
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -664,15 +664,18 @@
         <if test="periodEndTime != null and periodEndTime !='' ">
         <if test="periodEndTime != null and periodEndTime !='' ">
             AND #{periodEndTime} >= cgu.period_time
             AND #{periodEndTime} >= cgu.period_time
         </if>
         </if>
-        <if test="periodStatus != 2 and periodStatus != 3">
+        <if test="periodStatus != 2 and periodStatus != 3 and ascSort == 0">
             order by cgu.update_time desc
             order by cgu.update_time desc
         </if>
         </if>
-        <if test="periodStatus == 2 ">
+        <if test="periodStatus == 2 and ascSort == 0">
             order by cgu.period_wait_time,cgu.create_time
             order by cgu.period_wait_time,cgu.create_time
         </if>
         </if>
-        <if test="periodStatus == 3 ">
+        <if test="periodStatus == 3 and ascSort == 0">
             order by cgu.period_ing_time,cgu.create_time
             order by cgu.period_ing_time,cgu.create_time
         </if>
         </if>
+        <if test="ascSort == 1 ">
+            order by cgu.update_time desc
+        </if>
     </select>
     </select>
 
 
 
 

+ 14 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

@@ -719,4 +719,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         NOW()) <![CDATA[ <= ]]> og.service_end_time
         NOW()) <![CDATA[ <= ]]> og.service_end_time
     </select>
     </select>
 
 
+    <select id="getCountByGoods" resultType="java.lang.Long" parameterType="java.lang.Long">
+        SELECT
+        COUNT(*)
+        FROM
+        goods g
+        LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+        WHERE
+        INSTR( cpt.project_name, '施工现场专业人员' )
+        AND g.goods_id IN
+        <foreach collection="goodsIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
+
 </mapper>
 </mapper>

+ 41 - 0
zhongzheng-system/src/main/resources/mapper/modules/polyv/PolyvVideoMapper.xml

@@ -68,4 +68,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             usr.plan_id = #{planId}
             usr.plan_id = #{planId}
           and usr.goods_id = #{goodsId}
           and usr.goods_id = #{goodsId}
     </select>
     </select>
+
+     <select id="getClassExpirationList" resultType="com.zhongzheng.modules.grade.vo.ClassExpirationVo">
+         SELECT
+            cg.grade_id,
+            cg.class_name,
+            cg.class_start_time,
+            cg.class_end_time,
+            o.order_sn,
+            o.input_order_sn
+         FROM
+            class_grade cg
+            LEFT JOIN order_goods og ON cg.grade_id = og.grade_id
+            LEFT JOIN `order` o ON og.order_sn = o.order_sn
+         WHERE
+            cg.`status` = 1
+            AND cg.class_status = 1
+            AND og.pay_status != 1
+            AND og.refund_status != 2
+            AND og.`status` = 1
+            AND o.`status` = 1
+            AND o.input_order_sn IS NOT NULL
+            AND cg.class_end_time <![CDATA[ <= ]]> (UNIX_TIMESTAMP() + 864000)
+            AND cg.class_end_time <![CDATA[ >= ]]> (UNIX_TIMESTAMP() + 777600)
+    </select>
+
+
+    <select id="getOrderUserName" parameterType="com.zhongzheng.modules.grade.bo.ClassExpirationUserBo" resultType="java.lang.String">
+        SELECT
+            u.realname
+        FROM
+            `order` o
+                LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+                LEFT JOIN `user` u ON o.user_id = u.user_id
+        WHERE
+            o.`status` = 1
+            AND og.`status` = 1
+            AND og.pay_status != 1
+	        AND og.refund_status != 2
+	        AND o.input_order_sn = #{inputOrderSn}
+            AND og.grade_id = #{gradeId}
+    </select>
 </mapper>
 </mapper>