he2802 2 years ago
parent
commit
9c1e739350
28 changed files with 554 additions and 152 deletions
  1. 1 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  2. 1 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  3. 1 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  4. 11 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  5. 33 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserSubscribeController.java
  6. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  7. 1 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  8. 1 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  9. 1 0
      zhongzheng-api/src/main/resources/application-dev.yml
  10. 1 0
      zhongzheng-api/src/main/resources/application-pre.yml
  11. 1 0
      zhongzheng-api/src/main/resources/application-prod.yml
  12. 5 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  14. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  15. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  16. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  17. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenBo.java
  18. 44 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/CreateSameClassBo.java
  19. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  20. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  21. 252 138
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  22. 79 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  23. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/mapper/SysTenantMapper.java
  24. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISysTenantService.java
  25. 50 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  26. 20 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  27. 12 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  28. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/system/SysTenantMapper.xml

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: http://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -434,6 +434,17 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iClassGradeService.getOfficialGradeNum(bo));
     }
 
+    @ApiOperation("新增二建班级")
+    @PostMapping("common/free/save/class")
+    public AjaxResult openOfficialSaveGrade(@RequestBody ClassGradeOpenBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        iClassGradeService.openOfficialSaveGrade(bo);
+        return AjaxResult.success();
+    }
+
+
     @ApiOperation("预报名班级开班")
     @PostMapping("common/free/open/class")
     public AjaxResult openOfficialGrade(@RequestBody ClassGradeOpenBo bo) {

+ 33 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserSubscribeController.java

@@ -2,7 +2,10 @@ package com.zhongzheng.controller.user;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
@@ -10,7 +13,10 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.exam.bo.ExamApplySiteTimeTwoAddBo;
+import com.zhongzheng.modules.exam.domain.ExamApplySiteTime;
 import com.zhongzheng.modules.exam.service.IExamApplyGoodsService;
+import com.zhongzheng.modules.exam.service.IExamApplySiteTimeService;
 import com.zhongzheng.modules.exam.vo.ExamSessionVo;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.service.IUserExamGoodsService;
@@ -49,6 +55,8 @@ public class UserSubscribeController extends BaseController {
 
     private final IExamApplyGoodsService iExamApplyGoodsService;
 
+    private final IExamApplySiteTimeService iExamApplySiteTimeService;
+
     /**
      * 查询用户预约考试列表
      */
@@ -211,6 +219,9 @@ public class UserSubscribeController extends BaseController {
         String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 //        map.put("goodsExcel",goodsUtil.exportEasyExcel(goodsUtil.exportEasyData(goodsList), bo.getApplyName()+"商品列表"+timeStr));
 
+        ExamApplySiteTime siteTime = iExamApplySiteTimeService.getOne(new LambdaQueryWrapper<ExamApplySiteTime>()
+                .eq(ExamApplySiteTime::getApplyId, bo.getApplyId())
+                .last("limit 1"));
         if(Validator.isEmpty(bo.getApplySiteAddressTrain())){
             UserSubscribeExport export = new UserSubscribeExport();
             export.setRemark("导入时,请把示例删除");
@@ -218,8 +229,17 @@ public class UserSubscribeController extends BaseController {
             export.setIdCard("44086921356895125365");
             export.setApplyName(bo.getApplyName());
             export.setApplySiteAddress(bo.getApplySiteAddress());
-            export.setApplySiteExamTime("2021/10/21");
-            export.setApplySiteTime("9:00-12:00");
+            if (ObjectUtils.isNotNull(siteTime)){
+                List<ExamApplySiteTimeTwoAddBo> siteTimeTwoAddBos = JSONArray.parseArray(siteTime.getSiteTime(), ExamApplySiteTimeTwoAddBo.class);
+                if (CollectionUtils.isNotEmpty(siteTimeTwoAddBos)){
+                    ExamApplySiteTimeTwoAddBo twoAddBo = siteTimeTwoAddBos.get(0);
+                    export.setApplySiteTime(String.format("%s-%s",twoAddBo.getStartTime(),twoAddBo.getEndTime()));
+                }
+                export.setApplySiteExamTime(DateUtils.timestampToDateFormat(siteTime.getExamTime(),"yyyy/MM/dd"));
+            }else {
+                export.setApplySiteExamTime("2021/10/21");
+                export.setApplySiteTime("9:00-12:00");
+            }
             export.setMajorName("土建质量员");
 //            export.setCode("SP6415428604");
 //            export.setGoodsName("一级建造师继续教育(必修课+机电工程)");
@@ -242,8 +262,17 @@ public class UserSubscribeController extends BaseController {
             export.setGoodsName("一级建造师继续教育(必修课+机电工程)");
 
             export.setApplySiteAddressTrain(bo.getApplySiteAddressTrain());
-            export.setApplySiteExamTrainTime("2021/10/21");
-            export.setApplySiteTrainTime("9:00-12:00");
+            if (ObjectUtils.isNotNull(siteTime)){
+                List<ExamApplySiteTimeTwoAddBo> siteTimeTwoAddBos = JSONArray.parseArray(siteTime.getSiteTime(), ExamApplySiteTimeTwoAddBo.class);
+                if (CollectionUtils.isNotEmpty(siteTimeTwoAddBos)){
+                    ExamApplySiteTimeTwoAddBo twoAddBo = siteTimeTwoAddBos.get(0);
+                    export.setApplySiteTime(String.format("%s-%s",twoAddBo.getStartTime(),twoAddBo.getEndTime()));
+                }
+                export.setApplySiteExamTime(DateUtils.timestampToDateFormat(siteTime.getExamTime(),"yyyy/MM/dd"));
+            }else {
+                export.setApplySiteExamTime("2021/10/21");
+                export.setApplySiteTime("9:00-12:00");
+            }
 
             List<UserSubscribeTrainExport> list = new ArrayList<>();
             list.add(export);

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: closehttps://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -137,6 +137,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -134,6 +134,7 @@ oldStudySys:
     classOpenPath: http://gdxypx.xy.com/System/BussinessApi/OpenClass
     salePassword: http://gdxypx.xy.com/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://gdxypx.xy.com/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt-dev.gdcic.net/organjxjy/ShangBaoMingdan

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

@@ -146,6 +146,7 @@ oldStudySys:
     classOpenPath: https://www.xyyxt.net/System/BussinessApi/OpenClass
     salePassword: http://www.xyyxt.net/WitSystem/BussinessApi/GetSaleInfo
     updateInvoicePath: http://www.xyyxt.net/system/BussinessApi/UpdateInvoiceData
+    createExamPath: http://gdxypx.xy.com/system/BussinessApi/CreateSameClass
 
 officialPush:
     infoPath: https://jypt.gdcic.net/organjxjy/ShangBaoMingdan

+ 5 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java

@@ -491,6 +491,11 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         .set(SysTenant::getStatus,-1));
     }
 
+    @Override
+    public List<SysTenant> getListNoTenant(Long tenantId) {
+        return baseMapper.getListNoTenant(tenantId);
+    }
+
     private void initRoles(Long newTenantId,Long tenantId) {
         List<String> roleKey = new ArrayList<>();
         roleKey.add("seller");

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

@@ -799,6 +799,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                             .last("limit 1"));
                     if (ObjectUtils.isNull(userSubscribe)){
                         goodsUserVo.setSubscribeSign(1);
+                    }else if (userSubscribe.getSubscribeStatus() == 1 && userSubscribe.getExamStatus() == 0){
+                        goodsUserVo.setSubscribeSign(4);
                     }else if (ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
                         goodsUserVo.setSubscribeSign(3);
                     }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -14,6 +14,7 @@ import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.UserGoodsListAllBo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.vo.*;
+import com.zhongzheng.modules.system.domain.SysTenant;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.security.core.parameters.P;
 
@@ -99,4 +100,7 @@ public interface GoodsMapper extends BaseMapper<Goods> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<Goods> getRelevanceGoodsNoTenant(@Param("businessName") String businessName,@Param("majName")String majName,@Param("goodsId")Long goodsId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<Goods> getRelGoodsNoTenant(@Param("businessName") String businessName,@Param("categoryName") String categoryName,@Param("tenantId") Long tenantId);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.modules.course.bo.CourseQueryBo;
 import com.zhongzheng.modules.course.bo.ExternalQuestionBo;
 import com.zhongzheng.modules.course.bo.ReplenishExamBo;
+import com.zhongzheng.modules.course.domain.Major;
 import com.zhongzheng.modules.course.vo.CourseModuleFreeExamVo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
 import com.zhongzheng.modules.course.vo.ReplenishExamVo;
@@ -13,6 +14,7 @@ import com.zhongzheng.modules.goods.bo.*;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.vo.*;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
+import com.zhongzheng.modules.system.domain.SysTenant;
 
 import java.util.Collection;
 import java.util.List;
@@ -158,4 +160,6 @@ public interface IGoodsService extends IService<Goods> {
 	List<ReplenishExamVo> getReplenishExam(ReplenishExamBo bo);
 
 	List<Goods> getRelevanceGoodsNoTenant(String businessName,String majName,Long goodsId);
+
+	List<Goods> getRelGoodsNoTenant(String businessName, String categoryName, Long tenantId);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -5194,6 +5194,11 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return baseMapper.getRelevanceGoodsNoTenant(businessName, majName, goodsId);
     }
 
+    @Override
+    public List<Goods> getRelGoodsNoTenant(String businessName, String categoryName, Long tenantId) {
+        return baseMapper.getRelGoodsNoTenant(businessName,categoryName,tenantId);
+    }
+
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
         baseMapper.updateHandoutsId(goodsId,tenantId,handoutsId);
     }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeOpenBo.java

@@ -42,4 +42,10 @@ public class ClassGradeOpenBo implements Serializable {
     private Integer learningStatus;
 
     private Long learningTimeStart;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("专业名称")
+    private String majorName;
 }

+ 44 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/CreateSameClassBo.java

@@ -0,0 +1,44 @@
+package com.zhongzheng.modules.grade.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年02月10日 8:50
+ */
+@Data
+public class CreateSameClassBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("班级编号")
+    private String classNo;
+
+    @ApiModelProperty("班级名称")
+    private String categoryName;
+
+    @ApiModelProperty("开班状态 0未开班(预报名) 1开班")
+    private Integer openclassState;
+
+    @ApiModelProperty("班级有效开始时间")
+    private String beginTime;
+
+    @ApiModelProperty("班级有效结束时间")
+    private String endTime;
+
+    @ApiModelProperty("5二建继教 ,  8二造继教")
+    private Integer platformId;
+
+    @ApiModelProperty("专业名称")
+    private String majorName;
+}

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

@@ -105,4 +105,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     @InterceptorIgnore(tenantLine = "true")
     void updateByIdNoTenant(ClassGrade update);
+
+    @InterceptorIgnore(tenantLine = "true")
+    ClassGrade getCodeNoTenant(@Param("registerCode") String registerCode,@Param("tenantId") Long tenantId);
 }

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

@@ -109,4 +109,8 @@ public interface IClassGradeService extends IService<ClassGrade> {
 	List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo);
 
     List<ClassGrade> listByIdsNoTenant(List<Long> ids);
+
+    ClassGrade getCodeNoTenant(String registerCode, Long tenantId);
+
+	void openOfficialSaveGrade(ClassGradeOpenBo bo);
 }

+ 252 - 138
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -27,6 +27,7 @@ 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.CourseSubject;
+import com.zhongzheng.modules.course.domain.Major;
 import com.zhongzheng.modules.course.service.*;
 import com.zhongzheng.modules.course.vo.*;
 import com.zhongzheng.modules.goods.domain.Goods;
@@ -178,6 +179,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Value("${oldStudySys.classOpenPath}")
     private String CLASS_OPEN_PATH;
 
+    @Value("${oldStudySys.createExamPath}")
+    private String CREATE_EXAM_PATH;
+
     @Override
     public ClassGradeVo queryById(Long gradeId) {
         ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
@@ -259,30 +263,11 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
         add.setGradeCode(ServletUtils.getEncoded("BJ"));
-        /*LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
-        lqw.eq(ClassGrade::getClassName, add.getClassName());
-        lqw.eq(ClassGrade::getStatus, 1);
-        List<ClassGrade> list = this.list(lqw);
-        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()) && org.getShareClass() == 1) {
-//            Long goodsId = bo.getClassGradeGoodsAddBos()[0];
-//            Goods goods = iGoodsService.getById(goodsId);
-//            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
-//            businessQueryBo.setId(goods.getBusinessId());
-//            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-//            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
-//                throw new CustomException("二建/二造不允许直接创建开班班级!");
-//            }
-//        }
+        SysTenant sysTenant = sysTenantService.getById(Long.valueOf(tenant));
+
         //班级绑定学员资料推送和学时推送
         List<ClassGradeInterface> list = iClassGradeInterfaceService.list(new LambdaQueryWrapper<ClassGradeInterface>()
                 .eq(ClassGradeInterface::getStatus, 1)
@@ -296,6 +281,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 }
             });
         }
+        Boolean erJfalg = false;
+        Boolean ezJfalg = false;
         //七大员继教班级默认学时推送和报名推送
         if (bo.getClassGradeGoodsAddBos() != null ) {
             Long goodsId = bo.getClassGradeGoodsAddBos()[0];
@@ -323,108 +310,144 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 }
                 String sevenCode = getSevenCode(goodsId);
                 add.setSevenCode(sevenCode);
+            }else if (("继续教育二级建造师".equals(businessName)) || ("继续教育二级造价师".equals(businessName))){
+                erJfalg = true;
+                ezJfalg = "继续教育二级造价师".equals(businessName);
+                add.setRegisterCode(ServletUtils.getEncoded("PIY"));
             }
         }
         //是否创建官方班级编号
-        if (bo.getClassGradeGoodsAddBos() != null &&
-                (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());
-            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
-            businessQueryBo.setId(goods.getBusinessId());
-            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
-            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
-                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::getProjectId, goods.getProjectId())
-                        .eq(Goods::getSubjectIds, goods.getSubjectIds()));
-                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)) {
-                        Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
-                        List<ClassGradeSortBo> sortList = new ArrayList<>();
-                        map.forEach((k, v) -> {
-                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
-                            sortBo.setKey(k);
-                            sortBo.setSize(v.size());
-                            sortList.add(sortBo);
-                        });
-                        ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
-                        List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
-                        //班级信息
-                        List<ClassGrade> listGrade = listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
-                        //获取当前机构商品下的班级
-                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
-                        if (gradeGoods.size() < listGrade.size()) {
-                            ClassGrade grade = listGrade.get(gradeGoods.size());
-                            if (checkEjjjPeopleNumLimit(business.getId(), grade.getGradeId())) {
-                                add.setOfficialName(listGrade.get(gradeGoods.size()).getOfficialName());
-                                add.setClassStatus(0);
-                            } else {
-                                add.setOfficialName(ServletUtils.getEncoded("PIY"));
-                                add.setClassStatus(0);
-                            }
-                        }
-                    }
-                }
+//        if (bo.getClassGradeGoodsAddBos() != null &&
+//                (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());
+//            CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+//            businessQueryBo.setId(goods.getBusinessId());
+//            String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+//            if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+//                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::getProjectId, goods.getProjectId())
+//                        .eq(Goods::getSubjectIds, goods.getSubjectIds()));
+//                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)) {
+//                        Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
+//                        List<ClassGradeSortBo> sortList = new ArrayList<>();
+//                        map.forEach((k, v) -> {
+//                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
+//                            sortBo.setKey(k);
+//                            sortBo.setSize(v.size());
+//                            sortList.add(sortBo);
+//                        });
+//                        ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+//                        List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
+//                        //班级信息
+//                        List<ClassGrade> listGrade = listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+//                        //获取当前机构商品下的班级
+//                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
+//                        if (gradeGoods.size() < listGrade.size()) {
+//                            ClassGrade grade = listGrade.get(gradeGoods.size());
+//                            if (checkEjjjPeopleNumLimit(business.getId(), grade.getGradeId())) {
+//                                add.setOfficialName(listGrade.get(gradeGoods.size()).getOfficialName());
+//                                add.setClassStatus(0);
+//                            } else {
+//                                add.setOfficialName(ServletUtils.getEncoded("PIY"));
+//                                add.setClassStatus(0);
+//                            }
+//                        }
+//                    }
+//                }
+//
+//                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);
+//                    //获取业务层次下所有班级
+//                    ClassGradeListBo bgListBo = new ClassGradeListBo();
+//                    bgListBo.setAliasName(business.getAliasName());
+//                    bgListBo.setSubIds(subIds);
+//                    List<ClassGrade> classGrades = baseMapper.getGradeListByTenant(bgListBo);
+//                    if (CollectionUtils.isEmpty(classGrades)) {
+//                        //生成预报名官方编号
+//                        add.setOfficialName(ServletUtils.getEncoded("PIY"));
+//                        add.setClassStatus(0);
+//                    } else {
+//                        //获取班级创建最多的机构
+//                        Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
+//                        List<ClassGradeSortBo> sortList = new ArrayList<>();
+//                        map.forEach((k, v) -> {
+//                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
+//                            sortBo.setKey(k);
+//                            Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
+//                            sortBo.setSize(collect.keySet().size());
+//                            sortList.add(sortBo);
+//                        });
+//                        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());
+//                        //去重
+//                        List<String> codeStrs = new ArrayList<>();
+//                        for (ClassGrade gradesMax : classGradesMax) {
+//                            if (codeStrs.contains(gradesMax.getOfficialName())) {
+//                                continue;
+//                            }
+//                            codeStrs.add(gradesMax.getOfficialName());
+//                        }
+//                        //获取当前机构商品下的班级
+//                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goodsId);
+//                        if (gradeGoods.size() < codeStrs.size()) {
+//                            add.setOfficialName(codeStrs.get(gradeGoods.size()));
+//                            add.setClassStatus(0);
+//                        } else {
+//                            //生成预报名官方编号
+//                            add.setOfficialName(ServletUtils.getEncoded("PIY"));
+//                            add.setClassStatus(0);
+//                        }
+//                    }
+//                }
+//            }
+//        }
+        boolean save = this.save(add);
+        if (erJfalg && bo.getClassGradeGoodsAddBos() != null){
+            //二建继教班级创建,所有共享班级机构同步创建
+            synchronousCreation(add,sysTenant,bo.getClassGradeGoodsAddBos()[0]);
+            //通知旧系统
+            CreateSameClassBo classBo = new CreateSameClassBo();
+            if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1){
+                classBo.setClassNo(add.getOfficialName());
+                classBo.setOpenclassState(1);
+                classBo.setBeginTime(DateUtils.timestampToDateFormat(add.getClassStartTime(),"yyyy-MM-dd HH:mm:ss"));
+                classBo.setEndTime(DateUtils.timestampToDateFormat(add.getClassEndTime(),"yyyy-MM-dd HH:mm:ss"));
+            }else {
+                classBo.setClassNo(add.getRegisterCode());
+                classBo.setOpenclassState(0);
+            }
+            classBo.setCategoryName(add.getClassName());
+            classBo.setPlatformId(ezJfalg?8:5);
 
-                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);
-                    //获取业务层次下所有班级
-                    ClassGradeListBo bgListBo = new ClassGradeListBo();
-                    bgListBo.setAliasName(business.getAliasName());
-                    bgListBo.setSubIds(subIds);
-                    List<ClassGrade> classGrades = baseMapper.getGradeListByTenant(bgListBo);
-                    if (CollectionUtils.isEmpty(classGrades)) {
-                        //生成预报名官方编号
-                        add.setOfficialName(ServletUtils.getEncoded("PIY"));
-                        add.setClassStatus(0);
-                    } else {
-                        //获取班级创建最多的机构
-                        Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
-                        List<ClassGradeSortBo> sortList = new ArrayList<>();
-                        map.forEach((k, v) -> {
-                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
-                            sortBo.setKey(k);
-                            Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
-                            sortBo.setSize(collect.keySet().size());
-                            sortList.add(sortBo);
-                        });
-                        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());
-                        //去重
-                        List<String> codeStrs = new ArrayList<>();
-                        for (ClassGrade gradesMax : classGradesMax) {
-                            if (codeStrs.contains(gradesMax.getOfficialName())) {
-                                continue;
-                            }
-                            codeStrs.add(gradesMax.getOfficialName());
-                        }
-                        //获取当前机构商品下的班级
-                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goodsId);
-                        if (gradeGoods.size() < codeStrs.size()) {
-                            add.setOfficialName(codeStrs.get(gradeGoods.size()));
-                            add.setClassStatus(0);
-                        } else {
-                            //生成预报名官方编号
-                            add.setOfficialName(ServletUtils.getEncoded("PIY"));
-                            add.setClassStatus(0);
-                        }
-                    }
+            Long nowTime = DateUtils.getNowTime();
+            String sign = ToolsUtils.EncoderByMd5(classBo.getClassNo()+nowTime.toString() + "pubilc2022");
+            classBo.setSign(sign);
+            classBo.setStamp(nowTime);
+            JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(classBo));
+            String respone = "";
+            try {
+                respone = HttpUtils.sendPost(CREATE_EXAM_PATH, param);
+                if (!respone.contains("\"Status\":true")) {
+                    throw new CustomException("旧系统创建班级错误" + respone);
                 }
+            } catch (Exception e) {
+                throw new CustomException("旧系统创建班级错误" + e.getMessage());
             }
         }
-        boolean save = this.save(add);
         //添加班级商品
         if (bo.getClassGradeGoodsAddBos() != null) {
             for (Long classGradeGoodsAddBo : bo.getClassGradeGoodsAddBos()) {
@@ -453,6 +476,50 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return save;
     }
 
+    public void createSameClass(){
+
+    }
+
+
+    private void synchronousCreation(ClassGrade classGrade, SysTenant sysTenant,Long goodsId) {
+        List<SysTenant> tenantList = sysTenantService.getListNoTenant(sysTenant.getTenantId());
+        if (CollectionUtils.isEmpty(tenantList)){
+            return;
+        }
+        Goods goods = iGoodsService.getById(goodsId);
+        String businessName = iGoodsService.getGoodsBusinessName(goodsId);
+        Major major = iMajorService.getById(goods.getMajorId());
+        tenantList.forEach(tenant -> {
+            //是否存在对应课程商品
+            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(businessName,major.getCategoryName(),tenant.getTenantId());
+            if (CollectionUtils.isEmpty(relGoods)){
+                return;
+            }
+            //班级是否存在
+            ClassGrade grade = baseMapper.getCodeNoTenant(classGrade.getRegisterCode(),tenant.getTenantId());
+            if (ObjectUtils.isNotNull(grade)){
+                //已经存在 不创建
+                return;
+            }
+
+            //同步班级
+            classGrade.setGradeId(null);
+            classGrade.setTenantId(tenant.getTenantId());
+            save(classGrade);
+
+            List<ClassGradeGoods> gradeGoods = relGoods.stream().map(item -> {
+                ClassGradeGoods classGradeGoods = new ClassGradeGoods();
+                classGradeGoods.setGradeId(classGrade.getGradeId());
+                classGradeGoods.setGoodsId(item.getGoodsId());
+                classGradeGoods.setCreateTime(DateUtils.getNowTime());
+                classGradeGoods.setUpdateTime(DateUtils.getNowTime());
+                classGradeGoods.setTenantId(tenant.getTenantId());
+                return classGradeGoods;
+            }).collect(Collectors.toList());
+            iClassGradeGoodsService.saveBatch(gradeGoods);
+        });
+    }
+
     private String getSevenCode(Long goodsId) {
         Goods g = iGoodsService.getById(goodsId);
         List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()
@@ -507,10 +574,6 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 if (!checkClassUserNum(goods.getBusinessId(), update.getGradeId())) {
                     throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
                 }
-                ClassGrade gradeGrade = getById(update.getGradeId());
-                if (StringUtils.isNotBlank(gradeGrade.getOfficialName())) {
-                    update.setRegisterCode(gradeGrade.getOfficialName());
-                }
                 //二建/二造官方信息推送开关打开
                 List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
                         .list(new LambdaQueryWrapper<ClassGradeInterface>()
@@ -625,21 +688,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
         ClassGrade grade = getById(update.getGradeId());
         if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
-            if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus())
-                    && 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>()
-//                            .set(ClassGrade::getOfficialName,update.getOfficialName())
-//                            .set(ClassGrade::getRegisterCode,update.getRegisterCode())
-//                            .set(ClassGrade::getClassStartTime,update.getClassStartTime())
-//                            .set(ClassGrade::getClassEndTime,update.getClassEndTime())
-//                            .set(ClassGrade::getClassStatus,update.getClassStatus())
-//                            .set(ClassGrade::getLearningStatus,update.getLearningStatus())
-//                            .set(ClassGrade::getInterfacePushId,update.getInterfacePushId())
-//                            .in(ClassGrade::getGradeId,list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList())));
-//                }
-
+            if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus()) && grade.getClassStatus() == 1) {
                 ClassGradeOpenBo openBo = new ClassGradeOpenBo();
                 openBo.setOfficialName(grade.getOfficialName());
                 openBo.setRegisterCode(grade.getRegisterCode());
@@ -1440,8 +1489,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             return;
         }
         List<Long> ids = list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList());
-        //保留预报名编号
-        baseMapper.UpGradeCodeByIdTenant(ids);
+//        //保留预报名编号
+//        baseMapper.UpGradeCodeByIdTenant(ids);
 
         ClassGradeOpenUpBo openUpBo = new ClassGradeOpenUpBo();
         openUpBo.setGradeIds(ids);
@@ -1562,6 +1611,71 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return baseMapper.listByIdsNoTenant(ids);
     }
 
+    @Override
+    public ClassGrade getCodeNoTenant(String registerCode, Long tenantId) {
+        return baseMapper.getCodeNoTenant(registerCode,tenantId);
+    }
+
+    @Override
+    public void openOfficialSaveGrade(ClassGradeOpenBo bo) {
+        List<SysTenant> tenantList = sysTenantService.getListNoTenant(0L);
+        if (CollectionUtils.isEmpty(tenantList)){
+            return;
+        }
+        tenantList.forEach(tenant -> {
+            //是否存在对应课程商品
+            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(bo.getBusinessName(),bo.getMajorName(),tenant.getTenantId());
+            if (CollectionUtils.isEmpty(relGoods)){
+                return;
+            }
+            //班级是否存在
+            ClassGrade grade = baseMapper.getCodeNoTenant(bo.getRegisterCode(),tenant.getTenantId());
+            if (ObjectUtils.isNotNull(grade)){
+                //已经存在 不创建
+                return;
+            }
+            ClassGrade classGrade = new ClassGrade();
+            classGrade.setCreateTime(DateUtils.getNowTime());
+            if (bo.getClassStatus() == 1){
+                //开班
+                classGrade.setClassStatus(1);
+                classGrade.setOfficialName(bo.getOfficialName());
+                classGrade.setLearningStatus(1);
+                classGrade.setClassStartTime(bo.getClassStartTime());
+                classGrade.setClassEndTime(bo.getClassEndTime());
+                //二建/二造官方信息推送开关打开
+                List<ClassGradeInterface> interfaceList = iClassGradeInterfaceService
+                        .list(new LambdaQueryWrapper<ClassGradeInterface>()
+                                .eq(ClassGradeInterface::getType, 1).last("limit 1"));
+                if (CollectionUtils.isNotEmpty(interfaceList)) {
+                    classGrade.setInterfacePushId(interfaceList.get(0).getId());
+                }
+            }else {
+                classGrade.setClassStatus(0);
+                classGrade.setLearningStatus(2);//待定
+            }
+            classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
+            classGrade.setUpdateTime(DateUtils.getNowTime());
+            classGrade.setStatus(1);
+            String gradeCode = ServletUtils.getEncoded("BJ");
+            classGrade.setGradeCode(gradeCode);
+            classGrade.setClassName(bo.getClassName());
+            classGrade.setTenantId(tenant.getTenantId());
+            classGrade.setRegisterCode(bo.getRegisterCode());
+            save(classGrade);
+            List<ClassGradeGoods> gradeGoods = relGoods.stream().map(item -> {
+                ClassGradeGoods classGradeGoods = new ClassGradeGoods();
+                classGradeGoods.setGradeId(classGrade.getGradeId());
+                classGradeGoods.setGoodsId(item.getGoodsId());
+                classGradeGoods.setCreateTime(DateUtils.getNowTime());
+                classGradeGoods.setUpdateTime(DateUtils.getNowTime());
+                classGradeGoods.setTenantId(tenant.getTenantId());
+                return classGradeGoods;
+            }).collect(Collectors.toList());
+            iClassGradeGoodsService.saveBatch(gradeGoods);
+        });
+    }
+
     //创建预开班班级
     private void creatClass(List<Long> goodsIds, Long tenantId, String code) {
         goodsIds.forEach(goodsId -> {

+ 79 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -20,6 +20,7 @@ import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.activity.domain.ActivityGoodsPrice;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
 import com.zhongzheng.modules.activity.service.IActivityGoodsPriceService;
@@ -46,10 +47,7 @@ import com.zhongzheng.modules.goods.service.IGoodsQuestionRelService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.service.IQuestionMerchantService;
 import com.zhongzheng.modules.goods.vo.QuestionOpenImportVo;
-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.bo.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserTempVo;
@@ -91,6 +89,7 @@ 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.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -215,6 +214,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private ISysOldOrgService iSysOldOrgService;
     @Autowired
     private ISysTenantService iSysTenantService;
+    @Value("${oldStudySys.createExamPath}")
+    private String CREATE_EXAM_PATH;
 
     @Override
     public OrderVo queryById(Long orderId) {
@@ -2485,7 +2486,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
             if ((("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) && org.getShareClass() == 1) {
                 //生成预开班编号
-                classGrade.setOfficialName(createGradeCode(goodsId, businessVo));
+//                classGrade.setOfficialName(createGradeCode(goodsId, businessVo));
+                classGrade.setRegisterCode(ServletUtils.getEncoded("PIY"));
             }
 
         } else {
@@ -2561,6 +2563,39 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
 
         boolean save = iClassGradeService.save(classGrade);
+        if ((("继续教育二级建造师".equals(businessFull)) || ("继续教育二级造价师".equals(businessFull))) && sysTenant.getShareClass() == 1) {
+            //二建继教班级创建,所有共享班级机构同步创建
+            synchronousCreation(classGrade,sysTenant,goodsId);
+            //通知旧系统
+            CreateSameClassBo classBo = new CreateSameClassBo();
+            if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 1){
+                classBo.setClassNo(classGrade.getOfficialName());
+                classBo.setOpenclassState(1);
+                classBo.setBeginTime(DateUtils.timestampToDateFormat(classGrade.getClassStartTime(),"yyyy-MM-dd HH:mm:ss"));
+                classBo.setEndTime(DateUtils.timestampToDateFormat(classGrade.getClassEndTime(),"yyyy-MM-dd HH:mm:ss"));
+            }else {
+                classBo.setClassNo(classGrade.getRegisterCode());
+                classBo.setOpenclassState(0);
+            }
+            classBo.setCategoryName(classGrade.getClassName());
+            classBo.setPlatformId("继续教育二级造价师".equals(businessFull)?8:5);
+
+            Long nowTime = DateUtils.getNowTime();
+            String sign = ToolsUtils.EncoderByMd5(classBo.getClassNo()+nowTime.toString() + "pubilc2022");
+            classBo.setSign(sign);
+            classBo.setStamp(nowTime);
+            JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(classBo));
+            String respone = "";
+            try {
+                respone = HttpUtils.sendPost(CREATE_EXAM_PATH, param);
+                if (!respone.contains("\"Status\":true")) {
+                    log.error("旧系统创建班级错误" + respone);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("旧系统创建班级错误" + respone);
+            }
+        }
         //绑定班级商品
         ClassGradeGoods classGradeGoods = new ClassGradeGoods();
         classGradeGoods.setGradeId(classGrade.getGradeId());
@@ -2573,6 +2608,45 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return true;
     }
 
+    private void synchronousCreation(ClassGrade classGrade, SysTenant sysTenant,Long goodsId) {
+        List<SysTenant> tenantList = iSysTenantService.getListNoTenant(sysTenant.getTenantId());
+        if (CollectionUtils.isEmpty(tenantList)){
+            return;
+        }
+        Goods goods = iGoodsService.getById(goodsId);
+        String businessName = iGoodsService.getGoodsBusinessName(goodsId);
+        Major major = iMajorService.getById(goods.getMajorId());
+        tenantList.forEach(tenant -> {
+            //是否存在对应课程商品
+            List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(businessName,major.getCategoryName(),tenant.getTenantId());
+            if (CollectionUtils.isEmpty(relGoods)){
+                return;
+            }
+            //班级是否存在
+            ClassGrade grade = iClassGradeService.getCodeNoTenant(classGrade.getRegisterCode(),tenant.getTenantId());
+            if (ObjectUtils.isNotNull(grade)){
+                //已经存在 不创建
+                return;
+            }
+
+            //同步班级
+            classGrade.setGradeId(null);
+            classGrade.setTenantId(tenant.getTenantId());
+            iClassGradeService.save(classGrade);
+
+            List<ClassGradeGoods> gradeGoods = relGoods.stream().map(item -> {
+                ClassGradeGoods classGradeGoods = new ClassGradeGoods();
+                classGradeGoods.setGradeId(classGrade.getGradeId());
+                classGradeGoods.setGoodsId(item.getGoodsId());
+                classGradeGoods.setCreateTime(DateUtils.getNowTime());
+                classGradeGoods.setUpdateTime(DateUtils.getNowTime());
+                classGradeGoods.setTenantId(tenant.getTenantId());
+                return classGradeGoods;
+            }).collect(Collectors.toList());
+            iClassGradeGoodsService.saveBatch(gradeGoods);
+        });
+    }
+
     private String getSevenCode(Long goodsId) {
         Goods g = iGoodsService.getById(goodsId);
         List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()

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

@@ -1,11 +1,14 @@
 package com.zhongzheng.modules.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
 import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 系统商户Mapper接口
  *
@@ -14,4 +17,7 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface SysTenantMapper extends BaseMapper<SysTenant> {
     Long findTenantId(SysTenantQueryBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<SysTenant> getListNoTenant(Long tenantId);
 }

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

@@ -70,4 +70,5 @@ public interface ISysTenantService extends IService<SysTenant> {
 
 	boolean deleteTopTenant(SysTopTenantEditBo bo);
 
+    List<SysTenant> getListNoTenant(Long tenantId);
 }

+ 50 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -319,12 +319,29 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             return "当前选择的考试时间已过期,请重新预约,选择未过期考试时间";
         }
         validEntityBeforeSave(add);
+        //生成座位号
+        Integer tNum = getSeatNumber(bo,60L);
+        add.setSeatNumber(tNum.toString());
         add.setSubscribeStatus(1);
         add.setExamStatus(0);
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
         add.setExamineeCode(ServletUtils.getEncoded("ZZ"+ ToolsUtils.autoGenericCode(String.valueOf(add.getApplyId()),4) +ToolsUtils.autoGenericCode(String.valueOf(add.getUserId()),4)));
         this.save(add);
+
+        //预约成功推送新B端
+        CdExamSubscribeBo cdExamSubscribeBo = new CdExamSubscribeBo();
+        cdExamSubscribeBo.setUserId(add.getUserId());
+        cdExamSubscribeBo.setOrderGoodsId(add.getOrderGoodsId());
+        cdExamSubscribeBo.setExamApplyId(add.getApplyId());
+        cdExamSubscribeBo.setSign(1);
+        cdExamSubscribeBo.setTenantId(Long.valueOf(ServletUtils.getRequest().getHeader("TenantId")));
+        cdExamSubscribeBo.setDataFrom(1);
+        cdExamSubscribeBo.setType(1);//默认七大员新考
+        cdExamSubscribeBo.setSeatNumber(tNum);
+        String param = JSONObject.toJSONString(cdExamSubscribeBo);
+        Map<String, String> headersMap = new HashMap<>();
+        HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_SAVE_EXAM, param, headersMap);
         //发送预约考试消息
         sendExamSucceed(bo);
         return null;
@@ -545,6 +562,20 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             }
             update.setUpdateTime(DateUtils.getNowTime());
             boolean b = this.updateById(update);
+            if (bo.getSubscribeStatus() == 2){
+                //取消预约推送新B端
+                CdExamSubscribeBo cdExamSubscribeBo = new CdExamSubscribeBo();
+                cdExamSubscribeBo.setUserId(userSubscribeVo.getUserId());
+                cdExamSubscribeBo.setOrderGoodsId(userSubscribeVo.getOrderGoodsId());
+                cdExamSubscribeBo.setExamApplyId(userSubscribeVo.getApplyId());
+                cdExamSubscribeBo.setSign(1);
+                cdExamSubscribeBo.setTenantId(Long.valueOf(ServletUtils.getRequest().getHeader("TenantId")));
+                cdExamSubscribeBo.setDataFrom(1);
+                cdExamSubscribeBo.setType(1);//默认七大员新考
+                String param = JSONObject.toJSONString(cdExamSubscribeBo);
+                Map<String, String> headersMap = new HashMap<>();
+                HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_UPDATE_EXAM, param, headersMap);
+            }
             if(b&&Validator.isNotEmpty(bo.getResult())){
                 if(!bo.getResult().equals(userSubscribeVo.getResult())){
                     //考试结果有变更,发送短信
@@ -642,6 +673,20 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             }
             update.setUpdateTime(DateUtils.getNowTime());
             b = this.updateById(update);
+            if (editBo.getSubscribeStatus() == 2){
+                //取消预约推送新B端
+                CdExamSubscribeBo cdExamSubscribeBo = new CdExamSubscribeBo();
+                cdExamSubscribeBo.setUserId(userSubscribeVo.getUserId());
+                cdExamSubscribeBo.setOrderGoodsId(userSubscribeVo.getOrderGoodsId());
+                cdExamSubscribeBo.setExamApplyId(userSubscribeVo.getApplyId());
+                cdExamSubscribeBo.setSign(1);
+                cdExamSubscribeBo.setTenantId(Long.valueOf(ServletUtils.getRequest().getHeader("TenantId")));
+                cdExamSubscribeBo.setDataFrom(1);
+                cdExamSubscribeBo.setType(1);//默认七大员新考
+                String param = JSONObject.toJSONString(cdExamSubscribeBo);
+                Map<String, String> headersMap = new HashMap<>();
+                HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_UPDATE_EXAM, param, headersMap);
+            }
             if(Validator.isNotEmpty(update.getResult())){
                 if(!update.getResult().equals(userSubscribeVo.getResult())){
                     //考试结果有变更,发送短信
@@ -795,7 +840,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
 
             //是否关联题库
             GoodsQuestionRel questionRel = iGoodsQuestionRelService.getOne(new LambdaQueryWrapper<GoodsQuestionRel>()
-                    .eq(GoodsQuestionRel::getOrderGoodsId, bo.getOrderGoodsId())
+                    .eq(GoodsQuestionRel::getOrderGoodsId, userSubscribeVo.getOrderGoodsId())
                     .eq(GoodsQuestionRel::getStatus, 1)
                     .gt(GoodsQuestionRel::getQuestionDoNum, 0));
             if (ObjectUtils.isNotNull(questionRel)){
@@ -805,9 +850,9 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
 
             //取消预约推送新B端
             CdExamSubscribeBo cdExamSubscribeBo = new CdExamSubscribeBo();
-            cdExamSubscribeBo.setUserId(bo.getUserId());
-            cdExamSubscribeBo.setOrderGoodsId(bo.getOrderGoodsId());
-            cdExamSubscribeBo.setExamApplyId(bo.getApplyId());
+            cdExamSubscribeBo.setUserId(userSubscribeVo.getUserId());
+            cdExamSubscribeBo.setOrderGoodsId(userSubscribeVo.getOrderGoodsId());
+            cdExamSubscribeBo.setExamApplyId(userSubscribeVo.getApplyId());
             cdExamSubscribeBo.setSign(1);
             cdExamSubscribeBo.setTenantId(Long.valueOf(ServletUtils.getRequest().getHeader("TenantId")));
             cdExamSubscribeBo.setDataFrom(1);
@@ -2469,7 +2514,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         add.setApplySiteEndTime(bo.getApplyEndTime());
         add.setApplySiteExamTime(bo.getApplyTime());
         add.setSiteId(site.getSiteId());
-        add.setExamExpend(1);
+        add.setExamExpend(0);
         add.setApplySiteAddress(site.getSiteAddress());
         add.setSubscribeStatus(1);
         add.setExamStatus(0);

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

@@ -855,6 +855,26 @@
           AND g.goods_id != #{goodsId}
     </select>
 
+
+    <select id="getRelGoodsNoTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
+        SELECT
+            g.*
+        FROM
+            goods g
+                LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+                LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+                LEFT JOIN course_business cb ON g.business_id = cb.id
+                LEFT JOIN major m ON g.major_id = m.id
+        WHERE
+            g.`status` = 1
+            AND INSTR(#{businessName}, cet.education_name)
+            AND INSTR(#{businessName}, cpt.project_name)
+            AND INSTR(#{categoryName}, m.category_name)
+            AND INSTR(#{businessName},cb.business_name)
+            AND g.tenant_id = #{tenantId}
+            AND INSTR(g.goods_name,'测试') &lt;= 0
+    </select>
+
     <select id="queryGoodsByTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
         SELECT *
         FROM `goods`

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

@@ -1334,4 +1334,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             grade_id = #{gradeId}
     </update>
 
+    <select id="getCodeNoTenant" resultType="com.zhongzheng.modules.grade.domain.ClassGrade" parameterType="map">
+        SELECT
+            *
+        FROM
+            class_grade
+        WHERE
+            `status` = 1
+            AND register_code = #{registerCode}
+            AND tenant_id = #{tenantId}
+            LIMIT 1
+    </select>
+
 </mapper>

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

@@ -36,5 +36,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from sys_tenant where (host_pc = #{hostPc} or host_h5 = #{hostH5} or host_live = #{hostLive} or host_h5_seller = #{hostH5Seller} or host_admin = #{hostAdmin})
     </select>
 
+    <select id="getListNoTenant" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.system.domain.SysTenant">
+        SELECT * FROM sys_tenant WHERE share_class = 1 AND `status` = 1 AND tenant_id != #{tenantId}
+    </select>
+
 
 </mapper>