yangdamao 18 часов назад
Родитель
Сommit
8d237e0053
17 измененных файлов с 435 добавлено и 16 удалено
  1. 7 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java
  2. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  3. 176 12
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  4. 63 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  5. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/mapper/MockApplyMapper.java
  6. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/IMockApplyService.java
  7. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/impl/MockApplyServiceImpl.java
  8. 17 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/ActivityExamApplyBo.java
  9. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/MockApplyByBo.java
  10. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/User.java
  11. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  12. 16 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserMockRecordServiceImpl.java
  13. 56 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/MockApplyServiceVo.java
  14. 33 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserMockServiceVo.java
  15. 34 0
      zhongzheng-system/src/main/resources/mapper/modules/mock/MockApplyMapper.xml
  16. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  17. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMockRecordMapper.xml

+ 7 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -247,4 +247,11 @@ public class UserController extends BaseController {
         List<UserVisitLog> list = iUserService.getControlsRecord(bo);
         return getDataTable(list);
     }
+
+    @ApiOperation("用户扫码进入考试")
+    @PostMapping("/activity/exam/apply")
+    public AjaxResult getActivityExamApply(@RequestBody ActivityExamApplyBo bo) {
+        Map<String,Object> map = iUserService.getActivityExamApply(bo);
+        return AjaxResult.success(map);
+    }
 }

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -170,6 +170,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/swagger-resources/**").anonymous()
                 .antMatchers("/webjars/**").anonymous()
                 .antMatchers("/common/business/**").anonymous()
+                .antMatchers("/app/user/activity/exam/apply").anonymous()
 //                .antMatchers("/*/api-docs").anonymous()
                 .antMatchers("/druid/**").anonymous()
                 // Spring Boot Admin Server 的安全配置

+ 176 - 12
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -47,14 +47,8 @@ import com.zhongzheng.modules.collect.domain.CollectNote;
 import com.zhongzheng.modules.collect.mapper.CollectBankMapper;
 import com.zhongzheng.modules.collect.mapper.CollectCourseMapper;
 import com.zhongzheng.modules.collect.mapper.CollectNoteMapper;
-import com.zhongzheng.modules.course.domain.Course;
-import com.zhongzheng.modules.course.domain.CourseSection;
-import com.zhongzheng.modules.course.domain.CourseSubject;
-import com.zhongzheng.modules.course.domain.Major;
-import com.zhongzheng.modules.course.service.ICourseSectionService;
-import com.zhongzheng.modules.course.service.ICourseService;
-import com.zhongzheng.modules.course.service.ICourseSubjectService;
-import com.zhongzheng.modules.course.service.IMajorService;
+import com.zhongzheng.modules.course.domain.*;
+import com.zhongzheng.modules.course.service.*;
 import com.zhongzheng.modules.exam.service.IExamApplyService;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
@@ -64,6 +58,7 @@ import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.impl.ClassGradeServiceImpl;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
+import com.zhongzheng.modules.mock.service.IMockApplyService;
 import com.zhongzheng.modules.order.vo.OrderListVo;
 import com.zhongzheng.modules.system.domain.SysTask;
 import com.zhongzheng.modules.system.domain.SysTenant;
@@ -73,10 +68,7 @@ import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.user.bo.*;
-import com.zhongzheng.modules.user.domain.User;
-import com.zhongzheng.modules.user.domain.UserCertificate;
-import com.zhongzheng.modules.user.domain.UserStudyLog;
-import com.zhongzheng.modules.user.domain.UserVisitLog;
+import com.zhongzheng.modules.user.domain.*;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.mapper.UserMapper;
 import com.zhongzheng.modules.user.service.*;
@@ -110,6 +102,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static cn.hutool.core.util.IdcardUtil.getGenderByIdCard;
+
 
 /**
  * 用户Service业务层处理
@@ -188,6 +182,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     private ICourseSectionService iCourseSectionService;
     @Autowired
     private IFaceOcrService iFaceOcrService;
+    @Autowired
+    private IMockApplyService iMockApplyService;
+    @Autowired
+    private IUserMockSubscribeService iUserMockSubscribeService;
+    @Autowired
+    private ICourseEducationTypeService iCourseEducationTypeService;
+    @Autowired
+    private ICourseProjectTypeService iCourseProjectTypeService;
+    @Autowired
+    private ICourseBusinessService iCourseBusinessService;
     @Value("${liveGotoURL}")
     private String liveGotoURL;
     @Value("${oldSys.goods}")
@@ -2425,6 +2429,166 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
     }
 
+    @Override
+    public Map<String, Object> getActivityExamApply(ActivityExamApplyBo bo) {
+        Map<String,Object> map = new HashMap<>();
+        CourseEducationType educationType = iCourseEducationTypeService
+                .getOne(new LambdaQueryWrapper<CourseEducationType>().eq(CourseEducationType::getEducationName, "考前培训").eq(CourseEducationType::getStatus, 1).last("limit 1"));
+        Long eduId = educationType.getId();
+        CourseProjectType projectType = iCourseProjectTypeService
+                .getOne(new LambdaQueryWrapper<CourseProjectType>().eq(CourseProjectType::getProjectName, "建造师").eq(CourseProjectType::getEducationId, eduId).eq(CourseProjectType::getStatus, 1).last("limit 1"));
+        Long proId = projectType.getId();
+        CourseBusiness business = iCourseBusinessService
+                .getOne(new LambdaQueryWrapper<CourseBusiness>().eq(CourseBusiness::getBusinessName, "二级").eq(CourseBusiness::getProjectId, proId).eq(CourseBusiness::getStatus, 1).last("limit 1"));
+        Long businessId = business.getId();
+
+        //查询考试
+        MockApplyByBo byBo = new MockApplyByBo();
+        byBo.setEduId(eduId);
+        byBo.setProId(proId);
+        byBo.setBusinessId(businessId);
+        byBo.setMajorName(bo.getMajorName());
+        MockApplyServiceVo applyServiceVo = iMockApplyService.getMockApplyByBo(byBo);
+        //根据身份证查询账号
+        User user = getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getIdCard, EncryptHandler.encrypt(bo.getUserCard())).eq(User::getStatus, 1).last("limit 1"));
+        if (ObjectUtils.isNull(applyServiceVo) ){
+            if (ObjectUtils.isNull(user)){
+                throw new CustomException("考试尚未开始,请耐心等待!");
+            }
+            //时间
+            Long time = DateUtils.getNowTime() - 5L * 24 * 60 * 60 * 1000;
+            UserMockSubscribe subscribeVo = iUserMockSubscribeService.getOne(new LambdaQueryWrapper<UserMockSubscribe>()
+                    .eq(UserMockSubscribe::getUserId, user.getUserId())
+                    .eq(UserMockSubscribe::getSubscribeStatus, 1)
+                    .gt(UserMockSubscribe::getApplySiteExamTime,time)
+                    .last("limit 1"));
+            if (ObjectUtils.isNotNull(subscribeVo)){
+                //有之前的考试记录
+                map.put("mockSing", 1);
+            }
+        }else {
+            if (ObjectUtils.isNull(user)){
+                //新增
+                //检测手机号是否重复
+                User user1 = getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getTelphone, EncryptHandler.encrypt(bo.getUserPhone())).eq(User::getStatus, 1).last("limit 1"));
+                if (ObjectUtils.isNotNull(user1)){
+                    //手机号码重复
+                    bo.setUserPhone(TelPhoneUtils.createMobile());
+                }
+                User inertData = new User();
+                inertData.setTelphone(bo.getUserPhone());
+                //隐藏手机号作为初始昵称
+                inertData.setNickname(TelPhoneUtils.hideTelPhone(bo.getUserPhone(),1));
+                //雪花算法产生账号ID
+                SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
+                inertData.setUserAccount(String.valueOf(idWorker.nextId()));
+                inertData.setSex(1);
+                inertData.setEduLevel("本科");
+                inertData.setSex(getGenderByIdCard(bo.getUserCard()));
+                inertData.setIdCard(bo.getUserCard());
+                inertData.setRealname(bo.getUserName());
+                inertData.setStatus(1);
+                inertData.setRegisterPlat("6");
+                inertData.setAvatar(Constants.DEFAULT_AVATAR);
+                inertData.setLastLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+                inertData.setLastLoginTime(DateUtils.getNowTime());
+                inertData.setCreateTime(DateUtils.getNowTime());
+                inertData.setUpdateTime(DateUtils.getNowTime());
+                String pwd = "";
+                if (ObjectUtils.isNotNull(bo.getUserCard())){
+                    pwd =  bo.getUserCard().substring(bo.getUserCard().length() - 6);
+                }else {
+                    pwd =  bo.getUserPhone().substring(bo.getUserPhone().length() - 6);
+                }
+                inertData.setPasswordAes(EncryptHandler.encrypt(pwd));
+                inertData.setPassword(SecurityUtils.encryptPassword(pwd));
+                if(!save(inertData)){
+                    throw new CustomException("注册失败");
+                }
+                user = inertData;
+            }
+
+            UserMockSubscribe subscribeVo = iUserMockSubscribeService.getOne(new LambdaQueryWrapper<UserMockSubscribe>()
+                    .eq(UserMockSubscribe::getUserId, user.getUserId())
+                    .eq(UserMockSubscribe::getApplyId, applyServiceVo.getApplyId())
+                    .eq(UserMockSubscribe::getEachExamId, applyServiceVo.getEachExamId())
+                    .eq(UserMockSubscribe::getSubscribeStatus, 1)
+                    .last("limit 1"));
+            if (ObjectUtils.isNull(subscribeVo)){
+                //不存在创建预约信息
+                UserMockSubscribe subscribe = new UserMockSubscribe();
+                subscribe.setUserId(user.getUserId());
+                subscribe.setEachExamId(applyServiceVo.getEachExamId());
+                subscribe.setSubscribeStatus(1);
+                subscribe.setBeforeStatus(0);
+                subscribe.setExamStatus(0);
+                subscribe.setHandStatus(0);
+                subscribe.setApplyId(applyServiceVo.getApplyId());
+                subscribe.setMockMajorSubjectId(applyServiceVo.getMockMajorSubjectId());
+                subscribe.setCreateTime(DateUtils.getNowTime());
+                subscribe.setUpdateTime(DateUtils.getNowTime());
+                subscribe.setApplySiteStartTime(applyServiceVo.getStartTime());
+                subscribe.setApplySiteEndTime(applyServiceVo.getEndTime());
+                subscribe.setApplySiteExamTime(applyServiceVo.getExamTime());
+                subscribe.setMockRemind(0);
+                subscribe.setLiveSubscribe(0);
+                subscribe.setHasLiveSubscribe(0);
+                subscribe.setHasMockRemind(0);
+                iUserMockSubscribeService.save(subscribe);
+                subscribeVo = subscribe;
+            }
+            //返回信息
+            UserMockServiceVo serviceVo = BeanUtil.toBean(applyServiceVo, UserMockServiceVo.class);
+            serviceVo.setSubscribeId(subscribeVo.getSubscribeId());
+            serviceVo.setApplySiteEndTime(subscribeVo.getApplySiteEndTime());
+            serviceVo.setApplySiteStartTime(subscribeVo.getApplySiteStartTime());
+            serviceVo.setApplySiteExamTime(subscribeVo.getApplySiteExamTime());
+
+            map.put("mock_service",serviceVo);
+            Long  endTime = subscribeVo.getApplySiteExamTime() + 7200L;
+            if (DateUtils.getNowTime() >= subscribeVo.getApplySiteExamTime() && DateUtils.getNowTime() <= endTime){
+                map.put("mockSing", 2); //考前中
+            }else {
+                map.put("mockSing", 3); //未考试
+            }
+        }
+
+        //登入token
+        ClientLoginUser loginUser = new ClientLoginUser();
+        loginUser.setUser(user);
+
+        map.put(Constants.TOKEN,wxTokenService.createToken(loginUser));
+        map.put("user_account",user.getUserAccount());
+        map.put("full_info",true); //是否完善身份信息
+
+        return map;
+    }
+
+    /**
+     * 根据身份证号码判断性别
+     *
+     * @param idCard 身份证号码
+     * @return "男" 或 "女"
+     */
+    private Integer getGenderByIdCard(String idCard) {
+        if (idCard == null || idCard.length() != 18) {
+            throw new IllegalArgumentException("无效的身份证号码");
+        }
+
+        // 获取第17位字符
+        char genderChar = idCard.charAt(16);
+
+        // 判断奇偶性
+        int genderDigit = Character.getNumericValue(genderChar);
+        if (genderDigit % 2 == 0) {
+            return 2;
+        } else {
+            return 1;
+        }
+    }
+
     private String getTelPhone(){
         String mobile = TelPhoneUtils.createMobile();
         int count = count(new LambdaQueryWrapper<User>().eq(User::getIdCard, EncryptHandler.encrypt(mobile)));

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

@@ -4393,9 +4393,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                 List<QuestionImportV4> questionImportV3 = questionList2.subList(i, i + a);
                 //第一个是内容
                 QuestionImportV4 v42 = questionImportV3.get(0);
-                question.setContent(questionImage(v42.getQuestionName()));
+                question.setContent(replaceImagePaths(v42.getQuestionName()));
                 question.setType(4);
-                question.setAnalysisContent(v42.getDescribe());
+                question.setAnalysisContent(replaceImagePaths(v42.getDescribe()));
                 //截取案例题小题
                 List<QuestionImportV4> vv = new ArrayList<>();
                 for (int i1 = i+1; i1 < questionList2.size(); i1++) {
@@ -4482,7 +4482,20 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                             questionInfoVo.setAnswerQuestion(index2.toString());
                             vv1.add(questionInfoVo);
                             a = a+y;
+                        }else if (questionImportV41.getAnalysisContent().equals("问答题")){
+                            //问答下取1格
+                            y = 1;
+                            List<QuestionImportV4> questionImportV8 = vv.subList(i1, i1 + y);
+                            QuestionImportV4 questionImportV42 = questionImportV8.get(0);
+                            QuestionInfoVo questionInfoVo = new QuestionInfoVo();
+                            questionInfoVo.setContent(replaceImagePaths(questionImportV42.getQuestionName()));
+                            questionInfoVo.setType(5);
+                            questionInfoVo.setAnswerQuestion("");
+                            questionInfoVo.setAnalysisContent(replaceImagePaths(questionImportV42.getDescribe()));
+                            vv1.add(questionInfoVo);
+                            a = a+y;
                         }
+
                         i1 = i1+y-1;
                     }
                     question.setJsonStr(JSONArray.toJSONString(vv1));
@@ -4518,6 +4531,54 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return Collections.emptyMap();
     }
 
+    /**
+     * 替换图片路径(添加前缀)
+     * @param html HTML字符串
+     * @return 替换后的HTML
+     */
+    private String replaceImagePaths(String html) {
+        if (StringUtils.isBlank(html)){
+            return html;
+        }
+        Pattern pattern = Pattern.compile("<img\\s+src=\"([^\"]+)\"");
+        Matcher matcher = pattern.matcher(html);
+        StringBuffer result = new StringBuffer();
+
+        while (matcher.find()) {
+            String oldPath = matcher.group(1);
+            //下载图片
+            String ossPath = "";
+            //上传oss图片
+            try {
+                String imagePath = "https://www.xyyxt.net" + oldPath;
+                URL url = new URL(imagePath);
+                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+                connection.setRequestMethod("GET");
+                connection.setConnectTimeout(5000);
+                connection.setReadTimeout(5000);
+
+                // 检查响应码
+                int responseCode = connection.getResponseCode();
+                if (responseCode == HttpURLConnection.HTTP_OK) {
+                    try (InputStream inputStream = connection.getInputStream()) {
+                        String s = ossService.uploadInputStream(inputStream,6);
+                        ossPath = ossHost + "/" + s;
+
+                    }
+                }
+                connection.disconnect();
+                if (StringUtils.isNotBlank(ossPath)){
+                    matcher.appendReplacement(result, "<img src=\"" + ossPath + "\"");
+                }
+            } catch (Exception e) {
+                throw new CustomException("oss图片上传失败");
+            }
+        }
+        matcher.appendTail(result);
+
+        return result.toString();
+    }
+
     private String questionImage(String question){
         //图片转换
         Pattern pattern = Pattern.compile("src='(.*?)'");

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/mapper/MockApplyMapper.java

@@ -8,6 +8,8 @@ import com.zhongzheng.modules.mock.domain.MockApply;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.mock.vo.MockApplyVo;
 import com.zhongzheng.modules.mock.vo.MockMajorSubjectVo;
+import com.zhongzheng.modules.user.bo.MockApplyByBo;
+import com.zhongzheng.modules.user.vo.MockApplyServiceVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -37,4 +39,6 @@ public interface MockApplyMapper extends BaseMapper<MockApply> {
     List<MockMajorSubjectVo> listApplyName(MockApplyQueryBo bo);
 
     Long getMockMajorSubjectId(MockTimeAddBo bo);
+
+    MockApplyServiceVo getMockApplyByBo(MockApplyByBo byBo);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/IMockApplyService.java

@@ -12,6 +12,8 @@ import com.zhongzheng.modules.mock.bo.MockApplyEditBo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.modules.mock.vo.MockMajorSubjectVo;
 import com.zhongzheng.modules.mock.vo.MockTimeVo;
+import com.zhongzheng.modules.user.bo.MockApplyByBo;
+import com.zhongzheng.modules.user.vo.MockApplyServiceVo;
 import com.zhongzheng.modules.user.vo.UserMockSubscribeVo;
 
 import java.text.ParseException;
@@ -78,4 +80,5 @@ public interface IMockApplyService extends IService<MockApply> {
 
 	MockTimeVo addMockTime(MockTimeAddBo bo);
 
+	MockApplyServiceVo getMockApplyByBo( MockApplyByBo byBo);
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/mock/service/impl/MockApplyServiceImpl.java

@@ -29,9 +29,11 @@ import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.user.bo.MockApplyByBo;
 import com.zhongzheng.modules.user.domain.UserMockSubscribe;
 import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
+import com.zhongzheng.modules.user.vo.MockApplyServiceVo;
 import com.zhongzheng.modules.user.vo.UserMockSubscribeVo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -653,4 +655,9 @@ public class MockApplyServiceImpl extends ServiceImpl<MockApplyMapper, MockApply
         mockTimeVo.setMockActivity(apply.getMockActivity());
         return mockTimeVo;
     }
+
+    @Override
+    public MockApplyServiceVo getMockApplyByBo( MockApplyByBo byBo) {
+        return baseMapper.getMockApplyByBo(byBo);
+    }
 }

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/ActivityExamApplyBo.java

@@ -0,0 +1,17 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ActivityExamApplyBo implements Serializable {
+
+    private String userCard;
+
+    private String userName;
+
+    private String majorName;
+
+    private String userPhone;
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/MockApplyByBo.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class MockApplyByBo implements Serializable {
+
+    private Long eduId;
+    private Long proId;
+    private Long businessId;
+    private String majorName;
+}

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

@@ -102,7 +102,7 @@ private static final long serialVersionUID=1L;
 
     private String unionId;
 
-    /** 注册平台 1小程序 2网站 3后台 4老业务系统 5外部接口开单*/
+    /** 注册平台 1小程序 2网站 3后台 4老业务系统 5外部接口开单 6模拟考试*/
     private String registerPlat;
 
     private String lastLoginIp;

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

@@ -188,4 +188,5 @@ public interface IUserService extends IService<User> {
 
     void synchronizationUser(Integer orgId);
 
+	Map<String, Object> getActivityExamApply(ActivityExamApplyBo bo);
 }

+ 16 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserMockRecordServiceImpl.java

@@ -3,11 +3,15 @@ package com.zhongzheng.modules.user.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.bank.domain.ExamQuestion;
+import com.zhongzheng.modules.bank.service.IExamQuestionService;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
 import com.zhongzheng.modules.collect.domain.CollectQuestion;
 import com.zhongzheng.modules.collect.service.ICollectQuestionService;
@@ -30,6 +34,7 @@ import com.zhongzheng.modules.user.vo.UserMockWrongRecordVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -54,6 +59,9 @@ public class UserMockRecordServiceImpl extends ServiceImpl<UserMockRecordMapper,
     @Autowired
     private IOrderGoodsService iOrderGoodsService;
 
+    @Autowired
+    private IExamQuestionService iExamQuestionService;
+
     @Override
     public UserMockRecordVo queryById(Long recordId){
         UserMockRecord db = this.baseMapper.selectById(recordId);
@@ -173,6 +181,14 @@ public class UserMockRecordServiceImpl extends ServiceImpl<UserMockRecordMapper,
     @Override
     public Boolean updateByEditBo(UserMockRecordEditBo bo) {
         UserMockRecord update = BeanUtil.toBean(bo, UserMockRecord.class);
+        //计算试卷总分
+//        if (ObjectUtils.isEmpty(bo.getExamId())) {
+//            List<ExamQuestion> list = iExamQuestionService.list(new LambdaQueryWrapper<ExamQuestion>().eq(ExamQuestion::getExamId, bo.getExamId()));
+//            if (CollectionUtils.isNotEmpty(list)) {
+//                BigDecimal reduce = list.stream().filter(x -> ObjectUtils.isNotNull(x.getScore())).map(ExamQuestion::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
+//                update.setTotalScore(reduce);
+//            }
+//        }
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
         return this.updateById(update);

+ 56 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/MockApplyServiceVo.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.modules.user.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class MockApplyServiceVo implements Serializable {
+
+    @ApiModelProperty("模考Id")
+    private Long applyId;
+
+    @ApiModelProperty("模块专业ID")
+    private Long mockMajorId;
+
+    @ApiModelProperty("模考科目ID")
+    private Long mockMajorSubjectId;
+
+    @ApiModelProperty("考试名称")
+    private String applyName;
+
+    @ApiModelProperty("预约开始时间")
+    private Long applyStartTime;
+
+    @ApiModelProperty("预约结束时间")
+    private Long applyEndTime;
+
+    @ApiModelProperty("预约状态")
+    private Integer status;
+
+    @ApiModelProperty("科目ID")
+    private Long subjectId;
+
+    @ApiModelProperty("开考时间限制")
+    private Long timeLimit;
+
+    @ApiModelProperty("试卷ID")
+    private Long examId;
+
+    @ApiModelProperty("每场考试ID")
+    private Long eachExamId;
+
+    @ApiModelProperty("考试日期")
+    private Long examTime;
+
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+
+    @ApiModelProperty("是否活动模考 0否 1是")
+    private Integer mockActivity;
+
+}

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserMockServiceVo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.user.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserMockServiceVo implements Serializable {
+
+    private Long applySiteExamTime;
+    private String applySiteStartTime;
+    private String applySiteEndTime;
+    private Long timeLimit;
+    private Long examId;
+    private Long eachExamId;
+    private Long subscribeId;
+    private String applyName;
+    private Integer mockActivity;
+
+    @ApiModelProperty("模考Id")
+    private Long applyId;
+
+    @ApiModelProperty("考试日期")
+    private Long examTime;
+
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    @ApiModelProperty("结束时间")
+    private String endTime;
+
+}

+ 34 - 0
zhongzheng-system/src/main/resources/mapper/modules/mock/MockApplyMapper.xml

@@ -318,5 +318,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE mm.apply_id = #{applyId} AND mm.major_id = #{majorId} AND mms.subject_id = #{subjectId}
     </select>
 
+    <select id="getMockApplyByBo" parameterType="com.zhongzheng.modules.user.bo.MockApplyByBo" resultType="com.zhongzheng.modules.user.vo.MockApplyServiceVo">
+        SELECT
+        ma.apply_id,
+        ma.time_limit,
+        mm.mock_major_id,
+        mms.mock_major_subject_id,
+        ma.apply_name,
+        ma.apply_start_time,
+        ma.apply_end_time,
+        ma.`status`,
+        mms.subject_id,
+        mms.exam_id,
+        mmst.id AS eachExamId,
+        mmst.exam_time,
+        mmst.start_time,
+        mmst.end_time,
+        ma.mock_activity
+        FROM
+        `mock_apply` ma
+        LEFT JOIN mock_major mm ON ma.apply_id = mm.apply_id
+        LEFT JOIN mock_major_subject mms ON mm.mock_major_id = mms.mock_major_id
+        LEFT JOIN course_subject cs ON mms.subject_id = cs.id
+        LEFT JOIN mock_major_subject_time mmst ON mms.mock_major_subject_id = mmst.mock_major_subject_id
+        WHERE
+        ma.`status` = 1
+        AND cs.subject_name = #{majorName}
+        AND ma.education_type_id = #{eduId}
+        AND ma.project_id = #{proId}
+        AND ma.business_id = #{businessId}
+        AND UNIX_TIMESTAMP() &lt; ( mmst.exam_time + 7200 )
+        ORDER BY mmst.exam_time
+         LIMIT 1
+    </select>
+
 
 </mapper>

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

@@ -1260,6 +1260,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="majorName != null and majorName != ''">
             AND m.category_name = #{majorName}
         </if>
+        ORDER BY og.create_time DESC
     </select>
     <select id="getOrderSnByXY" parameterType="com.zhongzheng.modules.order.vo.UserStudyConditionVo" resultType="java.lang.String">
         SELECT

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

@@ -104,7 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             user_mock_record ue
                 LEFT JOIN exam e ON ue.exam_id = e.exam_id
                 LEFT JOIN exam_paper ep ON e.exam_paper_id = ep.paper_id
-                LEFT JOIN user_mock_subscribe ums ON ue.each_exam_id = ums.each_exam_id
+                LEFT JOIN user_mock_subscribe ums ON ue.each_exam_id = ums.each_exam_id AND ue.user_id = ums.user_id
         WHERE
             ue.user_id = #{userId}
         <if test="paperId != null and paperId != ''">