Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

zouxuan 3 gadi atpakaļ
vecāks
revīzija
a710ec9899
34 mainītis faili ar 342 papildinājumiem un 133 dzēšanām
  1. 6 2
      audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java
  2. 8 0
      audio-analysis/src/main/resources/logback-spring.xml
  3. 3 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  4. 9 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  5. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  6. 3 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java
  7. 23 15
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  8. 3 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPromotionServiceImpl.java
  9. 0 42
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/client/AdminFeignClient.java
  10. 5 5
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/UserOrderClient.java
  11. 19 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  12. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRecordDao.java
  13. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PianoRoomTimeDao.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  15. 47 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  16. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  17. 0 23
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  18. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  19. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  20. 40 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  21. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  22. 32 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyRepliedVo.java
  23. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  24. 36 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml
  25. 4 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  26. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/PianoRoomTimeDao.xml
  27. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthMusicianRecordMapper.xml
  28. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  29. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomSettingsController.java
  30. 31 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  31. 8 1
      toolset/audit-log/src/main/java/com/yonge/toolset/log/interceptor/AuditLogInterceptor.java
  32. 12 3
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java
  33. 6 0
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/constant/AlipayConstant.java
  34. 1 0
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/OriginalWxAppTemplate.java

+ 6 - 2
audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java

@@ -22,8 +22,12 @@ import com.yonge.audio.config.LocalFastJsonHttpMessageConverter;
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
-@MapperScan("com.yonge.cooleshow.biz.dal.dao")
-@ComponentScan(basePackages = {"com.yonge.netty", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz", "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security","com.yonge.toolset.thirdparty" })
+@MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
+@ComponentScan(basePackages = {
+		"com.yonge.netty",  "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
+		"com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
+		"com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
+})
 @Configuration
 @EnableSwagger2Doc
 public class AudioAnalysisServerApplication {

+ 8 - 0
audio-analysis/src/main/resources/logback-spring.xml

@@ -30,6 +30,14 @@
 	<logger name="com.yonge" level="info" />
 
 	<!--开发环境:打印控制台 -->
+	<springProfile name="local">
+		<root level="dev">
+			<appender-ref ref="stdout" />
+			<appender-ref ref="file" />
+		</root>
+	</springProfile>
+
+	<!--开发环境:打印控制台 -->
 	<springProfile name="dev">
 		<root level="dev">
 			<appender-ref ref="stdout" />

+ 3 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -97,7 +97,9 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
             returnApply.setReceiveTime(new Date());
             returnApply.setReceiveMan(statusParam.getReceiveMan());
             returnApply.setReceiveNote(statusParam.getReceiveNote());
-            refundAmount(omsOrderReturnApply);
+            if (omsOrderReturnApply.getReturnAmount().compareTo(BigDecimal.ZERO) >0) {
+                refundAmount(omsOrderReturnApply);
+            }
         } else if (status.equals(3)) {
             //拒绝退货
             returnApply.setId(id);

+ 9 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -105,6 +105,15 @@ public class OmsPortalOrderController {
         return CommonResult.success(orderDetail);
     }
 
+
+    @ApiOperation("根据订单号获取订单详情")
+    @RequestMapping(value = "/detail/sn/{orderSn}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderDetail> detail(@PathVariable String orderSn) {
+        OmsOrderDetail orderDetail = portalOrderService.detail(orderSn);
+        return CommonResult.success(orderDetail);
+    }
+
     @ApiOperation("用户取消订单")
     @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
     @ResponseBody

+ 2 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -70,6 +70,8 @@ public interface OmsPortalOrderService {
      */
     OmsOrderDetail detail(Long orderId);
 
+    OmsOrderDetail detail(String orderSn);
+
     /**
      * 用户根据订单ID删除订单
      */

+ 3 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.portal.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.yonge.cooleshow.mbg.mapper.*;
 import com.yonge.cooleshow.mbg.model.*;
@@ -160,6 +161,8 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
      * 退款成功
      */
     private void paymentRefundSucceededHandle(PaymentCallBack data) {
+
+        log.info("refund info is {}", JSON.toJSONString(data));
         if (data == null) {
             return;
         }

+ 23 - 15
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -284,6 +284,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         Map<String, Object> result = new HashMap<>();
         result.put("order", order);
         result.put("orderItemList", orderItemList);
+        if (order.getPayAmount().compareTo(BigDecimal.ZERO) == 0) {
+            paySuccess(order.getId(),order.getPayType());
+            order.setStatus(1);
+        }
         return result;
     }
 
@@ -427,7 +431,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             List<Integer> collect = list.stream().map(Long::intValue).collect(Collectors.toList());
             criteria.andStatusIn(collect);
         }
-        orderExample.setOrderByClause("create_time desc");
+        orderExample.setOrderByClause(" field(status,'0','6','1','2','3','4','5'),create_time desc");
         List<OmsOrder> orderList = orderMapper.selectByExample(orderExample);
         CommonPage<OmsOrder> orderPage = CommonPage.restPage(orderList);
         //设置分页信息
@@ -471,6 +475,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         return orderDetail;
     }
 
+    @Override
     public OmsOrderDetail detail(String orderSn) {
         OmsOrderExample orderExample = new OmsOrderExample();
         orderExample.createCriteria().andOrderSnEqualTo(orderSn);
@@ -520,18 +525,17 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单已付款或已关闭");
             return orderPayRes;
         }
-        UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn(),
-                                                                                 payReq.getPayChannel(),
-                                                                                 TradeStatusEnum.pending);
-
-        if (userOrderPayment != null) {
-            // 拉起原有的支付
-            orderPayRes = new OrderPayRes();
-            orderPayRes.setPay_info(userOrderPayment.getPayInfo());
-            orderPayRes.setPayChannel(userOrderPayment.getPayChannel());
-            orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString());
-            return orderPayRes;
-        }
+        // UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn(),
+        //                                              payReq.getPayChannel(),TradeStatusEnum.pending);
+        //
+        // if (userOrderPayment != null) {
+        //     // 拉起原有的支付
+        //     orderPayRes = new OrderPayRes();
+        //     orderPayRes.setPay_info(userOrderPayment.getPayInfo());
+        //     orderPayRes.setPayChannel(userOrderPayment.getPayChannel());
+        //     orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString());
+        //     return orderPayRes;
+        // }
 
         //构建汇付统一下单请求
         OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
@@ -627,7 +631,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         userOrderPayment.setPayFailMsg("");
         userOrderPayment.setCreateTime(new Date());
         userOrderPayment.setUpdateTime(new Date());
-        userOrderPaymentService.saveOrUpdate(userOrderPayment);
+
+        //查询订单下支付中的付款单,取消支付
+        userOrderPaymentService.closePayment(payment.getOrderNo(),  "用户发起了新的付款请求", null);
+
+        userOrderPaymentService.save(userOrderPayment);
     }
 
     @Override
@@ -839,7 +847,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         Long increment = redisService.incr(key, 1);
         sb.append(date);
         sb.append(String.format("%02d", order.getSourceType()));
-        sb.append(String.format("%02d", order.getPayType()));
+        // sb.append(String.format("%02d", order.getPayType()));
         String incrementStr = increment.toString();
         if (incrementStr.length() <= 6) {
             sb.append(String.format("%06d", increment));

+ 3 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPromotionServiceImpl.java

@@ -49,6 +49,7 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
                     PmsSkuStock skuStock = getOriginalPrice(promotionProduct, item.getProductSkuId());
                     if (skuStock  != null) {
                         //单品促销使用原价
+                        originalPrice = skuStock.getPrice();
                         cartPromotionItem.setPrice(originalPrice);
                         cartPromotionItem.setReduceAmount(originalPrice.subtract(skuStock.getPromotionPrice()));
                         cartPromotionItem.setRealStock(skuStock.getStock() - skuStock.getLockStock());
@@ -182,8 +183,10 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
             cartPromotionItem.setReduceAmount(new BigDecimal(0));
             PmsSkuStock skuStock = getOriginalPrice(promotionProduct,item.getProductSkuId());
             if(skuStock!=null){
+                cartPromotionItem.setPrice(skuStock.getPrice());
                 cartPromotionItem.setRealStock(skuStock.getStock()-skuStock.getLockStock());
             } else {
+                cartPromotionItem.setPrice(promotionProduct.getPrice());
                 cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLockStock());
             }
             cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());

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

@@ -1,42 +0,0 @@
-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;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-/**
- * Description
- *
- * @author liujunchi
- * @date 2022-05-06
- */
-@ApiIgnore
-@RestController
-@RequestMapping("/task")
-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();
-    }
-}

+ 5 - 5
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/UserOrderClient.java

@@ -34,7 +34,7 @@ import java.util.concurrent.TimeUnit;
 
 @RestController
 @RequestMapping("/open/userOrder")
-@Api(value = "开放权限接口-订单", hidden = true)
+@Api(value = "开放权限接口", tags = "开放权限接口")
 public class UserOrderClient extends BaseController {
     private final static Logger log = LoggerFactory.getLogger(UserOrderClient.class);
 
@@ -108,16 +108,17 @@ public class UserOrderClient extends BaseController {
                                         userOrderRefundService.refundPaymentCallBack(data);
                                     }
                                 }, 60L, TimeUnit.SECONDS);
+                return res.getData().getResMsg();
             } catch (BizException e) {
-                log.error("回调业务异常,msg is {}", e.getMessage());
+                log.error("回调业务异常,data is {}, msg is {}", JSONObject.toJSONString(data), e.getMessage());
             } catch (Exception e) {
+                log.error("回调业务异常,data is {}", JSONObject.toJSONString(data));
                 e.printStackTrace();
             }
         }
-        return res.getData().getResMsg();
+        return null;
     }
 
-
     /***
      * 支付回调
      * @author liweifan
@@ -138,7 +139,6 @@ public class UserOrderClient extends BaseController {
         }
     }
 
-
     @GetMapping("/setSuccessStatus")
     @ApiOperation(value = "完成所有订单(测试用)")
     public HttpResponseResult<Boolean> setSuccessStatus() {

+ 19 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -19,6 +20,10 @@ public class TaskController extends BaseController {
     private UserOrderService userOrderService;
     @Autowired
     private UserBindingTeacherService userBindingTeacherService;
+    @Autowired
+    private CourseScheduleService courseScheduleService;
+    @Autowired
+    private UserAccountRecordService userAccountRecordService;
 
     /***
      * 轮询用户订单
@@ -44,4 +49,18 @@ public class TaskController extends BaseController {
         userBindingTeacherService.unbindTask();
         return succeed(true);
     }
+
+    // 老师作业布置
+    @PostMapping(value = "/teacherSend")
+    public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
+        courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
+        return HttpResponseResult.succeed();
+    }
+
+    //老师课酬
+    @PostMapping(value = "/teacherEarning")
+    public HttpResponseResult<Object> sendTeacherEarning() {
+        userAccountRecordService.sendTeacherEarning();
+        return HttpResponseResult.succeed();
+    }
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRecordDao.java

@@ -26,4 +26,7 @@ public interface CourseScheduleRecordDao extends BaseMapper<CourseScheduleRecord
 
     //消耗时长详情
     IPage<CourseScheduleRecordVo> selectConsumeTimeList(Page<CourseScheduleRecordVo> pageInfo, @Param("param") Map<String, Object> param);
+
+    //查询课程列表
+    IPage<CourseScheduleRecordVo> selectCourseList(Page<CourseScheduleRecordVo> pageInfo,@Param("param") Map<String, Object> param);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/PianoRoomTimeDao.java

@@ -20,4 +20,7 @@ public interface PianoRoomTimeDao extends BaseMapper<PianoRoomTime> {
 
     //释放冻结时间
     void updateBatch(List<PianoRoomTime> list);
+
+    //统计人数
+    Integer countStudent(Long teacherId);
 }

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

@@ -253,5 +253,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     void updateCourseTime(Map<String, Object> param);
 
     void updateCourseStudent(Map<String, Object> param);
+
+    PageInfo<CourseScheduleRecordVo> selectCourseList(Map<String, Object> param);
 }
 

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

@@ -102,6 +102,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private CourseScheduleRecordDao recordDao;
     @Autowired
     private ImGroupService imGroupService;
+    @Autowired
+    private ImUserFriendService imUserFriendService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -763,7 +765,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             }
         }
         return false;
-
     }
 
     /**
@@ -1028,6 +1029,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         BigDecimal practiceServiceRate = new BigDecimal(practiceServiceRateStr).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
 
         //写course_schedule_teacher_salary
+        Long teacherId = null;
+        Long studentId = null;
         Date now = new Date();
         List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();
         for (CourseScheduleStudentPaymentVo payment : paymentList) {
@@ -1048,10 +1051,22 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
             teacherSalaryList.add(teacherSalary);
             teacherSalary.setCreateTime(now);
+
+            teacherId=payment.getTeacherId();
+            studentId=payment.getUserId();
         }
         courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
         log.info("buyPracticeCourseSuccess ok");
 
+        Set<Long> studentIds=new HashSet();
+        studentIds.add(studentId);
+        try {
+            imUserFriendService.saveUserFriend(teacherId,studentIds);
+            log.info("保存用户通讯录成功,teacherId:{},studentIds:{}",teacherId,studentIds);
+        }catch (Exception e){
+            log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}",teacherId,studentIds,e);
+        }
+
         //消息推送
         try {
             practiceSend(paymentList.get(0).getTeacherId(), orderParam.getUserId(), paymentList.size() + "", orderNo);
@@ -1098,7 +1113,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Date endTime = adjustVo.getEndTime();
         Date now = new Date();
         //校验时间是否为未来时刻
-        if (classDate.before(now) || startTime.before(now) || endTime.before(now)) {
+        if (startTime.before(now) || endTime.before(now)) {
             throw new BizException("排课日期必须大于当前日期");
         }
         if (!(DateUtil.dateToString(classDate).equals(DateUtil.dateToString(startTime))) ||
@@ -1581,7 +1596,15 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/5/27
      */
     public PianoRoomTimeVo selectRemainTime(Long teacherId) {
-        return pianoRoomTimeDao.selectRemainTime(teacherId);
+        PianoRoomTimeVo roomTimeVo = pianoRoomTimeDao.selectRemainTime(teacherId);
+        if (roomTimeVo != null) {
+            return roomTimeVo;
+        } else {
+            PianoRoomTimeVo pianoRoomTimeVo = new PianoRoomTimeVo();
+            pianoRoomTimeVo.setTeacherId(teacherId);
+            pianoRoomTimeVo.setStudentCount(pianoRoomTimeDao.countStudent(teacherId));
+            return pianoRoomTimeVo;
+        }
     }
 
     /**
@@ -1619,8 +1642,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Integer consumeTime = arrangeCourseVo.getConsumeTime();
 
         Integer configValue = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.PIANO_ROOM_MAX_STUDENTS));
-        if (studentIds.size()>configValue){
-            throw new BizException("成课学员人数超过房间最大容量{}",configValue);
+        if (studentIds.size() > configValue) {
+            throw new BizException("成课学员人数超过房间最大容量{}", configValue);
         }
 
         //校验课时
@@ -1635,7 +1658,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
         //校验上下课时间
         for (int i = 0; i < timeList.size(); i++) {
-            if (timeList.get(i).getStartTime().before(new Date())){
+            if (timeList.get(i).getStartTime().before(new Date())) {
                 throw new BizException("上课时间必须大于当前时间");
             }
             if (!DateUtil.offsetMinute(timeList.get(i).getStartTime(), singleClssTime).equals(timeList.get(i).getEndTime())) {
@@ -1739,9 +1762,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
         //创建群聊
         try {
-            imGroupService.autoCreate(courseGroup.getId(),CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+            imGroupService.autoCreate(courseGroup.getId(), CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
         } catch (Exception e) {
-            log.error("琴房课程组id:{},创建群聊失败:{}",courseGroup.getId(),e);
+            log.error("琴房课程组id:{},创建群聊失败:{}", courseGroup.getId(), e);
             e.printStackTrace();
         }
     }
@@ -1769,6 +1792,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
+     * @Description: 琴房课列表
+     * @Author: cy
+     * @Date: 2022/6/7
+     */
+    @Override
+    public PageInfo<CourseScheduleRecordVo> selectCourseList(Map<String, Object> param) {
+        param.put("type", CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+        return PageUtil.pageInfo(recordDao.selectCourseList(PageUtil.getPageInfo(param), param));
+    }
+
+    /**
      * @Description: 排课推送
      * @Author: cy
      * @Date: 2022/5/31
@@ -1847,7 +1881,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             try {
                 imGroupService.dismiss(String.valueOf(groupId));
             } catch (Exception e) {
-                log.error("琴房课程组id:{},关闭群聊失败:{}",groupId,e);
+                log.error("琴房课程组id:{},关闭群聊失败:{}", groupId, e);
             }
         } else {
             courseGroupService.update(null, Wrappers.<CourseGroup>lambdaUpdate()
@@ -1875,7 +1909,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         courseTime.setEndTime(endTime);
         List<CourseTimeEntity> timeList = Arrays.asList(courseTime);
 
-        if (startTime.before(new Date())){
+        if (startTime.before(new Date())) {
             throw new BizException("上课时间必须大于当前时间");
         }
 
@@ -1928,8 +1962,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<Long> studentIds = JSONArray.parseArray(studentIdsList.toString(), Long.class);
 
         Integer configValue = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.PIANO_ROOM_MAX_STUDENTS));
-        if (studentIds.size()>configValue){
-            throw new BizException("成课学员人数超过房间最大容量{}",configValue);
+        if (studentIds.size() > configValue) {
+            throw new BizException("成课学员人数超过房间最大容量{}", configValue);
         }
 
         if (CollectionUtils.isEmpty(studentIds)) {
@@ -1997,7 +2031,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         courseTime.setEndTime(courseSchedule.getEndTime());
         List<CourseTimeEntity> timeList = Arrays.asList(courseTime);
         //批量检查老师课时在数据库是否重复
-        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+//        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
 
         List<CourseScheduleStudentPayment> payments = new ArrayList<>();
         for (Long studentId : studentIds) {

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

@@ -75,6 +75,7 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             imUserFriends.add(teacherFriend);
             imUserFriends.add(studentFriend);
         }
+        baseMapper.insertBatch(imUserFriends);
     }
 
     @Override

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

@@ -44,29 +44,6 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
         TeacherFreeTime oldTeacherFreeTime = baseMapper.findOne(teacherFreeTime.getTeacherId(),
                 teacherFreeTime.getCourseMinutes(),
                 teacherFreeTime.getFreeMinutes());
-        System.out.println(teacherFreeTime.getMonday());
-        //结束时间减去休息时间
-/*        if (StringUtil.isNotBlank(teacherFreeTime.getMonday())){
-            teacherFreeTime.setMonday(timeOffSet(teacherFreeTime.getMonday(), teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getTuesday())){
-            teacherFreeTime.setTuesday(timeOffSet(teacherFreeTime.getTuesday(),teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getWednesday())){
-            teacherFreeTime.setWednesday(timeOffSet(teacherFreeTime.getWednesday(),teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getThursday())){
-            teacherFreeTime.setThursday(timeOffSet(teacherFreeTime.getThursday(),teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getFriday())){
-            teacherFreeTime.setFriday(timeOffSet(teacherFreeTime.getFriday(),teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getSaturday())){
-            teacherFreeTime.setSaturday(timeOffSet(teacherFreeTime.getSaturday(),teacherFreeTime.getFreeMinutes()));
-        }
-        if (StringUtil.isNotBlank(teacherFreeTime.getSunday())){
-            teacherFreeTime.setSunday(timeOffSet(teacherFreeTime.getSunday(),teacherFreeTime.getFreeMinutes()));
-        }*/
 
         //删除原有设置
         if(Objects.nonNull(oldTeacherFreeTime)){

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

@@ -46,7 +46,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     private IdGeneratorService idGeneratorService;
     @Autowired
     private PaymentProperties paymentProperties;
-    @Autowired(required = true)
+    @Autowired
     private PaymentClient paymentClient;
 
     @Override

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

@@ -148,7 +148,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
                 }
             }
         }
-        if(actualPrice.doubleValue() <= 0){
+        if (BigDecimal.ZERO.compareTo(actualPrice) >= 0) {
             throw new BizException("退款金额不能为0");
         }
 

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
@@ -19,10 +20,12 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import com.yonge.toolset.payment.base.model.Payment;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.apache.commons.beanutils.BeanUtils;
@@ -72,6 +75,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private PianoRoomBuyRecordService pianoRoomBuyRecordService;
     @Autowired
     private RedissonClient redissonClient;
+    @Autowired
+    private PaymentProperties paymentProperties;
 
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
@@ -200,7 +205,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         query.setStatus("WAIT_PAY,PAYING");
         List<UserOrderVo> userOrderVos = selectList(query);
         for (UserOrderVo userOrderVo : userOrderVos) {
-            orderSuccess(userOrderVo);
+            testOrderSuccess(userOrderVo);
         }
     }
 
@@ -227,7 +232,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 doOrderCancel(detail, orderStatus, "测试接口-订单交易失败");
             }
             if (OrderStatusEnum.PAID.equals(orderStatus)) {
-                orderSuccess(detail);
+                testOrderSuccess(detail);
             }
         }
     }
@@ -291,6 +296,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             }
         }
         log.info("下单请求 start is {} end is {}", start, System.currentTimeMillis());
+
+        //判断订单是否是无需支付的订单,若是,则直接完成订单
+        if (BigDecimal.ZERO.compareTo(orderVo.getActualPrice()) == 0) {
+            orderSuccess(orderVo);
+        }
         return HttpResponseResult.succeed(orderVo);
     }
 
@@ -313,7 +323,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             //入订单付款表,同时修改订单状态
             doOrderCancel(detail, OrderStatusEnum.FAIL, e.getMessage());
             return HttpResponseResult.failed(e.getMessage());
-        } catch (Exception e){
+        } catch (Exception e) {
             //入订单付款表,同时修改订单状态
             doOrderCancel(detail, OrderStatusEnum.FAIL, e.getMessage());
             return HttpResponseResult.failed("付款失败");
@@ -630,7 +640,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                                 new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
 
                         BigDecimal feeAmt = new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt());
-                        if (BigDecimal.ZERO.equals(feeAmt)) {
+                        if (BigDecimal.ZERO.compareTo(feeAmt) == 0) {
                             orderPayment.setFeeAmt(orderPayment.getPayAmt().subtract(orderPayment.getBackPayAmt()));
                         } else {
                             orderPayment.setFeeAmt(feeAmt);
@@ -640,8 +650,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 }
             }
         } catch (Exception e) {
+            log.error("订单完成-更新付款单失败, UserOrderVo is {},PaymentCallBack is {}", JSONObject.toJSONString(detail), JSONObject.toJSONString(data));
             e.printStackTrace();
-            log.error("完成订单失败,参数{}", JSONObject.toJSONString(data));
         }
         //调用业务
         List<UserOrderDetailVo> orderDetailList = orderDetailService.getOrderDetilListByOrderNo(detail.getOrderNo());
@@ -654,14 +664,37 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 userOrderVoConsumer.accept(orderDetailVo);
             }
             Long merchId = orderDetailVo.getMerchId();
-            if (null != merchId) {
+            if (merchId != null && merchId != 0) {
                 redissonClient.getBucket(CacheNameEnum.TEACHER_SUBJECT_ITEM.getRedisKey(merchId)).delete();
             }
         }
-
         //清除老师声部缓存
         redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(detail.getUserId())).delete();
+    }
 
+    private void testOrderSuccess(UserOrderVo detail) {
+        if (null == detail || StringUtil.isEmpty(detail.getOrderNo())) {
+            return;
+        }
+        //关闭当前正在支付的订单
+        orderPaymentService.closePaymentAndReqOpen(detail.getOrderNo(), "交易取消");
+
+        UserOrderPayment orderPayment = new UserOrderPayment();
+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
+        orderPayment.setOpenType(openType);
+
+        orderPayment.setOrderNo(detail.getOrderNo());
+
+        //支付订单号生成
+        Long paymentNo = idGeneratorService.generatorId("paymentNo");
+        orderPayment.setPaymentNo(paymentNo.toString());
+
+        orderPayment.setPayAmt(detail.getActualPrice());
+        orderPayment.setStatus(TradeStatusEnum.succeeded);
+
+        //保存新的付款单
+        orderPaymentService.save(orderPayment);
+        orderSuccess(detail, null);
     }
 
 }

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java

@@ -53,6 +53,28 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "签到时间")
     private String signInTime;
 
+    @ApiModelProperty(value = "学生评价 0:未评价 1:已评价")
+    private Integer studentReplied;
+
+    @ApiModelProperty(value = "老师评价 0:未评价 1:已评价")
+    private Integer teacherReplied;
+
+    public Integer getStudentReplied() {
+        return studentReplied;
+    }
+
+    public void setStudentReplied(Integer studentReplied) {
+        this.studentReplied = studentReplied;
+    }
+
+    public Integer getTeacherReplied() {
+        return teacherReplied;
+    }
+
+    public void setTeacherReplied(Integer teacherReplied) {
+        this.teacherReplied = teacherReplied;
+    }
+
     public String getRealName() {
         return realName;
     }

+ 32 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyRepliedVo.java

@@ -47,8 +47,38 @@ public class MyRepliedVo implements Serializable {
     @ApiModelProperty(value = "评分")
     private String score;
 
-    @ApiModelProperty(value = "学员课后评价")
-    private String studentReplied;
+    @ApiModelProperty(value = "学生评价 0:未评价 1:已评价")
+    private Integer studentReplied;
+
+    @ApiModelProperty(value = "老师评价 0:未评价 1:已评价")
+    private Integer teacherReplied;
+
+    @ApiModelProperty(value = "学生评价内容")
+    private String studentRepliedStr;
+
+    public String getStudentRepliedStr() {
+        return studentRepliedStr;
+    }
+
+    public void setStudentRepliedStr(String studentRepliedStr) {
+        this.studentRepliedStr = studentRepliedStr;
+    }
+
+    public Integer getStudentReplied() {
+        return studentReplied;
+    }
+
+    public void setStudentReplied(Integer studentReplied) {
+        this.studentReplied = studentReplied;
+    }
+
+    public Integer getTeacherReplied() {
+        return teacherReplied;
+    }
+
+    public void setTeacherReplied(Integer teacherReplied) {
+        this.teacherReplied = teacherReplied;
+    }
 
     public String getRealName() {
         return realName;
@@ -145,12 +175,4 @@ public class MyRepliedVo implements Serializable {
     public void setScore(String score) {
         this.score = score;
     }
-
-    public String getStudentReplied() {
-        return studentReplied;
-    }
-
-    public void setStudentReplied(String studentReplied) {
-        this.studentReplied = studentReplied;
-    }
 }

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

@@ -183,12 +183,15 @@
             g.subject_id_ AS subjectId,
             sb.name_ AS subjectName,
             p.course_id_ AS courseId,
-            p.course_group_id_ AS courseGoupId
+            p.course_group_id_ AS courseGoupId,
+            (r.student_replied_ IS NOT NULL) AS studentReplied,
+            (r.teacher_replied_ IS NOT NULL) AS teacherReplied
         FROM course_schedule_student_payment p
         LEFT JOIN sys_user u ON p.user_id_ =u.id_
         LEFT JOIN course_schedule cs ON p.course_id_=cs.id_
         LEFT JOIN course_group g ON p.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
+        LEFT JOIN course_schedule_replied r ON cs.id_=r.course_schedule_id_
         WHERE p.course_id_ IN
         (SELECT s.id_ FROM course_schedule s WHERE s.type_='PRACTICE' AND lock_=0 AND s.teacher_id_=#{param.teacherId})
         <if test="param.status !=null and param.status !=''">
@@ -803,7 +806,7 @@
         </foreach>)
     </update>
     <update id="updateEndTime">
-        UPDATE course_schedule SET status_='COMPLETE' WHERE id_ IN(
+        UPDATE course_schedule SET status_='COMPLETE',settlement_time_=NOW() WHERE id_ IN(
         <foreach collection="list" item="item" index="index" open="" close="" separator=",">
             #{item.courseId}
         </foreach>)

+ 36 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml

@@ -69,4 +69,40 @@
             </if>
         </where>
     </select>
+    <select id="selectCourseList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseScheduleRecordVo">
+        SELECT
+        s.id_ AS courseId,
+        g.name_ AS groupName,
+        g.subject_id_ AS subjectId,
+        sb.name_ AS subjectName,
+        s.status_ AS `status`,
+        s.start_time_ AS startTime,
+        s.end_time_ AS endTime,
+        s.single_course_time_ AS singleCourseTime,
+        a.count_ AS studentCount
+        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 (SELECT course_id_,COUNT(1) AS count_ FROM course_schedule_student_payment WHERE course_type_='PIANO_ROOM_CLASS' GROUP BY course_id_) a ON s.id_=a.course_id_
+        <where>
+            <if test="param.type != null and param.type !=''">
+                AND s.type_ = #{param.type}
+            </if>
+            <if test="param.status != null and param.status !=''">
+                AND s.status_ = #{param.status}
+            </if>
+            <if test="param.teacherId != null">
+                AND s.teacher_id_ = #{param.teacherId}
+            </if>
+            <if test="param.subjectId != null">
+                AND g.subject_id_ = #{param.subjectId}
+            </if>
+            <if test="param.month != null and param.month !=''">
+                AND date_format(s.end_time_,'%Y-%m') = #{param.month}
+            </if>
+            <if test="param.status != null and param.status !=''">
+                AND s.status_ = #{param.status}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 4 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -110,8 +110,7 @@
             r.course_schedule_id_ AS courseId,
             r.course_group_id_ AS courseGroupId,
             r.score_ AS score,
-            r.student_id_ AS studentId,
-            r.student_replied_ AS studentReplied,
+            r.student_replied_ AS studentRepliedStr,
             g.subject_id_ AS subjectId,
             sb.name_ AS subjectName,
             s.class_date_ AS classDate,
@@ -120,7 +119,9 @@
             u.id_ AS studentId,
             u.real_name_ AS realName,
             u.username_ AS userName,
-            u.avatar_ AS avatar
+            u.avatar_ AS avatar,
+            (r.student_replied_ IS NOT NULL) AS studentReplied,
+            (r.teacher_replied_ IS NOT NULL) AS teacherReplied
         FROM course_schedule_replied r
         LEFT JOIN course_group g ON g.id_ = r.course_group_id_
         LEFT JOIN `subject` sb ON sb.id_ = g.subject_id_

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/PianoRoomTimeDao.xml

@@ -8,6 +8,9 @@
         FROM piano_room_time
         WHERE teacher_id_=#{teacherId}
     </select>
+    <select id="countStudent" resultType="java.lang.Integer">
+        SELECT COUNT(1) FROM user_binding_teacher WHERE teacher_id_=#{teacherId}
+    </select>
     <update id="updateEndTime">
         <foreach collection="list" item="item" index="index" separator=";">
             UPDATE user_binding_teacher

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthMusicianRecordMapper.xml

@@ -29,7 +29,7 @@
             u.id_card_no_ as idCardNo,
             (
                 SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
-            ) as verifyUser,
+            ) as verifyUser
             , te.subject_id_ as "subjectId"
             , te.introduction_ as "introduction"
             , te.graduate_school_ as "graduateSchool"

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -151,7 +151,7 @@
                 )
             </if>
         </where>
-        order by t.create_time_ desc
+        order by field(t.status_,'WAIT_PAY','PAYING') desc, t.create_time_ desc
     </sql>
 
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/PianoRoomSettingsController.java

@@ -14,7 +14,7 @@ import java.util.List;
 
 @RestController
 @RequestMapping("/pianoRoomSettings")
-@Api(value = "琴房时长价格配置", tags = "")
+@Api(value = "琴房时长价格配置", tags = "琴房时长价格配置")
 public class PianoRoomSettingsController extends BaseController {
 
     @Autowired

+ 31 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.HolidaysFestivalsService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -41,6 +42,8 @@ public class TeacherCourseScheduleController extends BaseController {
     private CourseScheduleService courseScheduleService;
     @Resource
     private SysUserFeignService sysUserFeignService;
+    @Resource
+    private HolidaysFestivalsService holidaysFestivalsService;
 
     @ApiImplicitParams({
             @ApiImplicitParam(name = "classDate", dataType = "Integer", value = "年月"),
@@ -213,7 +216,23 @@ public class TeacherCourseScheduleController extends BaseController {
             @ApiImplicitParam(name = "month", dataType = "String", value = "月份,yyyy-mm"),
             @ApiImplicitParam(name = "status", dataType = "String", value = "课程状态"),
     })
-    @ApiOperation("课程列表&消耗时长列表")
+    @ApiOperation("课程列表")
+    @PostMapping("/selectCourseList")
+    public HttpResponseResult<PageInfo<CourseScheduleRecordVo>> selectCourseList(@RequestBody Map<String, Object> param) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        param.put("teacherId", user.getId());
+        return succeed(courseScheduleService.selectCourseList(param));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "subjectId", dataType = "Long", value = "声部id"),
+            @ApiImplicitParam(name = "month", dataType = "String", value = "月份,yyyy-mm"),
+            @ApiImplicitParam(name = "status", dataType = "String", value = "课程状态"),
+    })
+    @ApiOperation("消耗时长列表")
     @PostMapping("/selectConsumeTimeList")
     public HttpResponseResult<PageInfo<CourseScheduleRecordVo>> selectConsumeTimeList(@RequestBody Map<String, Object> param) {
         SysUser user = sysUserFeignService.queryUserInfo();
@@ -258,6 +277,7 @@ public class TeacherCourseScheduleController extends BaseController {
 
     @ApiImplicitParams({
             @ApiImplicitParam(name = "studentIds", dataType = "List", value = "学生id集合"),
+            @ApiImplicitParam(name = "courseId", dataType = "Long", value = "课程id"),
     })
     @ApiOperation("调整上课学员")
     @PostMapping("/updateCourseStudent")
@@ -270,5 +290,15 @@ public class TeacherCourseScheduleController extends BaseController {
         courseScheduleService.updateCourseStudent(param);
         return succeed();
     }
+
+    @ApiOperation("查询节假日")
+    @GetMapping("/selectHoliday")
+    public HttpResponseResult<Object> selectHoliday(Integer year) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(holidaysFestivalsService.queryByYear(year));
+    }
 }
 

+ 8 - 1
toolset/audit-log/src/main/java/com/yonge/toolset/log/interceptor/AuditLogInterceptor.java

@@ -1,5 +1,6 @@
 package com.yonge.toolset.log.interceptor;
 
+import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.ApiOperation;
 
 import java.io.IOException;
@@ -18,6 +19,8 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
@@ -35,6 +38,7 @@ import com.yonge.toolset.utils.web.WebUtil;
  * 日志审计的拦截器
  */
 public class AuditLogInterceptor extends HandlerInterceptorAdapter {
+    private final static Logger log = LoggerFactory.getLogger(AuditLogInterceptor.class);
 
     @Autowired
     private AuditLogService auditLogService;
@@ -45,7 +49,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
     private String username;
 
     private Long userId;
-    
+
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     private static List<String> ignoreLogUrl;
@@ -86,6 +90,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
     }
 
     public void syncSaveLog(HttpServletRequest request, Object handler) {
+
         try {
             String servletPath = request.getServletPath();
             HandlerMethod handlerMethod = (HandlerMethod) handler;
@@ -123,6 +128,8 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
             }
             //saveLog(operateName, servletPath, request);
         } catch (Exception e) {
+            String servletPath = request.getServletPath();
+            log.error("日志记录异常: servletPath is {},handler is {}", servletPath, handler);
             e.printStackTrace();
         }
     }

+ 12 - 3
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java

@@ -26,6 +26,7 @@ import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
 import com.yonge.toolset.payment.core.util.RequestKitBean;
 import com.yonge.toolset.payment.original.ali.constant.AlipayConstant;
+import com.yonge.toolset.payment.original.wx.constant.WxpayConstant;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -249,6 +250,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
             String refundNo = jsonParams.getString("out_biz_no");
 
             paymentCallBack.setStatus(TradeStatusEnum.succeeded);
+            paymentCallBack.setResMsg("success");
             //退款
             if (!StringUtil.isEmpty(refundNo)
                     || null != jsonParams.getBigDecimal("refund_fee")) {
@@ -256,10 +258,11 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 //退款成功
                 RefundPaymentCallBack refundPayment = new RefundPaymentCallBack();
                 refundPayment.setBillNo(refundNo);
-                refundPayment.setTransNo(refundNo);
+                refundPayment.setTransNo(jsonParams.getString("trade_no"));
 
                 refundPayment.setRefundAmt(jsonParams.getString("refund_fee"));
                 refundPayment.setTradeTime(jsonParams.getDate("gmt_refund"));
+                paymentCallBack.setRefundPaymentCallBack(refundPayment);
             } else {
 
                 if ("TRADE_CLOSED".equals(trade_status)) {
@@ -275,18 +278,24 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
 
                     ExecutePaymentCallBack executePayment = new ExecutePaymentCallBack();
                     String total_amount = jsonParams.getString("total_amount");
-                    String receipt_amount = jsonParams.getString("receipt_amount");
 
                     executePayment.setPayAmt(total_amount);
-                    executePayment.setFeeAmt(sub(total_amount, receipt_amount));
+                    if (!StringUtil.isEmpty(total_amount)) {
+                        String ALI_FEE_RATE = configPaymentService.getPaymentConfig(OpenEnum.ORIGINAL, AlipayConstant.ALI_FEE_RATE).getParamValue();
+                        BigDecimal feeRate = new BigDecimal(StringUtil.isEmpty(ALI_FEE_RATE) ? "0.006" : ALI_FEE_RATE);
+                        //支付宝不返回手续费,通过费率自己计算
+                        executePayment.setFeeAmt(new BigDecimal(total_amount).multiply(feeRate).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+                    }
                     executePayment.setTradeTime(jsonParams.getDate("gmt_payment"));
                     paymentCallBack.setExecutePaymentCallBack(executePayment);
                 }
             }
             return BaseResult.succeed(paymentCallBack);
         } catch (AlipayApiException e) {
+            paymentCallBack.setResMsg("filed");
             return BaseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR, paymentCallBack, "微信回调对象转换失败");
         } catch (Exception e) {
+            paymentCallBack.setResMsg("filed");
             return BaseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR, paymentCallBack, "解析异常");
         }
     }

+ 6 - 0
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/constant/AlipayConstant.java

@@ -62,5 +62,11 @@ public interface AlipayConstant {
      * @updateTime 2022/5/12 14:12
      */
     String ALI_CONTENT_SIGN_TYPE = "ALI_CONTENT_SIGN_TYPE";
+    /***
+     * 支付宝-手续费率
+     * @author liweifan
+     * @updateTime 2022/5/13 14:09
+     */
+    String ALI_FEE_RATE = "ALI_FEE_RATE";
 
 }

+ 1 - 0
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/OriginalWxAppTemplate.java

@@ -267,6 +267,7 @@ public class OriginalWxAppTemplate implements PaymentTemplate {
                     BigDecimal payAmt = new BigDecimal(result.getAmount().getTotal()).divide(new BigDecimal("100"));
                     executePayment.setPayAmt(payAmt.toString());
 
+                    //微信不返回手续费,通过
                     String WX_FEE_RATE = configPaymentService.getPaymentConfig(OpenEnum.ORIGINAL, WxpayConstant.WX_FEE_RATE).getParamValue();
 
                     BigDecimal feeRate = new BigDecimal(StringUtil.isEmpty(WX_FEE_RATE) ? "0.006" : WX_FEE_RATE);