change 4 år sedan
förälder
incheckning
bf36b7b2f9
40 ändrade filer med 1822 tillägg och 1 borttagningar
  1. 3 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/activity/ActivityTaskController.java
  2. 49 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/activity/PlanController.java
  3. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingAddBo.java
  4. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingEditBo.java
  5. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingQueryBo.java
  6. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityTaskUserAddBo.java
  7. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/domain/ActivityAdvertising.java
  8. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/vo/ActivityAdvertisingVo.java
  9. 33 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserAddBo.java
  10. 41 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserEditBo.java
  11. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserQueryBo.java
  12. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanAddBo.java
  13. 24 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceAddBo.java
  14. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceEditBo.java
  15. 43 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceQueryBo.java
  16. 72 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanEditBo.java
  17. 74 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanQueryBo.java
  18. 49 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/OrderPossessUser.java
  19. 73 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserPlan.java
  20. 34 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserPlanCource.java
  21. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/OrderPossessUserMapper.java
  22. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserPlanCourceMapper.java
  23. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserPlanMapper.java
  24. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IOrderPossessUserService.java
  25. 52 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserPlanCourceService.java
  26. 61 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserPlanService.java
  27. 100 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/OrderPossessUserServiceImpl.java
  28. 96 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserPlanCourceServiceImpl.java
  29. 405 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserPlanServiceImpl.java
  30. 31 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/CalendarStudyVo.java
  31. 44 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/CoursePlanVo.java
  32. 28 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/DayStudyVo.java
  33. 36 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/OrderPossessUserVo.java
  34. 32 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserPlanCourceVo.java
  35. 78 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserPlanVo.java
  36. 2 0
      zhongzheng-system/src/main/resources/mapper/modules/activity/ActivityAdvertisingMapper.xml
  37. 0 1
      zhongzheng-system/src/main/resources/mapper/modules/exam/ExamArrangementMapper.xml
  38. 17 0
      zhongzheng-system/src/main/resources/mapper/modules/user/OrderPossessUserMapper.xml
  39. 13 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserPlanCourceMapper.xml
  40. 77 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserPlanMapper.xml

+ 3 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/activity/ActivityTaskController.java

@@ -16,7 +16,10 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 import java.util.List;
+import java.util.Scanner;
 
 /**
  * 任务存储Controller

+ 49 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/activity/PlanController.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.controller.activity;
+
+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.activity.bo.ActivityTaskQueryBo;
+import com.zhongzheng.modules.activity.service.IActivityTaskService;
+import com.zhongzheng.modules.activity.vo.ActivityTaskVo;
+import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
+import com.zhongzheng.modules.user.service.IUserPlanService;
+import com.zhongzheng.modules.user.vo.UserPlanVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 任务存储Controller
+ *
+ * @author change
+ * @date 2021-05-19
+ */
+@Api(value = "计划生成", tags = {"计划生成"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/plan")
+public class PlanController extends BaseController {
+
+    private final IUserPlanService userPlanService;
+
+    /**
+     * 查询任务積分列表
+     */
+    @ApiOperation("生成学习计划")
+    @GetMapping("/generate")
+    public AjaxResult<UserPlanVo> list(UserPlanQueryBo bo) throws ParseException {
+        return AjaxResult.success(userPlanService.generate(bo));
+    }
+
+
+
+}

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingAddBo.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.activity.bo;
 
+import com.zhongzheng.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -24,6 +25,9 @@ public class ActivityAdvertisingAddBo {
     /** 跳转url */
     @ApiModelProperty("跳转url")
     private String jumpUrl;
+
+    @ApiModelProperty("跳转url")
+    private String sourceUrl;
     /** 创建时间 */
     @ApiModelProperty("创建时间")
     private Long createTime;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingEditBo.java

@@ -28,6 +28,9 @@ public class ActivityAdvertisingEditBo {
     @ApiModelProperty("跳转url")
     private String jumpUrl;
 
+    @ApiModelProperty("跳转url")
+    private String sourceUrl;
+
     /** 修改时间 */
     @ApiModelProperty("修改时间")
     private Long updateTime;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityAdvertisingQueryBo.java

@@ -37,6 +37,9 @@ public class ActivityAdvertisingQueryBo extends BaseEntity {
 	/** 跳转url */
 	@ApiModelProperty("跳转url")
 	private String jumpUrl;
+
+	@ApiModelProperty("跳转url")
+	private String sourceUrl;
 	/** 有效时间开始时间 */
 	@ApiModelProperty("有效时间开始时间")
 	private Long startTime;

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/activity/bo/ActivityTaskUserAddBo.java

@@ -3,6 +3,8 @@ package com.zhongzheng.modules.activity.bo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import javax.validation.constraints.NotNull;
 import java.util.Date;
 
 
@@ -29,10 +31,12 @@ public class ActivityTaskUserAddBo {
     /** 任务名称  0每日签到 1完善信息 2邀请好友 3每日分享
 4视频学习 5模拟考试 */
     @ApiModelProperty("任务名称  0每日签到 1完善信息 2邀请好友 3每日分享 4视频学习 5模拟考试")
+    @NotNull(message = "任务名称类型不能为空")
     private Integer taskType;
 
     /** 用户id*/
     @ApiModelProperty("用户id")
+    @NotNull(message = "用户ID不能为空")
     private Long UserId;
 
     /** 任务ID*/

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -35,6 +36,9 @@ private static final long serialVersionUID=1L;
     /** 跳转url */
     private String jumpUrl;
 
+    /** 跳转url */
+    private String sourceUrl;
+
     /** 创建时间 */
     @TableField(fill = FieldFill.INSERT)
     private Long createTime;

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

@@ -29,6 +29,10 @@ public class ActivityAdvertisingVo {
 	@Excel(name = "跳转url")
 	@ApiModelProperty("跳转url")
 	private String jumpUrl;
+
+	@Excel(name = "跳转url")
+	@ApiModelProperty("跳转url")
+	private String sourceUrl;
 	/** 有效时间开始时间 */
 	@Excel(name = "有效时间开始时间")
 	@ApiModelProperty("有效时间开始时间")

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserAddBo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 【请填写功能名称】添加对象 order_possess_user
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】添加对象")
+public class OrderPossessUserAddBo {
+
+    /** 解锁类型 0课程 1题库  2考试重点 */
+    @ApiModelProperty("解锁类型 0课程 1题库  2考试重点")
+    private Integer typeId;
+    /** 拥有的课程id或题库id或考试重点 */
+    @ApiModelProperty("拥有的课程id或题库id或考试重点")
+    private Long possessId;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long createTime;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+}

+ 41 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserEditBo.java

@@ -0,0 +1,41 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 【请填写功能名称】编辑对象 order_possess_user
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】编辑对象")
+public class OrderPossessUserEditBo {
+
+
+    /** 用户id */
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /** 来源id  0 订单购买  1订单活动购买  2 等级解锁 */
+    @ApiModelProperty("来源id  0 订单购买  1订单活动购买  2 等级解锁")
+    private Integer 
+sourceId;
+
+    /** 解锁类型 0课程 1题库  2考试重点 */
+    @ApiModelProperty("解锁类型 0课程 1题库  2考试重点")
+    private Integer typeId;
+
+    /** 拥有的课程id或题库id或考试重点 */
+    @ApiModelProperty("拥有的课程id或题库id或考试重点")
+    private Long possessId;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+}

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OrderPossessUserQueryBo.java

@@ -0,0 +1,46 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 【请填写功能名称】分页查询对象 order_possess_user
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("【请填写功能名称】分页查询对象")
+public class OrderPossessUserQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 解锁类型 0课程 1题库  2考试重点 */
+	@ApiModelProperty("解锁类型 0课程 1题库  2考试重点")
+	private Integer typeId;
+	/** 拥有的课程id或题库id或考试重点 */
+	@ApiModelProperty("拥有的课程id或题库id或考试重点")
+	private Long possessId;
+
+}

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanAddBo.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 【请填写功能名称】添加对象 user_plan
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】添加对象")
+public class UserPlanAddBo {
+
+    /** 计划json格式 */
+    @ApiModelProperty("计划json格式")
+    private String schedule;
+    /** 考试日期 */
+    @ApiModelProperty("考试日期")
+    private Long examDate;
+    /** 提醒时间 */
+    @ApiModelProperty("提醒时间")
+    private String reminderTime;
+    /** 0周日  1周一 2周二 3周三 4周四 5周五 6周六 */
+    @ApiModelProperty("0周日  1周一 2周二 3周三 4周四 5周五 6周六")
+    private Integer studyCount;
+    /** 复习天数 */
+    @ApiModelProperty("复习天数")
+    private Long studyDay;
+    /** 结束时间 */
+    @ApiModelProperty("结束时间")
+    private Long endTime;
+    /** 起始时间 */
+    @ApiModelProperty("起始时间")
+    private Long startTime;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long createTime;
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+    /** 0 失效 1启用 */
+    @ApiModelProperty("0 失效 1启用")
+    private Integer status;
+    /** 总结数 */
+    @ApiModelProperty("总结数")
+    private Long pitchNum;
+    /** 已学习节数 */
+    @ApiModelProperty("已学习节数")
+    private Long studyNum;
+}

+ 24 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceAddBo.java

@@ -0,0 +1,24 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 【请填写功能名称】添加对象 user_plan_cource
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】添加对象")
+public class UserPlanCourceAddBo {
+
+    /** 课程或题库学习计划 */
+    @ApiModelProperty("课程或题库学习计划")
+    private Long sourceId;
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceEditBo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 【请填写功能名称】编辑对象 user_plan_cource
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】编辑对象")
+public class UserPlanCourceEditBo {
+
+
+    /** 计划id */
+    @ApiModelProperty("计划id")
+    private Long planId;
+
+    /** 课程或题库学习计划 */
+    @ApiModelProperty("课程或题库学习计划")
+    private Long sourceId;
+}

+ 43 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanCourceQueryBo.java

@@ -0,0 +1,43 @@
+package com.zhongzheng.modules.user.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;
+
+/**
+ * 【请填写功能名称】分页查询对象 user_plan_cource
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("【请填写功能名称】分页查询对象")
+public class UserPlanCourceQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 课程或题库学习计划 */
+	@ApiModelProperty("课程或题库学习计划")
+	private Long sourceId;
+
+}

+ 72 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanEditBo.java

@@ -0,0 +1,72 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 【请填写功能名称】编辑对象 user_plan
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】编辑对象")
+public class UserPlanEditBo {
+
+
+    /** 用户id */
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /** 计划json格式 */
+    @ApiModelProperty("计划json格式")
+    private String schedule;
+
+    /** 考试日期 */
+    @ApiModelProperty("考试日期")
+    private Long examDate;
+
+    /** 提醒时间 */
+    @ApiModelProperty("提醒时间")
+    private String reminderTime;
+
+    /** 0周日  1周一 2周二 3周三 4周四 5周五 6周六 */
+    @ApiModelProperty("0周日  1周一 2周二 3周三 4周四 5周五 6周六")
+    private Integer studyCount;
+
+    /** 复习天数 */
+    @ApiModelProperty("复习天数")
+    private Long studyDay;
+
+    /** 结束时间 */
+    @ApiModelProperty("结束时间")
+    private Long endTime;
+
+    /** 起始时间 */
+    @ApiModelProperty("起始时间")
+    private Long startTime;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long updateTime;
+
+    /** 0 失效 1启用 */
+    @ApiModelProperty("0 失效 1启用")
+    private Integer status;
+
+    /** 总结数 */
+    @ApiModelProperty("总结数")
+    private Long pitchNum;
+
+    /** 已学习节数 */
+    @ApiModelProperty("已学习节数")
+    private Long studyNum;
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long planId;
+}

+ 74 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserPlanQueryBo.java

@@ -0,0 +1,74 @@
+package com.zhongzheng.modules.user.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;
+
+/**
+ * 【请填写功能名称】分页查询对象 user_plan
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("【请填写功能名称】分页查询对象")
+public class UserPlanQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 计划json格式 */
+	@ApiModelProperty("计划json格式")
+	private String schedule;
+	/** 考试日期 */
+	@ApiModelProperty("考试日期")
+	private Long examDate;
+	/** 提醒时间 */
+	@ApiModelProperty("提醒时间")
+	private String reminderTime;
+	/** 0周日  1周一 2周二 3周三 4周四 5周五 6周六 */
+	@ApiModelProperty("0周日  1周一 2周二 3周三 4周四 5周五 6周六,例如[1,2,3,4,5]")
+	private Long[] studyCount;
+	/** 复习天数 */
+	@ApiModelProperty("复习天数")
+	private Long studyDay;
+	/** 结束时间 */
+	@ApiModelProperty("结束时间")
+	private Long endTime;
+	/** 起始时间 */
+	@ApiModelProperty("起始时间")
+	private Long startTime;
+	/** 0 失效 1启用 */
+	@ApiModelProperty("0 失效 1启用")
+	private Integer status;
+	/** 总结数 */
+	@ApiModelProperty("总结数")
+	private Long pitchNum;
+	/** 已学习节数 */
+	@ApiModelProperty("已学习节数")
+	private Long studyNum;
+
+	/** 定制的课程 */
+	@ApiModelProperty("定制的课程")
+	private String[] courseId;
+
+}

+ 49 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/OrderPossessUser.java

@@ -0,0 +1,49 @@
+package com.zhongzheng.modules.user.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 【请填写功能名称】对象 order_possess_user
+ * 
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("order_possess_user")
+public class OrderPossessUser implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** 用户id */
+    @TableId(value = "user_id")
+    private Long userId;
+
+    /** 来源id  0 订单购买  1订单活动购买  2 等级解锁 */
+    @TableId(value = "source_id")
+    private Integer sourceId;
+
+    /** 解锁类型 0课程 1题库  2考试重点 */
+    private Integer typeId;
+
+    /** 拥有的课程id或题库id或考试重点 */
+    private Long possessId;
+
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+
+}

+ 73 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserPlan.java

@@ -0,0 +1,73 @@
+package com.zhongzheng.modules.user.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;
+
+/**
+ * 【请填写功能名称】对象 user_plan
+ * 
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("user_plan")
+public class UserPlan implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** 用户id */
+    @TableId(value = "user_id")
+    private Long userId;
+
+    /** 计划json格式 */
+    private String schedule;
+
+    /** 考试日期 */
+    private Long examDate;
+
+    /** 提醒时间 */
+    private String reminderTime;
+
+    /** 0周日  1周一 2周二 3周三 4周四 5周五 6周六 */
+    private Integer studyCount;
+
+    /** 复习天数 */
+    private Long studyDay;
+
+    /** 结束时间 */
+    private Long endTime;
+
+    /** 起始时间 */
+    private Long startTime;
+
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+
+    /** $column.columnComment */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+
+    /** 0 失效 1启用 */
+    private Integer status;
+
+    /** 总结数 */
+    private Long pitchNum;
+
+    /** 已学习节数 */
+    private Long studyNum;
+
+    /** $column.columnComment */
+    @TableId(value = "plan_id")
+    private Long planId;
+
+}

+ 34 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserPlanCource.java

@@ -0,0 +1,34 @@
+package com.zhongzheng.modules.user.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;
+
+/**
+ * 【请填写功能名称】对象 user_plan_cource
+ * 
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("user_plan_cource")
+public class UserPlanCource implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+
+    /** 计划id */
+    @TableId(value = "plan_id")
+    private Long planId;
+
+    /** 课程或题库学习计划 */
+    private Long sourceId;
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/OrderPossessUserMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.user.mapper;
+
+import com.zhongzheng.modules.user.domain.OrderPossessUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface OrderPossessUserMapper extends BaseMapper<OrderPossessUser> {
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserPlanCourceMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.user.mapper;
+
+import com.zhongzheng.modules.user.domain.UserPlanCource;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface UserPlanCourceMapper extends BaseMapper<UserPlanCource> {
+
+}

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserPlanMapper.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.user.mapper;
+
+import com.zhongzheng.modules.exam.vo.ExamArrangementTimeVo;
+import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
+import com.zhongzheng.modules.user.domain.UserPlan;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.user.vo.CoursePlanVo;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface UserPlanMapper extends BaseMapper<UserPlan> {
+
+    CoursePlanVo selectByCourse(UserPlanQueryBo bo);
+
+    ExamArrangementTimeVo selectByExam(Long categoryId);
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IOrderPossessUserService.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.user.service;
+
+import com.zhongzheng.modules.user.domain.OrderPossessUser;
+import com.zhongzheng.modules.user.vo.OrderPossessUserVo;
+import com.zhongzheng.modules.user.bo.OrderPossessUserQueryBo;
+import com.zhongzheng.modules.user.bo.OrderPossessUserAddBo;
+import com.zhongzheng.modules.user.bo.OrderPossessUserEditBo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface IOrderPossessUserService extends IService<OrderPossessUser> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	OrderPossessUserVo queryById(Long userId);
+
+	/**
+	 * 查询列表
+	 */
+	List<OrderPossessUserVo> queryList(OrderPossessUserQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入【请填写功能名称】
+	 * @param bo 【请填写功能名称】新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(OrderPossessUserAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改【请填写功能名称】
+	 * @param bo 【请填写功能名称】编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(OrderPossessUserEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserPlanCourceService.java

@@ -0,0 +1,52 @@
+package com.zhongzheng.modules.user.service;
+
+import com.zhongzheng.modules.user.domain.UserPlanCource;
+import com.zhongzheng.modules.user.vo.UserPlanCourceVo;
+import com.zhongzheng.modules.user.bo.UserPlanCourceQueryBo;
+import com.zhongzheng.modules.user.bo.UserPlanCourceAddBo;
+import com.zhongzheng.modules.user.bo.UserPlanCourceEditBo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface IUserPlanCourceService extends IService<UserPlanCource> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	UserPlanCourceVo queryById(Long planId);
+
+	/**
+	 * 查询列表
+	 */
+	List<UserPlanCourceVo> queryList(UserPlanCourceQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入【请填写功能名称】
+	 * @param bo 【请填写功能名称】新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(UserPlanCourceAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改【请填写功能名称】
+	 * @param bo 【请填写功能名称】编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(UserPlanCourceEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 61 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserPlanService.java

@@ -0,0 +1,61 @@
+package com.zhongzheng.modules.user.service;
+
+import com.zhongzheng.modules.user.domain.UserPlan;
+import com.zhongzheng.modules.user.vo.UserPlanVo;
+import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
+import com.zhongzheng.modules.user.bo.UserPlanAddBo;
+import com.zhongzheng.modules.user.bo.UserPlanEditBo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.text.ParseException;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface IUserPlanService extends IService<UserPlan> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	UserPlanVo queryById(Long userId);
+
+	/**
+	 * 查询列表
+	 */
+	List<UserPlanVo> queryList(UserPlanQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入【请填写功能名称】
+	 * @param bo 【请填写功能名称】新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(UserPlanAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改【请填写功能名称】
+	 * @param bo 【请填写功能名称】编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(UserPlanEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
+	/**
+	 * 校验并删除数据
+	 * @param bo
+	 * @return
+	 */
+	UserPlanVo generate(UserPlanQueryBo bo) throws ParseException;
+}

+ 100 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/OrderPossessUserServiceImpl.java

@@ -0,0 +1,100 @@
+package com.zhongzheng.modules.user.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+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 com.zhongzheng.modules.user.bo.OrderPossessUserAddBo;
+import com.zhongzheng.modules.user.bo.OrderPossessUserQueryBo;
+import com.zhongzheng.modules.user.bo.OrderPossessUserEditBo;
+import com.zhongzheng.modules.user.domain.OrderPossessUser;
+import com.zhongzheng.modules.user.mapper.OrderPossessUserMapper;
+import com.zhongzheng.modules.user.vo.OrderPossessUserVo;
+import com.zhongzheng.modules.user.service.IOrderPossessUserService;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Service
+public class OrderPossessUserServiceImpl extends ServiceImpl<OrderPossessUserMapper, OrderPossessUser> implements IOrderPossessUserService {
+
+    @Override
+    public OrderPossessUserVo queryById(Long userId){
+        OrderPossessUser db = this.baseMapper.selectById(userId);
+        return BeanUtil.toBean(db, OrderPossessUserVo.class);
+    }
+
+    @Override
+    public List<OrderPossessUserVo> queryList(OrderPossessUserQueryBo bo) {
+        LambdaQueryWrapper<OrderPossessUser> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getTypeId() != null, OrderPossessUser::getTypeId, bo.getTypeId());
+        lqw.eq(bo.getPossessId() != null, OrderPossessUser::getPossessId, bo.getPossessId());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<OrderPossessUserVo> entity2Vo(Collection<OrderPossessUser> collection) {
+        List<OrderPossessUserVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, OrderPossessUserVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<OrderPossessUser> page = (Page<OrderPossessUser>)collection;
+            Page<OrderPossessUserVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(OrderPossessUserAddBo bo) {
+        OrderPossessUser add = BeanUtil.toBean(bo, OrderPossessUser.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(OrderPossessUserEditBo bo) {
+        OrderPossessUser update = BeanUtil.toBean(bo, OrderPossessUser.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(OrderPossessUser entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 96 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserPlanCourceServiceImpl.java

@@ -0,0 +1,96 @@
+package com.zhongzheng.modules.user.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.utils.DateUtils;
+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 com.zhongzheng.modules.user.bo.UserPlanCourceAddBo;
+import com.zhongzheng.modules.user.bo.UserPlanCourceQueryBo;
+import com.zhongzheng.modules.user.bo.UserPlanCourceEditBo;
+import com.zhongzheng.modules.user.domain.UserPlanCource;
+import com.zhongzheng.modules.user.mapper.UserPlanCourceMapper;
+import com.zhongzheng.modules.user.vo.UserPlanCourceVo;
+import com.zhongzheng.modules.user.service.IUserPlanCourceService;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Service
+public class UserPlanCourceServiceImpl extends ServiceImpl<UserPlanCourceMapper, UserPlanCource> implements IUserPlanCourceService {
+
+    @Override
+    public UserPlanCourceVo queryById(Long planId){
+        UserPlanCource db = this.baseMapper.selectById(planId);
+        return BeanUtil.toBean(db, UserPlanCourceVo.class);
+    }
+
+    @Override
+    public List<UserPlanCourceVo> queryList(UserPlanCourceQueryBo bo) {
+        LambdaQueryWrapper<UserPlanCource> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getSourceId() != null, UserPlanCource::getSourceId, bo.getSourceId());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<UserPlanCourceVo> entity2Vo(Collection<UserPlanCource> collection) {
+        List<UserPlanCourceVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, UserPlanCourceVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<UserPlanCource> page = (Page<UserPlanCource>)collection;
+            Page<UserPlanCourceVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(UserPlanCourceAddBo bo) {
+        UserPlanCource add = BeanUtil.toBean(bo, UserPlanCource.class);
+        validEntityBeforeSave(add);
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(UserPlanCourceEditBo bo) {
+        UserPlanCource update = BeanUtil.toBean(bo, UserPlanCource.class);
+        validEntityBeforeSave(update);
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(UserPlanCource entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 405 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserPlanServiceImpl.java

@@ -0,0 +1,405 @@
+package com.zhongzheng.modules.user.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.exam.vo.ExamArrangementTimeVo;
+import com.zhongzheng.modules.user.vo.CalendarStudyVo;
+import com.zhongzheng.modules.user.vo.CoursePlanVo;
+import com.zhongzheng.modules.user.vo.DayStudyVo;
+import io.micrometer.core.instrument.util.TimeUtils;
+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 com.zhongzheng.modules.user.bo.UserPlanAddBo;
+import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
+import com.zhongzheng.modules.user.bo.UserPlanEditBo;
+import com.zhongzheng.modules.user.domain.UserPlan;
+import com.zhongzheng.modules.user.mapper.UserPlanMapper;
+import com.zhongzheng.modules.user.vo.UserPlanVo;
+import com.zhongzheng.modules.user.service.IUserPlanService;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Service
+public class UserPlanServiceImpl extends ServiceImpl<UserPlanMapper, UserPlan> implements IUserPlanService {
+
+
+    @Override
+    public UserPlanVo queryById(Long userId){
+        UserPlan db = this.baseMapper.selectById(userId);
+        return BeanUtil.toBean(db, UserPlanVo.class);
+    }
+
+    @Override
+    public List<UserPlanVo> queryList(UserPlanQueryBo bo) {
+        LambdaQueryWrapper<UserPlan> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getSchedule()), UserPlan::getSchedule, bo.getSchedule());
+        lqw.eq(bo.getExamDate() != null, UserPlan::getExamDate, bo.getExamDate());
+        lqw.eq(StrUtil.isNotBlank(bo.getReminderTime()), UserPlan::getReminderTime, bo.getReminderTime());
+        lqw.eq(bo.getStudyCount() != null, UserPlan::getStudyCount, bo.getStudyCount());
+        lqw.eq(bo.getStudyDay() != null, UserPlan::getStudyDay, bo.getStudyDay());
+        lqw.eq(bo.getEndTime() != null, UserPlan::getEndTime, bo.getEndTime());
+        lqw.eq(bo.getStartTime() != null, UserPlan::getStartTime, bo.getStartTime());
+        lqw.eq(bo.getStatus() != null, UserPlan::getStatus, bo.getStatus());
+        lqw.eq(bo.getPitchNum() != null, UserPlan::getPitchNum, bo.getPitchNum());
+        lqw.eq(bo.getStudyNum() != null, UserPlan::getStudyNum, bo.getStudyNum());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<UserPlanVo> entity2Vo(Collection<UserPlan> collection) {
+        List<UserPlanVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, UserPlanVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<UserPlan> page = (Page<UserPlan>)collection;
+            Page<UserPlanVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(UserPlanAddBo bo) {
+        UserPlan add = BeanUtil.toBean(bo, UserPlan.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        return this.save(add);
+    }
+
+    @Override
+    public Boolean updateByEditBo(UserPlanEditBo bo) {
+        UserPlan update = BeanUtil.toBean(bo, UserPlan.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(UserPlan entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+
+    @Override
+    public UserPlanVo generate(UserPlanQueryBo bo) throws ParseException {
+        //自定义学习计划,自动生成计划
+        if (bo.getCourseId() != null && bo.getStudyCount() == null){
+            UserPlanVo userPlanVo = generateSelf(bo);
+            return userPlanVo;
+        }else{
+            UserPlanVo userPlanVo = generateSelfBo(bo);
+            return userPlanVo;
+        }
+    }
+
+    private UserPlanVo generateSelfBo(UserPlanQueryBo bo) throws ParseException {
+        //获得当前课程最近一个考试计划  考生考生计划或者最近考试计划
+        CoursePlanVo coursePlanVo = baseMapper.selectByCourse(bo);
+
+        //最近考试时间七天前到现在的天数,学习视频时长
+        Date date1 = new Date(bo.getExamDate()*1000L);
+        //获得相隔天数
+        Long[] longs =bo.getStudyCount();
+        int dutyDays = getDutyDays(new Date(), date1,longs,bo.getStudyDay());
+
+        //计算每天需要学习多少节课
+        int Sec = (int)Math.ceil((double)coursePlanVo.getSectionNum()/dutyDays);
+
+        //总节数
+        Integer sectionNum = coursePlanVo.getSectionNum();
+
+        //获得今天日期,将每天节数写入
+        List<CalendarStudyVo> calendarStudyVos = new ArrayList<>();
+        Calendar cal = Calendar.getInstance();
+        int year = cal.get(Calendar.YEAR);
+        //课程节数不足结束循环
+        while (sectionNum != 0 ) {
+            int month=0;
+            //获得当月
+            if (!CollectionUtils.isEmpty(calendarStudyVos) && calendarStudyVos.size() > 0){
+                for (CalendarStudyVo calendarStudyVo : calendarStudyVos) {
+                    if (month < calendarStudyVo.getMonth()){
+                        month = Convert.toInt(calendarStudyVo.getMonth()+1);
+                    }
+                }
+            }else {
+                month = cal.get(Calendar.MONTH) + 1;
+            }
+
+            Long firstDayOfMonth = getFirstDayOfMonth(month);
+            Long lastDayOfMonth = getLastDayOfMonth(month);
+
+            List<DayStudyVo> dayStudyVos = getDays(firstDayOfMonth, lastDayOfMonth);
+            for (DayStudyVo dayStudyVo : dayStudyVos) {
+                if (dayStudyVo.getDate() > Calendar.getInstance().get(Calendar.DAY_OF_MONTH) && month == (cal.get(Calendar.MONTH) + 1) && ifTrue(dayStudyVo.getStudyDay(),longs)) {
+                    if (Sec > sectionNum) {
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(Sec));
+                        sectionNum = sectionNum-Sec;
+                    }else if (Sec <= sectionNum){
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(sectionNum));
+                        sectionNum = 0;
+                    }
+                }else if(month != (cal.get(Calendar.MONTH) + 1) && ifTrue(dayStudyVo.getStudyDay(),longs)){
+                    if (Sec > sectionNum) {
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(Sec));
+                        sectionNum = sectionNum-Sec;
+                    }else if (Sec <= sectionNum){
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(sectionNum));
+                        sectionNum = 0;
+                    }
+                }
+            }
+            CalendarStudyVo calendarStudyVo = new CalendarStudyVo();
+            calendarStudyVo.setYear(Convert.toLong(year));
+            calendarStudyVo.setMonth(Convert.toLong(month));
+            calendarStudyVo.setDayStudyList(dayStudyVos);
+            calendarStudyVos.add(calendarStudyVo);
+        }
+
+        //查询是否解锁题库
+
+        UserPlanVo userPlanVo = new UserPlanVo();
+        userPlanVo.setCalendarStudyVo(calendarStudyVos);
+        List<CoursePlanVo> coursePlanVos = new ArrayList<>();
+        coursePlanVos.add(coursePlanVo);
+        userPlanVo.setCoursePlanVo(coursePlanVos);
+        return userPlanVo;
+    }
+
+    private UserPlanVo generateSelf(UserPlanQueryBo bo) throws ParseException {
+        //获得当前课程最近一个考试计划  考生考生计划或者最近考试计划
+        CoursePlanVo coursePlanVo = baseMapper.selectByCourse(bo);
+        ExamArrangementTimeVo examArrangementTimeVo = baseMapper.selectByExam(coursePlanVo.getCategoryId());
+
+        //最近考试时间七天前到现在的天数,学习视频时长
+        Date date1 = new Date(examArrangementTimeVo.getStartTime()*1000L);
+        //获得相隔天数
+        Long[] longs ={1L,2L,3L,4L,5L,6L};
+        int dutyDays = getDutyDays(new Date(), date1,longs,7L);
+
+        //计算每天需要学习多少节课
+        int Sec = (int)Math.ceil((double)coursePlanVo.getSectionNum()/dutyDays);
+
+        //总节数
+        Integer sectionNum = coursePlanVo.getSectionNum();
+
+        //获得今天日期,将每天节数写入
+        List<CalendarStudyVo> calendarStudyVos = new ArrayList<>();
+        Calendar cal = Calendar.getInstance();
+        int year = cal.get(Calendar.YEAR);
+        //课程节数不足结束循环
+        while (sectionNum != 0 ) {
+            int month=0;
+            //获得当月
+            if (!CollectionUtils.isEmpty(calendarStudyVos) && calendarStudyVos.size() > 0){
+                for (CalendarStudyVo calendarStudyVo : calendarStudyVos) {
+                        if (month < calendarStudyVo.getMonth()){
+                            month = Convert.toInt(calendarStudyVo.getMonth()+1);
+                        }
+                }
+            }else {
+                month = cal.get(Calendar.MONTH) + 1;
+            }
+
+            Long firstDayOfMonth = getFirstDayOfMonth(month);
+            Long lastDayOfMonth = getLastDayOfMonth(month);
+
+            List<DayStudyVo> dayStudyVos = getDays(firstDayOfMonth, lastDayOfMonth);
+            for (DayStudyVo dayStudyVo : dayStudyVos) {
+                if (dayStudyVo.getDate() > Calendar.getInstance().get(Calendar.DAY_OF_MONTH) && month == (cal.get(Calendar.MONTH) + 1) && ifTrue(dayStudyVo.getStudyDay(),longs)) {
+                    if (Sec > sectionNum) {
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(Sec));
+                        sectionNum = sectionNum-Sec;
+                    }else if (Sec <= sectionNum){
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(sectionNum));
+                        sectionNum = 0;
+                    }
+                }else if(month != (cal.get(Calendar.MONTH) + 1) && ifTrue(dayStudyVo.getStudyDay(),longs)){
+                    if (Sec > sectionNum) {
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(Sec));
+                        sectionNum = sectionNum-Sec;
+                    }else if (Sec <= sectionNum){
+                        dayStudyVo.setStudyCourseKnob(Convert.toLong(sectionNum));
+                        sectionNum = 0;
+                    }
+                }
+            }
+            CalendarStudyVo calendarStudyVo = new CalendarStudyVo();
+            calendarStudyVo.setYear(Convert.toLong(year));
+            calendarStudyVo.setMonth(Convert.toLong(month));
+            calendarStudyVo.setDayStudyList(dayStudyVos);
+            calendarStudyVos.add(calendarStudyVo);
+        }
+
+        //查询是否解锁题库
+
+        UserPlanVo userPlanVo = new UserPlanVo();
+        userPlanVo.setCalendarStudyVo(calendarStudyVos);
+        List<CoursePlanVo> coursePlanVos = new ArrayList<>();
+        coursePlanVos.add(coursePlanVo);
+        userPlanVo.setCoursePlanVo(coursePlanVos);
+        return userPlanVo;
+    }
+
+    private boolean ifTrue(Long studyDay,Long[] studyDays) {
+        for (Long day : studyDays) {
+            if (day.equals(studyDay)){
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * 计算两个日期之间相差的天数
+     * @param bdate  较大的时间
+     * @return 相差天数
+     * @throws ParseException
+     */
+    public static int daysBetween(Date bdate) throws ParseException
+    {
+        Date smdate=new Date();
+        //获得七天前的日期
+        Calendar c = Calendar.getInstance();
+        c.setTime(bdate);
+        c.add(Calendar.DATE, - 7);
+        bdate = c.getTime();
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
+        smdate=sdf.parse(sdf.format(smdate));
+        bdate=sdf.parse(sdf.format(bdate));
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(smdate);
+        long time1 = cal.getTimeInMillis();
+        cal.setTime(bdate);
+        long time2 = cal.getTimeInMillis();
+        long between_days=(time2-time1)/(1000*3600*24);
+
+        return Integer.parseInt(String.valueOf(between_days))-1;
+    }
+
+
+
+    private static List<DayStudyVo> getDays(long time_start, long time_end) {
+        try {
+            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            Date c_start = dateFormat.parse(dateFormat.format(new Date(time_start * 1000).getTime()));
+            Date c_end = dateFormat.parse(dateFormat.format(new Date(time_end * 1000).getTime()));
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(c_start);
+            Calendar tempEnd = Calendar.getInstance();
+            tempEnd.setTime(c_end);
+            tempEnd.add(Calendar.DATE, +1);
+            List<DayStudyVo> dayStudyVos = new ArrayList<>();
+            while (tempStart.before(tempEnd)) {
+                String format = dateFormat.format(tempStart.getTime());
+                String strh = format.substring(format.length() -2,format.length());
+                int week = tempStart.get(Calendar.DAY_OF_WEEK)- 1;
+                DayStudyVo dayStudyVo = new DayStudyVo();
+                dayStudyVo.setStudyDay(Convert.toLong(week));
+                dayStudyVo.setDate(Convert.toLong(strh));
+                dayStudyVos.add(dayStudyVo);
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            }
+            return dayStudyVos;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 获取当前月第一天
+     * @param month
+     * @return
+     */
+    public static Long getFirstDayOfMonth(int month) {
+        Calendar calendar = Calendar.getInstance();
+        // 设置月份
+        calendar.set(Calendar.MONTH, month - 1);
+        // 获取某月最小天数
+        int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+        // 设置日历中月份的最小天数
+        calendar.set(Calendar.DAY_OF_MONTH, firstDay);
+
+        Date time = calendar.getTime();
+        return time.getTime() / 1000;
+    }
+
+    public static Long getLastDayOfMonth(int month) {
+        Calendar calendar = Calendar.getInstance();
+        // 设置月份
+        calendar.set(Calendar.MONTH, month - 1);
+        // 获取某月最大天数
+        int lastDay=0;
+        //2月的平年瑞年天数
+        if(month==2) {
+            lastDay = calendar.getLeastMaximum(Calendar.DAY_OF_MONTH);
+        }else {
+            lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        }
+        // 设置日历中月份的最大天数
+        calendar.set(Calendar.DAY_OF_MONTH, lastDay);
+        Date time = calendar.getTime();
+        return time.getTime() / 1000;
+    }
+
+
+
+    private static int getDutyDays(Date  startDateStr, Date endDateStr,Long[] longs,Long studyDay) throws ParseException {
+        int result = 0;
+        Date startDate = startDateStr;
+        Calendar c = Calendar.getInstance();
+        c.setTime(startDate);
+        c.add(Calendar.DATE, - Convert.toInt(studyDay));
+        startDate = c.getTime();
+        Date endDate = endDateStr;
+
+        while (startDate.compareTo(endDate) <= 0) {
+            for (Long integer : longs) {
+                if (startDate.getDay() != integer) {
+                    result++;
+                }
+            }
+            startDate.setDate(startDate.getDate() + 1);
+        }
+        return result-1;
+    }
+
+}

+ 31 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/CalendarStudyVo.java

@@ -0,0 +1,31 @@
+package com.zhongzheng.modules.user.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】视图对象 mall_package
+ *
+ * @author change
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】视图对象")
+public class CalendarStudyVo {
+    private static final long serialVersionUID = 1L;
+
+    /** 月份 */
+    @ApiModelProperty("月份")
+    private Long month;
+
+    /** 年份 */
+    @ApiModelProperty("年份")
+    private Long year;
+
+    /** 月份天 */
+    @ApiModelProperty("月份天")
+    private List<DayStudyVo> dayStudyList;
+}

+ 44 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/CoursePlanVo.java

@@ -0,0 +1,44 @@
+package com.zhongzheng.modules.user.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * 课程视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-05-19
+ */
+@Data
+@ApiModel("课程视图对象")
+public class CoursePlanVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 课程ID */
+	@ApiModelProperty("课程ID")
+	private Long courseId;
+
+	/** 分类ID */
+	@Excel(name = "分类ID")
+	@ApiModelProperty("分类ID")
+	private Long categoryId;
+	/** 课程名称 */
+	@Excel(name = "课程名称")
+	@ApiModelProperty("课程名称")
+	private String courseName;
+	@ApiModelProperty("章数量")
+	private Integer chapterNum;
+	@ApiModelProperty("节数量")
+	private Integer sectionNum;
+	@ApiModelProperty("分类名")
+	private String categoryName;
+
+
+
+
+}

+ 28 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/DayStudyVo.java

@@ -0,0 +1,28 @@
+package com.zhongzheng.modules.user.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 【请填写功能名称】视图对象 mall_package
+ *
+ * @author change
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】视图对象")
+public class DayStudyVo {
+
+    private static final long serialVersionUID = 1L;
+    /** 当月号数 */
+    @ApiModelProperty("当月号数")
+    private Long date;
+
+    /** 当月号数 */
+    @ApiModelProperty("0周日  1周一 2周二 3周三 4周四 5周五 6周六")
+    private Long studyDay;
+
+    @ApiModelProperty("当天学习节数")
+    private Long studyCourseKnob;
+}

+ 36 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/OrderPossessUserVo.java

@@ -0,0 +1,36 @@
+package com.zhongzheng.modules.user.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.util.Date;
+
+
+
+/**
+ * 【请填写功能名称】视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】视图对象")
+public class OrderPossessUserVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 用户id */
+	@ApiModelProperty("用户id")
+	private Long userId;
+
+	/** 解锁类型 0课程 1题库  2考试重点 */
+	@Excel(name = "解锁类型 0课程 1题库  2考试重点")
+	@ApiModelProperty("解锁类型 0课程 1题库  2考试重点")
+	private Integer typeId;
+	/** 拥有的课程id或题库id或考试重点 */
+	@Excel(name = "拥有的课程id或题库id或考试重点")
+	@ApiModelProperty("拥有的课程id或题库id或考试重点")
+	private Long possessId;
+
+}

+ 32 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserPlanCourceVo.java

@@ -0,0 +1,32 @@
+package com.zhongzheng.modules.user.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.util.Date;
+
+
+
+/**
+ * 【请填写功能名称】视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】视图对象")
+public class UserPlanCourceVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 计划id */
+	@ApiModelProperty("计划id")
+	private Long planId;
+
+	/** 课程或题库学习计划 */
+	@Excel(name = "课程或题库学习计划")
+	@ApiModelProperty("课程或题库学习计划")
+	private Long sourceId;
+
+}

+ 78 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/vo/UserPlanVo.java

@@ -0,0 +1,78 @@
+package com.zhongzheng.modules.user.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.util.Date;
+import java.util.List;
+
+
+/**
+ * 【请填写功能名称】视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Data
+@ApiModel("【请填写功能名称】视图对象")
+public class UserPlanVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 用户id */
+	@ApiModelProperty("用户id")
+	private Long userId;
+
+	/** 计划json格式 */
+	@Excel(name = "计划json格式")
+	@ApiModelProperty("计划json格式")
+	private String schedule;
+	/** 考试日期 */
+	@Excel(name = "考试日期")
+	@ApiModelProperty("考试日期")
+	private Long examDate;
+	/** 提醒时间 */
+	@Excel(name = "提醒时间")
+	@ApiModelProperty("提醒时间")
+	private String reminderTime;
+	/** 0周日  1周一 2周二 3周三 4周四 5周五 6周六 */
+	@Excel(name = "0周日  1周一 2周二 3周三 4周四 5周五 6周六")
+	@ApiModelProperty("0周日  1周一 2周二 3周三 4周四 5周五 6周六")
+	private Integer studyCount;
+	/** 复习天数 */
+	@Excel(name = "复习天数")
+	@ApiModelProperty("复习天数")
+	private Long studyDay;
+	/** 结束时间 */
+	@Excel(name = "结束时间")
+	@ApiModelProperty("结束时间")
+	private Long endTime;
+	/** 起始时间 */
+	@Excel(name = "起始时间")
+	@ApiModelProperty("起始时间")
+	private Long startTime;
+	/** 0 失效 1启用 */
+	@Excel(name = "0 失效 1启用")
+	@ApiModelProperty("0 失效 1启用")
+	private Integer status;
+	/** 总结数 */
+	@Excel(name = "总结数")
+	@ApiModelProperty("总结数")
+	private Long pitchNum;
+	/** 已学习节数 */
+	@Excel(name = "已学习节数")
+	@ApiModelProperty("已学习节数")
+	private Long studyNum;
+
+	/** 学习课程 */
+	@Excel(name = "学习课程")
+	@ApiModelProperty("学习课程")
+	private List<CoursePlanVo> coursePlanVo;
+
+	/** 日历计划学习时间 */
+	@Excel(name = "日历计划学习时间")
+	@ApiModelProperty("日历计划学习时间")
+	private List<CalendarStudyVo> calendarStudyVo;
+
+}

+ 2 - 0
zhongzheng-system/src/main/resources/mapper/modules/activity/ActivityAdvertisingMapper.xml

@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id" column="id"/>
         <result property="adverUrl" column="adver_url"/>
         <result property="jumpUrl" column="jump_url"/>
+        <result property="sourceUrl" column="source_url"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
         <result property="startTime" column="start_time"/>
@@ -21,6 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id" column="id"/>
         <result property="adverUrl" column="adver_url"/>
         <result property="jumpUrl" column="jump_url"/>
+        <result property="sourceUrl" column="source_url"/>
         <result property="startTime" column="start_time"/>
         <result property="endTime" column="end_time"/>
         <result property="remarks" column="remarks"/>

+ 0 - 1
zhongzheng-system/src/main/resources/mapper/modules/exam/ExamArrangementMapper.xml

@@ -20,7 +20,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
         <result property="createTime" column="create_time"/>
         <result property="examTime" column="exam_time"/>
-        <result property="regGuide" column="reg_guide"/>
         <result property="examPeriod" column="exam_period"/>
         <result property="status" column="status"/>
         <result property="examForm" column="exam_form"/>

+ 17 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/OrderPossessUserMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.system.mapper.OrderPossessUserMapper">
+
+    <resultMap type="com.zhongzheng.modules.user.domain.OrderPossessUser" id="OrderPossessUserResult">
+        <result property="userId" column="user_id"/>
+        <result property="sourceId" column="source_id"/>
+        <result property="typeId" column="type_id"/>
+        <result property="possessId" column="possess_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+
+</mapper>

+ 13 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserPlanCourceMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.user.mapper.UserPlanCourceMapper">
+
+    <resultMap type="com.zhongzheng.modules.user.domain.UserPlanCource" id="UserPlanCourceResult">
+        <result property="planId" column="plan_id"/>
+        <result property="sourceId" column="source_id"/>
+    </resultMap>
+
+
+</mapper>

+ 77 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserPlanMapper.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.user.mapper.UserPlanMapper">
+
+    <resultMap type="com.zhongzheng.modules.user.domain.UserPlan" id="UserPlanResult">
+        <result property="userId" column="user_id"/>
+        <result property="schedule" column="schedule"/>
+        <result property="examDate" column="exam_date"/>
+        <result property="reminderTime" column="reminder_time"/>
+        <result property="studyCount" column="study_count"/>
+        <result property="studyDay" column="study_day"/>
+        <result property="endTime" column="end_time"/>
+        <result property="startTime" column="start_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="pitchNum" column="pitch_num"/>
+        <result property="studyNum" column="study_num"/>
+        <result property="planId" column="plan_id"/>
+    </resultMap>
+
+    <resultMap type="com.zhongzheng.modules.course.domain.Course" id="CourseResult">
+        <result property="courseId" column="course_id"/>
+        <result property="categoryId" column="category_id"/>
+        <result property="price" column="price"/>
+        <result property="duration" column="duration"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="coverUrl" column="cover_url"/>
+        <result property="introduction" column="introduction"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="teacherIds" column="teacher_ids"/>
+        <result property="courseName" column="course_name"/>
+        <result property="chapterNum" column="chapter_num"/>
+        <result property="sectionNum" column="section_num"/>
+        <result property="categoryName" column="category_name"/>
+    </resultMap>
+
+
+    <select id="selectByCourse" parameterType="com.zhongzheng.modules.course.bo.CourseQueryBo"  resultMap="CourseResult">
+        SELECT rs.course_name,
+        rs.course_id,rs.status,sum(section_num) as section_num,count(chapter_id)
+        as chapter_num,mc.category_name,mc.category_id,sum(total_time) as duration from
+        (SELECT c.*,count(cs.section_id) as section_num,cs.chapter_id,IFNULL(sum(cs.video_time),0) as total_time
+        FROM course c LEFT JOIN course_chapter cc on c.course_id = cc.course_id
+        LEFT JOIN course_section cs
+        on cc.chapter_id = cs.chapter_id
+        WHERE 1=1
+        <if test="course_id != null and course_id !='' ">
+            AND c.course_id in
+            <foreach collection="status" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        GROUP BY cs.chapter_id,c.course_id)rs LEFT JOIN major_category mc on rs.category_id = mc.category_id
+        GROUP BY course_id
+        limit 1
+    </select>
+
+    <select id="selectByExam" parameterType="Long"  resultMap="CourseResult">
+        SELECT
+            e.*
+        FROM
+            exam_arrangement s
+                LEFT JOIN exam_arrangement_time e ON e.arrangement_id = s.id
+        WHERE 1=1
+          AND s.status != 0 AND
+        <if test="categoryId != null and categoryId !='' ">
+          s.exam_type_id = #{categoryId}
+        </if>
+        ORDER BY e.start_time LIMIT 1
+    </select>
+</mapper>