Browse Source

add 乐团报名云教练订单,生效计划任务处理

周箭河 3 năm trước cách đây
mục cha
commit
c984b5a9f0

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherDao.java

@@ -2,7 +2,16 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.CloudTeacher;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
 
 public interface CloudTeacherDao extends BaseDAO<Long, CloudTeacher> {
 
+    /**
+     * 获取学生的云教练信息
+     *
+     * @param studentId
+     * @return
+     */
+    CloudTeacher getByStudentId(@Param("studentId") Integer studentId);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -3,6 +3,13 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.common.dal.BaseDAO;
 
+import java.util.List;
+
 public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
 
+    /**
+     * 获取未生效的云教练订单
+     * @return
+     */
+    List<CloudTeacherOrder> getNoStartCloudTeacherOrder();
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacher.java

@@ -34,7 +34,7 @@ public class CloudTeacher {
     private Date endTime;
 
     @ApiModelProperty(value="")
-    private Integer version;
+    private Integer version = 0;
 
     /**
     * 创建时间

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -95,6 +95,8 @@ public class CloudTeacherOrder {
     @ApiModelProperty(value = "更新时间")
     private Date updateTime;
 
+    private String musicGroupId;
+
     public Long getId() {
         return id;
     }
@@ -235,4 +237,12 @@ public class CloudTeacherOrder {
     public void setOrganId(Integer organId) {
         this.organId = organId;
     }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.entity.CloudTeacher;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.common.service.BaseService;
@@ -14,4 +15,18 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      */
     Boolean addOrderDetail2CloudTeacher(StudentPaymentOrder order);
 
+
+    /**
+     * 检测云教练是否开始生效,乐团上课后开始生效
+     * @return
+     */
+    Boolean checkCloudOrderStart();
+
+    /**
+     * 将生效的云教练订单加入
+     * @param cloudTeacherOrder
+     * @return
+     */
+    CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder);
+
 }

+ 72 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -1,18 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.date.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
@@ -21,6 +21,10 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private CloudTeacherDao cloudTeacherDao;
 
 
     @Override
@@ -49,4 +53,67 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         cloudTeacherOrderDao.insert(cloudTeacherOrder);
         return true;
     }
+
+    @Override
+    public Boolean checkCloudOrderStart() {
+        List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.getNoStartCloudTeacherOrder();
+        List<String> musicGroupIds = cloudTeacherOrders.stream().map(CloudTeacherOrder::getMusicGroupId).collect(Collectors.toList());
+        List<CourseSchedule> musicGroupsHasStartCourseNum = courseScheduleDao.getMusicGroupsHasStartCourseNum(musicGroupIds);
+        Set<String> musicGroupHasStartCourse = musicGroupsHasStartCourseNum.stream().map(CourseSchedule::getMusicGroupId).collect(Collectors.toSet());
+        for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
+            if (!musicGroupHasStartCourse.contains(cloudTeacherOrder.getMusicGroupId())) continue;
+            addStudentCloudTeacher(cloudTeacherOrder);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public CloudTeacher addStudentCloudTeacher(CloudTeacherOrder cloudTeacherOrder) {
+        Date nowDate = new Date();
+        CloudTeacher cloudTeacher = cloudTeacherDao.getByStudentId(cloudTeacherOrder.getStudentId());
+        Date startTime = null;
+        Date endTime = null;
+        Date endBaseTime = null;
+        if (cloudTeacher == null) {
+            cloudTeacher = new CloudTeacher();
+            startTime = DateUtil.trunc(nowDate);
+            endBaseTime = startTime;
+            if (cloudTeacherOrder.getType().equals(1)) {
+                endTime = DateUtil.addDays(startTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(2)) {
+                endTime = DateUtil.addMonths(startTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(3)) {
+                endTime = DateUtil.addYears(startTime, cloudTeacherOrder.getTime());
+            }
+            cloudTeacher.setStudentId(cloudTeacherOrder.getStudentId());
+            cloudTeacher.setLevel(cloudTeacher.getLevel());
+            cloudTeacher.setStartTime(startTime);
+            cloudTeacher.setEndTime(endTime);
+            cloudTeacherDao.insert(cloudTeacher);
+        } else {
+            startTime = cloudTeacher.getStartTime();
+            endBaseTime = cloudTeacher.getEndTime();
+            if (cloudTeacher.getEndTime().compareTo(nowDate) < 0) {
+                startTime = DateUtil.trunc(nowDate);
+                endBaseTime = startTime;
+            }
+            if (cloudTeacherOrder.getType().equals(1)) {
+                endTime = DateUtil.addDays(endBaseTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(2)) {
+                endTime = DateUtil.addMonths(endBaseTime, cloudTeacherOrder.getTime());
+            } else if (cloudTeacherOrder.getType().equals(3)) {
+                endTime = DateUtil.addYears(endBaseTime, cloudTeacherOrder.getTime());
+            }
+            cloudTeacher.setStartTime(startTime);
+            cloudTeacher.setEndTime(endTime);
+            cloudTeacher.setUpdateTime(nowDate);
+            cloudTeacherDao.update(cloudTeacher);
+        }
+        cloudTeacherOrder.setStartTime(endBaseTime);
+        cloudTeacherOrder.setEndTime(endTime);
+        cloudTeacherOrder.setStatus(2);
+        cloudTeacherOrderDao.update(cloudTeacherOrder);
+        return cloudTeacher;
+    }
 }

+ 77 - 71
mec-biz/src/main/resources/config/mybatis/CloudTeacherMapper.xml

@@ -1,79 +1,85 @@
 <?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.ym.mec.biz.dal.dao.CloudTeacherDao">
-  <resultMap id="CloudTeacher" type="com.ym.mec.biz.dal.entity.CloudTeacher">
-    <!--@mbg.generated-->
-    <!--@Table cloud_teacher-->
-    <id column="id_" property="id" />
-    <result column="student_id_" property="studentId" />
-    <result column="level_" property="level" />
-    <result column="start_time_" property="startTime" />
-    <result column="end_time_" property="endTime" />
-    <result column="version_" property="version" />
-    <result column="create_time_" property="createTime" />
-    <result column="update_time_" property="updateTime" />
-  </resultMap>
+    <resultMap id="CloudTeacher" type="com.ym.mec.biz.dal.entity.CloudTeacher">
+        <!--@mbg.generated-->
+        <!--@Table cloud_teacher-->
+        <id column="id_" property="id"/>
+        <result column="student_id_" property="studentId"/>
+        <result column="level_" property="level"/>
+        <result column="start_time_" property="startTime"/>
+        <result column="end_time_" property="endTime"/>
+        <result column="version_" property="version"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
 
-  <select id="get" parameterType="java.lang.Integer" resultMap="CloudTeacher">
-    <!--@mbg.generated-->
-    select * from cloud_teacher
-    where id_ = #{id}
-  </select>
-  <delete id="delete" parameterType="java.lang.Integer">
-    <!--@mbg.generated-->
-    delete from cloud_teacher
-    where id_ = #{id}
-  </delete>
-  <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher" useGeneratedKeys="true">
-    <!--@mbg.generated-->
-    insert into cloud_teacher (student_id_, level_, start_time_, end_time_, version_, create_time_, 
-      update_time_)
-    values (#{studentId}, #{level}, #{startTime}, #{endTime}, #{version}, #{createTime}, 
-      #{updateTime})
-  </insert>
-  <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher">
-    <!--@mbg.generated-->
-    update cloud_teacher
-    <set>
-      <if test="studentId != null">
-        student_id_ = #{studentId},
-      </if>
-      <if test="level != null">
-        level_ = #{level},
-      </if>
-      <if test="startTime != null">
-        start_time_ = #{startTime},
-      </if>
-      <if test="endTime != null">
-        end_time_ = #{endTime},
-      </if>
-      <if test="version != null">
-        version_ = #{version},
-      </if>
-      <if test="createTime != null">
-        create_time_ = #{createTime},
-      </if>
-      <if test="updateTime != null">
-        update_time_ = #{updateTime},
-      </if>
-    </set>
-    where id_ = #{id}
-  </update>
+    <select id="get" parameterType="java.lang.Integer" resultMap="CloudTeacher">
+        <!--@mbg.generated-->
+        select * from cloud_teacher
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from cloud_teacher
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into cloud_teacher (student_id_, level_, start_time_, end_time_, version_, create_time_,
+        update_time_)
+        values (#{studentId}, #{level}, #{startTime}, #{endTime}, #{version}, #{createTime},
+        #{updateTime})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacher">
+        <!--@mbg.generated-->
+        update cloud_teacher
+        <set>
+            <if test="studentId != null">
+                student_id_ = #{studentId},
+            </if>
+            <if test="level != null">
+                level_ = #{level},
+            </if>
+            <if test="startTime != null">
+                start_time_ = #{startTime},
+            </if>
+            <if test="endTime != null">
+                end_time_ = #{endTime},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime},
+            </if>
+            version_ = version_+1
+        </set>
+        where id_ = #{id} AND version_ = #{version}
+    </update>
 
-  <!-- 全查询 -->
-  <select id="findAll" resultMap="CloudTeacher">
-    SELECT * FROM cloud_teacher_order
-  </select>
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CloudTeacher">
+        SELECT *
+        FROM cloud_teacher_order
+    </select>
 
-  <!-- 分页查询 -->
-  <select id="queryPage" resultMap="CloudTeacher" parameterType="map">
-    SELECT * FROM cloud_teacher_order
-    <include refid="global.limit"/>
-  </select>
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CloudTeacher" parameterType="map">
+        SELECT * FROM cloud_teacher_order
+        <include refid="global.limit"/>
+    </select>
 
-  <!-- 查询当前表的总记录数 -->
-  <select id="queryCount" resultType="int">
-    SELECT COUNT(*)
-    FROM cloud_teacher_order
-  </select>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM cloud_teacher_order
+    </select>
+
+    <select id="getByStudentId" resultMap="CloudTeacher">
+        SELECT *
+        FROM cloud_teacher
+        WHERE student_id_ = #{studentId}
+    </select>
 </mapper>

+ 14 - 2
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -19,6 +19,7 @@
         <result column="remark_" property="remark"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="music_group_id_" property="musicGroupId"/>
     </resultMap>
 
     <select id="get" resultMap="CloudTeacherOrder">
@@ -33,9 +34,11 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, refund_amount_, status_, order_id_,start_time_,end_time_,
+        insert into cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, refund_amount_, status_,
+        order_id_,start_time_,end_time_,
         remark_, create_time_, update_time_)
-        values (#{orderId},#{studentId}, #{type},#{level}, #{time}, #{amount}, #{refundAmount}, #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW())
+        values (#{orderId},#{studentId}, #{type},#{level}, #{time}, #{amount}, #{refundAmount},
+        #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW())
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
         <!--@mbg.generated-->
@@ -104,4 +107,13 @@
         SELECT COUNT(*)
         FROM cloud_teacher_order
     </select>
+
+    <select id="getNoStartCloudTeacherOrder" resultMap="CloudTeacherOrder">
+        SELECT cto.*, spo.music_group_id_
+        FROM cloud_teacher_order cto
+                 LEFT JOIN student_payment_order spo ON cto.order_id_ = spo.id_
+                 LEFT JOIN music_group mg on spo.music_group_id_ = mg.id_
+        WHERE cto.status_ = 1
+        ORDER BY spo.pay_time_ ASC
+    </select>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -187,4 +187,8 @@ public interface TaskRemoteService {
 	//大雅基本工资标记
 	@GetMapping("task/salaryMarkNew")
 	void salaryMarkNew();
+
+	//乐团云教练订单
+	@GetMapping("task/checkCloudOrderStart")
+	void checkCloudOrderStart();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -232,4 +232,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void salaryMarkNew() {
 		logger.error("大雅基本工资标记失败");
 	}
+
+	@Override
+	public void checkCloudOrderStart() {
+		logger.error("乐团云教练订单生效处理失败");
+	}
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CloudTeacherOrderTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CloudTeacherOrderTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.checkCloudOrderStart();
+	}
+}

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -97,6 +97,10 @@ public class TaskController extends BaseController {
 
 	@Autowired
 	private StudentInstrumentService studentInstrumentService;
+
+	@Autowired
+	private CloudTeacherOrderService cloudTeacherOrderService;
+
 	@GetMapping(value = "/autoAffirmReceiveTask")
 	// 自动确认收货
 	public void affirmReceive(){
@@ -383,4 +387,10 @@ public class TaskController extends BaseController {
 	public void salaryMarkNew(Date startDay){
 		courseScheduleTeacherSalaryService.salaryMarkNew(startDay);
 	}
+
+	//处理未生效的乐团云教练订单
+	@GetMapping("/checkCloudOrderStart")
+	public void checkCloudOrderStart(){
+		cloudTeacherOrderService.checkCloudOrderStart();
+	}
 }