liujunchi 3 years ago
parent
commit
2a5446e6b9
30 changed files with 704 additions and 71 deletions
  1. 1 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  2. 58 11
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java
  3. 52 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java
  4. 1 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java
  5. 39 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java
  6. 12 6
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderPayRes.java
  7. 16 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java
  8. 15 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java
  9. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java
  10. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  11. 5 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java
  12. 9 3
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  13. 129 28
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  14. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  15. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  16. 18 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java
  17. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  19. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserAccountRecordService.java
  20. 6 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AlbumMusicRelateServiceImpl.java
  21. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  22. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  23. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  24. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
  25. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountRecordServiceImpl.java
  26. 83 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeStatisticalVo.java
  27. 32 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  28. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  29. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml
  30. 81 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherHomeController.java

+ 1 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -149,6 +149,7 @@ public class NewsController extends BaseController {
 		if (!check.getStatus()) {
 			return check;
 		}
+		newsInfo.setStatus(NewsStatusEnum.HIDDEN);
 		newsInfo.setUpdateTime(new Date());
 		newsInfo.setUpdateBy(sysUser.getId());
 

+ 58 - 11
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java

@@ -18,6 +18,7 @@ import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.util.Arrays;
 import java.util.HashMap;
@@ -90,21 +91,29 @@ public class PaymentSdk {
      * @return 关闭的支付对象
      * @throws Exception 异常
      */
-    public Map<String, Object> closePayment(String paymentId) throws Exception {
-        Map<String, Object> payment = new HashMap<>();
+    public HttpResponseResult<Map<String, Object>> closePayment(String paymentId, String reason, String expend) {
         Map<String, Object> paymentParams = new HashMap<>(10);
         paymentParams.put("payment_id", paymentId);
-        paymentParams.put("reason", "reason");
-        paymentParams.put("expend", "expend");
-        paymentParams.put("notify_url", "notify_url");
-        payment = com.huifu.adapay.model.Payment.close(paymentParams);
+        paymentParams.put("reason", reason);
+        paymentParams.put("expend", expend);
+        paymentParams.put("notify_url", HuifuConfiguration.getHuifuProperties().getNotifyUrl());
 
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) payment.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
+        Map<String, Object> res;
+        try {
+            res = Payment.close(paymentParams);
+        } catch (BaseAdaPayException e) {
+            return HttpResponseResult.failed(e.getMessage());
         }
-        return payment;
+        if (CollectionUtils.isEmpty(res)) {
+            return HttpResponseResult.failed("请求失败");
+        }
+        log.info("汇付[关闭支付对象] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
+        if (null != errorCode) {
+            String errorMsg = (String) res.get("error_msg");
+            return HttpResponseResult.failed(errorMsg);
+        }
+        return HttpResponseResult.succeed(res);
     }
 
     /**
@@ -171,6 +180,44 @@ public class PaymentSdk {
     }
 
 
+
+    /**
+     * 退款
+     *
+     * @return 关闭的支付对象
+     */
+    public HttpResponseResult<Map<String, Object>> refundPayment(RefundReq refundReq) {
+
+        refundReq.setFail_fast("Y");
+        //创建分账对象
+        Map<String, String> div_member = new HashMap<>();
+        div_member.put("member_id", "0");
+        div_member.put("amount", refundReq.getRefund_amt());
+        div_member.put("fee_flag", "Y");
+        List<Map<String, String>> div_members = Arrays.asList(div_member);
+        refundReq.setDiv_members(JSONObject.toJSONString(div_members));
+
+        log.info("汇付[退款对象] Req:{}", JSONObject.toJSONString(refundReq));
+        //调用sdk方法,创建退款,得到退款对象
+        Map<String, Object> paymentParams = MapUtil.populateMap(new HashMap<>(), refundReq);
+        Map<String, Object> res;
+        try {
+            res = Refund.create(refundReq.getId(),paymentParams);
+        } catch (BaseAdaPayException e) {
+            return HttpResponseResult.failed(e.getMessage());
+        }
+        if (null == res) {
+            return HttpResponseResult.failed("请求失败");
+        }
+        log.info("汇付[创建退款对象] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
+        if (null != errorCode) {
+            String errorMsg = (String) res.get("error_msg");
+            return HttpResponseResult.failed(errorMsg);
+        }
+        return HttpResponseResult.succeed(res);
+    }
+
     /**
      *  查看退款订单
      *

+ 52 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.sdk.req;
+
+import io.swagger.annotations.ApiModel;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-05
+ */
+@ApiModel("关闭订单请求")
+public class OrderCloseReq {
+
+    /**
+     * 支付id
+     */
+    private String paymentId;
+
+    /**
+     * 关单描述
+     */
+    private String reason;
+
+    /**
+     * 扩展域
+     */
+    private String expend;
+
+    public String getPaymentId() {
+        return paymentId;
+    }
+
+    public void setPaymentId(String paymentId) {
+        this.paymentId = paymentId;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getExpend() {
+        return expend;
+    }
+
+    public void setExpend(String expend) {
+        this.expend = expend;
+    }
+}

+ 1 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java

@@ -42,7 +42,7 @@ public class OrderPayReq {
     @ApiModelProperty(value = "商品描述",hidden = true)
     private String goodDesc;
 
-    @ApiModelProperty("拉起支付信息")
+    @ApiModelProperty(value = "拉起支付信息",hidden = true)
     private String payInfo;
 
     public void orderStatus(Integer orderStatus) {

+ 39 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.sdk.res;
+
+import io.swagger.annotations.ApiModel;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-05
+ */
+@ApiModel("关闭订单信息")
+public class OrderCloseRes {
+
+    /**
+     * 执行状态
+     */
+    private boolean status = true;
+
+    /**
+     * 错误信息
+     */
+    private String failMsg;
+
+    public boolean isStatus() {
+        return status;
+    }
+
+    public void setStatus(boolean status) {
+        this.status = status;
+    }
+
+    public String getFailMsg() {
+        return failMsg;
+    }
+
+    public void setFailMsg(String failMsg) {
+        this.failMsg = failMsg;
+    }
+}

+ 12 - 6
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderPayRes.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.sdk.res;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.yonge.cooleshow.enums.PayStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -15,23 +16,28 @@ public class OrderPayRes {
     @ApiModelProperty("pay_info")
     private String pay_info;
 
-    @ApiModelProperty("执行状态")
+    @ApiModelProperty(value = "执行状态",required = true)
+    @JsonIgnore
     private boolean status = true;
 
-    @ApiModelProperty("出错信息")
+    @ApiModelProperty(value = "出错信息",required = true)
+    @JsonIgnore
     private String message;
 
-    @ApiModelProperty("支付状态")
+    @ApiModelProperty(value = "支付状态",required = true)
+    @JsonIgnore
     private PayStatusEnum payStatus;
 
 
-    @ApiModelProperty("订单编号")
+    @ApiModelProperty(value = "订单编号",required = true)
+    @JsonIgnore
     private String orderNo;
 
-    @ApiModelProperty("支付方式")
+    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信")
     private String payChannel;
 
-    @ApiModelProperty("交易流水号")
+    @ApiModelProperty(value = "交易流水号",required = true)
+    @JsonIgnore
     private String transNo;
 
     public String getPay_amt() {

+ 16 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.service;
 
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.req.OrderRefundReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.sdk.res.OrderRefundRes;
 
@@ -26,5 +28,19 @@ public interface PaymentService {
 
     OrderPayRes orderPayPaying(OrderPayReq payReq);
 
+    /**
+     * 退款
+     *
+     * @param refundReq
+     * @return
+     */
     OrderRefundRes orderRefund(OrderRefundReq refundReq);
+
+    /**
+     * 关闭订单
+     *
+     * @param closeReq 关闭订单
+     * @return
+     */
+    OrderCloseRes orderClose(OrderCloseReq closeReq);
 }

+ 15 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java

@@ -9,9 +9,11 @@ import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
 import com.yonge.cooleshow.sdk.adapay.dto.RefundReq;
 import com.yonge.cooleshow.sdk.req.DeviceInfo;
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.adapay.dto.PaymentReq;
 import com.yonge.cooleshow.sdk.req.OrderRefundReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderRefundRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.service.PaymentService;
@@ -142,4 +144,17 @@ public class AdapayPaymentServiceImpl implements PaymentService {
         }
         return orderRefundRes;
     }
+
+    @Override
+    public OrderCloseRes orderClose(OrderCloseReq closeReq) {
+        HttpResponseResult<Map<String, Object>> mapHttpResponseResult = paymentSdk.closePayment(closeReq.getPaymentId(),
+                                                                                                closeReq.getReason(),
+                                                                                                closeReq.getExpend());
+        OrderCloseRes closeRes = new OrderCloseRes();
+        if (!mapHttpResponseResult.getStatus()) {
+            closeRes.setFailMsg(mapHttpResponseResult.getMsg());
+            closeRes.setStatus(false);
+        }
+        return closeRes;
+    }
 }

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java

@@ -20,7 +20,7 @@ public class CancelOrderReceiver {
     private OmsPortalOrderService portalOrderService;
     @RabbitHandler
     public void handle(Long orderId){
-        portalOrderService.cancelOrder(orderId);
+        portalOrderService.cancelOrder(orderId, "超时取消");
         LOGGER.info("process orderId:{}",orderId);
     }
 }

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

@@ -91,7 +91,7 @@ public class OmsPortalOrderController {
     @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult cancelUserOrder(Long orderId) {
-        portalOrderService.cancelOrder(orderId);
+        portalOrderService.cancelOrder(orderId, "用户取消订单");
         return CommonResult.success(null);
     }
 

+ 5 - 4
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.util.DistributedLock;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -94,9 +95,7 @@ public class PaymentController extends BaseController {
                 //验签成功逻辑
                 log.info("验签成功");
                 String type = request.getParameter("type");
-                if (type.contains("payment")) {
-                    portalOrderService.orderCallback(data);
-                }
+                portalOrderService.orderCallback(data,type);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -124,7 +123,9 @@ public class PaymentController extends BaseController {
             }  else {
                 return failed(orderPayRes.getMessage());
             }
-        } catch (Exception e) {
+        }catch (BizException e) {
+            return failed(e.getMessage());
+        }catch (Exception e) {
             e.printStackTrace();
             return HttpResponseResult.failed("付款失败");
         }

+ 9 - 3
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -10,7 +10,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Future;
 
 /**
  * 前台订单管理Service
@@ -45,7 +44,7 @@ public interface OmsPortalOrderService {
      * 取消单个超时订单
      */
     @Transactional
-    void cancelOrder(Long orderId);
+    void cancelOrder(Long orderId, String message);
 
     /**
      * 发送延迟消息取消订单
@@ -78,8 +77,15 @@ public interface OmsPortalOrderService {
     /**
      *
      * @param data
+     * @param type
+     */    /**
+     * 订单拉起支付
+     *
+     * @param payReq 支付信息
+     * @return
      */
-    void orderCallback(String data);
+    @Transactional
+    void orderCallback(String data, String type);
 
     /**
      * 订单拉起支付

+ 129 - 28
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -19,7 +19,9 @@ import com.yonge.cooleshow.portal.dao.SmsCouponHistoryDao;
 import com.yonge.cooleshow.portal.domain.*;
 import com.yonge.cooleshow.portal.service.*;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.service.PaymentService;
 import org.slf4j.Logger;
@@ -291,14 +293,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             if (timeOutOrder.getStatus() == 0) {
                 payingOrderHandle(timeOutOrder);
             } else if (timeOutOrder.getStatus() == 6) {
-                cancelOrder(timeOutOrder.getId());
+                cancelOrder(timeOutOrder.getId(), "超时取消");
             }
         }
         return timeOutOrders.size();
     }
 
     @Override
-    public void cancelOrder(Long orderId) {
+    public void cancelOrder(Long orderId, String message) {
         //查询未付款的取消订单
         OmsOrderExample example = new OmsOrderExample();
         example.createCriteria().andIdEqualTo(orderId).andDeleteStatusEqualTo(0);
@@ -327,9 +329,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             }
             UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(cancelOrder.getOrderSn());
             if (null != orderPayment) {
+                // 发起关单
+                OrderCloseReq orderCloseReq = new OrderCloseReq();
+                orderCloseReq.setPaymentId(orderPayment.getTransNo());
+                orderCloseReq.setReason(message);
+                OrderCloseRes closeRes = adapayPaymentService.orderClose(orderCloseReq);
+                if (closeRes.isStatus()) {
+                    orderPayment.setCloseStatus(PayStatusEnum.pending.getCode());
+                } else {
+                    orderPayment.setCloseStatus(PayStatusEnum.failed.getCode());
+                    orderPayment.setCloseFailMsg(closeRes.getFailMsg());
+                }
+
                 //更新付款单
                 orderPayment.setStatus(PayStatusEnum.failed.getCode());
-                orderPayment.setPayFailMsg("交易取消");
+                orderPayment.setPayFailMsg(message);
+                orderPayment.setUpdateTime(new Date());
                 userOrderPaymentService.saveOrUpdate(orderPayment);
             }
         }
@@ -459,6 +474,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单不存在");
             return orderPayRes;
         }
+        if (detail.getStatus() != 0 && detail.getStatus() != 6) {
+            orderPayRes.setStatus(false);
+            orderPayRes.setMessage("订单已付款或已关闭");
+            return orderPayRes;
+        }
         UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn());
         payReq.orderStatus(detail.getStatus());
         payReq.setOrderNo(detail.getOrderSn());
@@ -471,13 +491,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         // 支付中的返回拉起信息
         orderPayRes = adapayPaymentService.orderPay(payReq);
         if (!orderPayRes.isStatus()) {
-            if (orderPayRes.getPayStatus() != null
-            && PayStatusEnum.failed.getCode().equals(orderPayRes.getPayStatus().getCode())) {
-                // 异常将取消订单
-                cancelOrder(detail.getId());
-            }
+            // 异常将取消订单
+            cancelOrder(detail.getId(),orderPayRes.getMessage());
             throw new BizException(orderPayRes.getMessage());
         }
+        if (!orderPayRes.getPay_amt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+            cancelOrder(detail.getId(),"订单金额和实际支付金额不符");
+            throw new BizException("订单金额和实际支付金额不符");
+        }
         // 订单状态和付款状态都是付款中,直接返回付款拉起信息
         if (OrderStatusEnum.PAYING.getCode().equals(payReq.getOrderStatus().getCode())
                 && PayStatusEnum.pending.getCode().equals(orderPayRes.getPayStatus().getCode())) {
@@ -488,7 +509,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         OmsOrder omsOrder = new OmsOrder();
         omsOrder.setId(detail.getId());
         if (orderPayRes.getPayStatus().getCode().equals(OrderStatusEnum.PAYING.getCode())) {
-            omsOrder.setStatus(1);
+            omsOrder.setStatus(0);
             orderMapper.updateByPrimaryKeySelective(omsOrder);
             // 保存订单支付表
             if (userOrderPayment == null) {
@@ -506,29 +527,104 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             userOrderPaymentService.saveOrUpdate(userOrderPayment);
         }else {
             // 异常将取消订单
-            cancelOrder(detail.getId());
+            cancelOrder(detail.getId(), orderPayRes.getMessage());
         }
 
         return orderPayRes;
     }
 
     @Override
-    public void orderCallback(String data) {
+    public void orderCallback(String data, String type) {
         JSONObject hfRes = JSONObject.parseObject(data);
-        if (PayStatusEnum.succeeded.getCode().equals(hfRes.getString("status"))) {
-            //订单完成
-            OmsOrderDetail orderDetail = detail(hfRes.getString("order_no"));
-            if (null == orderDetail) {
-                log.error("汇付支付回调,订单未找到。 req is {}", data);
-                return;
-            }
-            if (orderDetail.getStatus() == 0) {
-                orderSuccess(orderDetail, hfRes);
-            } else {
-                log.error("汇付支付回调,订单状态异常。 req is {}", data);
-            }
+
+        if (type.equals("payment.succeeded")) {//支付成功
+            paymentSucceededHandle(hfRes);
+        } else if (type.equals("payment.failed")) {//支付失败
+            paymentFailedHandle(hfRes);
+        } else if (type.equals("payment.close.succeeded")) {//支付关单成功
+            paymentCloseSucceededHandle(hfRes);
+        } else if (type.equals("payment.close.failed")) {//支付关单失败
+            paymentCloseFailedHandle(hfRes);
+        }
+    }
+
+
+
+    /***
+     * 处理回调-支付成功
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:09
+     */
+    private void paymentSucceededHandle(JSONObject hfRes) {
+        //订单完成
+        OmsOrder detail = detail(hfRes.getString("order_no"));
+        if (null == detail) {
+            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+            return;
+        }
+        if (detail.getStatus() == 0) {
+            orderSuccess(detail, hfRes);
+        } else {
+            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
+        }
+    }
+
+    /***
+     * 处理回调-支付失败
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:09
+     */
+    private void paymentFailedHandle(JSONObject hfRes) {
+        //订单完成
+        OmsOrder detail = detail(hfRes.getString("order_no"));
+
+        if (null == detail) {
+            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+            return;
+        }
+        if (detail.getStatus() == 0) {
+
+            cancelOrder(detail.getId(), "支付回调失败");
+        } else {
+            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
         }
     }
+
+    /***
+     * 支付关单成功
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:33
+     */
+    private void paymentCloseSucceededHandle(JSONObject hfRes) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(hfRes.getString("payment_id"));
+        if (null == orderPayment) {
+            return;
+        }
+        orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
+        orderPayment.setUpdateTime(new Date());
+        userOrderPaymentService.saveOrUpdate(orderPayment);
+    }
+
+    /***
+     * 支付关单失败
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:33
+     */
+    private void paymentCloseFailedHandle(JSONObject hfRes) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(hfRes.getString("payment_id"));
+        if (null == orderPayment) {
+            return;
+        }
+        orderPayment.setStatus(PayStatusEnum.failed.getCode());
+        orderPayment.setPayFailMsg("支付关单回调失败-" + hfRes.getString("error_msg"));
+        orderPayment.setUpdateTime(new Date());
+        userOrderPaymentService.saveOrUpdate(orderPayment);
+    }
+
     /***
      * 处理支付中订单
      * @author liweifan
@@ -546,11 +642,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo());
             //支付失败
             if (PayStatusEnum.failed.getCode().equals(resMap.get("status").toString())) {
-                cancelOrder(userOrder.getId());
-            }
-            //支付成功
-            if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
+                cancelOrder(userOrder.getId(), "支付失败");
+            }else if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
+                // 支付成功
                 orderSuccess(userOrder,null);
+            } else {
+                cancelOrder(userOrder.getId(), "支付超时");
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -574,11 +671,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         } else if (orderPayment.getPayChannel().equals("wx_lite")) {
             paySuccess(detail.getId(),2);
         }
+        String pay_amt = hfRes.getString("pay_amt");
+        if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+            orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
+        }
         orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
         orderPayment.setArrivalTime(new Date());
         if (null != hfRes) {
             try {
-                orderPayment.setPayAmt(new BigDecimal(hfRes.getString("pay_amt")));
+                orderPayment.setPayAmt(new BigDecimal(pay_amt));
                 orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt")));
             } catch (Exception e) {
                 e.printStackTrace();

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -129,5 +129,37 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //学生端-首页-最近一堂课
     StudentHomePage.RecentCourses selectRecentCourses(Long studentId);
+
+    /**
+     * 本周剩余的课时
+     *
+     * @param userId 老师id
+     * @return
+     */
+    Integer selectWeekNotStartCourseSchedule(@Param("userId") Long userId);
+
+    /**
+     * 本周未布置课后作业数
+     *
+     * @param userId 老师id
+     * @return
+     */
+    Integer selectHomeworkNotDecorate(@Param("userId") Long userId);
+
+    /**
+     * 老师未课后评价课程数
+     *
+     * @param userId 老师id
+     * @return
+     */
+    Integer selectNotRepliedCourseSchedule(@Param("userId") Long userId);
+
+    /**
+     * 老师本周收到的评价
+     *
+     * @param userId 老师id
+     * @return
+     */
+    Integer selectWeekStudentRepliedCourseSchedule(@Param("userId") Long userId);
 }
 

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -110,4 +110,11 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     List<TeacherMusicSheetVo> selectAuditPage(@Param("page") IPage<TeacherMusicSheetVo> page, @Param(
             "param") TeacherMusicSheetAuditSearch query);
 
+    /**
+     * 获取老师过审的曲目数量
+     *
+     * @param userId 老师id
+     * @return
+     */
+    Integer selectTeacherMusicSheetCount(@Param("userId") Long userId);
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -10,21 +11,30 @@ import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
 
 
-public interface UserAccountRecordDao extends BaseMapper<UserAccountRecord>{
+public interface UserAccountRecordDao extends BaseMapper<UserAccountRecord> {
 	/**
 	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
 	 */
 	UserAccountRecordVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
+	 *
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo
 	 */
 	List<UserAccountRecordVo> selectPage(@Param("page") IPage page, @Param("param") UserAccountRecordSearch userAccountRecord);
-	
+
+	/**
+	 * 老师本月收入
+	 *
+	 * @param userId 老师id
+	 * @return
+	 */
+    BigDecimal selectMonthDecimal(@Param("userId") Long userId);
 }

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

@@ -188,5 +188,37 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     StudentHomePage queryLiveAndVideo(Long studentId);
 
     List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId);
+
+    /**
+     * 本周剩余的课时
+     *
+     * @param userId 老师id
+     * @return 剩余课时数
+     */
+    Integer getWeekNotStart(Long userId);
+
+    /**
+     * 本周未布置课后作业数
+     *
+     * @param userId 老师id
+     * @return 本周未布置课后作业数
+     */
+    Integer getHomeworkNotDecorate(Long userId);
+
+    /**
+     * 老师未课后评价课程数
+     *
+     * @param userId 老师id
+     * @return 老师未课后评价课程数
+     */
+    Integer getNotRepliedCourseSchedule(Long userId);
+
+    /**
+     * 老师本周收到的评价
+     *
+     * @param userId 老师id
+     * @return 老师本周收到的评价
+     */
+    Integer getWeekStudentRepliedCourseSchedule(Long userId);
 }
 

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -207,4 +207,12 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @param userOrderDetailVo
      */
     void buyMusicSheetCancel(UserOrderDetailVo userOrderDetailVo);
+
+    /**
+     * 获取老师过审的曲目数量
+     *
+     * @param userId 老师id
+     * @return 老师过审的曲目数量
+     */
+    Integer getTeacherMusicSheetCount(Long userId);
 }

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

@@ -6,6 +6,8 @@ import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserAccountRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 
+import java.math.BigDecimal;
+
 /**
  * 用户账户流水表 服务类
  * @author liweifan
@@ -26,4 +28,12 @@ public interface UserAccountRecordService extends IService<UserAccountRecord>  {
  	 * @date 2022-03-30
      */
     IPage<UserAccountRecordVo> selectPage(IPage<UserAccountRecordVo> page, UserAccountRecordSearch query);
+
+	/**
+	 * 老师本月收入
+	 *
+	 * @param userId 老师id
+	 * @return 老师本月收入
+	 */
+    BigDecimal getMonthDecimal(Long userId);
 }

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

@@ -1,14 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
-import com.yonge.cooleshow.biz.dal.entity.AlbumMusicRelate;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
+import com.yonge.cooleshow.biz.dal.entity.AlbumMusicRelate;
 import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.Date;
@@ -34,6 +34,7 @@ public class AlbumMusicRelateServiceImpl extends ServiceImpl<AlbumMusicRelateDao
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean delMusicSheet(Long albumId, List<Long> musicSheetIdList) {
         List<AlbumMusicRelate> list = this.lambdaQuery()
                                           .eq(AlbumMusicRelate::getAlbumId, albumId)
@@ -47,6 +48,7 @@ public class AlbumMusicRelateServiceImpl extends ServiceImpl<AlbumMusicRelateDao
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean addMusicSheet(Long albumId, List<Long> musicSheetIdList, Long userId) {
         List<AlbumMusicRelate> list = this.lambdaQuery()
                                           .eq(AlbumMusicRelate::getAlbumId, albumId)

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

@@ -996,4 +996,24 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId) {
         return teacherFreeTimeDao.selectPriceByTeacherId(teacherId);
     }
+
+    @Override
+    public Integer getWeekNotStart(Long userId) {
+        return baseMapper.selectWeekNotStartCourseSchedule(userId);
+    }
+
+    @Override
+    public Integer getHomeworkNotDecorate(Long userId) {
+        return baseMapper.selectHomeworkNotDecorate(userId);
+    }
+
+    @Override
+    public Integer getNotRepliedCourseSchedule(Long userId) {
+        return baseMapper.selectNotRepliedCourseSchedule(userId);
+    }
+
+    @Override
+    public Integer getWeekStudentRepliedCourseSchedule(Long userId) {
+        return baseMapper.selectWeekStudentRepliedCourseSchedule(userId);
+    }
 }

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

@@ -180,6 +180,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean del(Long id) {
         MusicAlbum musicAlbum = new MusicAlbum();
         musicAlbum.setDelFlag(true);

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

@@ -411,6 +411,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
      * @param musicSheetId 曲目id
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean sendBuyMessage(Long teacherId, Long studentId, Long musicSheetId) {
         SysUser teacher = sysUserFeignService.queryUserById(teacherId);
         SysUser student = sysUserFeignService.queryUserById(studentId);
@@ -488,6 +489,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void orderAfterSheet(UserOrderDetailVo userOrderDetailVo) {
         // 保存购买记录
         MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
@@ -505,6 +507,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void buyMusicSheetCancel(UserOrderDetailVo userOrderDetailVo) {
         MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
                 .checkPurchase(userOrderDetailVo.getUserId(),userOrderDetailVo.getBizId());
@@ -512,6 +515,12 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         musicSheetPurchaseRecordService.removeById(musicSheetPurchaseRecord.getId());
     }
 
+    @Override
+    public Integer getTeacherMusicSheetCount(Long userId) {
+        return baseMapper.selectTeacherMusicSheetCount(userId);
+
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                        .map(sysUserFeignService::queryUserById)

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java

@@ -155,7 +155,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public int updateMessage(SysMessage message) {
 		return sysMessageDao.update(message);
 	}
@@ -394,13 +394,13 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	 * @return 修改的条数
 	 */
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public int updateStatus(Long userId, int status,String jpushType) {
 		return sysMessageDao.updateStatus(userId, status,jpushType);
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public int updateOneStatus(Long id, int status) {
 		return sysMessageDao.updateOneStatus(id, status);
 	}

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

@@ -9,6 +9,8 @@ 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 java.math.BigDecimal;
+
 
 @Service
 public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordDao, UserAccountRecord> implements UserAccountRecordService {
@@ -23,5 +25,12 @@ public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordD
     public IPage<UserAccountRecordVo> selectPage(IPage<UserAccountRecordVo> page, UserAccountRecordSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public BigDecimal getMonthDecimal(Long userId) {
+
+        return baseMapper.selectMonthDecimal(userId);
+
+    }
+
 }

+ 83 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeStatisticalVo.java

@@ -0,0 +1,83 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-05
+ */
+@ApiModel("老师APP首页数据统计")
+public class TeacherHomeStatisticalVo {
+
+
+    @ApiModelProperty("我的课程")
+    private  Integer courseSchedule;
+
+    @ApiModelProperty("课后作业")
+    private  Integer courseHomework;
+
+    @ApiModelProperty("课后评价")
+    private  Integer courseScheduleReplied;
+
+    @ApiModelProperty("我的乐谱")
+    private  Integer musicSheet;
+
+    @ApiModelProperty("我收到的评价")
+    private  Integer studentReplied;
+
+    @ApiModelProperty("我的收入")
+    private BigDecimal decimal;
+
+    public Integer getCourseSchedule() {
+        return courseSchedule;
+    }
+
+    public void setCourseSchedule(Integer courseSchedule) {
+        this.courseSchedule = courseSchedule;
+    }
+
+    public Integer getCourseHomework() {
+        return courseHomework;
+    }
+
+    public void setCourseHomework(Integer courseHomework) {
+        this.courseHomework = courseHomework;
+    }
+
+    public Integer getCourseScheduleReplied() {
+        return courseScheduleReplied;
+    }
+
+    public void setCourseScheduleReplied(Integer courseScheduleReplied) {
+        this.courseScheduleReplied = courseScheduleReplied;
+    }
+
+    public Integer getMusicSheet() {
+        return musicSheet;
+    }
+
+    public void setMusicSheet(Integer musicSheet) {
+        this.musicSheet = musicSheet;
+    }
+
+    public Integer getStudentReplied() {
+        return studentReplied;
+    }
+
+    public void setStudentReplied(Integer studentReplied) {
+        this.studentReplied = studentReplied;
+    }
+
+    public BigDecimal getDecimal() {
+        return decimal;
+    }
+
+    public void setDecimal(BigDecimal decimal) {
+        this.decimal = decimal;
+    }
+}

+ 32 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -531,4 +531,36 @@
         ORDER BY ABS(NOW() - s.start_time_) ASC
         limit 1
     </select>
+
+    <select id="selectWeekNotStartCourseSchedule" resultType="java.lang.Integer">
+        select count(1)
+        from course_schedule cs
+        where cs.teacher_id_ = #{userId} and cs.status_ = 'NOT_START'
+        and YEARWEEK(date_format(cs.class_date_,'%Y-%m-%d'),7) = YEARWEEK(now(),7)
+    </select>
+
+    <select id="selectHomeworkNotDecorate" resultType="java.lang.Integer">
+        select count(1)
+        from course_schedule cs
+        left join course_homework ch on cs.id_ = ch.course_schedule_id_
+        where cs.teacher_id_ = #{userId} and cs.status_ = 'COMPLETE' and cs.type_ = 'PRACTICE'
+        and YEARWEEK(date_format(cs.class_date_,'%Y-%m-%d'),7) = YEARWEEK(now(),7)
+        and ch.id_ is null
+    </select>
+
+    <select id="selectNotRepliedCourseSchedule" resultType="java.lang.Integer">
+        select count(1)
+        from course_schedule cs
+        left join course_schedule_replied csr on cs.id_ = csr.course_schedule_id_
+        where cs.teacher_id_ = #{userId} and cs.status_ = 'COMPLETE' and cs.type_ = 'PRACTICE'
+        and csr.teacher_replied_ is null
+    </select>
+
+    <select id="selectWeekStudentRepliedCourseSchedule" resultType="java.lang.Integer">
+        select count(1)
+        from course_schedule cs
+        left join course_schedule_replied csr on cs.id_ = csr.course_schedule_id_
+        where cs.teacher_id_ = #{userId} and cs.status_ = 'COMPLETE' and cs.type_ = 'PRACTICE'
+        and csr.student_replied_ is not null
+    </select>
 </mapper>

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -448,4 +448,10 @@
         order by  ms.submit_audit_time_ desc
     </select>
 
+    <select id="selectTeacherMusicSheetCount" resultType="java.lang.Integer">
+        select count(1)
+        from music_sheet
+        where user_id_ = #{userId}
+        and state_ = 1 and audit_status_ = 'PASS' and del_flag_ = 0
+    </select>
 </mapper>

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

@@ -62,4 +62,11 @@
         </where>
         order by t.create_time_ desc
     </select>
+
+    <select id="selectMonthDecimal" resultType="java.math.BigDecimal">
+        select  sum(trans_amount_)
+        from user_cash_account_record
+        where in_or_out_ = 'IN' and account_id_ = #{userId}
+        and date_format(create_time_,'%Y-%m') = date_format(now(),'%Y-%m')
+    </select>
 </mapper>

+ 81 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherHomeController.java

@@ -0,0 +1,81 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
+import com.yonge.cooleshow.biz.dal.vo.CountVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherHomeStatisticalVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+
+/**
+ * Description 老师课后作业相关接口
+ *
+ * @author liujunchi
+ * @date 2022-04-13
+ */
+@Api(tags = "老师APP首页接口")
+@RestController
+@RequestMapping("/home")
+public class TeacherHomeController extends BaseController {
+
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private CourseScheduleService courseScheduleService;
+
+    @Autowired
+    private MusicSheetService musicSheetService;
+
+    @Autowired
+    private UserAccountRecordService userAccountRecordService;
+
+    @ApiOperation(value = "首页统计数据")
+    @GetMapping(value="/count")
+    public HttpResponseResult<TeacherHomeStatisticalVo> countTeacherHome() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        // 我的课程
+        Integer courseSechedule  = courseScheduleService.getWeekNotStart(sysUser.getId());
+
+        // 课后作业
+        Integer courseHomework = courseScheduleService.getHomeworkNotDecorate(sysUser.getId());
+
+        // 课后评价
+        Integer courseScheduleReplied = courseScheduleService.getNotRepliedCourseSchedule(sysUser.getId());
+
+        // 我的乐谱
+        Integer musicSheet = musicSheetService.getTeacherMusicSheetCount(sysUser.getId());
+
+        // 我收到的评价
+        Integer studentReplied = courseScheduleService.getWeekStudentRepliedCourseSchedule(sysUser.getId());
+
+        // 我的收入
+        BigDecimal decimal = userAccountRecordService.getMonthDecimal(sysUser.getId());
+
+        TeacherHomeStatisticalVo teacherHomeStatisticalVo = new TeacherHomeStatisticalVo();
+        teacherHomeStatisticalVo.setCourseHomework(courseHomework);
+        teacherHomeStatisticalVo.setCourseScheduleReplied(courseScheduleReplied);
+        teacherHomeStatisticalVo.setCourseSchedule(courseSechedule);
+        teacherHomeStatisticalVo.setDecimal(decimal);
+        teacherHomeStatisticalVo.setMusicSheet(musicSheet);
+        teacherHomeStatisticalVo.setStudentReplied(studentReplied);
+        return succeed(teacherHomeStatisticalVo);
+    }
+
+
+
+}