瀏覽代碼

Merge branch 'dev'

yangdamao 1 年之前
父節點
當前提交
16376cfc38
共有 54 個文件被更改,包括 2321 次插入74 次删除
  1. 1 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  2. 159 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderRepController.java
  3. 1 1
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  4. 12 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  5. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  6. 1 0
      zhongzheng-api/src/main/resources/application-dev.yml
  7. 2 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/http/HttpUtils.java
  8. 41 34
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  9. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java
  10. 25 21
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  11. 35 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassBusinessQuery.java
  12. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  14. 21 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  15. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassBusinessVo.java
  16. 11 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java
  17. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsMapper.java
  18. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsService.java
  19. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  20. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java
  21. 8 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java
  22. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderGoodsMapper.java
  23. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java
  24. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderGoodsService.java
  25. 23 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java
  26. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderGoodsServiceImpl.java
  27. 738 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  28. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderBillExportVo.java
  29. 36 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderQuestionImportBo.java
  30. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepDetailEditBo.java
  31. 35 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepEditBo.java
  32. 36 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepGoodsQueryBo.java
  33. 58 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepQueryBo.java
  34. 29 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepQuestionBo.java
  35. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRequestBo.java
  36. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRequestDetailBo.java
  37. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopRepQuestionQueryBo.java
  38. 42 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOldOrderQuestion.java
  39. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOldOrderReplenish.java
  40. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/mapper/TopOldOrderQuestionMapper.java
  41. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/mapper/TopOldOrderReplenishMapper.java
  42. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/ITopOldOrderQuestionService.java
  43. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/ITopOldOrderReplenishService.java
  44. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/impl/TopOldOrderQuestionServiceImpl.java
  45. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/impl/TopOldOrderReplenishServiceImpl.java
  46. 62 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderQuestionVo.java
  47. 75 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderRepDetailVo.java
  48. 126 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderRepVo.java
  49. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderRequestVo.java
  50. 33 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopQuestionImportVo.java
  51. 56 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  52. 29 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml
  53. 23 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderGoodsMapper.xml
  54. 192 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

+ 1 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.controller.order;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.model.TopLoginUser;

+ 159 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderRepController.java

@@ -0,0 +1,159 @@
+package com.zhongzheng.controller.order;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.*;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderQuestionVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepVo;
+import com.zhongzheng.modules.top.order.vo.TopQuestionImportVo;
+import com.zhongzheng.modules.user.bo.UserDataImportBo;
+import com.zhongzheng.modules.user.vo.UserExportVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单明细控制器", tags = {"订单明细控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/rep")
+public class TopOldOrderRepController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+    /**
+     * 查询订单列表
+     */
+    @ApiOperation("查询订单列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopOldOrderRepVo> list(TopOrderRepQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        startPage();
+        List<TopOldOrderRepVo> list = iTopOldOrderService.queryOrderRepList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询订单列表
+     */
+    @ApiOperation("查询订单详情")
+    @GetMapping("/goods/detail")
+    public TableDataInfo<TopOldOrderRepDetailVo> getOrderDetailList(TopOrderRepGoodsQueryBo queryBo) {
+        startPage();
+        List<TopOldOrderRepDetailVo> orderDetailList = iTopOldOrderService.getOrderDetailList(queryBo);
+        return getDataTable(orderDetailList);
+    }
+
+    /**
+     * 订单明细修改
+     */
+    @ApiOperation("订单明细修改")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody TopOrderRepEditBo editBo) {
+        return toAjax(iTopOldOrderService.editOrderRepList(editBo) ? 1 : 0);
+    }
+
+    /**
+     * 订单明细修改
+     */
+    @ApiOperation("订单明细详情修改")
+    @PostMapping("/detail/edit")
+    public AjaxResult<Void> editOrderRepDetail(@RequestBody TopOrderRepDetailEditBo editBo) {
+        return toAjax(iTopOldOrderService.editOrderRepDetail(editBo) ? 1 : 0);
+    }
+
+    /**
+     * 订单题库开通列表
+     */
+    @ApiOperation("订单题库开通列表")
+    @GetMapping("/question/list")
+    public AjaxResult<List<TopOldOrderQuestionVo>> getOrderQuestionList(TopRepQuestionQueryBo queryBo) {
+        List<TopOldOrderQuestionVo> list =  iTopOldOrderService.getOrderQuestionList(queryBo);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 订单题库开通详情
+     */
+    @ApiOperation("订单题库开通详情")
+    @GetMapping("/question/detail")
+    public AjaxResult<TopOldOrderQuestionVo> getOrderQuestionDetail(TopRepQuestionQueryBo queryBo) {
+        TopOldOrderQuestionVo vo =  iTopOldOrderService.getOrderQuestionDetail(queryBo);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 新增订单题库开通记录
+     */
+    @ApiOperation("新增订单题库开通记录")
+    @PostMapping("/save/question")
+    public AjaxResult<Void> saveOrderQuestion(@RequestBody TopOrderRepQuestionBo bo) {
+        return toAjax(iTopOldOrderService.saveOrderQuestion(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除订单题库开通记录
+     */
+    @ApiOperation("删除订单题库开通记录")
+    @GetMapping("/del/question/{id}")
+    public AjaxResult<Void> delOrderQuestion(@PathVariable("id") Long id) {
+        return toAjax(iTopOldOrderService.delOrderQuestion(id) ? 1 : 0);
+    }
+
+    /**
+     * 账单记录
+     */
+    @ApiOperation("账单记录")
+    @GetMapping("/bill/export")
+    public AjaxResult<Void> billExport(TopOrderRepQueryBo queryBo) {
+        List<TopOrderBillExportVo> list = iTopOldOrderService.billExportList(queryBo);
+        ExcelUtil<TopOrderBillExportVo> util = new ExcelUtil<TopOrderBillExportVo>(TopOrderBillExportVo.class);
+        return util.exportExcel(list,"账单明细");
+    }
+
+    /**
+     * 订单题库开通记录导入
+     */
+    @ApiOperation("订单题库开通记录导入")
+    @PostMapping("/import/question")
+    public AjaxResult<TopQuestionImportVo> importOrderQuestion(MultipartFile file) {
+        List<TopOrderQuestionImportBo> questionImportBos = EasyPoiUtil.importExcel(file,0,1,TopOrderQuestionImportBo.class);
+        if (CollectionUtils.isEmpty(questionImportBos)){
+            throw new CustomException("导入文件格式不正确或文件为空,请检查文件!");
+        }
+        TopQuestionImportVo vo = iTopOldOrderService.importOrderQuestion(questionImportBos);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 批量新增订单题库开通记录
+     */
+    @ApiOperation("批量新增订单题库开通记录")
+    @PostMapping("/batch/save/question")
+    public AjaxResult<Void> batchSaveOrderQuestion(@RequestBody List<TopOrderRepQuestionBo> bos) {
+        return toAjax(iTopOldOrderService.batchSaveOrderQuestion(bos) ? 1 : 0);
+    }
+}

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

@@ -167,7 +167,7 @@ oldOrder:
     refundPay: http://192.168.1.222:5030/common/platform/pay
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
-
+    getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
 oldSys:
     host: http://gdxypx.xy.com
     goods: http://gdxypx.xy.com/WitSystem/BussinessApi/NewYxtLogin

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

@@ -59,6 +59,7 @@ import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IUserPeriodService;
+import com.zhongzheng.modules.grade.vo.ClassBusinessVo;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodStudentVo;
 import com.zhongzheng.modules.grade.vo.SyncGoodsExport;
@@ -936,4 +937,15 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iUserService.studyRecord(customerBos));
     }
 
+    @ApiOperation("获取业务层次下的所有班级")
+    @PostMapping("/common/free/class")
+    public TableDataInfo<ClassBusinessVo> getBusinessClassList(@RequestBody ClassBusinessQuery query) {
+        if (!ToolsUtils.checkSignFromOldSys(query.getStamp().toString(), query.getSign())) {
+           throw new CustomException("签名错误");
+        }
+        startPage();
+       List<ClassBusinessVo> list = iClassGradeService.getBusinessClassList(query);
+        return getDataTable(list);
+    }
+
 }

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

@@ -168,6 +168,7 @@ oldOrder:
     refundPay: http://192.168.1.222:5030/common/platform/pay
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
+    getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
 
 oldSys:
     host: http://gdxypx.xy.com

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

@@ -170,6 +170,7 @@ oldOrder:
     refundPay: http://192.168.1.222:5030/common/platform/pay
     refundPayHandle: http://192.168.1.222:5030/common/platform/pay/handle
     updateRemark: http://gdxypx.xy.com/WitSystem/BussinessApi/UpdateOrderAuditRemark
+    getResitTimes: http://gdxypx.xy.com/System/BussinessApi/GetResitTimes
 
 oldSys:
     host: http://gdxypx.xy.com

+ 2 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/http/HttpUtils.java

@@ -147,6 +147,8 @@ public class HttpUtils
             s.setContentType("application/json");
             post.setEntity(s);
             post.addHeader("content-type", "application/json");
+            System.out.println("url = " + url);
+            System.out.println("param = " + param);
             HttpResponse res = client.execute(post);
             if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                 if (res.getEntity().getContentType().getValue().equalsIgnoreCase("image/jpeg")) {

+ 41 - 34
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -1198,41 +1198,48 @@ public class WxLoginService implements IWxLoginService {
     @Override
     public String getWxSmallLink() {
         initData();
-        String wxGzhAccessToken = getWxSmallAccessToken();
-        String param = String.format(small_LinkParam, wxGzhAccessToken);
-        String url = small_LinkUrl + "?" + param;
-        JSONObject obj = new JSONObject();
-        obj.put("path", "pages/index/index");
-        obj.put("is_expire",true);
-        obj.put("expire_type",1);
-        obj.put("expire_interval",1);
-        obj.put("env_version",enCodeVersion);
-        String result = HttpUtils.sendPost(url, obj);
-        if (result.contains("errcode")){
-            List<String> codes = Arrays.asList("40001", "42001");
-            JSONObject jsonObject = JSONObject.parseObject(result);
-            if(ObjectUtils.isNotNull(jsonObject.get("errcode")) && codes.contains(jsonObject.get("errcode").toString())){
-                //微信access_token 过期或者失效,刷新access_token
-                String key = "WX_SMALL_ACCESS_TOKEN";
-                redisCache.deleteObject(key);
-                String wxGzhAccessTokenTo = getWxSmallAccessToken();
-                String paramTo = String.format(small_LinkParam, wxGzhAccessTokenTo);
-                String urlTo = small_LinkUrl + "?" + paramTo;
-                result = HttpUtils.sendPost(urlTo, obj);
-            }
-        }
-        JSONObject jsonObject = JSONObject.parseObject(result);
-        if(jsonObject.containsKey("url_link")){
-            return jsonObject.get("url_link").toString();
-        }else{
-            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
-            SysTenant sysTenant = iSysTenantService.getOne(new LambdaQueryWrapper<SysTenant>()
-                    .eq(SysTenant::getTenantId,tenantId).last("limit 1"));
-            if(Validator.isNotEmpty(sysTenant)){
-                return "https://"+sysTenant.getHostH5();
-            }
-            return null;
+//        String wxGzhAccessToken = getWxSmallAccessToken();
+//        String param = String.format(small_LinkParam, wxGzhAccessToken);
+//        String url = small_LinkUrl + "?" + param;
+//        JSONObject obj = new JSONObject();
+//        obj.put("path", "pages/index/index");
+//        obj.put("is_expire",true);
+//        obj.put("expire_type",1);
+//        obj.put("expire_interval",1);
+//        obj.put("env_version",enCodeVersion);
+//        String result = HttpUtils.sendPost(url, obj);
+//        if (result.contains("errcode")){
+//            List<String> codes = Arrays.asList("40001", "42001");
+//            JSONObject jsonObject = JSONObject.parseObject(result);
+//            if(ObjectUtils.isNotNull(jsonObject.get("errcode")) && codes.contains(jsonObject.get("errcode").toString())){
+//                //微信access_token 过期或者失效,刷新access_token
+//                String key = "WX_SMALL_ACCESS_TOKEN";
+//                redisCache.deleteObject(key);
+//                String wxGzhAccessTokenTo = getWxSmallAccessToken();
+//                String paramTo = String.format(small_LinkParam, wxGzhAccessTokenTo);
+//                String urlTo = small_LinkUrl + "?" + paramTo;
+//                result = HttpUtils.sendPost(urlTo, obj);
+//            }
+//        }
+//        JSONObject jsonObject = JSONObject.parseObject(result);
+//        if(jsonObject.containsKey("url_link")){
+//            return jsonObject.get("url_link").toString();
+//        }else{
+//            String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+//            SysTenant sysTenant = iSysTenantService.getOne(new LambdaQueryWrapper<SysTenant>()
+//                    .eq(SysTenant::getTenantId,tenantId).last("limit 1"));
+//            if(Validator.isNotEmpty(sysTenant)){
+//                return "https://"+sysTenant.getHostH5();
+//            }
+//            return null;
+//        }
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant sysTenant = iSysTenantService.getOne(new LambdaQueryWrapper<SysTenant>()
+                .eq(SysTenant::getTenantId,tenantId).last("limit 1"));
+        if(Validator.isNotEmpty(sysTenant)){
+            return "https://"+sysTenant.getHostH5();
         }
+        return null;
 
     }
 

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

@@ -23,6 +23,8 @@ import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
 import com.zhongzheng.modules.course.service.ICourseTopicService;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
 import com.zhongzheng.modules.course.vo.CourseProjectTypeVo;
+import com.zhongzheng.modules.order.domain.OrderInputTemplate;
+import com.zhongzheng.modules.order.service.IOrderInputTemplateService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -45,6 +47,8 @@ public class CourseBusinessServiceImpl extends ServiceImpl<CourseBusinessMapper,
     private ICourseProjectTypeService iCourseProjectTypeService;
     @Autowired
     private ICourseTopicService iCourseTopicService;
+    @Autowired
+    private IOrderInputTemplateService orderInputTemplateService;
 
     @Override
     public CourseBusinessVo queryById(Long id){
@@ -83,6 +87,14 @@ public class CourseBusinessServiceImpl extends ServiceImpl<CourseBusinessMapper,
             if (ObjectUtils.isNotNull(courseTopic)){
                 item.setTopicId(courseTopic.getTopicId());
             }
+            if (ObjectUtils.isNotNull(item.getTemplateStatus())){
+                OrderInputTemplate orderInputTemplate = orderInputTemplateService.getById(item.getTemplateStatus());
+                if (ObjectUtils.isNotNull(orderInputTemplate) && "class".equals(orderInputTemplate.getType())){
+                    item.setTemplateStatus(1);
+                }else if (ObjectUtils.isNotNull(orderInputTemplate) && "apply".equals(orderInputTemplate.getType())){
+                    item.setTemplateStatus(2);
+                }
+            }
         });
         return vo;
     }

+ 25 - 21
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -827,29 +827,33 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                         && classGradeVo.getPeriodStatus() == 1
                         && (DateUtils.getNowTime() >= goodsUserVo.getServiceStartTime() && DateUtils.getNowTime() <= goodsUserVo.getServiceEndTime())){
                     UserSubscribe userSubscribe = baseMapper.getUserSub(bo.getUserId(),goodsUserVo.getGoodsId());
-                    Long examTime = 0L;
-                    if (ObjectUtils.isNotNull(userSubscribe.getApplySiteEndTime())){
-                        Long examTime1 = userSubscribe.getApplySiteExamTime();
-                        String applySiteEndTime = userSubscribe.getApplySiteEndTime();
-                        String s = DateUtils.timestampToDateFormat(examTime1, "yyyy-MM-dd");
-                        String format = String.format("%s %s", s, applySiteEndTime);
-                        examTime = DateUtils.dateTimeSec("yyyy-MM-dd HH:mm", format);
-                    }
-                    if (examTime > 0 && DateUtils.getNowTime() > examTime && ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
-                        goodsUserVo.setSubscribeSign(1);
-                    }else {
-                        if (ObjectUtils.isNull(userSubscribe)){
+                    if(Validator.isNotEmpty(userSubscribe)){
+                        Long examTime = 0L;
+                        if (ObjectUtils.isNotNull(userSubscribe.getApplySiteEndTime())){
+                            Long examTime1 = userSubscribe.getApplySiteExamTime();
+                            String applySiteEndTime = userSubscribe.getApplySiteEndTime();
+                            String s = DateUtils.timestampToDateFormat(examTime1, "yyyy-MM-dd");
+                            String format = String.format("%s %s", s, applySiteEndTime);
+                            examTime = DateUtils.dateTimeSec("yyyy-MM-dd HH:mm", format);
+                        }
+                        if (examTime > 0 && DateUtils.getNowTime() > examTime && ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
                             goodsUserVo.setSubscribeSign(1);
-                        }else if (userSubscribe.getSubscribeStatus() == 1 && ObjectUtils.isNotNull(userSubscribe.getExamStatus())
-                                && userSubscribe.getExamStatus() == 1
-                                && ObjectUtils.isNull(userSubscribe.getResult())){
-                            goodsUserVo.setSubscribeSign(2);
-                        }else if (userSubscribe.getSubscribeStatus() == 1 && ObjectUtils.isNotNull(userSubscribe.getExamStatus())
-                                && userSubscribe.getExamStatus() == 0){
-                            goodsUserVo.setSubscribeSign(4);
-                        }else if (ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
-                            goodsUserVo.setSubscribeSign(3);
+                        }else {
+                            if (ObjectUtils.isNull(userSubscribe)){
+                                goodsUserVo.setSubscribeSign(1);
+                            }else if (userSubscribe.getSubscribeStatus() == 1 && ObjectUtils.isNotNull(userSubscribe.getExamStatus())
+                                    && userSubscribe.getExamStatus() == 1
+                                    && ObjectUtils.isNull(userSubscribe.getResult())){
+                                goodsUserVo.setSubscribeSign(2);
+                            }else if (userSubscribe.getSubscribeStatus() == 1 && ObjectUtils.isNotNull(userSubscribe.getExamStatus())
+                                    && userSubscribe.getExamStatus() == 0){
+                                goodsUserVo.setSubscribeSign(4);
+                            }else if (ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
+                                goodsUserVo.setSubscribeSign(3);
+                            }
                         }
+                    }else {
+                        goodsUserVo.setSubscribeSign(1);
                     }
                 }
 

+ 35 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassBusinessQuery.java

@@ -0,0 +1,35 @@
+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 2024年06月06日 15:23
+ */
+@Data
+public class ClassBusinessQuery implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    private String eduName;
+
+    private String businessName;
+
+    private String tenantId;
+}

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

@@ -117,4 +117,13 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     @InterceptorIgnore(tenantLine = "true")
     Integer getStudeCountByCodeNoTenant(String sevenCode);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<ClassBusinessVo> getBusinessClassList(ClassBusinessQuery query);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Long getBusinessClassList_COUNT(ClassBusinessQuery query);
+
+    @InterceptorIgnore(tenantLine = "true")
+    ClassGradeVo getClassById(Long gradeId);
 }

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

@@ -119,4 +119,6 @@ public interface IClassGradeService extends IService<ClassGrade> {
     ClassGrade getCodeNoTenant(String officialName, Long tenantId);
 
 	void openOfficialSaveGrade(ClassGradeOpenBo bo);
+
+    List<ClassBusinessVo> getBusinessClassList(ClassBusinessQuery query);
 }

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

@@ -1534,7 +1534,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
     private Integer getClassUserNumAll(Long gradeId) {
         Integer numAll = 0;
-        ClassGradeVo gradeVo = queryById(gradeId);
+        ClassGradeVo gradeVo = baseMapper.getClassById(gradeId);
         if (Validator.isNotEmpty(gradeVo)
                 && Validator.isNotEmpty(gradeVo.getOfficialName()) && Validator.isEmpty(gradeVo.getSevenCode())) {
             ClassGradeQueryBo queryBo = new ClassGradeQueryBo();
@@ -1954,6 +1954,26 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         });
     }
 
+    @Override
+    public List<ClassBusinessVo> getBusinessClassList(ClassBusinessQuery query) {
+        List<ClassBusinessVo> businessVos = baseMapper.getBusinessClassList(query);
+        if (CollectionUtils.isEmpty(businessVos)){
+            return new ArrayList<>();
+        }
+        businessVos.forEach(item -> {
+            if (item.getEduName().contains("继续教育") && (
+                    item.getBusinessName().contains("二级建造师") || item.getBusinessName().contains("二级造价师") || item.getBusinessName().contains("施工现场专业人员")
+                    )) {
+                Integer numAll = getClassUserNumAll(item.getGradeId());
+                item.setStudentNum(numAll);
+            } else {
+                Long num = baseMapper.getClassUserNumByTenant(item.getGradeId());
+                item.setStudentNum(num.intValue());
+            }
+        });
+        return businessVos;
+    }
+
     //创建预开班班级
     private void creatClass(List<Long> goodsIds, Long tenantId, String code) {
         goodsIds.forEach(goodsId -> {

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassBusinessVo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.grade.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月06日 15:23
+ */
+@Data
+public class ClassBusinessVo implements Serializable {
+
+    private Long gradeId;
+
+    private String className;
+
+    private String startTime;
+
+    private String endTime;
+
+    private Integer studentUpper;
+
+    private Integer studentNum;
+
+    private Integer pastDueDay;
+
+    private String eduName;
+
+    private String businessName;
+}

+ 11 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java

@@ -1,9 +1,6 @@
 package com.zhongzheng.modules.order.domain;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -122,4 +119,14 @@ private static final long serialVersionUID=1L;
     /** 商品试卷数量 */
     private Integer examNum;
 
+    /** 完成日期 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long finishTime;
+    /** 公示日期 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long publicityTime;
+    /** 领证日期 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long acquireTime;
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderGoodsMapper.java

@@ -13,6 +13,8 @@ import com.zhongzheng.modules.order.vo.MailOrderVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -88,4 +90,6 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
 
     @InterceptorIgnore(tenantLine = "true")
     int upBatchNumById(OrderGoods orderGoods);
+
+    List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo);
 }

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

@@ -15,6 +15,8 @@ import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderUserGoodsVo;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -143,4 +145,7 @@ public interface IOrderGoodsService extends IService<OrderGoods> {
     Boolean upBatchNumById(OrderGoods orderGoods);
 
     List<OrderUserGoodsVo> listUserSubjectGoodsNew(OrderSubjectUserBuyBo bo);
+
+    List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo);
+
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -80,6 +80,8 @@ import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserExamGoodsQueryBo;
 import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
@@ -994,6 +996,11 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         return allList;
     }
 
+    @Override
+    public List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo) {
+        return baseMapper.listRepByOrderSn(queryBo);
+    }
+
     private boolean checkUnique(Long GoodsId,Long UserId) {
         ShoppingCart info = iShoppingCartService.getOne(new LambdaQueryWrapper<ShoppingCart>()
                 .eq(ShoppingCart::getUserId,UserId).eq(ShoppingCart::getGoodsId,GoodsId).last("limit 1"));

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java

@@ -92,6 +92,8 @@ public class TopOldOrderGoodsAddBo {
     private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
+    @ApiModelProperty("学员性别")
+    private String userSex;
     @ApiModelProperty("学员身份证")
     private String userCard;
     @ApiModelProperty("学员手机号码")

+ 8 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java

@@ -87,6 +87,8 @@ private static final long serialVersionUID=1L;
     private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
+    @ApiModelProperty("学员性别")
+    private String userSex;
     @ApiModelProperty("学员身份证")
     private String userCard;
     @ApiModelProperty("学员手机号码")
@@ -106,6 +108,11 @@ private static final long serialVersionUID=1L;
     private String repairProve;
     @ApiModelProperty("订单课程所属机构")
     private String ownInstitutionId;
-
+    /** 完成日期 */
+    private Long finishTime;
+    /** 公示日期 */
+    private Long publicityTime;
+    /** 领证日期 */
+    private Long acquireTime;
 
 }

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderGoods;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 
 import java.util.List;
 
@@ -16,4 +18,6 @@ import java.util.List;
 public interface TopOldOrderGoodsMapper extends BaseMapper<TopOldOrderGoods> {
 
     List<TopOldOrderGoodsListVo> getListByQuery(TopOldOrderGoodsQuery query);
+
+    List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java

@@ -12,6 +12,7 @@ import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
 import com.zhongzheng.modules.top.order.bo.TopDetailStatisticsTotal;
 import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
 import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepQueryBo;
 import com.zhongzheng.modules.top.order.vo.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -110,4 +111,5 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
 
     List<TopOrderStatisticsTwoVo> getTenantCreateList(TopOrderStatisticsViewBo bo);
 
+    List<TopOldOrderRepVo> queryOrderRepList(TopOrderRepQueryBo bo);
 }

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

@@ -8,6 +8,8 @@ import com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQueryBo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderGoods;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -53,4 +55,6 @@ public interface ITopOldOrderGoodsService extends IService<TopOldOrderGoods> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<TopOldOrderGoodsListVo> getListByQuery(TopOldOrderGoodsQuery query);
+
+    List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo);
 }

+ 23 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java

@@ -8,10 +8,7 @@ import com.zhongzheng.modules.top.financial.vo.*;
 import com.zhongzheng.modules.top.goods.bo.*;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.goods.vo.*;
-import com.zhongzheng.modules.top.order.bo.PayOrderCallBackBo;
-import com.zhongzheng.modules.top.order.bo.TopOldOrderCustomerBo;
-import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
-import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.bo.*;
 import com.zhongzheng.modules.top.order.vo.*;
 
 import java.util.Collection;
@@ -197,4 +194,26 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
 	TopOrderOrgVo getTopOrderGoodsList(TopOldOrderQueryBo bo);
 
     void importOldOrderCustomer(List<TopOldOrderCustomerBo> customerBos);
+
+    List<TopOldOrderRepVo> queryOrderRepList(TopOrderRepQueryBo bo);
+
+	List<TopOldOrderRepDetailVo> getOrderDetailList(TopOrderRepGoodsQueryBo orderSn);
+
+    boolean editOrderRepList(TopOrderRepEditBo editBo);
+
+	boolean editOrderRepDetail(TopOrderRepDetailEditBo editBo);
+
+    List<TopOldOrderQuestionVo> getOrderQuestionList(TopRepQuestionQueryBo queryBo);
+
+	TopOldOrderQuestionVo getOrderQuestionDetail(TopRepQuestionQueryBo queryBo);
+
+	boolean saveOrderQuestion(TopOrderRepQuestionBo bo);
+
+	boolean delOrderQuestion(Long id);
+
+    List<TopOrderBillExportVo> billExportList(TopOrderRepQueryBo queryBo);
+
+	TopQuestionImportVo importOrderQuestion(List<TopOrderQuestionImportBo> questionImportBos);
+
+	boolean batchSaveOrderQuestion(List<TopOrderRepQuestionBo> bos);
 }

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

@@ -16,6 +16,8 @@ import com.zhongzheng.modules.top.goods.mapper.TopOldOrderGoodsMapper;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderGoodsService;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo;
+import com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo;
 import org.springframework.stereotype.Service;
 
 import java.util.Collection;
@@ -117,4 +119,9 @@ public class TopOldOrderGoodsServiceImpl extends ServiceImpl<TopOldOrderGoodsMap
     public List<TopOldOrderGoodsListVo> getListByQuery(TopOldOrderGoodsQuery query) {
         return baseMapper.getListByQuery(query);
     }
+
+    @Override
+    public List<TopOldOrderRepDetailVo> listRepByOrderSn(TopOrderRepGoodsQueryBo queryBo) {
+        return baseMapper.listRepByOrderSn(queryBo);
+    }
 }

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

@@ -21,11 +21,11 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
-import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.TelPhoneUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
-import com.zhongzheng.modules.course.domain.CourseSubject;
-import com.zhongzheng.modules.course.service.ICourseSubjectService;
+import com.zhongzheng.modules.course.domain.*;
+import com.zhongzheng.modules.course.service.*;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.grade.domain.ClassGradeUser;
@@ -60,7 +60,12 @@ import com.zhongzheng.modules.top.goods.mapper.TopOldOrderMapper;
 import com.zhongzheng.modules.top.goods.service.*;
 import com.zhongzheng.modules.top.goods.vo.*;
 import com.zhongzheng.modules.top.order.bo.*;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderQuestion;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
+import com.zhongzheng.modules.top.order.bo.TopOrderRepQueryBo;
+import com.zhongzheng.modules.top.order.service.ITopOldOrderQuestionService;
+import com.zhongzheng.modules.top.order.service.ITopOldOrderReplenishService;
 import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
 import com.zhongzheng.modules.top.order.vo.*;
 import com.zhongzheng.modules.top.order.vo.TopOrderStatisticsTwoVo;
@@ -74,8 +79,9 @@ import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
 import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
 import com.zhongzheng.modules.top.user.service.ITopSysUserService;
 import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserService;
-import org.springframework.beans.BeanUtils;
+import com.zhongzheng.modules.user.service.IUserSubscribeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -84,7 +90,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -107,6 +112,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private IOrderGoodsService orderGoodsService;
 
+    @Autowired
+    private IOrderGoodsRefundService orderGoodsRefundService;
+
     @Autowired
     private ICourseSubjectService courseSubjectService;
 
@@ -161,6 +169,18 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private IGoodsService goodsService;
 
+    @Autowired
+    private IMajorService majorService;
+
+    @Autowired
+    private ICourseEducationTypeService courseEducationTypeService;
+
+    @Autowired
+    private ICourseProjectTypeService courseProjectTypeService;
+
+    @Autowired
+    private ICourseBusinessService courseBusinessService;
+
     @Autowired
     private ITopOldOrderCheckService topOldOrderCheckService;
 
@@ -206,9 +226,6 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private ITopOrderBankPayService topOrderBankPayService;
 
-    @Autowired
-    private IOrderGoodsRefundService orderGoodsRefundService;
-
     @Autowired
     private ITopSysConfigService topConfigService;
 
@@ -233,6 +250,15 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private ISysOldOrgService iSysOldOrgService;
 
+    @Autowired
+    private ITopOldOrderReplenishService topOldOrderReplenishService;
+
+    @Autowired
+    private ITopOldOrderQuestionService topOldOrderQuestionService;
+
+    @Autowired
+    private IUserSubscribeService userSubscribeService;
+
     @Value("${oldOrder.studyRecord}")
     private String ORDER_STUDY;
 
@@ -266,6 +292,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Value("${oldOrder.updateRemark}")
     private String UPDATE_REMARK;
 
+    @Value("${oldOrder.getResitTimes}")
+    private String GET_RESIT_TIMES;
+
     @Value("${shared.statistics}")
     private String SHARED_STATISTICS;
 
@@ -4456,6 +4485,707 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         }
     }
 
+    @Override
+    public List<TopOldOrderRepVo> queryOrderRepList(TopOrderRepQueryBo bo) {
+        //查询视图 v_top_order
+        if (ObjectUtils.isNotNull(bo.getEducationTypeId())) {
+            TopCourseEducationType educationType = topCourseEducationTypeService.getById(bo.getEducationTypeId());
+            if (StringUtils.isNotBlank(educationType.getSchemeName())) {
+                bo.setBusinessFullName(educationType.getSchemeName() + educationType.getEducationName());
+            } else {
+                bo.setBusinessFullName(educationType.getEducationName());
+            }
+        }
+        if (ObjectUtils.isNotNull(bo.getBusinessId())) {
+            String name = topCourseBusinessService.getBusinessFullName(bo.getBusinessId());
+            bo.setBusinessFullName(name);
+        }
+        //过滤C端订单
+        bo.setOrderFrom(1);
+
+        List<TopOldOrderRepVo> orderRepList = baseMapper.queryOrderRepList(bo);
+        if (CollectionUtils.isEmpty(orderRepList)){
+            return new ArrayList<>();
+        }
+        for (TopOldOrderRepVo vo : orderRepList) {
+            //成交数量
+            Integer count = topOrderGoodsService.count(new LambdaQueryWrapper<TopOldOrderGoods>()
+                    .eq(TopOldOrderGoods::getOrderSn, vo.getOrderSn())
+                    .eq(TopOldOrderGoods::getStatus, 1)
+                    .eq(TopOldOrderGoods::getCheckStatus, 1));
+            vo.setConcludeNum(count);
+            //业务层次
+            if (StringUtils.isNotBlank(vo.getBusinessFullName())){
+                String substring = vo.getBusinessFullName().substring(4, 8);
+                String substring2 = vo.getBusinessFullName().substring(8);
+                vo.setBusinessName(substring2);
+                vo.setEduName(substring);
+            }
+            //每月收款明细
+            TopOldOrderReplenish replenish = topOldOrderReplenishService
+                    .getOne(new LambdaQueryWrapper<TopOldOrderReplenish>()
+                    .eq(TopOldOrderReplenish::getOrderSn, vo.getOrderSn())
+                    .eq(TopOldOrderReplenish::getStatus, 1)
+                    .last("limit 1"));
+            if (ObjectUtils.isNotNull(replenish)){
+                BigDecimal received = BigDecimal.ZERO;
+                if (StringUtils.isNotBlank(replenish.getProceedsJson())){
+                    String proceedsJson = replenish.getProceedsJson();
+                    Map map = JSON.parseObject(proceedsJson, Map.class);
+                    vo.setProceedsJsonMap((Map<String,BigDecimal>)map);
+                    //总收款
+                    for (Object value : map.values()) {
+                        received = received.add(new BigDecimal(value.toString()));
+                    }
+                }
+                //已退
+                BigDecimal refunded = new BigDecimal("0.00");
+                TopOldOrder orderBySn = baseMapper.getOrderBySn(vo.getOrderSn());
+                if (orderBySn.getOrderFrom() == 1 || orderBySn.getOrderFrom() == 4){
+                    //新系统订单
+                    List<OrderGoodsRefund> list = orderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                            .eq(OrderGoodsRefund::getOrderSn, orderBySn.getOrderSn())
+                            .eq(OrderGoodsRefund::getStatus, 1)
+                            .eq(OrderGoodsRefund::getPeriodStatus, 3));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        refunded = list.stream().map(OrderGoodsRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    }
+                }else {
+                    List<TopOldOrderRefund> list = topOldOrderRefundService.list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                            .eq(TopOldOrderRefund::getOrderSn, orderBySn.getOrderSn())
+                            .eq(TopOldOrderRefund::getStatus, 1)
+                            .eq(TopOldOrderRefund::getPeriodStatus, 3));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        refunded = list.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    }
+                }
+                vo.setRefunded(refunded);
+                //实际
+                BigDecimal practical = vo.getPriceTotal().subtract(refunded);
+                vo.setPractical(practical);
+                vo.setReceived(received);
+                vo.setUncollected(practical.subtract(received));
+                vo.setProceedsRecord(replenish.getProceedsRecord());
+                //发票
+                List<TopNuoMplatformLog> fromLogs = topNuoMplatformLogService
+                        .list(new LambdaQueryWrapper<TopNuoMplatformLog>()
+                                .like(TopNuoMplatformLog::getOrderNoList, vo.getOrderSn())
+                                .eq(TopNuoMplatformLog::getStatus, 2));
+                if (CollectionUtils.isNotEmpty(fromLogs)){
+                    for (TopNuoMplatformLog fromLog : fromLogs) {
+                        OrderInvoiceHostBo invoiceBo = JSONObject.parseObject(fromLog.getContent(), OrderInvoiceHostBo.class);
+                        if (ObjectUtils.isNotNull(invoiceBo) && ObjectUtils.isNotNull(invoiceBo.getOrder())){
+                            OrderInvoiceBo order = invoiceBo.getOrder();
+                            vo.setInvoiceApplyTime(order.getInvoiceDate());
+                            vo.setInvoiceType(
+                                    StringUtils.isNotBlank(order.getInvoiceLine()) && order.getInvoiceLine().equals("bs")?"专票":"普票"
+                            );
+                        }
+                    }
+                }
+                vo.setIntegral(replenish.getIntegral());
+                vo.setProceedsDate(replenish.getProceedsDate());
+                vo.setProceedsCheckDate(replenish.getProceedsCheckDate());
+                vo.setProceedsChange(replenish.getProceedsChange());
+                vo.setCost(replenish.getCost());
+            }else {
+                //已退
+                BigDecimal refunded = new BigDecimal("0.00");
+                TopOldOrder orderBySn = baseMapper.getOrderBySn(vo.getOrderSn());
+                if (orderBySn.getOrderFrom() == 1 || orderBySn.getOrderFrom() == 4){
+                    //新系统订单
+                    List<OrderGoodsRefund> list = orderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                            .eq(OrderGoodsRefund::getOrderSn, orderBySn.getOrderSn())
+                            .eq(OrderGoodsRefund::getStatus, 1)
+                            .eq(OrderGoodsRefund::getPeriodStatus, 3));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        refunded = list.stream().map(OrderGoodsRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    }
+                }else {
+                    List<TopOldOrderRefund> list = topOldOrderRefundService.list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                            .eq(TopOldOrderRefund::getOrderSn, orderBySn.getOrderSn())
+                            .eq(TopOldOrderRefund::getStatus, 1)
+                            .eq(TopOldOrderRefund::getPeriodStatus, 3));
+                    if (CollectionUtils.isNotEmpty(list)){
+                        refunded = list.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    }
+                }
+                vo.setRefunded(refunded);
+                //实际
+                BigDecimal practical = vo.getPriceTotal().subtract(refunded);
+                vo.setUncollected(practical);
+                vo.setReceived(BigDecimal.ZERO);
+                vo.setPractical(practical);
+                //发票
+                List<TopNuoMplatformLog> fromLogs = topNuoMplatformLogService
+                        .list(new LambdaQueryWrapper<TopNuoMplatformLog>()
+                                .like(TopNuoMplatformLog::getOrderNoList, vo.getOrderSn())
+                                .eq(TopNuoMplatformLog::getStatus, 2));
+                if (CollectionUtils.isNotEmpty(fromLogs)){
+                    for (TopNuoMplatformLog fromLog : fromLogs) {
+                        OrderInvoiceHostBo invoiceBo = JSONObject.parseObject(fromLog.getContent(), OrderInvoiceHostBo.class);
+                        if (ObjectUtils.isNotNull(invoiceBo) && ObjectUtils.isNotNull(invoiceBo.getOrder())){
+                            OrderInvoiceBo order = invoiceBo.getOrder();
+                            vo.setInvoiceApplyTime(order.getInvoiceDate());
+                            vo.setInvoiceType(
+                                    StringUtils.isNotBlank(order.getInvoiceLine()) && order.getInvoiceLine().equals("bs")?"专票":"普票"
+                            );
+                        }
+                    }
+                }
+            }
+        }
+        return orderRepList;
+    }
+
+    @Override
+    public List<TopOldOrderRepDetailVo> getOrderDetailList(TopOrderRepGoodsQueryBo queryBo) {
+        List<TopOldOrderRepDetailVo> list;
+        if (queryBo.getOrderFrom() == 1) {
+            //新系统订单
+            list = orderGoodsService.listRepByOrderSn(queryBo);
+            if (CollectionUtils.isNotEmpty(list)) {
+                for (TopOldOrderRepDetailVo item : list) {
+                    item.setApplyNum(0);
+                    item.setUserCard(EncryptHandler.decryptTwo(item.getUserCard()));
+                    //补考次数
+                    int count = userSubscribeService.count(new LambdaQueryWrapper<UserSubscribe>()
+                            .eq(UserSubscribe::getOrderGoodsId, item.getOrderGoodsId())
+                            .eq(UserSubscribe::getSubscribeStatus, 1)
+                            .ne(UserSubscribe::getExamStatus, 0));
+                    if (count > 0){
+                        item.setApplyNum(count - 1);
+                    }
+                    List<TopOldOrderQuestion> questions = topOldOrderQuestionService
+                            .list(new LambdaQueryWrapper<TopOldOrderQuestion>()
+                            .eq(TopOldOrderQuestion::getOrderSn, item.getOrderSn())
+                            .eq(TopOldOrderQuestion::getOrderGoodsId, item.getOrderGoodsId())
+                            .eq(TopOldOrderQuestion::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(questions)){
+                        item.setQuestionRecord(questions.size());
+                    }
+                }
+            }
+        } else {
+            //旧系统订单
+            list = topOrderGoodsService.listRepByOrderSn(queryBo);
+            if (CollectionUtils.isNotEmpty(list)) {
+                List<TopOrderRequestVo> requestVos = new ArrayList<>();
+                if (queryBo.getOrderBase() != 1){
+                    List<TopOrderRequestDetailBo> collect = list.stream().map(x -> {
+                        TopOrderRequestDetailBo requestBo = new TopOrderRequestDetailBo();
+                        requestBo.setIdNum(EncryptHandler.decryptTwo(x.getUserCard()));
+                        requestBo.setMajorName(x.getMajorName());
+                        return requestBo;
+                    }).collect(Collectors.toList());
+                    //旧系统查询补考次数
+                    TopOrderRequestBo requestBo = new TopOrderRequestBo();
+                    Long nowTime = DateUtils.getNowTime();
+                    String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
+                    requestBo.setSign(sign);
+                    requestBo.setStamp(nowTime);
+                    requestBo.setQueryList(collect);
+                    String respone = "";
+                    try {
+                        respone = HttpUtils.sendPost(GET_RESIT_TIMES, JSONObject.parseObject(JSON.toJSONString(requestBo)));
+                        if (!respone.contains("\"Status\":true")) {
+                            throw new CustomException("旧系统查询补考次数接口请求错误!");
+                        }
+                        JSONObject jsonObject = JSONObject.parseObject(respone);
+                        if (ObjectUtils.isNotNull(jsonObject) && ObjectUtils.isNotNull(jsonObject.get("Data"))){
+                            requestVos = JSONArray.parseArray(JSONArray.toJSONString(jsonObject.get("Data")),TopOrderRequestVo.class);
+                        }
+                    } catch (Exception e) {
+                        log.error("旧系统修改备注接口请求错误" + respone);
+                        throw new CustomException("旧系统修改备注接口请求错误");
+                    }
+                }
+                for (TopOldOrderRepDetailVo item : list) {
+                    item.setUserCard(EncryptHandler.decryptTwo(item.getUserCard()));
+                    item.setApplyNum(0);
+                    //补考次数
+                    if (queryBo.getOrderBase() == 1){
+                        TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, queryBo.getOrderSn()));
+                        User user = userService.getByCardNoTenant(EncryptHandler.decryptTwo(item.getUserCard()));
+                        Order orderOne = orderService.getOne(new LambdaQueryWrapper<Order>()
+                                .eq(Order::getInputOrderSn, order.getInputOrderSn())
+                                .eq(Order::getUserId,user.getUserId())
+                                .last("limit 1"));
+                        if (ObjectUtils.isNotNull(orderOne)){
+                            OrderGoods orderGoodsOne = orderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>()
+                                    .eq(OrderGoods::getOrderSn, orderOne.getOrderSn())
+                                    .eq(OrderGoods::getGoodsId, item.getGoodsId())
+                                    .ne(OrderGoods::getRefundStatus,2)
+                                    .ne(OrderGoods::getPayStatus,1)
+                                    .last("limit 1"));
+                            if (ObjectUtils.isNotNull(orderGoodsOne)){
+                                int count = userSubscribeService.count(new LambdaQueryWrapper<UserSubscribe>()
+                                        .eq(UserSubscribe::getOrderGoodsId, orderGoodsOne.getOrderGoodsId())
+                                        .eq(UserSubscribe::getSubscribeStatus, 1)
+                                        .ne(UserSubscribe::getExamStatus, 0));
+                                if (count > 0){
+                                    item.setApplyNum(count - 1);
+                                }
+                            }
+                        }
+                    }else if (CollectionUtils.isNotEmpty(requestVos)){
+                        TopOrderRequestVo topOrderRequestVo = requestVos.stream()
+                                .filter(x -> x.getIdNum().equals(item.getUserCard()) && x.getMajorName().equals(item.getMajorName())).findFirst().orElse(null);
+                        if (ObjectUtils.isNotNull(topOrderRequestVo)){
+                            item.setApplyNum(topOrderRequestVo.getCount());
+                        }
+                    }
+                    List<TopOldOrderQuestion> questions = topOldOrderQuestionService
+                            .list(new LambdaQueryWrapper<TopOldOrderQuestion>()
+                                    .eq(TopOldOrderQuestion::getOrderSn, item.getOrderSn())
+                                    .eq(TopOldOrderQuestion::getOrderGoodsId, item.getOrderGoodsId())
+                                    .eq(TopOldOrderQuestion::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(questions)){
+                        item.setQuestionRecord(questions.size());
+                    }
+                    //退款状态
+                    List<TopOldOrderRefund> oldOrderRefunds = topOldOrderRefundService
+                            .list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                                    .eq(TopOldOrderRefund::getOrderSn, item.getOrderSn())
+                                    .eq(TopOldOrderRefund::getOrderGoodsId, item.getOrderGoodsId())
+                                    .eq(TopOldOrderRefund::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(oldOrderRefunds) &&
+                            oldOrderRefunds.stream().anyMatch(x -> x.getPeriodStatus() == 3)){
+                        Long refundTime = oldOrderRefunds.stream().filter(x -> x.getPeriodStatus() == 3).findFirst().get().getRefundTime();
+                        item.setRefundStatus(2);
+                        item.setRefundTime(refundTime);
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public boolean editOrderRepList(TopOrderRepEditBo editBo) {
+        TopOldOrder orderBySn = baseMapper.getOrderBySn(editBo.getOrderSn());
+        if (ObjectUtils.isNull(orderBySn)){
+            throw new CustomException("订单号不存在!");
+        }
+        //已退
+        BigDecimal refunded = new BigDecimal("0.00");
+        if (orderBySn.getOrderFrom() == 1 || orderBySn.getOrderFrom() == 4){
+            //新系统订单
+            List<OrderGoodsRefund> list = orderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                    .eq(OrderGoodsRefund::getOrderSn, orderBySn.getOrderSn())
+                    .eq(OrderGoodsRefund::getStatus, 1)
+                    .eq(OrderGoodsRefund::getPeriodStatus, 3));
+            if (CollectionUtils.isNotEmpty(list)){
+                refunded = list.stream().map(OrderGoodsRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+        }else {
+            List<TopOldOrderRefund> list = topOldOrderRefundService.list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                    .eq(TopOldOrderRefund::getOrderSn, orderBySn.getOrderSn())
+                    .eq(TopOldOrderRefund::getStatus, 1)
+                    .eq(TopOldOrderRefund::getPeriodStatus, 3));
+            if (CollectionUtils.isNotEmpty(list)){
+                refunded = list.stream().map(TopOldOrderRefund::getRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+        }
+
+        TopOldOrderReplenish replenish = topOldOrderReplenishService
+                .getOne(new LambdaQueryWrapper<TopOldOrderReplenish>()
+                .eq(TopOldOrderReplenish::getOrderSn, editBo.getOrderSn())
+                .last("limit 1"));
+        if (ObjectUtils.isNull(replenish)){
+            //新增
+            TopOldOrderReplenish orderReplenish = new TopOldOrderReplenish();
+            orderReplenish.setOrderSn(editBo.getOrderSn());
+            orderReplenish.setOrderFrom(orderBySn.getOrderFrom());
+            orderReplenish.setProceedsRecord(editBo.getProceedsRecord());
+            orderReplenish.setIntegral(editBo.getIntegral());
+            orderReplenish.setProceedsDate(editBo.getProceedsDate());
+            orderReplenish.setProceedsCheckDate(editBo.getProceedsCheckDate());
+            orderReplenish.setProceedsChange(editBo.getProceedsChange());
+            orderReplenish.setCost(editBo.getCost());
+            //每月收款记录
+            if (CollectionUtils.isNotEmpty(editBo.getProceedsJson())){
+                //总收款
+                BigDecimal reduce = editBo.getProceedsJson().values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+                //未收
+                orderReplenish.setOrderResidue(orderBySn.getOrderPrice().subtract(reduce).subtract(refunded));
+                orderReplenish.setProceedsJson(JSON.toJSONString(editBo.getProceedsJson()));
+            }else {
+                //未收
+                orderReplenish.setOrderResidue(orderBySn.getOrderPrice().subtract(refunded));
+            }
+            orderReplenish.setStatus(1);
+            orderReplenish.setCreateTime(DateUtils.getNowTime());
+            orderReplenish.setUpdateTime(DateUtils.getNowTime());
+            topOldOrderReplenishService.save(orderReplenish);
+        }else {
+            //修改
+            replenish.setOrderSn(editBo.getOrderSn());
+            replenish.setOrderFrom(orderBySn.getOrderFrom());
+            replenish.setProceedsRecord(editBo.getProceedsRecord());
+            replenish.setIntegral(editBo.getIntegral());
+            replenish.setProceedsDate(editBo.getProceedsDate());
+            replenish.setProceedsCheckDate(editBo.getProceedsCheckDate());
+            replenish.setProceedsChange(editBo.getProceedsChange());
+            replenish.setCost(editBo.getCost());
+            //每月收款记录
+            if (CollectionUtils.isNotEmpty(editBo.getProceedsJson())){
+                if (StringUtils.isNotBlank(replenish.getProceedsJson())){
+                    Map map = JSON.parseObject(replenish.getProceedsJson(), Map.class);
+                    editBo.getProceedsJson().forEach((k,v) -> {
+                        map.put(k,v);
+                    });
+                    //总收款
+                    BigDecimal reduce = new BigDecimal("0.00");
+                    for (Object value : map.values()) {
+                        reduce = reduce.add(new BigDecimal(value.toString()));
+                    }
+                    //未收
+                    replenish.setOrderResidue(orderBySn.getOrderPrice().subtract(reduce).subtract(refunded));
+                    replenish.setProceedsJson(JSON.toJSONString(map));
+                }else {
+                    //总收款
+                    BigDecimal reduce = editBo.getProceedsJson().values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+                    //未收
+                    replenish.setOrderResidue(orderBySn.getOrderPrice().subtract(reduce).subtract(refunded));
+                    replenish.setProceedsJson(JSON.toJSONString(editBo.getProceedsJson()));
+                }
+            }
+
+            if (ObjectUtils.isNull(replenish.getOrderResidue())){
+                replenish.setOrderResidue(orderBySn.getOrderPrice());
+            }
+            replenish.setUpdateTime(DateUtils.getNowTime());
+            topOldOrderReplenishService.updateById(replenish);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean editOrderRepDetail(TopOrderRepDetailEditBo editBo) {
+        TopOldOrder oldOrder = baseMapper.getOrderBySn(editBo.getOrderSn());
+        if (ObjectUtils.isNull(oldOrder)){
+            throw new CustomException("订单查询有误");
+        }
+        if (oldOrder.getOrderFrom() == 1){
+            orderGoodsService.update(new LambdaUpdateWrapper<OrderGoods>()
+                    .eq(OrderGoods::getOrderSn,editBo.getOrderSn())
+                    .eq(OrderGoods::getOrderGoodsId,editBo.getOrderGoodsId())
+                    .set(OrderGoods::getFinishTime,editBo.getFinishTime())
+                    .set(OrderGoods::getAcquireTime,editBo.getAcquireTime())
+                    .set(OrderGoods::getPublicityTime,editBo.getPublicityTime())
+            );
+        }else {
+            topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
+                    .eq(TopOldOrderGoods::getOrderSn,editBo.getOrderSn())
+                    .eq(TopOldOrderGoods::getOrderGoodsId,editBo.getOrderGoodsId())
+                    .set(TopOldOrderGoods::getFinishTime,editBo.getFinishTime())
+                    .set(TopOldOrderGoods::getAcquireTime,editBo.getAcquireTime())
+                    .set(TopOldOrderGoods::getPublicityTime,editBo.getPublicityTime())
+            );
+
+        }
+        return true;
+    }
+
+    @Override
+    public List<TopOldOrderQuestionVo> getOrderQuestionList(TopRepQuestionQueryBo queryBo) {
+        List<TopOldOrderQuestion> questions = topOldOrderQuestionService
+                .list(new LambdaQueryWrapper<TopOldOrderQuestion>()
+                .eq(TopOldOrderQuestion::getOrderSn, queryBo.getOrderSn())
+                .eq(TopOldOrderQuestion::getOrderGoodsId, queryBo.getOrderGoodsId())
+                .eq(TopOldOrderQuestion::getStatus, 1));
+        if (CollectionUtils.isEmpty(questions)){
+            return new ArrayList<>();
+        }
+        TopOldOrder orderBySn = baseMapper.getOrderBySn(queryBo.getOrderSn());
+        String majorName = "";
+        String eduName = "";
+        String businessName = "";
+        String userName = "";
+        String userCard = "";
+        if (orderBySn.getOrderFrom() == 1){
+            OrderGoods orderGoods = orderGoodsService.getById(queryBo.getOrderGoodsId());
+            Goods goods = goodsService.getById(orderGoods.getGoodsId());
+            Major major = majorService.getById(goods.getMajorId());
+            majorName = major.getCategoryName();
+            CourseEducationType educationType = courseEducationTypeService.getById(goods.getEducationTypeId());
+            eduName = educationType.getEducationName();
+            CourseProjectType projectType = courseProjectTypeService.getById(goods.getProjectId());
+            CourseBusiness business = courseBusinessService.getById(goods.getBusinessId());
+            businessName = business.getBusinessName()+projectType.getProjectName();
+            Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, queryBo.getOrderSn()));
+            User user = userService.getById(order.getUserId());
+            userCard = EncryptHandler.decryptTwo(user.getIdCard());
+            userName = user.getRealname();
+        }else {
+            TopOldOrderGoods orderGoods = topOrderGoodsService.getById(queryBo.getOrderGoodsId());
+            majorName = orderGoods.getMajorName();
+            String businessFullName = orderGoods.getBusinessFullName();
+            eduName = businessFullName.substring(4,8);
+            businessName = businessFullName.substring(8);
+            userCard = EncryptHandler.decryptTwo(orderGoods.getUserCard());
+            userName = orderGoods.getUserName();
+        }
+
+        List<TopOldOrderQuestionVo> resultList = new ArrayList<>();
+        for (TopOldOrderQuestion s : questions) {
+            TopOldOrderQuestionVo questionVo = new TopOldOrderQuestionVo();
+            questionVo.setId(s.getId());
+            questionVo.setUserName(userName);
+            questionVo.setUserCard(userCard);
+            questionVo.setBusinessName(businessName);
+            questionVo.setEduName(eduName);
+            questionVo.setOrderSn(s.getOrderSn());
+            questionVo.setOrderGoodsId(s.getOrderGoodsId());
+            questionVo.setMajorName(majorName);
+            questionVo.setOpenDate(s.getOpenDate());
+            questionVo.setRemark(s.getRemark());
+            questionVo.setSign(s.getSign());
+            resultList.add(questionVo);
+        }
+        return resultList;
+    }
+
+    @Override
+    public TopOldOrderQuestionVo getOrderQuestionDetail(TopRepQuestionQueryBo queryBo) {
+        TopOldOrderQuestionVo vo = new TopOldOrderQuestionVo();
+        TopOldOrder orderBySn = baseMapper.getOrderBySn(queryBo.getOrderSn());
+        String majorName = "";
+        String eduName = "";
+        String businessName = "";
+        String userName = "";
+        String userCard = "";
+        if (orderBySn.getOrderFrom() == 1){
+            OrderGoods orderGoods = orderGoodsService.getById(queryBo.getOrderGoodsId());
+            Goods goods = goodsService.getById(orderGoods.getGoodsId());
+            Major major = majorService.getById(goods.getMajorId());
+            majorName = major.getCategoryName();
+            CourseEducationType educationType = courseEducationTypeService.getById(goods.getEducationTypeId());
+            eduName = educationType.getEducationName();
+            CourseProjectType projectType = courseProjectTypeService.getById(goods.getProjectId());
+            CourseBusiness business = courseBusinessService.getById(goods.getBusinessId());
+            businessName = business.getBusinessName()+projectType.getProjectName();
+            Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, queryBo.getOrderSn()));
+            User user = userService.getById(order.getUserId());
+            userName = user.getRealname();
+            userCard = EncryptHandler.decryptTwo(user.getIdCard());
+        }else {
+            TopOldOrderGoods orderGoods = topOrderGoodsService.getById(queryBo.getOrderGoodsId());
+            majorName = orderGoods.getMajorName();
+            String businessFullName = orderGoods.getBusinessFullName();
+            eduName = businessFullName.substring(4,8);
+            businessName = businessFullName.substring(8);
+            userName = orderGoods.getUserName();
+            userCard = EncryptHandler.decryptTwo(orderGoods.getUserCard());
+        }
+        vo.setUserName(userName);
+        vo.setUserCard(userCard);
+        vo.setBusinessName(businessName);
+        vo.setEduName(eduName);
+        vo.setOrderSn(queryBo.getOrderSn());
+        vo.setOrderGoodsId(queryBo.getOrderGoodsId());
+        vo.setMajorName(majorName);
+        return vo;
+    }
+
+    @Override
+    public boolean saveOrderQuestion(TopOrderRepQuestionBo bo) {
+        TopOldOrderQuestion question = BeanUtil.toBean(bo, TopOldOrderQuestion.class);
+        question.setStatus(1);
+        question.setCreateTime(DateUtils.getNowTime());
+        question.setUpdateTime(DateUtils.getNowTime());
+        return topOldOrderQuestionService.save(question);
+    }
+
+    @Override
+    public boolean delOrderQuestion(Long id) {
+        TopOldOrderQuestion orderQuestion = topOldOrderQuestionService.getById(id);
+        if (ObjectUtils.isNull(orderQuestion)){
+            throw new CustomException("数据有误!");
+        }
+        orderQuestion.setStatus(0);
+        return topOldOrderQuestionService.updateById(orderQuestion);
+    }
+
+    @Override
+    public List<TopOrderBillExportVo> billExportList(TopOrderRepQueryBo bo) {
+        //查询视图 v_top_order
+        if (ObjectUtils.isNotNull(bo.getEducationTypeId())) {
+            TopCourseEducationType educationType = topCourseEducationTypeService.getById(bo.getEducationTypeId());
+            if (StringUtils.isNotBlank(educationType.getSchemeName())) {
+                bo.setBusinessFullName(educationType.getSchemeName() + educationType.getEducationName());
+            } else {
+                bo.setBusinessFullName(educationType.getEducationName());
+            }
+        }
+        if (ObjectUtils.isNotNull(bo.getBusinessId())) {
+            String name = topCourseBusinessService.getBusinessFullName(bo.getBusinessId());
+            bo.setBusinessFullName(name);
+        }
+        //过滤C端订单
+        bo.setOrderFrom(1);
+        List<TopOldOrderRepVo> orderRepList = baseMapper.queryOrderRepList(bo);
+        if (CollectionUtils.isEmpty(orderRepList)){
+            return new ArrayList<>();
+        }
+        List<TopOrderBillExportVo> result = new ArrayList<>();
+        for (TopOldOrderRepVo repVo : orderRepList) {
+            TopOldOrderReplenish replenish = topOldOrderReplenishService
+                    .getOne(new LambdaQueryWrapper<TopOldOrderReplenish>()
+                    .eq(TopOldOrderReplenish::getOrderSn, repVo.getOrderSn())
+                    .eq(TopOldOrderReplenish::getStatus, 1)
+                    .last("limit 1"));
+            if (ObjectUtils.isNotNull(replenish) && replenish.getOrderResidue().compareTo(BigDecimal.ZERO) <= 0){
+                //已完成收款
+                continue;
+            }
+            //订单学员信息
+            List<TopOldOrderGoods> orderGoods = topOrderGoodsService
+                    .list(new LambdaQueryWrapper<TopOldOrderGoods>()
+                    .eq(TopOldOrderGoods::getOrderSn, repVo.getOrderSn())
+                    .eq(TopOldOrderGoods::getCheckStatus, 1)
+                    .eq(TopOldOrderGoods::getStatus, 1));
+            if (CollectionUtils.isEmpty(orderGoods)){
+                continue;
+            }
+            List<TopOrderBillExportVo> collect = orderGoods.stream().map(item -> {
+                TopOrderBillExportVo vo = new TopOrderBillExportVo();
+                vo.setCreateNo(repVo.getCreateNo());
+                vo.setPurchaseOrg(repVo.getPurchaseOrg());
+                String businessFullName = item.getBusinessFullName();
+                vo.setEduName(businessFullName.substring(4, 8));
+                vo.setBusinessName(businessFullName.substring(8));
+                vo.setUserName(item.getUserName());
+                vo.setUserCard(hideIDCard(EncryptHandler.decryptTwo(item.getUserCard())));
+                vo.setMajorName(item.getMajorName());
+                vo.setOrderTime(DateUtils.timestampToDateFormat(repVo.getOrderTime(), "yyyy/MM/dd"));
+                vo.setUnitPrice(item.getGoodsRealPrice().toString());
+                return vo;
+            }).collect(Collectors.toList());
+            result.addAll(collect);
+        }
+        if (CollectionUtils.isEmpty(result)){
+            return new ArrayList<>();
+        }
+        List<TopOrderBillExportVo> list = new ArrayList<>();
+        Map<String, List<TopOrderBillExportVo>> collect = result.stream().filter(x -> StringUtils.isNotBlank(x.getCreateNo())).collect(Collectors.groupingBy(TopOrderBillExportVo::getCreateNo));
+        collect.forEach((k,v) -> {
+            for (int i = 0; i < v.size(); i++) {
+                if (i == v.size() - 1){
+                    //最后一个
+                    TopOrderBillExportVo vo = v.get(i);
+                    vo.setOrderNum(v.size()+"");
+                    BigDecimal reduce = v.stream().map(x -> new BigDecimal(x.getUnitPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    vo.setPriceTotal(reduce.toString());
+                }
+            }
+            list.addAll(v);
+        });
+        return list;
+    }
+
+    @Override
+    public TopQuestionImportVo importOrderQuestion(List<TopOrderQuestionImportBo> questionImportBos) {
+        TopQuestionImportVo vo = new TopQuestionImportVo();
+        //正确的数据集合
+        List<TopOldOrderQuestionVo> questionVos = new ArrayList<>();
+
+        Map<String, List<TopOrderQuestionImportBo>> collect =
+                questionImportBos.stream().collect(Collectors.groupingBy(TopOrderQuestionImportBo::getCreateNo));
+        collect.forEach((k,v) -> {
+            TopOldOrder oldOrder = topOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>()
+                    .eq(TopOldOrder::getCreateNo, k)
+                    .last("limit 1"));
+            if (ObjectUtils.isNull(oldOrder)){
+                return;
+            }
+            List<TopOldOrderGoods> list = topOrderGoodsService
+                    .list(new LambdaQueryWrapper<TopOldOrderGoods>()
+                    .eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn())
+                    .eq(TopOldOrderGoods::getStatus, 1));
+            if (CollectionUtils.isEmpty(list)){
+                return;
+            }
+            for (TopOldOrderGoods orderGoods : list) {
+                String businessFullName = orderGoods.getBusinessFullName();
+                if (!businessFullName.contains("考前培训") && !businessFullName.contains("施工现场专业人员")){
+                    continue;
+                }
+                List<TopOldOrderQuestion> questionList = topOldOrderQuestionService
+                        .list(new LambdaQueryWrapper<TopOldOrderQuestion>()
+                        .eq(TopOldOrderQuestion::getOrderSn, oldOrder.getOrderSn())
+                        .eq(TopOldOrderQuestion::getOrderGoodsId, orderGoods.getOrderGoodsId())
+                        .eq(TopOldOrderQuestion::getStatus, 1));
+                v.forEach(item -> {
+                    if (item.getUserName().equals(orderGoods.getUserName())
+                            && item.getUserCard().equals(EncryptHandler.decryptTwo(orderGoods.getUserCard())) && item.getMajorName().equals(orderGoods.getMajorName())){
+                        //判断是否已开通
+                        if (questionList.stream().anyMatch(x -> x.getOpenDate().equals(DateUtils.dateTimeSec("yyyy/MM/dd",item.getOpenDate())))){
+                            return;
+                        }
+                        //正确的
+                        TopOldOrderQuestionVo questionVo = new TopOldOrderQuestionVo();
+                        questionVo.setOrderSn(orderGoods.getOrderSn());
+                        questionVo.setOrderGoodsId(orderGoods.getOrderGoodsId());
+                        questionVo.setCreateNo(item.getCreateNo());
+                        questionVo.setOpenDate(DateUtils.dateTimeSec("yyyy/MM/dd", item.getOpenDate()));
+                        questionVo.setSign(item.getSign());
+                        questionVo.setRemark(item.getRemark());
+                        questionVo.setUserName(item.getUserName());
+                        questionVo.setUserCard(item.getUserCard());
+                        questionVo.setMajorName(item.getMajorName());
+                        questionVo.setEduName("考前培训");
+                        questionVo.setBusinessName("施工现场专业人员");
+                        questionVo.setCheck(1);
+                        questionVos.add(questionVo);
+                    }
+                });
+            }
+        });
+        List<TopOldOrderQuestionVo> collect1 = questionImportBos.stream().map(item -> {
+            if (CollectionUtils.isNotEmpty(questionVos)) {
+                TopOldOrderQuestionVo questionVo = questionVos.stream().filter(x -> x.getUserName().equals(item.getUserName())
+                        && x.getUserCard().equals(EncryptHandler.decryptTwo(item.getUserCard()))
+                        && x.getMajorName().equals(item.getMajorName())
+                        && x.getCreateNo().equals(item.getCreateNo())).findFirst().orElse(null);
+                if (ObjectUtils.isNotNull(questionVo)) {
+                    return questionVo;
+                }
+            }
+            TopOldOrderQuestionVo questionVo = BeanUtil.toBean(item, TopOldOrderQuestionVo.class);
+            questionVo.setOpenDate(DateUtils.dateTimeSec("yyyy/MM/dd", item.getOpenDate()));
+            questionVo.setCheck(2);
+            return questionVo;
+        }).collect(Collectors.toList());
+        //正确的数量
+        Long count = collect1.stream().filter(x -> ObjectUtils.isNotNull(x.getCheck()) && x.getCheck() == 1).count();
+        vo.setTotal(collect1.size());
+        vo.setErrorNum(collect1.size() - count.intValue());
+        vo.setCorrectNum(count.intValue());
+        vo.setDataList(collect1);
+        return vo;
+    }
+
+    @Override
+    public boolean batchSaveOrderQuestion(List<TopOrderRepQuestionBo> bos) {
+        List<TopOldOrderQuestion> collect = bos.stream().map(item -> {
+            TopOldOrderQuestion question = BeanUtil.toBean(item, TopOldOrderQuestion.class);
+            question.setStatus(1);
+            question.setCreateTime(DateUtils.getNowTime());
+            question.setUpdateTime(DateUtils.getNowTime());
+            return question;
+        }).collect(Collectors.toList());
+        return topOldOrderQuestionService.saveBatch(collect);
+    }
+
+    private String hideIDCard(String idCard) {
+        if (idCard == null || idCard.length() != 18) {
+            return idCard;
+        }
+        return idCard.substring(0, 6) + "******" + idCard.substring(14);
+    }
+
     private List<Long> getDayTime(Long startTime,Long endTime){
         List<Long> tiemList = new ArrayList<>();
         Long zeroTime = DateUtils.getScheduleTimeZeroTime(startTime);

+ 48 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderBillExportVo.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.modules.top.order.bo;
+
+
+import com.zhongzheng.common.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月04日 15:00
+ */
+@Data
+public class TopOrderBillExportVo implements Serializable {
+
+    @Excel(name = "业务单号")
+    private String createNo;
+
+    @Excel(name = "所属客户")
+    private String purchaseOrg;
+
+    @Excel(name = "教育类型")
+    private String eduName;
+
+    @Excel(name = "业务层次")
+    private String businessName;
+
+    @Excel(name = "姓名")
+    private String userName;
+
+    @Excel(name = "身份证号码")
+    private String userCard;
+
+    @Excel(name = "专业")
+    private String majorName;
+
+    @Excel(name = "申请日期")
+    private String orderTime;
+
+    @Excel(name = "单价")
+    private String unitPrice;
+
+    @Excel(name = "数量")
+    private String orderNum;
+
+    @Excel(name = "金额")
+    private String priceTotal;
+}

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderQuestionImportBo.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年06月04日 15:00
+ */
+@Data
+public class TopOrderQuestionImportBo implements Serializable {
+
+    @Excel(name = "业务号")
+    private String createNo;
+
+    @Excel(name = "标签")
+    private String sign;
+
+    @Excel(name = "姓名")
+    private String userName;
+
+    @Excel(name = "身份证号码")
+    private String userCard;
+
+    @Excel(name = "专业")
+    private String majorName;
+
+    @Excel(name = "备注")
+    private String remark;
+
+    @Excel(name = "日期")
+    private String openDate;
+
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepDetailEditBo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRepDetailEditBo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+
+    @ApiModelProperty("完成日期")
+    private Long finishTime;
+
+    @ApiModelProperty("公示日期")
+    private Long publicityTime;
+
+    @ApiModelProperty("领证日期")
+    private Long acquireTime;
+}

+ 35 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepEditBo.java

@@ -0,0 +1,35 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRepEditBo implements Serializable {
+
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("每月收款记录")
+    private Map<String, BigDecimal> proceedsJson;
+    @ApiModelProperty("收款记录")
+    private String proceedsRecord;
+    @ApiModelProperty("积分")
+    private Integer integral;
+    @ApiModelProperty("日期")
+    private Long proceedsDate;
+    @ApiModelProperty("收入核对日期")
+    private Long proceedsCheckDate;
+    @ApiModelProperty("变化")
+    private String proceedsChange;
+    @ApiModelProperty("成本支付")
+    private BigDecimal cost;
+}

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepGoodsQueryBo.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRepGoodsQueryBo implements Serializable {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+    /** 排序列 */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+    /** 排序的方向desc或者asc */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("订单来源 1新系统C端订单,2旧系统C端订单,3旧系统B端订单,4新系统后台题库订单,5新B端订单")
+    private Integer orderFrom;
+    @ApiModelProperty("底单:1新系统,2旧系统")
+    private Integer orderBase;
+    @ApiModelProperty("C端订单过滤时间")
+    private Long filtrationTime = 1685449126L;
+}

+ 58 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepQueryBo.java

@@ -0,0 +1,58 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRepQueryBo implements Serializable {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+    /** 排序列 */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+    /** 排序的方向desc或者asc */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+    @ApiModelProperty("当前登入人员ID")
+    private Long loginId;
+    @ApiModelProperty("教育类型ID")
+    private Long educationTypeId;
+    @ApiModelProperty("业务层次ID")
+    private Long businessId;
+    @ApiModelProperty("业务名称")
+    private String businessFullName;
+    @ApiModelProperty("订单来源")
+    private String orderOrg;
+    @ApiModelProperty("账款状态:0未结清,1已结清")
+    private Integer creditStatus;
+    @ApiModelProperty("订单来源")
+    private Integer orderFrom;
+    @ApiModelProperty("开始时间")
+    private Long startTime;
+    @ApiModelProperty("结束时间")
+    private Long endTime;
+    @ApiModelProperty("审核开始时间")
+    private Long checkStartTime;
+    @ApiModelProperty("审核结束时间")
+    private Long checkEndTime;
+    @ApiModelProperty("关键字")
+    private String keyword;
+    @ApiModelProperty("身份证")
+    private String userCard;
+    @ApiModelProperty("姓名")
+    private String userName;
+    @ApiModelProperty("C端订单过滤时间")
+    private Long filtrationTime = 1685449126L;
+}

+ 29 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRepQuestionBo.java

@@ -0,0 +1,29 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRepQuestionBo implements Serializable {
+
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    @ApiModelProperty("开通时间")
+    private Long openDate;
+    @ApiModelProperty("标签")
+    private String sign;
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRequestBo.java

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRequestBo implements Serializable {
+
+    private Long stamp;
+
+    private String sign;
+
+    private List<TopOrderRequestDetailBo> queryList;
+
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderRequestDetailBo.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRequestDetailBo implements Serializable {
+
+    private String idNum;
+
+    private String majorName;
+
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopRepQuestionQueryBo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopRepQuestionQueryBo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
+    @ApiModelProperty("名称")
+    private String userName;
+    @ApiModelProperty("身份证")
+    private String userCard;
+    @ApiModelProperty("关键字")
+    private String keyword;
+}

+ 42 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOldOrderQuestion.java

@@ -0,0 +1,42 @@
+package com.zhongzheng.modules.top.order.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 14:48
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_old_order_question")
+public class TopOldOrderQuestion implements Serializable {
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 订单编号 */
+    private String orderSn;
+    /** 订单商品ID */
+    private Long orderGoodsId;
+    /** 开通日期 */
+    private Long openDate;
+    /** 标签 */
+    private String sign;
+    /** 备注 */
+    private String remark;
+    /** 1有效 0无效 */
+    private Integer status;
+    /** 创建时间 */
+    private Long createTime;
+    /** 更新时间 */
+    private Long updateTime;
+}

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOldOrderReplenish.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.top.order.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 14:48
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_old_order_replenish")
+public class TopOldOrderReplenish implements Serializable {
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 订单编号 */
+    private String orderSn;
+    /** 订单来源 1新系统C端订单,2旧系统C端订单,3旧系统B端订单,4新系统后台题库订单,5新B端订单 */
+    private Integer orderFrom;
+    /** 收款json */
+    private String proceedsJson;
+    /** 收款记录 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String proceedsRecord;
+    /** 积分*/
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer integral;
+    /** 日期 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long proceedsDate;
+    /** 收入核对日期 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long proceedsCheckDate;
+    /** 未收(订单明细用) */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal orderResidue;
+    /** 变化 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String proceedsChange;
+    /** 成本支付 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal cost;
+    /** 1有效 0无效 */
+    private Integer status;
+    /** 创建时间 */
+    private Long createTime;
+    /** 更新时间 */
+    private Long updateTime;
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/mapper/TopOldOrderQuestionMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.top.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderQuestion;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+
+/**
+ * 订单网银打款Mapper接口
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+public interface TopOldOrderQuestionMapper extends BaseMapper<TopOldOrderQuestion> {
+
+}

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/mapper/TopOldOrderReplenishMapper.java

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.top.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.bo.TopAcceptanceOrderBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderAcceptanceBo;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+import com.zhongzheng.modules.top.order.domain.TopOrderAcceptance;
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceVo;
+
+import java.util.List;
+
+/**
+ * 订单网银打款Mapper接口
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+public interface TopOldOrderReplenishMapper extends BaseMapper<TopOldOrderReplenish> {
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/ITopOldOrderQuestionService.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.top.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderQuestion;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+
+/**
+ * 订单网银打款Mapper接口
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+public interface ITopOldOrderQuestionService extends IService<TopOldOrderQuestion> {
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/ITopOldOrderReplenishService.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.top.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+
+/**
+ * 订单网银打款Mapper接口
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+public interface ITopOldOrderReplenishService extends IService<TopOldOrderReplenish> {
+
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/impl/TopOldOrderQuestionServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.top.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderQuestion;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+import com.zhongzheng.modules.top.order.mapper.TopOldOrderQuestionMapper;
+import com.zhongzheng.modules.top.order.mapper.TopOldOrderReplenishMapper;
+import com.zhongzheng.modules.top.order.service.ITopOldOrderQuestionService;
+import com.zhongzheng.modules.top.order.service.ITopOldOrderReplenishService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:04
+ */
+@Service
+public class TopOldOrderQuestionServiceImpl extends ServiceImpl<TopOldOrderQuestionMapper, TopOldOrderQuestion> implements ITopOldOrderQuestionService {
+}

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/service/impl/TopOldOrderReplenishServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.top.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.top.order.domain.TopOldOrderReplenish;
+import com.zhongzheng.modules.top.order.domain.TopOrderAcceptanceRel;
+import com.zhongzheng.modules.top.order.mapper.TopOldOrderReplenishMapper;
+import com.zhongzheng.modules.top.order.mapper.TopOrderAcceptanceRelMapper;
+import com.zhongzheng.modules.top.order.service.ITopOldOrderReplenishService;
+import com.zhongzheng.modules.top.order.service.ITopOrderAcceptanceRelService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:04
+ */
+@Service
+public class TopOldOrderReplenishServiceImpl extends ServiceImpl<TopOldOrderReplenishMapper, TopOldOrderReplenish> implements ITopOldOrderReplenishService {
+}

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderQuestionVo.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+/**
+ * 订单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单视图对象")
+public class TopOldOrderQuestionVo implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/** 订单编号 */
+	@ApiModelProperty("订单编号")
+	private String orderSn;
+
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
+
+	@ApiModelProperty("订单商品ID")
+	private Long goodsId;
+
+	@ApiModelProperty("姓名")
+	private String userName;
+
+	@ApiModelProperty("身份证号")
+	private String userCard;
+
+	@ApiModelProperty("教育类型")
+	private String eduName;
+
+	@ApiModelProperty("业务类型")
+	private String businessName;
+
+	@ApiModelProperty("专业")
+	private String majorName;
+
+	@ApiModelProperty("开通时间")
+	private Long openDate;
+
+	@ApiModelProperty("备注")
+	private String sign;
+
+	@ApiModelProperty("备注")
+	private String remark;
+
+	@ApiModelProperty("标签:1正确 2错误")
+	private Integer check;
+
+	private String createNo;
+
+}

+ 75 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderRepDetailVo.java

@@ -0,0 +1,75 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 订单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单视图对象")
+public class TopOldOrderRepDetailVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 订单编号 */
+	@ApiModelProperty("订单编号")
+	private String orderSn;
+
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
+
+	@ApiModelProperty("订单商品ID")
+	private Long goodsId;
+
+	@ApiModelProperty("姓名")
+	private String userName;
+
+	@ApiModelProperty("性别 1男 2女")
+	private Integer sex;
+
+	@ApiModelProperty("身份证号")
+	private String userCard;
+
+	@ApiModelProperty("商品名称")
+	private String goodsName;
+
+	@ApiModelProperty("年份")
+	private String goodsYear;
+
+	@ApiModelProperty("专业")
+	private String majorName;
+
+	@ApiModelProperty("成交单价")
+	private BigDecimal goodsPrice;
+
+	@ApiModelProperty("完成日期")
+	private Long finishTime;
+
+	@ApiModelProperty("公示日期")
+	private Long publicityTime;
+
+	@ApiModelProperty("领证日期")
+	private Long acquireTime;
+
+	@ApiModelProperty("补考次数")
+	private Integer applyNum;
+
+	@ApiModelProperty("题库记录")
+	private Integer questionRecord;
+
+	@ApiModelProperty("状态 1正常 2已退款 ")
+	private Integer refundStatus;
+
+	@ApiModelProperty("退款时间")
+	private Long refundTime;
+
+}

+ 126 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOldOrderRepVo.java

@@ -0,0 +1,126 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 订单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单视图对象")
+public class TopOldOrderRepVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long orderId;
+
+	/** 订单编号 */
+	@ApiModelProperty("订单编号")
+	private String orderSn;
+
+	@ApiModelProperty("订单来源")
+	private String orderOrg;
+
+	@ApiModelProperty("底单:1新系统,2旧系统")
+	private Integer orderBase;
+
+	@ApiModelProperty("订单来源 1新系统C端订单,2旧系统C端订单,3旧系统B端订单,4新系统后台题库订单,5新B端订单")
+	private Integer orderFrom;
+
+	@ApiModelProperty("申请时间")
+	private Long orderTime;
+
+	@ApiModelProperty("审核时间")
+	private Long checkTime;
+
+	@ApiModelProperty("业务员名称")
+	private String createUsername;
+
+	@ApiModelProperty("业务号")
+	private String createNo;
+
+	@ApiModelProperty("所属机构")
+	private String tenantName;
+
+	@ApiModelProperty("所属客户")
+	private String purchaseOrg;
+
+	@ApiModelProperty("业务类型简称")
+	private String businessAbbreviation;
+
+	@ApiModelProperty("教育类型")
+	private String businessFullName;
+
+	@ApiModelProperty("教育类型")
+	private String eduName;
+
+	@ApiModelProperty("业务类型")
+	private String businessName;
+
+	@ApiModelProperty("成交单价")
+	private BigDecimal unitPrice;
+
+	@ApiModelProperty("成交数量")
+	private Integer concludeNum;
+
+	@ApiModelProperty("成交总价")
+	private BigDecimal priceTotal;
+
+	@ApiModelProperty("收款JSON")
+	private Map<String, BigDecimal> proceedsJsonMap;
+
+	@ApiModelProperty("已收")
+	private BigDecimal received;
+
+	@ApiModelProperty("已退")
+	private BigDecimal refunded;
+
+	@ApiModelProperty("实际")
+	private BigDecimal practical;
+
+	@ApiModelProperty("未收")
+	private BigDecimal uncollected;
+
+	@ApiModelProperty("收款记录")
+	private String proceedsRecord;
+
+	@ApiModelProperty("发票申请日期")
+	private String invoiceApplyTime;
+
+	@ApiModelProperty("发票类型")
+	private String invoiceType;
+
+	@ApiModelProperty("积分")
+	private Integer integral;
+
+	@ApiModelProperty("日期")
+	private Long proceedsDate;
+
+	@ApiModelProperty("收入核对日期")
+	private Long proceedsCheckDate;
+
+	@ApiModelProperty("变化")
+	private String proceedsChange;
+
+	@ApiModelProperty("成本支付")
+	private BigDecimal cost;
+
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+
+	private Long createTime;
+
+	private Long updateTime;
+
+}

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderRequestVo.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年05月28日 15:54
+ */
+@Data
+public class TopOrderRequestVo implements Serializable {
+
+    private String idNum;
+
+    private String majorName;
+
+    private Integer count;
+
+}

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopQuestionImportVo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 订单视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Data
+@ApiModel("订单题库导入")
+public class TopQuestionImportVo implements Serializable {
+
+	@ApiModelProperty("总条数")
+	private Integer total;
+
+	@ApiModelProperty("正确")
+	private Integer correctNum;
+
+	@ApiModelProperty("错误")
+	private Integer errorNum;
+
+	@ApiModelProperty("数据")
+	private List<TopOldOrderQuestionVo> dataList;
+
+}

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

@@ -1705,4 +1705,60 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE cg.`status` = 1 AND  cg.seven_code = #{sevenCode}
     </select>
 
+    <select id="getBusinessClassList" resultType="com.zhongzheng.modules.grade.vo.ClassBusinessVo" parameterType="com.zhongzheng.modules.grade.bo.ClassBusinessQuery">
+        SELECT *
+        FROM (
+                 SELECT DISTINCT cg.grade_id,
+                                 cg.class_name,
+                                 DATE_FORMAT(FROM_UNIXTIME(cg.class_start_time), '%Y-%m-%d %H:%i:%s') AS startTime,
+                                 DATE_FORMAT(FROM_UNIXTIME(cg.class_end_time), '%Y-%m-%d %H:%i:%s') AS endTime,
+                                 cg.student_upper,
+                                 cg.past_due_day,
+                                 cg.create_time,
+                                 cet.education_name                         AS eduName,
+                                 CONCAT(cb.business_name, cpt.project_name) AS businessName
+                 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
+                          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
+                 WHERE cg.`status` = 1
+                   AND cg.class_status = 1
+                   AND INSTR(CONCAT(cet.education_name, cb.business_name, cpt.project_name), #{eduName})
+                   AND INSTR(CONCAT(cet.education_name, cb.business_name, cpt.project_name), #{businessName})
+                   AND cg.tenant_id = #{tenantId}
+             ) a ORDER BY a.create_time DESC
+    </select>
+
+    <select id="getBusinessClassList_COUNT" resultType="java.lang.Long" parameterType="com.zhongzheng.modules.grade.bo.ClassBusinessQuery">
+        SELECT count(*)
+        FROM (
+                 SELECT DISTINCT cg.grade_id,
+                                 cg.class_name,
+                                 cg.class_start_time                        AS startTime,
+                                 cg.class_end_time                          AS endTime,
+                                 cg.student_upper,
+                                 cg.past_due_day,
+                                 cg.create_time,
+                                 cet.education_name                         AS eduName,
+                                 CONCAT(cb.business_name, cpt.project_name) AS businessName
+                 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
+                          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
+                 WHERE cg.`status` = 1
+                   AND cg.class_status = 1
+                   AND INSTR(CONCAT(cet.education_name, cb.business_name, cpt.project_name), #{eduName})
+                   AND INSTR(CONCAT(cet.education_name, cb.business_name, cpt.project_name), #{businessName})
+                   AND cg.tenant_id = #{tenantId}
+             ) a ORDER BY a.create_time DESC
+    </select>
+
+    <select id="getClassById" resultType="com.zhongzheng.modules.grade.vo.ClassGradeVo" parameterType="java.lang.Long">
+        SELECT * from class_grade where grade_id = #{gradeId}
+    </select>
+
 </mapper>

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

@@ -1001,4 +1001,33 @@
         UPDATE order_goods SET course_num = #{courseNum}, exam_num = #{examNum} WHERE order_goods_id = #{orderGoodsId}
     </update>
 
+    <select id="listRepByOrderSn" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo">
+        SELECT
+            og.order_sn,
+            og.order_goods_id,
+            og.goods_id,
+            u.user_id,
+            u.realname as userName,
+            u.sex,
+            u.id_card,
+            g.goods_name,
+            og.goods_price,
+            og.goods_year,
+            m.category_name as majorName,
+            og.refund_status,
+            og.finish_time,
+            og.publicity_time,
+            og.acquire_time,
+            (SELECT ogr.refund_time FROM order_goods_refund ogr WHERE ogr.order_goods_id = og.order_goods_id AND ogr.`status` = 1 AND ogr.period_status = 3 LIMIT 1) AS refund_time
+        FROM
+            order_goods og
+                LEFT JOIN goods g ON og.goods_id = g.goods_id
+                LEFT JOIN `order` o ON og.order_sn = o.order_sn
+                LEFT JOIN `user` u ON o.user_id = u.user_id
+                LEFT JOIN major m ON g.major_id = m.id
+        WHERE
+            og.order_sn = #{orderSn}
+          AND og.`status` = 1
+    </select>
 </mapper>

+ 23 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderGoodsMapper.xml

@@ -101,4 +101,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           ORDER BY check_status ASC
     </select>
 
+    <select id="listRepByOrderSn" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderRepGoodsQueryBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOldOrderRepDetailVo">
+        SELECT
+        order_sn,
+        order_goods_id,
+        goods_id,
+        user_name,
+        user_sex,
+        user_card,
+        goods_name,
+        major_name,
+        finish_time,
+        publicity_time,
+        acquire_time,
+        goods_real_price as goodsPrice,
+        goods_year
+        FROM
+        top_old_order_goods
+        WHERE
+        order_sn = #{orderSn}
+        AND `status` = 1
+    </select>
+
 </mapper>

+ 192 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -2635,4 +2635,196 @@
             create_sys_user_id,
             create_username
     </select>
+
+    <select id="queryOrderRepList" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderRepQueryBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOldOrderRepVo">
+        SELECT
+            vto.order_id,
+            vto.order_org,
+            vto.order_sn,
+            vto.order_from,
+            vto.order_base,
+            vto.create_time as orderTime,
+            vto.check_time,
+            vto.create_username,
+            vto.create_no,
+            vto.tenant_name,
+            vto.purchase_org,
+            vto.business_full_name,
+            vto.order_price as priceTotal
+        FROM
+        <if test="((userCard != null and userCard != '') or (userName != null and userName != ''))">
+            ( SELECT DISTINCT order_sn
+            FROM `v_top_order_card` where 1=1
+            <if test="userCard != null and userCard != ''">
+                AND user_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+            </if>
+            <if test="userName != null and userName != ''">
+                AND user_name LIKE CONCAT( '%', #{userName}, '%' )
+            </if>
+            ) a
+            LEFT JOIN v_top_order vto ON a.order_sn = vto.order_sn
+        </if>
+        <if test="(userCard == null or userCard == '') and (userName == null or userName == '')">
+            v_top_order vto
+        </if>
+        WHERE vto.`status` in (0,1) AND vto.operation_type = 1 AND vto.check_status = 1
+        <if test="businessFullName != null and businessFullName != ''">
+            AND INSTR(vto.business_full_name,#{businessFullName})
+        </if>
+        <if test="creditStatus != null and creditStatus == 0">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = vto.order_sn ) <![CDATA[ > ]]> 0
+        </if>
+        <if test="creditStatus != null and creditStatus == 1">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = vto.order_sn ) <![CDATA[ <= ]]> 0
+        </if>
+        <if test="orderOrg != null and orderOrg != ''">
+            AND vto.order_org  = #{orderOrg}
+        </if>
+        <if test="orderFrom != null and orderFrom != ''">
+            AND vto.order_from  != #{orderFrom}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND vto.create_time <![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND vto.create_time <![CDATA[ <= ]]> #{endTime}
+        </if>
+        <if test="checkStartTime != null and checkStartTime != ''">
+            AND vto.check_time <![CDATA[ >= ]]> #{checkStartTime}
+        </if>
+        <if test="checkEndTime != null and checkEndTime != ''">
+            AND vto.check_time <![CDATA[ <= ]]> #{checkEndTime}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND (
+            vto.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
+            OR vto.create_no LIKE CONCAT( '%', #{keyword}, '%' )
+            OR vto.create_username LIKE CONCAT( '%', #{keyword}, '%' )
+            OR vto.purchase_org LIKE CONCAT( '%', #{keyword}, '%' ))
+        </if>
+        order by vto.update_time DESC
+    </select>
+
+    <select id="queryOrderRepList_COUNT" resultType="Long">
+        SELECT
+        ((SELECT
+        COUNT( DISTINCT ot.order_sn ) AS num
+        FROM
+        top_old_order ot
+        LEFT JOIN top_old_order_goods otg ON ot.order_sn = otg.order_sn
+        WHERE
+        1 = 1 AND ot.`status` = 1 AND ot.operation_type = 1 AND ot.check_status = 1
+        <if test="businessFullName != null and businessFullName != ''">
+            AND INSTR( otg.business_full_name , #{businessFullName} ) > 0
+        </if>
+        <if test="userCard != null and userCard != ''">
+            AND otg.user_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+        </if>
+        <if test="userName != null and userName != ''">
+            AND otg.user_name LIKE CONCAT( '%', #{userName}, '%' )
+        </if>
+        <if test="orderOrg != null and orderOrg != ''">
+            AND ot.order_org = #{orderOrg}
+        </if>
+        <if test="checkStartTime != null and checkStartTime != ''">
+            AND ot.check_time <![CDATA[ >= ]]> #{checkStartTime}
+        </if>
+        <if test="checkEndTime != null and checkEndTime != ''">
+            AND ot.check_time <![CDATA[ <= ]]> #{checkEndTime}
+        </if>
+        <if test="creditStatus != null and creditStatus == 0">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = ot.order_sn ) <![CDATA[ > ]]> 0
+        </if>
+        <if test="creditStatus != null and creditStatus == 1">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = ot.order_sn ) <![CDATA[ <= ]]> 0
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND ot.create_time <![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND ot.create_time <![CDATA[ <= ]]> #{endTime}
+        </if>
+        <if test="orderFrom != null and orderFrom != ''">
+            AND ot.order_from != #{orderFrom}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND (
+            ot.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.create_no LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.create_username LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.purchase_org LIKE CONCAT( '%', #{keyword}, '%' ))
+        </if>
+        ) + (SELECT
+        COUNT( DISTINCT o.order_sn ) AS num
+        FROM
+        `order` o
+        LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+        LEFT JOIN `user` u ON o.user_id = u.user_id
+        WHERE
+        1 = 1 AND o.`status` IN (0,1)
+        AND ( `o`.`order_type` != 4 )
+        AND ( `o`.`org_sign` != 1 )
+        AND o.operation_type = 1
+        AND o.check_status = 1
+        <if test="businessFullName != null and businessFullName != ''">
+            AND (
+            SELECT
+            COUNT(g.goods_id)
+            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
+            WHERE
+            og.goods_id = g.goods_id
+            AND
+            INSTR( CONCAT('学校业务', cet.education_name, cb.business_name, cpt.project_name),#{businessFullName}) > 0) > 0
+        </if>
+        <if test="userCard != null and userCard != ''">
+            AND u.id_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+        </if>
+        <if test="userName != null and userName != ''">
+            AND u.realname LIKE CONCAT( '%', #{userName}, '%' )
+        </if>
+        <choose>
+            <when test="orderOrg != null and orderOrg != '' and orderOrg == 'C端云学堂线上'">
+                AND o.input_order_sn IS NULL
+            </when>
+            <when test="orderOrg != null and orderOrg != '' and orderOrg == 'C端云学堂线下'">
+                AND o.input_order_sn IS NOT NULL
+            </when>
+            <when test="orderOrg != null and orderOrg != ''">
+                AND o.order_org = #{orderOrg}
+            </when>
+        </choose>
+        <if test="checkStartTime != null and checkStartTime != ''">
+            AND o.pay_time <![CDATA[ >= ]]> #{checkStartTime}
+        </if>
+        <if test="checkEndTime != null and checkEndTime != ''">
+            AND o.pay_time <![CDATA[ <= ]]> #{checkEndTime}
+        </if>
+        <if test="creditStatus != null and creditStatus == 0">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = o.order_sn ) <![CDATA[ > ]]> 0
+        </if>
+        <if test="creditStatus != null and creditStatus == 1">
+            AND (SELECT IFNULL(SUM(order_residue),1) FROM top_old_order_replenish tor WHERE tor.order_sn = o.order_sn ) <![CDATA[ <= ]]> 0
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND o.create_time <![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="startTime == null">
+            AND o.create_time <![CDATA[ > ]]> #{filtrationTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND o.create_time <![CDATA[ <= ]]> #{endTime}
+        </if>
+        <if test="orderFrom != null and orderFrom != ''">
+            AND 1 != #{orderFrom}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND o.order_sn LIKE CONCAT( '%', #{keyword}, '%' )
+        </if>
+        )) as number
+    </select>
 </mapper>