he2802 2 年之前
父節點
當前提交
12c8d271b6
共有 31 個文件被更改,包括 561 次插入251 次删除
  1. 11 11
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 12 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseBusinessController.java
  3. 1 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysLoginController.java
  4. 47 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/SmsController.java
  5. 5 4
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  6. 5 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/LoginBody.java
  7. 26 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java
  8. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java
  9. 15 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamSimulateServiceImpl.java
  10. 9 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessQueryBo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseBusinessMapper.java
  12. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseBusinessService.java
  13. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java
  14. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsAddBo.java
  15. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEditBo.java
  16. 6 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsQueryBo.java
  17. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java
  18. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java
  19. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeListBo.java
  20. 161 139
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  21. 19 30
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  22. 24 15
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  23. 23 17
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  24. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserExamWrongRecordQueryBo.java
  25. 14 16
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserMockSubscribeServiceImpl.java
  26. 67 1
      zhongzheng-system/src/main/resources/mapper/modules/collect/CollectQuestionMapper.xml
  27. 17 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseBusinessMapper.xml
  28. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml
  29. 7 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  30. 12 4
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  31. 38 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserExamWrongRecordMapper.xml

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

@@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.config.RuoYiConfig;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
-import com.zhongzheng.common.core.domain.model.LoginBody;
-import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUploadUtils;
@@ -17,7 +15,6 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.config.ServerConfig;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.modules.base.bo.ConfigQueryBo;
-import com.zhongzheng.modules.course.vo.CourseMenuVo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.GoodsStudyUrlBo;
 import com.zhongzheng.modules.goods.bo.UserGoodsListBo;
@@ -27,26 +24,20 @@ import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
-import com.zhongzheng.modules.grade.vo.ClassNpUserInfoVo;
-import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportAllVo;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
-import com.zhongzheng.modules.order.bo.OrderAddBo;
 import com.zhongzheng.modules.order.domain.Order;
 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.service.impl.OrderServiceImpl;
-import com.zhongzheng.modules.system.bo.SysNginxConfigAddBo;
 import com.zhongzheng.modules.system.bo.SysTenantAdminBo;
 import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
-import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.system.service.ISysWebService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
 import com.zhongzheng.modules.top.bo.TopSysTenantRegisterAddBo;
 import com.zhongzheng.modules.top.service.ITopSysTenantRegisterService;
 import com.zhongzheng.modules.user.service.IUserService;
-import com.zhongzheng.modules.user.vo.UserExportVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import io.swagger.annotations.ApiOperation;
@@ -106,6 +97,8 @@ public class CommonController
     private  ITopSysTenantRegisterService iTopSysTenantRegisterService;
     @Autowired
     private  ISysWebService webService;
+    @Autowired
+    private ISysConfigService configService;
     /**
      * 通用下载请求
      *
@@ -308,7 +301,7 @@ public class CommonController
     public AjaxResult<Void> testGrade()
     {
      //   iClassGradeService.checkEjjjPeopleNumLimit(195L,984L);
-        iUserService.batchUpdateTelId();
+     //   iUserService.batchUpdateTelId();
         return AjaxResult.success();
     }
 
@@ -379,4 +372,11 @@ public class CommonController
         iTopSysTenantRegisterService.test(new TopSysTenantRegisterAddBo());
         return AjaxResult.success();
     }*/
+
+    @ApiOperation("登录双重验证")
+    @GetMapping("common/free/dual_auth")
+    public AjaxResult<String> dual_auth() {
+        String dualAuth = configService.selectConfigByKey("login.dual.auth");
+        return AjaxResult.success("成功",dualAuth);
+    }
 }

+ 12 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseBusinessController.java

@@ -156,4 +156,16 @@ public class CourseBusinessController extends BaseController {
     public AjaxResult<Void> editRefundPeriodUserIds(@RequestBody CourseBusinessEditBo bo) {
         return toAjax(iCourseBusinessService.editRefundPeriodUserIds(bo) ? 1 : 0);
     }
+
+
+    /**
+     * 根据名称查找业务层ID
+     */
+    @ApiOperation("根据名称查找业务层ID")
+    @PreAuthorize("@ss.hasPermi('course:business:list')")
+    @GetMapping("/queryFullId")
+    public AjaxResult<CourseBusinessVo> queryFullId(CourseBusinessQueryBo bo) {
+        CourseBusinessVo vo = iCourseBusinessService.queryFullId(bo);
+        return AjaxResult.success(vo);
+    }
 }

+ 1 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysLoginController.java

@@ -84,7 +84,7 @@ public class SysLoginController
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
-                loginBody.getUuid());
+                loginBody.getUuid(),loginBody.getSmsCode(),loginBody.getPhonenumber());
         ajax.put(Constants.TOKEN, token);
         return ajax;
     }

+ 47 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/SmsController.java

@@ -0,0 +1,47 @@
+package com.zhongzheng.controller.user;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alisms.bo.SmsAddBo;
+import com.zhongzheng.modules.alisms.service.IAliSmsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 客户端用户Controller
+ *
+ * @author hjl
+ * @date 2021-06-08
+ */
+@Api(value = "短信控制器", tags = {"短信控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/sms")
+public class SmsController extends BaseController {
+
+    private final IAliSmsService iSmsService;
+
+
+    @ApiOperation("获取注册短信")
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody SmsAddBo bo) {
+        iSmsService.sendRegisterSms(bo.getTel());
+        return AjaxResult.success();
+    }
+
+
+    @ApiOperation("获取登录短信")
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody SmsAddBo bo) {
+        iSmsService.sendLoginSms(bo.getTel());
+        return AjaxResult.success();
+    }
+
+
+}

+ 5 - 4
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -116,16 +116,17 @@ public class GoodsController extends BaseController {
         UserExamWrongRecordQueryBo wBo = new UserExamWrongRecordQueryBo();
         wBo.setOrderGoodsId(orderGoodsId);
         wBo.setUserId(loginUser.getUser().getUserId());
-        wBo.setDoMode(1L);
+        List<Long> listMode = new ArrayList<>();
+        listMode.add(1L);
+        listMode.add(3L);
+        wBo.setDoModes(listMode);
         Long wrongNum = iUserExamWrongRecordService.recordNum(wBo);
         numMap.put("wrongNum",wrongNum);
 
         CollectQuestionQueryBo collectQuestionQueryBo = new CollectQuestionQueryBo();
         collectQuestionQueryBo.setOrderGoodsId(orderGoodsId);
         collectQuestionQueryBo.setUserId(loginUser.getUser().getUserId());
-        List<Long> listMode = new ArrayList<>();
-        listMode.add(1L);
-        listMode.add(3L);
+
         collectQuestionQueryBo.setDoModes(listMode);
         Integer collectNum = iCollectQuestionService.collectNum(collectQuestionQueryBo);
         numMap.put("collectNum",collectNum);

+ 5 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/LoginBody.java

@@ -40,4 +40,9 @@ public class LoginBody
     @ApiModelProperty(value ="验证码uuid",required = true)
     private String uuid = "";
 
+    @ApiModelProperty(value ="短信验证码")
+    private String smsCode;
+
+    @ApiModelProperty(value ="手机号码")
+    private String phonenumber;
 }

+ 26 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java

@@ -8,10 +8,12 @@ import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.model.LoginBody;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.framework.manager.factory.AsyncFactory;
+import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.common.utils.AES;
 import com.zhongzheng.framework.manager.factory.AsyncFactory;
 import com.zhongzheng.modules.user.bo.UserBusinessLoginBo;
+import com.zhongzheng.modules.user.service.IUserLoginErrorService;
 import org.apache.commons.compress.utils.IOUtils;
 import org.bouncycastle.jcajce.provider.asymmetric.rsa.RSAUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,8 +55,11 @@ public class SysLoginService
     @Autowired
     private ISysUserService iSysUserService;
 
+    @Autowired
+    private ISysConfigService configService;
 
-
+    @Autowired
+    private IUserLoginErrorService iUserLoginErrorService;
     /**
      * 登录验证
      *
@@ -64,7 +69,7 @@ public class SysLoginService
      * @param uuid 唯一标识
      * @return 结果
      */
-    public String login(String username, String password, String code, String uuid)
+    public String login(String username, String password, String code, String uuid,String smsCode,String tel)
     {
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
         String captcha = redisCache.getCacheObject(verifyKey);
@@ -79,6 +84,7 @@ public class SysLoginService
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
             throw new CaptchaException();
         }
+        iUserLoginErrorService.checkLimit(username);
         // 用户验证
         Authentication authentication = null;
         try
@@ -101,6 +107,7 @@ public class SysLoginService
         }
         catch (Exception e)
         {
+            iUserLoginErrorService.saveErrorLog(username);
             if (e instanceof BadCredentialsException)
             {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
@@ -115,6 +122,23 @@ public class SysLoginService
         AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
         LoginUser loginUser = (LoginUser) authentication.getPrincipal();
         SysUser user = iSysUserService.updateLoginTimeIp(loginUser.getUser().getUserId());
+        String dualAuth = configService.selectConfigByKey("login.dual.auth");
+        if(Validator.isNotEmpty(dualAuth)&&dualAuth.equals("1")){
+            if(Validator.isEmpty(tel)){
+                throw new CustomException("手机号码不能为空");
+            }
+            String key = Constants.LOGIN_SMS + tel;
+            String localSmsCode =  redisCache.getCacheObject(key);
+            if(smsCode==null){
+                throw new CustomException("验证码不能为空");
+            }
+            if(!localSmsCode.equals(smsCode)){
+                throw new CustomException("验证码错误");
+            }
+            if(!tel.equals(user.getPhonenumber())){
+                throw new CustomException("手机号码和登录账号不匹配");
+            }
+        }
         loginUser.setUser(user);
         // 生成token
         return tokenService.createToken(loginUser);

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

@@ -251,19 +251,19 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
             if((q1>0)&&(q1<entity.getSimulateConfig().getSingleChoice().getKnum())){
                 throw new CustomException("模拟配置单选题参数错误");
             }
-            if(entity.getSimulateConfig().getSingleChoice().getOrderNum()>3){
+            if(entity.getSimulateConfig().getSingleChoice().getOrderNum()>4){
                 throw new CustomException("模拟配置单选题参数错误");
             }
             if((q2>0)&&(q2<entity.getSimulateConfig().getMultipleChoice().getKnum())){
                 throw new CustomException("模拟配置多选题参数错误");
             }
-            if(entity.getSimulateConfig().getMultipleChoice().getOrderNum()>3){
+            if(entity.getSimulateConfig().getMultipleChoice().getOrderNum()>4){
                 throw new CustomException("模拟配置多选题参数错误");
             }
             if((q3>0)&&(q3<entity.getSimulateConfig().getCaseQuestion().getKnum())){
                 throw new CustomException("模拟配置案例题参数错误");
             }
-            if(entity.getSimulateConfig().getCaseQuestion().getOrderNum()>3){
+            if(entity.getSimulateConfig().getCaseQuestion().getOrderNum()>4){
                 throw new CustomException("模拟配置案例题参数错误");
             }
             entity.setSimulateConfigJson(JSON.toJSONString(entity.getSimulateConfig()));

+ 15 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamSimulateServiceImpl.java

@@ -134,8 +134,8 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
 
         ExamSimulateQueryBo qk4Bo = new ExamSimulateQueryBo(); //判断题选知识点
         qk4Bo.setExamId(exam.getExamId());
-        qk4Bo.setKnowledIds(simulateConfig.getTrueFalseQuestion().getKnowledIds());
-        qk4Bo.setKnum(simulateConfig.getTrueFalseQuestion().getKnum());
+        qk4Bo.setKnowledIds(Validator.isNotEmpty(simulateConfig.getTrueFalseQuestion())?simulateConfig.getTrueFalseQuestion().getKnowledIds():new ArrayList<>());
+        qk4Bo.setKnum(Validator.isNotEmpty(simulateConfig.getTrueFalseQuestion())?simulateConfig.getTrueFalseQuestion().getKnum():0);
         qk4Bo.setType(3);
         qk4Bo.setOrderGoodsId(bo.getOrderGoodsId());
         qk4Bo.setFromType(bo.getFrom());
@@ -144,7 +144,13 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
         List<Long> w1 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getSingleChoice().getQnum()-qk1.size()),qk1,1);//单选错题
         List<Long> w2 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getMultipleChoice().getQnum()-qk2.size()),qk2,2);//多选错题
         List<Long> w3 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getCaseQuestion().getQnum()-qk3.size()),qk3,4);//案例错题
-        List<Long> w4 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()),qk4,3);//判断错题
+        List<Long> w4 = null;
+        if(Validator.isNotEmpty(simulateConfig.getTrueFalseQuestion())){
+            w4 = getWrongQuestion(bo.getOrderGoodsId(),bo.getExamId(),bo.getFrom(),simulateConfig.getType(),(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()),qk4,3);//判断错题
+        }else{
+            w4 = new ArrayList<>();
+        }
+
 
         ExamSimulateQueryBo q1Bo = new ExamSimulateQueryBo();  //单选
         q1Bo.setExamId(exam.getExamId());
@@ -182,7 +188,11 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
         q4Bo.setExamId(exam.getExamId());
         q4Bo.setKnowledQuestionIds(qk4);
         q4Bo.setWrongQuestionIds(w4);
-        q4Bo.setQnum(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()- w4.size());
+        if(Validator.isNotEmpty(simulateConfig.getTrueFalseQuestion())){
+            q4Bo.setQnum(simulateConfig.getTrueFalseQuestion().getQnum()-qk4.size()- w4.size());
+        }else{
+            q4Bo.setQnum(0);
+        }
         q4Bo.setType(3);
         q4Bo.setOrderGoodsId(bo.getOrderGoodsId());
         q4Bo.setFromType(bo.getFrom());
@@ -211,7 +221,7 @@ public class ExamSimulateServiceImpl extends ServiceImpl<ExamSimulateMapper, Exa
                 if(simulateConfig.getCaseQuestion().getOrderNum()==i){
                     allQ.addAll(qk3);
                 }
-                if(simulateConfig.getTrueFalseQuestion().getOrderNum()==i){
+                if(Validator.isNotEmpty(simulateConfig.getTrueFalseQuestion())&&simulateConfig.getTrueFalseQuestion().getOrderNum()==i){
                     allQ.addAll(qk4);
                 }
             }

+ 9 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessQueryBo.java

@@ -46,7 +46,7 @@ public class CourseBusinessQueryBo extends BaseEntity {
 	private Long id;
 
 	/** 项目名称 */
-	@ApiModelProperty("项目名称")
+	@ApiModelProperty("业务名称")
 	private String businessName;
 	/** 项目id */
 	@ApiModelProperty("项目id")
@@ -82,4 +82,12 @@ public class CourseBusinessQueryBo extends BaseEntity {
 	private Integer periodType;
 	@ApiModelProperty("学时审核层级:1初审,2初审和复审")
 	private Integer periodNumber;
+
+	/** 项目名称 */
+	@ApiModelProperty("项目名称")
+	private String projectName;
+
+	/** 教育类型名称 */
+	@ApiModelProperty("教育类型名称")
+	private String educationName;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseBusinessMapper.java

@@ -26,4 +26,6 @@ public interface CourseBusinessMapper extends BaseMapper<CourseBusiness> {
 
     @InterceptorIgnore(tenantLine = "true")
     CourseBusiness getBusinessByIdTenant(@Param("businessId") Long businessId,@Param("tenantId") Long tenantId);
+
+    CourseBusinessVo queryFullId(CourseBusinessQueryBo bo);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseBusinessService.java

@@ -65,4 +65,6 @@ public interface ICourseBusinessService extends IService<CourseBusiness> {
     CourseBusiness getBusinessByTenant(String encoder, Long newTenantId);
 
 	CourseBusiness getBusinessByIdTenant(Long businessId, Long tenantId);
+
+	CourseBusinessVo queryFullId(CourseBusinessQueryBo bo);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java

@@ -242,4 +242,9 @@ public class CourseBusinessServiceImpl extends ServiceImpl<CourseBusinessMapper,
         return baseMapper.getBusinessByIdTenant(businessId, tenantId);
     }
 
+    @Override
+    public CourseBusinessVo queryFullId(CourseBusinessQueryBo bo) {
+        return baseMapper.queryFullId(bo);
+    }
+
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsAddBo.java

@@ -188,4 +188,10 @@ public class GoodsAddBo {
     private String externalLink;
     @ApiModelProperty("是否外链商品:0否 1是")
     private Integer externalLinkStatus;
+    /** 是否提交官方审核 0没有 1有 */
+    @ApiModelProperty("是否提交官方审核 0没有 1有")
+    private Integer commitPeriodStatus;
+    /** 提交官方审核备注说明 */
+    @ApiModelProperty("提交官方审核备注说明")
+    private String commitPeriodRemark;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEditBo.java

@@ -222,4 +222,10 @@ public class GoodsEditBo {
     private String externalLink;
     @ApiModelProperty("是否外链商品:0否 1是")
     private Integer externalLinkStatus;
+    /** 是否提交官方审核 0没有 1有 */
+    @ApiModelProperty("是否提交官方审核 0没有 1有")
+    private Integer commitPeriodStatus;
+    /** 提交官方审核备注说明 */
+    @ApiModelProperty("提交官方审核备注说明")
+    private String commitPeriodRemark;
 }

+ 6 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsQueryBo.java

@@ -204,5 +204,10 @@ public class GoodsQueryBo extends BaseEntity {
 	/** 商品服务期校验字段 */
 	@ApiModelProperty("显示状态:1,显示 0,不显示")
 	private Integer showStatus;
-
+	/** 是否提交官方审核 0没有 1有 */
+	@ApiModelProperty("是否提交官方审核 0没有 1有")
+	private Integer commitPeriodStatus;
+	/** 提交官方审核备注说明 */
+	@ApiModelProperty("提交官方审核备注说明")
+	private String commitPeriodRemark;
 }

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java

@@ -153,5 +153,8 @@ private static final long serialVersionUID=1L;
     private String externalLink;
     /** 是否外链商品:0否 1是 */
     private Integer externalLinkStatus;
-
+    /** 是否提交官方审核 0没有 1有 */
+    private Integer commitPeriodStatus;
+    /** 提交官方审核备注说明 */
+    private String commitPeriodRemark;
 }

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java

@@ -351,5 +351,13 @@ public class GoodsVo {
 	private String externalLink;
 	@ApiModelProperty("是否外链商品:0否 1是")
 	private Integer externalLinkStatus;
+	/** 是否提交官方审核 0没有 1有 */
+	@Excel(name = "是否提交官方审核 0没有 1有")
+	@ApiModelProperty("是否提交官方审核 0没有 1有")
+	private Integer commitPeriodStatus;
+	/** 提交官方审核备注说明 */
+	@Excel(name = "提交官方审核备注说明")
+	@ApiModelProperty("提交官方审核备注说明")
+	private String commitPeriodRemark;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeListBo.java

@@ -18,4 +18,6 @@ public class ClassGradeListBo implements Serializable {
     private List<Long> subIds;
 
     private Long tenantId;
+
+    private String educationName;
 }

+ 161 - 139
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -149,6 +149,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Autowired
     private ISysOldOrgService iSysOldOrgService;
 
+    @Autowired
+    private ISysOldOrgService sysOldOrgService;
+
     @Autowired
     private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
 
@@ -233,9 +236,14 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         if (CollectionUtils.isNotEmpty(list)) {
             throw new RuntimeException("班级名称不能重复");
         }
+        //企业ID
+        String tenant = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+                .eq(SysOldOrg::getTenantId, tenant)
+                .last("limit 1")).stream().findFirst().orElse(null);
         //校验是否二建/二造商品创建班级
         if (bo.getClassGradeGoodsAddBos() != null &&
-                (ObjectUtils.isNull(bo.getClassStatus()) || 1 == bo.getClassStatus())) {
+                (ObjectUtils.isNull(bo.getClassStatus()) || 1 == bo.getClassStatus()) && org.getShareClass() == 1) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
             Goods goods = iGoodsService.getById(goodsId);
             CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
@@ -248,7 +256,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
         //是否创建官方班级编号
         if (bo.getClassGradeGoodsAddBos() != null &&
-                (ObjectUtils.isNull(bo.getClassStatus()) || 0 == bo.getClassStatus())) {
+                (ObjectUtils.isNull(bo.getClassStatus()) || 0 == bo.getClassStatus()) && org.getShareClass() == 1) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
             Goods goods = iGoodsService.getById(goodsId);
             CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
@@ -259,17 +267,17 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
                         .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
                         .eq(Goods::getBusinessId, goods.getBusinessId())
-                        .eq(Goods::getStatus,1)
-                        .eq(Goods::getGoodsStatus,1)
+                        .eq(Goods::getStatus, 1)
+                        .eq(Goods::getGoodsStatus, 1)
                         .eq(Goods::getProjectId, goods.getProjectId())
                         .eq(Goods::getSubjectIds, goods.getSubjectIds()));
-                if (goodsList.size() > 1){
+                if (goodsList.size() > 1) {
                     //该业务层次下有多个商品
                     List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
                     List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService
                             .list(new LambdaQueryWrapper<ClassGradeGoods>()
                                     .in(ClassGradeGoods::getGoodsId, goodsIds));
-                    if (CollectionUtils.isNotEmpty(goodsGradeList)){
+                    if (CollectionUtils.isNotEmpty(goodsGradeList)) {
                         Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
                         List<ClassGradeSortBo> sortList = new ArrayList<>();
                         map.forEach((k, v) -> {
@@ -286,10 +294,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
                         if (gradeGoods.size() < listGrade.size()) {
                             ClassGrade grade = list.get(gradeGoods.size());
-                            if (checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
+                            if (checkEjjjPeopleNumLimit(business.getId(), grade.getGradeId())) {
                                 add.setOfficialName(list.get(gradeGoods.size()).getOfficialName());
                                 add.setClassStatus(0);
-                            }else {
+                            } else {
                                 add.setOfficialName(ServletUtils.getEncoded("PIY"));
                                 add.setClassStatus(0);
                             }
@@ -297,7 +305,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     }
                 }
 
-                if (StringUtils.isBlank(add.getOfficialName())){
+                if (StringUtils.isBlank(add.getOfficialName())) {
                     List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(goods.getSubjectIds().split(",")));
                     List<String> subNames = courseSubjectList.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
                     List<Long> subIds = iCourseSubjectService.getIdsByTenant(subNames);
@@ -306,15 +314,15 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     bgListBo.setAliasName(business.getAliasName());
                     bgListBo.setSubIds(subIds);
                     List<ClassGrade> classGrades = baseMapper.getGradeListByTenant(bgListBo);
-                    if (CollectionUtils.isEmpty(classGrades)){
+                    if (CollectionUtils.isEmpty(classGrades)) {
                         //生成预报名官方编号
                         add.setOfficialName(ServletUtils.getEncoded("PIY"));
                         add.setClassStatus(0);
-                    }else {
+                    } else {
                         //获取班级创建最多的机构
                         Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
                         List<ClassGradeSortBo> sortList = new ArrayList<>();
-                        map.forEach((k,v) -> {
+                        map.forEach((k, v) -> {
                             ClassGradeSortBo sortBo = new ClassGradeSortBo();
                             sortBo.setKey(k);
                             Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
@@ -326,17 +334,17 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         //去重
                         List<String> codeStrs = new ArrayList<>();
                         for (ClassGrade gradesMax : classGradesMax) {
-                            if (codeStrs.contains(gradesMax.getOfficialName())){
+                            if (codeStrs.contains(gradesMax.getOfficialName())) {
                                 continue;
                             }
                             codeStrs.add(gradesMax.getOfficialName());
                         }
                         //获取当前机构商品下的班级
                         List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goodsId);
-                        if(gradeGoods.size() < codeStrs.size()){
+                        if (gradeGoods.size() < codeStrs.size()) {
                             add.setOfficialName(codeStrs.get(gradeGoods.size()));
                             add.setClassStatus(0);
-                        }else {
+                        } else {
                             //生成预报名官方编号
                             add.setOfficialName(ServletUtils.getEncoded("PIY"));
                             add.setClassStatus(0);
@@ -382,30 +390,36 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         validEntityBeforeSave(update);
         update.setUpdateTime(DateUtils.getNowTime());
 
-        ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId,update.getGradeId()));
-        if (ObjectUtils.isNull(gradeGoods)){
+        ClassGradeGoods gradeGoods = iClassGradeGoodsService.getOne(new LambdaQueryWrapper<ClassGradeGoods>().eq(ClassGradeGoods::getGradeId, update.getGradeId()));
+        if (ObjectUtils.isNull(gradeGoods)) {
             throw new RuntimeException("班级商品信息查询失败");
         }
+        //企业ID
+        String tenant = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+                .eq(SysOldOrg::getTenantId, tenant)
+                .last("limit 1")).stream().findFirst().orElse(null);
+
         Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
         CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
         businessQueryBo.setId(goods.getBusinessId());
         String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
 
-        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+        if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName)))&& org.getShareClass() == 1) {
             if (update.getClassStatus() != null && update.getClassStatus().equals(1)) {
                 //二造和二建班级开班校验班级人数(300人)
-                if (!checkClassUserNum(goods.getBusinessId(),update.getGradeId())){
+                if (!checkClassUserNum(goods.getBusinessId(), update.getGradeId())) {
                     throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
                 }
                 ClassGrade gradeGrade = getById(update.getGradeId());
-                if (StringUtils.isNotBlank(gradeGrade.getOfficialName())){
+                if (StringUtils.isNotBlank(gradeGrade.getOfficialName())) {
                     update.setRegisterCode(gradeGrade.getOfficialName());
                 }
                 //二建/二造官方信息推送开关打开
                 List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
                         .list(new LambdaQueryWrapper<ClassGradeInterface>()
-                        .eq(ClassGradeInterface::getType, 1).last("limit 1"));
-                if (CollectionUtils.isNotEmpty(interfaceList)){
+                                .eq(ClassGradeInterface::getType, 1).last("limit 1"));
+                if (CollectionUtils.isNotEmpty(interfaceList)) {
                     update.setInterfacePushId(interfaceList.get(0).getId());
                 }
             }
@@ -435,7 +449,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 throw new RuntimeException("班级还有学员,无法删除");
             }
             ClassGrade grade = getById(bo.getGradeId());
-            if (StringUtils.isNotBlank(grade.getOfficialName())){
+            if (StringUtils.isNotBlank(grade.getOfficialName())) {
                 throw new RuntimeException("二建/二造班级无法删除,请联系技术人员!");
             }
         }
@@ -449,7 +463,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     throw new RuntimeException("班级还有学员,无法设置为无效");
                 }
             }
-            if (StringUtils.isNotBlank(oldGrade.getOfficialName())){
+            if (StringUtils.isNotBlank(oldGrade.getOfficialName()) && org.getShareClass() == 1) {
                 throw new RuntimeException("二建/二造班级无法设置为无效,请联系技术人员!");
             }
         }
@@ -491,9 +505,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         this.updateById(update);
 
         ClassGrade grade = getById(update.getGradeId());
-        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+        if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
             if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus())
-                    && StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1){
+                    && StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1) {
 //                List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>().eq(ClassGrade::getOfficialName, update.getRegisterCode()));
 //                if (CollectionUtils.isNotEmpty(list)){
 //                    update(new LambdaUpdateWrapper<ClassGrade>()
@@ -519,7 +533,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 this.openOfficialGrade(openBo);
                 //官方班级开班通知旧系统
                 Long nowTime = DateUtils.getNowTime();
-                String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+                String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
                 openBo.setSign(sign);
                 openBo.setStamp(nowTime);
                 JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(openBo));
@@ -531,7 +545,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                         throw new CustomException("同步请求错误" + respone);
                     }
                 } catch (Exception e) {
-                    throw new CustomException("同步请求错误"+e.getMessage());
+                    throw new CustomException("同步请求错误" + e.getMessage());
                 }
             }
         }
@@ -980,10 +994,15 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
     @Override
     public boolean checkEjjjPeopleNumLimit(Long businessId, Long gradeId) {
+        //企业ID
+        String tenant = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+                .eq(SysOldOrg::getTenantId, tenant)
+                .last("limit 1")).stream().findFirst().orElse(null);
         CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
         businessQueryBo.setId(businessId);
         String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+        if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
             //继教二建或者继教二造班级
             ClassGradeVo gradeVo = queryById(gradeId);
             if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getOfficialName())) {
@@ -1099,9 +1118,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
             }
             numAll = peopleNum + oldGradeNum;
-        }else {
+        } else {
             Long num = baseMapper.getClassUserNumByTenant(gradeId);
-            if (ObjectUtils.isNotNull(num)){
+            if (ObjectUtils.isNotNull(num)) {
                 numAll = num.intValue();
             }
         }
@@ -1156,7 +1175,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public ClassGradeVo getClassGradeVo(Long gradeId) {
         ClassGrade gradeVo = getById(gradeId);
-        if (ObjectUtils.isNull(gradeVo)){
+        if (ObjectUtils.isNull(gradeVo)) {
             return null;
         }
         ClassGradeVo vo = BeanUtil.toBean(gradeVo, ClassGradeVo.class);
@@ -1173,28 +1192,28 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public List<ClassNpUserInfoVo> officialGradeDetail(ClassNpUserInfoBo bo) {
         List<ClassNpUserInfoVo> result = baseMapper.getGradeDetailByTenant(bo);
-        if (CollectionUtils.isEmpty(result)){
+        if (CollectionUtils.isEmpty(result)) {
             return new ArrayList<>();
         }
         result.forEach(item -> {
             String date = "yyyy-MM-dd HH:mm:ss";
-            item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-            item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-            item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(),date));
+            item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(), date));
+            item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(), date));
+            item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(), date));
             //机构名称
             SysTenant tenant = sysTenantService.getById(item.getTenantId());
-            if (ObjectUtils.isNotNull(tenant)){
+            if (ObjectUtils.isNotNull(tenant)) {
                 item.setOrgName(tenant.getTenantName());
             }
             //获取学习开始时间和结束时间
-            UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(),item.getGradeId(),"ASC");
-            if (ObjectUtils.isNotNull(startRecord)){
-                item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(),date));
-                UserStudyRecord endRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(),item.getGradeId(),"DESC");
-                item.setApplyTime(DateUtils.timestampToDateFormat(endRecord.getCreateTime(),date));
+            UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(), item.getGradeId(), "ASC");
+            if (ObjectUtils.isNotNull(startRecord)) {
+                item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(), date));
+                UserStudyRecord endRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(), item.getGradeId(), "DESC");
+                item.setApplyTime(DateUtils.timestampToDateFormat(endRecord.getCreateTime(), date));
             }
             //科目名称
-            if(StringUtils.isNotBlank(item.getSubjectIds())){
+            if (StringUtils.isNotBlank(item.getSubjectIds())) {
                 List<CourseSubject> courseSubjectList = iCourseSubjectService.getListByIDs(Arrays.asList(item.getSubjectIds().split(",")).stream().map(x -> Long.valueOf(x)).collect(Collectors.toList()));
                 item.setMajorName(courseSubjectList.stream().filter(x -> StringUtils.isNotBlank(x.getSubjectName())).map(CourseSubject::getSubjectName).collect(Collectors.joining(",")));
             }
@@ -1213,20 +1232,21 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         //祥粤云
         Long tenantId = 867735392558919680L;
         bgListBo.setTenantId(tenantId);
+        bgListBo.setEducationName("继续教育");
         List<Long> goodsIds = baseMapper.getGoodsIdByBoTenant(bgListBo);
-        if (CollectionUtils.isEmpty(goodsIds)){
+        if (CollectionUtils.isEmpty(goodsIds)) {
             throw new CustomException("改业务层次下不存在商品,请检查!");
         }
         //生成预报名官方编号
         String encoded = ServletUtils.getEncoded("PIY");
-        if (CollectionUtils.isEmpty(classGrades)){
+        if (CollectionUtils.isEmpty(classGrades)) {
             //创建新预报名班级
-            creatClass(goodsIds.get(0),tenantId,encoded);
-        }else {
+            creatClass(goodsIds, tenantId, encoded);
+        } else {
             //获取班级创建最多的机构
             Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
             List<ClassGradeSortBo> sortList = new ArrayList<>();
-            map.forEach((k,v) -> {
+            map.forEach((k, v) -> {
                 ClassGradeSortBo sortBo = new ClassGradeSortBo();
                 sortBo.setKey(k);
                 Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
@@ -1235,18 +1255,18 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             });
             ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
             List<ClassGrade> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGrade::getCreateTime)).collect(Collectors.toList());
-            if(bo.getSortNum() < classGradesMax.size()){
+            if (bo.getSortNum() < classGradesMax.size()) {
                 ClassGrade classGrade = classGradesMax.get(bo.getSortNum());
                 ClassUserNumBo classUserNumBo = new ClassUserNumBo();
                 classUserNumBo.setOfficialName(classGrade.getOfficialName());
                 ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
                 classGradeQueryBo.setOfficialName(classGrade.getOfficialName());
                 Integer count = baseMapper.queryOfficialGradeCount(classGradeQueryBo);
-                classUserNumBo.setNum(ObjectUtils.isNotNull(count)?count:0);
-               return classUserNumBo;
-            }else {
+                classUserNumBo.setNum(ObjectUtils.isNotNull(count) ? count : 0);
+                return classUserNumBo;
+            } else {
                 //创建新预报名班级
-                creatClass(goodsIds.get(0),tenantId,encoded);
+                creatClass(goodsIds, tenantId, encoded);
             }
         }
 
@@ -1255,7 +1275,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
         classGradeQueryBo.setOfficialName(encoded);
         Integer count = baseMapper.queryOfficialGradeCount(classGradeQueryBo);
-        classUserNumBo.setNum(ObjectUtils.isNotNull(count)?count:0);
+        classUserNumBo.setNum(ObjectUtils.isNotNull(count) ? count : 0);
         return classUserNumBo;
     }
 
@@ -1266,10 +1286,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
     @Override
     public void openOfficialGrade(ClassGradeOpenBo bo) {
-       List<ClassGrade> list = baseMapper.getGradeListByCodeTenant(bo.getRegisterCode());
-       if (CollectionUtils.isEmpty(list)){
-           return;
-       }
+        List<ClassGrade> list = baseMapper.getGradeListByCodeTenant(bo.getRegisterCode());
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
         List<Long> ids = list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList());
         //保留预报名编号
         baseMapper.UpGradeCodeByIdTenant(ids);
@@ -1281,14 +1301,14 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         openUpBo.setClassName(bo.getClassName());
         openUpBo.setClassStartTime(bo.getClassStartTime());
         openUpBo.setClassEndTime(bo.getClassEndTime());
-        openUpBo.setLearningStatus(bo.getLearningStatus());
+        openUpBo.setLearningStatus(ObjectUtils.isNotNull(bo.getLearningStatus())?bo.getLearningStatus():1);
         openUpBo.setLearningTimeStart(bo.getLearningTimeStart());
         baseMapper.UpGradeStatusByTenant(openUpBo);
 
         //开启官方信息推送
         list.forEach(item -> {
-            ClassGradeInterface interfaceInterface = iClassGradeInterfaceService.getInfterFaceByTenant(1,item.getTenantId());
-            if (ObjectUtils.isNotNull(interfaceInterface)){
+            ClassGradeInterface interfaceInterface = iClassGradeInterfaceService.getInfterFaceByTenant(1, item.getTenantId());
+            if (ObjectUtils.isNotNull(interfaceInterface)) {
                 ClassGradeOpenUpBo upBo = new ClassGradeOpenUpBo();
                 upBo.setGradeId(item.getGradeId());
                 upBo.setInterfacePushId(interfaceInterface.getId());
@@ -1301,50 +1321,50 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public List<ClassNpUserInfoVo> otherClassUserList(ClassNpUserInfoBo bo) {
         ClassGrade grade = getById(bo.getGradeId());
-        if (ObjectUtils.isNull(grade) || StringUtils.isBlank(grade.getOfficialName())){
+        if (ObjectUtils.isNull(grade) || StringUtils.isBlank(grade.getOfficialName())) {
             throw new CustomException("班级信息有有误,请联系管理员!");
         }
         //查询旧机构对应新系统ID
-        if (ObjectUtils.isNotNull(bo.getTrainOrgId())){
+        if (ObjectUtils.isNotNull(bo.getTrainOrgId())) {
             List<SysOldOrg> list = iSysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
                     .eq(SysOldOrg::getOrgId, bo.getTrainOrgId())
                     .eq(SysOldOrg::getStatus, 1));
-            if (CollectionUtils.isNotEmpty(list)){
+            if (CollectionUtils.isNotEmpty(list)) {
                 SysOldOrg sysOldOrg = list.get(0);
-                bo.setTenantId(ObjectUtils.isNotNull(sysOldOrg.getTenantId())?sysOldOrg.getTenantId():0L);
-            }else {
+                bo.setTenantId(ObjectUtils.isNotNull(sysOldOrg.getTenantId()) ? sysOldOrg.getTenantId() : 0L);
+            } else {
                 bo.setTenantId(0L);
             }
         }
         bo.setOfficialName(grade.getOfficialName());
         //新系统二建/二造班级学员信息
         List<ClassNpUserInfoVo> result = baseMapper.getGradeDetailByTenant(bo);
-        if (CollectionUtils.isNotEmpty(result)){
+        if (CollectionUtils.isNotEmpty(result)) {
             result.forEach(item -> {
                 String date = "yyyy-MM-dd HH:mm:ss";
-                item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-                item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-                item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(),date));
+                item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(), date));
+                item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(), date));
+                item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(), date));
                 //机构名称
                 SysTenant tenant = sysTenantService.getById(item.getTenantId());
-                if (ObjectUtils.isNotNull(tenant)){
+                if (ObjectUtils.isNotNull(tenant)) {
                     item.setOrgName(tenant.getTenantName());
                 }
                 //获取学习开始时间和结束时间
-                UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(),item.getGradeId(),"ASC");
-                if (ObjectUtils.isNotNull(startRecord)){
-                    item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(),date));
-                    item.setApplyTime(DateUtils.timestampToDateFormat(item.getApplyTimeLong(),date));
+                UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(), item.getGradeId(), "ASC");
+                if (ObjectUtils.isNotNull(startRecord)) {
+                    item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(), date));
+                    item.setApplyTime(DateUtils.timestampToDateFormat(item.getApplyTimeLong(), date));
                 }
                 //科目名称
-                if(StringUtils.isNotBlank(item.getSubjectIds())){
+                if (StringUtils.isNotBlank(item.getSubjectIds())) {
                     List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(item.getSubjectIds().split(",")));
                     item.setMajorName(courseSubjectList.stream().filter(x -> StringUtils.isNotBlank(x.getSubjectName())).map(CourseSubject::getSubjectName).collect(Collectors.joining(",")));
                 }
-                if (ObjectUtils.isNull(item.getReportStatu())){
+                if (ObjectUtils.isNull(item.getReportStatu())) {
                     item.setReportStatu(0);
                 }
-                if (ObjectUtils.isNull(item.getStudyQueueStatus())){
+                if (ObjectUtils.isNull(item.getStudyQueueStatus())) {
                     item.setStudyQueueStatus(0);
                 }
             });
@@ -1352,7 +1372,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         //旧系统二建/二造班级学员信息
         bo.setClassNo(bo.getOfficialName());
         Long nowTime = DateUtils.getNowTime();
-        String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
+        String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
         bo.setSign(sign);
         bo.setStamp(nowTime);
         JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(bo));
@@ -1365,77 +1385,79 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             }
             JSONObject jsonObject = (JSONObject) JSONObject.parse(respone);
             JSONArray dataArray = jsonObject.getJSONArray("Message");
-            if (ObjectUtils.isNotNull(dataArray)){
+            if (ObjectUtils.isNotNull(dataArray)) {
                 List<ClassNpUserInfoVo> voList = JSONArray.parseArray(JSONArray.toJSONString(dataArray), ClassNpUserInfoVo.class);
                 result.addAll(voList);
             }
         } catch (Exception e) {
-            throw new CustomException("同步请求错误"+e.getMessage());
+            throw new CustomException("同步请求错误" + e.getMessage());
         }
         return result;
     }
 
     //创建预开班班级
-    private void creatClass(Long goodsId,Long tenantId,String code){
-        //创建新班级
-        Goods goods = iGoodsService.getGoodsByIdTenant(goodsId,tenantId);
-        CourseBusiness businessVo = iCourseBusinessService.getBusinessByIdTenant(goods.getBusinessId(),tenantId);
-        boolean isConfigTp = false; //商品是否有配置选班模板
-        if (Validator.isNotEmpty(businessVo) && Validator.isNotEmpty(businessVo.getTemplateName()) && businessVo.getTemplateName().equals("班级")) {
-            isConfigTp = true;
-        }
-        ClassGrade classGrade = new ClassGrade();
-        classGrade.setCreateTime(DateUtils.getNowTime());
-        if (isConfigTp) {
-            classGrade.setClassStatus(0);
-            classGrade.setLearningStatus(2);//待定
-            classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
-            //生成官方班级编号
-            classGrade.setOfficialName(code);
-        }
-        classGrade.setUpdateTime(DateUtils.getNowTime());
-        classGrade.setStatus(1);
-        String gradeCode = ServletUtils.getEncoded("BJ");
-        classGrade.setGradeCode(gradeCode);
+    private void creatClass(List<Long> goodsIds, Long tenantId, String code) {
+        goodsIds.forEach(goodsId -> {
+            //创建新班级
+            Goods goods = iGoodsService.getGoodsByIdTenant(goodsId, tenantId);
+            CourseBusiness businessVo = iCourseBusinessService.getBusinessByIdTenant(goods.getBusinessId(), tenantId);
+            boolean isConfigTp = false; //商品是否有配置选班模板
+            if (Validator.isNotEmpty(businessVo) && Validator.isNotEmpty(businessVo.getTemplateName()) && businessVo.getTemplateName().equals("班级")) {
+                isConfigTp = true;
+            }
+            ClassGrade classGrade = new ClassGrade();
+            classGrade.setCreateTime(DateUtils.getNowTime());
+            if (isConfigTp) {
+                classGrade.setClassStatus(0);
+                classGrade.setLearningStatus(2);//待定
+                classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
+                //生成官方班级编号
+                classGrade.setOfficialName(code);
+            }
+            classGrade.setUpdateTime(DateUtils.getNowTime());
+            classGrade.setStatus(1);
+            String gradeCode = ServletUtils.getEncoded("BJ");
+            classGrade.setGradeCode(gradeCode);
 //        classGrade.setClassName(goodsName + gradeCode);
-        //班级名称 年份+期数+业务层次(俗名)+教育类型+科目(存在多个科目时,显示多个科目,用“+”分割)
-        String businessName = businessVo.getAliasName();
-        CourseEducationType educationType = courseEducationTypeService.getEducationByIdtenant(goods.getEducationTypeId(),tenantId);
-        String educationName = educationType.getEducationName();
-        String className = businessName + educationName;
-        if (net.polyv.common.v1.util.StringUtils.isNotBlank(goods.getSubjectIds())){
-            ClassGradeListBo bgListBo = new ClassGradeListBo();
-            bgListBo.setSubIds(Arrays.stream(goods.getSubjectIds().split(",")).map(x -> Long.valueOf(x)).collect(Collectors.toList()));
-            bgListBo.setTenantId(tenantId);
-            List<CourseSubject> subjects = iCourseSubjectService.listByIdsTenant(bgListBo);
-            List<String> names = subjects.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
-            className = String.format("%s(%s)",className,org.apache.commons.lang3.StringUtils.join(names,'+'));
-        }
-        Integer nameSort = 1;
-        //获取排序值
-        List<ClassGrade> list = baseMapper.queryListByNameTenantId(className,tenantId);
-        if (CollectionUtils.isNotEmpty(list)){
-            List<Integer> collect = list.stream().filter(x -> x.getClassName().contains("第") && x.getClassName().contains("期")).map(item -> {
-                String name = item.getClassName();
-                String substring = name.substring(name.indexOf("第") + 1, name.indexOf("期"));
-                return Integer.parseInt(substring);
-            }).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(collect)){
-                Integer integer = collect.stream().sorted(Comparator.reverseOrder()).findFirst().get();
-                nameSort = integer + 1;
+            //班级名称 年份+期数+业务层次(俗名)+教育类型+科目(存在多个科目时,显示多个科目,用“+”分割)
+            String businessName = businessVo.getAliasName();
+            CourseEducationType educationType = courseEducationTypeService.getEducationByIdtenant(goods.getEducationTypeId(), tenantId);
+            String educationName = educationType.getEducationName();
+            String className = businessName + educationName;
+            if (net.polyv.common.v1.util.StringUtils.isNotBlank(goods.getSubjectIds())) {
+                ClassGradeListBo bgListBo = new ClassGradeListBo();
+                bgListBo.setSubIds(Arrays.stream(goods.getSubjectIds().split(",")).map(x -> Long.valueOf(x)).collect(Collectors.toList()));
+                bgListBo.setTenantId(tenantId);
+                List<CourseSubject> subjects = iCourseSubjectService.listByIdsTenant(bgListBo);
+                List<String> names = subjects.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
+                className = String.format("%s(%s)", className, org.apache.commons.lang3.StringUtils.join(names, '+'));
             }
-        }
-        classGrade.setClassName(String.format("%s年第%s期%s",goods.getYear(),nameSort,className));
-        classGrade.setTenantId(tenantId);
-        save(classGrade);
-        //绑定班级商品
-        ClassGradeGoods classGradeGoods = new ClassGradeGoods();
-        classGradeGoods.setGradeId(classGrade.getGradeId());
-        classGradeGoods.setGoodsId(goodsId);
-        classGradeGoods.setCreateTime(DateUtils.getNowTime());
-        classGradeGoods.setUpdateTime(DateUtils.getNowTime());
-        classGradeGoods.setTenantId(tenantId);
-        iClassGradeGoodsService.save(classGradeGoods);
+            Integer nameSort = 1;
+            //获取排序值
+            List<ClassGrade> list = baseMapper.queryListByNameTenantId(className, tenantId);
+            if (CollectionUtils.isNotEmpty(list)) {
+                List<Integer> collect = list.stream().filter(x -> x.getClassName().contains("第") && x.getClassName().contains("期")).map(item -> {
+                    String name = item.getClassName();
+                    String substring = name.substring(name.indexOf("第") + 1, name.indexOf("期"));
+                    return Integer.parseInt(substring);
+                }).collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(collect)) {
+                    Integer integer = collect.stream().sorted(Comparator.reverseOrder()).findFirst().get();
+                    nameSort = integer + 1;
+                }
+            }
+            classGrade.setClassName(String.format("%s年第%s期%s", goods.getYear(), nameSort, className));
+            classGrade.setTenantId(tenantId);
+            save(classGrade);
+            //绑定班级商品
+            ClassGradeGoods classGradeGoods = new ClassGradeGoods();
+            classGradeGoods.setGradeId(classGrade.getGradeId());
+            classGradeGoods.setGoodsId(goodsId);
+            classGradeGoods.setCreateTime(DateUtils.getNowTime());
+            classGradeGoods.setUpdateTime(DateUtils.getNowTime());
+            classGradeGoods.setTenantId(tenantId);
+            iClassGradeGoodsService.save(classGradeGoods);
+        });
     }
 
 

+ 19 - 30
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -4,48 +4,40 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
 import com.zhongzheng.common.annotation.DataScope;
-import com.zhongzheng.common.config.RuoYiConfig;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.core.redis.RedisLockEntity;
 import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.utils.AES;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
-import com.zhongzheng.common.utils.polyv.PolyvUtils;
 import com.zhongzheng.modules.alioss.service.OssService;
-import com.zhongzheng.modules.base.domain.UserProfile;
 import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.course.bo.CourseProjectTypeQueryBo;
-import com.zhongzheng.modules.course.domain.CourseBusiness;
-import com.zhongzheng.modules.course.domain.CourseEducationType;
-import com.zhongzheng.modules.course.domain.CourseMenuExam;
-import com.zhongzheng.modules.course.domain.CourseProjectType;
 import com.zhongzheng.modules.course.service.ICourseBusinessService;
 import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
 import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.CourseProjectTypeVo;
-import com.zhongzheng.modules.course.vo.CourseSectionVo;
-import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.*;
-import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.domain.ClassGradeInterface;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
 import com.zhongzheng.modules.grade.domain.StudyCountLog;
+import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
@@ -53,41 +45,27 @@ 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.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysOldOrgService;
 import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserBankRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserQueryBo;
 import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
 import com.zhongzheng.modules.user.domain.User;
-import com.zhongzheng.modules.user.domain.UserBankRecord;
-import com.zhongzheng.modules.user.domain.UserPlan;
 import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
-import com.zhongzheng.modules.user.mapper.UserMapper;
 import com.zhongzheng.modules.user.mapper.UserStudyRecordPhotoMapper;
 import com.zhongzheng.modules.user.service.IUserBankRecordService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordService;
 import com.zhongzheng.modules.user.vo.*;
-import org.apache.commons.codec.binary.Base64;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.Page;
-import com.zhongzheng.modules.grade.domain.ClassGradeUser;
-import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.zip.ZipOutputStream;
@@ -177,6 +155,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     private  IUserPeriodService iUserPeriodService;
 
+    @Autowired
+    private ISysOldOrgService sysOldOrgService;
+
     @Override
     public ClassGradeUserVo queryById(Long id) {
         ClassGradeUser db = this.baseMapper.selectById(id);
@@ -653,7 +634,15 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
      */
     @Override
     public String pushOfficialPeriod(ClassGradeUserQueryBo bo) {
-        //暂时先关闭学时推送入口
+        //企业ID
+//        String tenant = ServletUtils.getRequest().getHeader("TenantId");
+//        SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+//                .eq(SysOldOrg::getTenantId, tenant)
+//                .last("limit 1")).stream().findFirst().orElse(null);
+//        //共享班级关闭学时推送入口
+//        if (org.getShareClass() == 1){
+//            return "";
+//        }
         if (true){
             return "";
         }

+ 24 - 15
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -1,15 +1,16 @@
 package com.zhongzheng.modules.grade.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.ObjectMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.Page;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
@@ -34,12 +35,18 @@ import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
+import com.zhongzheng.modules.grade.bo.UserPeriodAddBo;
+import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
+import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
 import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.domain.ClassGradeUser;
+import com.zhongzheng.modules.grade.domain.UserPeriod;
 import com.zhongzheng.modules.grade.domain.UserPeriodStatus;
 import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
+import com.zhongzheng.modules.grade.mapper.UserPeriodMapper;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
+import com.zhongzheng.modules.grade.service.IUserPeriodService;
 import com.zhongzheng.modules.grade.service.IUserPeriodStatusService;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
@@ -48,8 +55,8 @@ import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.inform.vo.InformRemindVo;
 import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
-import com.zhongzheng.modules.polyv.domain.TokenResponse;
-import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.system.domain.SysOldOrg;
+import com.zhongzheng.modules.system.service.ISysOldOrgService;
 import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
@@ -61,16 +68,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.Page;
-import com.zhongzheng.modules.grade.bo.UserPeriodAddBo;
-import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
-import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
-import com.zhongzheng.modules.grade.domain.UserPeriod;
-import com.zhongzheng.modules.grade.mapper.UserPeriodMapper;
-import com.zhongzheng.modules.grade.service.IUserPeriodService;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
@@ -149,6 +146,9 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     @Autowired
     private IGoodsCourseService iGoodsCourseService;
 
+    @Autowired
+    private ISysOldOrgService sysOldOrgService;
+
     @Autowired
     private ICourseMenuService iCourseMenuService;
 
@@ -518,6 +518,15 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
 
     @Override
     public SyncUserCourseStudyRec syncStudyLogToOld(UserPeriodEditBo bo) {
+        //企业ID
+        String tenant = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+                .eq(SysOldOrg::getTenantId, tenant)
+                .last("limit 1")).stream().findFirst().orElse(null);
+        if (org.getShareClass() == 0){
+            //有职能的机构学时不推送旧系统
+            return null;
+        }
         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"));
         CourseBusiness business = iCourseBusinessService.getOne(new LambdaQueryWrapper<CourseBusiness>().eq(CourseBusiness::getStatus, 1).eq(CourseBusiness::getProjectId,projectType.getId()).eq(CourseBusiness::getBusinessName,"二级").last("limit 1"));

+ 23 - 17
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -5,8 +5,12 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+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.core.redis.RedisCache;
 import com.zhongzheng.common.core.redis.RedisLockEntity;
 import com.zhongzheng.common.exception.CustomException;
@@ -16,13 +20,10 @@ import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
 import com.zhongzheng.modules.activity.service.IActivityOrderService;
-import com.zhongzheng.modules.bank.domain.QuestionChapterExam;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
 import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.service.IShoppingCartService;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
-import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
-import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseEducationType;
 import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.service.ICourseBusinessService;
@@ -30,53 +31,50 @@ import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
 import com.zhongzheng.modules.course.service.ICourseMenuService;
 import com.zhongzheng.modules.course.service.ICourseSubjectService;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
-import com.zhongzheng.modules.course.vo.CourseMenuVo;
 import com.zhongzheng.modules.course.vo.CourseModuleFreeExamVo;
-import com.zhongzheng.modules.course.vo.CourseVo;
 import com.zhongzheng.modules.goods.bo.GoodsAttachedAddBo;
 import com.zhongzheng.modules.goods.bo.GoodsBankAddBo;
 import com.zhongzheng.modules.goods.bo.GoodsFreeBankAddBo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsFreeBank;
-import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsFreeBankService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.grade.bo.ClassGradeListBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeQueryBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeSortBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserTempQueryBo;
-import com.zhongzheng.modules.grade.domain.*;
+import com.zhongzheng.modules.grade.domain.ClassGrade;
+import com.zhongzheng.modules.grade.domain.ClassGradeGoods;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
+import com.zhongzheng.modules.grade.domain.ClassGradeUserTemp;
 import com.zhongzheng.modules.grade.service.IClassGradeGoodsService;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserTempService;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserTempVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
-import com.zhongzheng.modules.inform.service.IInformRemindService;
-import com.zhongzheng.modules.inform.service.IInformUserService;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.*;
 import com.zhongzheng.modules.order.mapper.OrderMapper;
 import com.zhongzheng.modules.order.service.*;
-import com.zhongzheng.modules.order.vo.*;
+import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderListVo;
+import com.zhongzheng.modules.order.vo.OrderPayVo;
+import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.system.domain.SysOldOrg;
+import com.zhongzheng.modules.system.service.ISysOldOrgService;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserExamGoods;
 import com.zhongzheng.modules.user.service.IUserExamGoodsService;
-import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import net.polyv.common.v1.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -142,6 +140,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private IOrderGoodsFreeService iOrderGoodsFreeService;
 
+    @Autowired
+    private ISysOldOrgService sysOldOrgService;
+
     @Autowired
     private RedisCache redisCache;
 
@@ -1755,10 +1756,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             classGrade.setLearningStatus(2);//待定
             classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
 
+            //企业ID
+            String tenant = ServletUtils.getRequest().getHeader("TenantId");
+            SysOldOrg org = sysOldOrgService.list(new LambdaQueryWrapper<SysOldOrg>()
+                    .eq(SysOldOrg::getTenantId, tenant)
+                    .last("limit 1")).stream().findFirst().orElse(null);
             CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
             businessQueryBo.setId(businessId);
             String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+            if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
                 //生成预开班编号
                 classGrade.setOfficialName(createGradeCode(goodsId, businessVo));
             }

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

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 
@@ -73,4 +74,6 @@ public class UserExamWrongRecordQueryBo extends BaseEntity {
 	/** 类型1,题库 2,视频 */
 	@ApiModelProperty("类型1,题库 2,视频 ")
 	private Integer courseType;
+	@ApiModelProperty("做题模式 1章卷 2随机练习")
+	private List<Long> doModes;
 }

+ 14 - 16
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserMockSubscribeServiceImpl.java

@@ -3,42 +3,36 @@ package com.zhongzheng.modules.user.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+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.base.bo.ConsoleQueryBo;
 import com.zhongzheng.modules.mock.bo.UserMockActivityAddBo;
 import com.zhongzheng.modules.mock.domain.MockApply;
-import com.zhongzheng.modules.mock.domain.MockMajorSubject;
 import com.zhongzheng.modules.mock.domain.MockMajorSubjectGoods;
 import com.zhongzheng.modules.mock.domain.MockMajorSubjectTime;
 import com.zhongzheng.modules.mock.service.IMockApplyService;
 import com.zhongzheng.modules.mock.service.IMockMajorSubjectGoodsService;
-import com.zhongzheng.modules.mock.service.IMockMajorSubjectService;
 import com.zhongzheng.modules.mock.service.IMockMajorSubjectTimeService;
-import com.zhongzheng.modules.mock.vo.MockApplyVo;
 import com.zhongzheng.modules.mock.vo.MockMajorSubjectTimeVo;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
-import com.zhongzheng.modules.user.domain.User;
-import com.zhongzheng.modules.user.domain.UserMockRecord;
-import com.zhongzheng.modules.user.service.IUserMockRecordService;
-import com.zhongzheng.modules.user.service.IUserService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.pagehelper.Page;
 import com.zhongzheng.modules.user.bo.UserMockSubscribeAddBo;
-import com.zhongzheng.modules.user.bo.UserMockSubscribeQueryBo;
 import com.zhongzheng.modules.user.bo.UserMockSubscribeEditBo;
+import com.zhongzheng.modules.user.bo.UserMockSubscribeQueryBo;
+import com.zhongzheng.modules.user.domain.UserMockRecord;
 import com.zhongzheng.modules.user.domain.UserMockSubscribe;
 import com.zhongzheng.modules.user.mapper.UserMockSubscribeMapper;
-import com.zhongzheng.modules.user.vo.UserMockSubscribeVo;
+import com.zhongzheng.modules.user.service.IUserMockRecordService;
 import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
+import com.zhongzheng.modules.user.vo.UserMockSubscribeVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -316,6 +310,8 @@ public class UserMockSubscribeServiceImpl extends ServiceImpl<UserMockSubscribeM
                 //把用户预约的数据和默认数据组合在一起
                 userMockSubscribeList2.forEach(userMockSubscribe -> {
                     UserMockSubscribeVo userMockSubscribeVo = iMockMajorSubjectTimeService.listByEachExamId(userMockSubscribe.getEachExamId());
+                    userMockSubscribeVo.setOrderGoodsId(userMockSubscribe.getOrderGoodsId());
+                    userMockSubscribeVo.setGoodsId(userMockSubscribe.getOrderGoodsId());
                     if (Validator.isNotEmpty(userMockSubscribe.getHandStatus())){
                         userMockSubscribeVo.setHandStatus(userMockSubscribe.getHandStatus());
                     }
@@ -368,6 +364,8 @@ public class UserMockSubscribeServiceImpl extends ServiceImpl<UserMockSubscribeM
                             .eq(ObjectUtils.isNotNull(userMockSubscribeVo.getMockMajorSubjectId()), UserMockSubscribe::getMockMajorSubjectId, userMockSubscribeVo.getMockMajorSubjectId()));
                     if (ObjectUtils.isNotNull(entity)){
                         userMockSubscribeVo.setSubscribeId(entity.getSubscribeId());
+                        userMockSubscribeVo.setOrderGoodsId(entity.getOrderGoodsId());
+                        userMockSubscribeVo.setGoodsId(entity.getGoodsId());
                         userMockSubscribeVos.add(userMockSubscribeVo);
                     }
                 });

+ 67 - 1
zhongzheng-system/src/main/resources/mapper/modules/collect/CollectQuestionMapper.xml

@@ -136,9 +136,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         GROUP BY
         e.exam_id
+        UNION ALL
+        SELECT
+        e.exam_id,
+        e.exam_name,
+        e.create_time,
+        COUNT( cq.question_id ) question_num,
+        3 AS do_mode
+        FROM
+        collect_question cq
+        LEFT JOIN exam e ON cq.exam_id = e.exam_id
+        LEFT JOIN exam_paper ep ON ep.paper_id = e.exam_paper_id
+        LEFT JOIN goods g ON g.goods_id = cq.goods_id
+        WHERE
+        1 = 1
+        AND cq.do_mode = 3
+        AND cq.user_id = #{userId}
+        <if test="paperId != null and paperId != ''">
+            AND e.exam_paper_id = #{paperId}
+        </if>
+        <if test="goodsId != null and goodsId != ''">
+            AND cq.goods_id = #{goodsId}
+        </if>
+        <if test="orderGoodsId != null and orderGoodsId != ''">
+            AND cq.order_goods_id = #{orderGoodsId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        GROUP BY
+        e.exam_id
         ORDER BY
         create_time desc
-       
+
     </select>
 
     <select id="selectExamQuestionList" parameterType="com.zhongzheng.modules.collect.bo.CollectQuestionQueryBo"  resultMap="QuestionResultVo">
@@ -229,6 +262,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         GROUP BY
         q.type
+        UNION ALL
+        SELECT
+        q.type,
+        count( q.question_id ) AS num,
+        3 AS do_mode
+        FROM
+        ( SELECT c.* FROM collect_question c
+        LEFT JOIN exam e ON c.exam_id = e.exam_id
+        LEFT JOIN exam_paper ep ON ep.paper_id = e.exam_paper_id
+        WHERE c.user_id = #{userId}
+        AND c.do_mode = 3
+        <if test="paperId != null and paperId != ''">
+            AND e.exam_paper_id = #{paperId}
+        </if>
+        ) cq
+        LEFT JOIN question q ON cq.question_id = q.question_id
+        LEFT JOIN goods g ON g.goods_id = cq.goods_id
+        WHERE
+        1 = 1
+        <if test="goodsId != null and goodsId != ''">
+            AND cq.goods_id = #{goodsId}
+        </if>
+        <if test="orderGoodsId != null and orderGoodsId != ''">
+            AND cq.order_goods_id = #{orderGoodsId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        GROUP BY
+        q.type
     </select>
 
 </mapper>

+ 17 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseBusinessMapper.xml

@@ -27,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="com.zhongzheng.modules.course.vo.CourseBusinessVo" id="CourseBusinessVoResult">
         <result property="id" column="id"/>
         <result property="businessName" column="business_name"/>
+        <result property="businessId" column="business_id"/>
         <result property="remark" column="remark"/>
         <result property="projectId" column="project_id"/>
         <result property="schoolYear" column="school_year"/>
@@ -99,6 +100,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             b.id = #{id}
     </select>
 
+    <select id="queryFullId" parameterType="com.zhongzheng.modules.course.bo.CourseBusinessQueryBo"  resultMap="CourseBusinessVoResult">
+        SELECT
+            e.id as education_id,
+            p.id AS project_id,
+            b.id AS business_id
+        FROM
+            course_business b
+                LEFT JOIN course_project_type p ON b.project_id = p.id
+                LEFT JOIN course_education_type e ON p.education_id = e.id
+        WHERE
+            b.business_name = #{businessName}
+          AND e.education_name = #{educationName}
+          AND p.project_name = #{projectName}
+          limit 1
+    </select>
+
     <select id="getBusinessByTenant" parameterType="map"  resultType="com.zhongzheng.modules.course.domain.CourseBusiness">
         SELECT * FROM course_business WHERE encoder = #{encoder} and tenant_id = #{newTenantId}
     </select>

+ 1 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml

@@ -136,6 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getIdsByTenant" parameterType="java.lang.String"  resultType="java.lang.Long">
         select id from course_subject cs where cs.`status` = 1
+--         AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cs.tenant_id AND sog.share_class = 1) > 0
         <if test="subNames != null and subNames.size()!=0 ">
             AND cs.subject_name in
             <foreach collection="subNames" item="item" index="index" open="(" close=")" separator=",">

+ 7 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -51,6 +51,8 @@
         <result property="certificateTypeId" column="certificate_type_id"/>
         <result property="certificateId" column="certificate_id"/>
         <result property="certificateTpId" column="certificate_tp_id"/>
+        <result property="commitPeriodStatus" column="commit_period_status"/>
+        <result property="commitPeriodRemark" column="commit_period_remark"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.goods.vo.GoodsVo" id="GoodsResultVo">
@@ -135,6 +137,8 @@
         <result property="linePrice" column="line_price"/>
         <result property="specTemplateNumber" column="spec_template_number"/>
         <result property="goodsLearningOrder" column="goods_learning_order"/>
+        <result property="commitPeriodStatus" column="commit_period_status"/>
+        <result property="commitPeriodRemark" column="commit_period_remark"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.exam.vo.ExamNumberGoodsVo" id="ExamNumberGoodsVoResult">
@@ -309,6 +313,9 @@
         <if test="goodsStatus != null ">
             AND g.goods_status = #{goodsStatus}
         </if>
+        <if test="commitPeriodStatus != null ">
+            AND g.commit_period_status = #{commitPeriodStatus}
+        </if>
         <if test="studyStartTime != null and studyStartTime != '' and studyEndTime != null and studyEndTime != ''">
             and #{studyStartTime} BETWEEN g.validity_start_time and g.validity_end_time or #{studyEndTime} BETWEEN
             g.validity_start_time and g.validity_end_time

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

@@ -892,6 +892,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                  WHERE
                      cg.official_name = #{officialName}
                    AND cgu.`status` = 1
+--                    AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cgu.tenant_id AND sog.share_class = 1) > 0
              ) + (
                  SELECT
                      count(*)
@@ -901,6 +902,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                  WHERE
                      cg.official_name = #{officialName}
                    AND cgu.`status` = 1
+--                    AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cgu.tenant_id AND sog.share_class = 1) > 0
              ))
 
     </select>
@@ -966,6 +968,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     AND cb.tenant_id = #{tenantId}
                 </if>
         WHERE 1 = 1
+        AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cg.tenant_id AND sog.share_class = 1) > 0
         <if test="officialName != null and officialName !=''">
             AND cg.official_name = #{officialName}
         </if>
@@ -993,6 +996,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN course_business cb ON g.business_id = cb.id
         WHERE
             cb.alias_name = #{aliasName} AND cg.class_status = 0 AND cg.`status` = 1 AND g.goods_status = 1 AND cb.`status` = 1 AND g.`status` = 1
+--             AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cg.tenant_id AND sog.share_class = 1) > 0
         <if test="subIds != null and subIds.size()!=0 ">
             AND (
             <foreach collection="subIds" item="id" index="index">
@@ -1013,8 +1017,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM
             goods g
             LEFT JOIN course_business cb ON g.business_id = cb.id AND cb.tenant_id = #{tenantId}
+            LEFT JOIN course_project_type cpt ON cb.project_id = cpt.id AND cpt.tenant_id = #{tenantId}
+            LEFT JOIN course_education_type cet ON cpt.education_id = cet.id AND cet.tenant_id = #{tenantId}
         WHERE
-        cb.alias_name = #{aliasName} AND g.`status` = 1 AND g.tenant_id = #{tenantId}
+        cb.alias_name = #{aliasName} AND g.`status` = 1 AND g.tenant_id = #{tenantId} AND g.goods_status = 1 AND cet.education_name = #{educationName}
+--         AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = g.tenant_id AND sog.share_class = 1) > 0
         <if test="subIds != null and subIds.size()!=0 ">
             AND (
             <foreach collection="subIds" item="id" index="index">
@@ -1039,10 +1046,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getGradeListByCodeTenant" parameterType="java.lang.String" resultType="com.zhongzheng.modules.grade.domain.ClassGrade">
         SELECT
-            *
+            cg.*
         FROM
-            class_grade
-        where official_name = #{registerCode}
+            class_grade cg
+        where cg.official_name = #{registerCode}
+          AND (SELECT COUNT(*) FROM sys_old_org sog WHERE sog.tenant_id = cg.tenant_id AND sog.share_class = 1) > 0
     </select>
 
     <update id="UpGradeStatusByTenant" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeOpenUpBo" >

+ 38 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserExamWrongRecordMapper.xml

@@ -236,6 +236,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         GROUP BY
         q.type
+        UNION ALL
+        SELECT
+        q.type,
+        count(DISTINCT q.question_id ) AS num,
+        3 as do_mode
+        FROM
+        ( SELECT ue.* FROM user_exam_wrong_record ue
+        LEFT JOIN exam e ON ue.exam_id = e.exam_id
+        LEFT JOIN exam_paper ep ON ep.paper_id = e.exam_paper_id
+        WHERE ue.user_id = #{userId}
+        AND ue.do_mode = 3
+        <if test="paperId != null and paperId != ''">
+            AND e.exam_paper_id = #{paperId}
+        </if>) uew
+        LEFT JOIN question q ON uew.question_id = q.question_id
+        LEFT JOIN goods g ON g.goods_id = uew.goods_id
+        WHERE
+        1 = 1
+        <if test="goodsId != null and goodsId != ''">
+            AND uew.goods_id = #{goodsId}
+        </if>
+        <if test="orderGoodsId != null and orderGoodsId != ''">
+            AND uew.order_goods_id = #{orderGoodsId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        GROUP BY
+        q.type
     </select>
 
     <select id="selectTypeQuestionList" parameterType="com.zhongzheng.modules.user.bo.UserExamWrongRecordQueryBo"  resultMap="UserExamWrongRecordVoResult">
@@ -283,6 +315,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="courseType != null and courseType != ''">
             AND course_type = #{courseType}
         </if>
+        <if test="doModes != null and doModes.size()!=0 ">
+            AND do_mode in
+            <foreach collection="doModes" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         GROUP BY
         exam_id
         ) uewr