浏览代码

Merge remote-tracking branch 'origin/dev' into dev

zhu 2 年之前
父节点
当前提交
1128dccdfa
共有 53 个文件被更改,包括 764 次插入83 次删除
  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. 28 6
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  5. 9 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigGoodsController.java
  6. 1 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  7. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  8. 1 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  9. 1 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  10. 1 1
      zhongzheng-api/src/main/resources/application-dev.yml
  11. 1 0
      zhongzheng-api/src/main/resources/application-pre.yml
  12. 1 0
      zhongzheng-api/src/main/resources/application-prod.yml
  13. 19 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  14. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/MybatisPlusConfig.java
  15. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  16. 70 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineInnerInterceptor.java
  17. 120 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/FindInSetExpression.java
  18. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysTenantServiceImpl.java
  19. 6 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  20. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/ReplenishExamBo.java
  21. 4 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  22. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/ReplenishExamVo.java
  23. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java
  24. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  25. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  26. 69 29
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  27. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java
  28. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeGoodsMapper.java
  29. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  30. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeGoodsService.java
  31. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  32. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeGoodsServiceImpl.java
  33. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  34. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java
  35. 0 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java
  36. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsAddBo.java
  37. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java
  38. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderBusinessConfigGoodsMapper.java
  39. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  40. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderBusinessConfigGoodsService.java
  41. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderBusinessConfigGoodsServiceImpl.java
  42. 53 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  43. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java
  44. 19 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/AddExamApplyNumBo.java
  45. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserImportAddBo.java
  46. 51 17
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  47. 31 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  48. 11 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeGoodsMapper.xml
  49. 17 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  50. 3 2
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  51. 57 9
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderBusinessConfigGoodsMapper.xml
  52. 2 2
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml
  53. 47 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

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

@@ -182,3 +182,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -182,3 +182,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -182,3 +182,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -26,11 +26,16 @@ import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.modules.activity.vo.ActivityGoodsPriceVo;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.bank.bo.QuestionQueryBo;
 import com.zhongzheng.modules.bank.service.IExamService;
 import com.zhongzheng.modules.bank.service.IQuestionOtherService;
+import com.zhongzheng.modules.bank.service.IQuestionService;
+import com.zhongzheng.modules.bank.vo.QuestionVo;
 import com.zhongzheng.modules.base.bo.ConfigQueryBo;
 import com.zhongzheng.modules.course.bo.ExternalQuestionBo;
+import com.zhongzheng.modules.course.bo.ReplenishExamBo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
+import com.zhongzheng.modules.course.vo.ReplenishExamVo;
 import com.zhongzheng.modules.distribution.bo.DistributionActivityGoodsQueryBo;
 import com.zhongzheng.modules.distribution.bo.DistributionCashWithdrawalPayBo;
 import com.zhongzheng.modules.distribution.service.IDistributionActivityGoodsService;
@@ -160,7 +165,6 @@ public class CommonController extends BaseController {
     private IQuestionOtherService iQuestionOtherService;
     @Autowired
     private OssService ossService;
-
     /**
      * 通用下载请求
      *
@@ -353,13 +357,23 @@ public class CommonController extends BaseController {
     @ApiOperation("获取外部题库商品(山东题库)")
     @PostMapping("common/external/question")
     public AjaxResult getExternalQuestion(@RequestBody ExternalQuestionBo bo) {
-//        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
-//            return AjaxResult.error("签名错误");
-//        }
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
         List<ExternalQuestionVo> questionVos = iGoodsService.getExternalQuestion(bo);
         return AjaxResult.success(questionVos);
     }
 
+    @ApiOperation("获取补考商品")
+    @PostMapping("common/replenish/exam")
+    public AjaxResult getReplenishExam(@RequestBody ReplenishExamBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        List<ReplenishExamVo> questionVos = iGoodsService.getReplenishExam(bo);
+        return AjaxResult.success(questionVos);
+    }
+
 
     @ApiOperation("获取某场考试信息")
     @PostMapping("common/apply/detail")
@@ -733,14 +747,22 @@ public class CommonController extends BaseController {
     @Log(title = "测试获取山东题库", businessType = BusinessType.INSERT)
     @GetMapping("/common/free/getShanDongExam")
     public AjaxResult getShanDongExam(GoodsQueryBo bo) {
-        iQuestionOtherService.queryById(3L);
+        System.out.println(dataSign(bo.getBuyNote(), "ca7c349b-52f2-4751-81ea-c86036e2b4e9"));
         return AjaxResult.success();
     }
-
+    public String dataSign(String SourceMsg, String PKey) {
+        String TempPKey;
+        TempPKey = ToolsUtils.EncoderByMd5(PKey);
+        TempPKey = SourceMsg + TempPKey;
+        TempPKey = ToolsUtils.EncoderByMd5(TempPKey);
+        return TempPKey;
+    }
 
     @ApiOperation("旧系统post请求")
     @PostMapping("/common/free/clientPost")
     public AjaxResult<Void> clientPost(@RequestBody ClientPostAddBo bo) {
         return AjaxResult.success(iClassGradeUserService.sendClientPost(bo));
     }
+
+
 }

+ 9 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigGoodsController.java

@@ -54,6 +54,15 @@ public class OrderBusinessConfigGoodsController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("查询订单配置合并商品列表")
+    @PreAuthorize("@ss.hasPermi('system:goods:list')")
+    @GetMapping("/mergeList")
+    public TableDataInfo<OrderBusinessConfigGoodsVo> mergeList(OrderBusinessConfigGoodsQueryBo bo) {
+        startPage();
+        List<OrderBusinessConfigGoodsVo> list = iOrderBusinessConfigGoodsService.selectMergeList(bo);
+        return getDataTable(list);
+    }
+
 
 
     /**

+ 1 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -159,7 +159,7 @@ public class OrderController extends BaseController {
             questionOpenBo.setGoodsId(bo.getGoodsList().get(0).getGoodsId());
             UserSubscribe userSubscribe = iUserSubscribeService.getOne(new LambdaQueryWrapper<UserSubscribe>()
                     .eq(UserSubscribe::getUserId, bo.getUserId())
-                    .eq(UserSubscribe::getOrderGoodsId, bo.getSubOrderGoodsId())
+                    .eq(UserSubscribe::getOrderGoodsId, bo.getGoodsList().get(0).getSubOrderGoodsId())
                     .last("limit 1"));
             questionOpenBo.setUserSubscribeIds(Arrays.asList(userSubscribe.getSubscribeId()));
             return AjaxResult.success(iOrderService.questionGoodsOpen(questionOpenBo));

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

@@ -183,3 +183,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -182,4 +182,5 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
 

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

@@ -182,3 +182,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -185,4 +185,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
-
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -182,3 +182,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

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

@@ -194,3 +194,4 @@ exam:
     subscribeSave: http://192.168.1.7:9099/cd/subscribe/save
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
+    subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num

+ 19 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -368,6 +368,25 @@ public class ToolsUtils {
         return result;
     }
 
+    public static String EncoderByMd5New(String str) {
+        StringBuffer sb = new StringBuffer(32);
+        try
+        {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] array = md.digest(str.getBytes("gb2312"));
+
+            for (int i = 0; i < array.length; i++)
+            {
+                sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100)
+                        .toUpperCase().substring(1, 3));
+            }
+        } catch (Exception e)
+        {
+            return null;
+        }
+        return sb.toString().toLowerCase();
+    }
+
     public static String EncoderByMd5(String str) {
         String result = "";
         MessageDigest md5 = null;

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

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept
 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
 import com.zhongzheng.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
 import com.zhongzheng.framework.mybatisplus.CustomTenantLineHandler;
+import com.zhongzheng.framework.mybatisplus.CustomTenantLineInnerInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;

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

@@ -145,6 +145,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/common/get/goods/studyUrl").anonymous()
                 .antMatchers("/common/apply/detail").anonymous()
                 .antMatchers("/common/external/question").anonymous()
+                .antMatchers("/common/replenish/exam").anonymous()
                 .antMatchers("/common/student/image/update").anonymous()
                 .antMatchers("/common/platform/pay").anonymous()
                 .antMatchers("/common/platform/pay/handle").anonymous()

+ 70 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineInnerInterceptor.java

@@ -0,0 +1,70 @@
+package com.zhongzheng.framework.mybatisplus;
+
+import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.Parenthesis;
+import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
+import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
+import net.sf.jsqlparser.expression.operators.relational.InExpression;
+import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
+import net.sf.jsqlparser.schema.Column;
+import net.sf.jsqlparser.schema.Table;
+import net.sf.jsqlparser.statement.delete.Delete;
+import net.sf.jsqlparser.statement.insert.Insert;
+import net.sf.jsqlparser.statement.select.SelectBody;
+import net.sf.jsqlparser.statement.update.Update;
+import org.springframework.stereotype.Component;
+
+
+public class CustomTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
+    public CustomTenantLineInnerInterceptor(TenantLineHandler tenantLineHandler) {
+        super(tenantLineHandler);
+    }
+
+    /**
+     * 重构mybatispuls的多租户改为支持in
+     * @param currentExpression
+     * @param table
+     * @return
+     */
+    @Override
+    protected Expression builderExpression(Expression currentExpression, Table table) {
+        Column aliasColumn = this.getAliasColumn(table);
+        boolean presenceOfField=true;
+
+        if(presenceOfField) {
+            FindInSetExpression findInSetExpression = new FindInSetExpression();
+            findInSetExpression.setLeftExpression(getTenantLineHandler().getTenantId());
+            findInSetExpression.setRightExpression(aliasColumn);
+            if (currentExpression == null) {
+                return findInSetExpression;
+            } else {
+                return currentExpression instanceof OrExpression ? new AndExpression(new Parenthesis(currentExpression), findInSetExpression) : new AndExpression(currentExpression, findInSetExpression);
+            }
+        }else{
+            return currentExpression;
+        }
+
+    }
+
+    @Override
+    protected void processInsert(Insert insert, int index, String sql, Object obj) {
+
+    }
+
+    @Override
+    protected void processUpdate(Update update, int index, String sql, Object obj) {
+
+    }
+
+    @Override
+    protected void processDelete(Delete delete, int index, String sql, Object obj) {
+
+    }
+
+    @Override
+    protected void processInsertSelect(SelectBody selectBody) {
+
+    }
+}

+ 120 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/FindInSetExpression.java

@@ -0,0 +1,120 @@
+package com.zhongzheng.framework.mybatisplus;
+
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.ExpressionVisitor;
+import net.sf.jsqlparser.expression.operators.relational.ItemsList;
+import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
+import net.sf.jsqlparser.expression.operators.relational.SupportsOldOracleJoinSyntax;
+import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
+
+public class FindInSetExpression extends ASTNodeAccessImpl implements Expression {
+    private Expression leftExpression;
+    private ItemsList leftItemsList;
+    private ItemsList rightItemsList;
+    private boolean not = false;
+    private Expression rightExpression;
+    private MultiExpressionList multiExpressionList;
+    private int oldOracleJoinSyntax = 0;
+
+    public FindInSetExpression() {
+    }
+
+    public FindInSetExpression(Expression leftExpression, ItemsList itemsList) {
+        this.setLeftExpression(leftExpression);
+        this.setRightItemsList(itemsList);
+    }
+
+    public void setOldOracleJoinSyntax(int oldOracleJoinSyntax) {
+        this.oldOracleJoinSyntax = oldOracleJoinSyntax;
+        if (oldOracleJoinSyntax < 0 || oldOracleJoinSyntax > 1) {
+            throw new IllegalArgumentException("unexpected join type for oracle found with IN (type=" + oldOracleJoinSyntax + ")");
+        }
+    }
+
+    public int getOldOracleJoinSyntax() {
+        return this.oldOracleJoinSyntax;
+    }
+
+    public ItemsList getRightItemsList() {
+        return this.rightItemsList;
+    }
+
+    public Expression getLeftExpression() {
+        return this.leftExpression;
+    }
+
+    public final void setRightItemsList(ItemsList list) {
+        this.rightItemsList = list;
+    }
+
+    public final void setLeftExpression(Expression expression) {
+        this.leftExpression = expression;
+    }
+
+    public boolean isNot() {
+        return this.not;
+    }
+
+    public void setNot(boolean b) {
+        this.not = b;
+    }
+
+    public ItemsList getLeftItemsList() {
+        return this.leftItemsList;
+    }
+
+    public void setLeftItemsList(ItemsList leftItemsList) {
+        this.leftItemsList = leftItemsList;
+    }
+
+    public Expression getRightExpression() {
+        return this.rightExpression;
+    }
+
+    public void setRightExpression(Expression rightExpression) {
+        this.rightExpression = rightExpression;
+    }
+
+
+
+    private String getLeftExpressionString() {
+        return this.leftExpression + (this.oldOracleJoinSyntax == 1 ? "(+)" : "");
+    }
+
+    public String toString() {
+        StringBuilder statementBuilder = new StringBuilder();
+
+        statementBuilder.append("FIND_IN_SET ");
+        statementBuilder.append("(");
+        statementBuilder.append(this.getLeftExpressionString());
+        statementBuilder.append(",");
+        statementBuilder.append(this.rightExpression);
+        statementBuilder.append(")");
+
+        return statementBuilder.toString();
+    }
+
+    public int getOraclePriorPosition() {
+        return 0;
+    }
+
+    public void setOraclePriorPosition(int priorPosition) {
+        if (priorPosition != 0) {
+            throw new IllegalArgumentException("unexpected prior for oracle found");
+        }
+    }
+
+    public MultiExpressionList getMultiExpressionList() {
+        return this.multiExpressionList;
+    }
+
+    public void setMultiExpressionList(MultiExpressionList multiExpressionList) {
+        this.multiExpressionList = multiExpressionList;
+    }
+
+    @Override
+    public void accept(ExpressionVisitor expressionVisitor) {
+
+    }
+}
+

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

@@ -96,6 +96,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         lqw.ne(SysTenant::getStatus, -1);
         lqw.like(StrUtil.isNotBlank(bo.getTenantName()), SysTenant::getTenantName, bo.getTenantName());
         lqw.eq(ObjectUtils.isNotNull(bo.getTenantid()),SysTenant::getTenantId, bo.getTenantid());
+        lqw.orderByDesc(SysTenant::getSort);
         return entity2Vo(this.list(lqw));
     }
 

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

@@ -861,6 +861,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
             inertData.setUserAccount(String.valueOf(idWorker.nextId()));
             inertData.setSex(1);
+            if(Validator.isNotEmpty(itemImport.getSex())){
+                inertData.setSex(itemImport.getSex().equals("女")?2:1);
+            }
+            if(Validator.isNotEmpty(itemImport.getEduLevel())){
+                inertData.setEduLevel(itemImport.getEduLevel());
+            }
             inertData.setIdCard(itemImport.getIdCard());
             inertData.setRealname(itemImport.getRealname());
             if (StringUtils.isNotBlank(itemImport.getCompanyName())) {

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/ReplenishExamBo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.course.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年09月20日 9:05
+ */
+@Data
+public class ReplenishExamBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    private Long tenantId;
+}

+ 4 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -728,12 +728,11 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                 if(fullName.equals("继续教育二级建造师")||fullName.equals("继续教育二级造价师")){
                     goodsUserVo.setErJianErZao(true);
                 }else if (goodsUserVo.getEducationName().equals("考前培训") && goodsUserVo.getProjectName().equals("施工现场专业人员")){
-                    //七大员新考 判断是否提交学员资料
                     int count = iUserProfileService.count(new LambdaQueryWrapper<UserProfile>()
-                                    .notIn(UserProfile::getStatus, Arrays.asList(3, -1))
-                                    .eq(UserProfile::getUserId, goodsUserVo.getUserId())
-                                    .eq(UserProfile::getGoodsId, goodsUserVo.getGoodsId())
-//                            .eq(UserProfile::getCurrentStatus, 1)
+                            .ne(UserProfile::getStatus,-1)
+                            .eq(UserProfile::getUserId, goodsUserVo.getUserId())
+                            .eq(UserProfile::getOrderGoodsId, goodsUserVo.getOrderGoodsId())
+                            .eq(UserProfile::getCurrentStatus, 1)
                     );
                     if (count > 0){
                         goodsUserVo.setUserProfile(1);

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/ReplenishExamVo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.course.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2023年09月12日 8:52
+ */
+@Data
+public class ReplenishExamVo implements Serializable {
+
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("商品价格")
+    private BigDecimal goodsPrice;
+
+    @ApiModelProperty("封面地址")
+    private String coverUrl;
+
+}

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

@@ -168,4 +168,6 @@ private static final long serialVersionUID=1L;
     private String examLimitClient;
     /** 七大员继教可选年份 */
     private String sevenYear;
+    /** 补考商品统一标识 */
+    private Integer unifySign;
 }

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

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 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.vo.CourseVo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
+import com.zhongzheng.modules.course.vo.ReplenishExamVo;
 import com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo;
 import com.zhongzheng.modules.exam.vo.ExamNumberGoodsVo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
@@ -91,4 +93,10 @@ public interface GoodsMapper extends BaseMapper<Goods> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<ExternalQuestionVo> getExternalQuestion(ExternalQuestionBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<ReplenishExamVo> getReplenishExam(ReplenishExamBo bo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<Goods> getRelevanceGoodsNoTenant(Goods g);
 }

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

@@ -3,8 +3,10 @@ package com.zhongzheng.modules.goods.service;
 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.vo.CourseModuleFreeExamVo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
+import com.zhongzheng.modules.course.vo.ReplenishExamVo;
 import com.zhongzheng.modules.exam.bo.ExamNumberGoodsQueryBo;
 import com.zhongzheng.modules.exam.vo.ExamNumberGoodsVo;
 import com.zhongzheng.modules.goods.bo.*;
@@ -152,4 +154,8 @@ public interface IGoodsService extends IService<Goods> {
 	Map<String,String> checkUserAccount(UserGoodsListBo bo);
 
     List<ExternalQuestionVo> getExternalQuestion(ExternalQuestionBo bo);
+
+	List<ReplenishExamVo> getReplenishExam(ReplenishExamBo bo);
+
+	List<Goods> getRelevanceGoodsNoTenant(Goods g);
 }

+ 69 - 29
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -628,35 +628,65 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
                 });
                 iProfileTpService.updateBatchById(profileTpList);
             }
-        }else if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")){
-            //七大员继教同专业下共用一个班级
-            Goods oneGoods = getOne(new LambdaQueryWrapper<Goods>()
-                    .eq(Goods::getEducationTypeId, add.getEducationTypeId())
-                    .eq(Goods::getProjectId, add.getProjectId())
-                    .eq(Goods::getBusinessId, add.getBusinessId())
-                    .eq(ObjectUtils.isNotNull(add.getMajorId()), Goods::getMajorId, add.getMajorId())
-                    .eq(Goods::getSubjectIds, add.getSubjectIds())
-                    .eq(Goods::getStatus, 1)
-                    .eq(Goods::getGoodsStatus,1)
-                    .ne(Goods::getGoodsId, goodsId)
-                    .last("limit 1"));
-            if (ObjectUtils.isNotNull(oneGoods)){
-                List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
-                        .list(new LambdaQueryWrapper<ClassGradeGoods>()
-                        .eq(ClassGradeGoods::getGoodsId, oneGoods.getGoodsId()));
-                if (CollectionUtils.isNotEmpty(classGradeList)){
-                    List<ClassGrade> list = iClassGradeService.listByIds(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
-                    list.forEach(item -> item.setGradeId(null));
-                    iClassGradeService.saveBatch(list);
-                    List<ClassGradeGoods> gradeGoodsList = list.stream().map(item -> {
-                        ClassGradeGoods gradeGoods = new ClassGradeGoods();
-                        gradeGoods.setGradeId(item.getGradeId());
-                        gradeGoods.setGoodsId(goodsId);
-                        gradeGoods.setUpdateTime(DateUtils.getNowTime());
-                        gradeGoods.setCreateTime(DateUtils.getNowTime());
-                        return gradeGoods;
-                    }).collect(Collectors.toList());
-                    iClassGradeGoodsService.saveBatch(gradeGoodsList);
+        }else if (businessName.contains("继续教育") && businessName.contains("施工现场专业人员")
+                && StringUtils.isNotBlank(bo.getSevenYear()) && !Arrays.asList("2021","2022").contains(bo.getSevenYear())){
+            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+            SysTenant tenant = iSysTenantService.getById(Long.valueOf(tenantId));
+            if (ObjectUtils.isNotNull(tenant.getSevenClass()) && tenant.getSevenClass() == 1){
+                //多机构使用祥粤七大员班级
+                Goods g = getById(goodsId);
+                List<Goods> list = baseMapper.getRelevanceGoodsNoTenant(g);
+                if (CollectionUtils.isNotEmpty(list)){
+                    Long relGoodsId = list.stream().findFirst().get().getGoodsId();
+                    List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
+                            .getClassNoTenant(Arrays.asList(relGoodsId));
+                    if (CollectionUtils.isNotEmpty(classGradeList)){
+                        if (CollectionUtils.isNotEmpty(classGradeList)){
+                            List<ClassGrade> gradeList = iClassGradeService.listByIdsNoTenant(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                            gradeList.forEach(item -> item.setGradeId(null));
+                            iClassGradeService.saveBatch(gradeList);
+                            List<ClassGradeGoods> gradeGoodsList = gradeList.stream().map(item -> {
+                                ClassGradeGoods gradeGoods = new ClassGradeGoods();
+                                gradeGoods.setGradeId(item.getGradeId());
+                                gradeGoods.setGoodsId(goodsId);
+                                gradeGoods.setUpdateTime(DateUtils.getNowTime());
+                                gradeGoods.setCreateTime(DateUtils.getNowTime());
+                                return gradeGoods;
+                            }).collect(Collectors.toList());
+                            iClassGradeGoodsService.saveBatch(gradeGoodsList);
+                        }
+                    }
+                }
+            }else {
+                //七大员继教同专业下共用一个班级
+                Goods oneGoods = getOne(new LambdaQueryWrapper<Goods>()
+                        .eq(Goods::getEducationTypeId, add.getEducationTypeId())
+                        .eq(Goods::getProjectId, add.getProjectId())
+                        .eq(Goods::getBusinessId, add.getBusinessId())
+                        .eq(ObjectUtils.isNotNull(add.getMajorId()), Goods::getMajorId, add.getMajorId())
+                        .eq(Goods::getSubjectIds, add.getSubjectIds())
+                        .eq(Goods::getStatus, 1)
+                        .eq(Goods::getGoodsStatus,1)
+                        .ne(Goods::getGoodsId, goodsId)
+                        .last("limit 1"));
+                if (ObjectUtils.isNotNull(oneGoods)){
+                    List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
+                            .list(new LambdaQueryWrapper<ClassGradeGoods>()
+                                    .eq(ClassGradeGoods::getGoodsId, oneGoods.getGoodsId()));
+                    if (CollectionUtils.isNotEmpty(classGradeList)){
+                        List<ClassGrade> list = iClassGradeService.listByIds(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                        list.forEach(item -> item.setGradeId(null));
+                        iClassGradeService.saveBatch(list);
+                        List<ClassGradeGoods> gradeGoodsList = list.stream().map(item -> {
+                            ClassGradeGoods gradeGoods = new ClassGradeGoods();
+                            gradeGoods.setGradeId(item.getGradeId());
+                            gradeGoods.setGoodsId(goodsId);
+                            gradeGoods.setUpdateTime(DateUtils.getNowTime());
+                            gradeGoods.setCreateTime(DateUtils.getNowTime());
+                            return gradeGoods;
+                        }).collect(Collectors.toList());
+                        iClassGradeGoodsService.saveBatch(gradeGoodsList);
+                    }
                 }
             }
         }
@@ -5153,6 +5183,16 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return questionVos;
     }
 
+    @Override
+    public List<ReplenishExamVo> getReplenishExam(ReplenishExamBo bo) {
+        return baseMapper.getReplenishExam(bo);
+    }
+
+    @Override
+    public List<Goods> getRelevanceGoodsNoTenant(Goods g) {
+        return baseMapper.getRelevanceGoodsNoTenant(g);
+    }
+
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
         baseMapper.updateHandoutsId(goodsId,tenantId,handoutsId);
     }

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

@@ -374,4 +374,6 @@ public class GoodsVo {
 	private String sevenYear;
 	@ApiModelProperty("是否是继教施工员")
 	private Boolean jjShiGongYuan;
+	@ApiModelProperty("补考商品统一标识:1统一")
+	private Integer unifySign;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeGoodsMapper.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.grade.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zhongzheng.modules.grade.domain.ClassGradeGoods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -17,4 +18,7 @@ public interface ClassGradeGoodsMapper extends BaseMapper<ClassGradeGoods> {
     List<ClassGradeGoods> getGradeGoodsList(@Param("goodsId") Long goodsId);
 
     List<ClassGradeGoods> getClassGradeByIds(@Param("goodsIds")List<Long> goodsIds);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<ClassGradeGoods> getClassNoTenant(@Param("goodsIds")List<Long> goodsIds);
 }

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java

@@ -26,7 +26,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     List<GoodsVo> queryGoodsList(Long classId);
 
-
+    @InterceptorIgnore(tenantLine = "true")
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
 
     List<ClassGradeUserListVo> listGradeInform(ClassGradeQueryBo bo);
@@ -90,9 +90,13 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     ClassGrade getSevenGrade(List<Long> gradeIds);
 
+    @InterceptorIgnore(tenantLine = "true")
     Long getStudeCountByCode(String sevenCode);
 
     List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo);
 
     List<String> getSevenYearByCode(String sevenCode);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<ClassGrade> listByIdsNoTenant(List<Long> ids);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeGoodsService.java

@@ -53,4 +53,6 @@ public interface IClassGradeGoodsService extends IService<ClassGradeGoods> {
     List<ClassGradeGoods> getGradeGoodsList(Long goodsId);
 
 	List<ClassGradeGoods> getClassGradeByIds(List<Long> goodsIds);
+
+    List<ClassGradeGoods> getClassNoTenant(List<Long> collect);
 }

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

@@ -107,4 +107,6 @@ public interface IClassGradeService extends IService<ClassGrade> {
 
 
 	List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo);
+
+    List<ClassGrade> listByIdsNoTenant(List<Long> ids);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeGoodsServiceImpl.java

@@ -107,4 +107,9 @@ public class ClassGradeGoodsServiceImpl extends ServiceImpl<ClassGradeGoodsMappe
     public List<ClassGradeGoods> getClassGradeByIds(List<Long> goodsIds) {
         return baseMapper.getClassGradeByIds(goodsIds);
     }
+
+    @Override
+    public List<ClassGradeGoods> getClassNoTenant(List<Long> goodsIds) {
+        return baseMapper.getClassNoTenant(goodsIds);
+    }
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -1558,6 +1558,11 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return classGradeVos;
     }
 
+    @Override
+    public List<ClassGrade> listByIdsNoTenant(List<Long> ids) {
+        return baseMapper.listByIdsNoTenant(ids);
+    }
+
     //创建预开班班级
     private void creatClass(List<Long> goodsIds, Long tenantId, String code) {
         goodsIds.forEach(goodsId -> {

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java

@@ -230,5 +230,10 @@ public class ClassGradeStudentVo {
 	private Long expendBefore;
 
 	private String sevenYear;
+	@ApiModelProperty("学时推送结果")
+	private String periodPlushMsg;
+
+	@ApiModelProperty("官方信息推送结果")
+	private String officialStatusMsg;
 
 }

+ 0 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java

@@ -109,8 +109,6 @@ public class OrderAddBo {
     /** 培训计划ID */
     @ApiModelProperty("计划ID")
     private Integer planId;
-    @ApiModelProperty("预约订单商品ID")
-    private Long subOrderGoodsId;
     @ApiModelProperty("新B端题库开通标识")
     private Integer openQuestionSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsAddBo.java

@@ -101,4 +101,6 @@ public class OrderGoodsAddBo {
     private Integer sevenClassCopy;
     @ApiModelProperty("关联的订单商品ID")
     private Long relevanceId;
+    @ApiModelProperty("预约订单商品ID")
+    private Long subOrderGoodsId;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java

@@ -105,5 +105,8 @@ private static final long serialVersionUID=1L;
 
     private Long tenantId;
 
+    @TableField(exist = false)
+    private Long subOrderGoodsId;
+
 
 }

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

@@ -18,4 +18,6 @@ import java.util.List;
  */
 public interface OrderBusinessConfigGoodsMapper extends BaseMapper<OrderBusinessConfigGoods> {
     List<OrderBusinessConfigGoodsVo> selectList(OrderBusinessConfigGoodsQueryBo bo);
+
+    List<OrderBusinessConfigGoodsVo> selectMergeList(OrderBusinessConfigGoodsQueryBo bo);
 }

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

@@ -1,4 +1,5 @@
 package com.zhongzheng.modules.order.mapper;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
 import com.zhongzheng.modules.grade.bo.ClassGradeListBo;
@@ -48,7 +49,16 @@ public interface OrderMapper extends BaseMapper<Order> {
 
     ClassGrade getSevenGrade(@Param("gradeIds") List<Long> gradeIds);
 
+    @InterceptorIgnore(tenantLine = "true")
+    ClassGrade getSevenGradeNoTenant(@Param("gradeIds") List<Long> gradeIds);
+
     Integer getStudeCountByCode(String sevenCode);
 
     List<ClassGrade> getClassNameByGoods(@Param("educationTypeId") Long educationTypeId,@Param("projectId") Long projectId,@Param("businessId") Long businessId,@Param("majorId") Long majorId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<ClassGrade> getClassNameByGoodsNotTenant(@Param("educationTypeId") Long educationTypeId,@Param("projectId") Long projectId,@Param("businessId") Long businessId,@Param("majorId") Long majorId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Integer getStudeCountByCodeNoTenant(String sevenCode);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderBusinessConfigGoodsService.java

@@ -51,4 +51,6 @@ public interface IOrderBusinessConfigGoodsService extends IService<OrderBusiness
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 	List<OrderBusinessConfigGoodsVo> selectList(OrderBusinessConfigGoodsQueryBo bo);
+
+	List<OrderBusinessConfigGoodsVo> selectMergeList(OrderBusinessConfigGoodsQueryBo bo);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderBusinessConfigGoodsServiceImpl.java

@@ -113,4 +113,9 @@ public class OrderBusinessConfigGoodsServiceImpl extends ServiceImpl<OrderBusine
     public List<OrderBusinessConfigGoodsVo> selectList(OrderBusinessConfigGoodsQueryBo bo) {
         return this.baseMapper.selectList(bo);
     }
+
+    @Override
+    public List<OrderBusinessConfigGoodsVo> selectMergeList(OrderBusinessConfigGoodsQueryBo bo) {
+        return this.baseMapper.selectMergeList(bo);
+    }
 }

+ 53 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -213,6 +213,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private ITopOldOrderService topOldOrderService;
     @Autowired
     private ISysOldOrgService iSysOldOrgService;
+    @Autowired
+    private ISysTenantService iSysTenantService;
 
     @Override
     public OrderVo queryById(Long orderId) {
@@ -686,7 +688,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             orderGoods.setCreateTime(DateUtils.getNowTime());
             orderGoods.setUpdateTime(DateUtils.getNowTime());
             orderGoods.setGoodsReceived(g.getGoodsReceived());
-
+            if (ObjectUtils.isNotNull(g.getSubOrderGoodsId())){
+                //补充考试次数订单商品ID
+                orderGoods.setSubOrderGoodsId(g.getSubOrderGoodsId());
+            }
             //订单标准价格不计算优惠
             totalPrice = totalPrice.add(goods.getStandPrice());
             //实际应收价格
@@ -2270,6 +2275,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
         String businessFull = iGoodsService.getGoodsBusinessName(goodsId);
         Goods goods = iGoodsService.getById(goodsId);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant sysTenant = iSysTenantService.getById(Long.valueOf(tenantId));
         //指定班级
         if (gradeId != null && gradeId > 0) {
             ClassGradeVo classGradeVo = iClassGradeService.queryById(gradeId);
@@ -2288,7 +2295,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             int locakStudentNum = 0;
             Boolean sevenFlag = false;
             if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
-                locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+                if (ObjectUtils.isNotNull(sysTenant.getSevenClass()) && sysTenant.getSevenClass() == 1){
+                    //七大员继教班级共享
+                    locakStudentNum = baseMapper.getStudeCountByCodeNoTenant(classGradeVo.getSevenCode());
+                }else {
+                    locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+                }
                 sevenFlag = true;
             }else {
                 LambdaQueryWrapper<ClassGradeUser> lqw = new LambdaQueryWrapper<>();
@@ -2329,8 +2341,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             ClassGradeVo classGradeVo = classGradeVoList.get(i);
             int locakStudentNum = 0;
             Boolean sevenFlag = false;
-            if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
-                locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+            if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")
+                    && StringUtils.isNotBlank(goods.getSevenYear()) && !Arrays.asList("2021","2022").contains(goods.getSevenYear())){
+                if (ObjectUtils.isNotNull(sysTenant.getSevenClass()) && sysTenant.getSevenClass() == 1){
+                    //七大员继教班级共享
+                    locakStudentNum = baseMapper.getStudeCountByCodeNoTenant(classGradeVo.getSevenCode());
+                }else {
+                    locakStudentNum = baseMapper.getStudeCountByCode(classGradeVo.getSevenCode());
+                }
                 sevenFlag = true;
             }else {
                 //临时锁定的班级学员数量
@@ -2390,9 +2408,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                             }
                         });
                     }
+                    if (ObjectUtils.isNotNull(sysTenant.getSevenClass()) && sysTenant.getSevenClass() == 1){
+                        //七大员继教班级共享
+                        classGrade.setSevenCode(getSevenCodeNoTenant(goodsId));
+                    }else {
+                        classGrade.setSevenCode(getSevenCode(goodsId));
+                    }
                 }
-                String sevenCode = getSevenCode(goodsId);
-                classGrade.setSevenCode(sevenCode);
             }else {
                 classGrade.setStudentUpper(ClassGrade.INIT_UPPER); //上限300
             }
@@ -2421,8 +2443,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 //        classGrade.setClassName(goodsName + gradeCode);
         //七大员继教同一个专业下同一个班级名称
         Boolean classFlag = true;
-        if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")){
-            List<ClassGrade> gradeName = baseMapper.getClassNameByGoods(goods.getEducationTypeId(),goods.getProjectId().longValue(),goods.getBusinessId(),goods.getMajorId());
+        if (businessFull.contains("继续教育") && businessFull.contains("施工现场专业人员")
+                && StringUtils.isNotBlank(goods.getSevenYear()) && !Arrays.asList("2021","2022").contains(goods.getSevenYear())){
+            List<ClassGrade> gradeName = new ArrayList<>();
+            if (ObjectUtils.isNotNull(sysTenant.getSevenClass()) && sysTenant.getSevenClass() == 1){
+                //七大员继教班级共享
+                gradeName = baseMapper.getClassNameByGoodsNotTenant(goods.getEducationTypeId(),goods.getProjectId().longValue(),goods.getBusinessId(),goods.getMajorId());
+            }else {
+                gradeName = baseMapper.getClassNameByGoods(goods.getEducationTypeId(),goods.getProjectId().longValue(),goods.getBusinessId(),goods.getMajorId());
+            }
             if (CollectionUtils.isNotEmpty(gradeName)){
                 ClassGrade grade = gradeName.stream().filter(x -> ObjectUtils.isNotNull(x.getClassStatus()) && x.getClassStatus() == 1).findFirst().orElse(null);
                 if (ObjectUtils.isNotEmpty(grade)){
@@ -2513,6 +2542,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return ServletUtils.getEncoded("SEV");
     }
 
+    private String getSevenCodeNoTenant(Long goodsId) {
+        Goods g = iGoodsService.getById(goodsId);
+        List<Goods> list = iGoodsService.getRelevanceGoodsNoTenant(g);
+        if (CollectionUtils.isNotEmpty(list)){
+            List<ClassGradeGoods> classGradeList = iClassGradeGoodsService
+                    .getClassNoTenant(list.stream().map(Goods::getGoodsId).collect(Collectors.toList()));
+            if (CollectionUtils.isNotEmpty(classGradeList)){
+                ClassGrade classGrade = baseMapper.getSevenGradeNoTenant(classGradeList.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                if (ObjectUtils.isNotNull(classGrade)){
+                    return classGrade.getSevenCode();
+                }
+            }
+        }
+        return ServletUtils.getEncoded("SEV");
+    }
+
     @Override
     public Map<String, String> getActivityGoods(OrderAddBo bo) {
         String key = "ORDER-" + "-" + bo.getUserId();

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

@@ -107,5 +107,9 @@ private static final long serialVersionUID=1L;
     private String postAccount;
     /** 邮箱密码 */
     private String postPassword;
+    /** 排序字段 */
+    private Integer sort;
+    /** 七大员班级标识:1使用祥粤班级 0正常 */
+    private Integer sevenClass;
 
 }

+ 19 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/AddExamApplyNumBo.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年09月19日 14:05
+ */
+@Data
+public class AddExamApplyNumBo implements Serializable {
+
+    private Long userId;
+
+    private Long orderGoodsId;
+
+    private Integer num;
+}

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserImportAddBo.java

@@ -37,6 +37,14 @@ public class UserImportAddBo {
     @ApiModelProperty("科目,多个,拼接")
     private String subjectNames;
 
+    @Excel(name = "性别")
+    @ApiModelProperty("性别")
+    private String sex;
+
+    @Excel(name = "学历")
+    @ApiModelProperty("学历")
+    private String eduLevel;
+
     @Excel(name = "失败原因")
     private String cause;
 

+ 51 - 17
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -67,6 +67,8 @@ import com.zhongzheng.modules.top.goods.domain.*;
 import com.zhongzheng.modules.top.goods.service.*;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
+import com.zhongzheng.modules.user.bo.AddExamApplyNumBo;
+import com.zhongzheng.modules.user.bo.CdExamSubscribeBo;
 import com.zhongzheng.modules.user.bo.UserExamGoodsQueryBo;
 import com.zhongzheng.modules.user.bo.UserExamGoodsSupplementAddBo;
 import com.zhongzheng.modules.user.domain.UserExamGoods;
@@ -242,6 +244,8 @@ public class WxPayServiceImpl implements IWxPayService {
     private String gzh_tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
 
     private String gzh_tokenParam = "grant_type=client_credential&appid=%s&secret=%s";
+    @Value("${exam.subscribeAddExamNum}")
+    private String EXAM_SUBSCRIBE_ADD_EXAM_NUM;
 
 
     public void initData(){
@@ -1077,23 +1081,53 @@ public class WxPayServiceImpl implements IWxPayService {
         }
         //增加考试次数
         if (goodsVo.getGoodsType().equals(3)) {
-            UserExamGoodsQueryBo userExamGoodsQueryBo = new UserExamGoodsQueryBo();
-            userExamGoodsQueryBo.setUserId(order.getUserId());
-            userExamGoodsQueryBo.setGoodsId(goodsVo.getMakeGoodsId());
-            List<UserExamGoodsVo> userExamGoodsVos = userExamGoodsService.queryList(userExamGoodsQueryBo);
-            if (!CollectionUtils.isEmpty(userExamGoodsVos)) {
-                UserExamGoodsVo userExamGoodsVo = userExamGoodsVos.get(0);//取最后即最新一条
-                UserExamGoodsSupplementAddBo userExamGoodsSupplementAddBo = new UserExamGoodsSupplementAddBo();
-                userExamGoodsSupplementAddBo.setGoodsId(goodsVo.getGoodsId());
-                userExamGoodsSupplementAddBo.setUserExamGoodsId(userExamGoodsVo.getUserExamGoodsId());
-                userExamGoodsSupplementAddBo.setExamNumber(goodsVo.getStudyCount());
-                userExamGoodsSupplementAddBo.setStatus(1);
-                userExamGoodsSupplementAddBo.setOrderGoodsId(g.getOrderGoodsId());
-                userExamGoodsSupplementService.insertByAddBo(userExamGoodsSupplementAddBo);
-                UserExamGoods userExamGoods = new UserExamGoods();
-                userExamGoods.setUserExamGoodsId(userExamGoodsVo.getUserExamGoodsId());
-                userExamGoods.setExamNumber(userExamGoodsVo.getExamNumber() + goodsVo.getStudyCount());
-                userExamGoodsService.updateById(userExamGoods);
+            if (ObjectUtils.isNotNull(goodsVo.getUnifySign()) && goodsVo.getUnifySign() == 1 && ObjectUtils.isNotNull(g.getSubOrderGoodsId())){
+                //统一补考商品标识 补充考试次数
+                UserExamGoods examGoods = userExamGoodsService
+                        .getOne(new LambdaQueryWrapper<UserExamGoods>()
+                        .eq(UserExamGoods::getOrderGoodsId, g.getSubOrderGoodsId())
+                        .last("limit 1"));
+                if (ObjectUtils.isNotNull(examGoods)){
+                    //补充一次机会
+                    examGoods.setExamNumber(examGoods.getExamNumber() + 1);
+                    //添加记录
+                    OrderGoods orderGoods = iOrderGoodsService.getById(g.getSubOrderGoodsId());
+                    UserExamGoodsSupplementAddBo userExamGoodsSupplementAddBo = new UserExamGoodsSupplementAddBo();
+                    userExamGoodsSupplementAddBo.setGoodsId(goodsVo.getGoodsId());
+                    userExamGoodsSupplementAddBo.setUserExamGoodsId(orderGoods.getGoodsId());
+                    userExamGoodsSupplementAddBo.setExamNumber(1L);
+                    userExamGoodsSupplementAddBo.setStatus(1);
+                    userExamGoodsSupplementAddBo.setOrderGoodsId(g.getOrderGoodsId());
+                    userExamGoodsSupplementService.insertByAddBo(userExamGoodsSupplementAddBo);
+                    userExamGoodsService.updateById(examGoods);
+                    //新B端同步考试次数
+                    AddExamApplyNumBo addExamApplyNum = new AddExamApplyNumBo();
+                    addExamApplyNum.setUserId(order.getUserId());
+                    addExamApplyNum.setOrderGoodsId(orderGoods.getOrderGoodsId());
+                    addExamApplyNum.setNum(1);
+                    String param = JSONObject.toJSONString(addExamApplyNum);
+                    Map<String, String> headersMap = new HashMap<>();
+                    HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_ADD_EXAM_NUM, param, headersMap);
+                }
+            }else {
+                UserExamGoodsQueryBo userExamGoodsQueryBo = new UserExamGoodsQueryBo();
+                userExamGoodsQueryBo.setUserId(order.getUserId());
+                userExamGoodsQueryBo.setGoodsId(goodsVo.getMakeGoodsId());
+                List<UserExamGoodsVo> userExamGoodsVos = userExamGoodsService.queryList(userExamGoodsQueryBo);
+                if (!CollectionUtils.isEmpty(userExamGoodsVos)) {
+                    UserExamGoodsVo userExamGoodsVo = userExamGoodsVos.get(0);//取最后即最新一条
+                    UserExamGoodsSupplementAddBo userExamGoodsSupplementAddBo = new UserExamGoodsSupplementAddBo();
+                    userExamGoodsSupplementAddBo.setGoodsId(goodsVo.getGoodsId());
+                    userExamGoodsSupplementAddBo.setUserExamGoodsId(userExamGoodsVo.getUserExamGoodsId());
+                    userExamGoodsSupplementAddBo.setExamNumber(goodsVo.getStudyCount());
+                    userExamGoodsSupplementAddBo.setStatus(1);
+                    userExamGoodsSupplementAddBo.setOrderGoodsId(g.getOrderGoodsId());
+                    userExamGoodsSupplementService.insertByAddBo(userExamGoodsSupplementAddBo);
+                    UserExamGoods userExamGoods = new UserExamGoods();
+                    userExamGoods.setUserExamGoodsId(userExamGoodsVo.getUserExamGoodsId());
+                    userExamGoods.setExamNumber(userExamGoodsVo.getExamNumber() + goodsVo.getStudyCount());
+                    userExamGoodsService.updateById(userExamGoods);
+                }
             }
         }
     }

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

@@ -817,6 +817,19 @@
           AND g.`status` = 1
     </select>
 
+    <select id="getReplenishExam" parameterType="com.zhongzheng.modules.course.bo.ReplenishExamBo" resultType="com.zhongzheng.modules.course.vo.ReplenishExamVo">
+        SELECT
+            g.goods_id,
+            g.goods_name,
+            g.stand_price AS goodsPrice,
+            g.cover_url
+        FROM
+            goods g
+        WHERE
+            g.`status` = 1
+            and g.unify_sign = 1
+    </select>
+
     <select id="queryGoodsByIdTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
         SELECT *
         FROM `goods`
@@ -824,6 +837,24 @@
           AND tenant_id = #{tenantId}
     </select>
 
+    <select id="getRelevanceGoodsNoTenant" parameterType="com.zhongzheng.modules.goods.domain.Goods" resultType="com.zhongzheng.modules.goods.domain.Goods">
+        SELECT
+            *
+        FROM
+            goods
+        WHERE
+            education_type_id = #{educationTypeId}
+          AND project_id = #{projectId}
+          AND business_id = #{businessId}
+          <if test="majorId != null and majorId != ''">
+              AND major_id = #{majorId}
+          </if>
+          AND subject_ids = #{subjectIds}
+          AND `status` = 1
+          AND goods_status = 1
+          AND goods_id != #{goodsId}
+    </select>
+
     <select id="queryGoodsByTenant" parameterType="map" resultType="com.zhongzheng.modules.goods.domain.Goods">
         SELECT *
         FROM `goods`

+ 11 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeGoodsMapper.xml

@@ -26,4 +26,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="getClassNoTenant" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.grade.domain.ClassGradeGoods">
+        SELECT cgg.* FROM class_grade_goods cgg
+        WHERE
+        <if test="goodsIds != null and goodsIds.size()!=0 ">
+            AND cgg.goods_id in
+            <foreach collection="goodsIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>

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

@@ -179,6 +179,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="doNumber" column="do_number"/>
         <result property="expendNumber" column="expend_number"/>
         <result property="expendBefore" column="expend_before"/>
+        <result property="periodPlushMsg" column="official_status_msg"/>
+        <result property="officialStatusMsg" column="period_plush_msg"/>
     </resultMap>
 
 
@@ -417,6 +419,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cg.class_end_time,
         cg.interface_push_id,
         cgu.official_status,
+        cgu.official_status_msg,
+        cgu.period_plush_msg,
         cgu.learn_status,
         (SELECT COUNT(m.id) FROM course_menu_exam m LEFT JOIN goods_course c on m.course_id=c.course_id LEFT JOIN class_grade_goods cgg on cgg.goods_id = c.goods_id where cg.grade_id=cgg.grade_id and m.type  in (1,3) ) as exam_num,
         (SELECT COUNT(DISTINCT ubr.module_id,ubr.chapter_id,ubr.exam_id) FROM user_bank_record ubr LEFT JOIN class_grade_goods cgg on cgg.goods_id = ubr.goods_id where ubr.`status`=1 and ubr.type  in (1,3) and  ubr.user_id = u.user_id and ubr.grade_id = cgu.grade_id and ubr.report_status=1 and ubr.current_status = 1) as record_num,
@@ -1288,4 +1292,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             cg.`status` != - 1
 	        AND cg.seven_code = #{sevenCode}
     </select>
+
+    <select id="listByIdsNoTenant" resultType="com.zhongzheng.modules.grade.domain.ClassGrade" parameterType="java.lang.Long">
+        SELECT
+            cg.*
+        FROM
+            class_grade cg
+        WHERE
+            cg.`status` != - 1
+            AND cg.grade_id in
+            <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+    </select>
 </mapper>

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

@@ -1563,8 +1563,9 @@
           AND g.`status` = 1
           AND gu.`status` = 1
           AND gu.change_grade = 0
-          AND IFNULL(gu.period_plush,0) != 1
-          AND gu.period_status = 1
+          AND IFNULL( gu.period_plush, 0 ) != 1
+	AND gu.period_status = 1
+	AND gu.official_status = 1
     </select>
 
     <select id="selectGoodsGradeList" parameterType="Long" resultMap="ClassGradeUserGoodsVoResult">

+ 57 - 9
zhongzheng-system/src/main/resources/mapper/modules/order/OrderBusinessConfigGoodsMapper.xml

@@ -63,16 +63,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderBusinessConfigGoodsQueryBo" resultMap="OrderBusinessConfigGoodsVoResult">
         SELECT
-            bcg.*,
-            cs.subject_name,
-            obc.config_name
+        bcg.*,
+        cs.subject_name,
+        obc.config_name
         FROM
-            order_business_config_goods bcg
-            LEFT JOIN order_business_config obc ON bcg.config_id = obc.id
-            LEFT JOIN course_business cb ON obc.business_id = cb.id
-            LEFT JOIN course_project_type cpt ON cb.project_id = cpt.id
-            LEFT JOIN course_education_type cet ON cet.id = cpt.education_id
-                LEFT JOIN course_subject cs on bcg.subject_id = cs.id
+        order_business_config_goods bcg
+        LEFT JOIN order_business_config obc ON bcg.config_id = obc.id
+        LEFT JOIN course_business cb ON obc.business_id = cb.id
+        LEFT JOIN course_project_type cpt ON cb.project_id = cpt.id
+        LEFT JOIN course_education_type cet ON cet.id = cpt.education_id
+        LEFT JOIN course_subject cs on bcg.subject_id = cs.id
         WHERE
         obc.`status` = 1
         and bcg.`status` = 1
@@ -108,4 +108,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+
+    <select id="selectMergeList" parameterType="com.zhongzheng.modules.order.bo.OrderBusinessConfigGoodsQueryBo" resultMap="OrderBusinessConfigGoodsVoResult">
+        SELECT
+        bcg.config_id,
+        any_value ( obc.config_name ) config_name,
+        group_concat( bcg.goods_ids ) goods_ids
+        FROM
+        order_business_config_goods bcg
+        LEFT JOIN order_business_config obc ON bcg.config_id = obc.id
+        LEFT JOIN course_business cb ON obc.business_id = cb.id
+        LEFT JOIN course_project_type cpt ON cb.project_id = cpt.id
+        LEFT JOIN course_education_type cet ON cet.id = cpt.education_id
+        LEFT JOIN course_subject cs on bcg.subject_id = cs.id
+        WHERE
+        obc.`status` = 1
+        and bcg.`status` = 1
+        <if test="configId != null and configId != ''">
+            and bcg.config_id = #{configId}
+        </if>
+        <if test="gradeType != null and gradeType != ''">
+            and obc.grade_type = #{gradeType}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            and obc.business_id = #{businessId}
+        </if>
+        <if test="projectId != null and projectId != ''">
+            and cpt.id = #{projectId}
+        </if>
+        <if test="educationId != null and educationId != ''">
+            and cet.id = #{educationId}
+        </if>
+        <if test="subjectId != null and subjectId != ''">
+            and bcg.subject_id = #{subjectId}
+        </if>
+        <if test="businessName != null and businessName != ''">
+            and cb.business_name = #{businessName}
+        </if>
+        <if test="projectName != null and projectName != ''">
+            and cpt.project_name = #{projectName}
+        </if>
+        <if test="educationName != null and educationName != ''">
+            and cet.education_name = #{educationName}
+        </if>
+        <if test="subjectName != null and subjectName != ''">
+            and cs.subject_name = #{subjectName}
+        </if>
+        GROUP BY bcg.config_id
+    </select>
 </mapper>

+ 2 - 2
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

@@ -842,8 +842,8 @@
         WHERE
             og.order_sn = #{orderSn}
           AND og.`status` = 1
-          AND og.refund_status != 2
-          AND og.pay_status IN ( 2, 3, 4 )
+--           AND og.refund_status != 2
+--           AND og.pay_status IN ( 2, 3, 4 )
         <if test="userCard != null and userCard != ''">
             AND u.id_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
         </if>

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

@@ -480,6 +480,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LIMIT 1
     </select>
 
+    <select id="getSevenGradeNoTenant" resultType="com.zhongzheng.modules.grade.domain.ClassGrade" parameterType="java.lang.Long">
+        SELECT cg.* FROM class_grade cg
+        WHERE cg.`status` = 1 AND (
+        (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+        (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+        ) <![CDATA[   <  ]]> cg.student_upper AND cg.grade_id IN
+        <foreach collection="gradeIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        LIMIT 1
+    </select>
+
     <select id="getStudeCountByCode" resultType="java.lang.Integer" parameterType="java.lang.String">
         SELECT SUM(
                            (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
@@ -488,6 +500,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE cg.`status` = 1 AND  cg.seven_code = #{sevenCode}
     </select>
 
+    <select id="getStudeCountByCodeNoTenant" resultType="java.lang.Integer" parameterType="java.lang.String">
+        SELECT SUM(
+                           (SELECT COUNT(DISTINCT cgu.user_id) FROM class_grade_user cgu WHERE cgu.grade_id = cg.grade_id AND cgu.`status` = 1 AND cgu.change_grade = 0) +
+                           (SELECT COUNT(DISTINCT cgut.user_id) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+                   ) as num FROM class_grade cg
+        WHERE cg.`status` = 1 AND  cg.seven_code = #{sevenCode}
+    </select>
+
     <select id="getClassNameByGoods" resultType="com.zhongzheng.modules.grade.domain.ClassGrade" parameterType="java.lang.Long">
         SELECT
             cg.*
@@ -514,4 +534,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 ) + ( SELECT COUNT( DISTINCT cgut.user_id ) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
             ) <![CDATA[ < ]]>  cg.student_upper
     </select>
+
+    <select id="getClassNameByGoodsNotTenant" resultType="com.zhongzheng.modules.grade.domain.ClassGrade" parameterType="java.lang.Long">
+        SELECT
+            cg.*
+        FROM
+            class_grade cg
+                LEFT JOIN class_grade_goods cgg ON cg.grade_id = cgg.grade_id
+                LEFT JOIN goods g ON cgg.goods_id = g.goods_id
+        WHERE
+            cg.`status` = 1
+          AND g.education_type_id = #{educationTypeId}
+          AND g.project_id = #{projectId}
+          AND g.business_id = #{businessId}
+          AND major_id = #{majorId}
+          AND (
+                      (
+                          SELECT
+                              COUNT( DISTINCT cgu.user_id )
+                          FROM
+                              class_grade_user cgu
+                          WHERE
+                              cgu.grade_id = cg.grade_id
+                            AND cgu.`status` = 1
+                            AND cgu.change_grade = 0
+                      ) + ( SELECT COUNT( DISTINCT cgut.user_id ) FROM class_grade_user_temp cgut WHERE cgut.grade_id = cg.grade_id AND cgut.`status` = 1 )
+                  ) <![CDATA[ < ]]>  cg.student_upper
+    </select>
 </mapper>