浏览代码

Merge remote-tracking branch 'origin/master'

hgw 3 年之前
父节点
当前提交
16b8c1653f

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -88,7 +88,6 @@ public interface UserWithdrawalService extends IService<UserWithdrawal> {
      */
     void contractCallback(String status, String serialNo, String url, String errMsg);
 
-    @Transactional(rollbackFor = Exception.class)
     HttpResponseResult<Boolean> batchAuth(AuthOperaReq authOperaReq, SysUser sysUser);
 
     /**

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

@@ -189,10 +189,6 @@ public class ContractServiceImpl implements ContractService {
             return HttpResponseResult.failed("用户不存在");
         }
 
-        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
-            return HttpResponseResult.failed("身份信息缺失");
-        }
-
         Date date = new Date();
 
         // 合成freemarker

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

@@ -84,6 +84,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
             isPayment(studentId, scheduleId);
             replied.setScore(null);
             replied.setStudentReplied(null);
+            replied.setTeacherRepliedTime(new Date());
             if (!repliedIsNull(replied)) {
                 repliedDao.updateReplied(replied);
                 return;
@@ -96,6 +97,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
         isPayment(userId, scheduleId);
         replied.setStudentId(userId);
         replied.setTeacherReplied(null);
+        replied.setStudentRepliedTime(new Date());
         if (!repliedIsNull(replied)) {
             repliedDao.updateReplied(replied);
             return;

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

@@ -1271,7 +1271,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .eq(TeacherFreeTime::getDefaultFlag, 1));
 
         if (teacherFreeTime==null){
-            throw new BizException("未查到老师陪练课配置");
+            log.info("未查到陪练课配置,老师id:{}",teacherId);
+            return new ArrayList<>();
         }
 
         if ((teacherFreeTime.getMonday() == null || teacherFreeTime.getMonday().equals("[]")) &&

+ 7 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -327,12 +327,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         } else {
             data.setLiveing(YesOrNoEnum.NO);
         }
-
-        StudentStar studentStar = studentStarService.getByStudentIdAndTeacherId(studentId, teacherId);
-        if (null == studentStar) {
-            data.setIsStar(YesOrNoEnum.NO);
-        } else {
-            data.setIsStar(YesOrNoEnum.YES);
+        if(null != studentId){
+            StudentStar studentStar = studentStarService.getByStudentIdAndTeacherId(studentId, teacherId);
+            if (null == studentStar) {
+                data.setIsStar(YesOrNoEnum.NO);
+            } else {
+                data.setIsStar(YesOrNoEnum.YES);
+            }
         }
         return HttpResponseResult.succeed(data);
     }

+ 24 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -18,6 +18,8 @@ import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.util.StringUtil;
+import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,7 +35,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
+import java.util.Objects;
+import java.util.concurrent.*;
 
 
 @Service
@@ -66,18 +69,32 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
     public HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto) {
         if (null == accountRecordDto.getUserId() || null == accountRecordDto.getTransAmount()
                 || null == accountRecordDto.getInOrOut() || null == accountRecordDto.getBizType()) {
-            throw new BizException("缺少参数");
+            return HttpResponseResult.failed("缺少参数");
         }
+        String lockName = CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId());
 
+        RLock lock = redissonClient.getLock(lockName);
+        if (Objects.isNull(lock)) {
+            log.info("callIfLockCanGet lock is null lockName : {}", lockName);
+            return HttpResponseResult.failed("账户变更失败");
+        }
+        ExecutorService executor = Executors.newCachedThreadPool();
         try {
-            return DistributedLock.of(redissonClient)
-                    .runIfLockCanGet(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId())
-                            , () -> doAccountChange(accountRecordDto), 60L, TimeUnit.SECONDS);
+            if (lock.tryLock(10L, 60L, TimeUnit.SECONDS)) {
+                return doAccountChange(accountRecordDto);
+            } else {
+                return HttpResponseResult.failed("账户变更失败");
+            }
         } catch (BizException e) {
             return HttpResponseResult.failed(e.getMessage());
         } catch (Exception e) {
-            e.printStackTrace();
-            throw new BizException("账户变更失败");
+            log.error("callIfLockCanGet error lockKey {}", lockName);
+            return HttpResponseResult.failed("账户变更失败");
+        } finally {
+            executor.shutdown();
+            if (lock.getHoldCount() != 0) {
+                lock.unlock();
+            }
         }
     }
 

+ 49 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -178,7 +178,6 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user) {
         Long[] ids = StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId());
         for (Long id : ids) {
@@ -196,7 +195,6 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
             orderRefund.setOperateId(user.getId());
             orderRefund.setOperateReason(authOperaReq.getReason());
             orderRefund.setUpdateTime(new Date());
-            updateById(orderRefund);
 
             if (authOperaReq.getPass()) {
                 //通过调用退款接口
@@ -220,7 +218,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
     }
 
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<UserOrderRefundBill> orderRefund(String orderNo, String reason) {
         UserOrderVo detail = orderService.detail(orderNo, null);
 
@@ -289,12 +287,12 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
                 }
             }
         }
-
         return doOrderRefund(orderRefunds);
     }
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void refundPaymentCallBack(PaymentCallBack data) {
         if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//退款成功
             paymentRefundSucceededHandle(data);
@@ -303,7 +301,8 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         }
     }
 
-    private HttpResponseResult<UserOrderRefundBill> doOrderRefund(UserOrderRefund orderRefund) {
+    @Transactional(rollbackFor = Exception.class)
+    HttpResponseResult<UserOrderRefundBill> doOrderRefund(UserOrderRefund orderRefund) {
         UserOrderPayment payment = orderPaymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
                 .eq(UserOrderPayment::getOrderNo, orderRefund.getOrderNo())
                 .eq(UserOrderPayment::getStatus, TradeStatusEnum.succeeded)
@@ -313,20 +312,22 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
             throw new BizException("订单状态异常");
         }
 
-        //单号生成
-        Long billNo = idGeneratorService.generatorId("billNo");
-
         RefundBill refundBill = new RefundBill(payment.getOpenType(),
                 PaymentClientEnum.valueOf(payment.getPaymentClient()), payment.getPayChannel());
         refundBill.setTradeNo(payment.getTransNo());
         refundBill.setPaymentNo(payment.getPaymentNo());
+
+        //单号生成
+        Long billNo = idGeneratorService.generatorId("billNo");
         refundBill.setRefundNo(billNo.toString());
+
         refundBill.setOrderAmt(payment.getPayAmt());
         refundBill.setRefundAmt(orderRefund.getActualAmount());
         refundBill.setReason(orderRefund.getReason());
 
         BaseResult<RefundBill> refundBillBaseResult = paymentClient.refundPayment(refundBill);
         log.info("退款返回: {} ", JSONObject.toJSONString(refundBillBaseResult));
+
         //入退款单表
         UserOrderRefundBill orderRefundBill = new UserOrderRefundBill();
         orderRefundBill.setRefundId(orderRefund.getId());
@@ -340,6 +341,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
             orderRefundBill.setPayFailMsg(refundBillBaseResult.getMsg());
         }
         refundBillService.save(orderRefundBill);
+        updateById(orderRefund);
         return HttpResponseResult.succeed(orderRefundBill);
     }
 
@@ -366,26 +368,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         one.setUpdateTime(new Date());
         refundBillService.updateById(one);
 
-        //处理业务
-        UserOrderRefund orderRefund = getById(one.getRefundId());
-        if (StringUtil.isEmpty(orderRefund.getOredrDetilIds())) {
-            List<Long> ids = new ArrayList<>();
-            for (String id : orderRefund.getOredrDetilIds().split(",")) {
-                ids.add(Long.parseLong(id));
-            }
-            OrderDetailSearch search = new OrderDetailSearch();
-            search.setIds(ids);
-            search.setOrderNo(orderRefund.getOrderNo());
-            List<UserOrderDetailVo> userOrderDetails = orderDetailService.selectList(search);
-
-            for (UserOrderDetailVo vo : userOrderDetails) {
-                Consumer<UserOrderDetailVo> refundAfterConsumer = refundSuccess.get(vo.getGoodType());
-                if (!Objects.isNull(refundAfterConsumer)) {
-                    refundAfterConsumer.accept(vo);
-                }
-            }
-
-        }
+        orderRefundSuccessBizHandle(one.getRefundId());
     }
 
     /***
@@ -413,8 +396,17 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         one.setUpdateTime(new Date());
         refundBillService.updateById(one);
 
+        orderRefundFailBizHandle(one.getRefundId());
+    }
+
+    /**
+     * 处理退款成功业务
+     *
+     * @param refundId 退款单id
+     */
+    private void orderRefundSuccessBizHandle(Long refundId) {
         //处理业务
-        UserOrderRefund orderRefund = getById(one.getRefundId());
+        UserOrderRefund orderRefund = getById(refundId);
         if (StringUtil.isEmpty(orderRefund.getOredrDetilIds())) {
             List<Long> ids = new ArrayList<>();
             for (String id : orderRefund.getOredrDetilIds().split(",")) {
@@ -426,12 +418,39 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
             List<UserOrderDetailVo> userOrderDetails = orderDetailService.selectList(search);
 
             for (UserOrderDetailVo vo : userOrderDetails) {
-                Consumer<UserOrderDetailVo> refundAfterConsumer = refundFailed.get(vo.getGoodType());
+                Consumer<UserOrderDetailVo> refundAfterConsumer = refundSuccess.get(vo.getGoodType());
                 if (!Objects.isNull(refundAfterConsumer)) {
                     refundAfterConsumer.accept(vo);
                 }
             }
+        }
+    }
 
+    /**
+     * 处理退款失败业务
+     *
+     * @param refundId 退款单id
+     */
+    private void orderRefundFailBizHandle(Long refundId) {
+        //处理业务
+        UserOrderRefund orderRefund = getById(refundId);
+
+        if (StringUtil.isEmpty(orderRefund.getOredrDetilIds())) {
+            List<Long> ids = new ArrayList<>();
+            for (String id : orderRefund.getOredrDetilIds().split(",")) {
+                ids.add(Long.parseLong(id));
+            }
+            OrderDetailSearch search = new OrderDetailSearch();
+            search.setIds(ids);
+            search.setOrderNo(orderRefund.getOrderNo());
+            List<UserOrderDetailVo> userOrderDetails = orderDetailService.selectList(search);
+
+            for (UserOrderDetailVo vo : userOrderDetails) {
+                Consumer<UserOrderDetailVo> refundAfterConsumer = refundFailed.get(vo.getGoodType());
+                if (!Objects.isNull(refundAfterConsumer)) {
+                    refundAfterConsumer.accept(vo);
+                }
+            }
         }
     }
 }

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

@@ -194,7 +194,6 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<Boolean> batchAuth(AuthOperaReq authOperaReq, SysUser sysUser) {
         List<Long> ids = Arrays.asList(StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId()));
 

+ 5 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -459,7 +459,8 @@
             b.name_ AS subjectName,
             ig.id_ AS imGroupId,
             (r.student_replied_ IS NOT NULL) AS studentReplied,
-            (r.teacher_replied_ IS NOT NULL) AS teacherReplied
+            (r.teacher_replied_ IS NOT NULL) AS teacherReplied,
+            1 AS payCount
         FROM course_schedule s
         LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
@@ -488,12 +489,14 @@
             sb.name_ AS subjectName,
             ig.id_ AS imGroupId,
             (r.student_replied_ IS NOT NULL) AS studentReplied,
-            (r.teacher_replied_ IS NOT NULL) AS teacherReplied
+            (r.teacher_replied_ IS NOT NULL) AS teacherReplied,
+            IFNULL(a.payCount,0) AS payCount
         FROM course_schedule s
         LEFT JOIN course_group g ON s.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
         LEFT JOIN course_schedule_replied r ON s.id_ = r.course_schedule_id_
         LEFT JOIN im_group ig ON ig.course_group_id_ = g.id_
+        LEFT JOIN (SELECT course_id_,COUNT(1) AS payCount FROM course_schedule_student_payment GROUP BY course_id_) a ON s.id_=a.course_id_
         WHERE s.lock_=0
         AND s.status_ IN ('ING','NOT_START','COMPLETE')
         AND s.id_ IN

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -107,6 +107,8 @@
             <if test="score !=null">score_ = #{score},</if>
             <if test="studentReplied !=null and studentReplied !=''">student_replied_ = #{studentReplied},</if>
             <if test="teacherReplied !=null and teacherReplied !=''">teacher_replied_ = #{teacherReplied},</if>
+            <if test="studentRepliedTime !=null">student_replied_time_ = #{studentRepliedTime},</if>
+            <if test="teacherRepliedTime !=null">teacher_replied_time_ = #{teacherRepliedTime},</if>
             update_time_ = SYSDATE()
         </set>
         WHERE student_id_ = #{studentId}

+ 2 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -18,11 +18,11 @@
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroupMember">
-        insert into im_group_member(group_id_, user_id_, nickname_, is_admin_, role_type_, create_time_,
+        insert into im_group_member(group_id_, user_id_,avatar_, nickname_, is_admin_, role_type_, create_time_,
         update_time_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.groupId}, #{entity.userId}, #{entity.nickname}, #{entity.isAdmin}, #{entity.roleType},NOW(), NOW())
+            (#{entity.groupId}, #{entity.userId}, #{entity.avatar}, #{entity.nickname}, #{entity.isAdmin}, #{entity.roleType},NOW(), NOW())
         </foreach>
         ON DUPLICATE KEY UPDATE
         user_id_ = VALUES(user_id_),

+ 29 - 4
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenTeacherController.java

@@ -1,19 +1,29 @@
 package com.yonge.cooleshow.website.controller.open;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 @RestController
 @RequestMapping("/open/teacher")
 @Api(value = "开放老师接口", tags = "开放老师接口")
 public class OpenTeacherController extends BaseController {
     @Autowired
     private TeacherService teacherService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     /**
      * 查询单条
@@ -23,8 +33,23 @@ public class OpenTeacherController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", value = "id", paramType = "path", dataType = "long", required = true),
     })
-    public HttpResponseResult<TeacherVo> detail(@PathVariable("id") Long userId) {
-        TeacherVo detail = teacherService.detail(userId);
-        return succeed(detail);
+    public HttpResponseResult<TeacherHomeVo> detail(@PathVariable("id") Long userId) {
+        if (null == userId) {
+            return failed("缺少老师ID");
+        }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        HttpResponseResult<TeacherHomeVo> res;
+        if (user == null || null == user.getId()) {
+            res = teacherService.queryTeacherHome(null, userId);
+        } else {
+            res = teacherService.queryTeacherHome(user.getId(), userId);
+        }
+        //学生端过滤只看审核通过的
+        if (null != res.getData() && !CollectionUtils.isEmpty(res.getData().getStyleVideo())) {
+            List<TeacherStyleVideo> styleVideo = res.getData().getStyleVideo();
+            List<TeacherStyleVideo> collect = styleVideo.stream().filter(o -> AuthStatusEnum.PASS.equals(o.getAuthStatus())).collect(Collectors.toList());
+            res.getData().setStyleVideo(collect);
+        }
+        return res;
     }
 }