فهرست منبع

add:老师课酬结算

liujunchi 3 سال پیش
والد
کامیت
428c0f458e

+ 6 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 
 /**
  * Description
@@ -20,8 +21,12 @@ public interface AdminFeignService {
 
 
     /**
-     * 公告发布轮询
+     * 老师作业布置通知
      */
     @GetMapping("/admin/teacherSend")
     HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework();
+
+    //老师课酬
+    @PostMapping(value = "/teacherEarning")
+    HttpResponseResult<Object> sendTeacherEarning();
 }

+ 5 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -14,4 +14,9 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
         return null;
     }
+
+    @Override
+    public HttpResponseResult<Object> sendTeacherEarning() {
+        return null;
+    }
 }

+ 24 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/TeacherEarningTask.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-17
+ */
+public class TeacherEarningTask extends BaseTask {
+
+
+    @Autowired
+    private AdminFeignService adminFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        adminFeignService.sendTeacherEarning();
+    }
+}

+ 11 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/client/AdminFeignClient.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.admin.client;
 
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -22,10 +23,20 @@ public class AdminFeignClient {
     @Autowired
     private CourseScheduleService courseScheduleService;
 
+    @Autowired
+    private UserAccountRecordService userAccountRecordService;
 
+    // 老师作业布置
     @PostMapping(value = "/teacherSend")
     public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
         courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
         return HttpResponseResult.succeed();
     }
+
+    //老师课酬
+    @PostMapping(value = "/teacherEarning")
+    public HttpResponseResult<Object> sendTeacherEarning() {
+        userAccountRecordService.sendTeacherEarning();
+        return HttpResponseResult.succeed();
+    }
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.vo.TeacherEarningVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
@@ -37,4 +38,11 @@ public interface UserAccountRecordDao extends BaseMapper<UserAccountRecord> {
 	 * @return
 	 */
     BigDecimal selectMonthDecimal(@Param("userId") Long userId);
+
+	/**
+	 * 老师当天收入
+	 *
+	 * @return
+	 */
+    List<TeacherEarningVo> selectTodayTeacherEarning();
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -80,6 +80,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     //------短信模板------
     SMS_BUY_LIVE("SMS_BUY_LIVE","直播课购买成功"),
     SMS_LIVE_COMPLETION_SUCCESS("SMS_LIVE_COMPLETION_SUCCESS","直播课成课"),
+    SMS_LIVE_COMPLETION_FAIL("LIVE_COMPLETION_FAIL","直播课成课失败"),
     SMS_TOMORROW_COURSE_REMINDER("SMS_TOMORROW_COURSE_REMINDER", "明日课程提醒(每晚9点)(短信)");
 
     MessageTypeEnum(String code, String msg) {

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserAccountRecordService.java

@@ -36,4 +36,9 @@ public interface UserAccountRecordService extends IService<UserAccountRecord>  {
 	 * @return 老师本月收入
 	 */
     BigDecimal getMonthDecimal(Long userId);
+
+	/**
+	 * 老师课酬收入通知
+	 */
+    void sendTeacherEarning();
 }

+ 25 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -698,7 +698,10 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         //更新课程组的购买人数+1
         this.baseMapper.opsPreStudentNum(studentPayment.getCourseGroupId(), 1);
-        //课程信息
+
+        // 课程组 人数 + 1
+        courseGroup.setPreStudentNum(courseGroup.getPreStudentNum() + 1);
+
         List<CourseSchedule> courseList = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
                 .eq(CourseSchedule::getCourseGroupId, studentPayment.getCourseGroupId()));
         //计算课程组单节课价格 取CourseScheduleStudentPayment expectPrice
@@ -911,6 +914,27 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                             .eq(CourseSchedule::getCourseGroupId, courseGroup.getId())
                             .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
                     );
+                    // 直播课成课失败通知
+                    SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());
+                    Map<Long, String> receivers = new HashMap<>();
+                    receivers.put(user.getId(), user.getPhone());
+                    // 发短信
+                    try {
+                        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_LIVE_COMPLETION_FAIL,
+                                                           receivers, null, 0, null, null,
+                                                           courseGroup.getName());
+                    } catch (Exception e) {
+                        log.warn("直播课成课失败短信发送失败,{}",e.getMessage());
+                    }
+
+                    // 发推送
+                    try {
+                        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.LIVE_COMPLETION_FAIL,
+                                                           receivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                                                           courseGroup.getName());
+                    } catch (Exception e) {
+                        log.warn("直播课成课失败推送发送失败,{}",e.getMessage());
+                    }
                 }
                 this.updateById(courseGroup);
             } catch (Exception ignored) {

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountRecordServiceImpl.java

@@ -2,19 +2,38 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.vo.TeacherEarningVo;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserAccountRecordDao;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
 public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordDao, UserAccountRecord> implements UserAccountRecordService {
 
+    private static final Logger log = LoggerFactory.getLogger(UserAccountRecordService.class);
+
+    @Autowired
+    private SysMessageService sysMessageService;
+
 	@Override
     public UserAccountRecordVo detail(Long id) {
         UserAccountRecordVo detail = baseMapper.detail(id);
@@ -33,4 +52,25 @@ public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordD
 
     }
 
+    @Override
+    public void sendTeacherEarning() {
+        List<TeacherEarningVo> teacherEarningVoList = baseMapper.selectTodayTeacherEarning();
+        if (CollectionUtils.isEmpty(teacherEarningVoList)) {
+            return;
+        }
+        for (TeacherEarningVo teacherEarningVo : teacherEarningVoList) {
+            Map<Long, String> receivers = new HashMap<>();
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.COURSE_SETTLEMENT.getCode());
+            receivers.put(teacherEarningVo.getTeacherId(), teacherEarningVo.getTeacherPhone());
+            String dateString = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.COURSE_SETTLEMENT,
+                                                   receivers, null, 0, url, ClientEnum.TEACHER.getCode(), dateString);
+                log.info(" COURSE_SETTLEMENT ok");
+            } catch (Exception e) {
+                log.warn("老师课酬结算消息推送失败,{}",e.getMessage());
+            }
+        }
+    }
+
 }

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherEarningVo.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import java.math.BigDecimal;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-17
+ */
+public class TeacherEarningVo {
+
+    private Long teacherId;
+
+    private String teacherPhone;
+
+    private BigDecimal earning;
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherPhone() {
+        return teacherPhone;
+    }
+
+    public void setTeacherPhone(String teacherPhone) {
+        this.teacherPhone = teacherPhone;
+    }
+
+    public BigDecimal getEarning() {
+        return earning;
+    }
+
+    public void setEarning(BigDecimal earning) {
+        this.earning = earning;
+    }
+}

+ 13 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml

@@ -69,4 +69,17 @@
         where in_or_out_ = 'IN' and account_id_ = #{userId}
         and date_format(create_time_,'%Y-%m') = date_format(now(),'%Y-%m')
     </select>
+
+    <select id="selectTodayTeacherEarning" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherEarningVo">
+
+        select
+            su.id_ as teacherId,
+            su.phone_ as teacherPhone,
+            sum(ucar.trans_amount_)
+        from user_cash_account_record ucar
+        left join sys_user su on ucar.account_id_ = su.id_
+            where ucar.create_time_ > date_format(now(),'%Y-%m-%d')
+
+        group by su.id_, su.phone_
+    </select>
 </mapper>