he2802 3 năm trước cách đây
mục cha
commit
f70cbadccd
100 tập tin đã thay đổi với 3098 bổ sung457 xóa
  1. 110 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ActivityRecommendController.java
  2. 8 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/UserProfileController.java
  3. 6 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/UserProfileStampController.java
  4. 33 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseBusinessController.java
  5. 3 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseSectionController.java
  6. 11 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  7. 76 53
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  8. 14 9
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java
  9. 14 3
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBillSheetController.java
  10. 112 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigController.java
  11. 92 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigGoodsController.java
  12. 31 22
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderController.java
  13. 11 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsController.java
  14. 113 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java
  15. 118 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInputController.java
  16. 99 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java
  17. 1 1
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysConfigController.java
  18. 14 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysUserController.java
  19. 14 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/tool/TestController.java
  20. 29 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java
  21. 1 1
      zhongzheng-admin/src/main/resources/application-pre.yml
  22. 1 1
      zhongzheng-admin/src/main/resources/application-prod.yml
  23. 1 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/bank/ExamController.java
  24. 12 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityAdvertisingController.java
  25. 49 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityHomeController.java
  26. 48 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityRecommendController.java
  27. 1 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonBankController.java
  28. 1 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java
  29. 1 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java
  30. 4 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseEducationTypeController.java
  31. 32 29
      zhongzheng-api/src/main/java/com/zhongzheng/controller/face/FaceController.java
  32. 37 11
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  33. 12 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  34. 10 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/inform/InformUserController.java
  35. 57 4
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java
  36. 13 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java
  37. 110 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java
  38. 9 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java
  39. 10 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java
  40. 1 1
      zhongzheng-api/src/main/resources/application-pre.yml
  41. 1 1
      zhongzheng-api/src/main/resources/application-prod.yml
  42. 1 1
      zhongzheng-common/pom.xml
  43. 1 1
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java
  44. 10 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  45. 16 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  46. 24 5
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/file/FileUtils.java
  47. 16 9
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/aspectj/DataScopeAspect.java
  48. 186 13
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  49. 53 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendAddBo.java
  50. 62 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendEditBo.java
  51. 36 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsAddBo.java
  52. 41 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsEditBo.java
  53. 48 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsQueryBo.java
  54. 60 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendQueryBo.java
  55. 51 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/domain/ActivityRecommend.java
  56. 41 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/domain/ActivityRecommendGoods.java
  57. 16 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/mapper/ActivityRecommendGoodsMapper.java
  58. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/mapper/ActivityRecommendMapper.java
  59. 54 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/IActivityRecommendGoodsService.java
  60. 56 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/IActivityRecommendService.java
  61. 105 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendGoodsServiceImpl.java
  62. 154 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendServiceImpl.java
  63. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/vo/ActivityRecommendGoodsVo.java
  64. 68 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/vo/ActivityRecommendVo.java
  65. 8 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/OssService.java
  66. 195 59
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java
  67. 14 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java
  68. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionChapterExamServiceImpl.java
  69. 3 14
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  70. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingAddBo.java
  71. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingEditBo.java
  72. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationAddBo.java
  73. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationEditBo.java
  74. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationQueryBo.java
  75. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/ActivityAdvertising.java
  76. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/ActivityAdvertisingLocation.java
  77. 3 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IUserProfileService.java
  78. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingLocationServiceImpl.java
  79. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingServiceImpl.java
  80. 1 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  81. 246 184
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  82. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ActivityAdvertisingLocationVo.java
  83. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ActivityAdvertisingVo.java
  84. 11 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java
  85. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileExportGaiVo.java
  86. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileExportVo.java
  87. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionAddBo.java
  88. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionEditBo.java
  89. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionQueryBo.java
  90. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/domain/CollectQuestion.java
  91. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/service/impl/CollectQuestionServiceImpl.java
  92. 4 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/vo/CollectQuestionVo.java
  93. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java
  94. 17 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java
  95. 11 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessQueryBo.java
  96. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseSectionQueryBo.java
  97. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseBusiness.java
  98. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseBusinessMapper.java
  99. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseEducationTypeMapper.java
  100. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java

+ 110 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/activity/ActivityRecommendController.java

@@ -0,0 +1,110 @@
+package com.zhongzheng.controller.activity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.activity.bo.ActivityRecommendAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.service.IActivityRecommendGoodsService;
+import com.zhongzheng.modules.activity.service.IActivityRecommendService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+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 2022-04-13
+ */
+@Api(value = "商品推荐控制器", tags = {"商品推荐管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/activity/recommend")
+public class ActivityRecommendController extends BaseController {
+
+    private final IActivityRecommendService iActivityRecommendService;
+
+
+
+
+    /**
+     * 查询商品推荐列表
+     */
+    @ApiOperation("查询商品推荐列表")
+    @PreAuthorize("@ss.hasPermi('system:recommend:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ActivityRecommendVo> list(ActivityRecommendQueryBo bo) {
+        startPage();
+        List<ActivityRecommendVo> list = iActivityRecommendService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取商品推荐详细信息
+     */
+    @ApiOperation("获取商品推荐详细信息")
+    @PreAuthorize("@ss.hasPermi('system:recommend:query')")
+    @GetMapping("/{recommendId}")
+    public AjaxResult<ActivityRecommendVo> getInfo(@PathVariable("recommendId" ) Long recommendId) {
+        ActivityRecommendQueryBo bo = new ActivityRecommendQueryBo();
+        bo.setRecommendId(recommendId);
+        return AjaxResult.success(iActivityRecommendService.getDetail(bo));
+    }
+
+    /**
+     * 新增商品推荐
+     */
+    @ApiOperation("新增商品推荐")
+    @PreAuthorize("@ss.hasPermi('system:recommend:add')")
+    @Log(title = "商品推荐", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody ActivityRecommendAddBo bo) {
+        return toAjax(iActivityRecommendService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改商品推荐
+     */
+    @ApiOperation("修改商品推荐")
+    @PreAuthorize("@ss.hasPermi('system:recommend:edit')")
+    @Log(title = "商品推荐", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody ActivityRecommendEditBo bo) {
+        return toAjax(iActivityRecommendService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除推荐板块商品
+     */
+    @ApiOperation("删除推荐板块")
+    @PreAuthorize("@ss.hasPermi('system:goods:remove')")
+    @Log(title = "删除推荐板块" , businessType = BusinessType.DELETE)
+    @PostMapping("/remove")
+    public AjaxResult<Void> remove(@RequestBody ActivityRecommendEditBo bo) {
+        return toAjax(iActivityRecommendService.deleteWithValidByIds(new ArrayList<Long>(Arrays.asList(bo.getRecommendId())), true) ? 1 : 0);
+    }
+
+}

+ 8 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/UserProfileController.java

@@ -10,6 +10,7 @@ import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.base.vo.UserProfileExportGaiVo;
 import com.zhongzheng.modules.base.vo.UserProfileExportVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
 import com.zhongzheng.modules.user.bo.UserQueryBo;
@@ -97,7 +98,7 @@ public class UserProfileController extends BaseController {
      */
     @ApiOperation("审核资料")
     @PreAuthorize("@ss.hasPermi('system:profile:edit')")
-    @Log(title = "填写资料审核", businessType = BusinessType.UPDATE)
+    @Log(title = "审核资料", businessType = BusinessType.UPDATE)
     @PostMapping()
     public AjaxResult<Void> edit(@RequestBody UserProfileEditBo bo) {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
@@ -113,7 +114,7 @@ public class UserProfileController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:profile:export')")
     @Log(title = "客户端用户", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult<UserProfileExportVo> export(UserProfileQueryBo bo) {
+    public AjaxResult<Map<String,Object>> export(UserProfileQueryBo bo) {
         String fileName = "";
         if(Validator.isEmpty(bo.getStatus())){
             bo.setStatus(new ArrayList<Integer>(Arrays.asList(0)));
@@ -139,7 +140,8 @@ public class UserProfileController extends BaseController {
             bo.getStatus().remove(0);
             bo.setStatus(bo.getStatus());
         }
-        List<UserProfileExportVo> list = iUserProfileService.export(bo);
+        Map<String,Object> map = iUserProfileService.export(bo);
+        List<UserProfileExportVo> list = (List<UserProfileExportVo>)map.get("list");
         ExcelUtil<UserProfileExportVo> util = new ExcelUtil<UserProfileExportVo>(UserProfileExportVo.class);
 
         String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
@@ -153,7 +155,9 @@ public class UserProfileController extends BaseController {
         deptExportMap.put("data", list);
         List<Map<String, Object>> sheetsList = new ArrayList<>();
         sheetsList.add(deptExportMap);
-        return util.exportEasyExcel(sheetsList, "填写资料审核-"+fileName+"-学员数据-"+timeStr);
+        map.put("excel",util.exportEasyExcel(sheetsList, "填写资料审核-"+fileName+"-学员数据-"+timeStr));
+        map.remove("list");
+        return AjaxResult.success(map);
     }
 
     /*@ApiOperation("审核资料测试")

+ 6 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/base/UserProfileStampController.java

@@ -102,7 +102,7 @@ public class UserProfileStampController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:profile:export')")
     @Log(title = "客户端用户", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult<UserProfileExportGaiVo> export(UserProfileQueryBo bo) {
+    public AjaxResult<Map<String,Object>> export(UserProfileQueryBo bo) {
         String fileName = "";
         if(bo.getStatus().get(0)==0){
             fileName="全部";
@@ -123,7 +123,8 @@ public class UserProfileStampController extends BaseController {
             bo.getStatus().remove(0);
             bo.setStatus(bo.getStatus());
         }
-        List<UserProfileExportGaiVo> list = iUserProfileService.exportPo(bo);
+        Map<String,Object> map = iUserProfileService.exportPo(bo);
+        List<UserProfileExportGaiVo> list = (List<UserProfileExportGaiVo>)map.get("list");
         ExcelUtil<UserProfileExportGaiVo> util = new ExcelUtil<UserProfileExportGaiVo>(UserProfileExportGaiVo.class);
 
         String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
@@ -137,6 +138,8 @@ public class UserProfileStampController extends BaseController {
         deptExportMap.put("data", list);
         List<Map<String, Object>> sheetsList = new ArrayList<>();
         sheetsList.add(deptExportMap);
-        return util.exportEasyExcel(sheetsList, "填写盖章审核-"+fileName+"-学员数据-"+timeStr);
+        map.put("excel",util.exportEasyExcel(sheetsList, "填写盖章审核-"+fileName+"-学员数据-"+timeStr));
+        map.remove("list");
+        return AjaxResult.success(map);
     }
 }

+ 33 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseBusinessController.java

@@ -132,4 +132,37 @@ public class CourseBusinessController extends BaseController {
     public AjaxResult<Void> remove(@PathVariable Long[] ids) {
         return toAjax(iCourseBusinessService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
     }*/
+
+    /**
+     * 修改业务层次学习顺序
+     */
+    @ApiOperation("更改审核资料模板用户ID")
+    @PreAuthorize("@ss.hasPermi('course:business:edit')")
+    @Log(title = "更改审核资料模板用户ID", businessType = BusinessType.UPDATE)
+    @PostMapping("/editProfileTpUserIds")
+    public AjaxResult<Void> editProfileTpUserIds(@RequestBody CourseBusinessEditBo bo) {
+        return toAjax(iCourseBusinessService.editProfileTpUserIds(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改业务层次学习顺序
+     */
+    @ApiOperation("更改学时审核用户ID")
+    @PreAuthorize("@ss.hasPermi('course:business:edit')")
+    @Log(title = "更改学时审核用户ID", businessType = BusinessType.UPDATE)
+    @PostMapping("/editPeriodUserIds")
+    public AjaxResult<Void> editPeriodUserIds(@RequestBody CourseBusinessEditBo bo) {
+        return toAjax(iCourseBusinessService.editPeriodUserIds(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改业务层次学习顺序
+     */
+    @ApiOperation("更改退款审核用户ID")
+    @PreAuthorize("@ss.hasPermi('course:business:edit')")
+    @Log(title = "更改退款审核用户ID", businessType = BusinessType.UPDATE)
+    @PostMapping("/editRefundPeriodUserIds")
+    public AjaxResult<Void> editRefundPeriodUserIds(@RequestBody CourseBusinessEditBo bo) {
+        return toAjax(iCourseBusinessService.editRefundPeriodUserIds(bo) ? 1 : 0);
+    }
 }

+ 3 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseSectionController.java

@@ -3,6 +3,7 @@ package com.zhongzheng.controller.course;
 import java.util.Collections;
 import java.util.List;
 import java.util.Arrays;
+import java.util.Map;
 
 import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.core.domain.model.LoginUser;
@@ -64,7 +65,6 @@ public class CourseSectionController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:section:list')")
     @GetMapping("/list")
     public TableDataInfo<CourseSectionVo> list(CourseSectionQueryBo bo) {
-        System.out.println(bo);
         startPage();
         List<CourseSectionVo> list = iCourseSectionService.selectSectionList(bo);
         return getDataTable(list);
@@ -119,14 +119,14 @@ public class CourseSectionController extends BaseController {
     @Log(title = "导入节模板", businessType = BusinessType.IMPORT)
     @PreAuthorize("@ss.hasPermi('system:section:import')")
     @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    public AjaxResult<Map<String,Object>> importData(MultipartFile file, boolean updateSupport) throws Exception
     {
         ExcelUtil<CourseSectionImport> util = new ExcelUtil<CourseSectionImport>(CourseSectionImport.class);
         List<CourseSectionImport> sectionList = util.importExcel(file.getInputStream());
         Collections.reverse(sectionList);
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         String operName = loginUser.getUsername();
-        String message = iCourseSectionService.importSection(sectionList, updateSupport, operName);
+        Map<String,Object> message = iCourseSectionService.importSection(sectionList, updateSupport, operName);
 
         return AjaxResult.success(message);
     }

+ 11 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -70,6 +70,16 @@ public class GoodsController extends BaseController {
         return getDataTable(list);
     }
 
+
+    @ApiOperation("查询商品列表To录单")
+    @PreAuthorize("@ss.hasPermi('system:goods:list')")
+    @GetMapping("/listToInput")
+    public TableDataInfo<GoodsVo> listToInput(GoodsQueryBo bo) {
+        startPage();
+        List<GoodsVo> list = iGoodsService.selectListToInput(bo);
+        return getDataTable(list);
+    }
+
     /**
      * 导出商品列表
      */
@@ -147,7 +157,7 @@ public class GoodsController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:business:list')")
     @GetMapping("/bank/list")
     public AjaxResult<List<GoodsAttachedVo>> bankList(GoodsAttachedQueryBo bo) {
-        List<GoodsAttachedVo> list = iGoodsAttachedService.selectList(bo);
+        List<GoodsAttachedVo> list = iGoodsAttachedService.getList(bo);
         return AjaxResult.success(list);
     }
 

+ 76 - 53
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -4,11 +4,14 @@ import java.io.FileOutputStream;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.hutool.core.lang.Validator;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.base.bo.UserProfileQueryBo;
 import com.zhongzheng.modules.base.vo.UserProfileExportGaiVo;
@@ -64,6 +67,8 @@ public class ClassGradeController extends BaseController {
 
     private final IUserPeriodStatusService userPeriodStatusService;
 
+    private final RedisCache redisCache;
+
     /**
      * 查询班级列表
      */
@@ -175,7 +180,7 @@ public class ClassGradeController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:profile:export')")
     @Log(title = "导出学员学时列表", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult<UserProfileExportGaiVo> export(ClassGradeUserQueryBo bo) {
+    public AjaxResult<Map<String,Object>> export(ClassGradeUserQueryBo bo) {
         String fileName = "";
         if(Validator.isEmpty(bo.getStudyStatus())){
             bo.setStudyStatus(0);
@@ -192,7 +197,8 @@ public class ClassGradeController extends BaseController {
             }
         }
         bo.setUserPhoto(1);
-        List<ClassPeriodStudentExportAllVo> list = iClassGradeUserService.exportPo(bo);
+        Map<String,Object> map = iClassGradeUserService.exportPo(bo);
+        List<ClassPeriodStudentExportAllVo> list = (List<ClassPeriodStudentExportAllVo>)map.get("list");
         ExcelUtil<ClassPeriodStudentExportAllVo> util = new ExcelUtil<ClassPeriodStudentExportAllVo>(ClassPeriodStudentExportAllVo.class);
         ExportParams deptExportParams = new ExportParams();
         // 设置sheet得名称
@@ -205,7 +211,10 @@ public class ClassGradeController extends BaseController {
         deptExportMap.put("data", list);
         List<Map<String, Object>> sheetsList = new ArrayList<>();
         sheetsList.add(deptExportMap);
-        return util.exportEasyExcel(sheetsList, bo.getBusinessName()+"-"+fileName+"-学员学习记录-"+timeStr);
+        String businessName = Validator.isNotEmpty(bo.getBusinessName())?bo.getBusinessName():"";
+        map.put("excel",util.exportEasyExcel(sheetsList, businessName+"-"+fileName+"-学员学习记录-"+timeStr));
+        map.remove("list");
+        return AjaxResult.success(map);
     }
 
     /**
@@ -351,9 +360,9 @@ public class ClassGradeController extends BaseController {
     }
 
     /**
-     * 更改全部待审核状态
+     * 更改批量待审核状态
      */
-    @ApiOperation("更改全部待审核状态")
+    @ApiOperation("更改批量待审核状态")
     @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
     @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
     @PostMapping("/editPeriodAll")
@@ -361,6 +370,17 @@ public class ClassGradeController extends BaseController {
         return toAjax(iUserPeriodService.editPeriodAll(bo) ? 1 : 0);
     }
 
+    /**
+     * 学时通过确认
+     */
+    @ApiOperation("学时通过确认")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "学时通过确认", businessType = BusinessType.UPDATE)
+    @PostMapping("/confirmPeriod")
+    public AjaxResult<Void> confirmPeriod(@RequestBody UserPeriodEditBo bo) {
+        return toAjax(iUserPeriodService.confirmPeriod(bo) ? 1 : 0);
+    }
+
     /**
      * 修改学员记录
      */
@@ -372,54 +392,8 @@ public class ClassGradeController extends BaseController {
         return toAjax(iClassGradeUserService.updateByEditBo(bo) ? 1 : 0);
     }
 
-    /*    *//**
-     * 删除班级
-     *//*
-    @ApiOperation("删除班级")
-    @PreAuthorize("@ss.hasPermi('modules.grade:grade:remove')")
-    @Log(title = "班级" , businessType = BusinessType.DELETE)
-    @DeleteMapping("/{classIds}")
-    public AjaxResult<Void> remove(@PathVariable Long[] classIds) {
-        return toAjax(iClassGradeService.deleteWithValidByIds(Arrays.asList(classIds), true) ? 1 : 0);
-    }*/
 
 
-   /* *//**
-     * 学时审核
-     *//*
-    @ApiOperation("学时审核第一次請求獲得商品的章節")
-    @PreAuthorize("@ss.hasPermi('grade:user:list')")
-    @GetMapping("/listPeriodAuditOne")
-    public TableDataInfo<ClassPeriodVo> listPeriodAuditOne(ClassGradeUserQueryBo bo) {
-        startPage();
-        List<ClassPeriodVo> list = iClassGradeUserService.listPeriodAuditOne(bo);
-        return getDataTable(list);
-    }
-
-    *//**
-     * 学时审核
-     *//*
-    @ApiOperation("学时审核獲得商品模塊下的章")
-    @PreAuthorize("@ss.hasPermi('grade:user:list')")
-    @GetMapping("/listPeriodAuditChapter")
-    public TableDataInfo<ClassPeriodChapterVo> listPeriodAuditChapter(ClassGradeUserQueryBo bo) {
-        startPage();
-        List<ClassPeriodChapterVo> list = iClassGradeUserService.listPeriodAuditChapter(bo);
-        return getDataTable(list);
-    }
-
-    *//**
-     * 学时审核
-     *//*
-    @ApiOperation("学时审核獲得商品章下面的節")
-    @PreAuthorize("@ss.hasPermi('grade:user:list')")
-    @GetMapping("/listPeriodAuditSection")
-    public TableDataInfo<ClassPeriodSectionVo> listPeriodAuditSection(ClassGradeUserQueryBo bo) {
-        startPage();
-        List<ClassPeriodSectionVo> list = iClassGradeUserService.listPeriodAuditSection(bo);
-        return getDataTable(list);
-    }
-*/
     /**
      * 学时审核獲得商品節下面的審核記錄
      */
@@ -442,15 +416,25 @@ public class ClassGradeController extends BaseController {
     }
 
     /**
-     * 查询查询以往审核记录列表
+     * 检查编辑数据是否有用户通过学时
      */
-    @ApiOperation("查编辑数据是否有用户通过学时")
+    @ApiOperation("查编辑数据是否有用户通过学时")
     @PreAuthorize("@ss.hasPermi('grade:user:list')")
     @GetMapping("/checkGoodsChange")
     public AjaxResult<Long> checkGoodsChange(UserPeriodQueryBo bo) {
         return AjaxResult.success(iUserPeriodService.checkGoodsChange(bo));
     }
 
+    /**
+     * 检查编辑数据是否有用户通过学时
+     */
+    @ApiOperation("检查编辑数据是否有用户在学习")
+    @PreAuthorize("@ss.hasPermi('grade:user:list')")
+    @GetMapping("/checkGoodsStudy")
+    public AjaxResult<Long> checkGoodsStudy(UserPeriodQueryBo bo) {
+        return AjaxResult.success(iUserPeriodService.checkGoodsStudy(bo));
+    }
+
     /**
      * 查询班级信息推送数量
      */
@@ -471,4 +455,43 @@ public class ClassGradeController extends BaseController {
         return AjaxResult.success(iClassGradeUserService.selectOfficialPeriodCount(bo));
     }
 
+    /**
+     * 批量打回待审核状态
+     */
+    @ApiOperation("批量打回待审核状态")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "批量打回待审核状态", businessType = BusinessType.UPDATE)
+    @PostMapping("/rollbackPeriod")
+    public AjaxResult<Void> rollbackPeriod(@RequestBody UserPeriodEditBo bo) {
+        return toAjax(iUserPeriodService.rollbackPeriod(bo) ? 1 : 0);
+    }
+
+    /**
+     * 锁定学时审核页面
+     */
+    @ApiOperation("锁定学时审核页面")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "锁定学时审核页面", businessType = BusinessType.UPDATE)
+    @PostMapping("/lockPeriod")
+    public AjaxResult<Void> lockPeriod(@RequestBody UserPeriodEditBo bo) {
+        String key = "LockPeriod_"+bo.getGradeId()+"-"+bo.getUserId();
+        redisCache.setCacheObject(key, SecurityUtils.getUsername(),15, TimeUnit.SECONDS);//15秒锁定
+        return AjaxResult.success();
+    }
+
+    /**
+     * 查看学时审核锁定状态
+     */
+    @ApiOperation("查看学时审核锁定状态")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "查看学时审核锁定状态", businessType = BusinessType.UPDATE)
+    @PostMapping("/lockPeriodStatus")
+    public AjaxResult<Void> lockPeriodStatus(@RequestBody UserPeriodEditBo bo) {
+        String key = "LockPeriod_"+bo.getGradeId()+"-"+bo.getUserId();
+        String username = redisCache.getCacheObject(key);
+        if(SecurityUtils.getUsername().equals(username)){
+            username = null;//同个用户不返回
+        }
+        return AjaxResult.success(username);
+    }
 }

+ 14 - 9
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java

@@ -5,6 +5,7 @@ import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.grade.bo.*;
@@ -40,19 +41,13 @@ import java.util.List;
 @RequestMapping("/grade/student")
 public class ClassStudentController extends BaseController {
 
-    private final IClassGradeService iClassGradeService;
-
-    private final IClassGradeInterfaceService iClassGradeInterfaceService;
-
-    private final IClassGradeSysService iClassGradeSysService;
-
     private final IClassGradeUserService iClassGradeUserService;
 
     private final IUserStudyRecordService iUserStudyRecordService;
 
     private final IUserService iUserService;
-    private final IUserUpdateService iUserUpdateService;
 
+    private final IUserUpdateService iUserUpdateService;
 
     /**
      * 查询學員用户列表
@@ -188,9 +183,19 @@ public class ClassStudentController extends BaseController {
     }
 
     /**
-     * 更新用户学时状态
+     * 查看用户学时状态
+     */
+    @ApiOperation("查看用户学时状态")
+    @PreAuthorize("@ss.hasPermi('app:user:edit')")
+    @PostMapping("/getUserPeriodStatus")
+    public AjaxResult getUserPeriodStatus(@RequestBody ClassGradeUserQueryBo  bo) {
+        return AjaxResult.success(iClassGradeUserService.getUserPeriodStatus(bo));
+    }
+
+    /**
+     * 用户学时状态
      */
-    @ApiOperation("更新用户学时状态")
+    @ApiOperation("用户学时状态")
     @PreAuthorize("@ss.hasPermi('app:user:edit')")
     @PostMapping("/updateUserPeriodStatus")
     public AjaxResult updateUserPeriodStatus(@RequestBody ClassGradeUserQueryBo  bo) {

+ 14 - 3
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBillSheetController.java

@@ -106,13 +106,13 @@ public class OrderBillSheetController extends BaseController {
     /**
      * 修改订单计费单
      */
-   /* @ApiOperation("修改单计费单")
+   @ApiOperation("修改单计费单")
     @PreAuthorize("@ss.hasPermi('system:sheet:edit')")
     @Log(title = "订单计费单", businessType = BusinessType.UPDATE)
-    @PutMapping()
+    @PostMapping("/edit")
     public AjaxResult<Void> edit(@RequestBody OrderBillSheetEditBo bo) {
         return toAjax(iOrderBillSheetService.updateByEditBo(bo) ? 1 : 0);
-    }*/
+    }
 
     /**
      * 删除订单计费单
@@ -158,4 +158,15 @@ public class OrderBillSheetController extends BaseController {
     public AjaxResult<Void> edit(@RequestBody OrderBillGoodsEditBo bo) {
         return toAjax(iOrderBillGoodsService.updateByEditBo(bo) ? 1 : 0);
     }
+
+    /**
+     * 修改订单计费单
+     */
+    @ApiOperation("修改录单总单计费单")
+    @PreAuthorize("@ss.hasPermi('system:sheet:edit')")
+    @Log(title = "修改录单总单计费单", businessType = BusinessType.UPDATE)
+    @PostMapping("/input/edit")
+    public AjaxResult<Void> editInput(@RequestBody OrderBillSheetEditBo bo) {
+        return toAjax(iOrderBillSheetService.updateByInputEditBo(bo) ? 1 : 0);
+    }
 }

+ 112 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderBusinessConfigController.java

@@ -0,0 +1,112 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigAddBo;
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigEditBo;
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigQueryBo;
+import com.zhongzheng.modules.order.service.IOrderBusinessConfigService;
+import com.zhongzheng.modules.order.vo.OrderBusinessConfigVo;
+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 2022-04-01
+ */
+@Api(value = "录单配置控制器", tags = {"录单配置管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/business/config")
+public class OrderBusinessConfigController extends BaseController {
+
+    private final IOrderBusinessConfigService iOrderBusinessConfigService;
+
+    /**
+     * 查询录单配置列表
+     */
+    @ApiOperation("查询录单配置列表")
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderBusinessConfigVo> list(OrderBusinessConfigQueryBo bo) {
+        startPage();
+        List<OrderBusinessConfigVo> list = iOrderBusinessConfigService.queryList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出录单配置列表
+     */
+   /* @ApiOperation("导出录单配置列表")
+    @PreAuthorize("@ss.hasPermi('system:config:export')")
+    @Log(title = "录单配置", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult<OrderBusinessConfigVo> export(OrderBusinessConfigQueryBo bo) {
+        List<OrderBusinessConfigVo> list = iOrderBusinessConfigService.queryList(bo);
+        ExcelUtil<OrderBusinessConfigVo> util = new ExcelUtil<OrderBusinessConfigVo>(OrderBusinessConfigVo.class);
+        return util.exportExcel(list, "录单配置");
+    }*/
+
+    /**
+     * 获取录单配置详细信息
+     */
+    @ApiOperation("获取录单配置详细信息")
+    @PreAuthorize("@ss.hasPermi('system:config:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<OrderBusinessConfigVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iOrderBusinessConfigService.queryById(id));
+    }
+
+    /**
+     * 新增录单配置
+     */
+    @ApiOperation("新增录单配置")
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "录单配置", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody OrderBusinessConfigAddBo bo) {
+        return toAjax(iOrderBusinessConfigService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改录单配置
+     */
+    @ApiOperation("修改录单配置")
+    @PreAuthorize("@ss.hasPermi('system:config:edit')")
+    @Log(title = "录单配置", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody OrderBusinessConfigEditBo bo) {
+        return toAjax(iOrderBusinessConfigService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除录单配置
+     */
+   /* @ApiOperation("删除录单配置")
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "录单配置" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iOrderBusinessConfigService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }*/
+}

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

@@ -0,0 +1,92 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigGoodsAddBo;
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigGoodsEditBo;
+import com.zhongzheng.modules.order.bo.OrderBusinessConfigGoodsQueryBo;
+import com.zhongzheng.modules.order.service.IOrderBusinessConfigGoodsService;
+import com.zhongzheng.modules.order.vo.OrderBusinessConfigGoodsVo;
+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 2022-04-01
+ */
+@Api(value = "订单配置商品控制器", tags = {"订单配置商品管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/config/goods")
+public class OrderBusinessConfigGoodsController extends BaseController {
+
+    private final IOrderBusinessConfigGoodsService iOrderBusinessConfigGoodsService;
+
+    /**
+     * 查询订单配置商品列表
+     */
+    @ApiOperation("查询订单配置商品列表")
+    @PreAuthorize("@ss.hasPermi('system:goods:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderBusinessConfigGoodsVo> list(OrderBusinessConfigGoodsQueryBo bo) {
+        startPage();
+        List<OrderBusinessConfigGoodsVo> list = iOrderBusinessConfigGoodsService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取订单配置商品详细信息
+     */
+    @ApiOperation("获取订单配置商品详细信息")
+    @PreAuthorize("@ss.hasPermi('system:goods:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<OrderBusinessConfigGoodsVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iOrderBusinessConfigGoodsService.queryById(id));
+    }
+
+    /**
+     * 新增订单配置商品
+     */
+    @ApiOperation("新增订单配置商品")
+    @PreAuthorize("@ss.hasPermi('system:goods:add')")
+    @Log(title = "订单配置商品", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody OrderBusinessConfigGoodsAddBo bo) {
+        return toAjax(iOrderBusinessConfigGoodsService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单配置商品
+     */
+    @ApiOperation("修改订单配置商品")
+    @PreAuthorize("@ss.hasPermi('system:goods:edit')")
+    @Log(title = "订单配置商品", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody OrderBusinessConfigGoodsEditBo bo) {
+        return toAjax(iOrderBusinessConfigGoodsService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+
+}

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

@@ -1,21 +1,22 @@
 package com.zhongzheng.controller.order;
 
-import java.util.List;
-import java.util.Arrays;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 
 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.TokenService;
-import com.zhongzheng.modules.order.bo.OrderAddBo;
-import com.zhongzheng.modules.order.bo.OrderEditBo;
-import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
-import com.zhongzheng.modules.order.bo.OrderQueryBo;
+import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportAllVo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 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.user.bo.UserSubscribeExportBo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -114,24 +115,32 @@ public class OrderController extends BaseController {
     }
 
     /**
-     * 修改订单
+     * 新增订单
      */
-   /* @ApiOperation("修改订单")
-    @PreAuthorize("@ss.hasPermi('system:order:edit')")
-    @Log(title = "订单", businessType = BusinessType.UPDATE)
-    @PostMapping("/edit")
-    public AjaxResult<Void> edit(@RequestBody OrderEditBo bo) {
-        return toAjax(iOrderService.updateByEditBo(bo) ? 1 : 0);
-    }*/
+    @ApiOperation("新增后台录单")
+    @PreAuthorize("@ss.hasPermi('system:order:add')")
+    @Log(title = "新增后台录单", businessType = BusinessType.INSERT)
+    @PostMapping("/inputOrder")
+    public AjaxResult addInputOrder(@RequestBody OrderAddBo bo) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateSysUserId(loginUser.getUser().getUserId());
+        bo.setCreateBy(SecurityUtils.getUsername());
+        return AjaxResult.success(iOrderService.placePlatInputOrder(bo));
+    }
 
     /**
-     * 删除订单
+     * 导出新增预约模板
      */
-   /* @ApiOperation("删除订单")
-    @PreAuthorize("@ss.hasPermi('system:order:remove')")
-    @Log(title = "订单" , businessType = BusinessType.DELETE)
-    @DeleteMapping("/{orderIds}")
-    public AjaxResult<Void> remove(@PathVariable Long[] orderIds) {
-        return toAjax(iOrderService.deleteWithValidByIds(Arrays.asList(orderIds), true) ? 1 : 0);
-    }*/
+    @ApiOperation("导出错误录入订单")
+    @PreAuthorize("@ss.hasPermi('system:profile:export')")
+    @Log(title = "导出错误录入订单", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportWrongInputOrder")
+    public AjaxResult<Map<String,Object>> exportWrongInputOrder(@RequestBody List<OrderInputWrongImportBo> bo) {
+        Map<String,Object> map = new HashMap<>();
+        String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        ExcelUtil<OrderInputWrongImportBo> util = new ExcelUtil<OrderInputWrongImportBo>(OrderInputWrongImportBo.class);
+        map.put("excel",util.exportEasyExcel(util.exportEasyData(bo), "导出订单错误数据-"+timeStr));
+        return AjaxResult.success(map);
+    }
+
 }

+ 11 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsController.java

@@ -3,10 +3,12 @@ package com.zhongzheng.controller.order;
 import java.util.List;
 import java.util.Arrays;
 
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.order.bo.OrderGoodsEditBo;
 import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -122,4 +124,13 @@ public class OrderGoodsController extends BaseController {
     public AjaxResult<Void> remove(@PathVariable Long[] orderGoodsIds) {
         return toAjax(iOrderGoodsService.deleteWithValidByIds(Arrays.asList(orderGoodsIds), true) ? 1 : 0);
     }*/
+
+    @ApiOperation("查询购买商品的用户列表")
+    @PreAuthorize("@ss.hasPermi('system:invoice:list')")
+    @GetMapping("/buyGoodsUserList")
+    public TableDataInfo<OrderGoodsVo> selectBuyGoodsUserList(OrderGoodsQueryBo bo) {
+        startPage();
+        List<OrderGoodsVo> list = iOrderGoodsService.selectBuyGoodsUserList(bo);
+        return getDataTable(list);
+    }
 }

+ 113 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java

@@ -0,0 +1,113 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.modules.grade.bo.UserPeriodEditBo;
+import com.zhongzheng.modules.order.bo.OrderGoodsRefundAddBo;
+import com.zhongzheng.modules.order.bo.OrderGoodsRefundEditBo;
+import com.zhongzheng.modules.order.bo.OrderGoodsRefundQueryBo;
+import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
+import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
+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 2022-04-12
+ */
+@Api(value = "订单商品退款控制器", tags = {"订单商品退款管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/refund")
+public class OrderGoodsRefundController extends BaseController {
+
+    private final IOrderGoodsRefundService iOrderGoodsRefundService;
+
+    /**
+     * 查询订单商品退款列表
+     */
+    @ApiOperation("查询订单商品退款列表")
+    @PreAuthorize("@ss.hasPermi('system:refund:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderGoodsRefundVo> list(OrderGoodsRefundQueryBo bo) {
+        startPage();
+        List<OrderGoodsRefundVo> list = iOrderGoodsRefundService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取订单商品退款详细信息
+     */
+    @ApiOperation("获取订单商品退款详细信息")
+    @PreAuthorize("@ss.hasPermi('system:refund:query')")
+    @GetMapping("/{refundId}")
+    public AjaxResult<OrderGoodsRefundVo> getInfo(@PathVariable("refundId" ) Long refundId) {
+        return AjaxResult.success(iOrderGoodsRefundService.queryById(refundId));
+    }
+
+    /**
+     * 新增订单商品退款
+     */
+    @ApiOperation("批量新增录单订单商品退款")
+    @PreAuthorize("@ss.hasPermi('system:refund:add')")
+    @Log(title = "批量新增录单订单商品退款", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody List<OrderGoodsRefundAddBo> bo) {
+        return toAjax(iOrderGoodsRefundService.placeRefundInputOrder(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单商品退款
+     */
+    @ApiOperation("修改订单商品退款")
+    @PreAuthorize("@ss.hasPermi('system:refund:edit')")
+    @Log(title = "订单商品退款", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody OrderGoodsRefundEditBo bo) {
+        return toAjax(iOrderGoodsRefundService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 初审确认
+     */
+    @ApiOperation("初审确认")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "学时通过确认", businessType = BusinessType.UPDATE)
+    @PostMapping("/firstPeriod")
+    public AjaxResult<Void> firstPeriod(@RequestBody List<OrderGoodsRefundEditBo> bo) {
+        return toAjax(iOrderGoodsRefundService.firstPeriod(bo) ? 1 : 0);
+    }
+
+    /**
+     * 复审确认
+     */
+    @ApiOperation("复审确认")
+    @PreAuthorize("@ss.hasPermi('grade:grade:edit')")
+    @Log(title = "复审确认", businessType = BusinessType.UPDATE)
+    @PostMapping("/confirmPeriod")
+    public AjaxResult<Void> confirmPeriod(@RequestBody List<OrderGoodsRefundEditBo> bo) {
+        return toAjax(iOrderGoodsRefundService.confirmPeriod(bo) ? 1 : 0);
+    }
+}

+ 118 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInputController.java

@@ -0,0 +1,118 @@
+package com.zhongzheng.controller.order;
+
+import java.util.List;
+import java.util.Arrays;
+
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.order.bo.OrderInputAddBo;
+import com.zhongzheng.modules.order.bo.OrderInputEditBo;
+import com.zhongzheng.modules.order.bo.OrderInputQueryBo;
+import com.zhongzheng.modules.order.service.IOrderInputService;
+import com.zhongzheng.modules.order.vo.OrderInputVo;
+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 2022-04-07
+ */
+@Api(value = "录单控制器", tags = {"录单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/input")
+public class OrderInputController extends BaseController {
+
+    private final IOrderInputService iOrderInputService;
+
+    private final TokenService tokenService;
+
+    /**
+     * 查询录单列表
+     */
+    @ApiOperation("查询录单列表")
+    @PreAuthorize("@ss.hasPermi('system:input:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderInputVo> list(OrderInputQueryBo bo) {
+        startPage();
+        List<OrderInputVo> list = iOrderInputService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取录单详细信息
+     */
+    @ApiOperation("获取录单详细信息")
+    @PreAuthorize("@ss.hasPermi('system:input:query')")
+    @GetMapping("/detail")
+    public AjaxResult<OrderInputVo> getInfo(OrderInputQueryBo bo) {
+        return AjaxResult.success(iOrderInputService.getInfo(bo));
+    }
+
+    /**
+     * 新增录单
+     */
+    @ApiOperation("新增录单")
+    @PreAuthorize("@ss.hasPermi('system:input:add')")
+    @Log(title = "录单", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<String> add(@RequestBody OrderInputAddBo bo) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setCreateSysUserId(loginUser.getUser().getUserId());
+        bo.setCreateUsername(SecurityUtils.getUsername());
+        return AjaxResult.success("录单单号",iOrderInputService.insertByAddBo(bo));
+    }
+
+    /**
+     * 修改录单
+     */
+    @ApiOperation("修改录单")
+    @PreAuthorize("@ss.hasPermi('system:input:edit')")
+    @Log(title = "录单", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody OrderInputEditBo bo) {
+        return toAjax(iOrderInputService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("查询录单详情用户列表")
+    @PreAuthorize("@ss.hasPermi('system:input:list')")
+    @GetMapping("/userList")
+    public TableDataInfo<OrderInputVo> getUserList(OrderInputQueryBo bo) {
+        startPage();
+        List<OrderInputVo> list = iOrderInputService.getUserList(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("查询录单用户商品列表")
+    @PreAuthorize("@ss.hasPermi('system:input:list')")
+    @GetMapping("/userGoodsList")
+    public TableDataInfo<OrderInputVo> getUserGoodsList(OrderInputQueryBo bo) {
+        startPage();
+        List<OrderInputVo> list = iOrderInputService.getUserGoodsList(bo);
+        return getDataTable(list);
+    }
+
+}

+ 99 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java

@@ -0,0 +1,99 @@
+package com.zhongzheng.controller.order;
+
+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.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+import com.zhongzheng.modules.tencentcloud.bo.InvoiceQueryBo;
+import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
+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.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.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 订单发票Controller
+ *
+ * @author hjl
+ * @date 2022-03-28
+ */
+@Api(value = "订单发票控制器", tags = {"订单发票管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/invoice")
+public class OrderInvoiceController extends BaseController {
+
+    private final IOrderInvoiceService iOrderInvoiceService;
+
+    private final IFaceOcrService iFaceOcrService;
+
+    /**
+     * 查询订单发票列表
+     */
+    @ApiOperation("查询订单发票列表")
+    @PreAuthorize("@ss.hasPermi('system:invoice:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderInvoiceVo> list(OrderInvoiceQueryBo bo) {
+        startPage();
+        List<OrderInvoiceVo> list = iOrderInvoiceService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取订单发票详细信息
+     */
+    @ApiOperation("获取订单发票详细信息")
+    @PreAuthorize("@ss.hasPermi('system:invoice:query')")
+    @GetMapping("/{invoiceId}")
+    public AjaxResult<OrderInvoiceVo> getInfo(@PathVariable("invoiceId" ) Long invoiceId) {
+        return AjaxResult.success(iOrderInvoiceService.queryById(invoiceId));
+    }
+
+    /**
+     * 新增订单发票
+     */
+    @ApiOperation("新增订单发票")
+    @PreAuthorize("@ss.hasPermi('system:invoice:add')")
+    @Log(title = "订单发票", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody OrderInvoiceAddBo bo) {
+        return toAjax(iOrderInvoiceService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 修改订单发票
+     */
+    @ApiOperation("修改订单发票")
+    @PreAuthorize("@ss.hasPermi('system:invoice:edit')")
+    @Log(title = "订单发票", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult<Void> edit(@RequestBody OrderInvoiceEditBo bo) {
+        return toAjax(iOrderInvoiceService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("发票识别")
+    @PostMapping("/vatInvoiceOCR")
+    public AjaxResult VatInvoiceOCR(@RequestBody InvoiceQueryBo bo){
+        Map<String, String> rs = iFaceOcrService.VatInvoiceOCR(bo);
+        return AjaxResult.success(rs);
+    }
+}

+ 1 - 1
zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysConfigController.java

@@ -81,7 +81,7 @@ public class SysConfigController extends BaseController
     @GetMapping(value = "/configKey/{configKey}")
     public AjaxResult getConfigKey(@PathVariable String configKey)
     {
-        return AjaxResult.success(configService.selectConfigByKey(configKey));
+        return AjaxResult.success("配置内容",configService.selectConfigByKey(configKey));
     }
 
     /**

+ 14 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/system/SysUserController.java

@@ -25,6 +25,7 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.manager.AsyncManager;
 import com.zhongzheng.framework.manager.factory.AsyncFactory;
 import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.exam.domain.ExamConfig;
 import com.zhongzheng.modules.system.service.ISysPostService;
 import com.zhongzheng.modules.system.service.ISysRoleService;
@@ -271,4 +272,17 @@ public class SysUserController extends BaseController
         user.setUpdateBy(SecurityUtils.getUsername());
         return toAjax(userService.updateUserStatus(user));
     }
+
+    /**
+     * 业务层次获取用户列表
+     */
+    @ApiOperation("业务层次获取用户列表")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/businessPeopleList")
+    public TableDataInfo queryBusinessPeopleList(CourseBusinessQueryBo bo)
+    {
+        startPage();
+        List<SysUser> list = userService.queryBusinessPeopleList(bo);
+        return getDataTable(list);
+    }
 }

+ 14 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/tool/TestController.java

@@ -3,7 +3,11 @@ package com.zhongzheng.controller.tool;
 import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.order.service.IOrderBillGoodsService;
 import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
@@ -18,9 +22,12 @@ import java.util.Map;
  */
 
 @RestController
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
 @RequestMapping("/test/user")
 public class TestController extends BaseController
 {
+    private final OssService ossService;
+
     private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
     {
         users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
@@ -49,6 +56,13 @@ public class TestController extends BaseController
         }
     }
 
+    @ApiOperation("压缩图片")
+    @PostMapping("/zip")
+    public AjaxResult zip(UserEntity user)
+    {
+    //    ossService.zipPeopleDownload(18L,523L,"李盛仁","445224199901040003");
+        return AjaxResult.success(users.put(user.getUserId(), user));
+    }
 
     @PostMapping("/save")
     public AjaxResult save(UserEntity user)

+ 29 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -6,11 +6,15 @@ import java.util.*;
 
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.alisms.service.IAliSmsService;
+import com.zhongzheng.modules.course.vo.CourseSectionImport;
 import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserStudyRecordVo;
+import com.zhongzheng.modules.user.vo.UserSubscribeExport;
 import com.zhongzheng.modules.user.vo.UserVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -31,6 +35,7 @@ import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 客户端用户Controller
@@ -139,4 +144,28 @@ public class UserController extends BaseController {
     }
 
 
+    @ApiOperation("导入用户")
+    @Log(title = "导入用户", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:section:import')")
+    @PostMapping("/importData")
+    public AjaxResult<Map<String,Object>> importData(MultipartFile file, String importNo) throws Exception
+    {
+        ExcelUtil<UserImportAddBo> util = new ExcelUtil<UserImportAddBo>(UserImportAddBo.class);
+        List<UserImportAddBo> userList = util.importExcel(file.getInputStream());
+        Collections.reverse(userList);
+        Map<String, Object> rs = iUserService.importUser(userList,importNo);
+        return AjaxResult.success(rs);
+    }
+
+    @ApiOperation("导出失败导入用户")
+    @Log(title = "导入用户", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:section:import')")
+    @PostMapping("/exportFailData")
+    public AjaxResult<Map<String,Object>> exportFailData(@RequestBody List<UserImportExportBo> bo) throws Exception
+    {
+        List<UserImportExportBo> errorList = bo;
+        ExcelUtil<UserImportExportBo> util = new ExcelUtil<UserImportExportBo>(UserImportExportBo.class);
+        String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        return util.exportEasyExcel(util.exportEasyData(errorList), "导出失败导入用户"+timeStr);
+    }
 }

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

@@ -50,7 +50,7 @@ spring:
                     enabled: true
                     # 慢SQL记录
                     log-slow-sql: true
-                    slow-sql-millis: 1000
+                    slow-sql-millis: 2500
                     merge-sql: true
                 wall:
                     config:

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

@@ -50,7 +50,7 @@ spring:
                     enabled: true
                     # 慢SQL记录
                     log-slow-sql: true
-                    slow-sql-millis: 1000
+                    slow-sql-millis: 4000
                     merge-sql: true
                 wall:
                     config:

+ 1 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/bank/ExamController.java

@@ -74,7 +74,7 @@ public class ExamController extends BaseController {
     }
 
     /**
-     * 获取试卷详细信息
+     * 获取本章的下一张试卷
      */
     @ApiOperation("获取本章的下一张试卷")
     @GetMapping("/nextExam")

+ 12 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityAdvertisingController.java

@@ -7,6 +7,7 @@ import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingAddBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingEditBo;
+import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationQueryBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingQueryBo;
 import com.zhongzheng.modules.base.service.IActivityAdvertisingLocationService;
 import com.zhongzheng.modules.base.service.IActivityAdvertisingService;
@@ -55,12 +56,22 @@ public class ActivityAdvertisingController extends BaseController {
     /**
      * 获取广告位详细信息
      */
-    @ApiOperation("获取首页广告位详细信息")
+    @ApiOperation("获取小程序首页广告位详细信息")
     @PreAuthorize("@ss.hasPermi('system:location:query')")
     @GetMapping("/homeLocation")
     public AjaxResult<ActivityAdvertisingLocationVo> homeLocation() {
         return AjaxResult.success(iActivityAdvertisingLocationService.queryByKey("home-banner"));
     }
 
+    /**
+     * 获取广告位详细信息
+     */
+    @ApiOperation("获取广告位列表信息")
+    @PreAuthorize("@ss.hasPermi('system:location:query')")
+    @GetMapping("/adLocation")
+    public AjaxResult<List<ActivityAdvertisingLocationVo>> homePcLocation(ActivityAdvertisingLocationQueryBo bo) {
+        bo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
+        return AjaxResult.success(iActivityAdvertisingLocationService.queryList(bo));
+    }
 
 }

+ 49 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityHomeController.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.controller.cmmon;
+
+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.base.bo.ActivityAdvertisingQueryBo;
+import com.zhongzheng.modules.base.service.IActivityAdvertisingLocationService;
+import com.zhongzheng.modules.base.service.IActivityAdvertisingService;
+import com.zhongzheng.modules.base.vo.ActivityAdvertisingLocationVo;
+import com.zhongzheng.modules.base.vo.ActivityAdvertisingVo;
+import com.zhongzheng.modules.system.domain.SysConfig;
+import com.zhongzheng.modules.system.service.ISysConfigService;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+@Api(value = "首页控制器", tags = {"首页控制器"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/base/home")
+public class ActivityHomeController extends BaseController {
+
+    @Autowired
+    private ISysConfigService configService;
+
+    /**
+     * 获取参数配置列表
+     */
+    @ApiOperation("首页配置列表")
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysConfig config)
+    {
+        startPage();
+        config.setConfigModule("home");
+        List<SysConfig> list = configService.selectConfigList(config);
+        return getDataTable(list);
+    }
+}

+ 48 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/ActivityRecommendController.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.controller.cmmon;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.service.IActivityRecommendService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 商品推荐Controller
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Api(value = "商品推荐控制器", tags = {"商品推荐管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/app/common/activity/recommend")
+public class ActivityRecommendController extends BaseController {
+
+    private final IActivityRecommendService iActivityRecommendService;
+
+    /**
+     * 查询商品推荐列表
+     */
+    @ApiOperation("查询商品推荐列表")
+    @PreAuthorize("@ss.hasPermi('system:recommend:list')")
+    @GetMapping("/list")
+    public TableDataInfo<ActivityRecommendVo> list(ActivityRecommendQueryBo bo) {
+        startPage();
+        List<ActivityRecommendVo> list = iActivityRecommendService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+
+}

+ 1 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonBankController.java

@@ -66,7 +66,7 @@ public class CommonBankController extends BaseController {
     @ApiOperation("查询题库商品试卷列表")
     @GetMapping("/list")
     public AjaxResult<List<GoodsAttachedVo>> bankList(GoodsAttachedQueryBo bo) {
-        List<GoodsAttachedVo> list = iGoodsAttachedService.selectList(bo);
+        List<GoodsAttachedVo> list = iGoodsAttachedService.getList(bo);
         return AjaxResult.success(list);
     }
 

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

@@ -100,7 +100,7 @@ public class CommonController extends BaseController {
         Map<String,Object> map = new HashMap<>();
         map.put("hide",false);
         if(Validator.isNotEmpty(bo.getVersion())){
-            if(bo.getVersion().equals("5.1.1")){
+            if(bo.getVersion().equals("5.2.1")){
                 map.put("hide",true);
             }
         }

+ 1 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonGoodsController.java

@@ -70,7 +70,7 @@ public class CommonGoodsController extends BaseController {
     @ApiOperation("查询商品题库目录列表")
     @GetMapping("/bank/list")
     public AjaxResult<List<GoodsAttachedVo>> bankList(GoodsAttachedQueryBo bo) {
-        List<GoodsAttachedVo> list = iGoodsAttachedService.selectList(bo);
+        List<GoodsAttachedVo> list = iGoodsAttachedService.getList(bo);
         return AjaxResult.success(list);
     }
 

+ 4 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/course/CourseEducationTypeController.java

@@ -35,6 +35,8 @@ public class CourseEducationTypeController extends BaseController {
 
     private final ICourseEducationTypeService iCourseEducationTypeService;
 
+
+
     /**
      * 查询教育类型列表
      */
@@ -46,4 +48,6 @@ public class CourseEducationTypeController extends BaseController {
         List<CourseEducationTypeVo> list = iCourseEducationTypeService.queryList(bo);
         return getDataTable(list);
     }
+
+
 }

+ 32 - 29
zhongzheng-api/src/main/java/com/zhongzheng/controller/face/FaceController.java

@@ -1,21 +1,18 @@
 package com.zhongzheng.controller.face;
 
+import cn.hutool.core.lang.Validator;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.WxTokenService;
-import com.zhongzheng.modules.face.bo.FaceVo;
-import com.zhongzheng.modules.face.service.IFaceService;
-import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
+import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
+import com.zhongzheng.modules.tencentcloud.service.IFaceOcrService;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 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 org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
 
@@ -31,38 +28,44 @@ import java.util.Map;
 @RequestMapping("/face")
 public class FaceController extends BaseController {
 
-    private final IFaceService iFaceService;
+    private final IFaceOcrService iFaceService;
 
     private final WxTokenService wxTokenService;
 
-    @ApiOperation("获取识别凭证")
-    @GetMapping("/certification/BizToken")
-    public AjaxResult<FaceVo> getBizToken() throws Exception {
-        FaceVo face = iFaceService.getFaceDetectAuth("0");
-        return AjaxResult.success(face);
-    }
 
-    @ApiOperation("获取识别结果")
-    @GetMapping("/certification/DetectInfo/{bizToken}")
-    public AjaxResult getDetectInfo(@PathVariable("bizToken") String bizToken) throws Exception {
+    @ApiOperation("人脸匹配")
+    @PostMapping("/certification/CompareFace")
+    public AjaxResult<Integer> CompareFace(@RequestBody FaceQueryBo bo){
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        iFaceService.getDetectInfo(bizToken,loginUser.getUser().getUserId());
-        return AjaxResult.success();
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iFaceService.CompareFace(bo));
     }
 
-    @ApiOperation("获取人照识别凭证")
-    @GetMapping("/certification/PicBizToken")
-    public AjaxResult<FaceVo> getPicBizToken() throws Exception {
+    @ApiOperation("身份证识别")
+    @PostMapping("/certification/IDCardOCR")
+    public AjaxResult IDCardOCR(@RequestBody FaceQueryBo bo){
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        FaceVo face = iFaceService.getPicFaceDetectAuth("1",loginUser.getUser().getUserId());
-        return AjaxResult.success(face);
+        bo.setUserId(loginUser.getUser().getUserId());
+        Map<String,String> rs = iFaceService.IDCardOCR(bo);
+        if(Validator.isNotEmpty(rs)){
+            return AjaxResult.success(rs);
+        }else{
+            return AjaxResult.error();
+        }
+
     }
 
-    @ApiOperation("获取人照识别结果")
-    @GetMapping("/certification/PicDetectInfo/{bizToken}")
-    public AjaxResult<Integer> getPicDetectInfo(@PathVariable("bizToken") String bizToken) throws Exception {
+    @ApiOperation("照片人脸核身")
+    @PostMapping("/certification/ImageRecognition")
+    public AjaxResult ImageRecognition(@RequestBody FaceQueryBo bo){
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
-        Integer result = iFaceService.getPicDetectInfo(bizToken,loginUser.getUser().getUserId());
-        return AjaxResult.success(result);
+        bo.setUserId(loginUser.getUser().getUserId());
+        Map<String,Object> rs = iFaceService.ImageRecognition(bo);
+        if(Validator.isNotEmpty(rs)){
+            return AjaxResult.success(rs);
+        }else{
+            return AjaxResult.error();
+        }
+
     }
 }

+ 37 - 11
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -1,5 +1,7 @@
 package com.zhongzheng.controller.goods;
 
+import cn.hutool.core.lang.Validator;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
@@ -22,8 +24,13 @@ import com.zhongzheng.modules.goods.service.IGoodsAuditionConfigService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsAttachedVo;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo;
+import com.zhongzheng.modules.grade.service.IUserPeriodService;
+import com.zhongzheng.modules.order.domain.OrderGoods;
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.user.bo.UserExamRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserExamWrongRecordQueryBo;
+import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserExamRecordService;
 import com.zhongzheng.modules.user.service.IUserExamWrongRecordService;
@@ -66,6 +73,10 @@ public class GoodsController extends BaseController {
 
     private final IQuestionChapterExamService iQuestionChapterExamService;
 
+    private final IUserPeriodService iUserPeriodService;
+
+    private final IOrderGoodsService iOrderGoodsService;
+
     /**
      * 获取商品详细信息
      */
@@ -83,39 +94,42 @@ public class GoodsController extends BaseController {
     /**
      * 获取商品详细信息
      */
-    @ApiOperation("获取题库商品题目数统计信息")
-    @GetMapping("/bank/questionNum/{goodsId}")
-    public AjaxResult<Map<String,Object>> questionNum(@PathVariable("goodsId" ) Long goodsId) {
+    @ApiOperation("获取题库订单商品题目数统计信息")
+    @GetMapping("/bank/questionNum/{orderGoodsId}")
+    public AjaxResult<Map<String,Object>> questionNum(@PathVariable("orderGoodsId" ) Long orderGoodsId) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
 
         Map<String,Object> numMap = new HashMap<>();
 
         UserExamWrongRecordQueryBo wBo = new UserExamWrongRecordQueryBo();
-        wBo.setGoodsId(goodsId);
+        wBo.setOrderGoodsId(orderGoodsId);
         wBo.setUserId(loginUser.getUser().getUserId());
         Long wrongNum = iUserExamWrongRecordService.recordNum(wBo);
         numMap.put("wrongNum",wrongNum);
 
         CollectQuestionQueryBo collectQuestionQueryBo = new CollectQuestionQueryBo();
-        collectQuestionQueryBo.setGoodsId(goodsId);
+        collectQuestionQueryBo.setOrderGoodsId(orderGoodsId);
         collectQuestionQueryBo.setUserId(loginUser.getUser().getUserId());
         Integer collectNum = iCollectQuestionService.collectNum(collectQuestionQueryBo);
         numMap.put("collectNum",collectNum);
 
         UserExamRecordQueryBo userExamRecordQueryBo = new UserExamRecordQueryBo();
-        userExamRecordQueryBo.setGoodsId(goodsId);
+        userExamRecordQueryBo.setOrderGoodsId(orderGoodsId);
         userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId());
         Long doNum = iUserExamRecordService.selectDoNum(userExamRecordQueryBo);
         numMap.put("doNum",doNum);
 
-        userExamRecordQueryBo.setGoodsId(goodsId);
+        userExamRecordQueryBo.setOrderGoodsId(orderGoodsId);
         userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId());
         Long rightNum = iUserExamRecordService.selectRightNum(userExamRecordQueryBo);
         numMap.put("rightNum",rightNum);
+        OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>()
+                .eq(OrderGoods::getOrderGoodsId, orderGoodsId));
+        if(Validator.isNotEmpty(orderGoods)){
+            Long totalNum = iGoodsService.getQuestionNum(orderGoods.getGoodsId());
+            numMap.put("totalNum",totalNum);
+        }
 
-        Long totalNum = iGoodsService.getQuestionNum(goodsId);
-
-        numMap.put("totalNum",totalNum);
 
         return AjaxResult.success(numMap);
     }
@@ -125,7 +139,7 @@ public class GoodsController extends BaseController {
     public AjaxResult<List<GoodsAttachedVo>> bankList(GoodsAttachedQueryBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
-        List<GoodsAttachedVo> list = iGoodsAttachedService.selectList(bo);
+        List<GoodsAttachedVo> list = iGoodsAttachedService.getList(bo);
         return AjaxResult.success(list);
     }
 
@@ -161,4 +175,16 @@ public class GoodsController extends BaseController {
         List<ExamVo> list = iQuestionChapterExamService.getDoList(bo);
         return AjaxResult.success(list);
     }
+
+    /**
+     * 查询用户商品今天学习节数
+     */
+    @ApiOperation("查询用户商品今天学习节数")
+    @GetMapping("/todayStudySectionNum")
+    public AjaxResult<Long> todayStudySectionNum(UserPeriodQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserPeriodService.todayStudySectionNum(bo));
+    }
+
 }

+ 12 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -82,4 +82,16 @@ public class ClassGradeController extends BaseController {
         bo.setUserId(loginUser.getUser().getUserId());
         return AjaxResult.success(iClassGradeUserService.changeGrade(bo));
     }
+
+    /**
+     * 检查用户是否学习过节
+     */
+    @ApiOperation("检查用户是否学习过节")
+    @PreAuthorize("@ss.hasPermi('grade:user:list')")
+    @GetMapping("/checkGoodsStudy")
+    public AjaxResult<Long> checkGoodsStudy(UserPeriodQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserPeriodService.checkGoodsStudy(bo));
+    }
 }

+ 10 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/inform/InformUserController.java

@@ -33,7 +33,7 @@ import io.swagger.annotations.ApiOperation;
 
 /**
  * 通知绑定学员Controller
- * 
+ *
  * @author ruoyi
  * @date 2021-12-16
  */
@@ -85,5 +85,14 @@ public class InformUserController extends BaseController {
         return toAjax(iInformUserService.updateByEditBo(bo) ? 1 : 0);
     }
 
+    @ApiOperation("标记全部已读")
+    @Log(title = "标记全部已读", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateAllRead")
+    public AjaxResult<Void> updateAllRead(@RequestBody InformUserEditBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iInformUserService.updateAllRead(bo) ? 1 : 0);
+    }
+
 
 }

+ 57 - 4
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -8,6 +8,8 @@ import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
+import com.zhongzheng.modules.course.vo.CourseEducationTypeVo;
 import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
@@ -42,6 +44,8 @@ public class OrderController extends BaseController {
 
     private final WxTokenService wxTokenService;
 
+    private final ICourseEducationTypeService iCourseEducationTypeService;
+
     /**
      * 查询订单列表
      */
@@ -71,7 +75,7 @@ public class OrderController extends BaseController {
      */
     @ApiOperation("修改订单商品")
     @Log(title = "订单商品", businessType = BusinessType.UPDATE)
-    @PostMapping("editOrderGood")
+    @PostMapping("/editOrderGood")
     public AjaxResult<Void> editOrderGood(@RequestBody OrderGoodsEditBo bo) {
         return toAjax(iOrderGoodsService.updateByEditBo(bo) ? 1 : 0);
     }
@@ -81,7 +85,7 @@ public class OrderController extends BaseController {
      */
     @ApiOperation("修改订单")
     @Log(title = "订单", businessType = BusinessType.UPDATE)
-    @PostMapping("edit")
+    @PostMapping("/edit")
     public AjaxResult<Void> edit(@RequestBody OrderEditBo bo) {
         return toAjax(iOrderService.updateByEditBo(bo) ? 1 : 0);
     }
@@ -90,7 +94,7 @@ public class OrderController extends BaseController {
      * 新增订单
      */
     @ApiOperation("新增小程序订单")
-    @PostMapping("placeSmallOrder")
+    @PostMapping("/placeSmallOrder")
     public AjaxResult add(@RequestBody OrderAddBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
@@ -98,10 +102,59 @@ public class OrderController extends BaseController {
     }
 
     @ApiOperation("继续支付小程序订单")
-    @PostMapping("resumeSmallOrder")
+    @PostMapping("/resumeSmallOrder")
     public AjaxResult resumeSmallOrder(@RequestBody OrderAddBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
         return AjaxResult.success(iOrderService.resumeSmallOrder(bo));
     }
+
+    /**
+     * 新增订单
+     */
+    @ApiOperation("新增PC网站订单")
+    @PostMapping("/placePcOrder")
+    public AjaxResult addPc(@RequestBody OrderAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iOrderService.placePcOrder(bo));
+    }
+
+    /**
+     * 支付轮询查看支付状态
+     */
+    @ApiOperation("查看支付状态")
+    @PreAuthorize("@ss.hasPermi('system:order:query')")
+    @GetMapping("/{orderSn}")
+    public AjaxResult<Integer> getOrderStatus(@PathVariable("orderSn" ) String orderSn) {
+        return AjaxResult.success(iOrderService.queryByOrderSn(orderSn));
+    }
+
+    @ApiOperation("继续支付PC订单")
+    @PostMapping("/resumePCOrder")
+    public AjaxResult resumePCOrder(@RequestBody OrderAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iOrderService.resumePcOrder(bo));
+    }
+
+    @ApiOperation("查询用户教育类型列表")
+    @GetMapping("/userEduList")
+    public TableDataInfo<CourseEducationTypeVo> userEduList(OrderGoodsQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        startPage();
+        List<CourseEducationTypeVo> list = iCourseEducationTypeService.selectUserEduList(loginUser.getUser().getUserId(),bo.getGoodsType());
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取订单商品详细信息
+     */
+    @ApiOperation("获取订单商品详细信息")
+    @PreAuthorize("@ss.hasPermi('system:goods:query')")
+    @GetMapping("/info")
+    public AjaxResult<OrderGoodsVo> getInfo(OrderGoodsQueryBo bo) {
+        return AjaxResult.success(iOrderGoodsService.selectDetail(bo));
+    }
+
 }

+ 13 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java

@@ -59,5 +59,18 @@ public class OrderGoodsRefundController extends BaseController {
         return AjaxResult.success(iOrderGoodsRefundService.placeRefundSmallOrder(bo));
     }
 
+    /**
+     * 查询订单商品退款列表
+     */
+    @ApiOperation("查询订单商品退款列表")
+    @PreAuthorize("@ss.hasPermi('system:refund:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderGoodsRefundVo> list(OrderGoodsRefundQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<OrderGoodsRefundVo> list = iOrderGoodsRefundService.selectList(bo);
+        return getDataTable(list);
+    }
 
 }

+ 110 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderInvoiceController.java

@@ -0,0 +1,110 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.web.service.WxTokenService;
+import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
+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.service.IOrderGoodsService;
+import com.zhongzheng.modules.order.service.IOrderInvoiceService;
+import com.zhongzheng.modules.order.vo.OrderGoodsVo;
+import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+import com.zhongzheng.modules.user.entity.ClientLoginUser;
+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 2022-03-28
+ */
+@Api(value = "订单发票控制器", tags = {"订单发票管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/order/invoice")
+public class OrderInvoiceController extends BaseController {
+
+    private final IOrderInvoiceService iOrderInvoiceService;
+
+    private final IOrderGoodsService iOrderGoodsService;
+
+    private final WxTokenService wxTokenService;
+
+    /**
+     * 查询订单发票列表
+     */
+    @ApiOperation("查询订单发票列表")
+    @PreAuthorize("@ss.hasPermi('system:invoice:list')")
+    @GetMapping("/list")
+    public TableDataInfo<OrderInvoiceVo> list(OrderInvoiceQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<OrderInvoiceVo> list = iOrderInvoiceService.selectList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取订单发票详细信息
+     */
+    @ApiOperation("获取订单发票详细信息")
+    @PreAuthorize("@ss.hasPermi('system:invoice:query')")
+    @GetMapping("/{invoiceId}")
+    public AjaxResult<OrderInvoiceVo> getInfo(@PathVariable("invoiceId" ) Long invoiceId) {
+        return AjaxResult.success(iOrderInvoiceService.queryById(invoiceId));
+    }
+
+    /**
+     * 新增订单发票
+     */
+    @ApiOperation("新增订单发票")
+    @PreAuthorize("@ss.hasPermi('system:invoice:add')")
+    @Log(title = "订单发票", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Void> add(@RequestBody OrderInvoiceAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iOrderInvoiceService.insertByAddBo(bo) ? 1 : 0);
+    }
+
+    @ApiOperation("查询可开发票订单列表")
+    @PreAuthorize("@ss.hasPermi('system:invoice:list')")
+    @GetMapping("/canInvoiceList")
+    public TableDataInfo<OrderGoodsVo> list(OrderGoodsQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<OrderGoodsVo> list = iOrderGoodsService.selectCanInvoiceList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 撤销订单发票
+     */
+    @ApiOperation("撤销订单发票")
+    @PreAuthorize("@ss.hasPermi('system:invoice:edit')")
+    @Log(title = "撤销订单发票", businessType = BusinessType.UPDATE)
+    @PostMapping("/cancel")
+    public AjaxResult<Void> cancel(@RequestBody OrderInvoiceEditBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        bo.setStatus(-1);
+        return toAjax(iOrderInvoiceService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+}

+ 9 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserController.java

@@ -106,4 +106,13 @@ public class UserController extends BaseController {
         bo.setUserId(loginUser.getUser().getUserId());
         return toAjax(iUserService.bindNewTel(bo)? 1 : 0);
     }
+
+
+    @ApiOperation("修改密码")
+    @PostMapping("/updatePwd")
+    public AjaxResult<Void> updatePwd(@RequestBody UserAppUpdatePwdBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iUserService.updatePwd(bo)? 1 : 0);
+    }
 }

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

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
 import com.zhongzheng.modules.user.domain.UserStudyRecord;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserStudyRecordService;
+import com.zhongzheng.modules.user.vo.SectionStudyRecordVo;
 import com.zhongzheng.modules.user.vo.UserStudyRecordVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -124,4 +125,13 @@ public class UserStudyRecordController extends BaseController {
         return AjaxResult.success(iUserStudyRecordService.menuAllList(bo));
     }
 
+    @ApiOperation("查询用户每天学习记录列表")
+    @GetMapping("/listUserRecord")
+    public TableDataInfo<SectionStudyRecordVo> listUserRecord(UserStudyRecordQueryBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<SectionStudyRecordVo> list = iUserStudyRecordService.listUserRecord(bo);
+        return getDataTable(list);
+    }
 }

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

@@ -50,7 +50,7 @@ spring:
                     enabled: true
                     # 慢SQL记录
                     log-slow-sql: true
-                    slow-sql-millis: 1000
+                    slow-sql-millis: 2500
                     merge-sql: true
                 wall:
                     config:

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

@@ -50,7 +50,7 @@ spring:
                     enabled: true
                     # 慢SQL记录
                     log-slow-sql: true
-                    slow-sql-millis: 1000
+                    slow-sql-millis: 400
                     merge-sql: true
                 wall:
                     config:

+ 1 - 1
zhongzheng-common/pom.xml

@@ -158,7 +158,7 @@
         <dependency>
             <groupId>com.tencentcloudapi</groupId>
             <artifactId>tencentcloud-sdk-java</artifactId>
-            <version>3.1.293</version>
+            <version>3.1.479</version>
         </dependency>
 
         <dependency>

+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java

@@ -243,7 +243,7 @@ public class RedisCache
      */
     public boolean lock(RedisLockEntity redisLockEntity) {
         boolean locked = false;
-        int tryCount = 3;
+        int tryCount = 10;
         while (!locked && tryCount > 0) {
             locked = redisTemplate.opsForValue().setIfAbsent(redisLockEntity.getLockKey(), redisLockEntity.getRequestId(), 5, TimeUnit.SECONDS);
             tryCount--;

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

@@ -202,6 +202,16 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return localDate+randomNumeric;
     }
 
+    public static String getDateInputOrderSn()
+    {
+        return "LD"+getDateOrderSn();
+    }
+
+    public static String getPayOrderSn()
+    {
+        return "P"+getDateOrderSn();
+    }
+
     public static String secToTime(int time) {
         String timeStr = null;
         int hour = 0;

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

@@ -3,7 +3,9 @@ package com.zhongzheng.common.utils;
 import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
 import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
 import com.aliyun.teaopenapi.models.Config;
+import io.micrometer.core.lang.NonNull;
 
+import java.util.Iterator;
 import java.util.Random;
 
 public class ToolsUtils {
@@ -20,4 +22,18 @@ public class ToolsUtils {
         }
        return result;
     }
+
+    public static String join(@NonNull CharSequence delimiter, @NonNull Iterable tokens) {
+        final Iterator<?> it = tokens.iterator();
+        if (!it.hasNext()) {
+            return "";
+        }
+        final StringBuilder sb = new StringBuilder();
+        sb.append(it.next());
+        while (it.hasNext()) {
+            sb.append(delimiter);
+            sb.append(it.next());
+        }
+        return sb.toString();
+    }
 }

+ 24 - 5
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/file/FileUtils.java

@@ -2,16 +2,18 @@ package com.zhongzheng.common.utils.file;
 
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.config.RuoYiConfig;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.util.UUID;
 
 /**
  * 文件处理工具类
- * 
+ *
  * @author zhongzheng
  */
 public class FileUtils extends org.apache.commons.io.FileUtils
@@ -20,7 +22,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils
 
     /**
      * 输出指定文件的byte数组
-     * 
+     *
      * @param filePath 文件路径
      * @param os 输出流
      * @return
@@ -76,7 +78,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils
 
     /**
      * 删除文件
-     * 
+     *
      * @param filePath 文件
      * @return
      */
@@ -95,7 +97,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils
 
     /**
      * 文件名称验证
-     * 
+     *
      * @param filename 文件名称
      * @return true 正常 false 非法
      */
@@ -130,7 +132,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils
 
     /**
      * 下载文件名重新编码
-     * 
+     *
      * @param request 请求对象
      * @param fileName 文件名
      * @return 编码后的文件名
@@ -196,4 +198,21 @@ public class FileUtils extends org.apache.commons.io.FileUtils
         String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
         return encode.replaceAll("\\+", "%20");
     }
+
+    public static String encodingZipFilename(String prefix)
+    {
+        String  filename = prefix+"_"+ UUID.randomUUID().toString() + ".zip";
+        return filename;
+    }
+
+    public static String getZipAbsoluteFile(String filename)
+    {
+        String downloadPath = RuoYiConfig.getDownloadPath() + filename;
+        File desc = new File(downloadPath);
+        if (!desc.getParentFile().exists())
+        {
+            desc.getParentFile().mkdirs();
+        }
+        return downloadPath;
+    }
 }

+ 16 - 9
zhongzheng-framework/src/main/java/com/zhongzheng/framework/aspectj/DataScopeAspect.java

@@ -16,6 +16,7 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Method;
@@ -64,6 +65,9 @@ public class DataScopeAspect
      */
     public static final String DATA_SCOPE = "dataScope";
 
+    @Value("${zhongzheng.name}")
+    private String applicationName;
+
     // 配置织入点
     @Pointcut("@annotation(com.zhongzheng.common.annotation.DataScope)")
     public void dataScopePointCut()
@@ -84,16 +88,19 @@ public class DataScopeAspect
         {
             return;
         }
-        // 获取当前的用户
-        LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
-        if (Validator.isNotNull(loginUser))
-        {
-            SysUser currentUser = loginUser.getUser();
-            // 如果是超级管理员,则不过滤数据
-            if (Validator.isNotNull(currentUser) && !currentUser.isAdmin())
+        //后台
+        if(applicationName.equals("zhongzheng")){
+            // 获取当前的用户
+            LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
+            if (Validator.isNotNull(loginUser))
             {
-                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
-                        controllerDataScope.userAlias(),controllerDataScope.businessAlias());
+                SysUser currentUser = loginUser.getUser();
+                // 如果是超级管理员,则不过滤数据
+                if (Validator.isNotNull(currentUser) && !currentUser.isAdmin())
+                {
+                    dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
+                            controllerDataScope.userAlias(),controllerDataScope.businessAlias());
+                }
             }
         }
     }

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

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.enums.UserStatus;
 import com.zhongzheng.common.exception.BaseException;
@@ -25,13 +26,18 @@ import com.zhongzheng.modules.collect.domain.CollectNote;
 import com.zhongzheng.modules.collect.mapper.CollectBankMapper;
 import com.zhongzheng.modules.collect.mapper.CollectCourseMapper;
 import com.zhongzheng.modules.collect.mapper.CollectNoteMapper;
+import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.course.bo.CourseQueryBo;
+import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.domain.MajorCategory;
 import com.zhongzheng.modules.course.service.ICourseService;
+import com.zhongzheng.modules.course.service.ICourseSubjectService;
+import com.zhongzheng.modules.exam.domain.ExamKnowledge;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
+import com.zhongzheng.modules.order.domain.OrderBillGoods;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserBankRecord;
@@ -101,7 +107,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     private RedisCache redisCache;
 
     @Autowired
-    private ICourseService iCourseService;
+    private ICourseSubjectService iCourseSubjectService;
 
 
     @Override
@@ -248,24 +254,42 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         validEntityBeforeUpdate(update);
         update.setUpdateTime(DateUtils.getNowTime());
         UserUpdateAddBo userUpdateAddBo = new UserUpdateAddBo();
-
+        Boolean isUpdateInfo = false;
+        UserVo oldUser = queryById(bo.getUserId());
         if (!StringUtils.isBlank(update.getRealname())){
-            userUpdateAddBo.setUserId(bo.getUserId());
-            userUpdateAddBo.setRealname(update.getRealname());
+            if(!oldUser.getRealname().equals(update.getRealname())){
+                userUpdateAddBo.setUserId(bo.getUserId());
+                userUpdateAddBo.setRealname(update.getRealname());
+                isUpdateInfo = true;
+            }
         }
         if (!StringUtils.isBlank(update.getTelphone())){
-            userUpdateAddBo.setUserId(bo.getUserId());
-            userUpdateAddBo.setTelphone(update.getTelphone());
+            //手机号变更
+            if(!oldUser.getTelphone().equals(update.getTelphone())){
+                User user = getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getTelphone,update.getTelphone()).ne(User::getUserId,update.getUserId()).last("limit 1"));
+                if(Validator.isNotNull(user)){
+                    throw new CustomException("该手机号已注册");
+                }
+                userUpdateAddBo.setUserId(bo.getUserId());
+                userUpdateAddBo.setTelphone(update.getTelphone());
+                isUpdateInfo = true;
+            }
+
         }
         if (!StringUtils.isBlank(update.getIdCard())){
-            Long list = iClassGradeUserService.selectList(update);
-           if (list > 0){
-               throw new IllegalAccessException("身份证已经被使用注册为学员");
-           }
-            userUpdateAddBo.setUserId(bo.getUserId());
-            userUpdateAddBo.setIdCard(update.getIdCard());
+            //手机号变更
+            if(!oldUser.getIdCard().equals(update.getIdCard())){
+                Long list = iClassGradeUserService.selectList(update);
+                if (list > 0){
+                    throw new IllegalAccessException("身份证已经被使用注册为学员");
+                }
+                userUpdateAddBo.setUserId(bo.getUserId());
+                userUpdateAddBo.setIdCard(update.getIdCard());
+                isUpdateInfo = true;
+            }
         }
-        if (userUpdateAddBo != null) {
+        if (isUpdateInfo) {
             userUpdateService.insertByAddBo(userUpdateAddBo);
         }
         return this.updateById(update);
@@ -547,6 +571,153 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return true;
     }
 
+    @Override
+    public Map<String, Object> importUser(List<UserImportAddBo> list, String importNo) {
+        if (CollectionUtils.isEmpty(list)) {
+            throw new IllegalArgumentException("请勿导入空表格");
+        }
+        List<UserImportAddBo> errorList = new ArrayList<>();
+        List<UserImportAddBo> successList = new ArrayList<>();
+        if(Validator.isEmpty(importNo)){
+            importNo = ServletUtils.getEncoded("IMPORT");
+        }
+        for (UserImportAddBo itemImport : list) {
+            if(Validator.isEmpty(itemImport.getTelphone())||itemImport.getTelphone().length()!=11){
+                itemImport.setCause("手机号不能为空或者格式不对");
+                errorList.add(itemImport);
+                continue;
+            }
+            if(Validator.isEmpty(itemImport.getIdCard())){
+                itemImport.setCause("身份证不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            if(Validator.isEmpty(itemImport.getRealname())){
+                itemImport.setCause("真实姓名不能为空");
+                errorList.add(itemImport);
+                continue;
+            }
+            //科目
+            if(Validator.isNotEmpty(itemImport.getSubjectNames())){
+                List<String> SubjectList = Arrays.asList(itemImport.getSubjectNames().split(","));
+                List<Long> sIdList = new ArrayList<>();
+                for (String subject : SubjectList) {
+                    System.out.println(subject);
+                    Long subjectId = findSubjectId(subject);
+                    if(Validator.isNotEmpty(subjectId)){
+                        //科目存在
+                        sIdList.add(subjectId);
+
+                    }
+                }
+                itemImport.setSubjectIds(ToolsUtils.join(",", sIdList));
+            }
+            User user = getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getTelphone,itemImport.getTelphone()).last("limit 1"));
+            if(Validator.isNotNull(user)){
+                //手机号已存在
+                itemImport.setUserId(user.getUserId());
+                itemImport.setImportNo(importNo);
+                itemImport.setStudentCode(user.getUserAccount());
+                itemImport.setRealname(user.getRealname());
+                itemImport.setIdCard(user.getIdCard());
+                successList.add(itemImport);
+                continue;
+            }
+            User user2 = getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getIdCard,itemImport.getIdCard()).last("limit 1"));
+            if(Validator.isNotNull(user2)){
+                //身份证已存在
+                itemImport.setUserId(user2.getUserId());
+                itemImport.setImportNo(importNo);
+                itemImport.setStudentCode(user2.getUserAccount());
+                itemImport.setRealname(user2.getRealname());
+                itemImport.setTelphone(user2.getTelphone());
+                successList.add(itemImport);
+                continue;
+            }
+            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);
+            inertData.setIdCard(itemImport.getIdCard());
+            inertData.setRealname(itemImport.getRealname());
+            inertData.setStatus(1);
+            inertData.setRegisterPlat("3");
+            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));
+            inertData.setImportNo(importNo); //设置导入编号 一个导入页面同时导入多次算一个编号
+            if(!save(inertData)){
+                itemImport.setCause("注册失败");
+                errorList.add(itemImport);
+                continue;
+            }
+            iSmsService.sendPwdSms(itemImport.getTelphone(),pwd);
+            itemImport.setUserId(inertData.getUserId());
+            itemImport.setImportNo(importNo);
+            itemImport.setStudentCode(inertData.getUserAccount());
+            successList.add(itemImport);
+        }
+        Map<String,Object> resultMap = new HashMap<>();
+        resultMap.put("errorList",errorList);
+        resultMap.put("successList",successList);
+        resultMap.put("importNo",importNo);
+        return resultMap;
+    }
+
+    @Override
+    public Boolean updatePwd(UserAppUpdatePwdBo bo) {
+        LambdaQueryWrapper<User> queryWrapper =new LambdaQueryWrapper<User>();
+        User user = getOne(new LambdaQueryWrapper<User>().eq(User::getUserId, bo.getUserId()));
+        if(Validator.isEmpty(user)){
+            throw new BaseException("用户不存在");
+        }
+        if (!SecurityUtils.matchesPassword(bo.getOldPwd(),user.getPassword() ))
+        {
+            throw new BaseException("密码错误");
+        }
+        if (Validator.isEmpty(bo.getNewPwd()))
+        {
+            throw new BaseException("新密码格式错误");
+        }
+        user.setPassword(SecurityUtils.encryptPassword(bo.getNewPwd()));
+        user.setUpdateTime(DateUtils.getNowTime());
+        updateById(user);
+        return true;
+    }
+
+    private Long findSubjectId(String subject){
+        if(subject!=null){
+            String key = "SUB_"+subject;
+            Long value = redisCache.getCacheObject(key);
+            if(value!=null){
+                if(value==0L){
+                    return null;
+                }
+                return value;
+            }
+            CourseSubject info = iCourseSubjectService.getOne(new LambdaQueryWrapper<CourseSubject>()
+                    .eq(CourseSubject::getSubjectName,subject).eq(CourseSubject::getStatus,1).last("limit 1"));
+            if(info!=null){
+                redisCache.setCacheObject(key,info.getId(),3, TimeUnit.MINUTES);//3分钟
+                return info.getId();
+            }else{
+                redisCache.setCacheObject(key,0L,3, TimeUnit.MINUTES);//3分钟
+            }
+        }
+        return null;
+    }
+
+
     @Override
     public Boolean forgetUser(UserAppForgetBo bo) {
         if(bo.getTel()==null){
@@ -726,6 +897,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     }
 
 
+
+
     /**
      * 获取当前月第一天
      * @param month

+ 53 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendAddBo.java

@@ -0,0 +1,53 @@
+package com.zhongzheng.modules.activity.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品推荐添加对象 activity_recommend
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@ApiModel("商品推荐添加对象")
+public class ActivityRecommendAddBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String name;
+    /** 1课程 2题库 */
+    @ApiModelProperty("1课程 2题库")
+    private Integer type;
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 1小程序 2PC网站 */
+    @ApiModelProperty("1小程序 2PC网站")
+    private Integer platform;
+    @ApiModelProperty("商品列表")
+    private List<ActivityRecommendGoodsAddBo> goodsList;
+    /** 排序 */
+    @ApiModelProperty("排序")
+    private Integer sort;
+}

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendEditBo.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.activity.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品推荐编辑对象 activity_recommend
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@ApiModel("商品推荐编辑对象")
+public class ActivityRecommendEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long recommendId;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private String name;
+
+    /** 1课程 2题库 */
+    @ApiModelProperty("1课程 2题库")
+    private Integer type;
+
+    /** 教育类型id */
+    @ApiModelProperty("教育类型id")
+    private Long educationTypeId;
+
+    /** 业务层次id */
+    @ApiModelProperty("业务层次id")
+    private Long businessId;
+
+    /** 项目ID */
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+
+
+    /** 1有效 0无效 */
+    @ApiModelProperty("1有效 0无效")
+    private Integer status;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+    /** 1小程序 2PC网站 */
+    @ApiModelProperty("1小程序 2PC网站")
+    private Integer platform;
+    @ApiModelProperty("商品列表")
+    private List<ActivityRecommendGoodsAddBo> goodsList;
+    /** 排序 */
+    @ApiModelProperty("排序")
+    private Integer sort;
+}

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsAddBo.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.activity.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 推荐板块商品添加对象 activity_recommend_goods
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@ApiModel("推荐板块商品添加对象")
+public class ActivityRecommendGoodsAddBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long recommendId;
+    /** 商品id */
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 排序 */
+    @ApiModelProperty("排序")
+    private Integer sort;
+}

+ 41 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsEditBo.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.modules.activity.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 推荐板块商品编辑对象 activity_recommend_goods
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@ApiModel("推荐板块商品编辑对象")
+public class ActivityRecommendGoodsEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long recommendId;
+
+    /** 商品id */
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+
+    /** 排序 */
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+}

+ 48 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendGoodsQueryBo.java

@@ -0,0 +1,48 @@
+package com.zhongzheng.modules.activity.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;
+
+/**
+ * 推荐板块商品分页查询对象 activity_recommend_goods
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("推荐板块商品分页查询对象")
+public class ActivityRecommendGoodsQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** $column.columnComment */
+	@ApiModelProperty("$column.columnComment")
+	private Long recommendId;
+	/** 商品id */
+	@ApiModelProperty("商品id")
+	private Long goodsId;
+	/** 排序 */
+	@ApiModelProperty("排序")
+	private Integer sort;
+}

+ 60 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityRecommendQueryBo.java

@@ -0,0 +1,60 @@
+package com.zhongzheng.modules.activity.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;
+
+/**
+ * 商品推荐分页查询对象 activity_recommend
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("商品推荐分页查询对象")
+public class ActivityRecommendQueryBo extends BaseEntity {
+	private Long recommendId;
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** $column.columnComment */
+	@ApiModelProperty("$column.columnComment")
+	private String name;
+	/** 1课程 2题库 */
+	@ApiModelProperty("1课程 2题库")
+	private Integer type;
+	/** 教育类型id */
+	@ApiModelProperty("教育类型id")
+	private Long educationTypeId;
+	/** 业务层次id */
+	@ApiModelProperty("业务层次id")
+	private Long businessId;
+	/** 项目ID */
+	@ApiModelProperty("项目ID")
+	private Long projectId;
+	/** 1有效 0无效 */
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 1小程序 2PC网站 */
+	@ApiModelProperty("1小程序 2PC网站")
+	private Integer platform;
+}

+ 51 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/domain/ActivityRecommend.java

@@ -0,0 +1,51 @@
+package com.zhongzheng.modules.activity.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;
+
+/**
+ * 商品推荐对象 activity_recommend
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("activity_recommend")
+public class ActivityRecommend implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "recommend_id")
+    private Long recommendId;
+    /** $column.columnComment */
+    private String name;
+    /** 1课程 2题库 */
+    private Integer type;
+    /** 教育类型id */
+    private Long educationTypeId;
+    /** 业务层次id */
+    private Long businessId;
+    /** 项目ID */
+    private Long projectId;
+    /** 1有效 0无效 */
+    private Integer status;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 1小程序 2PC网站 */
+    private Integer platform;
+    /** 排序 */
+    private Integer sort;
+}

+ 41 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/domain/ActivityRecommendGoods.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.modules.activity.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;
+
+/**
+ * 推荐板块商品对象 activity_recommend_goods
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("activity_recommend_goods")
+public class ActivityRecommendGoods implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** $column.columnComment */
+    private Long recommendId;
+    /** 商品id */
+    private Long goodsId;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 排序 */
+    private Integer sort;
+}

+ 16 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/mapper/ActivityRecommendGoodsMapper.java

@@ -0,0 +1,16 @@
+package com.zhongzheng.modules.activity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsEditBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommendGoods;
+
+/**
+ * 推荐板块商品Mapper接口
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+public interface ActivityRecommendGoodsMapper extends BaseMapper<ActivityRecommendGoods> {
+
+
+}

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/mapper/ActivityRecommendMapper.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.activity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommend;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+
+import java.util.List;
+
+/**
+ * 商品推荐Mapper接口
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+public interface ActivityRecommendMapper extends BaseMapper<ActivityRecommend> {
+    List<ActivityRecommendVo> selectList(ActivityRecommendQueryBo bo);
+
+    ActivityRecommendVo getDetail(ActivityRecommendQueryBo bo);
+}

+ 54 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/IActivityRecommendGoodsService.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.modules.activity.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsQueryBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommendGoods;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendGoodsVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 推荐板块商品Service接口
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+public interface IActivityRecommendGoodsService extends IService<ActivityRecommendGoods> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	ActivityRecommendGoodsVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<ActivityRecommendGoodsVo> queryList(ActivityRecommendGoodsQueryBo bo);
+
+
+
+	/**
+	 * 根据新增业务对象插入推荐板块商品
+	 * @param bo 推荐板块商品新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(ActivityRecommendGoodsAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改推荐板块商品
+	 * @param bo 推荐板块商品编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(ActivityRecommendGoodsEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 56 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/IActivityRecommendService.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.modules.activity.service;
+
+import com.zhongzheng.modules.activity.bo.ActivityRecommendAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommend;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 商品推荐Service接口
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+public interface IActivityRecommendService extends IService<ActivityRecommend> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	ActivityRecommendVo queryById(Long recommendId);
+
+	/**
+	 * 查询列表
+	 */
+	List<ActivityRecommendVo> queryList(ActivityRecommendQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入商品推荐
+	 * @param bo 商品推荐新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(ActivityRecommendAddBo bo);
+
+	List<ActivityRecommendVo> selectList(ActivityRecommendQueryBo bo);
+
+	ActivityRecommendVo getDetail(ActivityRecommendQueryBo bo);
+
+	/**
+	 * 根据编辑业务对象修改商品推荐
+	 * @param bo 商品推荐编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(ActivityRecommendEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 105 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendGoodsServiceImpl.java

@@ -0,0 +1,105 @@
+package com.zhongzheng.modules.activity.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsQueryBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommendGoods;
+import com.zhongzheng.modules.activity.mapper.ActivityRecommendGoodsMapper;
+import com.zhongzheng.modules.activity.service.IActivityRecommendGoodsService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendGoodsVo;
+import com.zhongzheng.modules.course.domain.CourseChapterSection;
+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 java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 推荐板块商品Service业务层处理
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Service
+public class ActivityRecommendGoodsServiceImpl extends ServiceImpl<ActivityRecommendGoodsMapper, ActivityRecommendGoods> implements IActivityRecommendGoodsService {
+
+    @Override
+    public ActivityRecommendGoodsVo queryById(Long id){
+        ActivityRecommendGoods db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, ActivityRecommendGoodsVo.class);
+    }
+
+    @Override
+    public List<ActivityRecommendGoodsVo> queryList(ActivityRecommendGoodsQueryBo bo) {
+        LambdaQueryWrapper<ActivityRecommendGoods> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getRecommendId() != null, ActivityRecommendGoods::getRecommendId, bo.getRecommendId());
+        lqw.eq(bo.getGoodsId() != null, ActivityRecommendGoods::getGoodsId, bo.getGoodsId());
+        lqw.eq(bo.getSort() != null, ActivityRecommendGoods::getSort, bo.getSort());
+        return entity2Vo(this.list(lqw));
+    }
+
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<ActivityRecommendGoodsVo> entity2Vo(Collection<ActivityRecommendGoods> collection) {
+        List<ActivityRecommendGoodsVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, ActivityRecommendGoodsVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<ActivityRecommendGoods> page = (Page<ActivityRecommendGoods>)collection;
+            Page<ActivityRecommendGoodsVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(ActivityRecommendGoodsAddBo bo) {
+        ActivityRecommendGoods add = BeanUtil.toBean(bo, ActivityRecommendGoods.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(ActivityRecommendGoodsEditBo bo) {
+        ActivityRecommendGoods update = BeanUtil.toBean(bo, ActivityRecommendGoods.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(ActivityRecommendGoods entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 154 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/service/impl/ActivityRecommendServiceImpl.java

@@ -0,0 +1,154 @@
+package com.zhongzheng.modules.activity.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendEditBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsAddBo;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendQueryBo;
+import com.zhongzheng.modules.activity.domain.ActivityRecommend;
+import com.zhongzheng.modules.activity.domain.ActivityRecommendGoods;
+import com.zhongzheng.modules.activity.mapper.ActivityRecommendMapper;
+import com.zhongzheng.modules.activity.service.IActivityRecommendGoodsService;
+import com.zhongzheng.modules.activity.service.IActivityRecommendService;
+import com.zhongzheng.modules.activity.vo.ActivityRecommendVo;
+import com.zhongzheng.modules.goods.bo.GoodsCourseAddBo;
+import com.zhongzheng.modules.goods.domain.GoodsAttached;
+import com.zhongzheng.modules.goods.domain.GoodsCourse;
+import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
+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.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 商品推荐Service业务层处理
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Service
+public class ActivityRecommendServiceImpl extends ServiceImpl<ActivityRecommendMapper, ActivityRecommend> implements IActivityRecommendService {
+
+    @Autowired
+    private IActivityRecommendGoodsService iActivityRecommendGoodsService;
+
+    @Override
+    public ActivityRecommendVo queryById(Long recommendId){
+        ActivityRecommend db = this.baseMapper.selectById(recommendId);
+        return BeanUtil.toBean(db, ActivityRecommendVo.class);
+    }
+
+    @Override
+    public List<ActivityRecommendVo> queryList(ActivityRecommendQueryBo bo) {
+        LambdaQueryWrapper<ActivityRecommend> lqw = Wrappers.lambdaQuery();
+        lqw.like(StrUtil.isNotBlank(bo.getName()), ActivityRecommend::getName, bo.getName());
+        lqw.eq(bo.getType() != null, ActivityRecommend::getType, bo.getType());
+        lqw.eq(bo.getEducationTypeId() != null, ActivityRecommend::getEducationTypeId, bo.getEducationTypeId());
+        lqw.eq(bo.getBusinessId() != null, ActivityRecommend::getBusinessId, bo.getBusinessId());
+        lqw.eq(bo.getProjectId() != null, ActivityRecommend::getProjectId, bo.getProjectId());
+        lqw.eq(bo.getStatus() != null, ActivityRecommend::getStatus, bo.getStatus());
+        lqw.eq(bo.getPlatform() != null, ActivityRecommend::getPlatform, bo.getPlatform());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<ActivityRecommendVo> entity2Vo(Collection<ActivityRecommend> collection) {
+        List<ActivityRecommendVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, ActivityRecommendVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<ActivityRecommend> page = (Page<ActivityRecommend>)collection;
+            Page<ActivityRecommendVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByAddBo(ActivityRecommendAddBo bo) {
+        ActivityRecommend add = BeanUtil.toBean(bo, ActivityRecommend.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        Boolean rs =  this.save(add);
+        if(bo.getGoodsList()!=null){
+            Collection<ActivityRecommendGoods> coll = new HashSet<>();
+            for(int i=0;i<bo.getGoodsList().size();i++){
+                ActivityRecommendGoodsAddBo item = bo.getGoodsList().get(i);
+                ActivityRecommendGoods addItem = BeanUtil.toBean(item, ActivityRecommendGoods.class);
+                addItem.setRecommendId(add.getRecommendId());
+                coll.add(addItem);
+            }
+            iActivityRecommendGoodsService.saveBatch(coll);
+        }
+        return rs;
+    }
+
+    @Override
+    public List<ActivityRecommendVo> selectList(ActivityRecommendQueryBo bo) {
+        return baseMapper.selectList(bo);
+    }
+
+    @Override
+    public ActivityRecommendVo getDetail(ActivityRecommendQueryBo bo) {
+        return baseMapper.getDetail(bo);
+    }
+
+    @Override
+    public Boolean updateByEditBo(ActivityRecommendEditBo bo) {
+        ActivityRecommend update = BeanUtil.toBean(bo, ActivityRecommend.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        if(bo.getGoodsList()!=null){
+            iActivityRecommendGoodsService.remove(new LambdaQueryWrapper<ActivityRecommendGoods>().eq(ActivityRecommendGoods::getRecommendId, bo.getRecommendId()));
+            Collection<ActivityRecommendGoods> coll = new HashSet<>();
+            for(int i=0;i<bo.getGoodsList().size();i++){
+                ActivityRecommendGoodsAddBo item = bo.getGoodsList().get(i);
+                ActivityRecommendGoods addItem = BeanUtil.toBean(item, ActivityRecommendGoods.class);
+                addItem.setRecommendId(bo.getRecommendId());
+                addItem.setCreateTime(DateUtils.getNowTime());
+                addItem.setUpdateTime(DateUtils.getNowTime());
+                coll.add(addItem);
+            }
+            iActivityRecommendGoodsService.saveBatch(coll);
+        }
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(ActivityRecommend entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/vo/ActivityRecommendGoodsVo.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.activity.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 2022-04-13
+ */
+@Data
+@ApiModel("推荐板块商品视图对象")
+public class ActivityRecommendGoodsVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** $column.columnComment */
+	@Excel(name = "${comment}" , readConverterExp = "$column.readConverterExp()")
+	@ApiModelProperty("$column.columnComment")
+	private Long recommendId;
+	/** 商品id */
+	@Excel(name = "商品id")
+	@ApiModelProperty("商品id")
+	private Long goodsId;
+	/** 排序 */
+	@Excel(name = "排序")
+	@ApiModelProperty("排序")
+	private Integer sort;
+	@ApiModelProperty("商品名")
+	private String goodsName;
+	/** 标准价格 */
+	@Excel(name = "标准价格")
+	@ApiModelProperty("标准价格")
+	private BigDecimal standPrice;
+	@ApiModelProperty("商品编码")
+	private String code;
+	/** 年份 */
+	@Excel(name = "年份")
+	@ApiModelProperty("年份")
+	private Long year;
+	/** 封面地址 */
+	@Excel(name = "封面地址")
+	@ApiModelProperty("封面地址")
+	private String coverUrl;
+}

+ 68 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/vo/ActivityRecommendVo.java

@@ -0,0 +1,68 @@
+package com.zhongzheng.modules.activity.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhongzheng.modules.activity.bo.ActivityRecommendGoodsAddBo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 商品推荐视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2022-04-13
+ */
+@Data
+@ApiModel("商品推荐视图对象")
+public class ActivityRecommendVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long recommendId;
+
+	/** $column.columnComment */
+	@Excel(name = "${comment}" , readConverterExp = "$column.readConverterExp()")
+	@ApiModelProperty("$column.columnComment")
+	private String name;
+	/** 1课程 2题库 */
+	@Excel(name = "1课程 2题库")
+	@ApiModelProperty("1课程 2题库")
+	private Integer type;
+	/** 教育类型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有效 0无效 */
+	@Excel(name = "1有效 0无效")
+	@ApiModelProperty("1有效 0无效")
+	private Integer status;
+	/** 1小程序 2PC网站 */
+	@Excel(name = "1小程序 2PC网站")
+	@ApiModelProperty("1小程序 2PC网站")
+	private Integer platform;
+	/** 排序 */
+	@Excel(name = "排序")
+	@ApiModelProperty("排序")
+	private Integer sort;
+	@ApiModelProperty("教育名称")
+	private String educationName;
+	@ApiModelProperty("项目名称")
+	private String projectName;
+	@ApiModelProperty("业务名称")
+	private String businessName;
+	@ApiModelProperty("商品列表")
+	private List<ActivityRecommendGoodsVo> goodsList;
+}

+ 8 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/OssService.java

@@ -4,12 +4,15 @@ package com.zhongzheng.modules.alioss.service;
 
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.vo.ResultBean;
+import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.util.List;
 import java.util.Map;
+import java.util.zip.ZipOutputStream;
 
 public interface OssService {
     ResultBean getPolicy(OssRequest ossRequest);
@@ -20,7 +23,11 @@ public interface OssService {
 
     String uploadInputStream(InputStream inputStream,Integer imageStatus) throws Exception;
 
-    String uploadBase64(String fileStr);
+    String uploadBase64(String fileStr,OssRequest ossRequest);
 
     void closeClient();
+
+    void zipPeopleDownload(ClassPeriodStudentExportVo vo, ZipOutputStream outStream);
+
+    void zipCommonDownload(List<String> fileList, ZipOutputStream zipOut, String dir);
 }

+ 195 - 59
zhongzheng-system/src/main/java/com/zhongzheng/modules/alioss/service/impl/OssServiceImpl.java

@@ -16,6 +16,8 @@ import com.zhongzheng.modules.alioss.bo.OssCallbackParam;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.OssService;
 import com.zhongzheng.modules.alioss.vo.ResultBean;
+import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
+import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
 import org.apache.commons.io.IOUtils;
 import org.apache.xmlbeans.impl.values.XmlValueNotNillableException;
 import org.slf4j.Logger;
@@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Base64Utils;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 import sun.misc.BASE64Decoder;
 
@@ -35,6 +38,11 @@ import java.io.*;
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import static jdk.nashorn.internal.objects.NativeError.getFileName;
 
 @Service
 public class OssServiceImpl implements OssService {
@@ -59,13 +67,16 @@ public class OssServiceImpl implements OssService {
     @Autowired
     private OSSClient ossClient;
 
+    @Autowired
+    private IUserStudyRecordPhotoService iUserStudyRecordPhotoService;
+
 
     @Override
     public ResultBean getPolicy(OssRequest ossRequest) {
         JSONObject resultBean = new JSONObject();
         // 存储目录
 
-        String dir = ALIYUN_OSS_DIR_PREFIX+ this.generateRandomFilename(ossRequest);
+        String dir = ALIYUN_OSS_DIR_PREFIX + this.generateRandomDirname(ossRequest);
         // 签名有效期
         long expireEndTime = System.currentTimeMillis() + ALIYUN_OSS_EXPIRE * 1000;
         Date expiration = new Date(expireEndTime);
@@ -90,8 +101,8 @@ public class OssServiceImpl implements OssService {
             String now = String.valueOf(System.currentTimeMillis()) + "_";
             Random rand = new Random();
             int random = rand.nextInt();
-            resultBean.set("accessid",ossClient.getCredentialsProvider().getCredentials().getAccessKeyId()).set("policy",policy).set("signature",signature)
-            .set("dir",dir+"/"+now + String.valueOf(random > 0 ? random : (-1) * random)).set("expire",String.valueOf(expireEndTime / 1000)).set("callback",callbackData).set("host",action);
+            resultBean.set("accessid", ossClient.getCredentialsProvider().getCredentials().getAccessKeyId()).set("policy", policy).set("signature", signature)
+                    .set("dir", dir + "/" + now + String.valueOf(random > 0 ? random : (-1) * random)).set("expire", String.valueOf(expireEndTime / 1000)).set("callback", callbackData).set("host", action);
             // 返回结果
         } catch (Exception e) {
             LOGGER.error("签名生成失败", e);
@@ -101,13 +112,65 @@ public class OssServiceImpl implements OssService {
         return new ResultBean(resultBean);
     }
 
+    //生成存储目录
+    public String generateRandomDirname(OssRequest ossRequest) {
+        String prefixName = "";
+        if (Validator.isNotEmpty(ossRequest.getUserId()) && ossRequest.getUserId().longValue() > 0) {
+            prefixName = prefixName + ossRequest.getUserId();
+        }
+        if (Validator.isNotEmpty(ossRequest.getGradeId()) && ossRequest.getGradeId().longValue() > 0) {
+            prefixName = prefixName + "/" + ossRequest.getGradeId();
+        }
+        String RandomFilename = "";
+        //生成随机数
+        Random rand = new Random();
+        int random = rand.nextInt();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        Calendar calCurrent = Calendar.getInstance();
+        int intDay = calCurrent.get(Calendar.DATE);
+        int intMonth = calCurrent.get(Calendar.MONTH) + 1;
+        int intYear = calCurrent.get(Calendar.YEAR);
+        String now = String.valueOf(System.currentTimeMillis());
 
+        RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
+        switch (ossRequest.getImageStatus()) {
+            case 0:
+                RandomFilename = "avatar" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 1:
+                RandomFilename = "IDNumber" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 2:
+                RandomFilename = "QuestionBank" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 3:
+                RandomFilename = "guide" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 4:
+                RandomFilename = "advertising" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 5:
+                RandomFilename = "IDCard" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 6:
+                RandomFilename = "file" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+            case 7:
+                RandomFilename = "certificate" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()) + "/" + now));
+                break;
+        }
+
+        return RandomFilename;
+    }
+
+
+    //生成存储文件名
     public String generateRandomFilename(OssRequest ossRequest) {
         String prefixName = "";
-        if(Validator.isNotEmpty(ossRequest.getUserId())&&ossRequest.getUserId().longValue()>0){
+        if (Validator.isNotEmpty(ossRequest.getUserId()) && ossRequest.getUserId().longValue() > 0) {
             prefixName = prefixName + ossRequest.getUserId();
         }
-        if(Validator.isNotEmpty(ossRequest.getGradeId())&&ossRequest.getGradeId().longValue()>0){
+        if (Validator.isNotEmpty(ossRequest.getGradeId()) && ossRequest.getGradeId().longValue() > 0) {
             prefixName = prefixName + "/" + ossRequest.getGradeId();
         }
         String RandomFilename = "";
@@ -119,33 +182,33 @@ public class OssServiceImpl implements OssService {
         int intDay = calCurrent.get(Calendar.DATE);
         int intMonth = calCurrent.get(Calendar.MONTH) + 1;
         int intYear = calCurrent.get(Calendar.YEAR);
-        String now = String.valueOf(System.currentTimeMillis()) ;
+        String now = String.valueOf(System.currentTimeMillis());
 
         RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
-        switch(ossRequest.getImageStatus()){
-            case 0 :
-                RandomFilename = "avatar"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+        switch (ossRequest.getImageStatus()) {
+            case 0:
+                RandomFilename = "avatar" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 1 :
-                RandomFilename = "IDNumber"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 1:
+                RandomFilename = "IDNumber" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 2 :
-                RandomFilename = "QuestionBank"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 2:
+                RandomFilename = "QuestionBank" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 3 :
-                RandomFilename = "guide"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 3:
+                RandomFilename = "guide" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 4 :
-                RandomFilename = "advertising"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 4:
+                RandomFilename = "advertising" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 5 :
-                RandomFilename = "IDCard"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 5:
+                RandomFilename = "IDCard" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 6 :
-                RandomFilename = "file"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 6:
+                RandomFilename = "file" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
-            case 7 :
-                RandomFilename = "certificate"+"/"+prefixName+(Validator.isNotEmpty(prefixName)?"":(sdf.format(new Date())+"/"+now));
+            case 7:
+                RandomFilename = "certificate" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
                 break;
         }
 
@@ -157,33 +220,33 @@ public class OssServiceImpl implements OssService {
         JSONObject resultBean = new JSONObject();
         String filename = request.getParameter("filename");
         filename = ALIYUN_OSS_ENDPOINT.concat("/").concat(filename);
-        resultBean.put("filename",filename);
-        resultBean.put("size",request.getParameter("size"));
-        resultBean.put("mimeType",request.getParameter("mimeType"));
-        resultBean.put("width",request.getParameter("width"));
-        resultBean.put("height",request.getParameter("height"));
+        resultBean.put("filename", filename);
+        resultBean.put("size", request.getParameter("size"));
+        resultBean.put("mimeType", request.getParameter("mimeType"));
+        resultBean.put("width", request.getParameter("width"));
+        resultBean.put("height", request.getParameter("height"));
         return new ResultBean(resultBean);
     }
 
     @Override
-    public String upload(OssRequest file){
-        try{
+    public String upload(OssRequest file) {
+        try {
             //获取上传文件输入流
             InputStream inputStream = file.getFile().getInputStream();
             String originalFilename = file.getFile().getOriginalFilename();
             String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
 
-            String fileName = ALIYUN_OSS_DIR_PREFIX+generateRandomFilename(file)+"."+suffix;
+            String fileName = ALIYUN_OSS_DIR_PREFIX + generateRandomFilename(file) + "." + suffix;
 
             //调用oss方法实现上传
             //第一个参数  Bucket名称
             //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
             //第三个参数  上传文件输入流
-             PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream);
-             // 关闭OSSClient。
+            PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream);
+            // 关闭OSSClient。
             //ossClient.shutdown();
             return fileName;
-        }catch(Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             throw new IllegalStateException("上传失败");
         }
@@ -191,69 +254,142 @@ public class OssServiceImpl implements OssService {
 
     @Override
     public String uploadInputStream(InputStream inputStream, Integer imageStatus) throws Exception {
-        try{
-            for(int i=0;i<3;i++){         // 失败重试3次数
-                String path = uploadInputStreamImg(inputStream,imageStatus);
-                if(Validator.isNotEmpty(path)){
+        try {
+            for (int i = 0; i < 3; i++) {         // 失败重试3次数
+                String path = uploadInputStreamAction(inputStream, imageStatus);
+                if (Validator.isNotEmpty(path)) {
                     return path;
                 }
             }
             return null;
-        }catch(Exception e) {
+        } catch (Exception e) {
             return null;
         }
     }
 
-    private String uploadInputStreamImg(InputStream inputStream, Integer imageStatus) throws Exception {
-        try{
+    private String uploadInputStreamAction(InputStream inputStream, Integer imageStatus) throws Exception {
+        try {
             OssRequest ossRequest = new OssRequest();
             ossRequest.setImageStatus(7);
-            String fileName = generateRandomFilename(ossRequest)+".jpg";
+            String fileName = generateRandomFilename(ossRequest) + ".jpg";
 
             //调用oss方法实现上传
             //第一个参数  Bucket名称
             //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
             //第三个参数  上传文件输入流
             ObjectMetadata metadata = new ObjectMetadata();
-            metadata.setHeader("Content-Disposition", "attachment;filename="+fileName);
-            fileName = ALIYUN_OSS_DIR_PREFIX+fileName;
-            PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream,metadata);
+            metadata.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            fileName = ALIYUN_OSS_DIR_PREFIX + fileName;
+            PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, inputStream, metadata);
             // 关闭OSSClient。
             //ossClient.shutdown();
             return fileName;
-        }catch(Exception e) {
+        } catch (Exception e) {
             return null;
         }
     }
 
     @Override
-    public void closeClient(){
+    public void closeClient() {
         ossClient.shutdown();
     }
 
     @Override
-    public String uploadBase64(String fileStr) {
-        try{
+    public String uploadBase64(String fileStr, OssRequest ossRequest) {
+        try {
+            for (int i = 0; i < 3; i++) {         // 失败重试3次数
+                String path = uploadBase64Action(fileStr, ossRequest);
+                if (Validator.isNotEmpty(path)) {
+                    return path;
+                }
+            }
+            return null;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private String uploadBase64Action(String fileStr, OssRequest ossRequest) {
+        try {
             BASE64Decoder decoder = new BASE64Decoder();
             byte[] imageByte = decoder.decodeBuffer(fileStr);
             SerialBlob serialBlob = new SerialBlob(imageByte);
             InputStream binaryStream = serialBlob.getBinaryStream();
-            OssRequest ossRequest = new OssRequest();
-            ossRequest.setImageStatus(1);
-            String fileName = ALIYUN_OSS_DIR_PREFIX+generateRandomFilename(ossRequest);
+            String fileName = ALIYUN_OSS_DIR_PREFIX + generateRandomFilename(ossRequest) + ".jpg";
             ObjectMetadata metadata = new ObjectMetadata();
-            metadata.setHeader("Content-Type","image/jpeg");
+            metadata.setHeader("Content-Type", "image/jpeg");
             PutObjectResult putObjectResult = ossClient.putObject(ALIYUN_OSS_BUCKET_NAME, fileName, binaryStream, metadata);
-    //        ossClient.shutdown();
+            //        ossClient.shutdown();
             return fileName;
-        }catch (SerialException throwables) {
-            throwables.printStackTrace();
+        } catch (SerialException throwables) {
+            return null;
         } catch (SQLException throwables) {
-            throwables.printStackTrace();
+            return null;
         } catch (IOException e) {
-            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public InputStream getStreamByObject(String filePath) throws Exception {
+            OSSObject ossObject = ossClient.getObject(ALIYUN_OSS_BUCKET_NAME, filePath);
+            return ossObject.getObjectContent();
+    }
+
+    public void zipFile(List<String> fileList, ZipOutputStream zipOut,String dir) {
+        if (CollectionUtils.isEmpty(fileList)) {
+            return;
+        }
+        for (String filePath : fileList) {
+            if(Validator.isEmpty(filePath)){
+                continue;
+            }
+            if(filePath.indexOf("?")!=-1){
+                filePath = filePath.substring(0,filePath.indexOf("?"));
+            }
+            try (InputStream in = getStreamByObject(filePath)) {
+                zipOut.putNextEntry(new ZipEntry(getFileName(filePath,dir)));
+                byte[] bytes = new byte[1024];
+                int len;
+                while ((len = in.read(bytes)) != -1) {
+                    zipOut.write(bytes, 0, len);
+                }
+                zipOut.closeEntry();
+            }catch (Exception e){
+                System.out.println(e.getMessage()+"压缩错误");
+            }
+        }
+    }
+
+    private String getFileName(String filePath,String dir) {
+        String filename = filePath.substring(filePath.lastIndexOf("/") + 1)+".jpg";
+        if(Validator.isNotEmpty(dir)){
+            filename = dir + "/" + filename;
         }
-        return null;
+        return filename;
+    }
+
+    @Override
+    public void zipPeopleDownload(ClassPeriodStudentExportVo vo, ZipOutputStream outStream) {
+        //学时照片
+        List<String> list = iUserStudyRecordPhotoService.selectGradePhoto(vo.getUserId(),vo.getGradeId());
+        zipFile(list, outStream,vo.getRealName()+"-"+vo.getIdCard()+"-"+vo.getGradeId()+"/"+"学习照片");  //
+        //个人资料
+        List<String> listInfo = new ArrayList<>();
+        if(Validator.isNotEmpty(vo.getOneInchPhotosOss())){
+            listInfo.add(vo.getOneInchPhotosOss());
+        }
+        if(Validator.isNotEmpty(vo.getIdCardImg1Oss())){
+            listInfo.add(vo.getIdCardImg1Oss());
+        }
+        if(Validator.isNotEmpty(vo.getIdCardImg2Oss())){
+            listInfo.add(vo.getIdCardImg2Oss());
+        }
+        zipFile(listInfo, outStream,vo.getRealName()+"-"+vo.getIdCard()+"-"+vo.getGradeId()+"/"+"资料照片");  //
+    }
+
+    @Override
+    public void zipCommonDownload(List<String> fileList, ZipOutputStream zipOut,String dir) {
+        zipFile(fileList, zipOut,dir);
     }
 
 }

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

@@ -17,7 +17,9 @@ import com.zhongzheng.modules.bank.vo.ExamVo;
 import com.zhongzheng.modules.bank.vo.QuestionChapterExamVo;
 import com.zhongzheng.modules.course.bo.CourseChapterSectionListAddBo;
 import com.zhongzheng.modules.course.domain.CourseChapterSection;
+import com.zhongzheng.modules.course.domain.CourseMenuExam;
 import com.zhongzheng.modules.course.service.ICourseChapterBusinessService;
+import com.zhongzheng.modules.course.service.ICourseMenuExamService;
 import com.zhongzheng.modules.goods.bo.GoodsAttachedQueryBo;
 import com.zhongzheng.modules.goods.domain.GoodsAttached;
 import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
@@ -58,6 +60,9 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     @Autowired
     private IQuestionChapterExamService iQuestionChapterExamService;
 
+    @Autowired
+    private ICourseMenuExamService iCourseMenuExamService;
+
     @Autowired
     private ExamMapper examMapper;
 
@@ -190,7 +195,14 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
      */
     private void validEntityBeforeSave(Exam entity){
         //TODO 做一些数据校验,如唯一约束
-        if(entity.getExamId()!=null&&entity.getPublishStatus()!=null&&entity.getPublishStatus()==0){
+        if(Validator.isNotEmpty(entity.getExamId())&&Validator.isNotEmpty(entity.getStatus())&&entity.getStatus()==-1){
+            //判断是否有被课程章关联,有不允许删除
+            CourseMenuExam menuExam = iCourseMenuExamService.getOne(new LambdaQueryWrapper<CourseMenuExam>().eq(CourseMenuExam::getExamId, entity.getExamId()).last("limit 1"));
+            if(Validator.isNotEmpty(menuExam)){
+                throw new CustomException("该卷已被课程章关联,无法删除");
+            }
+        }
+        if(entity.getExamId()!=null&&Validator.isNotEmpty(entity.getPublishStatus())&&entity.getPublishStatus()==0){
             GoodsAttached one = iGoodsAttachedService.getOne(new LambdaQueryWrapper<GoodsAttached>().eq(GoodsAttached::getMajorId, entity.getExamId()).eq(GoodsAttached::getType,3).last("limit 1"));
             if(one!=null){
                 throw new CustomException("该卷已被绑定,不允许修改发布状态为未发布");
@@ -213,7 +225,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     public ExamVo getNextExam(QuestionChapterExamQueryBo bo) {
         ExamVo nextExam = null;
         //有章卷ID
-        if(Validator.isNotEmpty(bo.getChapterExamId())){
+        if(Validator.isNotEmpty(bo.getChapterExamId())&&bo.getChapterExamId().longValue()>0){
             QuestionChapterExamQueryBo bo1 = new QuestionChapterExamQueryBo();
             bo1.setChapterExamId(bo.getChapterExamId());
             List<QuestionChapterExamVo>  list = iQuestionChapterExamService.queryList(bo1);

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionChapterExamServiceImpl.java

@@ -59,6 +59,7 @@ public class QuestionChapterExamServiceImpl extends ServiceImpl<QuestionChapterE
         lqw.eq(bo.getExamId() != null, QuestionChapterExam::getExamId, bo.getExamId());
         lqw.eq(bo.getChapterExamId() != null, QuestionChapterExam::getChapterExamId, bo.getChapterExamId());
         lqw.eq(bo.getSort() != null, QuestionChapterExam::getSort, bo.getSort());
+        lqw.orderByAsc(QuestionChapterExam::getSort);
         return entity2Vo(this.list(lqw));
     }
 

+ 3 - 14
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -12,6 +12,7 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.modules.bank.bo.*;
 import com.zhongzheng.modules.bank.domain.ExamQuestion;
 import com.zhongzheng.modules.bank.domain.Question;
@@ -314,7 +315,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                     kIdList.add(knowledgeId);
                 }
                 //知识点ID拼接
-                bo.setKnowledgeIds(join(",", kIdList));
+                bo.setKnowledgeIds(ToolsUtils.join(",", kIdList));
             }
             questionBusinessAddBo.setEducationTypeId(eduId);
             questionBusinessAddBo.setProjectId(projectId);
@@ -1251,19 +1252,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return null;
     }
 
-    public  String join(@NonNull CharSequence delimiter, @NonNull Iterable tokens) {
-        final Iterator<?> it = tokens.iterator();
-        if (!it.hasNext()) {
-            return "";
-        }
-        final StringBuilder sb = new StringBuilder();
-        sb.append(it.next());
-        while (it.hasNext()) {
-            sb.append(delimiter);
-            sb.append(it.next());
-        }
-        return sb.toString();
-    }
+
 
 
     private String dealImportAnswer(String Answer){

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingAddBo.java

@@ -48,4 +48,7 @@ public class ActivityAdvertisingAddBo {
     /** 广告名称 */
     @ApiModelProperty("广告名称")
     private String advName;
+    /** 颜色填充值 */
+    @ApiModelProperty("颜色填充值")
+    private String color;
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingEditBo.java

@@ -57,5 +57,7 @@ public class ActivityAdvertisingEditBo {
     /** 广告名称 */
     @ApiModelProperty("广告名称")
     private String advName;
-
+    /** 颜色填充值 */
+    @ApiModelProperty("颜色填充值")
+    private String color;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationAddBo.java

@@ -36,4 +36,7 @@ public class ActivityAdvertisingLocationAddBo {
     /** 键名 */
     @ApiModelProperty("键名")
     private String locationKey;
+    /** 1小程序 2PC网站 */
+    @ApiModelProperty("1小程序 2PC网站")
+    private Integer platform;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationEditBo.java

@@ -41,4 +41,8 @@ public class ActivityAdvertisingLocationEditBo {
     @ApiModelProperty("键名")
     private String locationKey;
 
+    /** 1小程序 2PC网站 */
+    @ApiModelProperty("1小程序 2PC网站")
+    private Integer platform;
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/ActivityAdvertisingLocationQueryBo.java

@@ -49,4 +49,8 @@ public class ActivityAdvertisingLocationQueryBo extends BaseEntity {
 	/** 键名 */
 	@ApiModelProperty("键名")
 	private String locationKey;
+
+	/** 1小程序 2PC网站 */
+	@ApiModelProperty("1小程序 2PC网站")
+	private Integer platform;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/ActivityAdvertising.java

@@ -48,4 +48,6 @@ private static final long serialVersionUID=1L;
     private Long locationId;
     /** 广告名称 */
     private String advName;
+    /** 颜色填充值 */
+    private String color;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/domain/ActivityAdvertisingLocation.java

@@ -40,4 +40,6 @@ private static final long serialVersionUID=1L;
     private Integer status;
     /** 键名 */
     private String locationKey;
+    /** 1小程序 2PC网站 */
+    private Integer platform;
 }

+ 3 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/IUserProfileService.java

@@ -15,6 +15,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 填写资料审核Service接口
@@ -66,7 +67,7 @@ public interface IUserProfileService extends IService<UserProfile> {
 
 	List<UserProfileVo> listRecord(UserProfileQueryBo bo);
 
-	List<UserProfileExportVo> export(UserProfileQueryBo bo);
+	Map<String,Object> export(UserProfileQueryBo bo);
 
-	List<UserProfileExportGaiVo> exportPo(UserProfileQueryBo bo);
+	Map<String,Object> exportPo(UserProfileQueryBo bo);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingLocationServiceImpl.java

@@ -40,6 +40,7 @@ public class ActivityAdvertisingLocationServiceImpl extends ServiceImpl<Activity
     public ActivityAdvertisingLocationVo queryByKey(String key) {
         LambdaQueryWrapper<ActivityAdvertisingLocation> lqw = Wrappers.lambdaQuery();
         lqw.eq(ActivityAdvertisingLocation::getLocationKey, key);
+        lqw.eq(ActivityAdvertisingLocation::getPlatform, 1);
         ActivityAdvertisingLocation db = this.baseMapper.selectOne(lqw.last("limit 1"));
         return BeanUtil.toBean(db, ActivityAdvertisingLocationVo.class);
     }
@@ -51,6 +52,7 @@ public class ActivityAdvertisingLocationServiceImpl extends ServiceImpl<Activity
         lqw.eq(bo.getIntervalTime() != null, ActivityAdvertisingLocation::getIntervalTime, bo.getIntervalTime());
         lqw.in(bo.getStatus() != null, ActivityAdvertisingLocation::getStatus, bo.getStatus());
         lqw.eq(StrUtil.isNotBlank(bo.getLocationKey()), ActivityAdvertisingLocation::getLocationKey, bo.getLocationKey());
+        lqw.eq(bo.getPlatform() != null, ActivityAdvertisingLocation::getPlatform, bo.getPlatform());
         return entity2Vo(this.list(lqw));
     }
 

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

@@ -48,7 +48,7 @@ public class ActivityAdvertisingServiceImpl extends ServiceImpl<ActivityAdvertis
         lqw.eq(StrUtil.isNotBlank(bo.getRemarks()), ActivityAdvertising::getRemarks, bo.getRemarks());
         lqw.in(bo.getStatus() != null, ActivityAdvertising::getStatus, bo.getStatus());
         lqw.eq(bo.getJumpType() != null, ActivityAdvertising::getJumpType, bo.getJumpType());
-        lqw.orderByDesc(bo.getSort() != null, ActivityAdvertising::getSort);
+        lqw.orderByAsc(ActivityAdvertising::getSort);
         lqw.like(StrUtil.isNotBlank(bo.getAdvName()), ActivityAdvertising::getAdvName, bo.getAdvName());
         return entity2Vo(this.list(lqw));
     }

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

@@ -518,9 +518,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
 
     private  String drawPicOneBuild(CertificatePhotoVo entity){
         Font font = new Font("宋体", Font.BOLD, 20);// 添加字体的属性设置 微软雅黑
-
-        String projectUrl = "D:\\test\\";
-        String imgName = projectUrl + "out02.jpg";
+        String imgName = null;
         try {
             // 加载本地图片
             InputStream imgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/003.jpg");
@@ -562,7 +560,6 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             // 完成模板修改
             g.dispose();
             // 获取新文件的地址
-            File outputfile = new File(imgName);
             // 生成新的合成过的用户二维码并写入新图片
     //        ImageIO.write(imageLocal, "jpg", outputfile);
             //上传OSS

+ 246 - 184
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -15,10 +15,13 @@ import com.fasterxml.jackson.databind.exc.InvalidFormatException;
 import com.openhtmltopdf.swing.Java2DRenderer;
 import com.openhtmltopdf.util.FSImageWriter;
 import com.zhongzheng.common.annotation.DataScope;
+import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
 import com.zhongzheng.modules.alioss.service.impl.OssServiceImpl;
 import com.zhongzheng.modules.alisms.service.IAliSmsService;
@@ -72,6 +75,7 @@ import java.net.URL;
 import java.util.*;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.zip.ZipOutputStream;
 
 /**
  * 填写资料审核Service业务层处理
@@ -119,7 +123,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     private String commitmentFailsCode;
 
     @Override
-    public UserProfileVo queryById(Long id){
+    public UserProfileVo queryById(Long id) {
         UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
         userProfileQueryBo.setId(id);
         UserProfileVo userProfileVo = baseMapper.selectUserProfile(userProfileQueryBo).get(0);
@@ -133,19 +137,19 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     }
 
     /**
-    * 实体类转化成视图对象
-    *
-    * @param collection 实体类集合
-    * @return
-    */
+     * 实体类转化成视图对象
+     *
+     * @param collection 实体类集合
+     * @return
+     */
     private List<UserProfileVo> entity2Vo(Collection<UserProfile> collection) {
         List<UserProfileVo> voList = collection.stream()
                 .map(any -> BeanUtil.toBean(any, UserProfileVo.class))
                 .collect(Collectors.toList());
         if (collection instanceof Page) {
-            Page<UserProfile> page = (Page<UserProfile>)collection;
+            Page<UserProfile> page = (Page<UserProfile>) collection;
             Page<UserProfileVo> pageVo = new Page<>();
-            BeanUtil.copyProperties(page,pageVo);
+            BeanUtil.copyProperties(page, pageVo);
             pageVo.addAll(voList);
             voList = pageVo;
         }
@@ -154,6 +158,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
 
     @Override
     public Boolean insertByAddBo(UserProfileAddBo bo) {
+        if(Validator.isNotEmpty(bo.getKeyValue())){
+            if(bo.getKeyValue().indexOf("http")!=-1){
+                throw new CustomException("图片地址错误");
+            }
+        }
         UserProfile add = BeanUtil.toBean(bo, UserProfile.class);
         validEntityBeforeSave(add);
         add.setCreateTime(DateUtils.getNowTime());
@@ -169,10 +178,15 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateByEditBo(UserProfileEditBo bo) {
+        if(Validator.isNotEmpty(bo.getKeyValue())){
+            if(bo.getKeyValue().indexOf("http")!=-1){
+                throw new CustomException("图片地址错误");
+            }
+        }
         UserProfileVo userProfileVo = this.queryById(bo.getId());
 
         //新增待审的资料填写
-        UserProfile addProfile = BeanUtil.toBean(bo,UserProfile.class);
+        UserProfile addProfile = BeanUtil.toBean(bo, UserProfile.class);
         addProfile.setCreateTime(DateUtils.getNowTime());
         addProfile.setUpdateTime(DateUtils.getNowTime());
         addProfile.setStatus(3);
@@ -194,13 +208,13 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
      *
      * @param entity 实体类数据
      */
-    private void validEntityBeforeSave(UserProfile entity){
+    private void validEntityBeforeSave(UserProfile entity) {
         //TODO 做一些数据校验,如唯一约束
     }
 
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return this.removeByIds(ids);
@@ -214,12 +228,12 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         userProfileQueryBo.setTypeStatus(1L);
         UserProfileVo info = baseMapper.getInfo(userProfileQueryBo);
         //第一种方式
-        Map<String, String> maps = JSONObject.parseObject(info.getKeyValue(),Map.class);
+        Map<String, String> maps = JSONObject.parseObject(info.getKeyValue(), Map.class);
 
  /*       TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
         Template template = engine.getTemplate("word.ftl");*/
         //给模板绑定数据
-        Calendar rightNow= Calendar.getInstance();
+        Calendar rightNow = Calendar.getInstance();
         Map<String, Object> bindingMap = new HashMap<>();
         bindingMap.put("username", JSONObject.parseObject(String.valueOf(maps.get("name")), UserProfileFit.class).getValue());
         bindingMap.put("s", JSONObject.parseObject(String.valueOf(maps.get("sex")), UserProfileFit.class).getValue());
@@ -231,22 +245,22 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         bindingMap.put("major", JSONObject.parseObject(String.valueOf(maps.get("major")), UserProfileFit.class).getValue());
         bindingMap.put("cname", JSONObject.parseObject(String.valueOf(maps.get("unit_contact")), UserProfileFit.class).getValue());
         bindingMap.put("cphone", JSONObject.parseObject(String.valueOf(maps.get("unit_tel")), UserProfileFit.class).getValue());
-        bindingMap.put("image",  ALIYUN_OSS_ENDPOINT+"/"+JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
+        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
         bindingMap.put("y", Convert.toStr(rightNow.get(Calendar.YEAR)));
-        bindingMap.put("m", rightNow.get(Calendar.MONTH)+1);
+        bindingMap.put("m", rightNow.get(Calendar.MONTH) + 1);
         bindingMap.put("d", rightNow.get(Calendar.DAY_OF_MONTH));
         bindingMap.put("time", JSONObject.parseObject(String.valueOf(maps.get("graduation_time")), UserProfileFit.class).getValue());
         bindingMap.put("year", JSONObject.parseObject(String.valueOf(maps.get("working_years")), UserProfileFit.class).getValue());
-        File touch = FileUtil.touch(ZHONGZHENG_PROFILE+"word.html");
+        File touch = FileUtil.touch(ZHONGZHENG_PROFILE + "word.html");
         //默认freemake配置
         Configuration configuration = new Configuration();
         configuration.setDefaultEncoding("UTF-8");
         configuration.setClassForTemplateLoading(this.getClass(), "/templates");
         Template template = configuration.getTemplate("wordPhone.ftl");
-        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(touch),"UTF-8"));
+        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(touch), "UTF-8"));
         try {
             //写入数据
-            template.process(bindingMap,out);
+            template.process(bindingMap, out);
             out.flush();
             out.close();
 
@@ -258,11 +272,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         final BufferedImage img = renderer.getImage();
         final FSImageWriter imageWriter = new FSImageWriter();
         imageWriter.setWriteCompressionQuality(1.0f);
-        imageWriter.write(img, ZHONGZHENG_PROFILE+"wordJpg.jpg");//输出路径
+        imageWriter.write(img, ZHONGZHENG_PROFILE + "wordJpg.jpg");//输出路径
 
         OssRequest ossRequest = new OssRequest();
-        FileInputStream fileInputStream = new FileInputStream(ZHONGZHENG_PROFILE+"wordJpg.jpg");
-        MultipartFile multipartFile = new MockMultipartFile(ZHONGZHENG_PROFILE+"wordJpg.jpg", ZHONGZHENG_PROFILE+"wordJpg.jpg",
+        FileInputStream fileInputStream = new FileInputStream(ZHONGZHENG_PROFILE + "wordJpg.jpg");
+        MultipartFile multipartFile = new MockMultipartFile(ZHONGZHENG_PROFILE + "wordJpg.jpg", ZHONGZHENG_PROFILE + "wordJpg.jpg",
                 ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
         ossRequest.setFile(multipartFile);
         ossRequest.setImageStatus(6);
@@ -280,16 +294,16 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         userProfileQueryBo.setTypeStatus(1L);
         UserProfileVo info = baseMapper.getInfo(userProfileQueryBo);
         System.out.println(info);
-        if(Validator.isEmpty(info)){
+        if (Validator.isEmpty(info)) {
             return "";
         }
         //第一种方式
-        Map<String, String> maps = JSONObject.parseObject(info.getKeyValue(),Map.class);
+        Map<String, String> maps = JSONObject.parseObject(info.getKeyValue(), Map.class);
 
  /*       TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
         Template template = engine.getTemplate("word.ftl");*/
         //给模板绑定数据
-        Calendar rightNow= Calendar.getInstance();
+        Calendar rightNow = Calendar.getInstance();
         Map<String, Object> bindingMap = new HashMap<>();
         bindingMap.put("name", JSONObject.parseObject(String.valueOf(maps.get("name")), UserProfileFit.class).getValue());
         bindingMap.put("s", JSONObject.parseObject(String.valueOf(maps.get("sex")), UserProfileFit.class).getValue());
@@ -301,13 +315,13 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         bindingMap.put("major", JSONObject.parseObject(String.valueOf(maps.get("major")), UserProfileFit.class).getValue());
         bindingMap.put("cname", JSONObject.parseObject(String.valueOf(maps.get("unit_contact")), UserProfileFit.class).getValue());
         bindingMap.put("cphone", JSONObject.parseObject(String.valueOf(maps.get("unit_tel")), UserProfileFit.class).getValue());
-        bindingMap.put("image",  ALIYUN_OSS_ENDPOINT+"/"+JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
+        bindingMap.put("image", ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_electr_signature")), UserProfileFit.class).getValue());
         bindingMap.put("y", Convert.toStr(rightNow.get(Calendar.YEAR)));
-        bindingMap.put("m", rightNow.get(Calendar.MONTH)+1);
+        bindingMap.put("m", rightNow.get(Calendar.MONTH) + 1);
         bindingMap.put("d", rightNow.get(Calendar.DAY_OF_MONTH));
         bindingMap.put("time", JSONObject.parseObject(String.valueOf(maps.get("graduation_time")), UserProfileFit.class).getValue());
         bindingMap.put("year", JSONObject.parseObject(String.valueOf(maps.get("working_years")), UserProfileFit.class).getValue());
-        File touch = FileUtil.touch(ZHONGZHENG_PROFILE+"word.html");
+        File touch = FileUtil.touch(ZHONGZHENG_PROFILE + "word.html");
         //默认freemake配置
         Configuration configuration = new Configuration();
         configuration.setDefaultEncoding("UTF-8");
@@ -315,12 +329,12 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
 
         configuration.setClassForTemplateLoading(this.getClass(), "/templates");
         Template template = configuration.getTemplate("wordPhone.ftl");
-    //    File outFile = new File(ZHONGZHENG_PROFILE+"wordJpg.doc"); //导出文件
-        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(touch),"UTF-8"));
-    //    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
+        //    File outFile = new File(ZHONGZHENG_PROFILE+"wordJpg.doc"); //导出文件
+        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(touch), "UTF-8"));
+        //    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
         try {
             //写入数据
-            template.process(bindingMap,out);
+            template.process(bindingMap, out);
             out.flush();
             out.close();
 
@@ -341,11 +355,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
         final BufferedImage img = renderer.getImage();
         final FSImageWriter imageWriter = new FSImageWriter();
         imageWriter.setWriteCompressionQuality(1.0f);
-        imageWriter.write(img, ZHONGZHENG_PROFILE+"wordJpg.jpg");//输出路径
+        imageWriter.write(img, ZHONGZHENG_PROFILE + "wordJpg.jpg");//输出路径
 
         OssRequest ossRequest = new OssRequest();
-        FileInputStream fileInputStream = new FileInputStream(ZHONGZHENG_PROFILE+"wordJpg.jpg");
-        MultipartFile multipartFile = new MockMultipartFile(ZHONGZHENG_PROFILE+"wordJpg.jpg", ZHONGZHENG_PROFILE+"wordJpg.jpg",
+        FileInputStream fileInputStream = new FileInputStream(ZHONGZHENG_PROFILE + "wordJpg.jpg");
+        MultipartFile multipartFile = new MockMultipartFile(ZHONGZHENG_PROFILE + "wordJpg.jpg", ZHONGZHENG_PROFILE + "wordJpg.jpg",
                 ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
         ossRequest.setFile(multipartFile);
         ossRequest.setImageStatus(6);
@@ -360,22 +374,29 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     }
 
     @Override
-    public boolean updateAuditByEditBo(UserProfileEditBo bo,LoginUser loginUser) {
-        UserProfile update = BeanUtil.toBean(bo,UserProfile.class);
+    public boolean updateAuditByEditBo(UserProfileEditBo bo, LoginUser loginUser) {
+        if(Validator.isNotEmpty(bo.getKeyValue())){
+            if(bo.getKeyValue().indexOf("http")!=-1){
+                throw new CustomException("图片地址错误");
+            }
+        }
+        UserProfile update = BeanUtil.toBean(bo, UserProfile.class);
         UserProfileVo userProfileVo1 = this.queryById(bo.getId());
         //查询此人审核资料是否有权限
-       /* if (baseMapper.selectCountProfile(loginUser.getUser().getUserId(),userProfileVo1.getGoodsId()) < 1){
-            throw new IllegalArgumentException("您没有审核权限");
-        }*/
+        if (!loginUser.getUser().isAdmin()) {
+            if (baseMapper.selectCountProfile(loginUser.getUser().getUserId(), userProfileVo1.getGoodsId()) < 1) {
+                throw new IllegalArgumentException("您没有审核权限");
+            }
+        }
         update.setId(bo.getId());
-        update.setCreateByName("SAAS-"+ SecurityUtils.getUsername());
+        update.setCreateByName("SAAS-" + SecurityUtils.getUsername());
         update.setUpdateTime(DateUtils.getNowTime());
         update.setAuditTime(DateUtils.getNowTime());
         update.setChangeStatus(1);
 
         UserProfileVo userProfileVo = this.queryById(bo.getId());
         //发送消息分为资料审核发送,和盖章审核发送 1资料 2盖章
-        if (userProfileVo.getTypeStatus().equals(1)){
+        if (userProfileVo.getTypeStatus().equals(1)) {
             //审核资料发送消息
             sendAuidit(update);
             if (update.getStatus().equals(1)) {
@@ -383,7 +404,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 getUserPicInfo(update);
             }
 
-        }else if (userProfileVo.getTypeStatus().equals(2)){
+        } else if (userProfileVo.getTypeStatus().equals(2)) {
             //审核承诺书发送消息
             sendAuiditSMS(update);
         }
@@ -393,33 +414,33 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     /**
      * 同步身份证到用户信息
      */
-    private void getUserPicInfo(UserProfile bo){
+    private void getUserPicInfo(UserProfile bo) {
         String keyValue = bo.getKeyValue();
-        if(Validator.isNotEmpty(keyValue)){
-            Map<String, String> maps = JSONObject.parseObject(keyValue,Map.class);
-            String recent_photos,idcard_face_photo,idcard_national_photo = null;
+        if (Validator.isNotEmpty(keyValue)) {
+            Map<String, String> maps = JSONObject.parseObject(keyValue, Map.class);
+            String recent_photos, idcard_face_photo, idcard_national_photo = null;
             LambdaUpdateWrapper<User> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper.eq(User::getUserId, bo.getUserId());
-            if(maps.containsKey("recent_photos")){
+            if (maps.containsKey("recent_photos")) {
                 recent_photos = JSONObject.parseObject(String.valueOf(maps.get("recent_photos")), UserProfileFit.class).getValue();
                 objectLambdaUpdateWrapper.set(User::getOneInchPhotos, recent_photos);
             }
-            if(maps.containsKey("idcard_face_photo")){
+            if (maps.containsKey("idcard_face_photo")) {
                 idcard_face_photo = JSONObject.parseObject(String.valueOf(maps.get("idcard_face_photo")), UserProfileFit.class).getValue();
                 objectLambdaUpdateWrapper.set(User::getIdCardImg1, idcard_face_photo);
             }
-            if(maps.containsKey("idcard_national_photo")){
+            if (maps.containsKey("idcard_national_photo")) {
                 idcard_national_photo = JSONObject.parseObject(String.valueOf(maps.get("idcard_national_photo")), UserProfileFit.class).getValue();
                 objectLambdaUpdateWrapper.set(User::getIdCardImg2, idcard_national_photo);
             }
-            objectLambdaUpdateWrapper.set(User::getUpdateTime,DateUtils.getNowTime());
+            objectLambdaUpdateWrapper.set(User::getUpdateTime, DateUtils.getNowTime());
             iUserService.update(null, objectLambdaUpdateWrapper);
         }
     }
 
     private void sendAuiditSMS(UserProfile bo) {
         UserProfileVo userProfileVo = this.queryById(bo.getId());
-        Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(),userProfileVo.getGoodsId());
+        Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(), userProfileVo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryById(23L);
             //站内信有无启用,启用发送
@@ -436,11 +457,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您上传"+goodsVo1.getGoodsName()+"课程的承诺书审核成功");
+                informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功");
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
-            if (informRemindVo.getNoteStatus().equals(1)){
+            if (informRemindVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(userProfileVo.getUserId());
                 informUserAddBo.setSendTime(DateUtils.getNowTime());
@@ -452,14 +473,14 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setRemind("资料审核通过通知");
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您上传"+goodsVo1.getGoodsName()+"课程的承诺书审核成功");
+                informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核成功");
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), commitmentCode);
             }
-        }else {
+        } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryById(24L);
             //站内信有无启用,启用发送
             if (informRemindTwoVo.getWayStatus().equals(1)) {
@@ -475,11 +496,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您上传"+goodsVo1.getGoodsName()+"课程的承诺书审核不通过,请重新完善吧");
+                informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧");
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
-            if (informRemindTwoVo.getNoteStatus().equals(1)){
+            if (informRemindTwoVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(userProfileVo.getUserId());
                 informUserAddBo.setSendTime(DateUtils.getNowTime());
@@ -491,7 +512,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setRemind("资料审核不通过通知");
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您上传"+goodsVo1.getGoodsName()+"课程的承诺书审核不通过,请重新完善吧");
+                informUserAddBo.setText("尊敬的用户:您上传" + goodsVo1.getGoodsName() + "课程的承诺书审核不通过,请重新完善吧");
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
@@ -504,7 +525,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     private void sendAuidit(UserProfile bo) {
         UserProfileVo userProfileVo = this.queryById(bo.getId());
         //查询所在班级
-        Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(),userProfileVo.getGoodsId());
+        Long gradeId = baseMapper.selectGrade(userProfileVo.getUserId(), userProfileVo.getGoodsId());
         if (bo.getStatus().equals(1)) {
             InformRemindVo informRemindVo = informRemindService.queryById(3L);
             //站内信有无启用,启用发送
@@ -521,11 +542,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核成功,请尽快去学习吧");
+                informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核成功,请尽快去学习吧");
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
-            if (informRemindVo.getNoteStatus().equals(1)){
+            if (informRemindVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(userProfileVo.getUserId());
                 informUserAddBo.setSendTime(DateUtils.getNowTime());
@@ -544,7 +565,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 param.put("goods", goodsVo1.getGoodsName());
                 IAliSmsService.sendInformSms(userVo.getTelphone(), JSON.toJSONString(param), materialReviewCode);
             }
-        }else {
+        } else {
             InformRemindVo informRemindTwoVo = informRemindService.queryById(4L);
             //站内信有无启用,启用发送
             if (informRemindTwoVo.getWayStatus().equals(1)) {
@@ -560,11 +581,11 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 informUserAddBo.setGradeId(gradeId);
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核不通过,请重新完善吧");
+                informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧");
                 iInformUserService.insertByAddBo(informUserAddBo);
             }
             //短信有无启用,启用发送
-            if (informRemindTwoVo.getNoteStatus().equals(1)){
+            if (informRemindTwoVo.getNoteStatus().equals(1)) {
                 InformUserAddBo informUserAddBo = new InformUserAddBo();
                 informUserAddBo.setUserId(userProfileVo.getUserId());
                 informUserAddBo.setSendTime(DateUtils.getNowTime());
@@ -576,7 +597,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 informUserAddBo.setRemind("报名资料审核不通过通知");
                 informUserAddBo.setGoodsId(userProfileVo.getGoodsId());
                 GoodsVo goodsVo1 = iGoodsService.queryById(userProfileVo.getGoodsId());
-                informUserAddBo.setText("尊敬的用户:您填写的"+goodsVo1.getGoodsName()+"课程报名信息审核不通过,请重新完善吧");
+                informUserAddBo.setText("尊敬的用户:您填写的" + goodsVo1.getGoodsName() + "课程报名信息审核不通过,请重新完善吧");
                 iInformUserService.insertByAddBo(informUserAddBo);
                 UserVo userVo = iUserService.queryById(userProfileVo.getUserId());
                 Map<String, Object> param = new HashMap<>();
@@ -592,118 +613,30 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
     }
 
     @Override
-    public List<UserProfileExportVo> export(UserProfileQueryBo bo) {
+    public Map<String, Object> export(UserProfileQueryBo bo) {
         List<UserProfileVo> userProfileVos = baseMapper.selectUserProfile(bo);
         List<UserProfileExportVo> userProfileExportVos = new ArrayList<>();
-        for (UserProfileVo userProfileVo : userProfileVos) {
-            UserProfileExportVo userProfileExportVo = new UserProfileExportVo();
-            //将keyvlue转成对象
-            JsonBean jsonBean = JSON.parseObject(userProfileVo.getKeyValue(), JsonBean.class);
-
-            //赋值
-            userProfileExportVo.setGoodsName(userProfileVo.getGoodsName());
-            if (userProfileVo.getStatus().equals(1)) {
-                userProfileExportVo.setStatus("通过");
-            }
-            if (userProfileVo.getStatus().equals(2)) {
-                userProfileExportVo.setStatus("待审");
-            }
-            if (userProfileVo.getStatus().equals(3)) {
-                userProfileExportVo.setStatus("不通过");
-            }
-            userProfileExportVo.setUserAccount(userProfileVo.getUserAccount());
-            userProfileExportVo.setName(jsonBean.getName().getValue());
-            userProfileExportVo.setSex(jsonBean.getSex().getValue());
-            userProfileExportVo.setIdcard(jsonBean.getIdcard().getValue());
-            userProfileExportVo.setTelphone(jsonBean.getTelphone().getValue());
-            userProfileExportVo.setEducation(jsonBean.getEducation().getValue());
-            userProfileExportVo.setSchool(jsonBean.getSchool().getValue());
-            userProfileExportVo.setGraduation_time(DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
-            userProfileExportVo.setWork_unit(jsonBean.getWork_unit().getValue());
-            userProfileExportVo.setUnit_contact(jsonBean.getUnit_contact().getValue());
-            userProfileExportVo.setUnit_tel(jsonBean.getUnit_tel().getValue());
-            userProfileExportVo.setApply_post(jsonBean.getApply_post().getValue());
-            userProfileExportVo.setMajor(jsonBean.getMajor().getValue());
-            userProfileExportVo.setWorking_years(jsonBean.getWorking_years().getValue());
-            if (Validator.isNotEmpty(jsonBean.getRecent_photos())) {
-                userProfileExportVo.setRecent_photos(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getRecent_photos().getValue());
-            }
-
-            if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo())) {
-                userProfileExportVo.setIdcard_face_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_face_photo().getValue());
-            }
-
-            if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo())) {
-                userProfileExportVo.setIdcard_national_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_national_photo().getValue());
-            }
-
-            if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature())) {
-                userProfileExportVo.setCommitment_electr_signature(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getCommitment_electr_signature().getValue());
-            }
-            //查找盖章得记录
-            UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
-            userProfileQueryBo.setTypeStatus(2L);
-            userProfileQueryBo.setGoodsId(userProfileVo.getGoodsId());
-            userProfileQueryBo.setUserId(userProfileVo.getUserId());
-            List<UserProfileVo> userProfile = baseMapper.selectUserProfile(userProfileQueryBo);
-            if (CollectionUtils.isNotEmpty(userProfile)){
-                UserProfileVo userProfileVo1 = userProfile.get(0);
-                JsonBean jsonBean1 = JSON.parseObject(userProfileVo1.getKeyValue(), JsonBean.class);
-                if (!StringUtils.isEmpty(jsonBean1.getCommitment_seal().getValue())) {
-                    if (StringUtils.isNotBlank(jsonBean1.getCommitment_seal().getValue())) {
-                        userProfileExportVo.setCommitment_seal(ALIYUN_OSS_ENDPOINT + "/" + jsonBean1.getCommitment_seal().getValue());
-                    }
+        String filename = FileUtils.encodingZipFilename("用户盖章资料数据");
+        String zipFile = FileUtils.getZipAbsoluteFile(filename);
+        try {
+            ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(zipFile));
+            for (UserProfileVo userProfileVo : userProfileVos) {
+                UserProfileExportVo userProfileExportVo = new UserProfileExportVo();
+                //将keyvlue转成对象
+                JsonBean jsonBean = JSON.parseObject(userProfileVo.getKeyValue(), JsonBean.class);
+
+                //赋值
+                userProfileExportVo.setGoodsName(userProfileVo.getGoodsName());
+                if (userProfileVo.getStatus().equals(1)) {
+                    userProfileExportVo.setStatus("通过");
                 }
-            }
-            userProfileExportVo.setOneTime(DateUtil.formatDateTime(new Date(userProfileVo.getOneTime()*1000)));
-            userProfileExportVo.setLastTime(DateUtil.formatDateTime(new Date(userProfileVo.getLastTime()*1000)));
-            userProfileExportVo.setCreateByName(userProfileVo.getCreateByName());
-            if (userProfileVo.getAuditTime() != null) {
-                userProfileExportVo.setAuditTime(DateUtil.formatDateTime(new Date(userProfileVo.getAuditTime() * 1000)));
-            }
-            userProfileExportVos.add(userProfileExportVo);
-        }
-        return userProfileExportVos;
-    }
-
-    @Override
-    public List<UserProfileExportGaiVo> exportPo(UserProfileQueryBo bo) {
-        List<UserProfileVo> userProfileVos = baseMapper.selectUserProfile(bo);
-        List<UserProfileExportGaiVo> userProfileExportVos = new ArrayList<>();
-        for (UserProfileVo userProfileVo : userProfileVos) {
-            UserProfileExportGaiVo userProfileExportVo = new UserProfileExportGaiVo();
-            //将keyvlue转成对象
-            JsonBean jsonBean1 = JSON.parseObject(userProfileVo.getKeyValue(), JsonBean.class);
-
-            //赋值
-
-            if (!StringUtils.isEmpty(jsonBean1.getCommitment_seal().getValue())) {
-                if (StringUtils.isNotBlank(jsonBean1.getCommitment_seal().getValue())) {
-                    userProfileExportVo.setCommitment_seal(ALIYUN_OSS_ENDPOINT + "/" + jsonBean1.getCommitment_seal().getValue());
+                if (userProfileVo.getStatus().equals(2)) {
+                    userProfileExportVo.setStatus("待审");
                 }
-            }
-
-            userProfileExportVo.setGoodsName(userProfileVo.getGoodsName());
-            if (userProfileVo.getStatus().equals(1)) {
-                userProfileExportVo.setStatus("通过");
-            }
-            if (userProfileVo.getStatus().equals(2)) {
-                userProfileExportVo.setStatus("待审");
-            }
-            if (userProfileVo.getStatus().equals(3)) {
-                userProfileExportVo.setStatus("不通过");
-            }
-            userProfileExportVo.setUserAccount(userProfileVo.getUserAccount());
-
-            //查找盖章得记录
-            UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
-            userProfileQueryBo.setTypeStatus(1L);
-            userProfileQueryBo.setGoodsId(userProfileVo.getGoodsId());
-            userProfileQueryBo.setUserId(userProfileVo.getUserId());
-            List<UserProfileVo> userProfile = baseMapper.selectUserProfile(userProfileQueryBo);
-            if (CollectionUtils.isNotEmpty(userProfile)){
-                UserProfileVo userProfileVo1 = userProfile.get(0);
-                JsonBean jsonBean = JSON.parseObject(userProfileVo1.getKeyValue(), JsonBean.class);
+                if (userProfileVo.getStatus().equals(3)) {
+                    userProfileExportVo.setStatus("不通过");
+                }
+                userProfileExportVo.setUserAccount(userProfileVo.getUserAccount());
                 userProfileExportVo.setName(jsonBean.getName().getValue());
                 userProfileExportVo.setSex(jsonBean.getSex().getValue());
                 userProfileExportVo.setIdcard(jsonBean.getIdcard().getValue());
@@ -717,28 +650,157 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 userProfileExportVo.setApply_post(jsonBean.getApply_post().getValue());
                 userProfileExportVo.setMajor(jsonBean.getMajor().getValue());
                 userProfileExportVo.setWorking_years(jsonBean.getWorking_years().getValue());
-                if (Validator.isNotEmpty(jsonBean.getRecent_photos())) {
+                List<String> fileList = new ArrayList<>();
+                if (Validator.isNotEmpty(jsonBean.getRecent_photos().getValue())) {
                     userProfileExportVo.setRecent_photos(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getRecent_photos().getValue());
+                    fileList.add(jsonBean.getRecent_photos().getValue());
                 }
-                if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo())) {
+
+                if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo().getValue())) {
                     userProfileExportVo.setIdcard_face_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_face_photo().getValue());
+                    fileList.add(jsonBean.getIdcard_face_photo().getValue());
                 }
-                if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo())) {
+
+                if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo().getValue())) {
                     userProfileExportVo.setIdcard_national_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_national_photo().getValue());
+                    fileList.add(jsonBean.getIdcard_national_photo().getValue());
                 }
-                if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature())) {
+
+                if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature().getValue())) {
                     userProfileExportVo.setCommitment_electr_signature(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getCommitment_electr_signature().getValue());
+                    fileList.add(jsonBean.getCommitment_electr_signature().getValue());
+                }
+                String dir = userProfileExportVo.getName() + "_" + userProfileExportVo.getIdcard();
+                ossService.zipCommonDownload(fileList, outStream, dir);
+                //查找盖章得记录
+                UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
+                userProfileQueryBo.setTypeStatus(2L);
+                userProfileQueryBo.setGoodsId(userProfileVo.getGoodsId());
+                userProfileQueryBo.setUserId(userProfileVo.getUserId());
+                List<UserProfileVo> userProfile = baseMapper.selectUserProfile(userProfileQueryBo);
+                if (CollectionUtils.isNotEmpty(userProfile)) {
+                    UserProfileVo userProfileVo1 = userProfile.get(0);
+                    JsonBean jsonBean1 = JSON.parseObject(userProfileVo1.getKeyValue(), JsonBean.class);
+                    if (!StringUtils.isEmpty(jsonBean1.getCommitment_seal().getValue())) {
+                        if (StringUtils.isNotBlank(jsonBean1.getCommitment_seal().getValue())) {
+                            userProfileExportVo.setCommitment_seal(ALIYUN_OSS_ENDPOINT + "/" + jsonBean1.getCommitment_seal().getValue());
+                        }
+                    }
+                }
+                userProfileExportVo.setOneTime(DateUtil.formatDateTime(new Date(userProfileVo.getOneTime() * 1000)));
+                userProfileExportVo.setLastTime(DateUtil.formatDateTime(new Date(userProfileVo.getLastTime() * 1000)));
+                userProfileExportVo.setCreateByName(userProfileVo.getCreateByName());
+                if (userProfileVo.getAuditTime() != null) {
+                    userProfileExportVo.setAuditTime(DateUtil.formatDateTime(new Date(userProfileVo.getAuditTime() * 1000)));
                 }
+                userProfileExportVos.add(userProfileExportVo);
             }
-            userProfileExportVo.setOneTime(DateUtil.formatDateTime(new Date(userProfileVo.getOneTime()*1000)));
-            userProfileExportVo.setLastTime(DateUtil.formatDateTime(new Date(userProfileVo.getLastTime()*1000)));
-            userProfileExportVo.setCreateByName(userProfileVo.getCreateByName());
-            if (userProfileVo.getAuditTime() != null) {
-                userProfileExportVo.setAuditTime(DateUtil.formatDateTime(new Date(userProfileVo.getAuditTime() * 1000)));
+            outStream.close();
+        } catch (IOException e) {
+            System.out.println(e.getMessage() + "压缩");
+        }
+        Map<String, Object> rs = new HashMap<>();
+        rs.put("list", userProfileExportVos);
+        rs.put("zip", AjaxResult.success(filename));
+        //List<UserProfileExportGaiVo>
+        return rs;
+    }
+
+    @Override
+    public Map<String, Object> exportPo(UserProfileQueryBo bo) {
+        List<UserProfileVo> userProfileVos = baseMapper.selectUserProfile(bo);
+        List<UserProfileExportGaiVo> userProfileExportVos = new ArrayList<>();
+        String filename = FileUtils.encodingZipFilename("用户盖章资料数据");
+        String zipFile = FileUtils.getZipAbsoluteFile(filename);
+        try {
+            ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(zipFile));
+            for (UserProfileVo userProfileVo : userProfileVos) {
+                UserProfileExportGaiVo userProfileExportVo = new UserProfileExportGaiVo();
+                //将keyvlue转成对象
+                JsonBean jsonBean1 = JSON.parseObject(userProfileVo.getKeyValue(), JsonBean.class);
+
+                //赋值
+
+                if (!StringUtils.isEmpty(jsonBean1.getCommitment_seal().getValue())) {
+                    if (StringUtils.isNotBlank(jsonBean1.getCommitment_seal().getValue())) {
+                        userProfileExportVo.setCommitment_seal(ALIYUN_OSS_ENDPOINT + "/" + jsonBean1.getCommitment_seal().getValue());
+                    }
+                }
+
+                userProfileExportVo.setGoodsName(userProfileVo.getGoodsName());
+                if (userProfileVo.getStatus().equals(1)) {
+                    userProfileExportVo.setStatus("通过");
+                }
+                if (userProfileVo.getStatus().equals(2)) {
+                    userProfileExportVo.setStatus("待审");
+                }
+                if (userProfileVo.getStatus().equals(3)) {
+                    userProfileExportVo.setStatus("不通过");
+                }
+                userProfileExportVo.setUserAccount(userProfileVo.getUserAccount());
+
+                //查找盖章得记录
+                UserProfileQueryBo userProfileQueryBo = new UserProfileQueryBo();
+                userProfileQueryBo.setTypeStatus(1L);
+                userProfileQueryBo.setGoodsId(userProfileVo.getGoodsId());
+                userProfileQueryBo.setUserId(userProfileVo.getUserId());
+                List<UserProfileVo> userProfile = baseMapper.selectUserProfile(userProfileQueryBo);
+                if (CollectionUtils.isNotEmpty(userProfile)) {
+                    UserProfileVo userProfileVo1 = userProfile.get(0);
+                    JsonBean jsonBean = JSON.parseObject(userProfileVo1.getKeyValue(), JsonBean.class);
+                    userProfileExportVo.setName(jsonBean.getName().getValue());
+                    userProfileExportVo.setSex(jsonBean.getSex().getValue());
+                    userProfileExportVo.setIdcard(jsonBean.getIdcard().getValue());
+                    userProfileExportVo.setTelphone(jsonBean.getTelphone().getValue());
+                    userProfileExportVo.setEducation(jsonBean.getEducation().getValue());
+                    userProfileExportVo.setSchool(jsonBean.getSchool().getValue());
+                    userProfileExportVo.setGraduation_time(DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
+                    userProfileExportVo.setWork_unit(jsonBean.getWork_unit().getValue());
+                    userProfileExportVo.setUnit_contact(jsonBean.getUnit_contact().getValue());
+                    userProfileExportVo.setUnit_tel(jsonBean.getUnit_tel().getValue());
+                    userProfileExportVo.setApply_post(jsonBean.getApply_post().getValue());
+                    userProfileExportVo.setMajor(jsonBean.getMajor().getValue());
+                    userProfileExportVo.setWorking_years(jsonBean.getWorking_years().getValue());
+                    List<String> fileList = new ArrayList<>();
+                    if (Validator.isNotEmpty(jsonBean.getRecent_photos().getValue())) {
+                        userProfileExportVo.setRecent_photos(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getRecent_photos().getValue());
+                        fileList.add(jsonBean.getRecent_photos().getValue());
+                    }
+                    if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo().getValue())) {
+                        userProfileExportVo.setIdcard_face_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_face_photo().getValue());
+                        fileList.add(jsonBean.getIdcard_face_photo().getValue());
+                    }
+                    if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo().getValue())) {
+                        userProfileExportVo.setIdcard_national_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_national_photo().getValue());
+                        fileList.add(jsonBean.getIdcard_national_photo().getValue());
+
+                    }
+                    if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature().getValue())) {
+                        userProfileExportVo.setCommitment_electr_signature(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getCommitment_electr_signature().getValue());
+                        fileList.add(jsonBean.getCommitment_electr_signature().getValue());
+
+                    }
+                    String dir = userProfileExportVo.getName() + "_" + userProfileExportVo.getIdcard();
+                    ossService.zipCommonDownload(fileList, outStream, dir);
+
+                }
+                userProfileExportVo.setOneTime(DateUtil.formatDateTime(new Date(userProfileVo.getOneTime() * 1000)));
+                userProfileExportVo.setLastTime(DateUtil.formatDateTime(new Date(userProfileVo.getLastTime() * 1000)));
+                userProfileExportVo.setCreateByName(userProfileVo.getCreateByName());
+                if (userProfileVo.getAuditTime() != null) {
+                    userProfileExportVo.setAuditTime(DateUtil.formatDateTime(new Date(userProfileVo.getAuditTime() * 1000)));
+                }
+                userProfileExportVos.add(userProfileExportVo);
             }
-            userProfileExportVos.add(userProfileExportVo);
+            outStream.close();
+        } catch (IOException e) {
+            System.out.println(e.getMessage() + "压缩");
         }
-        return userProfileExportVos;
+        Map<String, Object> rs = new HashMap<>();
+        rs.put("list", userProfileExportVos);
+        rs.put("zip", AjaxResult.success(filename));
+        //List<UserProfileExportGaiVo>
+        return rs;
     }
 
     /**

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ActivityAdvertisingLocationVo.java

@@ -40,4 +40,8 @@ public class ActivityAdvertisingLocationVo {
 	@Excel(name = "键名")
 	@ApiModelProperty("键名")
 	private String locationKey;
+	/** 1小程序 2PC网站 */
+	@Excel(name = "1小程序 2PC网站")
+	@ApiModelProperty("1小程序 2PC网站")
+	private Integer platform;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ActivityAdvertisingVo.java

@@ -56,4 +56,8 @@ public class ActivityAdvertisingVo {
 	@Excel(name = "广告名称")
 	@ApiModelProperty("广告名称")
 	private String advName;
+	/** 颜色填充值 */
+	@Excel(name = "颜色填充值")
+	@ApiModelProperty("颜色填充值")
+	private String color;
 }

+ 11 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/ShoppingCartVo.java

@@ -40,7 +40,7 @@ public class ShoppingCartVo {
 	private Integer status;
 
 	@ApiModelProperty("商品类型 1视频2题库 3面授 4服务 5组合")
-	private Long goodsType;
+	private Integer goodsType;
 	@ApiModelProperty("商品名称")
 	private String goodsName;
 	@ApiModelProperty("标准价格")
@@ -53,4 +53,14 @@ public class ShoppingCartVo {
 	private Long projectId;
 	@ApiModelProperty("模板类型置")
 	private String templateType;
+	@ApiModelProperty("教育名称")
+	private String educationName;
+	@ApiModelProperty("项目名称")
+	private String projectName;
+	@ApiModelProperty("业务名称")
+	private String businessName;
+	/** 学时 */
+	@Excel(name = "学时")
+	@ApiModelProperty("学时")
+	private BigDecimal classHours;
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileExportGaiVo.java

@@ -68,7 +68,7 @@ public class UserProfileExportGaiVo {
 	@Excel(name = "个人近照")
 	private String recent_photos;
 
-	@Excel(name = "身份证正面照")
+	@Excel(name = "身份证人像照")
 	private String idcard_face_photo;
 
 	@Excel(name = "身份证国徽照")

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/vo/UserProfileExportVo.java

@@ -69,7 +69,7 @@ public class UserProfileExportVo {
 	@Excel(name = "个人近照")
 	private String recent_photos;
 
-	@Excel(name = "身份证正面照")
+	@Excel(name = "身份证人像照")
 	private String idcard_face_photo;
 
 	@Excel(name = "身份证国徽照")

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionAddBo.java

@@ -32,4 +32,7 @@ public class CollectQuestionAddBo {
     /** 商品ID */
     @ApiModelProperty("商品ID")
     private Long goodsId;
+    /** 订单商品ID */
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionEditBo.java

@@ -31,4 +31,7 @@ public class CollectQuestionEditBo {
     private Long userId;
     @ApiModelProperty("试卷ID")
     private Long examId;
+    /** 订单商品ID */
+    @ApiModelProperty("订单商品ID")
+    private Long orderGoodsId;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/bo/CollectQuestionQueryBo.java

@@ -52,4 +52,7 @@ public class CollectQuestionQueryBo extends BaseEntity {
 	private Integer paperId;
 	@ApiModelProperty("商品ID")
 	private Long goodsId;
+	/** 订单商品ID */
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
 }

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

@@ -42,5 +42,6 @@ private static final long serialVersionUID=1L;
     private Long examId;
     /** 商品ID */
     private Long goodsId;
-
+    /** 订单商品ID */
+    private Long orderGoodsId;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/service/impl/CollectQuestionServiceImpl.java

@@ -120,6 +120,9 @@ public class CollectQuestionServiceImpl extends ServiceImpl<CollectQuestionMappe
 
     @Override
     public Boolean insertByAddBo(CollectQuestionAddBo bo) {
+        if(Validator.isEmpty(bo.getOrderGoodsId())){
+            throw new CustomException("缺失订单商品ID");
+        }
         CollectQuestion add = BeanUtil.toBean(bo, CollectQuestion.class);
         validEntityBeforeSave(add);
         add.setCreateTime(DateUtils.getNowTime());

+ 4 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/collect/vo/CollectQuestionVo.java

@@ -50,5 +50,8 @@ public class CollectQuestionVo {
 
 	@ApiModelProperty("类型数量")
 	private Integer num;
-
+	/** 订单商品ID */
+	@Excel(name = "订单商品ID")
+	@ApiModelProperty("订单商品ID")
+	private Long orderGoodsId;
 }

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessAddBo.java

@@ -54,4 +54,19 @@ public class CourseBusinessAddBo {
     /** 1限制视频商品做卷顺序 0不限制 */
     @ApiModelProperty("1限制视频商品做卷顺序 0不限制")
     private Integer goodsLearningOrder;
+    /** 审核资料模板用户ID拼接 */
+    @ApiModelProperty("审核资料模板用户ID拼接")
+    private String profileTpUserIds;
+    /** 学时审核用户ID拼接 */
+    @ApiModelProperty("学时审核用户ID拼接")
+    private String periodUserIds;
+    /** 学时确认审核用户ID拼接 */
+    @ApiModelProperty("学时确认审核用户ID拼接")
+    private String periodConfirmUserIds;
+    /** 退款初审用户ID拼接 */
+    @ApiModelProperty("退款初审用户ID拼接")
+    private String refundUserIds;
+    /** 退款确认审核用户ID拼接 */
+    @ApiModelProperty("退款确认审核用户ID拼接")
+    private String refundConfirmUserIds;
 }

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessEditBo.java

@@ -64,4 +64,21 @@ public class CourseBusinessEditBo {
     /** 1限制视频商品做卷顺序 0不限制 */
     @ApiModelProperty("1限制视频商品做卷顺序 0不限制")
     private Integer goodsLearningOrder;
+
+    /** 审核资料模板用户ID拼接 */
+    @ApiModelProperty("审核资料模板用户ID拼接")
+    private String profileTpUserIds;
+
+    /** 学时审核用户ID拼接 */
+    @ApiModelProperty("学时审核用户ID拼接")
+    private String periodUserIds;
+    /** 学时确认审核用户ID拼接 */
+    @ApiModelProperty("学时确认审核用户ID拼接")
+    private String periodConfirmUserIds;
+    /** 退款初审用户ID拼接 */
+    @ApiModelProperty("退款初审用户ID拼接")
+    private String refundUserIds;
+    /** 退款确认审核用户ID拼接 */
+    @ApiModelProperty("退款确认审核用户ID拼接")
+    private String refundConfirmUserIds;
 }

+ 11 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/bo/CourseBusinessQueryBo.java

@@ -42,7 +42,7 @@ public class CourseBusinessQueryBo extends BaseEntity {
 	private String encoder;
 
 	/** 业务ID */
-	@ApiModelProperty("考期Id")
+	@ApiModelProperty("业务ID")
 	private Long id;
 
 	/** 项目名称 */
@@ -65,4 +65,14 @@ public class CourseBusinessQueryBo extends BaseEntity {
 	@Excel(name = "模板选用")
 	@ApiModelProperty("模板选用")
 	private Integer templateStatus;
+	/** 审核资料模板用户ID拼接 */
+	@ApiModelProperty("审核资料模板用户ID拼接")
+	private String profileTpUserIds;
+	/** 学时审核用户ID拼接 */
+	@ApiModelProperty("学时审核用户ID拼接")
+	private String periodUserIds;
+	/** 学时确认审核用户ID拼接 */
+	@ApiModelProperty("学时确认审核用户ID拼接")
+	private String periodConfirmUserIds;
+
 }

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

@@ -81,4 +81,6 @@ public class CourseSectionQueryBo extends BaseEntity {
 	/** 科目id */
 	@ApiModelProperty("科目id")
 	private Long subjectId;
+	@ApiModelProperty("导入编号")
+	private String importNo;
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/domain/CourseBusiness.java

@@ -51,5 +51,15 @@ private static final long serialVersionUID=1L;
     /** 1限制章下做卷顺序 0不限制 2限制整个目录顺序 */
     private Integer goodsLearningOrder;
 
+    /** 审核资料模板用户ID拼接 */
+    private String profileTpUserIds;
 
+    /** 学时审核用户ID拼接 */
+    private String periodUserIds;
+    /** 学时确认审核用户ID拼接 */
+    private String periodConfirmUserIds;
+    /** 退款初审用户ID拼接 */
+    private String refundUserIds;
+    /** 退款确认审核用户ID拼接 */
+    private String refundConfirmUserIds;
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseBusinessMapper.java

@@ -1,11 +1,13 @@
 package com.zhongzheng.modules.course.mapper;
 
+import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * 业务层次Mapper接口
@@ -16,4 +18,6 @@ import java.util.Collection;
 public interface CourseBusinessMapper extends BaseMapper<CourseBusiness> {
 
     Collection<CourseBusinessVo> queryList(CourseBusinessQueryBo bo);
+
+
 }

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseEducationTypeMapper.java

@@ -2,6 +2,10 @@ package com.zhongzheng.modules.course.mapper;
 
 import com.zhongzheng.modules.course.domain.CourseEducationType;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.course.vo.CourseEducationTypeVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 教育类型Mapper接口
@@ -10,5 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @date 2021-10-08
  */
 public interface CourseEducationTypeMapper extends BaseMapper<CourseEducationType> {
-
+   List<CourseEducationTypeVo> selectUserEduList(@Param("userId") Long userId,@Param("goodsType") Integer goodsType);
 }

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

@@ -48,4 +48,6 @@ public interface CourseMapper extends BaseMapper<Course> {
     ClassGradeVo gradeIdSelect(@Param("userId") Long userId, @Param("goodsId") Long goodsId, @Param("gradeId") Long gradeId);
 
     Long goodsRebuildStatus(CourseQueryBo bo);
+
+    Long checkCourseHaveStudy(@Param("courseId") Long courseId);
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác