Explorar el Código

Merge branch 'dev' of http://120.79.166.78:19005/zhongzheng-edu/saas_entrepot into dev

renqianlong hace 1 año
padre
commit
03cf7db211
Se han modificado 35 ficheros con 394 adiciones y 38 borrados
  1. 1 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  2. 18 13
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  3. 8 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java
  4. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  5. 1 0
      zhongzheng-api/src/main/resources/application-dev.yml
  6. 73 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  7. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  8. 23 13
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  9. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java
  10. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseBusiness.java
  12. 14 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionWatchPerServiceImpl.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseBusinessVo.java
  14. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java
  15. 27 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  16. 31 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  17. 12 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  18. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java
  19. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderBusinessConfigGoodsQueryBo.java
  20. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/IFaceOcrService.java
  21. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java
  22. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  23. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserLiveAccountLoginBo.java
  24. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserQueryBo.java
  25. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java
  26. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java
  27. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  28. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  29. 19 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyTimeVo.java
  30. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserSubscribeStudentExportVo.java
  31. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserVo.java
  32. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  33. 27 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  34. 48 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml
  35. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

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

@@ -173,6 +173,7 @@ oldSys:
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 18 - 13
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -80,11 +80,14 @@ import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
+import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.tencentcloud.service.IVodService;
 import com.zhongzheng.modules.top.user.bo.TopSysTenantRegisterAddBo;
 import com.zhongzheng.modules.top.user.service.ITopSysTenantRegisterService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
+import com.zhongzheng.modules.user.vo.UserStudyTimeVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import io.swagger.annotations.ApiOperation;
@@ -93,10 +96,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
@@ -179,7 +179,8 @@ public class CommonController extends BaseController {
 
     @Autowired
     private IMajorService iMajorService;
-    private IZsBankService iZsBankService;
+    @Autowired
+    private  IFaceOcrService iFaceService;
     /**
      * 通用下载请求
      *
@@ -640,6 +641,12 @@ public class CommonController extends BaseController {
         return AjaxResult.success("成功", iDistributionCashWithdrawalService.payCashCallBack(bo) ? 1 : 0);
     }
 
+    @ApiOperation("根据身份证查询当前学员是否有学习")
+    @GetMapping("common/free/getStudyTimeByCard")
+    public AjaxResult<UserStudyTimeVo> getStudyTimeByCard(@RequestParam("idCard")String idCard,@RequestParam("type")Integer type) {
+        return AjaxResult.success(iUserService.getStudyTimeByCard(idCard,type));
+    }
+
     /**
      * 获取企业ID
      */
@@ -812,7 +819,7 @@ public class CommonController extends BaseController {
     @GetMapping("/common/free/zsBank")
     public AjaxResult zsBank() {
         String date = DateUtils.dateTimeNow("yyyyMMdd");
-        System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
+   //     System.out.println(iZsBankService.searchBreakPoint(null,"755915680210507",date,date));
         return AjaxResult.success();
     }
 
@@ -878,12 +885,10 @@ public class CommonController extends BaseController {
         return AjaxResult.success();
     }
 
-    @ApiOperation("导入二建精选题目Word模板列表")
-    @PreAuthorize("@ss.hasPermi('system:question:import')")
-    @PostMapping("/common/free/importErJianWordQuestionList")
-    public AjaxResult<Map<String,Object>> importErJianWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
-    {
-        Map<String,Object> result = iQuestionService.importErJianWordQuestionList(file,  eduId,  projectId,  businessId, subjectId);
-        return AjaxResult.success(result);
+    @ApiOperation("人脸属性")
+    @PostMapping("/common/free/detectFaceAttributes")
+    public AjaxResult<Void> DetectFaceAttributes(@RequestBody FaceQueryBo bo) {
+        iFaceService.DetectFace(bo);
+        return AjaxResult.success();
     }
 }

+ 8 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -113,6 +113,14 @@ public class UserController extends BaseController {
         return AjaxResult.success(iUserService.queryById(userId));
     }
 
+
+    @ApiOperation("获取客户端用户密码")
+    @PreAuthorize("@ss.hasPermi('app:user:query')")
+    @GetMapping("/viewPwd/{userId}")
+    public AjaxResult<Void> viewPwd(@PathVariable("userId" ) Long userId) {
+        return AjaxResult.success(iUserService.viewPwd(userId));
+    }
+
     /**
      * 新增客户端用户
      */

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

@@ -174,6 +174,7 @@ oldSys:
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log

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

@@ -176,6 +176,7 @@ oldSys:
     goods: http://gdxypx.xy.com/System/BussinessApi/NewYxtLogin
     question: http://192.168.1.121:8057/WordData/GetMeasureList
     questionDetail: http://192.168.1.121:8057/WordData/GetTopicList
+    studyCheck: http://gdxypx.xy.com/System/BussinessApi/EjStudyCheck
 
 invoice:
     host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 73 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -86,6 +86,13 @@ import java.math.BigDecimal;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -181,6 +188,15 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return BeanUtil.toBean(db, UserVo.class);
     }
 
+    @Override
+    public String viewPwd(Long userId) {
+        User user = this.baseMapper.selectById(userId);
+        if(Validator.isNotEmpty(user.getPasswordAes())){
+            return EncryptHandler.decrypt(user.getPasswordAes());
+        }
+        return null;
+    }
+
     @Override
     public User queryByUnionId(String unionId) {
         User user = getOne(new LambdaQueryWrapper<User>()
@@ -262,6 +278,32 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Override
     public List<UserVo> dangAnList(UserQueryBo bo) {
+        if (ObjectUtils.isNotNull(bo.getApplyDateTime()) && bo.getApplyDateTime().length() == 6){
+            //根据月份筛选
+            String dateStr = String.format(bo.getApplyDateTime()); // 指定年月
+            LocalDate date = LocalDate.parse(dateStr + "01", DateTimeFormatter.BASIC_ISO_DATE);
+            LocalDate dateFirst = date.with(TemporalAdjusters.firstDayOfMonth()); // 指定年月的第一天
+            LocalDate dateEnd = date.with(TemporalAdjusters.lastDayOfMonth()); // 指定年月的最后一天
+            ZonedDateTime zonedDateTime1 = dateFirst.atStartOfDay(ZoneId.systemDefault());
+            Date date1 = Date.from(zonedDateTime1.toInstant());
+            ZonedDateTime zonedDateTime = dateEnd.atStartOfDay(ZoneId.systemDefault());
+            Date date2 = Date.from(zonedDateTime.toInstant());
+            Long startTime = date1.getTime()/1000;
+            Long endTime = (date2.getTime()/1000) + 86400;
+            bo.setMonthStartTime(startTime);
+            bo.setMonthEndTime(endTime);
+        }else if (ObjectUtils.isNotNull(bo.getApplyDateTime()) && bo.getApplyDateTime().length() > 6){
+            //根据某天筛选
+            String dateStr = String.format(bo.getApplyDateTime());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            try {
+                Date parse = sdf.parse(dateStr);
+                bo.setMonthStartTime(parse.getTime()/1000);
+                bo.setMonthEndTime(parse.getTime()/1000);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
         List<User> list = baseMapper.dangAnList(bo);
         return entity2UserVo(list);
     }
@@ -756,6 +798,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }else {
             pwd =  bo.getTel().substring(bo.getTel().length() - 6);
         }
+        inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
         inertData.setPassword(SecurityUtils.encryptPassword(pwd));
         if(!save(inertData)){
             throw new CustomException("注册失败");
@@ -814,6 +857,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         inertData.setLastLoginTime(DateUtils.getNowTime());
         inertData.setCreateTime(DateUtils.getNowTime());
         inertData.setUpdateTime(DateUtils.getNowTime());
+        inertData.setPasswordAes(EncryptHandler.encrypt(bo.getPwd()));
         inertData.setPassword(SecurityUtils.encryptPassword(bo.getPwd()));
         if (Validator.isNotEmpty(bo.getShareCode())) {
             inertData.setShareCode(bo.getShareCode());
@@ -931,6 +975,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //初始密码(身份证后6位)
             String idCard = itemImport.getIdCard();
             String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+            inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
             inertData.setPassword(SecurityUtils.encryptPassword(pwd));
             inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
             if(!save(inertData)){
@@ -1006,6 +1051,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         //初始密码(身份证后6位)
         String idCard = itemImport.getIdCard();
         String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+        inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
         inertData.setPassword(SecurityUtils.encryptPassword(pwd));
         inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
         if(!save(inertData)){
@@ -1032,6 +1078,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(!ToolsUtils.verifEasyPwd(bo.getNewPwd())){
             throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getNewPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getNewPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1052,6 +1099,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(!ToolsUtils.verifEasyPwd(bo.getNewPwd())){
             throw new CustomException("密码应由6-18位组成");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getNewPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getNewPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1294,6 +1342,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
+        user.setPasswordAes(EncryptHandler.encrypt(bo.getPwd()));
         user.setPassword(SecurityUtils.encryptPassword(bo.getPwd()));
         user.setPwdTime(DateUtils.getNowTime());
         user.setUpdateTime(DateUtils.getNowTime());
@@ -1444,7 +1493,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         if (!SecurityUtils.matchesPassword(password,user.getPassword()))
         {
-            iUserLoginErrorService.saveErrorLog(bo.getAccount());
+//            iUserLoginErrorService.saveErrorLog(bo.getAccount());
             throw new BaseException("登录信息错误");
         }
         Long tenantId = user.getTenantId();
@@ -1660,7 +1709,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         switch (bo.getUrlType()){
             case 1://H5
                 post = tenant.getHostH5();
-                path = "pages/webview/index";
+                path = "pages5/webview/index";
                 break;
             case 2://PC
                 post = tenant.getHostPc();
@@ -1796,6 +1845,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //初始密码(身份证后6位)
             String idCard = itemImport.getUserCard();
             String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+            inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
             inertData.setPassword(SecurityUtils.encryptPassword(pwd));
             inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
             if(!save(inertData)){
@@ -2020,6 +2070,27 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         iSysTaskService.updateById(task);
     }
 
+    @Override
+    public UserStudyTimeVo getStudyTimeByCard(String idCard,Integer type) {
+        UserStudyTimeVo vo = new UserStudyTimeVo();
+        vo.setIdCard(idCard);
+        User user = getByCardNoTenant(idCard);
+        if (ObjectUtils.isNull(user)){
+            vo.setStudyFlag(false);
+            return vo;
+        }
+        String business = type == 1? "继续教育二级建造师":"继续教育二级造价师";
+        //查询是否有二建课程在学习
+        Long studyTime = baseMapper.getFistStudyTime(user.getUserId(),user.getTenantId(),business);
+        if (ObjectUtils.isNull(studyTime)){
+            vo.setStudyFlag(false);
+            return vo;
+        }
+        vo.setStudyFlag(true);
+        vo.setStudyStartTime(studyTime);
+        return vo;
+    }
+
     @Override
     public Map<String, Object> accountLogin(UserAppAccountLoginBo bo) {
         if(Validator.isEmpty(bo.getAccount())){

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -390,6 +390,7 @@ public class WxLoginService implements IWxLoginService {
         bo.setUpdateTime(DateUtils.getNowTime());
 //        String pwd = ToolsUtils.getSmsCode(); // 随机密码
         String pwd = idCard.substring(idCard.length() - 6);
+        bo.setPasswordAes(EncryptHandler.encrypt(pwd));
         bo.setPassword(SecurityUtils.encryptPassword(pwd));
         if (inviteCode != null) {
             User inviteUser = iUserService.queryByAccount(inviteCode);

+ 23 - 13
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fasterxml.jackson.databind.exc.InvalidFormatException;
 import com.openhtmltopdf.swing.Java2DRenderer;
 import com.openhtmltopdf.util.FSImageWriter;
@@ -259,22 +260,23 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         //给模板绑定数据
         Calendar rightNow = Calendar.getInstance();
         Map<String, Object> bindingMap = new HashMap<>();
-        bindingMap.put("username", JSONObject.parseObject(String.valueOf(maps.get("name")), UserProfileFit.class).getValue());
-        bindingMap.put("s", JSONObject.parseObject(String.valueOf(maps.get("sex")), UserProfileFit.class).getValue());
-        bindingMap.put("post", JSONObject.parseObject(String.valueOf(maps.get("apply_post")), UserProfileFit.class).getValue());
-        bindingMap.put("idcard", JSONObject.parseObject(String.valueOf(maps.get("idcard")), UserProfileFit.class).getValue());
-        bindingMap.put("phone", JSONObject.parseObject(String.valueOf(maps.get("telphone")), UserProfileFit.class).getValue());
-        bindingMap.put("school", JSONObject.parseObject(String.valueOf(maps.get("school")), UserProfileFit.class).getValue());
-        bindingMap.put("edu", JSONObject.parseObject(String.valueOf(maps.get("education")), UserProfileFit.class).getValue());
-        bindingMap.put("major", JSONObject.parseObject(String.valueOf(maps.get("major")), UserProfileFit.class).getValue());
-        bindingMap.put("cname", JSONObject.parseObject(String.valueOf(maps.get("unit_contact")), UserProfileFit.class).getValue());
-        bindingMap.put("cphone", JSONObject.parseObject(String.valueOf(maps.get("unit_tel")), UserProfileFit.class).getValue());
-        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
+
+        bindingMap.put("username", jsonHandle(maps,"username"));
+        bindingMap.put("s", jsonHandle(maps,"s"));
+        bindingMap.put("post", jsonHandle(maps,"post"));
+        bindingMap.put("idcard", jsonHandle(maps,"idcard"));
+        bindingMap.put("phone", jsonHandle(maps,"phone"));
+        bindingMap.put("school", jsonHandle(maps,"school"));
+        bindingMap.put("edu", jsonHandle(maps,"edu"));
+        bindingMap.put("major", jsonHandle(maps,"major"));
+        bindingMap.put("cname", jsonHandle(maps,"cname"));
+        bindingMap.put("cphone", jsonHandle(maps,"cphone"));
+        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + jsonHandle(maps,"commitment_electr_signature"));
         bindingMap.put("y", Convert.toStr(rightNow.get(Calendar.YEAR)));
         bindingMap.put("m", rightNow.get(Calendar.MONTH) + 1);
         bindingMap.put("d", rightNow.get(Calendar.DAY_OF_MONTH));
-        bindingMap.put("time", JSONObject.parseObject(String.valueOf(maps.get("graduation_time")), UserProfileFit.class).getValue());
-        bindingMap.put("year", JSONObject.parseObject(String.valueOf(maps.get("working_years")), UserProfileFit.class).getValue());
+        bindingMap.put("time", jsonHandle(maps,"graduation_time"));
+        bindingMap.put("year", jsonHandle(maps,"working_years"));
         File touch = FileUtil.touch(ZHONGZHENG_PROFILE + imgIndex+"word.html");
         //默认freemake配置
         Configuration configuration = new Configuration();
@@ -309,6 +311,14 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         return upload;
     }
 
+    private String jsonHandle(Map<String,String> maps,String key){
+        UserProfileFit userProfileFit = JSONObject.parseObject(String.valueOf(maps.get(key)), UserProfileFit.class);
+        if (ObjectUtils.isNull(userProfileFit) || ObjectUtils.isNull(userProfileFit.getValue())){
+            return "";
+        }
+        return userProfileFit.getValue();
+    }
+
     @Override
     public String addWord(UserProfileAddBo bo) throws IOException {
         UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java

@@ -83,4 +83,6 @@ public class CourseBusinessAddBo {
     private Integer periodType;
     @ApiModelProperty("学时审核层级:1初审,2初审和复审")
     private Integer periodNumber;
+    @ApiModelProperty("学时审核标签:1开启 2关闭")
+    private Integer periodCheckSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java

@@ -94,4 +94,6 @@ public class CourseBusinessEditBo {
     private Integer periodType;
     @ApiModelProperty("学时审核层级:1初审,2初审和复审")
     private Integer periodNumber;
+    @ApiModelProperty("学时审核标签:1开启 2关闭")
+    private Integer periodCheckSign;
 }

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

@@ -72,6 +72,8 @@ private static final long serialVersionUID=1L;
     private Integer periodType;
     /** 学时审核层级:1初审,2初审和复审 */
     private Integer periodNumber;
+    /** 学时审核标签:1开启 2关闭 */
+    private Integer periodCheckSign;
     private Long tenantId;
 
     @TableField(exist = false)

+ 14 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionWatchPerServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.bo.CheckSectionWatchVo;
 import com.zhongzheng.modules.course.bo.SectionWatchPerAddBo;
 import com.zhongzheng.modules.course.bo.SectionWatchPerBo;
@@ -80,7 +81,8 @@ public class CourseSectionWatchPerServiceImpl extends ServiceImpl<CourseSectionW
             format = format + "&watchPer="+watchPer.getWatchPer();
         }
         String s = Base64.encode(format);
-        String url = String.format("%s?param=%s",liveHost,s);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        String url = String.format("%s?param=%s&tenantId=%s",liveHost,s,tenantId);
         vo.setEnCodePC(url);
         vo.setEnCode(url);
         if (ObjectUtils.isNull(watchPer)){
@@ -116,6 +118,17 @@ public class CourseSectionWatchPerServiceImpl extends ServiceImpl<CourseSectionW
         watchVo.setSectionId(bo.getSectionId());
         watchVo.setGoodsStatus(goods.getGoodsStatus());
         watchVo.setGoodsName(goods.getGoodsName());
+        //获取课程节信息
+        CourseSection section = courseSectionService.getById(bo.getSectionId());
+        //判断直播是否开始
+        if (ObjectUtils.isNotNull(section) && section.getSectionType() == 2){
+            if (section.getLiveStartTime() > DateUtils.getNowTime()){
+                //直播时间还没到
+                watchVo.setCheckStatus(0);
+                watchVo.setCheckMsg("直播时间未到,无法观看!");
+                return watchVo;
+            }
+        }
         //获取观看权限
         CourseSectionWatchPer watchPer = getOne(new LambdaQueryWrapper<CourseSectionWatchPer>()
                 .eq(CourseSectionWatchPer::getCourseId, bo.getCourseId())

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseBusinessVo.java

@@ -130,4 +130,6 @@ public class CourseBusinessVo {
 	private Integer periodNumber;
 	@ApiModelProperty("专题页ID")
 	private Long topicId;
+	@ApiModelProperty("学时审核标签:1开启 2关闭")
+	private Integer periodCheckSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java

@@ -116,4 +116,7 @@ public interface ClassGradeUserMapper extends BaseMapper<ClassGradeUser> {
 
     @InterceptorIgnore(tenantLine = "true")
     ClassGradeUser selectUserNoTenant(ClassGradeUserQueryBo bo);
+
+    List<Long> getFinishRequiredCourse(ClassGradeUserQueryBo bo);
+
 }

+ 27 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -243,8 +243,34 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                             return false;
                         }
                     }
+
+                    //二建/二造继教班级过滤
+                    String businessName = iGoodsService.getGoodsBusinessName(item.getGoodsId());
+                    if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")){
+                        if (gradeVo.getClassStatus() == 1 &&
+                                (gradeVo.getClassStartTime() > DateUtils.getNowTime() || gradeVo.getClassEndTime() < DateUtils.getNowTime())){
+                            //过期班级
+                            return false;
+                        }
+                        //班级人数
+                        Goods goods = iGoodsService.getById(item.getGoodsId());
+                        SysTenant tenant = iSysTenantService.getById(goods.getTenantId());
+                        if (tenant.getSevenClass() == 1){
+                            Integer numAll = getClassUserNumAll(gradeVo.getGradeId());
+                            if (gradeVo.getStudentUpper() <= numAll){
+                                //班级人数已满
+                                return false;
+                            }
+                        }else {
+                            Long num = baseMapper.getClassUserNumByTenant(gradeVo.getGradeId());
+                            if (gradeVo.getStudentUpper() <= num){
+                                //班级人数已满
+                                return false;
+                            }
+                        }
+                    }
                     return true;
-                }).collect(Collectors.toList());
+                }).sorted(Comparator.comparing(ClassGradeVo::getCreateTime).reversed()).collect(Collectors.toList());
                 item.setGradeList(collect);
             }
         });

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

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -32,6 +33,7 @@ import com.zhongzheng.modules.bank.bo.QuestionModuleChapterQueryBo;
 import com.zhongzheng.modules.bank.service.IQuestionChapterExamService;
 import com.zhongzheng.modules.bank.service.IQuestionModuleChapterService;
 import com.zhongzheng.modules.bank.vo.ExamVo;
+import com.zhongzheng.modules.bank.vo.ExternalQuestionVo;
 import com.zhongzheng.modules.bank.vo.QuestionChapterVo;
 import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
@@ -203,6 +205,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Value("${oldSys.host}")
     private String OLD_SYS_HOST;
 
+    @Value("${oldSys.studyCheck}")
+    private String OLD_STUDY_CHECK;
+
     @Autowired
     private IUserPeriodService iUserPeriodService;
 
@@ -3685,7 +3690,32 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
     @Override
     public Long checkFinishRequiredCourse(ClassGradeUserQueryBo bo) {
-        return baseMapper.checkFinishRequiredCourse(bo);
+        //查询旧系统是否有学习
+        String businessName = iGoodsService.getGoodsBusinessName(bo.getGoodsId());
+        if (businessName.contains("继续教育二级建造师") || businessName.contains("继续教育二级造价师")){
+            User user = iUserService.getById(bo.getUserId());
+            Integer type = "继续教育二级建造师".equals(businessName)?1:2;
+            String param = String.format("idnum=%s&type=%s",EncryptHandler.decrypt(user.getIdCard()),type);
+            String respone = "";
+            try {
+                respone = HttpUtils.sendGet(OLD_STUDY_CHECK, param);
+                JSONObject jsonObject1 = JSONObject.parseObject(respone);
+                UserStudyTimeVo timeVo = JSONArray.parseObject(jsonObject1.get("data").toString(), UserStudyTimeVo.class);
+                if (ObjectUtils.isNotNull(timeVo) && ObjectUtils.isNotNull(timeVo.getStudyStartTime()) && timeVo.getStudyFlag()){
+                    //旧系统正在学习中
+                    throw new CustomException("请把旧云学堂课程学习完成,再学习另一个课程");
+                }
+            } catch (Exception e) {
+                throw new CustomException(e.getMessage());
+            }
+        }
+        Long aLong = baseMapper.checkFinishRequiredCourse(bo);
+        if (aLong > 0){
+            List<Long> goodsIds = baseMapper.getFinishRequiredCourse(bo);
+            Goods goods = iGoodsService.getById(goodsIds.get(0));
+            throw new CustomException("请按顺序学习,把【"+goods.getGoodsName()+"】学习完成,再学习另一个课程");
+        }
+        return 0L;
     }
 
     @Override

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

@@ -880,7 +880,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                 CourseMenuQueryBo menuQueryBo = new CourseMenuQueryBo();
                 menuQueryBo.setCourseId(courseVo.getCourseId());
                 List<CourseMenuVo> courseMenuVoList = iCourseMenuService.selectList(menuQueryBo);
-                courseMenuVoList.forEach(courseMenuVo -> {
+                for(CourseMenuVo courseMenuVo:courseMenuVoList){
                     if(courseMenuVo.getType()==1){
                         SyncUserChapterList syncUserChapterItem = new SyncUserChapterList();
                         syncUserChapterItem.setChapterId(courseMenuVo.getMenuId());
@@ -888,7 +888,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                         List<SyncUserChapterList> ChildChapList = new ArrayList<>();
                         //获取章信息
                         List<CourseModuleChapterVo> courseModuleChapterVoList = iCourseModuleChapterService.getListById(courseMenuVo.getMenuId());
-                        courseModuleChapterVoList.forEach(courseModuleChapterVo -> {
+                        for(CourseModuleChapterVo courseModuleChapterVo:courseModuleChapterVoList){
                             SyncUserChapterList syncUserChapterChildItem = new SyncUserChapterList();
                             syncUserChapterChildItem.setChapterId(courseModuleChapterVo.getChapterId());
                             syncUserChapterChildItem.setChapterName(courseModuleChapterVo.getName());
@@ -943,6 +943,12 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                                     List<UserStudyRecordPhoto> videoPhoto2 = userStudyRecordPhotoService.list(lqw);
                                     syncUserStudyRec.setCreateTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
                                     syncUserStudyRec.setEndTime(DateUtils.timestampToDateFormat(userPeriodStatusVo.getRecordEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+                                    if(Validator.isEmpty(studyEndTime)||(studyEndTime.longValue()<userPeriodStatusVo.getRecordEndTime().longValue())){
+                                        studyEndTime = userPeriodStatusVo.getRecordEndTime();
+                                    }
+                                    if(Validator.isEmpty(studyStartTime)||(studyStartTime.longValue()>userPeriodStatusVo.getRecordStartTime().longValue())){
+                                        studyStartTime = userPeriodStatusVo.getRecordStartTime();
+                                    }
                                     syncUserStudyRec.setStudyIP(userPeriodStatusVo.getIp());
                                     List<SyncUserImageRc> ImgList = new ArrayList<>();
                                     for (UserStudyRecordPhoto videoPhoto : videoPhoto2) {
@@ -958,12 +964,14 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
                             }
                             syncUserChapterChildItem.setRecList(RecList);
                             ChildChapList.add(syncUserChapterChildItem);
-                        });
+                        }
                         syncUserChapterItem.setChildChapList(ChildChapList);
                         ChapterList.add(syncUserChapterItem);
                     }
-                });
+                }
             }
+            studyRec.setBeginTime(DateUtils.timestampToDateFormat(studyStartTime));
+            studyRec.setEndTime(DateUtils.timestampToDateFormat(studyEndTime));
             studyRec.setChapterList(ChapterList);
         }
         //学习记录推送到旧系统

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeVo.java

@@ -206,4 +206,10 @@ public class ClassGradeVo {
 
 	@ApiModelProperty("七大员继教班级年份")
 	private String sevenYears;
+
+	@ApiModelProperty("添加时间")
+	private Long createTime;
+
+	@ApiModelProperty("修改时间")
+	private Long updateTime;
 }

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

@@ -69,7 +69,7 @@ public class OrderBusinessConfigGoodsQueryBo extends BaseEntity {
 	@ApiModelProperty("业务名称")
 	private String businessName;
 	@ApiModelProperty("科目名称")
-	private Long subjectName;
+	private String subjectName;
 	@ApiModelProperty("年份")
 	private String year;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/IFaceOcrService.java

@@ -15,6 +15,8 @@ public interface IFaceOcrService {
 
     Boolean DetectFace(FaceQueryBo bo);
 
+    Boolean DetectFaceAttributes(FaceQueryBo bo);
+
     Map<String,String> IDCardOCR(FaceQueryBo bo);
 
     Map<String,String> VatInvoiceOCR(InvoiceQueryBo bo);

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java

@@ -152,6 +152,31 @@ public class FaceOcrServiceImpl implements IFaceOcrService {
         return true;
     }
 
+    @Override
+    public Boolean DetectFaceAttributes(FaceQueryBo bo) {
+        try{
+            Credential cred = new Credential(SecretId, SecretKey);
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setSignMethod(clientProfile.SIGN_TC3_256);
+            IaiClient iaiClient = new IaiClient(cred,"ap-guangzhou");
+            DetectFaceAttributesRequest faceRequest = new DetectFaceAttributesRequest();
+            if(Validator.isNotEmpty(bo.getUrlA())){
+                faceRequest.setUrl(bo.getUrlA());
+            }else{
+                faceRequest.setImage(bo.getImageA()); //学习拍照
+            }
+
+            DetectFaceAttributesResponse response = iaiClient.DetectFaceAttributes(faceRequest);
+            System.out.println(response.getImageWidth());
+            System.out.println(response.getImageHeight());
+            System.out.println(response.getFaceDetailInfos()[0].getFaceRect().getWidth());
+            System.out.println(response.getFaceDetailInfos()[0].getFaceRect().getHeight());
+        }catch (TencentCloudSDKException e){
+            throw new CustomException("人脸检测错误"+e.getMessage());
+        }
+        return true;
+    }
+
     @Override
     public Map<String,String> IDCardOCR(FaceQueryBo bo) {
         Map<String,String> rs = new HashMap<>();

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -1984,6 +1984,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             } else {
                 //未收比退款多或者相等
                 order.setOrderUncollected(orderUncollected.subtract(refundPrice));
+                refundPrice = BigDecimal.ZERO;
             }
             updateById(order);
         }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserLiveAccountLoginBo.java

@@ -42,4 +42,7 @@ public class UserLiveAccountLoginBo {
 
     @ApiModelProperty("登录类型:1直播")
     private Integer type;
+
+    @ApiModelProperty("商户ID")
+    private String tenantId;
 }

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserQueryBo.java

@@ -227,4 +227,26 @@ public class UserQueryBo extends BaseEntity {
 	@ApiModelProperty("承诺书签名:1是 0否")
 	private Integer promiseSign;
 
+	/** 考试开始时间段 */
+	@ApiModelProperty("考试开始时间段")
+	private String applySiteStartTime;
+
+	/** 考试结束时间段 */
+	@ApiModelProperty("考试结束时间段")
+	private String applySiteEndTime;
+
+	/** 考试日期 */
+	@ApiModelProperty("考试日期")
+	private Long applySiteExamTime;
+
+	/** 月份 */
+	@ApiModelProperty("时间")
+	private String ApplyDateTime;
+
+	@ApiModelProperty("月份开始时间")
+	private Long monthStartTime;
+
+	@ApiModelProperty("月份结束时间")
+	private Long monthEndTime;
+
 }

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

@@ -235,4 +235,6 @@ private static final long serialVersionUID=1L;
     private String school;
 
     private String graduationTime;
+
+    private String passwordAes;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java

@@ -86,4 +86,7 @@ public interface UserMapper extends BaseMapper<User> {
 
     @InterceptorIgnore(tenantLine = "true")
     User getByCardNoTenant(String idCard);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Long getFistStudyTime(@Param("userId")Long userId,@Param("tenantId")Long tenantId,@Param("businessName")String businessName);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -25,6 +25,8 @@ public interface IUserService extends IService<User> {
 	 */
 	UserVo queryById(Long userId);
 
+	String viewPwd(Long userId);
+
 
 	User queryByUnionId(String unionId);
 
@@ -160,4 +162,6 @@ public interface IUserService extends IService<User> {
 	List<UserDownloadVo> userDataDownloadList(Long userId);
 
 	void userDataDownloadUp(UserDataDownloadUpBo bo);
+
+	UserStudyTimeVo getStudyTimeByCard(String idCard,Integer type);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -1774,6 +1774,9 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             userStudyRecordPhotoAddBo.setPeriodId(periodId);
             userStudyRecordPhotoAddBo.setStatus(1);
             userStudyRecordPhotoAddBo.setUserId(entity.getUserId());
+            if(Validator.isEmpty(bo.getSimilarity())){
+                throw new CustomException("相似度缺失");
+            }
             userStudyRecordPhotoAddBo.setSimilarity(bo.getSimilarity());
             userStudyRecordPhotoService.insertByAddBo(userStudyRecordPhotoAddBo);
         }

+ 19 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserStudyTimeVo.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.modules.user.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年03月20日 9:08
+ */
+@Data
+public class UserStudyTimeVo implements Serializable {
+
+    private String idCard;
+
+    private Boolean studyFlag;
+
+    private Long studyStartTime;
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserSubscribeStudentExportVo.java

@@ -34,6 +34,9 @@ public class UserSubscribeStudentExportVo {
 	@ApiModelProperty("手机号")
 	private String telphone;
 
+	@Excel(name = "座位号")
+	@ApiModelProperty("座位号")
+	private String seatNumber;
 
 	@Excel(name = "学历")
 	@ApiModelProperty("学历")

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserVo.java

@@ -315,7 +315,8 @@ public class UserVo {
 	private String applySiteEndTime;
 	@ApiModelProperty("预约ID")
 	private Long subscribeId;
-
+	@ApiModelProperty("考场座位号")
+	private String seatNumber;
 	public void setNull(){
 		this.setOpenId(null);
 /*		this.setIdCardImg1(null);

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

@@ -936,7 +936,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getClassUserNumByTenant" parameterType="java.lang.Long" resultType="java.lang.Long">
         SELECT
-            sum( a.num )
+            IFNULL(sum( a.num ),0)
         FROM
             ( SELECT COUNT( user_id ) AS num FROM class_grade_user WHERE grade_id = #{gradeId} AND `status` = 1 AND change_grade = 0 GROUP BY user_id ) a
     </select>

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

@@ -479,6 +479,7 @@
         GROUP BY c.goods_id ) ge on og.goods_id = ge.goods_id */
         where 1=1
         and cgu.`status` =1
+        and cb.`period_check_sign` = 1
         <if test="periodPlush != null and periodPlush != ''">
             AND cgu.period_plush = #{periodPlush}
         </if>
@@ -1700,6 +1701,32 @@
             )>0
     </select>
 
+    <select id="getFinishRequiredCourse" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo" resultType="java.lang.Long">
+        SELECT
+            g.goods_id
+        FROM
+            class_grade_user cgu
+                LEFT JOIN order_goods og ON cgu.order_goods_id = og.order_goods_id
+                LEFT JOIN goods g on og.goods_id = g.goods_id
+                LEFT JOIN class_grade cg on cg.grade_id = cgu.grade_id
+        WHERE
+            cgu.user_id = #{userId}
+          AND cgu.period_status = -1
+          AND (unix_timestamp(now())  BETWEEN cg.class_start_time and cg.class_end_time)
+          and g.business_id = #{businessId}
+          and g.goods_id != #{goodsId}
+          AND (
+            SELECT
+            IFNULL( count(*), 0 )
+            FROM
+            user_period up
+            WHERE
+            1 = 1
+          AND up.user_id = cgu.user_id
+          AND up.grade_id = cgu.grade_id
+            )>0
+    </select>
+
     <select id="getSevenPeriodStartTime" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo" resultType="java.lang.Long">
         SELECT
         p.create_time

+ 48 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

@@ -652,6 +652,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LIMIT 1
     </select>
 
+    <select id="getFistStudyTime" parameterType="map" resultType="java.lang.Long">
+        SELECT
+        ustp.create_time
+        FROM
+        user_study_record usr
+        INNER JOIN user_study_record_photo ustp ON usr.record_id = ustp.record_id
+        LEFT JOIN goods g ON usr.goods_id = g.goods_id
+        LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+        LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+        LEFT JOIN course_business cb ON g.business_id = cb.id
+        LEFT JOIN class_grade cg ON usr.grade_id = cg.grade_id
+        LEFT JOIN class_grade_user cgu ON usr.order_goods_id = cgu.order_goods_id
+        WHERE
+        usr.current_status = 1
+        AND cgu.period_status = -1
+        AND cgu.status = 1
+        AND usr.user_id = #{userId}
+        AND usr.tenant_id = #{tenantId}
+        AND INSTR( CONCAT( cet.education_name, cb.business_name, cpt.project_name ), #{businessName} )
+        AND cg.class_start_time &lt;= UNIX_TIMESTAMP(NOW())
+        AND cg.class_end_time &gt;= UNIX_TIMESTAMP(NOW())
+        AND cg.`status` = 1
+        ORDER BY ustp.create_time ASC LIMIT 1
+    </select>
+
     <select id="getUserOrderCount" parameterType="map" resultType="java.lang.Long">
         SELECT
             COUNT(o.order_sn)
@@ -718,6 +743,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND (SELECT COUNT(up.id) FROM user_profile up WHERE up.user_id = u.user_id AND up.current_status = 1
             AND INSTR(up.key_value,'"fieldKey":"commitment_electr_signature","value":"oss/images/avatar')) = 0
         </if>
+        <if test="(applySiteExamTime != null and applySiteExamTime != '' ) or
+                        (monthStartTime != null and monthStartTime != '' ) or
+                        (monthEndTime != null and monthEndTime != '') or
+                        (applySiteStartTime != null and applySiteStartTime != '') or
+                        (applySiteEndTime != null and applySiteEndTime != '')">
+            AND (SELECT COUNT(us.subscribe_id) FROM user_subscribe us WHERE us.user_id = u.user_id AND us.subscribe_status = 1
+            <if test="applySiteExamTime != null and applySiteExamTime != '' ">
+                and us.apply_site_exam_time = #{applySiteExamTime}
+            </if>
+            <if test="monthStartTime != null and monthStartTime != '' ">
+                and us.apply_site_exam_time &gt;= #{monthStartTime}
+            </if>
+            <if test="monthEndTime != null and monthEndTime != '' ">
+                and us.apply_site_exam_time &lt;= #{monthEndTime}
+            </if>
+            <if test="applySiteStartTime != null and applySiteStartTime != '' ">
+                and us.apply_site_start_time = #{applySiteStartTime}
+            </if>
+            <if test="applySiteEndTime != null and applySiteEndTime != '' ">
+                and us.apply_site_end_time = #{applySiteEndTime}
+            </if>
+            ) > 0
+        </if>
         order by u.user_id desc
     </select>
 

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

@@ -126,6 +126,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="applySiteStartTime" column="apply_site_start_time"/>
         <result property="applySiteEndTime" column="apply_site_end_time"/>
         <result property="subscribeId" column="subscribe_id"/>
+        <result property="seatNumber" column="seat_number"/>
     </resultMap>
 
     <select id="listSubscribe" parameterType="com.zhongzheng.modules.user.bo.UserSubscribeQueryBo" resultMap="UserSubscribeVo">