Pārlūkot izejas kodu

Merge branch 'dev'

yangdamao 1 gadu atpakaļ
vecāks
revīzija
91c034f0af
100 mainītis faili ar 3326 papildinājumiem un 48 dzēšanām
  1. 29 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  2. 89 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java
  3. 52 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java
  4. 10 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java
  5. 41 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/vod/VodVideoController.java
  6. 3 0
      zhongzheng-api/src/main/java/com/zhongzheng/ZhongZhengApiApplication.java
  7. 155 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java
  8. 107 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserHandleController.java
  9. 3 0
      zhongzheng-api/src/main/resources/application.yml
  10. 40 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  11. 63 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  12. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  13. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  14. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseAddBo.java
  15. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterAddBo.java
  16. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterEditBo.java
  17. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseChapterQueryBo.java
  18. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseEditBo.java
  19. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleAddBo.java
  20. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleEditBo.java
  21. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleQueryBo.java
  22. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseQueryBo.java
  23. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionAddBo.java
  24. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionEditBo.java
  25. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionQueryBo.java
  26. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/Course.java
  27. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseChapter.java
  28. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseModule.java
  29. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseSection.java
  30. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterSectionVo.java
  31. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterVo.java
  32. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseModuleChapterVo.java
  33. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseModuleVo.java
  34. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionImport.java
  35. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionVo.java
  36. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserChapterSectionVo.java
  37. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserMenuVo.java
  38. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseVo.java
  39. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionActivity.java
  40. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionActivityGoods.java
  41. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsAddBo.java
  42. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsEditBo.java
  43. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  44. 0 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  45. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceBatchBo.java
  46. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceCheckBo.java
  47. 49 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java
  48. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java
  49. 90 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleAddBo.java
  50. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleCheckBo.java
  51. 97 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleEditBo.java
  52. 27 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleItemAddBo.java
  53. 85 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java
  54. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleRefundBo.java
  55. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceAddBo.java
  56. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderPayAddBo.java
  57. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java
  58. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java
  59. 91 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java
  60. 24 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoice.java
  61. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoiceOrder.java
  62. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderPay.java
  63. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderHandleMapper.java
  64. 7 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderInvoiceMapper.java
  65. 7 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java
  66. 79 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java
  67. 13 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInvoiceService.java
  68. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java
  69. 4 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
  70. 1 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  71. 685 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java
  72. 143 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInvoiceServiceImpl.java
  73. 190 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  74. 86 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyOrderInvoiceVo.java
  75. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyStatisticsVo.java
  76. 94 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleGoodsVo.java
  77. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleStatisticsVo.java
  78. 163 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java
  79. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInvoiceVo.java
  80. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantEditBo.java
  81. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java
  82. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/vo/SysTenantHandleAccountVo.java
  83. 2 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/VodServiceImpl.java
  84. 14 10
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  85. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleBo.java
  86. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleImportBo.java
  87. 37 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleQueryBo.java
  88. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserHandle.java
  89. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserHandleMapper.java
  90. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserHandleService.java
  91. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  92. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java
  93. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserExamRecordServiceImpl.java
  94. 91 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserHandleServiceImpl.java
  95. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  96. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserHandleVo.java
  97. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/IWxPayService.java
  98. 52 10
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  99. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseChapterMapper.xml
  100. 1 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseChapterSectionMapper.xml

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

@@ -5,6 +5,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.core.domain.model.LoginUser;
@@ -20,6 +21,10 @@ import com.zhongzheng.modules.order.service.IOrderService;
 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.system.bo.SysTenantEditBo;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.vo.SysTenantHandleAccountVo;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
 import lombok.RequiredArgsConstructor;
@@ -61,6 +66,8 @@ public class OrderController extends BaseController {
 
     private final TokenService tokenService;
 
+    private final ISysTenantService iSysTenantService;
+
     /**
      * 查询订单列表
      */
@@ -199,5 +206,27 @@ public class OrderController extends BaseController {
         return AjaxResult.success(iOrderService.questionGoodsOpenImport(importBoList,loginUser.getUser().getUserId(),SecurityUtils.getUsername()));
     }
 
+    @ApiOperation("获取经办订单收款信息")
+    @PreAuthorize("@ss.hasPermi('system:order:query')")
+    @GetMapping("/handleBank")
+    public AjaxResult<SysTenantHandleAccountVo> getHandleBank() {
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant tenant = iSysTenantService.getById(tenantId);
+        String information = tenant.getHandleBank();
+        SysTenantHandleAccountVo accountVo = JSONObject.parseObject(information, SysTenantHandleAccountVo.class);
+        return AjaxResult.success(accountVo);
+    }
+
+    @ApiOperation("修改经办订单收款信息")
+    @PreAuthorize("@ss.hasPermi('system:order:query')")
+    @PostMapping("/edit/handleBank")
+    public AjaxResult<Void> editHandleBank(@RequestBody SysTenantHandleAccountVo bo) {
+        String json = JSONObject.toJSONString(bo);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenantEditBo editBo = new SysTenantEditBo();
+        editBo.setTenantId(Long.parseLong(tenantId));
+        editBo.setHandleBank(json);
+        return toAjax(iSysTenantService.updateByEditBo(editBo)?1:0);
+    }
 
 }

+ 89 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java

@@ -0,0 +1,89 @@
+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.modules.order.bo.OrderHandleCheckBo;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 经办录单Controller
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Api(value = "经办录单控制器", tags = {"经办录单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/handle")
+public class OrderHandleController extends BaseController {
+
+    private final IOrderHandleService iOrderHandleService;
+
+    private final IOrderService iOrderService;
+
+    /**
+     * 查询经办录单列表
+     */
+    @ApiOperation("查询经办录单列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderHandleVo> list(OrderHandleQueryBo bo) {
+        startPage();
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询经办录单统计
+     */
+    @ApiOperation("查询经办录单统计")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/statistics")
+    public AjaxResult<OrderHandleStatisticsVo> statistics(OrderHandleQueryBo bo) {
+        return AjaxResult.success(iOrderHandleService.statistics(bo));
+    }
+
+    @ApiOperation("查询经办录单详情")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/detail")
+    public AjaxResult<OrderHandleVo> detail(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return AjaxResult.success(list.get(0));
+    }
+
+
+    @ApiOperation("查询经办录单商品列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/goodsList")
+    public TableDataInfo<OrderHandleGoodsVo> goodsList(OrderHandleQueryBo bo) {
+        startPage();
+        List<OrderHandleGoodsVo> list = iOrderHandleService.selectOrderGoodsList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("经办录单审核")
+    @PostMapping("/check")
+    public AjaxResult<Void> checkOrderHandle(@RequestBody OrderHandleCheckBo bo) {
+        return toAjax(iOrderHandleService.checkOrderHandle(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("经办录单退款审核")
+    @PostMapping("/refund/check")
+    public AjaxResult<Void> refundOrderHandle(@RequestBody OrderHandleCheckBo bo) {
+        return toAjax(iOrderHandleService.refundOrderHandle(bo) ? 1 : 0);
+    }
+}

+ 52 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java

@@ -4,10 +4,10 @@ import java.util.List;
 import java.util.Map;
 
 import cn.hutool.core.lang.Validator;
-import com.zhongzheng.modules.order.bo.OrderInvoiceAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceEditBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 import com.zhongzheng.modules.tencentcloud.bo.InvoiceQueryBo;
 import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
@@ -96,4 +96,53 @@ public class OrderInvoiceController extends BaseController {
         Map<String, String> rs = iFaceOcrService.VatInvoiceOCR(bo);
         return AjaxResult.success(rs);
     }
+
+    /**
+     * 查询企业订单发票列表
+     */
+    @ApiOperation("查询企业订单发票列表")
+    @GetMapping("/company/list")
+    public TableDataInfo<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo) {
+        startPage();
+        List<CompanyOrderInvoiceVo> list = iOrderInvoiceService.listCompanyOrderInvoice(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询企业订单发票统计
+     */
+    @ApiOperation("查询企业订单发票统计")
+    @GetMapping("/company/statistics")
+    public AjaxResult<CompanyStatisticsVo> listCompanyStatistics(CompanyOrderInvoiceBo bo) {
+        CompanyStatisticsVo vo = iOrderInvoiceService.listCompanyStatistics(bo);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 查询企业订单发票详情
+     */
+    @ApiOperation("查询企业订单发票详情")
+    @GetMapping("/company/detail/{invoiceId}")
+    public AjaxResult<OrderInvoiceVo> getCompanyInvoiceDetail(@PathVariable("invoiceId")Long invoiceId) {
+        OrderInvoiceVo vo = iOrderInvoiceService.getCompanyInvoiceDetail(invoiceId);
+        return AjaxResult.success(vo);
+    }
+
+    /**
+     * 企业订单发票审核
+     */
+    @ApiOperation("企业订单发票审核")
+    @PostMapping("/company/check")
+    public AjaxResult<Void> companyInvoiceCheck(@RequestBody CompanyInvoiceCheckBo bo) {
+        return toAjax(iOrderInvoiceService.companyInvoiceCheck(bo) ? 1 : 0);
+    }
+
+    /**
+     * 企业订单发票批量处理
+     */
+    @ApiOperation("企业订单发票批量处理")
+    @PostMapping("/company/batch/handle")
+    public AjaxResult<Void> companyBatchHandle(@RequestBody CompanyInvoiceBatchBo bo) {
+        return toAjax(iOrderInvoiceService.companyBatchHandle(bo) ? 1 : 0);
+    }
 }

+ 10 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/schedule/ScheduleController.java

@@ -5,6 +5,7 @@ import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.framework.web.service.AsyncService;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.modules.exam.bo.ExamApplyQueryBo;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.schedule.service.IScheduleService;
 import com.zhongzheng.modules.user.bo.UserQueryBo;
@@ -43,6 +44,8 @@ public class ScheduleController extends BaseController {
 
     private final WxLoginService wxLoginService;
 
+    private final IOrderHandleService iOrderHandleService;
+
     /**
      * 商品购买发送消息
      * @return
@@ -458,4 +461,11 @@ public class ScheduleController extends BaseController {
         iScheduleService.usbUserDownload();
         return AjaxResult.success();
     }
+
+    @ApiOperation("经办订单超时关闭")
+    @GetMapping("/order/closeOverHandle")
+    public AjaxResult closeOverHandle(){
+        iOrderHandleService.overTimeCloseOrder();
+        return AjaxResult.success();
+    }
 }

+ 41 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/vod/VodVideoController.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.controller.vod;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.tencentcloud.service.IVodService;
+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.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+
+@Api(value = "腾讯视频信息控制器", tags = {"腾讯视频信息管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/vod/video")
+public class VodVideoController extends BaseController {
+
+    private final IVodService iVodService;
+
+    @ApiOperation("获取腾讯视频小程序播放凭证")
+    @GetMapping("/sign/{fileId}")
+    public AjaxResult getPlaySign(@PathVariable("fileId") String fileId){
+        Map<String,Object> map = iVodService.vodSignRequest(fileId);
+        return AjaxResult.success(map);
+    }
+
+    @ApiOperation("获取腾讯视频详情")
+    @GetMapping("/detail/{fileId}")
+    public AjaxResult getPlayDetail(@PathVariable("fileId") String fileId){
+        String[] fileIds = new String[]{fileId};
+        Map<String,Object> map = iVodService.describeMediaInfos(fileIds);
+        return AjaxResult.success(map);
+    }
+
+}

+ 3 - 0
zhongzheng-api/src/main/java/com/zhongzheng/ZhongZhengApiApplication.java

@@ -2,11 +2,14 @@ package com.zhongzheng;
 
 
 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import com.zhongzheng.common.utils.DateUtils;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+import java.util.Date;
+
 
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 @EnableScheduling

+ 155 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderHandleController.java

@@ -0,0 +1,155 @@
+package com.zhongzheng.controller.order;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+import cn.hutool.core.lang.Validator;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 经办录单Controller
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Api(value = "经办录单控制器", tags = {"经办录单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/handle")
+public class OrderHandleController extends BaseController {
+
+    private final IOrderHandleService iOrderHandleService;
+
+    private final WxTokenService wxTokenService;
+
+    private final IOrderService iOrderService;
+
+    /**
+     * 查询经办录单列表
+     */
+    @ApiOperation("查询经办录单列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderHandleVo> list(OrderHandleQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询经办录单详情")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/detail")
+    public AjaxResult<OrderHandleVo> detail(OrderHandleQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        List<OrderHandleVo> list = iOrderHandleService.selectList(bo);
+        return AjaxResult.success(list.get(0));
+    }
+
+    /**
+     * 新增经办录单
+     */
+    @ApiOperation("新增经办录单")
+    @PreAuthorize("@ss.hasPermi('system:handle:add')")
+    @Log(title = "经办录单", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<String> add(@RequestBody OrderHandleAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        String handleOrderSn = iOrderHandleService.createOrder(bo);
+        OrderHandle orderHandle = iOrderHandleService.queryBySn(handleOrderSn);
+        if (orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) == 0) {
+            LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
+            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, 1);
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayType, 1);
+            iOrderHandleService.update(null, objectLambdaUpdateWrapper);
+        }
+        return AjaxResult.success("录单单号",handleOrderSn);
+    }
+
+    /**
+     * 修改经办录单
+     */
+    @ApiOperation("修改拒绝经办录单")
+    @PreAuthorize("@ss.hasPermi('system:handle:edit')")
+    @Log(title = "经办录单", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateRefuseBo")
+    public AjaxResult<Void> edit(@RequestBody OrderHandleEditBo bo) {
+        return toAjax(iOrderHandleService.updateRefuseBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("查询经办录单商品列表")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @GetMapping("/goodsList")
+    public TableDataInfo<OrderHandleGoodsVo> goodsList(OrderHandleQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<OrderHandleGoodsVo> list = iOrderHandleService.selectOrderGoodsList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("经办订单继续支付")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @PostMapping("/resumePay")
+    public AjaxResult<Map<String, String>> resumePay(@RequestBody OrderHandleAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success("支付结果",iOrderHandleService.resumePayOrder(bo));
+    }
+
+    @ApiOperation("经办订单关闭")
+    @PreAuthorize("@ss.hasPermi('system:handle:list')")
+    @PostMapping("/closeOrder")
+    public AjaxResult<Void> closeOrder(@RequestBody OrderHandleAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateUserId(loginUser.getUser().getUserId());
+        return toAjax(iOrderHandleService.closeOrder(bo) ? 1 : 0);
+    }
+
+
+    @ApiOperation("经办订单退款申请")
+    @PostMapping("/refund/apply")
+    public AjaxResult<Void> refundApply(@RequestBody OrderHandleRefundBo bo) {
+        return toAjax(iOrderHandleService.refundApply(bo) ? 1 : 0);
+    }
+}

+ 107 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserHandleController.java

@@ -0,0 +1,107 @@
+package com.zhongzheng.controller.user;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.user.bo.UserHandleBo;
+import com.zhongzheng.modules.user.bo.UserHandleImportBo;
+import com.zhongzheng.modules.user.bo.UserHandleQueryBo;
+import com.zhongzheng.modules.user.domain.UserHandle;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+import com.zhongzheng.modules.user.service.IUserHandleService;
+import com.zhongzheng.modules.user.vo.UserHandleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 用户经办名单
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Api(value = "用户经办名单控制器", tags = {"用户经办名单控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/user/handle")
+public class UserHandleController extends BaseController {
+
+    private final IUserHandleService iUserHandleService;
+
+    private final WxTokenService wxTokenService;
+
+    /**
+     * 查询用户的做题历史列表
+     */
+    @ApiOperation("用户经办名单列表")
+    @GetMapping("/list")
+    public TableDataInfo<UserHandle> list(UserHandleQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<UserHandle> list = iUserHandleService.queryUserHandleList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增用户经办名单
+     */
+    @ApiOperation("新增用户经办名单")
+    @PostMapping("/save")
+    public AjaxResult<Void> save(@RequestBody List<UserHandleBo> bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.stream().forEach(item -> item.setUserId(loginUser.getUser().getUserId()));
+        return toAjax(iUserHandleService.saveUserHandle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改用户经办名单
+     */
+    @ApiOperation("修改用户经办名单")
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody UserHandleBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iUserHandleService.editUserHandle(bo) ? 1 : 0);
+    }
+
+    /**
+     * 批量删除用户经办名单
+     */
+    @ApiOperation("批量删除用户经办名单")
+    @PostMapping("/delete")
+    public AjaxResult<Void> batchDel(@RequestBody List<Long> ids) {
+        return toAjax(iUserHandleService.batchDelUserHandle(ids) ? 1 : 0);
+    }
+
+    /**
+     * 经办名单导入
+     */
+    @ApiOperation("经办名单导入")
+    @PostMapping("/import")
+    public AjaxResult importUserHandle(MultipartFile file) {
+        List<UserHandleImportBo> userHandles = EasyPoiUtil.importExcel(file,0,1,UserHandleImportBo.class);
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        iUserHandleService.importUserHandle(userHandles,loginUser.getUser().getUserId());
+        return AjaxResult.success();
+    }
+
+    /**
+     * 经办名单解析
+     */
+    @ApiOperation("经办名单解析")
+    @PostMapping("/analysis")
+    public AjaxResult<List<UserHandleImportBo>> analysisUserHandle(MultipartFile file) {
+        List<UserHandleImportBo> userHandles = EasyPoiUtil.importExcel(file,0,1,UserHandleImportBo.class);
+        return AjaxResult.success(userHandles);
+    }
+
+}

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

@@ -61,6 +61,9 @@ logging:
 
 # Spring配置
 spring:
+  mvc:
+    async:
+      request-timeout: 20000
   main:
     allow-bean-definition-overriding: true
   # 资源信息

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

@@ -3,8 +3,10 @@ package com.zhongzheng.common.utils;
 import cn.hutool.core.lang.Validator;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.http.util.Args;
 
 import java.lang.management.ManagementFactory;
+import java.lang.ref.SoftReference;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
@@ -35,6 +37,43 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
+    static final class DateFormatHolder {
+        private static final ThreadLocal<SoftReference<Map<String, SimpleDateFormat>>> THREADLOCAL_FORMATS = new ThreadLocal<SoftReference<Map<String, SimpleDateFormat>>>();
+
+        DateFormatHolder() {
+        }
+
+        public static SimpleDateFormat formatFor(String pattern) {
+            SoftReference<Map<String, SimpleDateFormat>> ref = THREADLOCAL_FORMATS.get();
+            Map<String, SimpleDateFormat> formats = ref == null ? null : ref.get();
+            if (formats == null) {
+                formats = new HashMap<String, SimpleDateFormat>();
+                THREADLOCAL_FORMATS.set(new SoftReference(formats));
+            }
+
+            SimpleDateFormat format = formats.get(pattern);
+
+            if (format == null) {
+                format = new SimpleDateFormat(pattern);
+                format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+                ((Map) formats).put(pattern, format);
+            }
+
+            return format;
+        }
+
+        public static void clearThreadLocal() {
+            THREADLOCAL_FORMATS.remove();
+        }
+    }
+
+    public static String formatDateV3(Date date, String pattern) {
+        Args.notNull(date, "Date");
+        Args.notNull(pattern, "Pattern");
+        SimpleDateFormat formatFor = DateFormatHolder.formatFor(pattern);
+        return formatFor.format(date);
+    }
+
     /**
      * 获取当前Date型日期
      *
@@ -410,6 +449,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return "LD"+getDateOrderSn();
     }
 
+
     public static String getPayOrderSn()
     {
         return "P"+getDateOrderSn();

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

@@ -951,6 +951,69 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return resultMap;
     }
 
+    @Override
+    public Long importUser(UserImportAddBo itemImport, String importNo) {
+        if(Validator.isEmpty(itemImport.getTelphone())||itemImport.getTelphone().length()!=11){
+            throw new CustomException("手机号不能为空或者格式不对");
+        }
+        if(Validator.isEmpty(itemImport.getIdCard())){
+            throw new CustomException("身份证不能为空");
+        }
+        if(Validator.isEmpty(itemImport.getRealname())){
+            throw new CustomException("真实姓名不能为空");
+        }
+        User user = getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getIdCard,EncryptHandler.encrypt(itemImport.getIdCard())).last("limit 1"));
+        if(Validator.isNotNull(user)){
+            return user.getUserId();
+        }else{
+            User user2 = getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getTelphone,EncryptHandler.encrypt(itemImport.getTelphone())).last("limit 1"));
+            if(Validator.isNotEmpty(user2)){
+                throw new CustomException(itemImport.getTelphone(),439);
+            }
+        }
+        User inertData = new User();
+        inertData.setTelphone(itemImport.getTelphone());
+        //隐藏手机号作为初始昵称
+        inertData.setNickname(TelPhoneUtils.hideTelPhone(itemImport.getTelphone()));
+        //雪花算法产生账号ID
+        SnowflakeIdUtils idWorker = new SnowflakeIdUtils(3, 1);
+        inertData.setUserAccount(String.valueOf(idWorker.nextId()));
+        inertData.setSex(1);
+        if(Validator.isNotEmpty(itemImport.getSex())){
+            inertData.setSex(itemImport.getSex().equals("女")?2:1);
+        }
+        if(Validator.isNotEmpty(itemImport.getEduLevel())){
+            inertData.setEduLevel(itemImport.getEduLevel());
+        }
+        inertData.setIdCard(itemImport.getIdCard());
+        inertData.setRealname(itemImport.getRealname());
+        if (StringUtils.isNotBlank(itemImport.getCompanyName())) {
+            inertData.setCompanyName(itemImport.getCompanyName());
+        }
+        inertData.setEduLevel(itemImport.getEduLevel());
+        inertData.setCompanyName(itemImport.getCompanyName());
+        inertData.setStatus(1);
+        inertData.setRegisterPlat("5");
+        inertData.setAvatar(Constants.DEFAULT_AVATAR);
+        inertData.setLastLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+        inertData.setLastLoginTime(DateUtils.getNowTime());
+        inertData.setCreateTime(DateUtils.getNowTime());
+        inertData.setUpdateTime(DateUtils.getNowTime());
+//            String pwd =  ToolsUtils.getSmsCode(); // 随机密码
+//            inertData.setPassword(SecurityUtils.encryptPassword(pwd));
+        //初始密码(身份证后6位)
+        String idCard = itemImport.getIdCard();
+        String pwd =  idCard.substring(idCard.length() - 6); // 随机密码
+        inertData.setPassword(SecurityUtils.encryptPassword(pwd));
+        inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
+        if(!save(inertData)){
+            throw new CustomException("注册失败");
+        }
+        return inertData.getUserId();
+    }
+
     @Override
     public Boolean updatePwd(UserAppUpdatePwdBo bo) {
         LambdaQueryWrapper<User> queryWrapper =new LambdaQueryWrapper<User>();

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

@@ -109,7 +109,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
         try{
             SendSmsResponse response = SmsUtils.sendSms(tel,SIGNNAME,code,param,ACCESSKEYID,ACCESSKEYSECRET);
             LOGGER.error("发送短信结果:"+JSON.toJSONString(response));
-            if(response.getBody().getMessage().equals("OK")){
+            if(response.getBody().getCode().equals("OK")){
                 SmsAddBo smsAddBo = new SmsAddBo();
                 smsAddBo.setCode(param);
                 smsAddBo.setTel(tel);

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -955,6 +955,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             return ossPath;
         } catch (Exception e) {
             e.printStackTrace();
+            System.out.println(e.getMessage());
         }
         // 返回给页面的图片地址(因为绝对路径无法访问)
         //    imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";

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

@@ -82,5 +82,6 @@ public class CourseAddBo {
     /** 优选生成 0否 1是 */
     @ApiModelProperty("优选生成 0否 1是")
     private Integer firstChoice;
-
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -55,4 +55,6 @@ public class CourseChapterAddBo {
     private String importNo;
     @ApiModelProperty("公共标识:1公共章 0非公共章")
     private Integer commonSign;
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -67,4 +67,6 @@ public class CourseChapterEditBo {
 
     @ApiModelProperty("公共标识:1公共章 0非公共章")
     private Integer commonSign;
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -75,4 +75,6 @@ public class CourseChapterQueryBo extends BaseEntity {
 	/** 导入编号 */
 	@ApiModelProperty("导入编号")
 	private String importNo;
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

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

@@ -100,5 +100,7 @@ public class CourseEditBo {
     /** 优选生成 0否 1是 */
     @ApiModelProperty("优选生成 0否 1是")
     private Integer firstChoice;
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleAddBo.java

@@ -66,5 +66,6 @@ public class CourseModuleAddBo {
     /** 证书模板ID */
     @ApiModelProperty("证书模板ID")
     private Long certificateTpId;
-
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseModuleEditBo.java

@@ -78,5 +78,6 @@ public class CourseModuleEditBo {
     private Long certificateTpId;
     @ApiModelProperty("公共标识:1公共章 0非公共章")
     private Integer commonSign;
-
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -72,4 +72,6 @@ public class CourseModuleQueryBo extends BaseEntity {
 	/** 赠送卷ID */
 	@ApiModelProperty("赠送卷ID")
 	private Long freeExamId;
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseQueryBo.java

@@ -147,4 +147,7 @@ public class CourseQueryBo extends BaseEntity {
 	private Integer studyFinishStatus;
 
 	private List<Long> orderGoodsIds;
+
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionAddBo.java

@@ -87,4 +87,7 @@ public class CourseSectionAddBo {
     /** 讲师ID */
     @ApiModelProperty("讲师ID")
     private Long teacherId;
+    /** 视频标签:1保利威 2腾讯 */
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionEditBo.java

@@ -94,4 +94,7 @@ public class CourseSectionEditBo {
     /** 讲师ID */
     @ApiModelProperty("讲师ID")
     private Long teacherId;
+    /** 视频标签:1保利威 2腾讯 */
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -104,4 +104,6 @@ public class CourseSectionQueryBo extends BaseEntity {
 	/** 讲师ID */
 	@ApiModelProperty("讲师ID")
 	private Long teacherId;
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

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

@@ -74,6 +74,8 @@ private static final long serialVersionUID=1L;
     private Long oId;
     /** 优选生成 0否 1是 */
     private Integer firstChoice;
+    /** 视频标签:1保利威 2腾讯*/
+    private Integer viewSign;
 
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseChapter.java

@@ -55,4 +55,6 @@ private static final long serialVersionUID=1L;
     /** 公共标识:1公共章 0非公共章 */
     private String commonSign;
 
+    /** 视频标签:1保利威 2腾讯*/
+    private Integer viewSign;
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseModule.java

@@ -63,5 +63,6 @@ private static final long serialVersionUID=1L;
     private Long certificateTpId;
     /** 公共标识:1公共章 0非公共章 */
     private String commonSign;
-
+    /** 视频标签:1保利威 2腾讯*/
+    private Integer viewSign;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseSection.java

@@ -77,4 +77,6 @@ private static final long serialVersionUID=1L;
 
     @TableField(exist = false)
     private Long oId;
+    /** 视频标签:1保利威 2腾讯 */
+    private Integer viewSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseChapterSectionVo.java

@@ -93,4 +93,7 @@ public class CourseChapterSectionVo {
 	@ApiModelProperty("直播地址")
 	private String liveUrl;
 
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
+
 }

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

@@ -87,5 +87,6 @@ public class CourseChapterVo {
 	private Integer commonSign;
 	@ApiModelProperty("节总时间")
 	private Long totalTime;
-
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

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

@@ -66,4 +66,6 @@ public class CourseModuleChapterVo {
 			"" +
 			"")
 	private Integer sectionNum;
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Long viewSign;
 }

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

@@ -99,4 +99,6 @@ public class CourseModuleVo {
 	@ApiModelProperty("公共标识:1公共章 0非公共章")
 	private Integer commonSign;
 
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionImport.java

@@ -74,7 +74,10 @@ public class CourseSectionImport {
     @Excel(name = "节时长")
     @ApiModelProperty("节时长(分钟)")
     private Long durationTime;
-
+    /** 视频标签:1保利威 2腾讯 */
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    @Excel(name = "视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 
     private Long educationTypeId;
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionVo.java

@@ -133,4 +133,8 @@ public class CourseSectionVo {
 	/** 讲师ID */
 	@ApiModelProperty("讲师ID")
 	private Long teacherId;
+
+	/** 视频标签:1保利威 2腾讯 */
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserChapterSectionVo.java

@@ -124,4 +124,7 @@ public class CourseUserChapterSectionVo {
 	@ApiModelProperty("观看时长(秒)")
 	private Long studyDuration;
 	private Long orderGoodsId;
+
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseUserMenuVo.java

@@ -108,5 +108,9 @@ public class CourseUserMenuVo {
 
 	@ApiModelProperty("章下节总秒数")
 	private Long totalTime;
+
+	/** 视频标签:1保利威 2腾讯 */
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }
 

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

@@ -121,5 +121,7 @@ public class CourseVo {
 	@Excel(name = "优选生成 0否 1是")
 	@ApiModelProperty("优选生成 0否 1是")
 	private Integer firstChoice;
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionActivity.java

@@ -36,6 +36,8 @@ private static final long serialVersionUID=1L;
     private Long startTime;
     /** 结束时间 */
     private Long endTime;
+    /** 活动标识:0正常 1二建考前(新页面) */
+    private Integer activitySign;
     /** 模板ID */
     private Long tempId;
     /** 海报ID */

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionActivityGoods.java

@@ -50,6 +50,8 @@ private static final long serialVersionUID=1L;
     private BigDecimal profitTwo;
     /** 三级拥金 */
     private BigDecimal profitThree;
+    /** 位置标签:1上面 2下面 */
+    private Integer placeSign;
 
     /** 机构ID */
     private Long tenantId;

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

@@ -217,4 +217,6 @@ public class GoodsAddBo {
     /** 关联题库ids */
     @ApiModelProperty("关联题库ids")
     private String questionRelIds;
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

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

@@ -251,4 +251,6 @@ public class GoodsEditBo {
     /** 关联题库ids */
     @ApiModelProperty("关联题库ids")
     private String questionRelIds;
+    @ApiModelProperty("视频标签:1保利威 2腾讯")
+    private Integer viewSign;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -3392,6 +3392,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                     classPeriodVo.setStatus(userPeriodStatusVo.getStatus());
                     classPeriodVo.setNumList(Convert.toLong(userPeriodStatusVos.size()));
                     classPeriodVo.setStudyEndTime(userPeriodStatusVo.getRecordEndTime());
+                    classPeriodVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());
                     if (photoList.size() > 0) {
                         if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
                             classPeriodVo.setStudyStartTime(userPeriodStatusVo.getRecordStartTime());

+ 0 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -352,7 +352,6 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         }
         return true;
     }
-
     /**
      * 保存前的数据校验
      *

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceBatchBo.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月24日 10:11
+ */
+@Data
+public class CompanyInvoiceBatchBo implements Serializable {
+
+    private List<Long> invoiceIds;
+
+    private String handleRemark;
+
+    private Integer washStatus;
+
+    private String remark;
+}

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyInvoiceCheckBo.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月24日 9:30
+ */
+@Data
+public class CompanyInvoiceCheckBo implements Serializable {
+
+    @ApiModelProperty("")
+    private Long invoiceId;
+
+    @ApiModelProperty("发票图片地址集合")
+    private String invoiceUrlList;
+
+    @ApiModelProperty("处理备注")
+    private String handleRemark;
+
+    @ApiModelProperty("审核结果:1通过 2不通过")
+    private Integer checkResult;
+
+    @ApiModelProperty("审核原因")
+    private String checkReason;
+}

+ 49 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/CompanyOrderInvoiceBo.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:26
+ */
+@Data
+public class CompanyOrderInvoiceBo implements Serializable {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+    /** 排序列 */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+    /** 排序的方向desc或者asc */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+    @ApiModelProperty("商品类型:1课程 2题库")
+    private Integer goodsType;
+
+    @ApiModelProperty("教育层次ID")
+    private Long educationTypeId;
+
+    @ApiModelProperty("业务层次ID")
+    private Long businessId;
+
+    @ApiModelProperty("发票状态:1待审核 2已开票 3不通过 4已失效")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty("冲红状态:1待冲红 2已冲红")
+    private Integer washStatus;
+
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递")
+    private Integer invoiceMode;
+
+    @ApiModelProperty("关键字")
+    private String keyword;
+
+}

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

@@ -113,4 +113,6 @@ public class OrderAddBo {
     private Integer openQuestionSign;
     @ApiModelProperty("业务系统订单标识")
     private Integer orgSign;
+    @ApiModelProperty("经办人订单编号")
+    private String handleOrderSn;
 }

+ 90 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleAddBo.java

@@ -0,0 +1,90 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 经办录单添加对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单添加对象")
+public class OrderHandleAddBo {
+
+    /** 录单订单编号 */
+    @ApiModelProperty("录单订单编号")
+    private String handleOrderSn;
+    /** 系统订单操作人 */
+    @ApiModelProperty("系统订单操作人")
+    private String createUsername;
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+    /** 经办人操作人ID */
+    @ApiModelProperty("经办人操作人ID")
+    private Long createUserId;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+    /** 录单来源 1经办人下单 */
+    @ApiModelProperty("录单来源 1经办人下单")
+    private Integer inputFrom;
+    /** 支付状态:0待支付 1已支付 -1已关闭 */
+    @ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+    private Integer payStatus;
+    /** 商品类型 */
+    @ApiModelProperty("商品类型")
+    private Integer goodsType;
+    /** 订单标准价格 */
+    @ApiModelProperty("订单标准价格")
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    @ApiModelProperty("支付平台 1微信 2对公转账")
+    private Integer payType;
+    /** 支付时间 */
+    @ApiModelProperty("支付时间")
+    private Long payTime;
+    /** 支付价格(成交价) */
+    @ApiModelProperty("支付价格(成交价)")
+    private BigDecimal payPrice;
+
+    private List<OrderHandleItemAddBo> userGoodsList;
+
+    private Long overTime;
+
+    private String companyName;
+
+    private String companyTel;
+
+    private String companyRemark;
+
+    private String companyPayImg;
+    @ApiModelProperty("收款公司名称")
+    private String recCompanyName;
+    @ApiModelProperty("收款公司开户银行")
+    private String recCompanyBank;
+    @ApiModelProperty("收款公司账号")
+    private String recCompanyAccount;
+
+}

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

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月26日 9:25
+ */
+@Data
+public class OrderHandleCheckBo implements Serializable {
+
+    @ApiModelProperty("订单号")
+    private String orderHandleSn;
+    @ApiModelProperty("审核结果:1通过 2不通过")
+    private Integer checkResult;
+    @ApiModelProperty("审核原因")
+    private String checkReason;
+}

+ 97 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleEditBo.java

@@ -0,0 +1,97 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * 经办录单编辑对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单编辑对象")
+public class OrderHandleEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 录单订单编号 */
+    @ApiModelProperty("录单订单编号")
+    private String handleOrderSn;
+
+    /** 系统订单操作人 */
+    @ApiModelProperty("系统订单操作人")
+    private String createUsername;
+
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+
+    /** 经办人操作人ID */
+    @ApiModelProperty("经办人操作人ID")
+    private Long createUserId;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+
+
+    /** 录单来源 1经办人下单 */
+    @ApiModelProperty("录单来源 1经办人下单")
+    private Integer inputFrom;
+
+    /** 支付状态:0待支付 1已支付 -1已关闭 */
+    @ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+    private Integer payStatus;
+
+    /** 商品类型 */
+    @ApiModelProperty("商品类型")
+    private Integer goodsType;
+    /** 订单标准价格 */
+    @ApiModelProperty("订单标准价格")
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    @ApiModelProperty("支付平台 1微信 2对公转账")
+    private Integer payType;
+    /** 支付时间 */
+    @ApiModelProperty("支付时间")
+    private Long payTime;
+    /** 支付价格(成交价) */
+    @ApiModelProperty("支付价格(成交价)")
+    private BigDecimal payPrice;
+    private Long overTime;
+    private String companyName;
+
+    private String companyTel;
+
+    private String companyRemark;
+
+    private String companyPayImg;
+
+    @ApiModelProperty("收款公司名称")
+    private String recCompanyName;
+    @ApiModelProperty("收款公司开户银行")
+    private String recCompanyBank;
+    @ApiModelProperty("收款公司账号")
+    private String recCompanyAccount;
+}

+ 27 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleItemAddBo.java

@@ -0,0 +1,27 @@
+package com.zhongzheng.modules.order.bo;
+
+import com.zhongzheng.modules.user.bo.UserImportAddBo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 经办录单添加对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单添加对象")
+public class OrderHandleItemAddBo {
+
+   private UserImportAddBo user;
+
+   private List<OrderGoodsAddBo> goodsList;
+
+
+}

+ 85 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderHandleQueryBo.java

@@ -0,0 +1,85 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 经办录单分页查询对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("经办录单分页查询对象")
+public class OrderHandleQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 录单订单编号 */
+	@ApiModelProperty("录单订单编号")
+	private String handleOrderSn;
+	/** 系统订单操作人 */
+	@ApiModelProperty("系统订单操作人")
+	private String createUsername;
+	/** 1有效 0无效 */
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 经办人操作人ID */
+	@ApiModelProperty("经办人操作人ID")
+	private Long createUserId;
+	/** 教育类型id */
+	@ApiModelProperty("教育类型id")
+	private Long educationTypeId;
+	/** 业务层次id */
+	@ApiModelProperty("业务层次id")
+	private Long businessId;
+	/** 项目ID */
+	@ApiModelProperty("项目ID")
+	private Long projectId;
+	/** 录单来源 1经办人下单 */
+	@ApiModelProperty("录单来源 1经办人下单")
+	private Integer inputFrom;
+	/** 支付状态:0待支付 1已支付 -1已关闭 */
+	@ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+	private Integer payStatus;
+	/** 商品类型 */
+	@ApiModelProperty("商品类型")
+	private Integer goodsType;
+
+	private String searchKey;
+
+	@ApiModelProperty("退款状态:0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+
+	@ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+	private Integer invoiceStatus;
+
+	@ApiModelProperty("开始时间")
+	private Long startTime;
+
+	@ApiModelProperty("结束时间")
+	private Long endTime;
+
+
+}

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

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月25日 15:42
+ */
+@Data
+public class OrderHandleRefundBo implements Serializable {
+
+    @ApiModelProperty("收款人")
+    private String payee;
+    @ApiModelProperty("收款银行")
+    private String payeeBank;
+    @ApiModelProperty("收款账号")
+    private String payeeBankAccount;
+    @ApiModelProperty("退款原因")
+    private String refundReason;
+    @ApiModelProperty("订单号")
+    private String handleOrderSn;
+    @ApiModelProperty("退款金额")
+    private BigDecimal refundPrice;
+    @ApiModelProperty("订单商品IDs")
+    private List<Long> orderGoodsIds;
+}

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

@@ -111,4 +111,22 @@ public class OrderInvoiceAddBo {
     private List<Long> orderGoodsIds;
     @ApiModelProperty("发票备注")
     private String invoiceRemark;
+    /** 发票类型:0,C端个人发票  1,C端企业发票 */
+    @ApiModelProperty("发票类型:1,C端个人发票  2,C端企业发票")
+    private Integer invoiceType;
+    /** 收票姓名 */
+    @ApiModelProperty("收票姓名")
+    private String consignee;
+    @ApiModelProperty("收票电话")
+    private String collectionTelephone;
+    /** 收票地址 */
+    @ApiModelProperty("收票地址")
+    private String shippingAddress;
+    /** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+    private String invoiceMode;
+    @ApiModelProperty("订单号")
+    private String orderSn;
+    @ApiModelProperty("开票备注")
+    private String openRemark;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderPayAddBo.java

@@ -44,4 +44,5 @@ public class OrderPayAddBo {
     /** 微信流水号 */
     @ApiModelProperty("微信流水号")
     private String transid;
+    private Integer orderFrom;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.order.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -189,4 +190,5 @@ private static final long serialVersionUID=1L;
     /** 业务系统订单标识 */
     private Integer orgSign;
 
+    private String handleOrderSn;
 }

+ 7 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoodsRefund.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.order.domain;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -79,4 +80,10 @@ private static final long serialVersionUID=1L;
     private Integer divideModel;
     /** 待扣分成钱 */
     private BigDecimal divideMoney;
+    /** 收款人 */
+    private String payee;
+    /** 收款银行 */
+    private String payeeBank;
+    /** 收款账号 */
+    private String payeeBankAccount;
 }

+ 91 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderHandle.java

@@ -0,0 +1,91 @@
+package com.zhongzheng.modules.order.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 经办录单对象 order_handle
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("order_handle")
+public class OrderHandle implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 录单订单编号 */
+    private String handleOrderSn;
+    /** 系统订单操作人 */
+    private String createUsername;
+    /** 1有效 0无效 */
+    private Integer status;
+    /** 经办人操作人ID */
+    private Long createUserId;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 教育类型id */
+    private Long educationTypeId;
+    /** 业务层次id */
+    private Long businessId;
+    /** 项目ID */
+    private Long projectId;
+    /** 录单来源 1经办人下单 */
+    private Integer inputFrom;
+    /** 支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过 */
+    private Integer payStatus;
+    /** 商品类型 */
+    private Integer goodsType;
+    /** 订单标准价格 */
+    private BigDecimal orderPrice;
+    /** 支付平台 1微信 2对公转账 */
+    private Integer payType;
+    /** 支付时间 */
+    private Long payTime;
+    /** 支付价格(成交价) */
+    private BigDecimal payPrice;
+    private Long overTime;
+    private String companyName;
+
+    private String companyTel;
+
+    private String companyRemark;
+
+    private String companyPayImg;
+
+    private Long closeTime;
+
+    private String checkReason;
+    /** 退款状态: 0待审核 1已退款 2不通过 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer refundStatus;
+    /** 退款金额 */
+    private BigDecimal refundPrice;
+    /** 已退 */
+    private BigDecimal refundedPrice;
+    /** 审核时间 */
+    private Long checkTime;
+
+
+    private String recCompanyName;
+
+    private String recCompanyBank;
+
+    private String recCompanyAccount;
+}

+ 24 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoice.java

@@ -41,16 +41,17 @@ private static final long serialVersionUID=1L;
     /** 纳税登记号 */
     private String taxRegistryNumber;
     /** 添加时间 */
-    @TableField(fill = FieldFill.INSERT)
+//    @TableField(fill = FieldFill.INSERT)
     private Long createTime;
     /** 修改时间 */
-    @TableField(fill = FieldFill.INSERT_UPDATE)
+//    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
     /** 状态 1有效 0无效 */
     private Integer status;
     /** 发票状态 1未开票 2已开票 -1 已退票 */
     private Integer invoiceStatus;
     /** 发票金额 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private BigDecimal amount;
     /** 发票代码 */
     private String invoiceCode;
@@ -88,4 +89,25 @@ private static final long serialVersionUID=1L;
     private Long periodTime;
     /** 流水号 */
     private String serialNumber;
+    /** 发票类型:0,C端个人发票  1,C端企业发票 */
+    private Integer invoiceType;
+    /** 发票备注 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String invoiceRemark;
+    /** 收票姓名 */
+    private String consignee;
+    /** 收票电话 */
+    private String collectionTelephone;
+    /** 收票地址 */
+    private String shippingAddress;
+    /** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+    private String invoiceMode;
+    /** 冲红状态:1待冲红 2已冲红 */
+    private Integer washStatus;
+    /** 开票备注 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String openRemark;
+    /** 处理备注 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String handleRemark;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoiceOrder.java

@@ -30,4 +30,6 @@ private static final long serialVersionUID=1L;
     private Long invoiceId;
     /** 订单商品ID */
     private Long orderGoodsId;
+    /** 订单号 */
+    private String orderSn;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderPay.java

@@ -44,4 +44,6 @@ private static final long serialVersionUID=1L;
     private BigDecimal payPrice;
     /** 微信流水号 */
     private String transid;
+
+    private Integer orderFrom;
 }

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderHandleMapper.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.order.bo.OrderHandleQueryBo;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+
+import java.util.List;
+
+/**
+ * 经办录单Mapper接口
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+public interface OrderHandleMapper extends BaseMapper<OrderHandle> {
+
+    List<OrderHandleVo> selectOrderList(OrderHandleQueryBo bo);
+
+    List<OrderHandleGoodsVo> selectOrderGoodsList(OrderHandleQueryBo bo);
+
+}

+ 7 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderInvoiceMapper.java

@@ -1,10 +1,13 @@
 package com.zhongzheng.modules.order.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.order.bo.CompanyOrderInvoiceBo;
 import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -15,7 +18,10 @@ import java.util.List;
  * @date 2022-03-29
  */
 public interface OrderInvoiceMapper extends BaseMapper<OrderInvoice> {
-    List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo);
+    List<OrderInvoiceVo> selectListByBo(OrderInvoiceQueryBo bo);
     Long checkHave(Long orderGoodsId);
 
+    List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo);
+
+    List<OrderInvoice> listWashInvoice(@Param("orderSn") String orderSn,@Param("invoiceId") Long invoiceId);
 }

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

@@ -3,11 +3,14 @@ package com.zhongzheng.modules.order.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
 import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.domain.OrderGoodsRefund;
 import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrderRefund;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +44,10 @@ public interface IOrderGoodsRefundService extends IService<OrderGoodsRefund> {
 
 	Boolean placeRefundInputOrder(List<OrderGoodsRefundAddBo> bos);
 
+	Boolean refundCall(String WxpayRefundId, Long refundId, Long orderGoodsId, Order order, Integer goodsType, Long gradeId, Long userId, Long goodsId);
+
+	Boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee);
+
 	/**
 	 * 根据编辑业务对象修改订单商品退款
 	 * @param bo 订单商品退款编辑业务对象

+ 79 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderHandleService.java

@@ -0,0 +1,79 @@
+package com.zhongzheng.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.OrderHandle;
+import com.zhongzheng.modules.order.domain.OrderInput;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import com.zhongzheng.modules.order.vo.OrderInputVo;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 经办录单Service接口
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+public interface IOrderHandleService extends IService<OrderHandle> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	OrderHandleVo queryById(Long id);
+
+	OrderHandle queryBySn(String handleOrderSn);
+
+	/**
+	 * 查询列表
+	 */
+	List<OrderHandleVo> queryList(OrderHandleQueryBo bo);
+
+	List<OrderHandleVo> selectList(OrderHandleQueryBo bo);
+
+	List<OrderHandleGoodsVo> selectOrderGoodsList(OrderHandleQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入经办录单
+	 * @param bo 经办录单新增业务对象
+	 * @return
+	 */
+	String insertByAddBo(OrderHandleAddBo bo);
+
+	String createOrder(OrderHandleAddBo bo);
+
+	Map<String, String> resumePayOrder(OrderHandleAddBo bo);
+
+	Boolean closeOrder(OrderHandleAddBo bo);
+
+	Boolean overTimeCloseOrder();
+
+	/**
+	 * 根据编辑业务对象修改经办录单
+	 * @param bo 经办录单编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(OrderHandleEditBo bo);
+
+	Boolean updateRefuseBo(OrderHandleEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+	boolean refundApply(OrderHandleRefundBo bo);
+
+	OrderHandleStatisticsVo statistics(OrderHandleQueryBo bo);
+
+	boolean checkOrderHandle(OrderHandleCheckBo bo);
+
+	boolean refundOrderHandle(OrderHandleCheckBo bo);
+}

+ 13 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderInvoiceService.java

@@ -1,10 +1,10 @@
 package com.zhongzheng.modules.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhongzheng.modules.order.bo.OrderInvoiceAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceEditBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 
@@ -52,4 +52,14 @@ public interface IOrderInvoiceService extends IService<OrderInvoice> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 	List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo);
+
+	List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo);
+
+    CompanyStatisticsVo listCompanyStatistics(CompanyOrderInvoiceBo bo);
+
+	OrderInvoiceVo getCompanyInvoiceDetail(Long invoiceId);
+
+	boolean companyInvoiceCheck(CompanyInvoiceCheckBo bo);
+
+	boolean companyBatchHandle(CompanyInvoiceBatchBo bo);
 }

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

@@ -62,6 +62,8 @@ public interface IOrderService extends IService<Order> {
 
 	Map<String, Object> placePlatInputOrder(OrderAddBo bo);
 
+	Map<String, Object> placePlatHandleOrder(OrderAddBo bo);
+
 	boolean joinGrade(Long orderGoodsId,Long gradeId,Long userId);
 	/**
 	 * 小程序下单

+ 4 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -517,6 +517,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         return true;
     }
 
+    @Override
     public Boolean refundCall(String WxpayRefundId,Long refundId,Long orderGoodsId,Order order,Integer goodsType,Long gradeId,Long userId,Long goodsId){
         OrderGoodsRefund update = new OrderGoodsRefund();
         update.setRefundId(refundId);
@@ -563,7 +564,8 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
      * @param orderGoods
      * @return
      */
-    public boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee) {
+    @Override
+    public Boolean shareClientCancelOldSys(Order order, OrderGoods orderGoods, BigDecimal refund_fee) {
         if (Validator.isNotEmpty(order)) {
             OrderShareMoney shareMoney = iOrderShareMoneyService.getOne(new LambdaQueryWrapper<OrderShareMoney>()
                     .eq(OrderShareMoney::getStatus, 1)
@@ -962,7 +964,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean firstPeriod(List<OrderGoodsRefundEditBo> bos) {
+    public Boolean  firstPeriod(List<OrderGoodsRefundEditBo> bos) {
         for(OrderGoodsRefundEditBo bo : bos){
             if(Validator.isEmpty(bo.getPeriodStatus())||Validator.isEmpty(bo.getRefundId())){
                 throw new CustomException("参数不全");

+ 1 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -609,7 +609,6 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
 
             Long secLong = 0L;
             Long studyLong = 0L;
-            Integer studyStatus = 0;
             SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
             subjectStudyRecordQueryBo.setGoodsId(goodsVo.getGoodsId());
             subjectStudyRecordQueryBo.setUserId(bo.getUserId());
@@ -625,11 +624,10 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
             if (ObjectUtils.isNotNull(vo)){
                 secLong = vo.getSectionNum();
                 studyLong = vo.getRecordNum();
-                studyStatus = studyStatus + vo.getStudyStatus().intValue();
             }
             goodsVo.setSecAllNum(secLong);
             goodsVo.setStuAllNum(studyLong);
-            if(studyStatus>0){
+            if(goodsVo.getStudyStatus()>0){
                 goodsVo.setStudyStatus(2);
             }else{
                 goodsVo.setStudyStatus(1);

+ 685 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderHandleServiceImpl.java

@@ -0,0 +1,685 @@
+package com.zhongzheng.modules.order.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.modules.course.domain.CourseBusiness;
+import com.zhongzheng.modules.goods.domain.Goods;
+import com.zhongzheng.modules.goods.service.IGoodsService;
+import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.*;
+import com.zhongzheng.modules.order.mapper.OrderHandleMapper;
+import com.zhongzheng.modules.order.service.*;
+import com.zhongzheng.modules.order.vo.OrderHandleGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleStatisticsVo;
+import com.zhongzheng.modules.order.vo.OrderHandleVo;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.system.vo.SysTenantHandleAccountVo;
+import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
+import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.service.IUserStudyRecordService;
+import com.zhongzheng.modules.user.vo.SubjectStudyRecordVo;
+import com.zhongzheng.modules.user.vo.UserVo;
+import com.zhongzheng.modules.wx.service.IWxPayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 经办录单Service业务层处理
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Service
+public class OrderHandleServiceImpl extends ServiceImpl<OrderHandleMapper, OrderHandle> implements IOrderHandleService {
+
+    @Autowired
+    private IUserService iUserService;
+
+
+    @Autowired
+    private IOrderService iOrderService;
+
+    @Autowired
+    private IWxPayService iWxPayService;
+
+    @Autowired
+    private IOrderPayService iOrderPayService;
+
+    @Autowired
+    private IUserStudyRecordService iUserStudyRecordService;
+
+    @Autowired
+    private ISysTenantService sysTenantService;
+
+    @Autowired
+    private IOrderInvoiceOrderService iOrderInvoiceOrderService;
+
+    @Autowired
+    private IOrderInvoiceService iOrderInvoiceService;
+
+    @Autowired
+    private IOrderGoodsRefundService iOrderGoodsRefundService;
+
+    @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+
+    @Autowired
+    private IGoodsService iGoodsService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @Override
+    public OrderHandleVo queryById(Long id) {
+        OrderHandle db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, OrderHandleVo.class);
+    }
+
+    @Override
+    public OrderHandle queryBySn(String handleOrderSn) {
+        return getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, handleOrderSn));
+    }
+
+    @Override
+    public List<OrderHandleVo> queryList(OrderHandleQueryBo bo) {
+        LambdaQueryWrapper<OrderHandle> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getHandleOrderSn()), OrderHandle::getHandleOrderSn, bo.getHandleOrderSn());
+        lqw.like(StrUtil.isNotBlank(bo.getCreateUsername()), OrderHandle::getCreateUsername, bo.getCreateUsername());
+        lqw.eq(bo.getStatus() != null, OrderHandle::getStatus, bo.getStatus());
+        lqw.eq(bo.getCreateUserId() != null, OrderHandle::getCreateUserId, bo.getCreateUserId());
+        lqw.eq(bo.getEducationTypeId() != null, OrderHandle::getEducationTypeId, bo.getEducationTypeId());
+        lqw.eq(bo.getBusinessId() != null, OrderHandle::getBusinessId, bo.getBusinessId());
+        lqw.eq(bo.getProjectId() != null, OrderHandle::getProjectId, bo.getProjectId());
+        lqw.eq(bo.getInputFrom() != null, OrderHandle::getInputFrom, bo.getInputFrom());
+        lqw.eq(bo.getPayStatus() != null, OrderHandle::getPayStatus, bo.getPayStatus());
+        lqw.eq(bo.getGoodsType() != null, OrderHandle::getGoodsType, bo.getGoodsType());
+        return entity2Vo(this.list(lqw));
+    }
+
+    @Override
+    public List<OrderHandleVo> selectList(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> orderHandleVos = baseMapper.selectOrderList(bo);
+        if (CollectionUtils.isEmpty(orderHandleVos)) {
+            return new ArrayList<>();
+        }
+        orderHandleVos.forEach(item -> {
+            //实际价格
+            item.setRealPrice(item.getPayPrice().subtract(item.getGoodsRefund()));
+            //发票
+            List<OrderInvoiceOrder> list = iOrderInvoiceOrderService
+                    .list(new LambdaQueryWrapper<OrderInvoiceOrder>()
+                            .eq(OrderInvoiceOrder::getOrderSn, item.getHandleOrderSn()));
+            if (CollectionUtils.isNotEmpty(list)) {
+                List<OrderInvoice> invoices = iOrderInvoiceService.list(new LambdaQueryWrapper<OrderInvoice>()
+                        .in(OrderInvoice::getInvoiceId, list.stream().map(OrderInvoiceOrder::getInvoiceId).collect(Collectors.toList()))
+                        .and(x -> x.isNull(OrderInvoice::getWashStatus).or().eq(OrderInvoice::getWashStatus, 1)
+                                .eq(OrderInvoice::getStatus, 1))
+                        .orderByDesc(OrderInvoice::getCreateTime));
+                if (CollectionUtils.isNotEmpty(invoices)) {
+                    OrderInvoice invoice = invoices.get(0);
+                    if (invoice.getInvoiceStatus() == 2) {
+                        item.setInvoiceStatus(invoice.getInvoiceStatus());
+                    } else if (invoice.getPeriodStatus() == 1) {
+                        item.setInvoiceStatus(invoice.getPeriodStatus());
+                    } else if (invoice.getPeriodStatus() == 2) {
+                        item.setInvoiceStatus(3);
+                    }else {
+                        item.setInvoiceStatus(invoice.getInvoiceStatus());
+                    }
+                    item.setHandleRemark(invoice.getHandleRemark());
+                    item.setInvoiceMode(invoice.getInvoiceMode());
+                    item.setInvoiceReason(invoice.getPeriodReason());
+                    item.setInvoiceUrl(invoices.stream().filter(x -> StringUtils.isNotBlank(x.getInvoiceImg())).map(OrderInvoice::getInvoiceImg).collect(Collectors.joining(",")));
+                }
+            }
+            //退款
+            if (ObjectUtils.isNotNull(item.getRefundStatus()) && item.getRefundStatus() == 0) {
+                List<Order> orders = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, item.getHandleOrderSn()));
+                List<OrderGoodsRefund> list1 = iOrderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                        .in(OrderGoodsRefund::getOrderSn, orders.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                        .eq(OrderGoodsRefund::getStatus, 1)
+                        .eq(OrderGoodsRefund::getPeriodStatus, 0));
+                if (CollectionUtils.isNotEmpty(list1)) {
+                    OrderGoodsRefund refund = list1.get(0);
+                    item.setPayee(refund.getPayee());
+                    item.setPayeeBank(refund.getPayeeBank());
+                    item.setPayeeBankAccount(refund.getPayeeBankAccount());
+                    item.setRefundCheckReason(refund.getPeriodReason());
+                    item.setRefundApplyReason(refund.getApplyReason());
+                }
+            }
+        });
+        return orderHandleVos;
+    }
+
+    @Override
+    public List<OrderHandleGoodsVo> selectOrderGoodsList(OrderHandleQueryBo bo) {
+        List<OrderHandleGoodsVo> list = this.baseMapper.selectOrderGoodsList(bo);
+        for (OrderHandleGoodsVo vo : list) {
+            Long secLong = 0L;
+            Long studyLong = 0L;
+
+            if (vo.getPayStatus() == 1) {
+                SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+                subjectStudyRecordQueryBo.setGoodsId(vo.getGoodsId());
+                subjectStudyRecordQueryBo.setUserId(vo.getUserId());
+                subjectStudyRecordQueryBo.setGradeId(vo.getGradeId());
+                subjectStudyRecordQueryBo.setOrderGoodsId(vo.getOrderGoodsId());
+                List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubject(subjectStudyRecordQueryBo);
+                for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
+                    secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
+                    studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
+
+                }
+                vo.setSecAllNum(secLong);
+                vo.setStuAllNum(studyLong);
+            }
+            //退款
+            OrderGoodsRefund refund = iOrderGoodsRefundService
+                    .getOne(new LambdaQueryWrapper<OrderGoodsRefund>()
+                            .eq(OrderGoodsRefund::getOrderGoodsId, vo.getOrderGoodsId())
+                            .eq(OrderGoodsRefund::getStatus, 1)
+                            .orderByDesc(OrderGoodsRefund::getCreateTime)
+                            .last("limit 1"));
+            if (ObjectUtils.isNotNull(refund)) {
+                vo.setRefundStatus(refund.getPeriodStatus());
+                vo.setRefundReason(refund.getApplyReason());
+                vo.setPeriodReason(refund.getPeriodReason());
+                vo.setRefundCheckReason(refund.getPeriodReason());
+                vo.setRefundApplyReason(refund.getApplyReason());
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 实体类转化成视图对象
+     *
+     * @param collection 实体类集合
+     * @return
+     */
+    private List<OrderHandleVo> entity2Vo(Collection<OrderHandle> collection) {
+        List<OrderHandleVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, OrderHandleVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<OrderHandle> page = (Page<OrderHandle>) collection;
+            Page<OrderHandleVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page, pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public String insertByAddBo(OrderHandleAddBo bo) {
+        if (Validator.isEmpty(bo.getBusinessId()) || Validator.isEmpty(bo.getGoodsType()) || Validator.isEmpty(bo.getInputFrom()) || Validator.isEmpty(bo.getPayType())) {
+            throw new CustomException("参数缺失");
+        }
+        OrderHandle add = BeanUtil.toBean(bo, OrderHandle.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setHandleOrderSn(DateUtils.getTagOrderSn("HD"));
+        add.setOverTime(DateUtils.getNowTime() + 7 * 24 * 3600);
+        if (Validator.isEmpty(add.getInputFrom())) {
+            add.setInputFrom(1);
+        }
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysTenant tenant = sysTenantService.getById(tenantId);
+        //账号信息
+        String information = tenant.getHandleBank();
+        SysTenantHandleAccountVo accountVo = JSONObject.parseObject(information, SysTenantHandleAccountVo.class);
+        if (Validator.isNotEmpty(accountVo)) {
+            add.setRecCompanyAccount(accountVo.getRecCompanyAccount());
+            add.setRecCompanyBank(accountVo.getRecCompanyBank());
+            add.setRecCompanyName(accountVo.getRecCompanyName());
+        }
+        if (this.save(add)) {
+            return add.getHandleOrderSn();
+        }
+        return null;
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String createOrder(OrderHandleAddBo bo) {
+        String key = "SUBMIT_HANDLE:"+bo.getCreateUserId()+"-"+bo.getUserGoodsList().size();
+        Long keyStatus = redisCache.getCacheObject(key);
+        if(Validator.isNotEmpty(keyStatus)&&keyStatus==100L){
+            throw new CustomException("禁止频繁提交",667);
+        }
+        redisCache.setCacheObject(key, 100L,60, TimeUnit.SECONDS);
+
+        String handleOrderSn = insertByAddBo(bo);
+        String importNo = ServletUtils.getEncoded("IMPORT");
+        Map<String,String> telMap = new HashMap<>();
+        Map<String,String> idMap = new HashMap<>();
+        for (OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()) {
+            if(Validator.isNotEmpty(itemAddBo.getUser().getTelphone())){
+                if(!telMap.containsKey(itemAddBo.getUser().getTelphone())){
+                    telMap.put(itemAddBo.getUser().getTelphone(),itemAddBo.getUser().getIdCard());
+                }else{
+                    redisCache.deleteObject(key);
+                    throw new CustomException("本次名单存在手机号码"+itemAddBo.getUser().getTelphone()+"重复用户");
+                }
+            }
+            if(Validator.isNotEmpty(itemAddBo.getUser().getIdCard())){
+                if(!idMap.containsKey(itemAddBo.getUser().getIdCard())){
+                    idMap.put(itemAddBo.getUser().getIdCard(),itemAddBo.getUser().getTelphone());
+                }else{
+                    redisCache.deleteObject(key);
+                    throw new CustomException("本次名单存在身份证号码"+itemAddBo.getUser().getIdCard ()+"重复用户");
+                }
+            }
+        }
+        for (OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()) {
+            if (Validator.isEmpty(itemAddBo.getUser().getUserId())) {
+                if (Validator.isEmpty(itemAddBo.getUser().getEduLevel()) || Validator.isEmpty(itemAddBo.getUser().getCompanyName()) || Validator.isEmpty(itemAddBo.getUser().getSex())) {
+                    redisCache.deleteObject(key);
+                    throw new CustomException("用户参数缺失");
+                }
+                Long userId = iUserService.importUser(itemAddBo.getUser(), importNo);
+                itemAddBo.getUser().setUserId(userId);
+            }
+        }
+        for (OrderHandleItemAddBo itemAddBo : bo.getUserGoodsList()) {
+            OrderAddBo addBo = new OrderAddBo();
+            addBo.setUserId(itemAddBo.getUser().getUserId());
+            addBo.setGoodsList(itemAddBo.getGoodsList());
+            addBo.setHandleOrderSn(handleOrderSn);
+            iOrderService.placePlatHandleOrder(addBo);
+        }
+        redisCache.deleteObject(key);
+        return handleOrderSn;
+    }
+
+
+    @Override
+    public Map<String, String> resumePayOrder(OrderHandleAddBo bo) {
+        if (Validator.isEmpty(bo.getHandleOrderSn())) {
+            throw new CustomException("录单单号为空");
+        }
+        if (Validator.isEmpty(bo.getPayType())) {
+            throw new CustomException("支付方式缺失");
+        }
+        OrderHandle orderHandle = queryBySn(bo.getHandleOrderSn());
+        if (Validator.isEmpty(orderHandle)) {
+            throw new CustomException("录单单号不存在");
+        }
+        if (orderHandle.getPayStatus() != 0) {
+            throw new CustomException("非支付状态");
+        }
+        if (orderHandle.getOverTime() < DateUtils.getNowTime()) {
+            throw new CustomException("已超时关闭");
+        }
+        UserVo userVo = iUserService.queryById(bo.getCreateUserId());
+        if (bo.getPayType() == 1) {
+            Map<String, String> payResult = new HashMap<>();
+            if (orderHandle.getPayPrice().compareTo(BigDecimal.ZERO) != 0) {
+                OrderPayAddBo payAddBo = new OrderPayAddBo();
+                //生成支付单号
+                String pay_no = DateUtils.getPayOrderSn();
+                payAddBo.setPaySn(pay_no);
+                payAddBo.setOrderSn(orderHandle.getHandleOrderSn());
+                payAddBo.setStatus(0);
+                payAddBo.setPayPrice(orderHandle.getPayPrice());
+                payAddBo.setOrderFrom(2);
+                iOrderPayService.insertByAddBo(payAddBo);
+                String body = "中正云-订单:" + orderHandle.getHandleOrderSn();
+                payResult = iWxPayService.paymentPc(pay_no, userVo.getOpenId(), body, orderHandle.getPayPrice());
+                payResult.put("orderSn", orderHandle.getHandleOrderSn());
+                return payResult;
+            }
+        } else if (bo.getPayType() == 2) {
+            if (Validator.isEmpty(bo.getCompanyName()) || Validator.isEmpty(bo.getCompanyTel()) || Validator.isEmpty(bo.getCompanyPayImg())) {
+                throw new CustomException("对公凭证缺失");
+            }
+            LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyName, bo.getCompanyName());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyTel, bo.getCompanyTel());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyRemark, bo.getCompanyRemark());
+            objectLambdaUpdateWrapper.set(OrderHandle::getCompanyPayImg, bo.getCompanyPayImg());
+            objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, 2);
+            objectLambdaUpdateWrapper.set(OrderHandle::getPayType, 2);
+            this.update(null, objectLambdaUpdateWrapper);
+
+            LambdaUpdateWrapper<Order> objectLambdaUpdateWrapper2 = Wrappers.lambdaUpdate();
+            objectLambdaUpdateWrapper2.eq(Order::getHandleOrderSn, orderHandle.getHandleOrderSn());
+            objectLambdaUpdateWrapper2.set(Order::getPayType, 7);
+            objectLambdaUpdateWrapper2.set(Order::getUpdateTime, DateUtils.getNowTime());
+            iOrderService.update(null, objectLambdaUpdateWrapper2);
+
+            Map<String, String> payResult = new HashMap<>();
+            return payResult;
+        }
+
+        return null;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean closeOrder(OrderHandleAddBo bo) {
+        OrderHandle orderHandle = queryBySn(bo.getHandleOrderSn());
+        if (Validator.isEmpty(orderHandle)) {
+            throw new CustomException("录单单号不存在");
+        }
+        if (orderHandle.getPayStatus() != 0) {
+            throw new CustomException("非待支付状态");
+        }
+        LambdaUpdateWrapper<OrderHandle> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+        objectLambdaUpdateWrapper.eq(OrderHandle::getId, orderHandle.getId());
+        objectLambdaUpdateWrapper.set(OrderHandle::getUpdateTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(OrderHandle::getCloseTime, DateUtils.getNowTime());
+        objectLambdaUpdateWrapper.set(OrderHandle::getPayStatus, -1);
+        this.update(null, objectLambdaUpdateWrapper);
+
+        List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, orderHandle.getHandleOrderSn()));
+        for (Order order : list) {
+            OrderEditBo editBo = new OrderEditBo();
+            editBo.setOrderId(order.getOrderId());
+            editBo.setOrderStatus(-1);
+            iOrderService.updateByEditBo(editBo);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean overTimeCloseOrder() {
+        List<OrderHandle> list = this.list(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getPayStatus, 0).lt(OrderHandle::getOverTime,DateUtils.getNowTime()));
+        for(OrderHandle orderHandle : list){
+            OrderHandleAddBo addBo = new OrderHandleAddBo();
+            addBo.setHandleOrderSn(orderHandle.getHandleOrderSn());
+            closeOrder(addBo);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean updateByEditBo(OrderHandleEditBo bo) {
+        OrderHandle update = BeanUtil.toBean(bo, OrderHandle.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    @Override
+    public Boolean updateRefuseBo(OrderHandleEditBo bo) {
+        OrderHandle orderHandle = queryBySn(bo.getHandleOrderSn());
+        if (Validator.isEmpty(orderHandle)) {
+            throw new CustomException("录单单号不存在");
+        }
+        if (orderHandle.getPayStatus()!=-2) {
+            throw new CustomException("非拒绝状态");
+        }
+        OrderHandle update = new OrderHandle();
+        update.setId(orderHandle.getId());
+        update.setPayStatus(2);
+        update.setCompanyPayImg(bo.getCompanyPayImg());
+        update.setCompanyName(bo.getCompanyName());
+        update.setCompanyTel(bo.getCompanyTel());
+        update.setCompanyRemark(bo.getCompanyRemark());
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(OrderHandle entity) {
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if (isValid) {
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean refundApply(OrderHandleRefundBo bo) {
+        if (ObjectUtils.isNull(bo.getHandleOrderSn())) {
+            throw new CustomException("请先选择订单");
+        }
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getHandleOrderSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单信息有误");
+        }
+        if (ObjectUtils.isNotNull(orderHandle.getRefundStatus()) && orderHandle.getRefundStatus() == 0) {
+            throw new CustomException("当前订单存在退款审核,请先处理");
+        }
+        if (orderHandle.getPayType() == 2) {
+            //对公
+            if (ObjectUtils.isNull(bo.getPayee()) || ObjectUtils.isNull(bo.getPayeeBank()) || ObjectUtils.isNull(bo.getPayeeBankAccount())) {
+                throw new CustomException("请先填写收款信息");
+            }
+        }
+        bo.getOrderGoodsIds().forEach(orderGoodsId -> {
+            OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
+            orderGoods.setRefundStatus(1);//申请退款
+            iOrderGoodsService.updateById(orderGoods);
+            Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, orderGoods.getOrderSn()));
+            order.setOrderRefundStatus(0);
+            iOrderService.updateById(order);
+            //创建退款信息
+            OrderGoodsRefund refund = new OrderGoodsRefund();
+            refund.setCreateTime(DateUtils.getNowTime());
+            refund.setUpdateTime(DateUtils.getNowTime());
+            //退款单号
+            String out_trade_no = DateUtils.getDateOrderSn();
+            refund.setRefundSn(out_trade_no);
+            refund.setUserId(order.getUserId());
+            refund.setOrderSn(order.getOrderSn());
+            refund.setGoodsId(orderGoods.getGoodsId());
+            refund.setRefundFee(orderGoods.getGoodsPrice());
+            refund.setRealRefundFee(orderGoods.getGoodsRealPrice());
+            refund.setApplyReason(bo.getRefundReason());
+            refund.setType(3);//企业订单
+            refund.setOrderGoodsId(orderGoods.getOrderGoodsId());
+            refund.setPeriodStatus(0);//待审核
+            refund.setPayee(bo.getPayee());
+            refund.setPayeeBank(bo.getPayeeBank());
+            refund.setPayeeBankAccount(bo.getPayeeBankAccount());
+            iOrderGoodsRefundService.save(refund);
+        });
+        orderHandle.setRefundStatus(0);//待审核
+        orderHandle.setRefundPrice(bo.getRefundPrice());
+        return updateById(orderHandle);
+    }
+
+    @Override
+    public OrderHandleStatisticsVo statistics(OrderHandleQueryBo bo) {
+        List<OrderHandleVo> orderHandleVos = baseMapper.selectOrderList(bo);
+        BigDecimal payPrice = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getOrderPrice())).map(OrderHandleVo::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refundPrice = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getGoodsRefund())).map(OrderHandleVo::getGoodsRefund).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal orderPrice = payPrice.subtract(refundPrice);
+        Integer orderNum = orderHandleVos.size();
+        Set<Long> userIds = new HashSet<>();
+        orderHandleVos.forEach(item -> {
+            List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, item.getHandleOrderSn()).eq(Order::getStatus, 1));
+            if (CollectionUtils.isNotEmpty(list)) {
+                list.forEach(x -> userIds.add(x.getUserId()));
+            }
+        });
+        Integer unCheckOrderNum = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getPayStatus()) && x.getPayStatus() == 2).collect(Collectors.toList()).size();
+        Integer unRefundNum = orderHandleVos.stream().filter(x -> ObjectUtils.isNotNull(x.getRefundStatus()) && x.getRefundStatus() == 0).collect(Collectors.toList()).size();
+
+        OrderHandleStatisticsVo vo = new OrderHandleStatisticsVo();
+        vo.setOrderPrice(orderPrice);
+        vo.setRefundPrice(refundPrice);
+        vo.setPayPrice(payPrice);
+        vo.setOrderNum(orderNum);
+        vo.setUnCheckOrderNum(unCheckOrderNum);
+        vo.setUnRefundNum(unRefundNum);
+        vo.setOrderUserNum(userIds.size());
+        return vo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean checkOrderHandle(OrderHandleCheckBo bo) {
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getOrderHandleSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单不存在,请检查");
+        }
+        if (orderHandle.getPayStatus() != 2) {
+            throw new CustomException("订单不需要审核,请检查");
+        }
+        switch (bo.getCheckResult()) {
+            case 1://通过
+                List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, bo.getOrderHandleSn()));
+                list.forEach(item -> {
+                    iWxPayService.dealOrder(item.getOrderSn(), "");
+                });
+                orderHandle.setPayStatus(1);//已通过
+                orderHandle.setPayTime(DateUtils.getNowTime());
+                orderHandle.setCheckTime(DateUtils.getNowTime());
+                orderHandle.setUpdateTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                break;
+            case 2://不通过
+                orderHandle.setPayStatus(-2);//不通过
+                orderHandle.setCheckReason(bo.getCheckReason());
+                orderHandle.setCheckTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                break;
+            default:
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean refundOrderHandle(OrderHandleCheckBo bo) {
+        OrderHandle orderHandle = getOne(new LambdaQueryWrapper<OrderHandle>().eq(OrderHandle::getHandleOrderSn, bo.getOrderHandleSn()));
+        if (ObjectUtils.isNull(orderHandle)) {
+            throw new CustomException("订单不存在,请检查");
+        }
+        if (orderHandle.getRefundStatus() != 0) {
+            throw new CustomException("订单不需要退款审核,请检查");
+        }
+        List<Order> orderList = iOrderService
+                .list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, bo.getOrderHandleSn())
+                        .eq(Order::getOrderRefundStatus, 0));
+        if (CollectionUtils.isEmpty(orderList)) {
+            throw new CustomException("未找到待审核退款订单,请检查");
+        }
+        List<OrderGoods> orderGoodsList = iOrderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
+                .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                .eq(OrderGoods::getRefundStatus, 1)
+                .eq(OrderGoods::getStatus, 1));
+
+        List<OrderGoodsRefund> goodsRefundList = iOrderGoodsRefundService.list(new LambdaQueryWrapper<OrderGoodsRefund>()
+                .in(OrderGoodsRefund::getOrderGoodsId, orderGoodsList.stream().map(OrderGoods::getOrderGoodsId).collect(Collectors.toList()))
+                .eq(OrderGoodsRefund::getStatus, 1)
+                .eq(OrderGoodsRefund::getPeriodStatus, 0));
+
+        switch (bo.getCheckResult()) {
+            case 1://通过
+                if (orderHandle.getPayType() == 1) {
+                    //微信支付
+                    goodsRefundList.forEach(refund -> {
+                        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, refund.getOrderSn()));
+                        Map<String, String> payResult = iWxPayService.refund(refund.getRefundSn(), order.getTransid(), refund.getRealRefundFee(), order.getPayPrice());
+                        if ("OK".equals(payResult.get("return_msg")) && Validator.isNotEmpty(payResult.get("refund_id"))) {
+                            OrderGoods orderGoods = iOrderGoodsService.getById(refund.getOrderGoodsId());
+                            Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
+                            iOrderGoodsRefundService.refundCall(payResult.get("refund_id"), refund.getRefundId(), orderGoods.getOrderGoodsId(), order, goods.getGoodsType(), orderGoods.getGradeId(), order.getUserId(), goods.getGoodsId());
+                            //关闭C端用户的分销返利
+                            iOrderGoodsRefundService.shareClientCancelOldSys(order, orderGoods, refund.getRealRefundFee());
+                        } else {
+                            throw new CustomException("退款错误" + JSON.toJSONString(payResult));
+                        }
+                    });
+                } else {
+                    //对公转账
+                    goodsRefundList.forEach(refund -> {
+                        Order order = iOrderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, refund.getOrderSn()));
+                        OrderGoods orderGoods = iOrderGoodsService.getById(refund.getOrderGoodsId());
+                        Goods goods = iGoodsService.getById(orderGoods.getGoodsId());
+                        iOrderGoodsRefundService.refundCall("", refund.getRefundId(), orderGoods.getOrderGoodsId(), order, goods.getGoodsType(), orderGoods.getGradeId(), order.getUserId(), goods.getGoodsId());
+                        //关闭C端用户的分销返利
+                        iOrderGoodsRefundService.shareClientCancelOldSys(order, orderGoods, refund.getRealRefundFee());
+                    });
+                }
+                //退款金额
+                BigDecimal reduce = goodsRefundList.stream().map(OrderGoodsRefund::getRealRefundFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                if (ObjectUtils.isNotNull(orderHandle.getRefundedPrice())){
+                    orderHandle.setRefundedPrice(orderHandle.getRefundedPrice().add(reduce));
+                }else {
+                    orderHandle.setRefundedPrice(reduce);
+                }
+                orderHandle.setRefundStatus(1);//已退款
+                updateById(orderHandle);
+                goodsRefundList.forEach(x -> {
+                    x.setPeriodStatus(1);//已退款
+                    x.setPeriodTime(DateUtils.getNowTime());
+                });
+                iOrderGoodsRefundService.updateBatchById(goodsRefundList);
+                //是否存在发票
+                List<OrderInvoiceOrder> list = iOrderInvoiceOrderService
+                        .list(new LambdaQueryWrapper<OrderInvoiceOrder>().eq(OrderInvoiceOrder::getOrderSn, orderHandle.getHandleOrderSn()));
+                if (CollectionUtils.isNotEmpty(list)){
+                   iOrderInvoiceService.update(new LambdaUpdateWrapper<OrderInvoice>()
+                   .set(OrderInvoice::getWashStatus,1)//带冲红
+                   .set(OrderInvoice::getInvoiceStatus,4)//失效
+                   .in(OrderInvoice::getInvoiceId,list.stream().map(OrderInvoiceOrder::getInvoiceId).collect(Collectors.toList())));
+                }
+                break;
+            case 2://不通过
+                orderHandle.setRefundStatus(2);//不通过
+                orderHandle.setUpdateTime(DateUtils.getNowTime());
+                updateById(orderHandle);
+                goodsRefundList.forEach(x -> {
+                    x.setPeriodReason(bo.getCheckReason());
+                    x.setPeriodStatus(2);//不通过
+                    x.setPeriodTime(DateUtils.getNowTime());
+                });
+                iOrderGoodsRefundService.updateBatchById(goodsRefundList);
+                orderList.forEach(item -> {
+                    item.setOrderRefundStatus(4);
+                });
+                iOrderService.updateBatchById(orderList);
+                orderGoodsList.forEach(item -> {
+                    item.setRefundStatus(3);
+                });
+                iOrderGoodsService.updateBatchById(orderGoodsList);
+                break;
+            default:
+                break;
+        }
+        return true;
+    }
+}

+ 143 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInvoiceServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.exception.CustomException;
@@ -16,10 +17,17 @@ import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.course.bo.CourseChapterBusinessAddBo;
 import com.zhongzheng.modules.course.mapper.CourseChapterMapper;
 import com.zhongzheng.modules.order.bo.*;
+import com.zhongzheng.modules.order.domain.Order;
+import com.zhongzheng.modules.order.domain.OrderHandle;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
+import com.zhongzheng.modules.order.domain.OrderInvoiceOrder;
 import com.zhongzheng.modules.order.mapper.OrderInvoiceMapper;
+import com.zhongzheng.modules.order.service.IOrderHandleService;
 import com.zhongzheng.modules.order.service.IOrderInvoiceOrderService;
 import com.zhongzheng.modules.order.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.service.IOrderService;
+import com.zhongzheng.modules.order.vo.CompanyOrderInvoiceVo;
+import com.zhongzheng.modules.order.vo.CompanyStatisticsVo;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
 import com.zhongzheng.modules.system.domain.SysOldOrg;
@@ -37,6 +45,7 @@ import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -58,6 +67,13 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
     @Autowired
     private IUserService userService;
 
+    @Autowired
+    private IOrderService iOrderService;
+
+    @Autowired
+    private IOrderHandleService iOrderHandleService;
+
+
     @Value("${invoice.host}")
     private String INVOICE_PATH;
 
@@ -121,6 +137,31 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByAddBo(OrderInvoiceAddBo bo) {
+        if (ObjectUtils.isNotNull(bo.getInvoiceType()) && bo.getInvoiceType() == 2){
+            //C端企业订单发票
+            if (ObjectUtils.isNull(bo.getOrderSn())){
+                throw new CustomException("请先选择订单");
+            }
+            OrderHandle order = iOrderHandleService.getOne(new LambdaQueryWrapper<OrderHandle>()
+                    .eq(OrderHandle::getHandleOrderSn, bo.getOrderSn())
+                    .eq(OrderHandle::getStatus,1));
+            if (ObjectUtils.isNull(order)){
+                throw new CustomException("订单信息有误");
+            }
+            OrderInvoice add = BeanUtil.toBean(bo, OrderInvoice.class);
+            add.setPeriodStatus(1);//发票待审核
+            add.setInvoiceStatus(1);
+            add.setCreateTime(DateUtils.getNowTime());
+            add.setUpdateTime(DateUtils.getNowTime());
+            add.setApplyTime(DateUtils.getNowTime());
+            save(add);
+            OrderInvoiceOrder orderInvoiceOrder = new OrderInvoiceOrder();
+            orderInvoiceOrder.setInvoiceId(add.getInvoiceId());
+            orderInvoiceOrder.setOrderSn(order.getHandleOrderSn());
+            iOrderInvoiceOrderService.save(orderInvoiceOrder);
+            return true;
+
+        }
         OrderInvoice add = BeanUtil.toBean(bo, OrderInvoice.class);
         if(Validator.isEmpty(bo.getOrderGoodsIds())||bo.getOrderGoodsIds().size()==0){
             throw new CustomException("请选择订单商品");
@@ -274,6 +315,107 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
 
     @Override
     public List<OrderInvoiceVo> selectList(OrderInvoiceQueryBo bo) {
-        return baseMapper.selectList(bo);
+        return baseMapper.selectListByBo(bo);
+    }
+
+    @Override
+    public List<CompanyOrderInvoiceVo> listCompanyOrderInvoice(CompanyOrderInvoiceBo bo) {
+        return baseMapper.listCompanyOrderInvoice(bo);
+    }
+
+    @Override
+    public CompanyStatisticsVo listCompanyStatistics(CompanyOrderInvoiceBo bo) {
+        List<CompanyOrderInvoiceVo> invoiceVoList = baseMapper.listCompanyOrderInvoice(bo);
+        if (CollectionUtils.isEmpty(invoiceVoList)){
+            return null;
+        }
+        BigDecimal applyMoney = invoiceVoList.stream().map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        List<CompanyOrderInvoiceVo> collect = invoiceVoList.stream().filter(x -> ObjectUtils.isNotNull(x.getInvoiceStatus()) && x.getInvoiceStatus() == 1).collect(Collectors.toList());
+        BigDecimal unApplyMoney = collect.stream().map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal refuseMoney = invoiceVoList.stream().filter(x -> ObjectUtils.isNotNull(x.getInvoiceStatus()) && x.getInvoiceStatus() == 3)
+                .map(CompanyOrderInvoiceVo::getInvoicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        CompanyStatisticsVo statisticsVo = new CompanyStatisticsVo();
+        statisticsVo.setApplyMoney(applyMoney);
+        statisticsVo.setUnCheckMoney(unApplyMoney);
+        statisticsVo.setCheckMoney(applyMoney.subtract(unApplyMoney).subtract(refuseMoney));
+        statisticsVo.setApplyNum(invoiceVoList.size());
+        statisticsVo.setUnApplyNum(collect.size());
+        return statisticsVo;
+    }
+
+    @Override
+    public OrderInvoiceVo getCompanyInvoiceDetail(Long invoiceId) {
+        OrderInvoice orderInvoice = getById(invoiceId);
+        OrderInvoiceVo orderInvoiceVo = BeanUtil.toBean(orderInvoice, OrderInvoiceVo.class);
+        return orderInvoiceVo;
+    }
+
+    @Override
+    public boolean companyInvoiceCheck(CompanyInvoiceCheckBo bo) {
+        OrderInvoice invoice = getById(bo.getInvoiceId());
+        if (ObjectUtils.isNull(invoice)){
+            throw new CustomException("发票不存在,请检查!");
+        }
+        switch (bo.getCheckResult()){
+            case 1://通过
+                if (StringUtils.isBlank(bo.getInvoiceUrlList())){
+                    throw new CustomException("发票不存在,请检查!");
+                }
+                invoice.setInvoiceImg(bo.getInvoiceUrlList());
+                invoice.setHandleRemark(bo.getHandleRemark());
+                invoice.setPeriodStatus(3);
+                invoice.setInvoiceStatus(2);
+                invoice.setMakeOutTime(DateUtils.getNowTime());
+                invoice.setPeriodTime(DateUtils.getNowTime());
+                updateById(invoice);
+                //查询是否存在待冲红发票
+                OrderInvoiceOrder orderInvoice = iOrderInvoiceOrderService
+                        .getOne(new LambdaQueryWrapper<OrderInvoiceOrder>()
+                        .eq(OrderInvoiceOrder::getInvoiceId, invoice.getInvoiceId())
+                        .last("limit 1"));
+                if (ObjectUtils.isNotNull(orderInvoice)){
+                    List<OrderInvoice> invoices = baseMapper.listWashInvoice(orderInvoice.getOrderSn(),invoice.getInvoiceId());
+                    if (CollectionUtils.isNotEmpty(invoices)){
+                        //冲红
+                        invoices.forEach(x -> x.setWashStatus(2));
+                        updateBatchById(invoices);
+                    }
+                }
+                break;
+            case 2://不通过
+                invoice.setPeriodStatus(2);
+                invoice.setPeriodReason(bo.getCheckReason());
+                updateById(invoice);
+                break;
+            default :
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean companyBatchHandle(CompanyInvoiceBatchBo bo) {
+        if (CollectionUtils.isEmpty(bo.getInvoiceIds())){
+            throw new CustomException("请先选择发票");
+        }
+        List<OrderInvoice> invoices = listByIds(bo.getInvoiceIds());
+        if (CollectionUtils.isEmpty(invoices)){
+            throw new CustomException("发票信息有误,请检查");
+        }
+        invoices.forEach(item -> {
+            if (ObjectUtils.isNotNull(bo.getWashStatus())){
+                if (ObjectUtils.isNull(item.getWashStatus()) || item.getWashStatus() != 1){
+                    throw new CustomException("存在不需要冲红的发票");
+                }
+                item.setWashStatus(bo.getWashStatus());
+            }
+            if (ObjectUtils.isNotNull(bo.getHandleRemark())){
+                item.setHandleRemark(bo.getHandleRemark());
+            }
+            if (ObjectUtils.isNotNull(bo.getRemark())){
+                item.setInvoiceRemark(bo.getRemark());
+            }
+        });
+        return updateBatchById(invoices);
     }
 }

+ 190 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -219,6 +219,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Value("${oldStudySys.createExamPath}")
     private String CREATE_EXAM_PATH;
 
+    @Autowired
+    private IOrderHandleService iOrderHandleService;
+
     @Override
     public OrderVo queryById(Long orderId) {
         Order db = this.baseMapper.selectById(orderId);
@@ -867,6 +870,189 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return result;
     }
 
+    @Override
+    public Map<String, Object> placePlatHandleOrder(OrderAddBo bo) {
+        List<OrderGoodsAddBo> goodsList = bo.getGoodsList();
+        if (goodsList == null || goodsList.size() < 1) {
+            throw new CustomException("商品列表为空", 510);
+        }
+        if (Validator.isEmpty(bo.getUserId())) {
+            throw new CustomException("用户ID缺失", 510);
+        }
+        if (Validator.isEmpty(bo.getHandleOrderSn())) {
+            throw new CustomException("录单单号为空", 510);
+        }
+        OrderHandle orderHandle = iOrderHandleService.queryBySn(bo.getHandleOrderSn());
+        if (Validator.isEmpty(orderHandle)) {
+            throw new CustomException("录单单号不存在", 510);
+        }
+        Order add = BeanUtil.toBean(bo, Order.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        add.setOrderType(Order.CONSUME_ORDER);
+        add.setOrderFrom(11);
+        add.setHandleOrderSn(bo.getHandleOrderSn());
+        if(orderHandle.getPayType()==1){
+            add.setPayType(1);
+        }else if(orderHandle.getPayType()==2){
+            add.setPayType(7);
+        }
+        //订单运营类型
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        SysOldOrg oldOrg = iSysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>().eq(SysOldOrg::getTenantId, Long.valueOf(tenantId)).last("limit 1"));
+        if (ObjectUtils.isNotNull(oldOrg)){
+            add.setOperationType(oldOrg.getOperationType());
+        }
+        //生成订单号
+        String out_trade_no = DateUtils.getDateOrderSn();
+
+        BigDecimal totalPrice = new BigDecimal(0);
+        BigDecimal payPrice = new BigDecimal(0);
+        BigDecimal receivedPrice = new BigDecimal(0);
+        //收费的商品列表,不含免费
+        List<OrderGoods> payList = new ArrayList<>();
+        List<OrderGoods> freeList = new ArrayList<>();
+        //生成订单
+        for (OrderGoodsAddBo g : goodsList) {
+            //订单商品
+            Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
+            if (Validator.isEmpty(goods)) {
+                throw new CustomException("商品不存在", 510);
+            }
+            //校验是否有重复商品
+            if (StringUtils.isNotBlank(g.getSevenYear())){
+                Long count = iOrderGoodsService.countOrderGoodsByYear(g.getSevenYear(),g.getGoodsId(),bo.getUserId());
+                if (count > 0){
+                    throw new CustomException(goods.getGoodsName() + ",请勿重复购买相同年份的商品");
+                }
+            }
+            if (goods.getGoodsStatus() != 1) {
+                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单", 510);
+            }
+            OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
+            orderGoods.setOrderSn(out_trade_no);
+            if (g.getGoodsInputData() != null) {
+                orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
+            }
+
+            if (StringUtils.isNotBlank(goods.getSevenYear())){
+                orderGoods.setSevenYear(goods.getSevenYear());
+            }
+            //成交价
+            orderGoods.setGoodsPrice(goods.getStandPrice());
+            orderGoods.setGoodsRealPrice(goods.getStandPrice());
+            orderGoods.setGoodsYear(goods.getYear().toString());
+            orderGoods.setCreateTime(DateUtils.getNowTime());
+            orderGoods.setUpdateTime(DateUtils.getNowTime());
+
+            if (ObjectUtils.isNotNull(g.getSubOrderGoodsId())){
+                //补充考试次数订单商品ID
+                orderGoods.setSubOrderGoodsId(g.getSubOrderGoodsId());
+                orderGoods.setOpenQuestionSign(bo.getOpenQuestionSign());
+            }
+            //订单标准价格不计算优惠
+            totalPrice = totalPrice.add(goods.getStandPrice());
+            //实际应收价格
+            payPrice = payPrice.add(orderGoods.getGoodsRealPrice());
+
+            boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            boolean canRepeatBuy = false;
+            validUserBeforeBuy(goods, bo.getUserId());
+            //判断是否有购买过
+            Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
+            //视频商品安排班级
+            if (goods.getGoodsType() == 1) {
+                if (Validator.isNotEmpty(goods.getStudyCount())) {
+                    orderGoods.setStudyCount(goods.getStudyCount() - 1); //默认消耗一次学习机会
+                } else {
+                    orderGoods.setStudyCount(0L);//没配置则为0
+                }
+
+                Long gradeId = null;
+                //判断是否购买历史班级都过期
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId(),g.getSevenYear());
+                if (g.getGoodsInputData() != null) {
+                    gradeId = g.getGoodsInputData().getGradeId();
+                    if (Validator.isNotEmpty(oldOrderGoodsId)) {
+                        //有指定选班模板且视频商品班级已过期,记录复购状态
+                        orderGoods.setRebuyOrderGoodsId(oldOrderGoodsId);
+                    }
+                }
+                String requestId = IdUtil.simpleUUID();
+                RedisLockEntity redisLockEntity = new RedisLockEntity();
+                redisLockEntity.setLockKey(RedisLockEntity.KEY_LOCK_GRADE);
+                redisLockEntity.setRequestId(requestId);
+                boolean isArrange = false;
+                if (redisCache.lock(redisLockEntity)) {
+                    isArrange = arrangeGrade(goods.getGoodsName(), goods.getGoodsId(), orderGoods.getOrderGoodsId(), gradeId, add.getUserId(), out_trade_no, goods.getBusinessId());
+                    redisCache.unlockLua(redisLockEntity);
+                }
+                if (!isArrange) {
+                    throw new CustomException("分班错误", 510);
+                }
+                iOrderGoodsService.updateById(orderGoods);
+                newFreeBankGoods(goods.getGoodsId(), orderGoods.getOrderGoodsId());
+            }
+
+            if (!canRepeatBuy && goods.getGoodsType() != 3 && goods.getGoodsType() != 4) {
+                this.checkBuyGoods(g.getGoodsId(), bo.getUserId(), goods.getGoodsType());
+            }
+            if (goods.getGoodsType() == 6) {
+                //直播商品
+                if (Validator.isNotEmpty(oldOrderGoodsId) && oldOrderGoodsId.longValue() > 0) {
+                    throw new CustomException("直播商品不允许复购");
+                }
+            }
+            //商品0元或已收费加入收费商品列表
+            if (orderGoods.getGoodsRealPrice().compareTo(BigDecimal.ZERO) == 0) {
+                //免费的
+                freeList.add(orderGoods);
+            }
+        }
+
+        add.setOrderSn(out_trade_no);
+        if (Validator.isNotEmpty(bo.getOrderFrom()) && bo.getOrderFrom() == 6) {
+            add.setOrderFrom(bo.getOrderFrom());
+        } else {
+            add.setOrderFrom(Order.FROM_INPUT);
+        }
+        add.setPayPrice(payPrice);//需要支付价格
+        add.setOrderPrice(totalPrice);//标准价格
+        orderHandle.setPayPrice(orderHandle.getPayPrice().add(payPrice));
+        orderHandle.setOrderPrice(orderHandle.getOrderPrice().add(totalPrice));
+        orderHandle.setUpdateTime(DateUtils.getNowTime());
+        iOrderHandleService.updateById(orderHandle);
+        //有已收费的商品,修改订单支付状态
+        if ((freeList.size() + payList.size()) > 0) {
+
+            if (payPrice.compareTo(BigDecimal.ZERO) == 0) {
+                add.setOrderStatus(Order.ORDER_STATUS_PAY);
+                //总订单0元
+                add.setPayStatus(Order.PAY_FREE);
+            }
+            add.setStatus(1);
+        }
+        add.setOrgSign(1);
+        if (add.getOrderFrom() != 6){
+            orderCostHandle(add,1);
+        }
+        this.save(add);
+
+
+        //处理免费商品
+        for (OrderGoods orderGoods : freeList) {
+            dealFreeGoods(orderGoods, add);
+        }
+        instTimeSettleOrder(add,DateUtils.getNowTime());
+        Map<String, Object> result = new HashMap<>();
+        result.put("orderId", add.getOrderId());
+        result.put("orderSn", out_trade_no);
+        result.put("sheetId", null);
+        result.put("sheetSn", null);
+        return result;
+    }
+
     private void instTimeSettleOrder(Order order, Long checkTime) {
         String tenantId = ServletUtils.getRequest().getHeader("TenantId");
         SysOldOrg sysOldOrg = sysOldOrgService.getOne(new LambdaQueryWrapper<SysOldOrg>()
@@ -2406,7 +2592,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     public boolean arrangeGrade(String goodsName, Long goodsId, Long orderGoodsId, Long gradeId, Long userId, String orderSn, Long businessId) {
         //查询该学员有没有有效期内同商品班级 有就不允许添加
        /* Integer classNum = baseMapper.selectUserClass(goodsId,userId);
-        if (classNum > 0){
+        if (classNum > 0){、。
             throw new CustomException("该学员已在此商品有效期内的班级,无法加入新的有效期班级,请查看该学员此商品下的班级");
         }*/
         OrderGoods orderGoods = iOrderGoodsService.getById(orderGoodsId);
@@ -2704,6 +2890,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         Goods goods = iGoodsService.getById(goodsId);
         String businessName = iGoodsService.getGoodsBusinessName(goodsId);
         Major major = iMajorService.getById(goods.getMajorId());
+        if(Validator.isEmpty(major)){
+            throw new CustomException("二建二造专业不能为空");
+        }
         tenantList.forEach(tenant -> {
             //是否存在对应课程商品
             List<Goods> relGoods = iGoodsService.getRelGoodsNoTenant(businessName,major.getCategoryName(),tenant.getTenantId());

+ 86 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyOrderInvoiceVo.java

@@ -0,0 +1,86 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:34
+ */
+@Data
+public class CompanyOrderInvoiceVo implements Serializable {
+
+    public Long invoiceId;
+
+    @ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty("申请时间")
+    private Long applyTime;
+
+    @ApiModelProperty("开票时间")
+    private Long invoiceTime;
+
+    @ApiModelProperty("订单号")
+    private String orderSn;
+
+    @ApiModelProperty("发票金额")
+    private BigDecimal invoicePrice;
+
+    @ApiModelProperty("发票类型:1普通发票 2 增值税专用发票")
+    private Integer type;
+
+    @ApiModelProperty("发票抬头")
+    private String invoiceTitle;
+
+    @ApiModelProperty("发票主体:1个人 2企业")
+    private Integer subject;
+
+    @ApiModelProperty("纳税登记号")
+    private String taxRegistryNumber;
+
+    @ApiModelProperty("发票备注")
+    private String invoiceRemark;
+
+    @ApiModelProperty("收票姓名")
+    private String consignee;
+
+    @ApiModelProperty("收票电话")
+    private String collectionTelephone;
+
+    @ApiModelProperty("收票地址")
+    private String shippingAddress;
+
+    @ApiModelProperty("邮箱")
+    private String email;
+
+    @ApiModelProperty("冲红状态:1待冲红 2已冲红")
+    private Integer washStatus;
+
+    @ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+    private String invoiceMode;
+
+    @ApiModelProperty("开票备注")
+    private String openRemark;
+
+    @ApiModelProperty("处理备注")
+    private String handleRemark;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("教育名称")
+    private String educationName;
+    @ApiModelProperty("项目名称")
+    private String projectName;
+    @ApiModelProperty("业务名称")
+    private String businessName;
+    @ApiModelProperty("商品类型")
+    private Integer goodsType;
+
+    @ApiModelProperty("审核状态")
+    private Integer periodStatus;
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/CompanyStatisticsVo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月23日 10:34
+ */
+@Data
+public class CompanyStatisticsVo implements Serializable {
+
+    @ApiModelProperty("申请金额")
+    private BigDecimal applyMoney;
+
+    @ApiModelProperty("已审金额")
+    private BigDecimal checkMoney;
+
+    @ApiModelProperty("待审金额")
+    private BigDecimal unCheckMoney;
+
+    @ApiModelProperty("申请数量")
+    private Integer applyNum;
+
+    @ApiModelProperty("待审发票")
+    private Integer unApplyNum;
+
+}

+ 94 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleGoodsVo.java

@@ -0,0 +1,94 @@
+package com.zhongzheng.modules.order.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 经办录单视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单视图对象")
+public class OrderHandleGoodsVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 真实姓名 */
+	@ApiModelProperty("真实姓名")
+	private String realname;
+
+	/** 学员编码 */
+	@Excel(name = "学员身份证")
+	@ApiModelProperty("学员身份证")
+	private String idCard;
+
+	/** 学员编码 */
+	@Excel(name = "学员电话")
+	@ApiModelProperty("学员电话")
+	private String telPhone;
+
+	/** 商品名称 */
+	@Excel(name = "商品名称")
+	@ApiModelProperty("商品名称")
+	private String goodsName;
+
+	@Excel(name = "商品年份")
+	@ApiModelProperty("商品年份")
+	private String year;
+
+	@Excel(name = "科目")
+	@ApiModelProperty("科目")
+	private String subjectNames;
+
+
+	@Excel(name = "金额")
+	@ApiModelProperty("金额")
+	private BigDecimal goodsRealPrice;
+
+
+	/** 学习进度 */
+	@ApiModelProperty("已学节数")
+	private Long stuAllNum;
+
+
+	/** 学习进度 */
+	@ApiModelProperty("总节数")
+	private Long secAllNum;
+
+
+	/** 节数 */
+	@ApiModelProperty("试卷数")
+	private Long examNum;
+
+
+	/** 已做试卷 */
+	@ApiModelProperty("已做试卷")
+	private Long recordNum;
+
+	private Long orderGoodsId;
+
+	private Long goodsId;
+
+	private Long userId;
+
+	private Long gradeId;
+	private Integer payStatus;
+	@ApiModelProperty("退款状态:0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+	@ApiModelProperty("退款原因")
+	private String refundReason;
+	@ApiModelProperty("审核意见")
+	private String periodReason;
+
+	@ApiModelProperty("退款审核原因")
+	private String refundCheckReason;
+
+	@ApiModelProperty("退款申请原因")
+	private String refundApplyReason;
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleStatisticsVo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.order.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月25日 17:41
+ */
+@Data
+public class OrderHandleStatisticsVo implements Serializable {
+
+    private BigDecimal payPrice;
+
+    private BigDecimal refundPrice;
+
+    private BigDecimal orderPrice;
+
+    private Integer orderNum;
+
+    private Integer orderUserNum;
+
+    private Integer unCheckOrderNum;
+
+    private Integer unRefundNum;
+}

+ 163 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderHandleVo.java

@@ -0,0 +1,163 @@
+package com.zhongzheng.modules.order.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 经办录单视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2024-01-19
+ */
+@Data
+@ApiModel("经办录单视图对象")
+public class OrderHandleVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 录单订单编号 */
+	@Excel(name = "录单订单编号")
+	@ApiModelProperty("录单订单编号")
+	private String handleOrderSn;
+	/** 系统订单操作人 */
+	@Excel(name = "系统订单操作人")
+	@ApiModelProperty("系统订单操作人")
+	private String createUsername;
+	/** 1有效 0无效 */
+	@Excel(name = "1有效 0无效")
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 经办人操作人ID */
+	@Excel(name = "经办人操作人ID")
+	@ApiModelProperty("经办人操作人ID")
+	private Long createUserId;
+	/** 教育类型id */
+	@Excel(name = "教育类型id")
+	@ApiModelProperty("教育类型id")
+	private Long educationTypeId;
+	/** 业务层次id */
+	@Excel(name = "业务层次id")
+	@ApiModelProperty("业务层次id")
+	private Long businessId;
+	/** 项目ID */
+	@Excel(name = "项目ID")
+	@ApiModelProperty("项目ID")
+	private Long projectId;
+	/** 录单来源 1经办人下单 */
+	@Excel(name = "录单来源 1经办人下单")
+	@ApiModelProperty("录单来源 1经办人下单")
+	private Integer inputFrom;
+	/** 支付状态:0待支付 1已支付 -1已关闭 */
+	@Excel(name = "支付状态:0待支付 1已支付 -1已关闭")
+	@ApiModelProperty("支付状态:0待支付 1已支付 -1已关闭  2审核中:对公支付提交审核中 -2不通过:对公支付审核不通过")
+	private Integer payStatus;
+	/** 商品类型 */
+	@Excel(name = "商品类型")
+	@ApiModelProperty("商品类型")
+	private Integer goodsType;
+	/** 订单标准价格 */
+	@Excel(name = "订单标准价格")
+	@ApiModelProperty("订单标准价格")
+	private BigDecimal orderPrice;
+	/** 支付平台 1微信 2对公转账 */
+	@Excel(name = "支付平台 1微信 2对公转账")
+	@ApiModelProperty("支付平台 1微信 2对公转账")
+	private Integer payType;
+	/** 支付时间 */
+	@Excel(name = "支付时间")
+	@ApiModelProperty("支付时间")
+	private Long payTime;
+	/** 支付价格(成交价) */
+	@Excel(name = "支付价格(成交价)")
+	@ApiModelProperty("支付价格(成交价)")
+	private BigDecimal payPrice;
+
+	@ApiModelProperty("教育名称")
+	private String educationName;
+	@ApiModelProperty("项目名称")
+	private String projectName;
+	@ApiModelProperty("业务名称")
+	private String businessName;
+
+	@ApiModelProperty("用户人数")
+	private Integer userNum;
+	@ApiModelProperty("商品人数")
+	private Integer goodsNum;
+
+	private Long createTime;
+
+	@ApiModelProperty("已退费金额")
+	private BigDecimal goodsRefund;
+
+	private Long overTime;
+
+	private String companyName;
+
+	private String companyTel;
+
+	private String companyRemark;
+
+	private String companyPayImg;
+
+	@ApiModelProperty("收款公司名称")
+	private String recCompanyName;
+	@ApiModelProperty("收款公司开户银行")
+	private String recCompanyBank;
+	@ApiModelProperty("收款公司账号")
+	private String recCompanyAccount;
+
+	@ApiModelProperty("审核意见")
+	private String checkReason;
+
+	@ApiModelProperty("审核时间")
+	private Long checkTime;
+
+	@ApiModelProperty("发票状态:1待审核 2已开票 3不通过")
+	private Integer invoiceStatus;
+
+	@ApiModelProperty("发票审核意见")
+	private String invoiceReason;
+
+	@ApiModelProperty("发票地址")
+	private String invoiceUrl;
+
+	@ApiModelProperty("处理备注")
+	private String handleRemark;
+
+	@ApiModelProperty("退款金额")
+	private BigDecimal refundPrice;
+
+	@ApiModelProperty("实际价格")
+	private BigDecimal realPrice;
+
+	@ApiModelProperty("退款状态: 0待审核 1已退款 2不通过")
+	private Integer refundStatus;
+
+	@ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+	private String invoiceMode;
+
+	@ApiModelProperty("收款人")
+	private String payee;
+	@ApiModelProperty("收款人银行")
+	private String payeeBank;
+	@ApiModelProperty("收款人账号")
+	private String payeeBankAccount;
+
+	@ApiModelProperty("退款审核原因")
+	private String refundCheckReason;
+
+	@ApiModelProperty("退款申请原因")
+	private String refundApplyReason;
+
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderInvoiceVo.java

@@ -139,4 +139,29 @@ public class OrderInvoiceVo {
 	@Excel(name = "审核时间")
 	@ApiModelProperty("审核时间")
 	private Long periodTime;
+	/** 发票类型:0,C端个人发票  1,C端企业发票 */
+	@ApiModelProperty("发票类型:1,C端个人发票  2,C端企业发票")
+	private Integer invoiceType;
+	@ApiModelProperty("发票备注")
+	private String invoiceRemark;
+	/** 收票姓名 */
+	@ApiModelProperty("收票姓名")
+	private String consignee;
+	/** 收票电话 */
+	@ApiModelProperty("收票电话")
+	private String collectionTelephone;
+	/** 收票地址 */
+	@ApiModelProperty("收票地址")
+	private String shippingAddress;
+	/** 收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开) */
+	@ApiModelProperty("收票方式:1在线下载 2邮件接收 3纸质快递 (多个用逗号隔开)")
+	private String invoiceMode;
+	@ApiModelProperty("订单号")
+	private String orderSn;
+	@ApiModelProperty("冲红状态:1待冲红 2已冲红")
+	private Integer washStatus;
+	@ApiModelProperty("开票备注")
+	private String openRemark;
+	@ApiModelProperty("处理备注")
+	private String handleRemark;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/bo/SysTenantEditBo.java

@@ -113,4 +113,5 @@ public class SysTenantEditBo {
     @ApiModelProperty("后台域名")
     private String hostAdmin;
 
+    private String handleBank;
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/domain/SysTenant.java

@@ -115,5 +115,6 @@ private static final long serialVersionUID=1L;
     private Integer examRoom;
     /** 新考学时推送标识:1推送旧系统 0正常 */
     private Integer periodSign;
-
+    /** 经办订单对公收款账户 */
+    private String handleBank;
 }

+ 26 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/vo/SysTenantHandleAccountVo.java

@@ -0,0 +1,26 @@
+package com.zhongzheng.modules.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 系统商户视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-08-03
+ */
+@Data
+@ApiModel("系统商户视图对象")
+public class SysTenantHandleAccountVo {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty("收款公司名称")
+	private String recCompanyName;
+	@ApiModelProperty("收款公司开户银行")
+	private String recCompanyBank;
+	@ApiModelProperty("收款公司账号")
+	private String recCompanyAccount;
+
+}

+ 2 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/VodServiceImpl.java

@@ -67,8 +67,8 @@ public class VodServiceImpl implements IVodService {
             // 实例化一个请求对象,每个接口都会对应一个request对象
             DescribeMediaInfosRequest req = new DescribeMediaInfosRequest();
             req.setSubAppId(1306117675L);
-            String[] fileIdss = new String[]{"3270835015060309946"};
-            req.setFileIds(fileIdss);
+    //        String[] fileIdss = new String[]{"3270835015060309946"};
+            req.setFileIds(fileIds);
             // 返回的resp是一个DescribeMediaInfosResponse的实例,与请求对象对应
             DescribeMediaInfosResponse resp = client.DescribeMediaInfos(req);
 
@@ -101,7 +101,6 @@ public class VodServiceImpl implements IVodService {
         contentInfo.put("audioVideoType", AudioVideoType);
         contentInfo.put("rawAdaptiveDefinition", RawAdaptiveDefinition);
         contentInfo.put("imageSpriteDefinition", ImageSpriteDefinition);
-        System.out.println(urlAccessInfo);
         try {
             Algorithm algorithm = Algorithm.HMAC256(PlayKey);
             String token = JWT.create().withClaim("appId", AppId).withClaim("fileId", FileId)

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

@@ -21,6 +21,7 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.course.domain.CourseSubject;
@@ -503,9 +504,6 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 if (ObjectUtils.isNotNull(item.getOrderReceived())){
                     orderPractical = orderPractical.add(item.getOrderReceived());
                 }
-                if (ObjectUtils.isNotNull(item.getPretaxBrokerage())){
-                    orderPractical = orderPractical.subtract(item.getPretaxBrokerage());
-                }
                 if (ObjectUtils.isNotNull(item.getOrderRefunded())){
                     orderPractical = orderPractical.subtract(item.getOrderRefunded());
                 }
@@ -1229,7 +1227,13 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     //查询视图 v_top_order
                     TopOldOrderVo orderVo = baseMapper.queryById(query.getOrderSn());
                     if (orderVo.getOrderBase() == 1){
-                        list.forEach(item -> {
+                        TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, query.getOrderSn()));
+                        BigDecimal bonus = BigDecimal.ZERO;
+                        if (ObjectUtils.isNotNull(order.getPretaxBrokerage()) && order.getPretaxBrokerage().compareTo(BigDecimal.ZERO) > 0){
+                            bonus = order.getPretaxBrokerage().divide(new BigDecimal(list.size()),BigDecimal.ROUND_CEILING);
+                        }
+                        for (TopOldOrderGoodsListVo item : list) {
+                            item.setPretaxBrokerage(bonus);
                             User user = userService.getByCardNoTenant(EncryptHandler.decrypt(item.getUserCard()));
                             if (ObjectUtils.isNotNull(user)){
                                 Order orderOne = orderService.getOne(new LambdaQueryWrapper<Order>()
@@ -1272,7 +1276,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                             }else {
                                 item.setDivideRateStr(ObjectUtil.isNull(item.getDivideRate())?"0%":item.getDivideRate().toString());
                             }
-                        });
+                        }
                     }else {
                         // 老系统查询学习状态
                         TopOldOrder order = getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, query.getOrderSn()));
@@ -1617,7 +1621,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             throw new CustomException("当前账号没有审核权限");
         }
         List<TopOldOrderCheck> checks = topOldOrderCheckService
-                .list(new LambdaQueryWrapper<TopOldOrderCheck>().eq(TopOldOrderCheck::getCheckType, 1));
+                .list(new LambdaQueryWrapper<TopOldOrderCheck>().eq(TopOldOrderCheck::getCheckType, 9));
         if (CollectionUtils.isEmpty(checks)) {
             throw new CustomException("没有设置审核流程!请检查");
         }
@@ -5342,7 +5346,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         List<TopOldOrderGoods> orderGoodsList = topOrderGoodsService
                 .list(new LambdaQueryWrapper<TopOldOrderGoods>()
                         .eq(TopOldOrderGoods::getOrderSn, order.getOrderSn())
-                        .in(TopOldOrderGoods::getCheckStatus, Arrays.asList(0, 1))
+//                        .in(TopOldOrderGoods::getCheckStatus, Arrays.asList(0, 1))
                         .eq(TopOldOrderGoods::getStatus, 1));
         if (ObjectUtils.isNotNull(order.getPretaxBrokerage()) && order.getPretaxBrokerage().compareTo(BigDecimal.ZERO) != 0) {
             halveBrokerage = brokerage.divide(new BigDecimal(orderGoodsList.size()), 4, BigDecimal.ROUND_DOWN);
@@ -5359,7 +5363,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     return true;
                 }
                 TopCourseEducationType educationType = topCourseEducationTypeService.getById(x.getEducationTypeId());
-                if (!businessName.contains(educationType.getEducationName()) && !businessName.contains(educationType.getSchemeName())) {
+                if (!businessName.contains(educationType.getEducationName()) || !businessName.contains(educationType.getSchemeName())) {
                     //教育类型匹配失败
                     return false;
                 }
@@ -5854,7 +5858,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                         }
 
                         TopCourseEducationType educationType = topCourseEducationTypeService.getById(item.getEducationTypeId());
-                        if (!businessName.contains(educationType.getEducationName()) && !businessName.contains(educationType.getSchemeName())) {
+                        if (!businessName.contains(educationType.getEducationName()) || !businessName.contains(educationType.getSchemeName())) {
                             //教育类型匹配失败
                             return false;
                         }
@@ -6003,7 +6007,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                         }
 
                         TopCourseEducationType educationType = topCourseEducationTypeService.getById(item.getEducationTypeId());
-                        if (!businessName.contains(educationType.getEducationName()) && !businessName.contains(educationType.getSchemeName())) {
+                        if (!businessName.contains(educationType.getEducationName()) || !businessName.contains(educationType.getSchemeName())) {
                             //教育类型匹配失败
                             return false;
                         }

+ 37 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleBo.java

@@ -0,0 +1,37 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月17日 15:42
+ */
+@Data
+public class UserHandleBo implements Serializable {
+
+    private Long id;
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 经办姓名 */
+    @ApiModelProperty("经办姓名")
+    private String realname;
+    /** 经办性别:1男,2女 */
+    @ApiModelProperty("经办姓别")
+    private String sex;
+    /** 经办身份证 */
+    @ApiModelProperty("经办身份证")
+    private String idCard;
+    /** 经办手机号 */
+    @ApiModelProperty("经办手机号")
+    private String telphone;
+    /** 经办学历 */
+    @ApiModelProperty("经办学历")
+    private String eduLevel;
+    /** 经办公司 */
+    @ApiModelProperty("经办公司")
+    private String companyName;
+}

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleImportBo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.user.bo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月17日 15:42
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class UserHandleImportBo implements Serializable {
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    /** 经办姓名 */
+    @ApiModelProperty("经办姓名")
+    @Excel(name = "*姓名")
+    private String realname;
+
+    /** 经办性别:1男,2女 */
+    @ApiModelProperty("经办姓名")
+    @Excel(name = "*性别")
+    private String sex;
+
+    /** 经办身份证 */
+    @ApiModelProperty("经办身份证")
+    @Excel(name = "*身份证号")
+    private String idCard;
+
+    /** 经办手机号 */
+    @ApiModelProperty("经办手机号")
+    @Excel(name = "*手机号码")
+    private String telphone;
+
+    /** 经办学历 */
+    @ApiModelProperty("经办学历")
+    @Excel(name = "*教育层数")
+    private String eduLevel;
+
+    /** 经办公司 */
+    @ApiModelProperty("经办公司")
+    @Excel(name = "*所属公司")
+    private String companyName;
+}

+ 37 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserHandleQueryBo.java

@@ -0,0 +1,37 @@
+package com.zhongzheng.modules.user.bo;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2024年01月17日 15:21
+ */
+@Data
+public class UserHandleQueryBo extends BaseEntity {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+    /** 排序列 */
+    @ApiModelProperty("排序列")
+    private String orderByColumn;
+    /** 排序的方向desc或者asc */
+    @ApiModelProperty(value = "排序的方向", example = "asc,desc")
+    private String isAsc;
+
+    @ApiModelProperty("学历")
+    private String edu;
+
+    @ApiModelProperty("关键字")
+    private String keyWord;
+
+    @ApiModelProperty("用户ID")
+    private Long userId;
+}

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserHandle.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.user.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 企业经办名单
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("user_handle")
+public class UserHandle implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    @TableId(value = "id")
+    private Long id;
+    /** 用户ID */
+    private Long userId;
+    /** 经办姓名 */
+    private String realname;
+    /** 经办性别:1男,2女 */
+    private String sex;
+    /** 经办身份证 */
+    private String idCard;
+    /** 经办手机号 */
+    private String telphone;
+    /** 经办学历 */
+    private String eduLevel;
+    /** 经办公司 */
+    private String companyName;
+    /** 状态 1正常 0关闭 -1删除*/
+    private Integer status;
+    /** 创建时间 */
+    private Long createTime;
+    /** 更新时间 */
+    private Long updateTime;
+
+}

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserHandleMapper.java

@@ -0,0 +1,13 @@
+package com.zhongzheng.modules.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.user.domain.UserHandle;
+
+/**
+ *
+ *
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+public interface UserHandleMapper extends BaseMapper<UserHandle> {
+}

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserHandleService.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.user.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.user.bo.UserHandleBo;
+import com.zhongzheng.modules.user.bo.UserHandleImportBo;
+import com.zhongzheng.modules.user.bo.UserHandleQueryBo;
+import com.zhongzheng.modules.user.domain.UserHandle;
+import com.zhongzheng.modules.user.vo.UserHandleVo;
+
+import java.util.List;
+
+/**
+ * 高校Service接口
+ *
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+public interface IUserHandleService extends IService<UserHandle> {
+
+    List<UserHandle> queryUserHandleList(UserHandleQueryBo bo);
+
+    boolean saveUserHandle(List<UserHandleBo> bo);
+
+    boolean editUserHandle(UserHandleBo bo);
+
+    boolean batchDelUserHandle(List<Long> ids);
+
+    void importUserHandle(List<UserHandleImportBo> userHandles,Long userId);
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -111,6 +111,8 @@ public interface IUserService extends IService<User> {
 
 	Map<String, Object> importUser(List<UserImportAddBo> list, String importNo);
 
+	Long importUser(UserImportAddBo addBo, String importNo);
+
 	Boolean updatePwd(UserAppUpdatePwdBo bo);
 
 	Boolean updatePwdByClient(UserAppUpdatePwdBo bo);

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserBankRecordServiceImpl.java

@@ -104,6 +104,9 @@ public class UserBankRecordServiceImpl extends ServiceImpl<UserBankRecordMapper,
     @Autowired
     private ICourseBusinessService iCourseBusinessService;
 
+    @Autowired
+    private IClassGradeService iClassGradeService;
+
     @Autowired
     private RedisCache redisCache;
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserExamRecordServiceImpl.java

@@ -16,6 +16,7 @@ import com.zhongzheng.modules.collect.service.ICollectBankService;
 import com.zhongzheng.modules.collect.service.ICollectQuestionService;
 import com.zhongzheng.modules.exam.domain.ExamPaper;
 import com.zhongzheng.modules.exam.service.IExamPaperService;
+import com.zhongzheng.modules.grade.service.IClassGradeService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.user.bo.CheckUserExamRecordBo;
@@ -68,6 +69,8 @@ public class UserExamRecordServiceImpl extends ServiceImpl<UserExamRecordMapper,
     @Autowired
     private IExamPaperService iExamPaperService;
 
+
+
     @Override
     public UserExamRecordVo queryById(Long recordId){
         UserExamRecord db = this.baseMapper.selectById(recordId);

+ 91 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserHandleServiceImpl.java

@@ -0,0 +1,91 @@
+package com.zhongzheng.modules.user.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.user.bo.UserHandleBo;
+import com.zhongzheng.modules.user.bo.UserHandleImportBo;
+import com.zhongzheng.modules.user.bo.UserHandleQueryBo;
+import com.zhongzheng.modules.user.domain.UserHandle;
+import com.zhongzheng.modules.user.mapper.UserHandleMapper;
+import com.zhongzheng.modules.user.service.IUserHandleService;
+import com.zhongzheng.modules.user.vo.UserHandleVo;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 高校Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-10-09
+ */
+@Service
+public class UserHandleServiceImpl extends ServiceImpl<UserHandleMapper, UserHandle> implements IUserHandleService {
+
+    @Override
+    public List<UserHandle> queryUserHandleList(UserHandleQueryBo bo) {
+        List<UserHandle> list = list(new LambdaQueryWrapper<UserHandle>()
+                .eq(UserHandle::getStatus, 1)
+                .eq(UserHandle::getUserId,bo.getUserId())
+                .eq(StringUtils.isNotBlank(bo.getEdu()), UserHandle::getEduLevel, bo.getEdu())
+                .and(ObjectUtils.isNotNull(bo.getKeyWord()), x -> x.like(UserHandle::getRealname, bo.getKeyWord())
+                        .or().like(UserHandle::getIdCard, bo.getKeyWord()).or().like(UserHandle::getTelphone, bo.getKeyWord()))
+                .orderByDesc(UserHandle::getCreateTime));
+        if (CollectionUtils.isEmpty(list)){
+            return new ArrayList<>();
+        }
+        return list;
+    }
+
+    @Override
+    public boolean saveUserHandle(List<UserHandleBo> bo) {
+        List<UserHandle> collect = bo.stream().map(item -> {
+            UserHandle userHandle = BeanUtil.toBean(item, UserHandle.class);
+            userHandle.setCreateTime(DateUtils.getNowTime());
+            userHandle.setUpdateTime(DateUtils.getNowTime());
+            return userHandle;
+        }).collect(Collectors.toList());
+
+        return saveBatch(collect);
+    }
+
+    @Override
+    public boolean editUserHandle(UserHandleBo bo) {
+        UserHandle userHandle = BeanUtil.toBean(bo, UserHandle.class);
+        userHandle.setUpdateTime(DateUtils.getNowTime());
+        return updateById(userHandle);
+    }
+
+    @Override
+    public boolean batchDelUserHandle(List<Long> ids) {
+        return update(new LambdaUpdateWrapper<UserHandle>()
+        .in(UserHandle::getId,ids)
+        .set(UserHandle::getStatus,-1)
+        .set(UserHandle::getCreateTime,DateUtils.getNowTime()));
+    }
+
+    @Override
+    public void importUserHandle(List<UserHandleImportBo> userHandles,Long userId) {
+        if (CollectionUtils.isEmpty(userHandles)){
+            throw new CustomException("导入文件有误!请检查文件");
+        }
+        List<UserHandle> handles = userHandles.stream().map(item -> {
+            UserHandle userHandle = BeanUtil.toBean(item, UserHandle.class);
+            userHandle.setSex(item.getSex());
+            userHandle.setUserId(userId);
+            userHandle.setCreateTime(DateUtils.getNowTime());
+            userHandle.setUpdateTime(DateUtils.getNowTime());
+            return userHandle;
+        }).collect(Collectors.toList());
+        saveBatch(handles);
+    }
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -132,6 +132,9 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
     @Autowired
     private IPolyvLiveService iPolyvLiveService;
 
+    @Autowired
+    private IClassGradeService iClassGradeService;
+
     @Autowired
     private IInformUserService iInformUserService;
 

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserHandleVo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.user.vo;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 企业经办名单
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+public class UserHandleVo implements Serializable {
+
+    private Long id;
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+    /** 经办姓名 */
+    @ApiModelProperty("经办姓名")
+    private String realname;
+    /** 经办性别:1男,2女 */
+    @ApiModelProperty("经办姓名")
+    private String sex;
+    /** 经办身份证 */
+    @ApiModelProperty("经办身份证")
+    private String idCard;
+    /** 经办手机号 */
+    @ApiModelProperty("经办手机号")
+    private String telphone;
+    /** 经办学历 */
+    @ApiModelProperty("经办学历")
+    private String eduLevel;
+    /** 经办公司 */
+    @ApiModelProperty("经办公司")
+    private String companyName;
+    /** 是否完成 1完成 0未完成 */
+    @ApiModelProperty("是否完成 1完成 0未完成")
+    private Integer status;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/IWxPayService.java

@@ -49,4 +49,6 @@ public interface IWxPayService {
 
 	boolean shareToOldSys(Order order,List<OrderGoods> goodsList);
 
+	boolean dealOrder(String out_trade_no, String transaction_id);
+
 }

+ 52 - 10
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -1,12 +1,15 @@
 package com.zhongzheng.modules.wx.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
@@ -36,6 +39,7 @@ import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
 import com.zhongzheng.modules.course.service.ICourseService;
 import com.zhongzheng.modules.distribution.domain.*;
 import com.zhongzheng.modules.distribution.service.*;
+import com.zhongzheng.modules.exam.domain.ExamApplyUser;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsQuestionRel;
 import com.zhongzheng.modules.goods.domain.QuestionMerchant;
@@ -51,11 +55,9 @@ import com.zhongzheng.modules.grade.service.IStudyCountLogService;
 import com.zhongzheng.modules.order.bo.OrderShareMoneyAddBo;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
+import com.zhongzheng.modules.order.domain.OrderHandle;
 import com.zhongzheng.modules.order.domain.OrderPay;
-import com.zhongzheng.modules.order.service.IOrderGoodsService;
-import com.zhongzheng.modules.order.service.IOrderPayService;
-import com.zhongzheng.modules.order.service.IOrderService;
-import com.zhongzheng.modules.order.service.IOrderShareMoneyService;
+import com.zhongzheng.modules.order.service.*;
 import com.zhongzheng.modules.order.vo.OrderShareGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareToOldVo;
 import com.zhongzheng.modules.system.domain.SysTenant;
@@ -88,6 +90,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -130,6 +133,9 @@ public class WxPayServiceImpl implements IWxPayService {
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IOrderHandleService iOrderHandleService;
+
     @Autowired
     private IUserExamGoodsService userExamGoodsService;
 
@@ -311,11 +317,14 @@ public class WxPayServiceImpl implements IWxPayService {
             data.put("out_trade_no", out_trade_no);
             data.put("device_info", "");
             data.put("fee_type", "CNY");
-            data.put("total_fee", price.intValue() + "");
+            data.put("total_fee", price.longValue() + "");
        //     data.put("openid", openid);
             data.put("spbill_create_ip", IpUtils.getIpAddr(ServletUtils.getRequest()));
             data.put("notify_url", notifyUrl);
             data.put("trade_type", "NATIVE");
+            Date date = new Date();
+            Date newDate = new Date(date.getTime() + 60000*30);
+    //        data.put("time_expire", DateUtils.formatDateV3(newDate ,"yyyy-MM-dd'T'HH:mm:ssXXX"));
             String TenantId = ServletUtils.getRequest().getHeader("TenantId");
             data.put("attach", TenantId);
             Map<String, String> resp = wxpay.unifiedOrder(data);
@@ -335,6 +344,8 @@ public class WxPayServiceImpl implements IWxPayService {
             String urlBase64 = "data:image/jpeg;base64,"
                     + encoder1.encodeToString(outputStream.toByteArray());
             result.put("urlBase64", urlBase64);
+            Long overTime = (long)(newDate.getTime()/1000);
+            result.put("overTime", overTime.toString());
             return result;
         } catch (Exception e) {
             e.printStackTrace();
@@ -431,9 +442,16 @@ public class WxPayServiceImpl implements IWxPayService {
                         orderPay.setStatus(1);
                         orderPay.setUpdateTime(DateUtils.getNowTime());
                         iOrderPayService.updateById(orderPay);
-                        if (dealOrder(orderSn, transaction_id)) {
-                            xmlBack = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
-                            return xmlBack;
+                        if(orderPay.getOrderFrom()==2){
+                            if (dealHandleOrder(orderSn, transaction_id)) {
+                                xmlBack = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
+                                return xmlBack;
+                            }
+                        }else{
+                            if (dealOrder(orderSn, transaction_id)) {
+                                xmlBack = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
+                                return xmlBack;
+                            }
                         }
                     }
                 }
@@ -485,6 +503,30 @@ public class WxPayServiceImpl implements IWxPayService {
         return access_token;
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public boolean dealHandleOrder(String out_trade_no, String transaction_id) {
+        String key = out_trade_no;
+        String ticket = redisCache.getCacheObject(key);
+        if (Validator.isNotEmpty(ticket)) {
+            return false;
+        }
+        redisCache.setCacheObject(key, "dealing", 30, TimeUnit.SECONDS);//30秒
+        OrderHandle orderHandle = iOrderHandleService.queryBySn(out_trade_no);
+        if (orderHandle != null && orderHandle.getPayStatus() == 0) {
+            orderHandle.setPayTime(DateUtils.getNowTime());
+            orderHandle.setPayStatus(1);
+            orderHandle.setUpdateTime(DateUtils.getNowTime());
+            if (iOrderHandleService.updateById(orderHandle)) {
+                List<Order> list = iOrderService.list(new LambdaQueryWrapper<Order>().eq(Order::getHandleOrderSn, out_trade_no));
+                for(Order order : list){
+                    dealOrder(order.getOrderSn(),transaction_id);
+                }
+            }
+        }
+        return true;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean dealOrder(String out_trade_no, String transaction_id) {
         String key = out_trade_no;
@@ -540,7 +582,7 @@ public class WxPayServiceImpl implements IWxPayService {
                     //关联题库商品
                     questionGoodsHandle(g);
                 }
-                shareToOldSys(order,goodsList);
+//                shareToOldSys(order,goodsList);
                 instTimeSettleOrder(order,DateUtils.getNowTime());
             }
             //判断是否红包活动订单(修改活动订单状态)
@@ -703,7 +745,7 @@ public class WxPayServiceImpl implements IWxPayService {
                 if (item.getEducationTypeId() == -1){return true;}
 
                 TopCourseEducationType educationType = topCourseEducationTypeService.getById(item.getEducationTypeId());
-                if (!businessName.contains(educationType.getEducationName()) && !businessName.contains(educationType.getSchemeName())){
+                if (!businessName.contains(educationType.getEducationName()) || !businessName.contains(educationType.getSchemeName())){
                     //教育类型匹配失败
                     return false;
                 }

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

@@ -33,6 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
         <result property="importNo" column="import_no"/>
         <result property="commonSign" column="common_sign"/>
+        <result property="viewSign" column="view_sign"/>
         <collection property="businessList" column="chapter_id" select="findBusinessList"/>
         <collection property="moduleList" column="chapter_id" select="findModuleList"/>
         <collection property="courseList" column="chapter_id" select="findCourseList"/>
@@ -149,6 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="importNo != null and importNo != ''">
             AND c.import_no = #{importNo}
         </if>
+        <if test="viewSign != null and viewSign != ''">
+            AND c.view_sign = #{viewSign}
+        </if>
         <if test="name != null and name != ''">
             AND c.name like concat('%', #{name}, '%')
         </if>

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

@@ -55,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="answerNum" column="answer_num"/>
         <result property="doNum" column="do_num"/>
         <result property="teacherName" column="teacher_name"/>
+        <result property="viewSign" column="view_sign"/>
     </resultMap>
 
 

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels