yangdamao 2 лет назад
Родитель
Сommit
385c18eb49
100 измененных файлов с 4328 добавлено и 821 удалено
  1. 12 0
      run-prod.sh
  2. 19 4
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  3. 150 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderAcceptanceController.java
  4. 149 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java
  5. 88 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopSharedCustomerController.java
  6. 9 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  7. 8 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  8. 17 14
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  9. 8 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  10. 8 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  11. 7 0
      zhongzheng-admin/src/main/resources/application-pre.yml
  12. 1 1
      zhongzheng-admin/src/main/resources/application-prod.yml
  13. 2 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java
  14. 1 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java
  15. 8 0
      zhongzheng-api/src/main/resources/application-dev.yml
  16. 8 0
      zhongzheng-api/src/main/resources/application-pre.yml
  17. 109 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  18. BIN
      zhongzheng-common/src/main/resources/static/001.png
  19. BIN
      zhongzheng-common/src/main/resources/static/002.jpg
  20. BIN
      zhongzheng-common/src/main/resources/static/0020.jpg
  21. BIN
      zhongzheng-common/src/main/resources/static/0024.jpg
  22. BIN
      zhongzheng-common/src/main/resources/static/003.jpg
  23. BIN
      zhongzheng-common/src/main/resources/static/0030.jpg
  24. BIN
      zhongzheng-common/src/main/resources/static/00312.jpg
  25. BIN
      zhongzheng-common/src/main/resources/static/0033.jpg
  26. BIN
      zhongzheng-common/src/main/resources/static/004.jpg
  27. BIN
      zhongzheng-common/src/main/resources/static/005.jpg
  28. BIN
      zhongzheng-common/src/main/resources/static/006.jpg
  29. BIN
      zhongzheng-common/src/main/resources/static/2323.jpg
  30. 1 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/MybatisPlusConfig.java
  31. 1 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java
  32. 1 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  33. 31 32
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java
  34. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  35. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionBusinessAddBo.java
  36. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java
  37. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/ExamVo.java
  38. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingServiceImpl.java
  39. 741 239
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  40. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/CertificatePhotoVo.java
  41. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseAddBo.java
  42. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseEditBo.java
  43. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleAddBo.java
  44. 16 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleEditBo.java
  45. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/Course.java
  46. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseModule.java
  47. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java
  48. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseBusinessServiceImpl.java
  49. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java
  50. 15 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  51. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterVo.java
  52. 17 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseModuleVo.java
  53. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java
  54. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java
  55. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsAddBo.java
  56. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEditBo.java
  57. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListBo.java
  58. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java
  59. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  60. 460 458
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  61. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java
  62. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserNewGoodsVo.java
  63. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  64. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  65. 38 12
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  66. 22 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  67. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java
  68. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  69. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java
  70. 30 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  71. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  72. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java
  73. 41 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java
  74. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopNuoMplatformLogServiceImpl.java
  75. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SysWebServiceImpl.java
  76. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideLogMapper.java
  77. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideOrderMapper.java
  78. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideLogService.java
  79. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideOrderService.java
  80. 18 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideLogServiceImpl.java
  81. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideOrderServiceImpl.java
  82. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java
  83. 16 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderQueryBo.java
  84. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java
  85. 11 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java
  86. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java
  87. 53 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java
  88. 1560 16
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  89. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderInvoiceVo.java
  90. 32 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderUpVo.java
  91. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java
  92. 59 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderGoodsUpVo.java
  93. 12 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderStatisticsVo.java
  94. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundOrderDetailVo.java
  95. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundUserVo.java
  96. 39 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopAcceptanceOrderBo.java
  97. 73 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceAddBo.java
  98. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceBo.java
  99. 58 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceExportBo.java
  100. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceRelBo.java

+ 12 - 0
run-prod.sh

@@ -1,3 +1,10 @@
+
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
 #!/usr/bin/env bash
 # 定义应用组名
 group_admin_name='zhongzheng'
@@ -32,3 +39,8 @@ docker run \
 -v /data/nginx/conf.d:/data/nginx/conf.d \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"

+ 19 - 4
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -15,10 +15,7 @@ import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
 import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
 import com.zhongzheng.modules.top.goods.bo.*;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderGoodsListVo;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
-import com.zhongzheng.modules.top.goods.vo.TopOrderStatisticsVo;
-import com.zhongzheng.modules.top.goods.vo.TopRefundOrderDetailVo;
+import com.zhongzheng.modules.top.goods.vo.*;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
@@ -92,6 +89,24 @@ public class TopOldOrderController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 订单学员审核列表
+     */
+    @ApiOperation("订单学员审核列表")
+    @GetMapping("/goods/apply/list/{orderSn}")
+    public AjaxResult<TopOldOrderUpVo> getOrderGoodsApplyList(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderGoodsApplyList(orderSn));
+    }
+
+    /**
+     * 订单发票信息
+     */
+    @ApiOperation("订单发票信息")
+    @GetMapping("/invoice/list/{orderSn}")
+    public AjaxResult<List<TopOldOrderInvoiceVo>> getOrderInvoiceList(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iTopOldOrderService.getOrderInvoiceList(orderSn));
+    }
+
     /**
      * 订单学员信息导出
      */

+ 150 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderAcceptanceController.java

@@ -0,0 +1,150 @@
+package com.zhongzheng.controller.order;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.modules.course.bo.CourseSectionBusinessAddBo;
+import com.zhongzheng.modules.course.vo.CourseChapterSectionImport;
+import com.zhongzheng.modules.distribution.bo.DistributionActivityPosterQueryBo;
+import com.zhongzheng.modules.distribution.vo.DistributionActivityPosterVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderAddBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.bo.*;
+import com.zhongzheng.modules.top.order.service.ITopOrderAcceptanceService;
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceStatisticsVo;
+import com.zhongzheng.modules.top.order.vo.TopOrderAcceptanceVo;
+import com.zhongzheng.modules.user.bo.UserImportAddBo;
+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.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 订单认款Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单认款", tags = {"订单认款"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/acceptance")
+public class TopOrderAcceptanceController extends BaseController {
+
+    private final ITopOrderAcceptanceService iTopOrderAcceptanceService;
+
+    /**
+     * 查询认款列表
+     */
+    @ApiOperation("查询认款列表")
+    @GetMapping("/list")
+    public TableDataInfo<TopOrderAcceptanceVo> list(TopOrderAcceptanceBo bo) {
+        startPage();
+        List<TopOrderAcceptanceVo> list = iTopOrderAcceptanceService.queryAcceptanceList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询认款统计
+     */
+    @ApiOperation("查询认款统计")
+    @GetMapping("/statistics")
+    public AjaxResult<TopOrderAcceptanceStatisticsVo> statistics() {
+        TopOrderAcceptanceStatisticsVo vo = iTopOrderAcceptanceService.statistics();
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 认款订单列表
+     */
+    @ApiOperation("认款订单列表")
+    @GetMapping("/order/list")
+    public TableDataInfo<TopOldOrderVo> getAcceptanceOrderList(TopAcceptanceOrderBo bo) {
+        startPage();
+        List<TopOldOrderVo> list = iTopOrderAcceptanceService.getAcceptanceOrderList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 认款关联订单列表
+     */
+    @ApiOperation("认款关联订单列表")
+    @GetMapping("/order/rel/{acceptanceId}")
+    public AjaxResult<List<TopOldOrderVo>> getAcceptanceOrderRelList(@PathVariable("acceptanceId")Long acceptanceId) {
+        List<TopOldOrderVo> list = iTopOrderAcceptanceService.getAcceptanceOrderRelList(acceptanceId);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 订单认款
+     */
+    @ApiOperation("订单认款")
+    @PostMapping("/rel")
+    public AjaxResult<Void> addOrderAcceptanceRel(@RequestBody TopOrderAcceptanceRelBo bo) {
+        return toAjax(iTopOrderAcceptanceService.addOrderAcceptanceRel(bo) ? 1 : 0);
+    }
+
+
+    /**
+     * 新增认款记录
+     */
+    @ApiOperation("新增认款记录")
+    @PostMapping("/save")
+    public AjaxResult<Void> add(@RequestBody TopOrderAcceptanceAddBo bo) {
+        return toAjax(iTopOrderAcceptanceService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除认款记录
+     */
+    @ApiOperation("删除认款记录")
+    @PostMapping("/delete")
+    public AjaxResult<Void> add(@RequestBody TopOrderAcceptanceBo bo) {
+        return toAjax(iTopOrderAcceptanceService.deleteByAddBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("认款记录导入")
+    @PostMapping("/importData")
+    public AjaxResult<Void> importData(MultipartFile file) {
+        ExcelUtil<TopOrderAcceptanceExportBo> util = new ExcelUtil<TopOrderAcceptanceExportBo>(TopOrderAcceptanceExportBo.class);
+        List<TopOrderAcceptanceExportBo> acceptanceExportBos;
+        try {
+            acceptanceExportBos = util.importExcel(file.getInputStream());
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException("模板格式不正确,请重新下载模板");
+        }
+        return toAjax(iTopOrderAcceptanceService.importData(acceptanceExportBos)? 1 : 0);
+    }
+
+    /**
+     * 导出【请填写功能名称】列表
+     */
+    @ApiOperation("认款记录导出")
+    @GetMapping("/export")
+    public AjaxResult<DistributionActivityPosterVo> export(TopOrderAcceptanceBo bo) {
+        List<TopOrderAcceptanceVo> list = iTopOrderAcceptanceService.queryAcceptanceList(bo);
+        List<TopOrderAcceptanceExportBo> collect = list.stream().map(item -> {
+            TopOrderAcceptanceExportBo exportBo = BeanUtil.toBean(item, TopOrderAcceptanceExportBo.class);
+            return exportBo;
+        }).collect(Collectors.toList());
+        ExcelUtil<TopOrderAcceptanceExportBo> util = new ExcelUtil<TopOrderAcceptanceExportBo>(TopOrderAcceptanceExportBo.class);
+        return util.exportExcel(collect, "认款记录表");
+    }
+}

+ 149 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java

@@ -0,0 +1,149 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
+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 java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单统计控制器", tags = {"订单统计控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/statistics")
+public class TopOrderStatisticsController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("下单客户订单金额统计")
+    @GetMapping("/money")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("下单客户订单数量统计")
+    @GetMapping("/num")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单走势图
+     */
+    @ApiOperation("下单客户订单走势图")
+    @GetMapping("/view")
+    public AjaxResult<TopOrderStatisticsViewVo> orderStatisticsView(TopOrderStatisticsViewBo bo) {
+        return AjaxResult.success(iTopOldOrderService.orderStatisticsView(bo));
+    }
+
+    /**
+     * 下单客户订单详情
+     */
+    @ApiOperation("下单客户订单详情")
+    @GetMapping("/detail")
+    public TableDataInfo<TopOrderStatisticsDetailVo> orderStatisticsDetail(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.orderStatisticsDetail(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("机构订单金额统计")
+    @GetMapping("/moneyByTenant")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyTenantStatistics(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("机构订单数量统计")
+    @GetMapping("/numByTenant")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumTenantStatistics(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("业务层次订单金额统计")
+    @GetMapping("/moneyByBusiness")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> businessOrderMoney(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.getBusinessOrderMoney(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("业务层次订单数量统计")
+    @GetMapping("/numByBusiness")
+    public TableDataInfo<TopOrderStatisticsNumVo> businessOrderNum(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.getBusinessOrderNum(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("数据分析业务层次列表")
+    @GetMapping("/businessList")
+    public AjaxResult<List<String>> businessList(TopOrderStatisticsBo bo) {
+        List<String> list = iTopOldOrderService.getBusinessList(bo);
+        return AjaxResult.success(list);
+    }
+
+    @ApiOperation("下单客户")
+    @GetMapping("/customer")
+    public AjaxResult<List<TopOrderCustomerVo>> getCustomerList() {
+        return AjaxResult.success(iTopOldOrderService.getCustomerList());
+    }
+
+    @ApiOperation("订单总计")
+    @GetMapping("/total")
+    public AjaxResult<TopOrderTotalVo> getOrderTotal(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getOrderTotal(bo));
+    }
+
+    @ApiOperation("下单机构订单详情列表")
+    @GetMapping("/tenantDetailList")
+    public TableDataInfo<TopOrderStatisticsDetailVo> getTenantDetailList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.getTenantDetailList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("下单业务层次详情列表")
+    @GetMapping("/businessDetailList")
+    public TableDataInfo<TopOrderStatisticsDetailVo> getBusinessDetailList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsDetailVo> list = iTopOldOrderService.getBusinessDetailList(bo);
+        return getDataTable(list);
+    }
+}

+ 88 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopSharedCustomerController.java

@@ -0,0 +1,88 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "公海控制器", tags = {"公海控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/shared")
+public class TopSharedCustomerController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    /**
+     * 公海客户统计
+     */
+    @ApiOperation("公海客户统计")
+    @GetMapping("/statistics")
+    public AjaxResult<TopSharedCustomerTotalVo> getSharedStatistics(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getSharedStatistics(bo));
+    }
+
+    /**
+     * 公海总客户
+     */
+    @ApiOperation("公海总客户")
+    @GetMapping("/customer/stats")
+    public AjaxResult<TopCustomerStatsVo> getCustomerStatsData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCustomerStatsData(bo));
+    }
+
+    /**
+     * 公海过期预警
+     */
+    @ApiOperation("公海过期预警")
+    @GetMapping("/cert/stats")
+    public AjaxResult<TopCertStatsVo> getCertStatsData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCertStatsData(bo));
+    }
+
+    /**
+     * 城市转化排行
+     */
+    @ApiOperation("城市转化排行")
+    @GetMapping("/order/area")
+    public AjaxResult<TopOrderAreaVo> getOrderAreaData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getOrderAreaData(bo));
+    }
+
+    /**
+     * 客户转化排名
+     */
+    @ApiOperation("客户转化排名")
+    @GetMapping("/conversion/rate")
+    public AjaxResult<TopConversionRateVo> getConversionRateData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getConversionRateData(bo));
+    }
+
+    /**
+     * 公海客户列表
+     */
+    @ApiOperation("公海客户列表")
+    @GetMapping("/customer/list")
+    public AjaxResult<List<TopConversionRateTrendVo>> getCustomerListData(TopOrderStatisticsBo bo) {
+        return AjaxResult.success(iTopOldOrderService.getCustomerListData(bo));
+    }
+}

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

@@ -186,3 +186,12 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData
+

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

@@ -186,3 +186,11 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData

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

@@ -32,8 +32,10 @@ import com.zhongzheng.modules.bank.service.IQuestionOtherService;
 import com.zhongzheng.modules.bank.service.IQuestionService;
 import com.zhongzheng.modules.bank.vo.QuestionVo;
 import com.zhongzheng.modules.base.bo.ConfigQueryBo;
+import com.zhongzheng.modules.base.service.ICertificateTpService;
 import com.zhongzheng.modules.course.bo.ExternalQuestionBo;
 import com.zhongzheng.modules.course.bo.ReplenishExamBo;
+import com.zhongzheng.modules.course.vo.CourseChapterVo;
 import com.zhongzheng.modules.course.vo.ExternalQuestionVo;
 import com.zhongzheng.modules.course.vo.ReplenishExamVo;
 import com.zhongzheng.modules.distribution.bo.DistributionActivityGoodsQueryBo;
@@ -50,10 +52,7 @@ import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.GoodsStudyUrlBo;
 import com.zhongzheng.modules.goods.bo.UserGoodsListBo;
 import com.zhongzheng.modules.goods.service.IGoodsService;
-import com.zhongzheng.modules.goods.vo.GoodsJzsVo;
-import com.zhongzheng.modules.goods.vo.GoodsVo;
-import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
-import com.zhongzheng.modules.goods.vo.UserOrderGoodsListVo;
+import com.zhongzheng.modules.goods.vo.*;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
@@ -165,6 +164,8 @@ public class CommonController extends BaseController {
     private IQuestionOtherService iQuestionOtherService;
     @Autowired
     private OssService ossService;
+    @Autowired
+    private ICertificateTpService iCertificateTpService;
     /**
      * 通用下载请求
      *
@@ -289,9 +290,8 @@ public class CommonController extends BaseController {
         if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
             return AjaxResult.error("签名错误");
         }
-        List<UserOrderGoodsListVo> voList = iGoodsService.getUserOrderGoods(bo);
-
-        return AjaxResult.success(voList);
+        UserNewGoodsVo goodsVo = iGoodsService.getUserOrderGoods(bo);
+        return AjaxResult.success(goodsVo);
     }
 
     @ApiOperation("校验用户是否有账号")
@@ -326,14 +326,14 @@ public class CommonController extends BaseController {
                 e.printStackTrace();
             }
         });
-        return AjaxResult.success();
+        return AjaxResult.success("操作成功",null);
     }
 
     @ApiOperation("七大员新考证书")
     @PostMapping("common/apply/result/certificate")
     public AjaxResult examApplyResultCertificate(List<MultipartFile> files) {
         String msg = iExamApplyService.examApplyResultCertificate(files);
-        return AjaxResult.success(msg);
+        return AjaxResult.success("操作成功",msg);
     }
 
     @ApiOperation("七大员考试结果回执")
@@ -478,10 +478,11 @@ public class CommonController extends BaseController {
     }
 
     @ApiOperation("测试分班")
-    @GetMapping("common/jzs/grade")
-    public AjaxResult<Void> testGrade() {
+    @PostMapping("common/free/grade")
+    public AjaxResult<Void> testGrade(@RequestBody ClassGradeUserQueryBo bo) {
         //   iClassGradeService.checkEjjjPeopleNumLimit(195L,984L);
         //   iUserService.batchUpdateTelId();
+        iCertificateTpService.makeCertificatePhoto(bo);
         return AjaxResult.success();
     }
 
@@ -580,8 +581,8 @@ public class CommonController extends BaseController {
         if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
             return AjaxResult.error("签名错误");
         }
-        iTopSysTenantRegisterService.insertByAddBo(bo);
-        return AjaxResult.success("成功", webService.restartWebService() ? 1 : 0);
+
+        return AjaxResult.success("成功", iTopSysTenantRegisterService.insertByAddBo(bo) ? 1 : 0);
     }
 
     @ApiOperation("重启服务restart")
@@ -633,7 +634,7 @@ public class CommonController extends BaseController {
     public AjaxResult<String> findTenantId(SysTenantQueryBo bo) {
         String tenantId = iSysTenantService.findTenantId(bo);
         if (Validator.isNotEmpty(tenantId)) {
-            return AjaxResult.success("成功", tenantId.toString());
+            return AjaxResult.success("成功", tenantId);
         } else {
             if (Validator.isNotEmpty(bo.getHostH5()) && bo.getHostH5().equals("120.79.166.78:19012")) {
                 return AjaxResult.success("成功", "867735392558919680");
@@ -779,6 +780,8 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.pushOfficialPeriodMore(list));
     }
 
+   
+
     @ApiOperation("测试获取山东题库")
     @PreAuthorize("@ss.hasPermi('system:withdrawal:add')")
     @Log(title = "测试获取山东题库", businessType = BusinessType.INSERT)

+ 8 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -403,7 +403,7 @@ public class ScheduleController extends BaseController {
         //茂名市建设培训学校 680980002459417532
         //肇庆市建筑业协会 480813706424615769
 //        List<String> tenantIds = Arrays.asList("972001468256950403", "680980002459417532", "480813706424615769");
-        List<String> tenantIds = Arrays.asList("335322347347308");
+        List<String> tenantIds = Arrays.asList("87440920140968","694515817698614");
         tenantIds.forEach(tenantId -> {
             iScheduleService.synchronizationGoodsByTenantId(tenantId);
         });
@@ -424,6 +424,13 @@ public class ScheduleController extends BaseController {
         return AjaxResult.success();
     }
 
+    @ApiOperation("同步一二建商品")
+    @GetMapping("/goods/copy/two")
+    public AjaxResult goodsCopyTwo(){
+        iScheduleService.goodsCopyTwo();
+        return AjaxResult.success();
+    }
+
     @ApiOperation("分销佣金解冻")
     @GetMapping("/distributionRebate")
     public AjaxResult distributionRebate(UserQueryBo bo){

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

@@ -187,3 +187,11 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData

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

@@ -187,3 +187,10 @@ exam:
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
 
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData

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

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

+ 2 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java

@@ -133,6 +133,8 @@ public class CommonController extends BaseController {
         return AjaxResult.success(wxLoginService.getWxInfo(query));
     }
 
+
+
     /**
      * 获取小程序首页链接
      */

+ 1 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java

@@ -206,6 +206,6 @@ public class UserStudyRecordController extends BaseController {
     public AjaxResult<Integer> syncSevenPublicClass(UserStudyRecordQueryBo bo){
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
-        return AjaxResult.success(iUserStudyRecordService.syncSevenPublicClass(bo.getOrderGoodsId(),bo.getUserId()));
+        return AjaxResult.success(iUserStudyRecordService.syncSevenModulePublicClass(bo.getOrderGoodsId(),bo.getUserId()));
     }
 }

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

@@ -189,3 +189,11 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData

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

@@ -186,3 +186,11 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+
+shared:
+    statistics: http://gdxypx.xy.com/WitSystem/BussinessApi/HighSeasData
+    customer: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerStatsData
+    cert: http://gdxypx.xy.com/WitSystem/BussinessApi/CertStatsData
+    orderArea: http://gdxypx.xy.com/WitSystem/BussinessApi/OrderAreaData
+    rateData: http://gdxypx.xy.com//WitSystem/BussinessApi/CustomerConversionRateData
+    rateTrend: http://gdxypx.xy.com/WitSystem/BussinessApi/CustomerConversionRateTrendData

+ 109 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -275,6 +275,29 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return cal.getTimeInMillis() / 1000;  //今天凌晨
     }
 
+    /**
+     * 获取指定时间的凌晨时间戳
+     */
+    public static Long getScheduleTimeStrZeroTime(String timeStr,String patternStr)
+    {
+        Long time = dateTimeSec(patternStr,timeStr);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(timeToDate(time));
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        return cal.getTimeInMillis() / 1000;  //今天凌晨
+    }
+
+    /**
+     * 获取指定时间的凌晨时间戳
+     */
+    public static Long getScheduleTimeZeroTime(Long scheduleTime)
+    {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(timeToDate(scheduleTime));
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        return cal.getTimeInMillis() / 1000;  //今天凌晨
+    }
+
     public static String formatDate(Date time,String str)
     {
        SimpleDateFormat sdf = new SimpleDateFormat(str);
@@ -304,6 +327,18 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return cal.getTime().getTime()/1000;
     }
 
+    /**
+     * 获取本年第一天的凌晨时间戳
+     */
+    public static Long getToYearZeroTime()
+    {
+        Calendar calendar = Calendar.getInstance();
+        // 设置当前时间为年初的第一天
+        calendar.set(Calendar.DAY_OF_YEAR, 1);
+        Date startOfCurrentYear = calendar.getTime();
+        return startOfCurrentYear.getTime()/1000;
+    }
+
     /**
      * 根据当前日期获得所在周的日期区间(周一和周日日期)
      */
@@ -598,4 +633,78 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return c.getTime().getTime()/1000;
     }
 
+
+    public static List<Long> getWeekData(Long dataTime){
+        List<Long> week = new ArrayList();
+        Calendar calendar = Calendar.getInstance();
+        Long zeroTime = DateUtils.getScheduleTimeZeroTime(dataTime);
+        calendar.setTime(timeToDate(zeroTime));
+        // 如果是周日
+        if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
+            calendar.add(Calendar.DAY_OF_YEAR,-1);
+        }
+        // 获取当前日期是当周的第i天
+        int i = calendar.get(Calendar.DAY_OF_WEEK) - 1;
+         // 获取当前日期所在周的第一天
+        calendar.add(Calendar.DATE , -i);
+
+        for (int j = 0; j < 7; j++) {
+            if(j >0){
+                calendar.add(Calendar.DATE , 1);
+            }
+            Long time = calendar.getTime().getTime()/1000;
+            if (j == 6){
+                time = time + 86400L;
+            }
+            week.add(time);
+        }
+        return week;
+    }
+
+
+    public static Map<Long,Long> getWeekTime(Long startTime,Long endTime){
+        Map<Long,Long> mapList = new HashMap<>();
+        Long zeroTime = DateUtils.getScheduleTimeZeroTime(startTime);
+        //一天的时间戳
+        Long time = 86400L;
+        for (Long i = zeroTime; i <= endTime; i = i+time) {
+            List<Long> weekData = DateUtils.getWeekData(i);
+            mapList.put(weekData.get(0),weekData.get(weekData.size()-1));
+        }
+        return mapList;
+    }
+
+    public static Map<Long,Long> getMonthTime(Long startTime,Long endTime){
+        //一天的时间戳
+        Long time = 86400L;
+        Map<Long,Long> map = new HashMap<>();
+        try{
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+            Date d1 = DateUtils.timeToDate(startTime);
+            Date d2 = DateUtils.timeToDate(endTime);
+            Calendar dd = Calendar.getInstance();//定义日期实例
+            dd.setTime(d1);//设置日期起始时间
+            while (dd.getTime().before(d2)) {//判断是否到结束日期
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+                String str = sdf.format(dd.getTime());
+                Calendar c = Calendar.getInstance();
+                c.setTime(format.parse(str));
+                c.add(Calendar.MONTH, 0);
+                c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+                Long start = c.getTime().getTime()/1000;
+                dd.setTime(DateUtils.timeToDate(start));
+                //获取当前月最后一天
+                Calendar ca = Calendar.getInstance();
+                ca.setTime(format.parse(str));
+                ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
+                Long end = ca.getTime().getTime()/1000 + time;
+                map.put(start,end);
+                dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
+            }
+        }catch (Exception e){
+            System.out.println("异常"+e.getMessage());
+        }
+        return map;
+    }
+
 }

BIN
zhongzheng-common/src/main/resources/static/001.png


BIN
zhongzheng-common/src/main/resources/static/002.jpg


BIN
zhongzheng-common/src/main/resources/static/0020.jpg


BIN
zhongzheng-common/src/main/resources/static/0024.jpg


BIN
zhongzheng-common/src/main/resources/static/003.jpg


BIN
zhongzheng-common/src/main/resources/static/0030.jpg


BIN
zhongzheng-common/src/main/resources/static/00312.jpg


BIN
zhongzheng-common/src/main/resources/static/0033.jpg


BIN
zhongzheng-common/src/main/resources/static/004.jpg


BIN
zhongzheng-common/src/main/resources/static/005.jpg


BIN
zhongzheng-common/src/main/resources/static/006.jpg


BIN
zhongzheng-common/src/main/resources/static/2323.jpg


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

@@ -26,7 +26,7 @@ public class MybatisPlusConfig {
 	public MybatisPlusInterceptor mybatisPlusInterceptor() {
 		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 		// 多租户插件(注意:这个一定要放在最上面)
-		interceptor.addInnerInterceptor(new CustomTenantLineInnerInterceptor(customTenantLineHandler));
+		interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(customTenantLineHandler));
 		// 分页插件
 		interceptor.addInnerInterceptor(paginationInnerInterceptor());
 		// 乐观锁插件

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

@@ -189,7 +189,7 @@ public class SysLoginService
             }
             Long nowTime = DateUtils.getNowTime();
             Long paramTime = Long.valueOf(param[1]);
-            if(Validator.isEmpty(paramTime)||Math.abs(paramTime.longValue()-nowTime.longValue())>30){
+            if(Validator.isEmpty(paramTime)){
                 throw new CustomException("参数内容错误");
             }
         }

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

@@ -264,7 +264,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Override
     public List<UserExportVo> selectListExport(UserQueryBo bo) {
         bo.setGetOrderNum(1L);
-        List<UserVo> list = entity2UserVo(userMapper.selectList(bo));
+        List<UserVo> list = entity2UserVo(userMapper.selectListByBo(bo));
         List<UserExportVo> listExport = new ArrayList<>();
         for (UserVo userVo : list) {
             userVo.setStudentCode(userVo.getUserAccount());

+ 31 - 32
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java

@@ -227,7 +227,7 @@ public class OssServiceImpl implements OssService {
                 RandomFilename = "file" + "/" +(sdf.format(new Date())) + "/" + now + ".zip";
                 break;
             case 11:
-                RandomFilename = "file/nuonuo" + "/" +(sdf.format(new Date())) + "/" + now + ".pdf";
+                RandomFilename = "file/pdf/" +(sdf.format(new Date())) + "/" + now + ".pdf";
                 break;
         }
 
@@ -289,6 +289,34 @@ public class OssServiceImpl implements OssService {
         }
     }
 
+    @Override
+    public String uploadWithUrl(OssRequest base, String urlString){
+        String path = null;
+        InputStream inputStream = null;
+        try {
+            URL url = new URL(urlString);
+            URLConnection con = url.openConnection();
+            //获取上传文件输入流
+            inputStream =con.getInputStream();
+            path = uploadInputStream(inputStream,base.getImageStatus());
+
+            // 关闭OSSClient。
+            //ossClient.shutdown();
+            return path;
+        } catch (Exception e) {
+
+        }finally {
+            try {
+                if (null != inputStream) {
+                    inputStream.close();
+                }
+            }catch (IOException e){
+
+            }
+            return path;
+        }
+    }
+
     @Override
     public String uploadInputStream(InputStream inputStream, Integer imageStatus) throws Exception {
         try {
@@ -374,8 +402,8 @@ public class OssServiceImpl implements OssService {
 
     @Override
     public InputStream getStreamByObject(String filePath) throws Exception {
-            OSSObject ossObject = ossClient.getObject(ALIYUN_OSS_BUCKET_NAME, filePath);
-            return ossObject.getObjectContent();
+        OSSObject ossObject = ossClient.getObject(ALIYUN_OSS_BUCKET_NAME, filePath);
+        return ossObject.getObjectContent();
     }
 
     @Override
@@ -404,35 +432,6 @@ public class OssServiceImpl implements OssService {
         }
     }
 
-    @Override
-    public String uploadWithUrl(OssRequest base, String urlString){
-        String path = null;
-        InputStream inputStream = null;
-        try {
-            URL url = new URL(urlString);
-            URLConnection con = url.openConnection();
-            //获取上传文件输入流
-            inputStream =con.getInputStream();
-            path = uploadInputStream(inputStream,base.getImageStatus());
-
-            // 关闭OSSClient。
-            //ossClient.shutdown();
-            return path;
-        } catch (Exception e) {
-
-        }finally {
-            try {
-                if (null != inputStream) {
-                    inputStream.close();
-                }
-            }catch (IOException e){
-
-            }
-            return path;
-        }
-    }
-
-
     public void zipFile(List<String> fileList, ZipOutputStream zipOut,String dir) {
         if (CollectionUtils.isEmpty(fileList)) {
             return;

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java

@@ -91,6 +91,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
         //发送带指定短信code带参数发送不同短信内容
         try{
             SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,code,param,ACCESSKEYID,ACCESSKEYSECRET);
+            LOGGER.error("发送短信结果:"+JSON.toJSONString(response));
             if(response.getBody().getMessage().equals("OK")){
                 SmsAddBo smsAddBo = new SmsAddBo();
                 smsAddBo.setCode(param);

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionBusinessAddBo.java

@@ -33,4 +33,12 @@ public class QuestionBusinessAddBo {
     /** $column.columnComment */
     @ApiModelProperty("业务类型 1为题目业务 2试卷业务 3章业务 4模块业务")
     private Integer type;
+
+    private String educationName;
+
+    private String projectName;
+
+    private String businessName;
+
+    private String subjectName;
 }

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

@@ -351,7 +351,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
 
     @Override
     public boolean getShanDongExam(Long userId,String majorname,Long relExamId) {
-        Boolean getNew = false;
+        Boolean getNew = true;
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
                 .eq(User::getUserId, userId).last("limit 1"));
         String idnum = user.getIdCard();
@@ -374,6 +374,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                 if (!respone.contains("\"msg\":\"获取成功\"")) {
                     throw new CustomException("同步请求错误" + respone);
                 }
+                System.out.println(respone);
                 QuestionOtherAddBo addBo = new QuestionOtherAddBo();
                 addBo.setJsonStr(respone);
                 addBo.setFromPlat(1);
@@ -382,7 +383,6 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                 addBo.setRelExamId(relExamId);
                 Long id = iQuestionOtherService.insertByAddBo(addBo);
                 iQuestionOtherService.queryById(id);
-        //        System.out.println(respone);
             } catch (Exception e) {
                 throw new CustomException("同步请求错误" + e.getMessage());
             }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/ExamVo.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.bank.vo;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.zhongzheng.common.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhongzheng.modules.bank.bo.QuestionBusinessAddBo;
 import com.zhongzheng.modules.course.vo.CourseGoodsVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import io.swagger.annotations.ApiModel;
@@ -158,4 +159,6 @@ public class ExamVo {
 	@Excel(name = "商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
 	@ApiModelProperty("商品试卷限制终端学习,多个,拼接  1公众号 2小程序")
 	private String examLimitClient;
+	@ApiModelProperty("业务层级列表")
+	private List<QuestionBusinessAddBo> businessList;
 }

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingServiceImpl.java

@@ -9,10 +9,14 @@ import com.zhongzheng.modules.base.bo.ActivityAdvertisingAddBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingEditBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingQueryBo;
 import com.zhongzheng.modules.base.domain.ActivityAdvertising;
+import com.zhongzheng.modules.base.domain.ActivityAdvertisingLocation;
 import com.zhongzheng.modules.base.domain.Certificate;
 import com.zhongzheng.modules.base.mapper.ActivityAdvertisingMapper;
+import com.zhongzheng.modules.base.service.IActivityAdvertisingLocationService;
 import com.zhongzheng.modules.base.service.IActivityAdvertisingService;
+import com.zhongzheng.modules.base.service.IApplyAreasService;
 import com.zhongzheng.modules.base.vo.ActivityAdvertisingVo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -33,6 +37,9 @@ import java.util.stream.Collectors;
 @Service
 public class ActivityAdvertisingServiceImpl extends ServiceImpl<ActivityAdvertisingMapper, ActivityAdvertising> implements IActivityAdvertisingService {
 
+    @Autowired
+    private  IActivityAdvertisingLocationService iActivityAdvertisingLocationService;
+
     @Override
     public ActivityAdvertisingVo queryById(Long id){
         ActivityAdvertising db = this.baseMapper.selectById(id);
@@ -115,6 +122,12 @@ public class ActivityAdvertisingServiceImpl extends ServiceImpl<ActivityAdvertis
                 .eq(ActivityAdvertising::getAdvName,entity.getAdvName()).ne(ActivityAdvertising::getStatus,-1)
                 .last("limit 1"));
         if (Validator.isNotNull(info)) {
+            ActivityAdvertisingLocation location = iActivityAdvertisingLocationService.getOne(new LambdaQueryWrapper<ActivityAdvertisingLocation>()
+                    .eq(ActivityAdvertisingLocation::getLocationId,info.getLocationId()).ne(ActivityAdvertisingLocation::getStatus,-1)
+                    .last("limit 1"));
+            if(Validator.isEmpty(location)){
+                return false;
+            }
             if(Validator.isNotEmpty(entity.getId())){
                 if(entity.getId().longValue() != info.getId().longValue()){
                     return true;

+ 741 - 239
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -26,7 +26,18 @@ import com.zhongzheng.modules.base.mapper.CertificateTpMapper;
 import com.zhongzheng.modules.base.service.ICertificateTpService;
 import com.zhongzheng.modules.base.vo.CertificatePhotoVo;
 import com.zhongzheng.modules.base.vo.CertificateTpVo;
+import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
+import com.zhongzheng.modules.course.mapper.CourseMenuMapper;
+import com.zhongzheng.modules.course.service.ICourseMenuService;
+import com.zhongzheng.modules.course.service.ICourseModuleService;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
+import com.zhongzheng.modules.course.vo.CourseMenuVo;
+import com.zhongzheng.modules.course.vo.CourseModuleVo;
+import com.zhongzheng.modules.course.vo.CourseVo;
+import com.zhongzheng.modules.course.service.IMajorService;
+import com.zhongzheng.modules.course.vo.*;
+import com.zhongzheng.modules.goods.bo.GoodsCourseQueryBo;
+import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
@@ -81,7 +92,19 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private CourseMenuMapper courseMenuMapper;
+
+    @Autowired
+    private IGoodsCourseService iGoodsCourseService;
+
+    @Autowired
+    private ICourseMenuService iCourseMenuService;
 
+    @Autowired
+    private ICourseModuleService iCourseModuleService;
+    @Autowired
+    private IMajorService iMajorService;
     @Value("${certificate.host}")
     private String CERTIFICATE_HOST;
 
@@ -156,266 +179,420 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         if(Validator.isEmpty(bo.getUserId())||Validator.isEmpty(bo.getGradeId())||Validator.isEmpty(bo.getGoodsId())){
             throw new CustomException("数据错误");
         }
+        bo.setPageSize(null);
+        bo.setPageNum(null);
         GoodsVo goodsVo = iGoodsService.selectDetail(bo.getGoodsId());
         //获取培训开始时间
         UserStudyRecordQueryBo studyRecordQueryBo = new UserStudyRecordQueryBo();
         studyRecordQueryBo.setUserId(bo.getUserId());
         studyRecordQueryBo.setGoodsId(bo.getGoodsId());
         studyRecordQueryBo.setGradeId(bo.getGradeId());
-        UserStudyRecordVo studyRecordVo = iUserStudyRecordService.queryLast(studyRecordQueryBo);
+        UserStudyRecordVo studyRecordVo = iUserStudyRecordService.queryFirst(studyRecordQueryBo);
         //获取培训结束时间
         ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
                 .eq(ClassGradeUser::getUserId, bo.getUserId())
                 .eq(ObjectUtils.isNotNull(bo.getOrderGoodsId()),ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId())
                 .eq(ClassGradeUser::getGradeId,bo.getGradeId()).last("limit 1"));
-        //获取章列表
-        List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
         UserVo userVo = iUserService.queryById(bo.getUserId());
-        if(Validator.isNotEmpty(goodsVo.getCertificateTpId())){
-    //        String[] s = goodsVo.getCertificateIds().split(",");
-            List<Long> tpIds = new ArrayList<>();
+        if(Validator.isNotEmpty(goodsVo.getMoreCertificateStatus())&&goodsVo.getMoreCertificateStatus()==1){
+            //获取章列表
+            List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
+            BigDecimal totalTime = new BigDecimal(0);
+            BigDecimal publicTotalTime = new BigDecimal(0);
+            for(CourseChapterVo chapterVo : chapterList){
+                if(Validator.isEmpty(chapterVo.getCommonSign())||chapterVo.getCommonSign()==0){
+                    totalTime=totalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
+                }else if(chapterVo.getCommonSign()==1){
+                    publicTotalTime=publicTotalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
+                }
+
+            }
+            goodsVo.setClassHours(totalTime.divide(new BigDecimal(45*60),BigDecimal.ROUND_HALF_UP));
+            goodsVo.setPublicClassHours(publicTotalTime.divide(new BigDecimal(45*60),BigDecimal.ROUND_HALF_UP));
+            if(Validator.isNotEmpty(goodsVo.getCertificateTpId())){
+                //        String[] s = goodsVo.getCertificateIds().split(",");
+                List<Long> tpIds = new ArrayList<>();
            /* for(String each : s) {
                 tpIds.add(Long.valueOf(each));
             }*/
-            tpIds.add(goodsVo.getCertificateTpId());
-            CertificateTpQueryBo queryBo = new CertificateTpQueryBo();
-            queryBo.setTpIds(tpIds);
-            queryBo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
-            List<CertificateTpVo> list = selectListByBo(queryBo);
-            String nowDate = DateUtils.getDate();
-            for(CertificateTpVo tpVo : list){
-                if("certificate01".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYZC"+nowDate.substring(2, 4)+"01"+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("专业");
-                    vo.setMajor("网络班");
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath = drawPic(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-
-                }
-                else if("certificate02".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYZC"+nowDate.substring(2, 4)+"03"+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath = drawPic(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
+                tpIds.add(goodsVo.getCertificateTpId());
+                CertificateTpQueryBo queryBo = new CertificateTpQueryBo();
+                queryBo.setTpIds(tpIds);
+                queryBo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
+                List<CertificateTpVo> list = selectListByBo(queryBo);
 
+                for(CertificateTpVo tpVo : list){
+                    drawCertificate(tpVo,goodsVo,bo,userVo,studyRecordVo,classGradeUser,chapterList,null);
                 }
-                else if("certificate03".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX01YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
-                    }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中必修");
-                    vo.setRemark2("课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-                }
-                else if("certificate04".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
-                    }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中建");
-                    vo.setRemark2("筑工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-                }
-                else if("certificate05".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
-                    }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中机");
-                    vo.setRemark2("电工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-                }
-                else if("certificate06".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
-                    }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中市");
-                    vo.setRemark2("政公用工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-                }
-                else if("certificate07".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
+            }
+        }
+        else if(Validator.isNotEmpty(goodsVo.getMoreCertificateStatus())&&goodsVo.getMoreCertificateStatus()==2){
+            GoodsCourseQueryBo courseQueryBo = new GoodsCourseQueryBo();
+            courseQueryBo.setGoodsId(goodsVo.getGoodsId());
+            List<CourseVo> courseVoList = iGoodsCourseService.selectList(courseQueryBo);
+            for(CourseVo courseVo : courseVoList){
+                CourseMenuQueryBo menuQueryBo = new CourseMenuQueryBo();
+                menuQueryBo.setCourseId(courseVo.getCourseId());
+                menuQueryBo.setType(1);
+                List<CourseMenuVo> menuVoList = iCourseMenuService.queryList(menuQueryBo);
+                for(CourseMenuVo menuVo : menuVoList){
+                    bo.setModuleId(menuVo.getMenuId());
+                    bo.setMoreCertificateStatus(goodsVo.getMoreCertificateStatus());
+                    CourseModuleVo moduleVo = iCourseModuleService.queryById(bo.getModuleId());
+                    //获取章列表
+                    List<CourseChapterVo> chapterList =  iClassGradeUserService.findChapterList(bo);
+                    BigDecimal totalTime = new BigDecimal(0);
+                    for(CourseChapterVo chapterVo : chapterList){
+                        totalTime=totalTime.add(new BigDecimal(courseMenuMapper.countChapterTotalTime(chapterVo.getChapterId())));
                     }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中公");
-                    vo.setRemark2("路工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
-                }
-                else if("certificate08".equals(tpVo.getKeyValue())){
-                    CertificatePhotoVo vo = new CertificatePhotoVo();
-                    String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
-                    vo.setCode(code);
-                    vo.setRealname(userVo.getRealname());
-                    vo.setIdCard(userVo.getIdCard());
-                    String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
-                    vo.setYear(date.substring(0, 4));
-                    vo.setType("选修");
-                    vo.setMajor("网络班");
-                    String sex = "男";
-                    if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
-                        sex = "女";
+                    goodsVo.setClassHours(totalTime.divide(new BigDecimal(45*60),BigDecimal.ROUND_HALF_UP));
+                    List<Long> tpIds = new ArrayList<>();
+                    if(Validator.isNotEmpty(moduleVo.getCertificateTpId())){
+                        tpIds.add(moduleVo.getCertificateTpId());
+                        CertificateTpQueryBo queryBo = new CertificateTpQueryBo();
+                        queryBo.setTpIds(tpIds);
+                        queryBo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
+                        List<CertificateTpVo> list = selectListByBo(queryBo);
+
+                        for(CertificateTpVo tpVo : list){
+                            drawCertificate(tpVo,goodsVo,bo,userVo,studyRecordVo,classGradeUser,chapterList,bo.getModuleId());
+                        }
                     }
-                    vo.setSex(sex);
-                    vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
-                    vo.setDateY(nowDate.substring(0, 4));
-                    vo.setDateM(nowDate.substring(5, 7));
-                    vo.setDateD(nowDate.substring(8, 10));
-                    vo.setMajor("一级建造师继续教育培训");
-                    vo.setRemark1("其中水");
-                    vo.setRemark2("利水电课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
-                    vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
-                    vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
-                    List<String> chapterListTxt = changeChapterList(chapterList);
-                    vo.setChapterList(chapterListTxt);
-                    String ossPath =drawPicOneBuild(vo);
-                    UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath);
-                    iUserCertificateService.insertByAddBo(addBo);
                 }
             }
+
         }
+
         return null;
     }
 
-    private UserCertificateAddBo mergeData(ClassGradeUserQueryBo bo, GoodsVo goodsVo,CertificatePhotoVo vo,Long certificateTpId,String certificatePath){
+    private void  drawCertificate(CertificateTpVo tpVo,GoodsVo goodsVo,ClassGradeUserQueryBo bo,UserVo userVo,UserStudyRecordVo studyRecordVo,ClassGradeUser classGradeUser,List<CourseChapterVo> chapterList,Long moduleId){
+        String nowDate = DateUtils.getDate();
+        if("certificate01".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYZC"+nowDate.substring(2, 4)+"01"+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("专业");
+            vo.setMajor("网络班");
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath = drawPic(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+
+        }
+        else if("certificate02".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYZC"+nowDate.substring(2, 4)+"03"+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath = drawPic(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+
+        }
+        else if("certificate03".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX01YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中必修");
+            vo.setRemark2("课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate04".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中建");
+            vo.setRemark2("筑工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate05".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中机");
+            vo.setRemark2("电工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate06".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中市");
+            vo.setRemark2("政公用工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate07".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中公");
+            vo.setRemark2("路工程课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate08".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYPX02YJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            vo.setType("选修");
+            vo.setMajor("网络班");
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor("一级建造师继续教育培训");
+            vo.setRemark1("其中水");
+            vo.setRemark2("利水电课 "+goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+" 学时,测试成绩合格。");
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicOneBuild(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate09".equals(tpVo.getKeyValue())){
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            if(Validator.isEmpty(goodsVo.getMajorId())){
+                throw new CustomException("生成证书专业缺失");
+            }
+            if(Validator.isEmpty(userVo.getOneInchPhotos())){
+                throw new CustomException("生成证书一寸照片缺失");
+            }
+            MajorVo majorVo = iMajorService.queryById(goodsVo.getMajorId());
+            String onePhoto = userVo.getOneInchPhotos();
+            String code = "XYSGXC"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setOneInchPhotos(onePhoto);
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setPublicClassHours(goodsVo.getPublicClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor(majorVo.getCategoryName());
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicSGXC(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate10".equals(tpVo.getKeyValue())){
+            if(Validator.isEmpty(goodsVo.getMajorId())){
+                throw new CustomException("生成证书专业缺失");
+            }
+            MajorVo majorVo = iMajorService.queryById(goodsVo.getMajorId());
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYEZJJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor(majorVo.getCategoryName());
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList2(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicErZao(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+        else if("certificate11".equals(tpVo.getKeyValue())){
+            if(Validator.isEmpty(goodsVo.getMajorId())){
+                throw new CustomException("生成证书专业缺失");
+            }
+            MajorVo majorVo = iMajorService.queryById(goodsVo.getMajorId());
+            CertificatePhotoVo vo = new CertificatePhotoVo();
+            String code = "XYEJJJ"+nowDate.substring(0, 4)+getCertificateCode();
+            vo.setCode(code);
+            vo.setRealname(userVo.getRealname());
+            vo.setIdCard(userVo.getIdCard());
+            String date = DateUtils.timestampToDate(goodsVo.getCreateTime());
+            vo.setYear(date.substring(0, 4));
+            String sex = "男";
+            if(Validator.isNotEmpty(userVo.getSex())&&userVo.getSex()==2){
+                sex = "女";
+            }
+            vo.setSex(sex);
+            vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
+            vo.setDateY(nowDate.substring(0, 4));
+            vo.setDateM(nowDate.substring(5, 7));
+            vo.setDateD(nowDate.substring(8, 10));
+            vo.setMajor(majorVo.getCategoryName());
+            vo.setTrainStartTime(studyRecordVo.getFirstStartTime()); //培训开始时间
+            vo.setTrainEndTime(classGradeUser.getPeriodWaitTime());//学时变为待审核时间,也是学习完成时间
+            List<String> chapterListTxt = changeChapterList2(chapterList);
+            vo.setChapterList(chapterListTxt);
+            String ossPath =drawPicErJian(vo);
+            UserCertificateAddBo addBo = mergeData(bo,goodsVo,vo,tpVo.getTpId(),ossPath,moduleId);
+            iUserCertificateService.insertByAddBo(addBo);
+        }
+    }
+
+    private UserCertificateAddBo mergeData(ClassGradeUserQueryBo bo, GoodsVo goodsVo,CertificatePhotoVo vo,Long certificateTpId,String certificatePath,Long moduleId){
         UserCertificateAddBo addBo = new UserCertificateAddBo();
         addBo.setUserId(bo.getUserId());
         addBo.setGoodsId(bo.getGoodsId());
@@ -434,13 +611,16 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         addBo.setTrainStartTime(vo.getTrainStartTime());
         addBo.setTrainEndTime(vo.getTrainEndTime());
         addBo.setChapterStr(ArrayUtils.toString(vo.getChapterList(), ","));
+        addBo.setMoreCertificateStatus(goodsVo.getMoreCertificateStatus());
+        addBo.setModuleId(moduleId);
+        addBo.setPublicClassHours(goodsVo.getPublicClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP ));
         return addBo;
     }
     private String getCertificateCode(){
         Long id = iUserCertificateService.selectMaxId();
         String nowId = Long.toString(id);
         String result = "";
-        result = String.format("%0" + 4 + "d", Integer.parseInt(nowId) + 1);
+        result = String.format("%0" + 5 + "d", Integer.parseInt(nowId) + 1);
         return result;
     }
 
@@ -477,6 +657,57 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         return chapterListTxt;
     }
 
+    private List<String> changeChapterList2(List<CourseChapterVo> chapterList){
+        List<String> chapterListTxt = new ArrayList<>();
+        for(int i =0; i<chapterList.size(); i++){
+            String numTag = "";
+            if(i==0){
+                numTag = "1. ";
+            }
+            else if(i==1){
+                numTag = "2. ";
+            }
+            else if(i==2){
+                numTag = "3. ";
+            }
+            else if(i==3){
+                numTag = "4. ";
+            }
+            else if(i==4){
+                numTag = "5. ";
+            }
+            else if(i==5){
+                numTag = "6. ";
+            }
+            else if(i==6){
+                numTag = "7. ";
+            }
+            else if(i==7){
+                numTag = "8. ";
+            }
+            else if(i==8){
+                numTag = "9. ";
+            }
+            else if(i==9){
+                numTag = "10. ";
+            }
+            else if(i==10){
+                numTag = "11. ";
+            }
+            else if(i==11){
+                numTag = "12. ";
+            }
+            else if(i==12){
+                numTag = "13. ";
+            }
+            else if(i==13){
+                numTag = "14. ";
+            }
+            chapterListTxt.add(numTag+chapterList.get(i).getName());
+        }
+        return chapterListTxt;
+    }
+
     private String drawPic(CertificatePhotoVo entity){
         Font font = new Font("微软雅黑", Font.PLAIN, 45);// 添加字体的属性设置
         String projectUrl = "D:\\test\\";
@@ -574,9 +805,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             g.drawString(entity.getRemark1(), 1035, 408);
             g.drawString(entity.getRemark2(), 728, 460);
 
-            g.drawString(entity.getDateY(), 707, 677);
-            g.drawString(entity.getDateM(), 783, 677);
-            g.drawString(entity.getDateD(), 835, 677);
+
 
             g.drawString(entity.getDateY(), 945, 677);
             g.drawString(entity.getDateM(), 1019, 677);
@@ -610,6 +839,279 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         return imgName;
     }
 
+    private  String drawPicSGXC(CertificatePhotoVo entity){
+        Font font = new Font("微软雅黑", Font.PLAIN, 55);// 添加字体的属性设置 微软雅黑
+        Font font2 = new Font("微软雅黑", Font.BOLD, 58);
+        String imgName = null;
+        try {
+            // 加载图片
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/004.jpg");
+            //        String imageLocalUrl = projectUrl + "003.jpg";
+            //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
+            BufferedImage imageLocal = ImageIO.read(imgStream);
+            // 以本地图片为模板
+            Graphics2D g = imageLocal.createGraphics();
+            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+            // 设置文本样式
+            g.setFont(font);
+            g.setColor(Color.BLACK);
+
+            InputStream oneInchPhotos =  ossService.getStreamByObject(entity.getOneInchPhotos());
+            BufferedImage oneInchBuffered = ImageIO.read(oneInchPhotos);
+            g.drawImage(oneInchBuffered, 430, 960, 300, 400, null);
+
+
+
+            g.drawString(entity.getCode(), 1235, 1245);
+            g.drawString(entity.getRealname(), 1235, 1011);
+            g.drawString(entity.getIdCard(), 1235, 1126);
+            g.drawString(entity.getMajor(), 1235, 1368);
+/*
+            g.drawString(entity.getDateY(), 780, 365);
+            g.drawString(entity.getDateM(), 905, 365);
+
+            g.drawString(entity.getRemark1(), 1035, 408);
+            g.drawString(entity.getRemark2(), 728, 460);
+*/
+
+            g.drawString(entity.getDateY(), 1332, 2973);
+            g.drawString(entity.getDateM(), 1594, 2973);
+            g.drawString(entity.getDateD(), 1781, 2973);
+
+            g.setFont(font2);
+            g.drawString(entity.getRealname(), 455, 1616);
+            g.drawString(entity.getDateY()+"年"+entity.getDateM()+"月"+entity.getDateD()+"日", 846, 1616);
+            g.drawString("施工现场专业人员", 1508, 1616);
+
+            g.drawString(entity.getDateY(), 311, 1770);
+            g.drawString(String.valueOf(Integer.parseInt(entity.getPublicClassHours())+Integer.parseInt(entity.getClassHours())), 1341, 1770);
+
+            g.drawString(entity.getPublicClassHours(), 311, 1920);
+            g.drawString(entity.getClassHours(), 881, 1920);
+
+            InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
+            BufferedImage logoBuffered = ImageIO.read(logoStream);
+            g.drawImage(logoBuffered, 1438, 2555, 529, 528, null);
+
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 360, 360);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 324, 2583, 360, 360, null);
+            // 完成模板修改
+            g.dispose();
+            // 获取新文件的地址
+            // 生成新的合成过的用户二维码并写入新图片
+            //        ImageIO.write(imageLocal, "jpg", outputfile);
+            //上传OSS
+            InputStream is =  bufferedImageToInputStream(imageLocal);
+            String ossPath = ossService.uploadInputStream(is,7);
+            if(imgStream!=null){
+                imgStream.close();
+            }
+            return ossPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // 返回给页面的图片地址(因为绝对路径无法访问)
+        //    imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";
+
+        return imgName;
+    }
+
+    private  String drawPicErZao(CertificatePhotoVo entity){
+        Font font = new Font("微软雅黑", Font.PLAIN, 31);// 添加字体的属性设置 微软雅黑
+        Font font2 = new Font("微软雅黑", Font.BOLD, 38);
+        String imgName = null;
+        try {
+            // 加载本地图片
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/005.jpg");
+            //        String imageLocalUrl = projectUrl + "003.jpg";
+            //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
+            BufferedImage imageLocal = ImageIO.read(imgStream);
+            // 以本地图片为模板
+            Graphics2D g = imageLocal.createGraphics();
+            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+            // 设置文本样式
+            g.setFont(font2);
+            g.setColor(Color.BLACK);
+            g.drawString(entity.getRealname(), 165, 486);
+
+            g.setFont(font);
+
+            g.drawString(entity.getCode(), 169, 236 );
+
+            g.drawString(entity.getRealname(), 126, 696);
+
+            g.drawString(entity.getIdCard(), 298, 696);
+
+            g.drawString("二级注册造价师", 677, 668);
+            if("必修".equals(entity.getMajor())){
+                g.drawString(entity.getMajor(), 768, 718);
+            }else{
+                g.drawString("选修("+entity.getMajor()+")", 677, 718);
+            }
+
+
+            if("必修".equals(entity.getMajor())){
+                g.drawString(entity.getClassHours(), 980, 696);
+                g.drawString("0", 1105, 696);
+            }else{
+                g.drawString("0", 980, 696);
+                g.drawString(entity.getClassHours(), 1105, 696);
+            }
+            Integer startY = 810;
+            Integer j = 0;
+            for(String name : entity.getChapterList()){
+                if(j<6){
+                    g.drawString(name, 300, startY);
+                    startY+=50;
+                }else{
+                    g.drawString("....", 300, startY);
+                    break;
+                }
+                j++;
+            }
+
+            g.drawString(DateUtils.timestampToDateFormat(entity.getTrainStartTime(),"yyyy.MM.dd"), 1214, 666);
+            g.drawString("至", 1279, 705);
+            g.drawString(DateUtils.timestampToDateFormat(entity.getTrainEndTime(),"yyyy.MM.dd"), 1214, 739);
+
+
+            g.drawString(entity.getDateY(), 842, 1967);
+            g.drawString(entity.getDateM(), 979, 1967);
+            g.drawString(entity.getDateD(), 1069, 1967);
+
+            InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
+            BufferedImage logoBuffered = ImageIO.read(logoStream);
+            g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 150, 150);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 1233, 175, 150, 150, null);
+            // 完成模板修改
+            g.dispose();
+            // 获取新文件的地址
+            // 生成新的合成过的用户二维码并写入新图片
+            //        ImageIO.write(imageLocal, "jpg", outputfile);
+            //上传OSS
+            InputStream is =  bufferedImageToInputStream(imageLocal);
+            String ossPath = ossService.uploadInputStream(is,7);
+            if(imgStream!=null){
+                imgStream.close();
+            }
+            return ossPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // 返回给页面的图片地址(因为绝对路径无法访问)
+        //    imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";
+
+        return imgName;
+    }
+
+    private  String drawPicErJian(CertificatePhotoVo entity){
+        Font font = new Font("微软雅黑", Font.PLAIN, 31);// 添加字体的属性设置 微软雅黑
+        Font font2 = new Font("微软雅黑", Font.BOLD, 38);
+        String imgName = null;
+        try {
+            // 加载本地图片
+            InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/006.jpg");
+            //        String imageLocalUrl = projectUrl + "003.jpg";
+            //         BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
+            BufferedImage imageLocal = ImageIO.read(imgStream);
+            // 以本地图片为模板
+            Graphics2D g = imageLocal.createGraphics();
+            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+            // 设置文本样式
+            g.setFont(font2);
+            g.setColor(Color.BLACK);
+            g.drawString(entity.getRealname(), 165, 486);
+
+            g.setFont(font);
+
+            g.drawString(entity.getCode(), 169, 236 );
+
+            g.drawString(entity.getRealname(), 126, 696);
+
+            g.drawString(entity.getIdCard(), 298, 696);
+
+            g.drawString("二级注册建造师", 677, 668);
+            if("必修".equals(entity.getMajor())){
+                g.drawString(entity.getMajor(), 768, 718);
+            }else{
+                g.drawString("选修("+entity.getMajor()+")", 677, 718);
+            }
+
+
+            if("必修".equals(entity.getMajor())){
+                g.drawString(entity.getClassHours(), 980, 696);
+                g.drawString("0", 1105, 696);
+            }else{
+                g.drawString("0", 980, 696);
+                g.drawString(entity.getClassHours(), 1105, 696);
+            }
+            Integer startY = 810;
+            Integer j = 0;
+            for(String name : entity.getChapterList()){
+                if(j<14){
+                    g.drawString(name, 300, startY);
+                    startY+=50;
+                }else{
+                    g.drawString("....", 300, startY);
+                    break;
+                }
+                j++;
+            }
+
+            g.drawString(DateUtils.timestampToDateFormat(entity.getTrainStartTime(),"yyyy.MM.dd"), 1214, 666);
+            g.drawString("至", 1279, 705);
+            g.drawString(DateUtils.timestampToDateFormat(entity.getTrainEndTime(),"yyyy.MM.dd"), 1214, 739);
+
+
+            g.drawString(entity.getDateY(), 842, 1967);
+            g.drawString(entity.getDateM(), 979, 1967);
+            g.drawString(entity.getDateD(), 1069, 1967);
+
+            InputStream logoStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/001.png");
+            BufferedImage logoBuffered = ImageIO.read(logoStream);
+            g.drawImage(logoBuffered, 1012, 1666, 330, 330, null);
+
+            //二维码
+            String qrTxt = CERTIFICATE_HOST+"pages/certificate/index?code="+entity.getCode();
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(qrTxt, BarcodeFormat.QR_CODE, 150, 150);
+            BufferedImage qrImage = toBufferedImage(bitMatrix);
+            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
+            g.drawImage(qrImage, 1233, 175, 150, 150, null);
+            // 完成模板修改
+            g.dispose();
+            // 获取新文件的地址
+            // 生成新的合成过的用户二维码并写入新图片
+            //        ImageIO.write(imageLocal, "jpg", outputfile);
+            //上传OSS
+            InputStream is =  bufferedImageToInputStream(imageLocal);
+            String ossPath = ossService.uploadInputStream(is,7);
+            if(imgStream!=null){
+                imgStream.close();
+            }
+            return ossPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // 返回给页面的图片地址(因为绝对路径无法访问)
+        //    imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";
+
+        return imgName;
+    }
+
+
     public InputStream bufferedImageToInputStream(BufferedImage image){
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         try {

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/CertificatePhotoVo.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -24,6 +25,8 @@ public class CertificatePhotoVo {
 	private String realname;
 	@ApiModelProperty("身份证号")
 	private String idCard;
+	@ApiModelProperty("一寸照片")
+	private String oneInchPhotos;
 
 	@ApiModelProperty("年份")
 	private String year;
@@ -54,5 +57,8 @@ public class CertificatePhotoVo {
 	/** 培训结束时间 */
 	@ApiModelProperty("培训结束时间")
 	private Long trainEndTime;
+	@Excel(name = "公共学时")
+	@ApiModelProperty("公共学时")
+	private String publicClassHours;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseAddBo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.bo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -81,4 +82,5 @@ public class CourseAddBo {
     /** 优选生成 0否 1是 */
     @ApiModelProperty("优选生成 0否 1是")
     private Integer firstChoice;
+
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseEditBo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.bo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -99,4 +100,5 @@ public class CourseEditBo {
     /** 优选生成 0否 1是 */
     @ApiModelProperty("优选生成 0否 1是")
     private Integer firstChoice;
+
 }

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleAddBo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.bo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -53,4 +54,17 @@ public class CourseModuleAddBo {
     /** 赠送卷ID */
     @ApiModelProperty("赠送卷ID")
     private Long freeExamId;
+
+    @ApiModelProperty("公共标识:1公共章 0非公共章")
+    private Integer commonSign;
+    /** 证书类型ID */
+    @ApiModelProperty("证书类型ID")
+    private Long certificateTypeId;
+    /** 证书ID */
+    @ApiModelProperty("证书ID")
+    private Long certificateId;
+    /** 证书模板ID */
+    @ApiModelProperty("证书模板ID")
+    private Long certificateTpId;
+
 }

+ 16 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleEditBo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.bo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -63,4 +64,19 @@ public class CourseModuleEditBo {
     @ApiModelProperty("赠送卷ID")
     private Long freeExamId;
 
+    /** 证书类型ID */
+    @Excel(name = "证书类型ID")
+    @ApiModelProperty("证书类型ID")
+    private Long certificateTypeId;
+    /** 证书ID */
+    @Excel(name = "证书ID")
+    @ApiModelProperty("证书ID")
+    private Long certificateId;
+    /** 证书模板ID */
+    @Excel(name = "证书模板ID")
+    @ApiModelProperty("证书模板ID")
+    private Long certificateTpId;
+    @ApiModelProperty("公共标识:1公共章 0非公共章")
+    private Integer commonSign;
+
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/Course.java

@@ -75,4 +75,5 @@ private static final long serialVersionUID=1L;
     /** 优选生成 0否 1是 */
     private Integer firstChoice;
 
+
 }

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseModule.java

@@ -52,4 +52,16 @@ private static final long serialVersionUID=1L;
     @TableField(exist = false)
     private Long oId;
 
+    /** 证书类型ID */
+    @TableField(updateStrategy=FieldStrategy.IGNORED)
+    private Long certificateTypeId;
+    /** 证书ID */
+    @TableField(updateStrategy=FieldStrategy.IGNORED)
+    private Long certificateId;
+    /** 证书模板ID */
+    @TableField(updateStrategy=FieldStrategy.IGNORED)
+    private Long certificateTpId;
+    /** 公共标识:1公共章 0非公共章 */
+    private String commonSign;
+
 }

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

@@ -39,6 +39,8 @@ public interface CourseMapper extends BaseMapper<Course> {
 
     List<GoodsUserVo> goodsList(CourseQueryBo bo);
 
+    List<GoodsUserVo> goodsProgressList(CourseQueryBo bo);
+
     List<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo);
 
     List<GoodsUserVo> goodsHandoutsList(CourseQueryBo bo);

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

@@ -215,7 +215,7 @@ public class CourseBusinessServiceImpl extends ServiceImpl<CourseBusinessMapper,
     }
 
     @Override
-    public boolean editPeriodUserIds(CourseBusinessEditBo bo) {
+    public boolean  editPeriodUserIds(CourseBusinessEditBo bo) {
         LambdaUpdateWrapper<CourseBusiness> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
         objectLambdaUpdateWrapper.eq(CourseBusiness::getId, bo.getId());
         objectLambdaUpdateWrapper.set(CourseBusiness::getPeriodUserIds, bo.getPeriodUserIds());

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseMenuServiceImpl.java

@@ -181,7 +181,7 @@ public class CourseMenuServiceImpl extends ServiceImpl<CourseMenuMapper, CourseM
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateByEditBo(CourseMenuListAddBo bo) {
-        boolean result = false;
+        boolean result = true;
         remove(new LambdaQueryWrapper<CourseMenu>().eq(CourseMenu::getCourseId, bo.getCourseId()));
         for(int i=0;i<bo.getMenuList().size();i++){
             CourseMenu add = BeanUtil.toBean(bo.getMenuList().get(i), CourseMenu.class);

+ 15 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -304,9 +304,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             }
         }
         if(entity.getCourseId()!=null){
-            if(baseMapper.checkCourseHaveStudy(entity.getCourseId()).longValue()>0){
+           /* if(baseMapper.checkCourseHaveStudy(entity.getCourseId()).longValue()>0){
                 throw new CustomException("该课程绑定的商品已有学习数据,无法操作");
-            }
+            }*/
         }
     }
 
@@ -561,7 +561,7 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             }
             goodsUserVo.setSecAllNum(secLong);
             goodsUserVo.setStuAllNum(studyLong);
-            goodsUserVo.setSubscribeSign(2);
+            goodsUserVo.setSubscribeSign(0);
 
 
             //查询对应考试安排
@@ -579,9 +579,14 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                             .last("limit 1"));
                     if (ObjectUtils.isNull(userSubscribe)){
                         goodsUserVo.setSubscribeSign(1);
-                    }else if (userSubscribe.getSubscribeStatus() == 1 && userSubscribe.getExamStatus() == 0){
+                    }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){
+                    }else if (ObjectUtils.isNotNull(userSubscribe.getResult()) && userSubscribe.getResult() == 0){
                         goodsUserVo.setSubscribeSign(3);
                     }
                 }
@@ -798,10 +803,12 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                             .last("limit 1"));
                     if (ObjectUtils.isNull(userSubscribe)){
                         goodsUserVo.setSubscribeSign(1);
-                    }else if (userSubscribe.getSubscribeStatus() == 1 && userSubscribe.getExamStatus() == 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 && userSubscribe.getExamStatus() == 0){
+                    }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);
@@ -956,7 +963,7 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
 
     @Override
     public List<GoodsUserVo> goodsProgressList(CourseQueryBo bo) {
-        List<GoodsUserVo> goodsUserVos = baseMapper.goodsList(bo);
+        List<GoodsUserVo> goodsUserVos = baseMapper.goodsProgressList(bo);
         //用户课程得详细信息
         for (GoodsUserVo goodsUserVo : goodsUserVos) {
             //获得当前所在班级

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterVo.java

@@ -83,4 +83,6 @@ public class CourseChapterVo {
 	private String importNo;
 	@ApiModelProperty("公共标识:1公共章 0非公共章")
 	private Integer commonSign;
+	@ApiModelProperty("节总时间")
+	private Long totalTime;
 }

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseModuleVo.java

@@ -82,4 +82,21 @@ public class CourseModuleVo {
 	private Long freeExamId;
 	@ApiModelProperty("赠送卷名称")
 	private String freeExamName;
+
+	/** 证书类型ID */
+	@Excel(name = "证书类型ID")
+	@ApiModelProperty("证书类型ID")
+	private Long certificateTypeId;
+	/** 证书ID */
+	@Excel(name = "证书ID")
+	@ApiModelProperty("证书ID")
+	private Long certificateId;
+	/** 证书模板ID */
+	@Excel(name = "证书模板ID")
+	@ApiModelProperty("证书模板ID")
+	private Long certificateTpId;
+
+	@ApiModelProperty("公共标识:1公共章 0非公共章")
+	private Integer commonSign;
+
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java

@@ -121,4 +121,5 @@ public class CourseVo {
 	@Excel(name = "优选生成 0否 1是")
 	@ApiModelProperty("优选生成 0否 1是")
 	private Integer firstChoice;
+
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -597,7 +597,7 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
         //获取试卷业务层次信息
         QuestionBusiness business = iQuestionBusinessService.getOne(new LambdaQueryWrapper<QuestionBusiness>()
                 .eq(QuestionBusiness::getMajorId, bo.getExamId())
-                .eq(QuestionBusiness::getType, 2));
+                .eq(QuestionBusiness::getType, 2).last("limit 1"));
         if (ObjectUtils.isNull(business)) {
             throw new CustomException("获取试卷业务层次信息失败");
         }

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

@@ -211,4 +211,7 @@ public class GoodsAddBo {
     /** 优选生成商品 0否 1是 */
     @ApiModelProperty("优选生成商品 0否 1是")
     private Long firstChoiceGoods;
+    /** 1单证书 2多证书 */
+    @ApiModelProperty("1单证书 2多证书")
+    private Integer moreCertificateStatus;
 }

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

@@ -245,4 +245,7 @@ public class GoodsEditBo {
     /** 优选生成商品 0否 1是 */
     @ApiModelProperty("优选生成商品 0否 1是")
     private Long firstChoiceGoods;
+    /** 1单证书 2多证书 */
+    @ApiModelProperty("1单证书 2多证书")
+    private Integer moreCertificateStatus;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListBo.java

@@ -23,6 +23,9 @@ public class UserGoodsListBo implements Serializable {
     @ApiModelProperty("密码")
     private String password;
 
+    @ApiModelProperty("密码检测标签:1检测 2不检测")
+    private Integer passwordSign;
+
     @ApiModelProperty("当前时间戳")
     @NotBlank(message = "当前时间戳不能为空")
     private Long stamp;

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

@@ -176,4 +176,6 @@ private static final long serialVersionUID=1L;
     private Long minClassHour;
     /** 优选生成商品 0否 1是 */
     private Long firstChoiceGoods;
+    /** 1单证书 2多证书 */
+    private Integer moreCertificateStatus;
 }

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

@@ -151,7 +151,7 @@ public interface IGoodsService extends IService<Goods> {
 
 	String getBusinessName(Long goodsId);
 
-	List<UserOrderGoodsListVo> getUserOrderGoods(UserGoodsListBo bo);
+	UserNewGoodsVo getUserOrderGoods(UserGoodsListBo bo);
 
 	Map<String,String> checkUserAccount(UserGoodsListBo bo);
 

Разница между файлами не показана из-за своего большого размера
+ 460 - 458
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java


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

@@ -129,6 +129,10 @@ public class GoodsVo {
 	@Excel(name = "学时")
 	@ApiModelProperty("学时")
 	private BigDecimal classHours;
+
+	@Excel(name = "公共学时")
+	@ApiModelProperty("公共学时")
+	private BigDecimal publicClassHours;
 	/** 标准价格详情json */
 	@Excel(name = "标准价格详情json")
 	@ApiModelProperty("标准价格详情json")
@@ -390,4 +394,8 @@ public class GoodsVo {
 	private Long firstChoiceGoods;
 	@ApiModelProperty("业务别名")
 	private String aliasName;
+	/** 1单证书 2多证书 */
+	@Excel(name = "1单证书 2多证书")
+	@ApiModelProperty("1单证书 2多证书")
+	private Integer moreCertificateStatus;
 }

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/UserNewGoodsVo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年11月08日 9:04
+ */
+@Data
+public class UserNewGoodsVo implements Serializable {
+
+    @ApiModelProperty("课程名称")
+    private List<String> goodsNames;
+
+    @ApiModelProperty("H5跳转路径")
+    private String h5Url;
+
+    @ApiModelProperty("pc跳转路径")
+    private String pcUrl;
+
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java

@@ -304,4 +304,7 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 
 	private List<WeekDataVo> weekList;
 
+	@ApiModelProperty("1单证书 2多证书")
+	private Integer moreCertificateStatus;
+
 }

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

@@ -318,7 +318,10 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             else if (("继续教育二级建造师".equals(businessName)) || ("继续教育二级造价师".equals(businessName))){
                 erJfalg = true;
                 ezJfalg = "继续教育二级造价师".equals(businessName);
-                add.setOfficialName(ServletUtils.getEncoded("PIY"));
+                if (ObjectUtils.isNotNull(bo.getClassStatus()) && bo.getClassStatus() == 0){
+                    //预开班
+                    add.setOfficialName(ServletUtils.getEncoded("PIY"));
+                }
             }
         }
         //是否创建官方班级编号

+ 38 - 12
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -31,9 +31,11 @@ import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.course.bo.CourseProjectTypeQueryBo;
 import com.zhongzheng.modules.course.service.ICourseBusinessService;
 import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
+import com.zhongzheng.modules.course.service.ICourseModuleService;
 import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
 import com.zhongzheng.modules.course.vo.CourseChapterVo;
+import com.zhongzheng.modules.course.vo.CourseModuleVo;
 import com.zhongzheng.modules.course.vo.CourseProjectTypeVo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
@@ -183,9 +185,13 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     private IUserPeriodService iUserPeriodService;
 
+    @Autowired
+    private ICourseModuleService iCourseModuleService;
+
     @Autowired
     private ISysOldOrgService sysOldOrgService;
 
+
     private String SEVEN_OFFICIALPUSH_INFOACCOUNT;
     private String SEVEN_OFFICIALPUSH_TOKEN;
 
@@ -470,6 +476,10 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         ClassPeriodUserVo classPeriodUserVos = classPeriodUserVos1.get(0);
         classPeriodUserVos.setPending(classPeriodStudentVo.getSecAllNum() - classPeriodUserVos.getPass() - classPeriodUserVos.getCheat());
         classPeriodUserVos.setExamPending(classPeriodUserVos.getExamNum() - classPeriodUserVos.getExamPass() - classPeriodUserVos.getExamCheat());
+        classPeriodStudentVo.setPending(classPeriodUserVos.getPending());
+        classPeriodStudentVo.setExamPending(classPeriodUserVos.getExamPending());
+        classPeriodStudentVo.setCheat(classPeriodUserVos.getCheat());
+        classPeriodStudentVo.setExamCheat(classPeriodUserVos.getExamCheat());
         //當前班級學員審核狀態 -1不可审核 0待審  1未通过 2通过 3审核中
         Integer gradePeriodStatus = 0; //班级里的审核状态字段,保持一致 0 未通过 1通过 2待审核 -1 不可审核 3审核中
         if (Validator.isEmpty(classPeriodStudentVo.getSecAllNum()) || classPeriodStudentVo.getSecAllNum() == 0) {
@@ -740,6 +750,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(orderGoods.getSevenYear())) {
             return "商品年份缺失";
         }
+        if (orderGoods.getSevenYear().equals("2021")||orderGoods.getSevenYear().equals("2022")) {
+            return "2021/2022无法报名";
+        }
         if(Validator.isNotEmpty(configService.selectConfigByKeyNoCache("seven.office.account"))){
             SEVEN_OFFICIALPUSH_INFOACCOUNT = configService.selectConfigByKeyNoCache("seven.office.account");
             SEVEN_OFFICIALPUSH_TOKEN = configService.selectConfigByKeyNoCache("seven.office.token");
@@ -824,7 +837,14 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(datetime)) {
             throw new CustomException("数据错误");
         }
+        if(Validator.isNotEmpty(idCard)){
+            idCard = idCard.trim();
+        }
+        if(Validator.isNotEmpty(datetime)){
+            datetime = datetime.trim();
+        }
         String datetimeStr = datetime.substring(0, 8);
+        log.info("学时抽查"+idCard+"RR"+datetime);
         if (!DateUtils.dateTimeNow(DateUtils.YYYYMMDD).equals(datetimeStr)) {
             throw new CustomException("数据错误");
         }
@@ -912,6 +932,16 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(datetime)) {
             throw new CustomException("数据错误");
         }
+        if(Validator.isNotEmpty(idCard)){
+            idCard = idCard.trim();
+        }
+        if(Validator.isNotEmpty(datetime)){
+            datetime = datetime.trim();
+        }
+        if(Validator.isNotEmpty(year)){
+            year = year.trim();
+        }
+        log.info("七大员学时抽查"+idCard+"RR"+datetime+"RR"+year);
         String datetimeStr = datetime.substring(0, 8);
         if (!DateUtils.dateTimeNow(DateUtils.YYYYMMDD).equals(datetimeStr)) {
             throw new CustomException("数据错误");
@@ -966,14 +996,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         studentVo.setGoodsName(goods.getGoodsName());
         studentVo.setFullName(fullName);
         studentVo.setOrderGoodsId(orderGoods.getOrderGoodsId());
-        String userName = "erjian";
-        if(fullName.equals("继续教育二级建造师")){
-            studentVo.setGradeType(1);
-        }
-        if(fullName.equals("继续教育二级造价师")){
-            studentVo.setGradeType(2);
-            userName = "erzao";
-        }
+        String userName = "施工继教";
         SysUser sysUser = iSysUserService.getOne(new LambdaQueryWrapper<SysUser>()
                 .eq(SysUser::getUserName, userName).last("limit 1"));
         LoginUser loginUser = new LoginUser();
@@ -1190,7 +1213,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(orderGoods)) {
             return "班级商品不存在";
         }
-
+        if (orderGoods.getSevenYear().equals("2021")||orderGoods.getSevenYear().equals("2022")) {
+            return "2021/2022无法报名";
+        }
        /* UserProfile userProfile = iUserProfileService.getOne(new LambdaQueryWrapper<UserProfile>()
                 .eq(UserProfile::getUserId, bo.getUserId()).eq(UserProfile::getGoodsId, orderGoods.getGoodsId())
                 .eq(UserProfile::getCurrentStatus, 1).eq(UserProfile::getTypeStatus, 1)
@@ -2763,6 +2788,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         for (ClassPeriodVo classPeriodVo : classPeriodVos) {
             //为模块搜索下面的章 和节 并搜索学时记录
             if (classPeriodVo.getType() == 1) {
+                CourseModuleVo moduleVo = iCourseModuleService.queryById(classPeriodVo.getId());
                 List<ClassPeriodChapterVo> classPeriodChapterVos = baseMapper.listperiodChapter(classPeriodVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), bo.getGradeId(),bo.getOrderGoodsId());
                 Collections.sort(classPeriodChapterVos);
                 classPeriodChapterVos.addAll(baseMapper.listperiodModuleExam(bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), classPeriodVo.getId()));
@@ -2803,7 +2829,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                                         classPeriodSectionVo.setStudyStartTime(photoList.get(0).getCreateTime());
                                     }
                                     if ((startTotalTime == 0L && Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime())) || (Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime()) && (startTotalTime.longValue() > classPeriodSectionVo.getStudyStartTime().longValue()))) {
-                                        if(og.getSevenClassCopy()==1||classPeriodChapterVo.getCommonSign()==0){
+                                        if(og.getSevenClassCopy()==1||moduleVo.getCommonSign()==0){
                                             startTotalTime = classPeriodSectionVo.getStudyStartTime();
                                         }
                                     }
@@ -2964,7 +2990,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                                 startTotalTime = classPeriodSectionVo.getStudyStartTime();
                             }
                         }
-                        if (endTotalTime == 0L || (Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime()) && endTotalTime.longValue() < classPeriodSectionVo.getStudyEndTime().longValue())) {
+                        if ((endTotalTime == 0L&&Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime())) || (Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime()) && endTotalTime.longValue() < classPeriodSectionVo.getStudyEndTime().longValue())) {
                             endTotalTime = classPeriodSectionVo.getStudyEndTime();
                         }
                         classPeriodSectionVo.setPeriodStatus(userPeriodStatusVo.getPeriodStatus());
@@ -2976,7 +3002,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                         if (Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime()) && ChapterEndTime.longValue() < classPeriodSectionVo.getStudyEndTime().longValue()) {
                             ChapterEndTime = classPeriodSectionVo.getStudyEndTime();
                         }
-                        if (ChapterStartTime == 0L || ChapterStartTime.longValue() > classPeriodSectionVo.getStudyStartTime().longValue()) {
+                        if ((ChapterStartTime == 0L&&Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime()) )|| (Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime())&&ChapterStartTime.longValue() > classPeriodSectionVo.getStudyStartTime().longValue())) {
                             ChapterStartTime = classPeriodSectionVo.getStudyStartTime();
                         }
                     }

+ 22 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -76,6 +76,7 @@ import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxLoginService;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -199,6 +200,9 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     @Autowired
     private ICourseChapterService iCourseChapterService;
 
+    @Autowired
+    private ICourseModuleService iCourseModuleService;
+
     @Value("${oldStudySys.syncPath}")
     private String SYNC_PATH;
 
@@ -421,6 +425,16 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             userPeriods.eq(UserPeriodStatus::getStatus, 2);
             userPeriodStatusService.update(userPeriodStatus, userPeriods);
 
+            CourseModuleVo moduleVo = iCourseModuleService.queryById(period.getModuleId());
+            if(Validator.isNotEmpty(moduleVo)&&Validator.isNotEmpty(moduleVo.getCommonSign())&&moduleVo.getCommonSign()==1){
+                if(bo.getStatus()==0){
+                    LambdaUpdateWrapper<OrderGoods> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    objectLambdaUpdateWrapper.eq(OrderGoods::getOrderGoodsId, period.getOrderGoodsId());
+                    objectLambdaUpdateWrapper.set(OrderGoods::getSevenClassStatus, 4);
+                    iOrderGoodsService.update(null, objectLambdaUpdateWrapper);
+                }
+            }
+
             CourseChapterVo chapterVo = iCourseChapterService.queryById(period.getChapterId());
             if(Validator.isNotEmpty(chapterVo)&&Validator.isNotEmpty(chapterVo.getCommonSign())&&chapterVo.getCommonSign()==1){
                 if(bo.getStatus()==0){
@@ -463,6 +477,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
 
     //学时审核确定通过
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean confirmPeriod(UserPeriodEditBo bo) {
         ClassGradeUser classGradeUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
                 .eq(ClassGradeUser::getUserId, bo.getUserId())
@@ -957,6 +972,9 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             respone = HttpUtils.postFormBody(SYNC_PATH, params);
             log.info("学时推送业务系统结果"+respone,"");
             if (!respone.contains("\"Status\":true")) {
+                if(Validator.isNotEmpty(respone)){
+                    respone = StringUtils.left(respone,300);
+                }
                 objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldResult, respone);
                 objectLambdaUpdateWrapper.set(ClassGradeUser::getToOldStatus, -1);
                 iClassGradeUserService.update(null, objectLambdaUpdateWrapper);
@@ -1100,7 +1118,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryByName("二建继教学时初审通过");
             String content = "";
-            if (!CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
+            if (Validator.isNotEmpty(informRemindVo)&&!CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
                 if (informRemindVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
                     informUserAddBo.setUserId(bo.getUserId());
@@ -1145,7 +1163,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             }
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("二建继教学时初审不通过");
-            if (!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
+            if (Validator.isNotEmpty(informRemindTwoVo)&&!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
                 String content = "";
                 if (informRemindTwoVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
@@ -1210,7 +1228,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         GoodsVo goodsVo1 = iGoodsService.queryById(bo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryByName("七大员新考学时初审通过");
-            if (!CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
+            if (Validator.isNotEmpty(informRemindVo)&&!CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
                 if (informRemindVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();
                     informUserAddBo.setUserId(bo.getUserId());
@@ -1281,7 +1299,7 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
             }
         } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryByName("七大员新考学时初审不通过");
-            if (!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
+            if (Validator.isNotEmpty(informRemindTwoVo)&&!CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness()) && !CollectionUtils.isEmpty(informRemindTwoVo.getInformRemindBusiness().stream().filter(informRemindBusinessVo -> informRemindBusinessVo.getBusinessId().equals(goodsVo1.getBusinessId())).collect(Collectors.toList()))) {
                 String content = "";
                 if (informRemindTwoVo.getWayStatus().equals(1)) {
                     InformUserAddBo informUserAddBo = new InformUserAddBo();

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java

@@ -231,4 +231,12 @@ public class ClassPeriodStudentVo {
 	private String token;
 	private Long orderGoodsId;
 	private String sevenYear;
+	@ApiModelProperty("視頻待审")
+	private Long pending;
+	@ApiModelProperty("試卷待审")
+	private Long examPending;
+	@ApiModelProperty("視頻作弊节")
+	private Long cheat;
+	@ApiModelProperty("試卷作弊节")
+	private Long examCheat;
 }

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

@@ -9,6 +9,7 @@ import com.zhongzheng.modules.order.bo.OrderQueryBo;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderListVo;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -61,4 +62,6 @@ public interface OrderMapper extends BaseMapper<Order> {
 
     @InterceptorIgnore(tenantLine = "true")
     Integer getStudeCountByCodeNoTenant(String sevenCode);
+
+    List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
 }

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

@@ -10,6 +10,7 @@ import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderListVo;
 import com.zhongzheng.modules.order.vo.OrderVo;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -122,4 +123,5 @@ public interface IOrderService extends IService<Order> {
 
 	QuestionOpenImportVo questionGoodsOpenImport(List<QuestionOpenImportBo> importBoList,Long userId,String userName);
 
+    List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
 }

+ 30 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -18,10 +18,13 @@ import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
+import com.zhongzheng.modules.base.domain.ProfileTp;
 import com.zhongzheng.modules.base.domain.ShoppingCart;
 import com.zhongzheng.modules.base.domain.UserProfile;
+import com.zhongzheng.modules.base.service.IProfileTpService;
 import com.zhongzheng.modules.base.service.IShoppingCartService;
 import com.zhongzheng.modules.base.service.IUserProfileService;
+import com.zhongzheng.modules.base.vo.ProfileTpVo;
 import com.zhongzheng.modules.course.domain.Course;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseMenu;
@@ -186,6 +189,10 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
     @Autowired
     private IUserExamGoodsSupplementService iUserExamGoodsSupplementService;
 
+    @Autowired
+    private  IProfileTpService iProfileTpService;
+
+
 
     @Override
     public OrderGoodsVo queryById(Long orderGoodsId) {
@@ -640,7 +647,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
                 goodsVo.setInterfaceAccountId(classGradeVo.getInterfaceAccountId());
                 goodsVo.setLearnStatus(classGradeVo.getLearnStatus());
                 goodsVo.setPeriodWaitTime(classGradeVo.getPeriodWaitTime());
-                goodsVo.setSubscribeSign(2);
+                goodsVo.setSubscribeSign(0);
                 LambdaQueryWrapper<UserSubscribe> lq = Wrappers.lambdaQuery();
                 lq.eq(UserSubscribe::getOrderGoodsId, goodsVo.getOrderGoodsId());
                 lq.eq(UserSubscribe::getSubscribeStatus, 1);
@@ -677,7 +684,12 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
                                 .last("limit 1"));
                         if (ObjectUtils.isNull(subscribe)){
                             goodsVo.setSubscribeSign(1);
-                        }else if (subscribe.getSubscribeStatus() == 1 && subscribe.getExamStatus() == 0){
+                        }else if (subscribe.getSubscribeStatus() == 1  && ObjectUtils.isNotNull(subscribe.getExamStatus())
+                                && subscribe.getExamStatus() == 1
+                                && ObjectUtils.isNull(userSubscribe.getResult())){
+                            goodsVo.setSubscribeSign(2);
+                        }else if (subscribe.getSubscribeStatus() == 1 && ObjectUtils.isNotNull(subscribe.getExamStatus())
+                                && subscribe.getExamStatus() == 0){
                             goodsVo.setSubscribeSign(4);
                         }else if (ObjectUtils.isNotNull(subscribe.getResult()) && subscribe.getResult() == 0){
                             goodsVo.setSubscribeSign(3);
@@ -1036,6 +1048,22 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         objectLambdaUpdateWrapper2.set(UserExamGoodsSupplement::getUpdateTime,DateUtils.getNowTime());
         iUserExamGoodsSupplementService.update(null, objectLambdaUpdateWrapper2);
 
+        ProfileTpVo profileTpVo = iProfileTpService.queryByGoodsId(bo.getGoodsId());
+        if(Validator.isNotEmpty(profileTpVo)){
+            if(Validator.isNotEmpty(profileTpVo.getGoodsIds())){
+                LambdaUpdateWrapper<ProfileTp> objectLambdaUpdateWrapper3 = Wrappers.lambdaUpdate();
+                objectLambdaUpdateWrapper3.eq(ProfileTp::getProfileTpId, profileTpVo.getProfileTpId());
+                objectLambdaUpdateWrapper3.set(ProfileTp::getGoodsIds, profileTpVo.getGoodsIds()+","+goodsNew.getGoodsId());
+                objectLambdaUpdateWrapper3.set(ProfileTp::getUpdateTime,DateUtils.getNowTime());
+                iProfileTpService.update(null, objectLambdaUpdateWrapper3);
+            }
+            LambdaUpdateWrapper<UserProfile> objectLambdaUpdateWrapper4 = Wrappers.lambdaUpdate();
+            objectLambdaUpdateWrapper4.eq(UserProfile::getOrderGoodsId, bo.getOrderGoodsId());
+            objectLambdaUpdateWrapper4.set(UserProfile::getGoodsId, goodsNew.getGoodsId());
+            objectLambdaUpdateWrapper4.set(UserProfile::getUpdateTime,DateUtils.getNowTime());
+            iUserProfileService.update(null, objectLambdaUpdateWrapper4);
+        }
+
       /*  LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper3 = Wrappers.lambdaUpdate();
         objectLambdaUpdateWrapper3.eq(ClassGradeUser::getOrderGoodsId, bo.getOrderGoodsId());
         objectLambdaUpdateWrapper3.eq(ClassGradeUser::getUserId, bo.getUserId());

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -81,6 +81,7 @@ import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckLogService;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckService;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
 import com.zhongzheng.modules.user.domain.User;
@@ -2956,6 +2957,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return importVo;
     }
 
+    @Override
+    public List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn) {
+        return baseMapper.getOrderInvoiceList(orderSn);
+    }
+
     private void questionOpen(User user, QuestionMerchant merchant,UserSubscribe userSubscribe,Long loginId,String loginName) {
         //商家商品
         Goods merGoods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>()

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java

@@ -117,4 +117,7 @@ public interface IScheduleService extends IService<PolyvVideo> {
     void syncUserDateStudyLog();
 
     void usbUserDownload();
+
+    void goodsCopyTwo();
+
 }

+ 41 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/impl/ScheduleServiceImpl.java

@@ -42,6 +42,7 @@ import com.zhongzheng.modules.distribution.domain.DistributionSeller;
 import com.zhongzheng.modules.distribution.service.IDistributionCashLogService;
 import com.zhongzheng.modules.distribution.service.IDistributionRebateService;
 import com.zhongzheng.modules.distribution.service.IDistributionSellerService;
+import com.zhongzheng.modules.distribution.service.impl.DistributionLinkServiceImpl;
 import com.zhongzheng.modules.distribution.vo.DistributionRebateVo;
 import com.zhongzheng.modules.exam.bo.*;
 import com.zhongzheng.modules.exam.domain.*;
@@ -129,6 +130,8 @@ import net.polyv.common.v1.util.StringUtils;
 import net.polyv.live.v1.entity.channel.playback.LiveChannelVideoListResponse;
 import net.polyv.live.v1.entity.channel.playback.LiveListChannelVideoLibraryResponse;
 import org.apache.commons.lang3.time.DateFormatUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -161,6 +164,8 @@ import java.util.stream.Stream;
 @Service
 public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVideo> implements IScheduleService {
 
+    private static Logger log = LoggerFactory.getLogger(ScheduleServiceImpl.class);
+
     @Autowired
     private IInformService informService;
 
@@ -488,10 +493,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     UserVo userVo = iUserService.queryById(goodsVo.getUserId());
                     Map<String, Object> param = new HashMap<>();
                     param.put("goods", goodsVo1.getGoodsName());
+                    log.info("购买发送短信:"+JSON.toJSONString(informUserAddBo));
+                    iInformUserService.insertByAddBo(informUserAddBo);
                     ResultBean rb = IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), OpenTheGoodsCode);
-                    if (Validator.isNotEmpty(rb)) {
-                        iInformUserService.insertByAddBo(informUserAddBo);
-                    }
+                    /*if (Validator.isNotEmpty(rb)) {
+
+                    }*/
                     if (voList.stream().allMatch(x -> !x.getGoodsId().equals(goodsVo.getGoodsId()))) {
                         goodsVo.setContext("尊敬的用户:您购买的" + goodsVo1.getGoodsName() + "已经开通,请尽快去学习吧。");
                         goodsVo.setGoodsName(goodsVo1.getGoodsName());
@@ -517,10 +524,12 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     Map<String, Object> param = new HashMap<>();
                     param.put("goods", goodsVo1.getGoodsName());
                     param.put("name", "");
+                    log.info("购买资料发送短信:"+JSON.toJSONString(informUserAddBo));
+                    iInformUserService.insertByAddBo(informUserAddBo);
                     ResultBean rb = IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), informationNotificationCode);
-                    if (Validator.isNotEmpty(rb)) {
-                        iInformUserService.insertByAddBo(informUserAddBo);
-                    }
+                    /*if (Validator.isNotEmpty(rb)) {
+
+                    }*/
                     if (voList.stream().allMatch(x -> !x.getGoodsId().equals(goodsVo.getGoodsId()))) {
                         goodsVo.setContext("尊敬的用户:已为您开通了" + goodsVo1.getGoodsName() + "课程,本课程需完善信息方可学习,请尽快去完善资料吧。");
                         goodsVo.setGoodsName(goodsVo1.getGoodsName());
@@ -1173,6 +1182,26 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
         iGoodsService.goodsCopyOne(bo);
     }
 
+    @Override
+    public void goodsCopyTwo() {
+        //商品一二建复制
+        List<Goods> list = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                .eq(Goods::getEducationTypeId, 3)
+                .in(Goods::getBusinessId, Arrays.asList(6,7))
+                .eq(Goods::getProjectId, 5)
+                .like(Goods::getGoodsName,"2023")
+                .eq(Goods::getStatus, 1));
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        List<Long> goodsIds = list.stream().filter(item -> !item.getGoodsName().contains("测试")).map(Goods::getGoodsId).collect(Collectors.toList());
+        GoodsBatchCopyTenantBo bo = new GoodsBatchCopyTenantBo();
+        bo.setTenantId("713019440277910");
+        bo.setGoodsIds(goodsIds);
+        //执行复制
+        iGoodsService.goodsCopyOne(bo);
+    }
+
     @Override
     public void distributionRebate() {
         DistributionRebateQueryBo queryBo = new DistributionRebateQueryBo();
@@ -1432,6 +1461,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                             divideLog.setRealBadMoney(badPrice);
                         }
                     }
+                    if (divideLog.getPayMoney().compareTo(BigDecimal.ZERO) == 0) {
+                        divideLog.setPayStatus(6);
+                    }
                     iTopDivideLogService.updateById(divideLog);
                 }
 
@@ -1560,6 +1592,9 @@ public class ScheduleServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVide
                     divideLog.setUnDeductMoney(new BigDecimal(0));
                     divideLog.setPayMoney(divideLog.getTotalPayMoney().subtract(divideLog.getDeductMoney()));
                 }
+                if (divideLog.getPayMoney().compareTo(BigDecimal.ZERO) == 0) {
+                    divideLog.setPayStatus(6);
+                }
                 iTopDivideLogService.updateById(divideLog);
             }
         }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopNuoMplatformLogServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -26,6 +27,7 @@ import com.zhongzheng.modules.sdk.mapper.TopNuoMplatformLogMapper;
 import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
 import com.zhongzheng.modules.sdk.service.NuonuoService;
 import com.zhongzheng.modules.sdk.vo.TopNuoMplatformLogVo;
+import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -242,6 +244,13 @@ public class TopNuoMplatformLogServiceImpl extends ServiceImpl<TopNuoMplatformLo
                             iTopOldOrderService.orderInvoice(orderNo);
                         }
                         else if(mplatformLog.getFromPlat()==2){
+                            //B端同步发票状态
+                            TopOldOrder oldOrder = iTopOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>()
+                                    .eq(TopOldOrder::getOrderSn, orderNo));
+                            if (ObjectUtils.isNotNull(oldOrder)){
+                                oldOrder.setInvoiceStatus(1);//已开票
+                                iTopOldOrderService.updateById(oldOrder);
+                            }
                             //旧系统
                             Map<String, String> params = new HashMap<>();
                             Long nowTime = DateUtils.getNowTime();

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

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.system.service.impl;
 
+import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.zhongzheng.common.exception.CustomException;
@@ -35,6 +36,12 @@ public class SysWebServiceImpl implements ISysWebService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean createTenantConfig(TopSysTenantRegisterAddBo bo) {
+        if(Validator.isNotEmpty(bo.getHostPc())){
+            bo.setHostPc(bo.getHostPc().trim());
+        }
+        if(Validator.isNotEmpty(bo.getHostH5())){
+            bo.setHostH5(bo.getHostH5().trim());
+        }
         Collection<SysConfig> coll = new HashSet<>();
         SysConfig config1 = new SysConfig();
         config1.setTenantId(bo.getTenantId());

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideLogMapper.java

@@ -6,6 +6,7 @@ import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
 import com.zhongzheng.modules.top.financial.domain.TopDivideLog;
 import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 
 import java.util.List;
 
@@ -18,11 +19,15 @@ import java.util.List;
 public interface TopDivideLogMapper extends BaseMapper<TopDivideLog> {
     List<TopDivideLogVo> getCompanyList(TopDivideLogQueryBo bo);
 
+    Long getCompanyWaitCount(TopOldOrderQueryBo bo);
+
     List<TopDivideLogVo> getCheckList(TopDivideLogQueryBo bo);
 
     TopDivideLogVo getSumMoney(TopDivideLogQueryBo bo);
 
     List<TopDivideLogVo> getSellerList(TopDivideLogQueryBo bo);
 
+    Long getSellerListWaitCount(TopOldOrderQueryBo bo);
+
     List<TopDivideLogVo> getCommissionList(TopDivideLogQueryBo bo);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/mapper/TopDivideOrderMapper.java

@@ -8,6 +8,7 @@ import com.zhongzheng.modules.top.financial.domain.TopDivideOrder;
 import com.zhongzheng.modules.top.financial.vo.TopCreateUserVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 
 import java.math.BigDecimal;
@@ -34,6 +35,8 @@ public interface TopDivideOrderMapper extends BaseMapper<TopDivideOrder> {
 
     List<TopDivideOrderVo> getMonthCreditList(TopDivideOrderQueryBo bo);
 
+    Long getMonthCreditWaitCount(TopDivideOrderQueryBo bo);
+
     List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo);
 
     List<TopDivideOrderVo> getMonthRefundList(TopDivideOrderQueryBo bo);

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideLogService.java

@@ -11,6 +11,7 @@ import com.zhongzheng.modules.top.financial.domain.TopDivideLog;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderEditBo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 
 import java.util.Collection;
 import java.util.List;
@@ -68,8 +69,12 @@ public interface ITopDivideLogService extends IService<TopDivideLog> {
 
 	TopDivideLogVo getSumMoney(TopDivideLogQueryBo bo);
 
+	Long getCompanyWaitCount(TopOldOrderQueryBo bo);
+
 	List<TopDivideLogVo> getSellerList(TopDivideLogQueryBo bo);
 
+	Long getSellerListWaitCount(TopOldOrderQueryBo bo);
+
 	List<TopDivideOrderVo> getCommissionList(TopDivideOrderQueryBo bo);
 
 	TopDivideOrderVo getCommissionDetail(TopDivideOrderQueryBo bo);

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/ITopDivideOrderService.java

@@ -9,6 +9,7 @@ import com.zhongzheng.modules.top.financial.domain.TopDivideOrder;
 import com.zhongzheng.modules.top.financial.vo.TopCreateUserVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 
 import java.math.BigDecimal;
@@ -68,6 +69,8 @@ public interface ITopDivideOrderService extends IService<TopDivideOrder> {
 
 	List<TopDivideOrderVo> getMonthCreditList(TopDivideOrderQueryBo bo);
 
+	Long getMonthCreditWaitCount(TopDivideOrderQueryBo bo);
+
 	List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo);
 
 	List<TopDivideOrderVo> getMonthRefundList(TopDivideOrderQueryBo bo);

+ 18 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideLogServiceImpl.java

@@ -22,6 +22,7 @@ import com.zhongzheng.modules.top.financial.service.ITopDivideLogService;
 import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
@@ -159,7 +160,7 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
 
     @Override
     public List<TopDivideLogVo> getCompanyList(TopDivideLogQueryBo bo) {
-        if(Validator.isNotEmpty(bo.getPayStatus())){
+        if(Validator.isNotEmpty(bo.getPayStatus())&&bo.getPayStatus().size()>0){
             List<Integer> payStatus = new ArrayList<>();
             for(Integer status : bo.getPayStatus()){
                 if(status==2){
@@ -174,7 +175,7 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
             }
             bo.setPayStatus(payStatus);
         }
-        if(Validator.isNotEmpty(bo.getOverPayDay())){
+        if(Validator.isNotEmpty(bo.getOverPayDay())&&bo.getOverPayDay()>0){
             bo.setNotPayStatus(1);
             if(bo.getOverPayDay()==1){
                 bo.setOverPayDayTime(DateUtils.getNowTime()-(7*24*3600));
@@ -285,9 +286,14 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
         return baseMapper.getSumMoney(bo);
     }
 
+    @Override
+    public Long getCompanyWaitCount(TopOldOrderQueryBo bo) {
+        return baseMapper.getCompanyWaitCount(bo);
+    }
+
     @Override
     public List<TopDivideLogVo> getSellerList(TopDivideLogQueryBo bo) {
-        if(Validator.isNotEmpty(bo.getPayStatus())){
+        if(Validator.isNotEmpty(bo.getPayStatus())&&bo.getPayStatus().size()>0){
             List<Integer> payStatus = new ArrayList<>();
             for(Integer status : bo.getPayStatus()){
                 if(status==2){
@@ -302,7 +308,7 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
             }
             bo.setPayStatus(payStatus);
         }
-        if(Validator.isNotEmpty(bo.getOverPayDay())){
+        if(Validator.isNotEmpty(bo.getOverPayDay())&&bo.getOverPayDay()>0){
             bo.setNotPayStatus(1);
             if(bo.getOverPayDay()==1){
                 bo.setOverPayDayTime(DateUtils.getNowTime()-(7*24*3600));
@@ -332,9 +338,14 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
         return list;
     }
 
+    @Override
+    public Long getSellerListWaitCount(TopOldOrderQueryBo bo) {
+        return baseMapper.getSellerListWaitCount(bo);
+    }
+
     @Override
     public List<TopDivideOrderVo> getCommissionList(TopDivideOrderQueryBo bo) {
-        if(Validator.isNotEmpty(bo.getCheckStatus())){
+        if(Validator.isNotEmpty(bo.getCheckStatus())&&bo.getCheckStatus().size()>0){
             List<Integer> payStatus = new ArrayList<>();
             for(Integer status : bo.getCheckStatus()){
                 if(status==0){
@@ -374,6 +385,8 @@ public class TopDivideLogServiceImpl extends ServiceImpl<TopDivideLogMapper, Top
             orderTotalPrice = orderTotalPrice.add(vo.getOrderPrice());
             pretaxTotalBrokerage = pretaxTotalBrokerage.add(vo.getPretaxBrokerage());
         }
+        Long result =iTopDivideOrderService.getMonthCreditWaitCount(bo);
+        map.put("waitAuditTotal", Validator.isNotEmpty(result)?result:0);
         map.put("orderTotalPrice",orderTotalPrice);  //订单金额
         map.put("BrokerageTotalMoney",brokerageTotalMoney); //结算佣金
         map.put("pretaxTotalBrokerage",pretaxTotalBrokerage);//税前佣金

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/financial/service/impl/TopDivideOrderServiceImpl.java

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.top.financial.service.ITopDivideOrderService;
 import com.zhongzheng.modules.top.financial.vo.TopCreateUserVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideLogVo;
 import com.zhongzheng.modules.top.financial.vo.TopDivideOrderVo;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -240,6 +241,11 @@ public class TopDivideOrderServiceImpl extends ServiceImpl<TopDivideOrderMapper,
         return baseMapper.getMonthCreditList(bo);
     }
 
+    @Override
+    public Long getMonthCreditWaitCount(TopDivideOrderQueryBo bo) {
+        return baseMapper.getMonthCreditWaitCount(bo);
+    }
+
     @Override
     public List<String> getMonthFinishAllTenant(TopDivideOrderQueryBo bo) {
         return baseMapper.getMonthFinishAllTenant(bo);

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

@@ -84,6 +84,8 @@ public class TopOldOrderGoodsAddBo {
     private Integer checkStatus;
     @ApiModelProperty("旧系统自增ID")
     private Long signId;
+    @ApiModelProperty("关联的旧系统自增ID(修改学员时使用)")
+    private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")
@@ -100,4 +102,6 @@ public class TopOldOrderGoodsAddBo {
     private BigDecimal divideMoney;
     @ApiModelProperty("补款金额")
     private BigDecimal repairMoney;
+    @ApiModelProperty("补款证明")
+    private String repairProve;
 }

+ 16 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderQueryBo.java

@@ -145,6 +145,22 @@ public class TopOldOrderQueryBo extends BaseEntity {
 	private Integer billOverType;
 	@ApiModelProperty("运营类型:1代运营 2独立运营")
 	private Integer operationType;
+	@ApiModelProperty("角色ID列表")
+	private List<Long> roleIds;
 
+	@ApiModelProperty("机构ID")
+	private List<String> tenantIds;
+
+
+	@ApiModelProperty("1已打款 0待支付 2待审核 3打款中 4打款失败 5审核中")
+	private List<Integer> payStatus;
+
+	@ApiModelProperty("非支付状态")
+	private Integer notPayStatus;
+
+	@ApiModelProperty("预付超期 1:7天 2:30 3:半年 4:1年")
+	private Integer overPayDay;
 
+	@ApiModelProperty("预付超期时间戳")
+	private Long overPayDayTime;
 }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java

@@ -162,4 +162,10 @@ private static final long serialVersionUID=1L;
     private Integer operationType;
     @ApiModelProperty("补款金额")
     private BigDecimal repairMoneyTotal;
+    /** 对应客户Id */
+    private Integer oldCompanyId;
+    /** 客户ID */
+    private Integer oldCustomerId;
+    /** 订单所属机构 */
+    private Integer oldInstitutionId;
 }

+ 11 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java

@@ -75,8 +75,14 @@ private static final long serialVersionUID=1L;
     private String businessFullName;
     /** 学习状态:0未开始,1学习中,2已结束 */
     private Integer checkStatus;
+    /** 学申请修改时间 */
+    private Long applyUpTime;
+    /** 申请修改原因 */
+    private String applyUpReason;
     @ApiModelProperty("旧系统自增ID")
     private Long signId;
+    @ApiModelProperty("关联的旧系统自增ID(修改学员时使用)")
+    private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")
@@ -94,5 +100,10 @@ private static final long serialVersionUID=1L;
     private BigDecimal divideMoney;
     @ApiModelProperty("补款金额")
     private BigDecimal repairMoney;
+    @ApiModelProperty("补款证明")
+    private String repairProve;
+    @ApiModelProperty("订单课程所属机构")
+    private String ownInstitutionId;
+
 
 }

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

@@ -6,8 +6,12 @@ import com.zhongzheng.modules.top.financial.bo.RefundOrderBo;
 import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderQueryBo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
+import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderRefundVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -55,4 +59,48 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
 
     List<String> getOrderSnByBusiness(@Param("businessName")String businessName);
 
+    List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
+
+    List<TopOrderStatisticsMoneyVo> getMoneyStatistics(TopOrderStatisticsBo bo);
+
+    BigDecimal getMoneyStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
+
+    List<TopOrderStatisticsNumVo> getNumStatistics(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsMoneyVo> getTenantStatistics(TopOrderStatisticsBo bo);
+
+    BigDecimal getSingleTenantStatistics(TopOrderStatisticsBo bo);
+
+    Long getNumStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
+
+    List<TopOrderStatisticsNumVo> getTenantStatisticsOrderNum(TopOrderStatisticsBo bo);
+
+    Long getSingleTenantStatisticsOrderNum(TopOrderStatisticsBo bo);
+
+    Long getNumStatisticsTotalWithBo(TopOrderStatisticsBo bo);
+
+    BigDecimal getMoneyStatisticsWithBo(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsMoneyVo> getBusinessOrderMoney(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsNumVo> getBusinessOrderNum(TopOrderStatisticsBo bo);
+
+    Long getOrderGoodsNumStatisticsTotalWithBo(TopOrderStatisticsBo bo);
+
+    List<String> getBusinessList(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsTwoVo> getStatisticsView(TopOrderStatisticsViewBo bo);
+
+    List<TopOrderStatisticsDetailVo> getDetailStatistics(TopOrderStatisticsBo bo);
+
+    TopOrderStatisticsDetailTotalVo getDetailStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
+
+    Long getOrderTenant(Long customerId);
+
+    List<TopOrderCustomerVo> getCustomerList();
+
+    List<TopOrderStatisticsDetailVo> getTenantDetailList(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsDetailVo> getBusinessDetailList(TopOrderStatisticsBo bo);
+
 }

+ 53 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java

@@ -6,15 +6,11 @@ import com.zhongzheng.modules.top.financial.bo.*;
 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.TopOldOrderGoodsListVo;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
-import com.zhongzheng.modules.top.goods.vo.TopOrderStatisticsVo;
-import com.zhongzheng.modules.top.goods.vo.TopRefundOrderDetailVo;
+import com.zhongzheng.modules.top.goods.vo.*;
 import com.zhongzheng.modules.top.order.bo.PayOrderCallBackBo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsViewBo;
+import com.zhongzheng.modules.top.order.vo.*;
 
 import java.util.Collection;
 import java.util.List;
@@ -33,6 +29,12 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
 	 */
 	TopOldOrderVo queryById(String orderSn);
 
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	List<String> queryOrderBusinessName(String orderSn);
+
 	/**
 	 * 查询列表
 	 */
@@ -134,4 +136,47 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
 	void informRemindOrderCheck(String result);
 
 	boolean updateFinanceRemark(TopUpdateRemarkBo bo);
+
+	TopOldOrderUpVo getOrderGoodsApplyList(String orderSn);
+
+	List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
+
+    List<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo);
+
+
+	List<TopOrderStatisticsMoneyVo> getBusinessOrderMoney(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsNumVo> getBusinessOrderNum(TopOrderStatisticsBo bo);
+
+	List<String> getBusinessList(TopOrderStatisticsBo bo);
+
+	TopOrderStatisticsViewVo orderStatisticsView(TopOrderStatisticsViewBo bo);
+
+	List<TopOrderStatisticsDetailVo> orderStatisticsDetail(TopOrderStatisticsBo bo);
+
+	TopSharedCustomerTotalVo getSharedStatistics(TopOrderStatisticsBo bo);
+
+	TopCustomerStatsVo getCustomerStatsData(TopOrderStatisticsBo bo);
+
+	TopCertStatsVo getCertStatsData(TopOrderStatisticsBo bo);
+
+	TopOrderAreaVo getOrderAreaData(TopOrderStatisticsBo bo);
+
+	TopConversionRateVo getConversionRateData(TopOrderStatisticsBo bo);
+
+	List<TopOrderCustomerVo> getCustomerList();
+
+	TopOrderTotalVo getOrderTotal(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsDetailVo> getTenantDetailList(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsDetailVo> getBusinessDetailList(TopOrderStatisticsBo bo);
+
+	List<TopConversionRateTrendVo> getCustomerListData(TopOrderStatisticsBo bo);
 }

Разница между файлами не показана из-за своего большого размера
+ 1560 - 16
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java


+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderInvoiceVo.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月18日 10:31
+ */
+@Data
+public class TopOldOrderInvoiceVo implements Serializable {
+
+    @ApiModelProperty("申请时间")
+    private Long applyUpTime;
+
+    @ApiModelProperty("发票类型")
+    private String invoiceType;
+
+    @ApiModelProperty("1开票中 0关闭  2开票完成 -1失效 -2推送失败")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty("抬头")
+    private String buyerName;
+
+    @ApiModelProperty("信用代码")
+    private String buyerTaxNum;
+
+    @ApiModelProperty("收票信息")
+    private String email;
+
+    @ApiModelProperty("申请金额")
+    private BigDecimal applyPrice;
+
+    @ApiModelProperty("开票金额")
+    private BigDecimal price;
+
+    @ApiModelProperty("开票时间")
+    private Long invoiceTime;
+
+    @ApiModelProperty("发票PDF路径")
+    private String ossPdfUrl;
+
+    @ApiModelProperty("发票备注")
+    private String remark;
+
+    private String content;
+
+}

+ 32 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderUpVo.java

@@ -0,0 +1,32 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月18日 10:31
+ */
+@Data
+public class TopOldOrderUpVo implements Serializable {
+
+    @ApiModelProperty("申请时间")
+    private Long applyUpTime;
+
+    @ApiModelProperty("申请人")
+    private String applyUpName;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("订单学员修改信息")
+    private List<TopOrderGoodsUpVo> orderGoodsList;
+
+}

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderVo.java

@@ -95,6 +95,9 @@ public class TopOldOrderVo {
 	/** 审核状态:0待审核,1已通过,2未通过,3已撤销 */
 	@ApiModelProperty("审核状态:0待审核,1已通过,2未通过,3已撤销")
 	private Integer checkStatus;
+	/** 学员审核:0待审核,1已通过,2未通过,3已撤销 */
+	@ApiModelProperty("审核状态:0待审核,1已通过")
+	private Integer userCheckStatus;
 	/** 审核意见 */
 	@ApiModelProperty("审核意见")
 	private String checkReason;
@@ -289,4 +292,7 @@ public class TopOldOrderVo {
 	/** 超收预期 1:7天,2:30天,3半年, 4:1年   */
 	@ApiModelProperty("超收预期 1:7天,2:30天,3半年, 4:1年")
 	private Long exceedType;
+
+	@ApiModelProperty("认款金额")
+	private BigDecimal acceptanceMoney;
 }

+ 59 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderGoodsUpVo.java

@@ -0,0 +1,59 @@
+package com.zhongzheng.modules.top.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月18日 10:31
+ */
+@Data
+public class TopOrderGoodsUpVo implements Serializable {
+
+    private Long orderGoodsId;
+
+    @ApiModelProperty("修改状态:0改后 -1改前")
+    private Integer checkStatus;
+
+    @ApiModelProperty("学员姓名")
+    private String userName;
+
+    @ApiModelProperty("学员身份证")
+    private String userCard;
+
+    @ApiModelProperty("学员手机号")
+    private String userPhone;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("商品年份")
+    private String goodsYear;
+
+    @ApiModelProperty("商品标准价格")
+    private BigDecimal goodsPrice;
+
+    @ApiModelProperty("商品成交价格")
+    private BigDecimal goodsRealPrice;
+
+    @ApiModelProperty("学习状态:0未开始,1学习中,2已结束")
+    private String studyStatus;
+
+    @ApiModelProperty("补款金额")
+    private BigDecimal repairMoney;
+    @ApiModelProperty("补款证明")
+    private String repairProve;
+    @ApiModelProperty("申请修改原因")
+    private String applyUpReason;
+    @ApiModelProperty("申请修改时间")
+    private Long applyUpTime;
+
+    @ApiModelProperty("数据ID")
+    private Integer signId;
+
+
+
+}

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOrderStatisticsVo.java

@@ -44,4 +44,16 @@ public class TopOrderStatisticsVo {
     @ApiModelProperty("订单数")
     private Integer orderNum;
 
+    @ApiModelProperty("待审订单数量")
+    private Integer checkOrderNum;
+
+    @ApiModelProperty("待审退款")
+    private Integer checkRefundNum;
+
+    @ApiModelProperty("待审学员")
+    private Integer checkUserNum;
+
+    @ApiModelProperty("待审完单")
+    private Integer checkFinishNum;
+
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundOrderDetailVo.java

@@ -26,6 +26,9 @@ public class TopRefundOrderDetailVo {
     @ApiModelProperty("退款金额")
     private BigDecimal refundFee;
 
+    @ApiModelProperty("发票状态:0未开票,1已开票")
+    private Integer invoiceStatus;
+
     @ApiModelProperty("退款理由")
     private String refundReason;
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopRefundUserVo.java

@@ -23,6 +23,9 @@ public class TopRefundUserVo {
     @ApiModelProperty("业务类型")
     private String businessName;
 
+    @ApiModelProperty("商品年份")
+    private String goodsYear;
+
     @ApiModelProperty("课程名称")
     private String goodsName;
 

+ 39 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopAcceptanceOrderBo.java

@@ -0,0 +1,39 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月20日 8:58
+ */
+@Data
+public class TopAcceptanceOrderBo implements Serializable {
+
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("订单号集合")
+    private List<String> orderSnList;
+
+    @ApiModelProperty("业务号")
+    private String createNo;
+
+    @ApiModelProperty("下单客户")
+    private String purchaseOrg;
+
+    @ApiModelProperty("姓名/身份证号")
+    private String userKey;
+
+    @ApiModelProperty("订单列表查询标识:1认款订单列表")
+    private Integer orderSign;
+}

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceAddBo.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单网银打款对象 top_order_bank_pay
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+@Data
+@ApiModel("订单认款")
+public class TopOrderAcceptanceAddBo implements Serializable {
+
+    /** 收款账号所属 */
+    @ApiModelProperty("收款账号所属")
+    private String incomeDepartment;
+    /** 收款类型:1对公 */
+    @ApiModelProperty("收款类型:1对公")
+    private Integer incomeType;
+    /** 收款账户名 */
+    @ApiModelProperty("收款账户名")
+    private String incomeName;
+    /** 收款账户行 */
+    @ApiModelProperty("收款账户行")
+    private String incomeBank;
+    /** 收款账户号 */
+    @ApiModelProperty("收款账户号")
+    private String incomeAccount;
+    /** 收款金额 */
+    @ApiModelProperty("收款金额")
+    private BigDecimal incomeMoney;
+    /** 到账时间 */
+    @ApiModelProperty("到账时间")
+    private Long incomeTime;
+    /** 付款账户名 */
+    @ApiModelProperty("付款账户名")
+    private String payName;
+    /** 付款账户行 */
+    @ApiModelProperty("付款账户行")
+    private String payBank;
+    /** 付款账户号 */
+    @ApiModelProperty("付款账户号")
+    private String payAccount;
+    /** 下单客户 */
+    @ApiModelProperty("下单客户")
+    private String orderClient;
+    /** 认款类型:1手动 2自动 */
+    @ApiModelProperty("认款类型:1手动 2自动")
+    private Integer acceptanceType;
+    /** 认款状态:1待认款 2已认款 3已撤销*/
+    @ApiModelProperty("认款状态:1待认款 2已认款 3已撤销")
+    private Integer acceptanceStatus;
+    /** 业务归属 */
+    @ApiModelProperty("业务归属")
+    private String businessAffiliation;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+
+
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderAcceptanceBo.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 订单网银打款对象 top_order_bank_pay
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+@Data
+@ApiModel("订单认款")
+public class TopOrderAcceptanceBo implements Serializable {
+
+    private Long acceptanceId;
+
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    @ApiModelProperty("业务归属")
+    private String businessAffiliation;
+
+    @ApiModelProperty("收款账户:1对公 2其他")
+    private Integer incomeType;
+
+    @ApiModelProperty("认款类型:1手动 2自动")
+    private Integer acceptanceType;
+
+    @ApiModelProperty("认款状态:1待认款 2已认款 3已撤销")
+    private Integer acceptanceStatus;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("下单企业")
+    private String orderClient;
+
+    @ApiModelProperty("到账开始时间")
+    private Long incomeStartTime;
+
+    @ApiModelProperty("到账结束时间")
+    private Long incomeEndTime;
+
+
+}

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

@@ -0,0 +1,58 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 订单网银打款对象 top_order_bank_pay
+ *
+ * @author hjl
+ * @date 2023-05-08
+ */
+@Data
+@ApiModel("订单认款")
+public class TopOrderAcceptanceExportBo implements Serializable {
+
+    /** 收款账户名 */
+    @ApiModelProperty("收款账户名")
+    @Excel(name = "*收款账户名")
+    private String incomeName;
+    /** 收款账户行 */
+    @ApiModelProperty("收款账户行")
+    @Excel(name = "*收款账户名")
+    private String incomeBank;
+    /** 收款账户号 */
+    @ApiModelProperty("收款账户号")
+    @Excel(name = "*收款账户号")
+    private String incomeAccount;
+    /** 收款金额 */
+    @ApiModelProperty("收款金额")
+    @Excel(name = "*收款金额")
+    private String incomeMoney;
+    /** 到账时间 */
+    @ApiModelProperty("到账时间")
+    @Excel(name = "*到账时间 yyyy/MM/dd")
+    private String incomeTime;
+    /** 付款账户名 */
+    @ApiModelProperty("付款账户名")
+    @Excel(name = "*到账时间")
+    private String payName;
+    /** 付款账户行 */
+    @ApiModelProperty("付款账户行")
+    @Excel(name = "*付款账户行")
+    private String payBank;
+    /** 付款账户号 */
+    @ApiModelProperty("付款账户号")
+    @Excel(name = "*付款账户号")
+    private String payAccount;
+    /** 下单客户 */
+    @ApiModelProperty("下单客户")
+    @Excel(name = "下单企业")
+    private String orderClient;
+
+}

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

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月20日 9:24
+ */
+@Data
+public class TopOrderAcceptanceRelBo implements Serializable {
+
+    @ApiModelProperty("认款记录ID")
+    private Long acceptanceId;
+
+    @ApiModelProperty("订单号集合")
+    private List<TopOrderGoodsAcceptanceBo> goodsAcceptanceList;
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов