ソースを参照

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 2 年 前
コミット
60f521a279

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

@@ -1993,4 +1993,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
         "param") Map<String, Object> param, @Param("courseIds") List<Long> courseIds);
 
     int countTeacherServeHomeworkDetailV2(@Param("param") Map<String, Object> params, @Param("courseIds") List<Long> courseIds);
+
+    /**
+     * 网络课服务提供方
+     * @param courseScheduleId 课程ID
+     * @param serviceProvider 服务提供方
+     */
+    void updateServiceProvider(@Param("courseScheduleId") Long courseScheduleId, @Param("serviceProvider") String serviceProvider);
 }

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TencentData.java

@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ym.mec.biz.dal.enums.ETencentGroupType;
 import com.ym.mec.biz.dal.enums.ETencentImCallbackCommand;
+import com.ym.mec.biz.dal.enums.ETencentTRTCCallbackCommand;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -16,6 +18,7 @@ import lombok.NoArgsConstructor;
 import java.io.Serializable;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
@@ -25,6 +28,8 @@ import java.util.Locale;
  * @author liujunchi
  * @date 2023-03-06
  */
+@NoArgsConstructor
+@Data
 public class TencentData {
 
     // 群成员离开之后回调对象
@@ -451,4 +456,66 @@ public class TencentData {
         private Integer code;
     }
 
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("腾讯云回调事件")
+    public static class TRTCEventInfo implements Serializable {
+
+        @JsonProperty("EventGroupId")
+        @ApiModelProperty("事件组")
+        private Integer eventGroupId;
+
+        @JsonProperty("EventType")
+        @ApiModelProperty("事件类型")
+        private Integer eventType;
+
+        @JsonProperty("CallbackTs")
+        @ApiModelProperty("事件时间")
+        private Long callbackTs;
+
+        @JsonProperty("EventInfo")
+        @ApiModelProperty("事件消息")
+        private EventInfo eventInfo;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("事件消息")
+    public static class EventInfo implements Serializable {
+
+        @JsonProperty("RoomId")
+        @ApiModelProperty("房间号")
+        private String roomId;
+
+        @JsonProperty("EventTs")
+        @ApiModelProperty("事件发生时间")
+        private Long eventTs;
+
+        @JsonProperty("UserId")
+        @ApiModelProperty("事件发生用户")
+        private String userId;
+
+        @JsonProperty("Role")
+        @ApiModelProperty("用户角色")
+        private String role;
+
+        @JsonProperty("TerminalType")
+        @ApiModelProperty("终端类型")
+        private String terminalType;
+
+        @JsonProperty("UserType")
+        @ApiModelProperty("用户类型")
+        private String userType;
+
+        @JsonProperty("Reason")
+        @ApiModelProperty("原因")
+        private String reason;
+    }
 }

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

@@ -207,6 +207,9 @@ public class CourseSchedule  extends BaseEntity{
 	//当前课程是否是转换课
 	private Boolean convertFlag = false;
 
+	@ApiModelProperty("服务提供方")
+	private String serviceProvider;
+
 	public Boolean getSettlementReportFlag() {
 		return settlementReportFlag;
 	}
@@ -661,6 +664,13 @@ public class CourseSchedule  extends BaseEntity{
 		this.teacher = teacher;
 	}
 
+	public String getServiceProvider() {
+		return serviceProvider;
+	}
+
+	public void setServiceProvider(String serviceProvider) {
+		this.serviceProvider = serviceProvider;
+	}
 
 	public static CourseScheduleType getCourseScheduleTypeByCode(String code) {
 		CourseScheduleType type = null;

+ 47 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ETencentTRTCCallbackCommand.java

@@ -0,0 +1,47 @@
+package com.ym.mec.biz.dal.enums;
+
+import lombok.Getter;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2023-03-02
+ */
+@Getter
+public enum ETencentTRTCCallbackCommand {
+
+    EVENT_TYPE_CREATE_ROOM("101", "创建房间"),
+    EVENT_TYPE_DISMISS_ROOM("102", "解散房间"),
+    EVENT_TYPE_ENTER_ROOM("103", "进入房间"),
+    EVENT_TYPE_EXIT_ROOM("104", "退出房间"),
+    EVENT_DEFAULT("-1", "默认无效事件"),
+    ;
+
+    private final String command;
+    private final String desc;
+
+    private final Integer code;
+
+    ETencentTRTCCallbackCommand(String command, String desc) {
+        this.command = command;
+        this.desc = desc;
+
+        // 枚举转换对象
+        this.code = Integer.parseInt(command);
+    }
+
+    /**
+     * 回调事件对象枚举
+     * @param eventType 事件类型
+     * @return ETencentTRTCCallbackCommand
+     */
+    public static ETencentTRTCCallbackCommand get(Integer eventType) {
+        for (ETencentTRTCCallbackCommand e : ETencentTRTCCallbackCommand.values()) {
+            if (e.getCode().equals(eventType)) {
+                return e;
+            }
+        }
+        return EVENT_DEFAULT;
+    }
+}

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

@@ -1,10 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.StudentTeacherMapperDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.DegreeRegistrationDto;
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
@@ -61,6 +58,9 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     private SubjectService subjectService;
 
     @Autowired
+    private SubjectDao subjectDao;
+
+    @Autowired
     private OrganizationService organizationService;
 
     @Override
@@ -280,7 +280,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             // 设置声部
             Set<Integer> subjectIdSet = dataList.stream().map(o -> o.getSubjectId()).filter(Objects::nonNull).collect(Collectors.toSet());
 
-            List<Subject> subjectList = subjectService.findBySubjectByIdList(new ArrayList<>(subjectIdSet));
+            List<Subject> subjectList = subjectDao.findBySubjectIds(new ArrayList<>(subjectIdSet));
 
             // id 分组
             Map<Integer, Subject> subjectMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, Function.identity()));

+ 12 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1353,27 +1353,30 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                             for (int i = 0; i < goodsOrderItemVOS.size(); i++) {
                                 GoodsOrderItemVO goodsVo = goodsOrderItemVOS.get(i);
                                 Goods goods = goodsSnMap.get(goodsVo.getProductSn());
-                                StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
-                                detail.setType(OrderDetailTypeEnum.valueOf(goods.getType() == GoodsType.INSTRUMENT?"MUSICAL":goods.getType().getCode()));
-                                detail.setGoodsIdList(goods.getId().toString());
-                                detail.setPrice(goodsVo.getRealAmount());
-                                detail.setRemitFee(BigDecimal.ZERO);
-                                detail.setPaymentOrderId(paymentOrderId);
-                                orderDetails.add(detail);
+                                for (int j = 0; j < goodsVo.getProductQuantity(); j++) {
+                                    StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+                                    detail.setType(OrderDetailTypeEnum.valueOf(goods.getType() == GoodsType.INSTRUMENT?"MUSICAL":goods.getType().getCode()));
+                                    detail.setGoodsIdList(goods.getId().toString());
+                                    detail.setPrice(goodsVo.getRealAmount());
+                                    detail.setRemitFee(BigDecimal.ZERO);
+                                    detail.setPaymentOrderId(paymentOrderId);
+                                    orderDetails.add(detail);
+                                }
 
+                                BigDecimal totalAmount = goodsVo.getRealAmount().multiply(new BigDecimal(goodsVo.getProductQuantity()));
                                 SellOrder sellOrder = new SellOrder();
                                 sellOrder.setOrganId(organId);
                                 sellOrder.setTransNo(transNo);
                                 sellOrder.setOrderId(paymentOrderId);
                                 sellOrder.setOrderNo(orderNo);
-                                BigDecimal totalAmount = goodsVo.getRealAmount().multiply(new BigDecimal(goodsVo.getProductQuantity()));
-                                sellOrder.setExpectAmount(goodsVo.getRealAmount());
+                                sellOrder.setExpectAmount(totalAmount);
                                 if(goodsOrderItemVOS.size() - 1 == i){
                                     sellOrder.setBalanceAmount(subjectBalance);
                                 }else {
                                     //获取比例
                                     BigDecimal ratioAmount = totalAmount.divide(studentGoodsSellDto.getExpectAmount(), 6, BigDecimal.ROUND_HALF_UP);
                                     BigDecimal multiply = balancePaymentAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    subjectBalance = subjectBalance.subtract(multiply);
                                     sellOrder.setBalanceAmount(multiply);
                                 }
                                 sellOrder.setActualAmount(totalAmount.subtract(sellOrder.getBalanceAmount()));

+ 9 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -174,7 +174,8 @@
         cs.valid_start_time_,
         cs.pre_course_flag_,
         cs.tenant_id_,
-        cs.evaluate_flag_
+        cs.evaluate_flag_,
+        cs.service_provider_
     </sql>
 
     <sql id="courseIgnore">
@@ -4207,4 +4208,11 @@
             <include refid="selectPage"/>
         </where>
     </select>
+
+    <update id="updateServiceProvider">
+        UPDATE course_schedule
+        SET service_provider_ = #{serviceProvider},
+            update_time_ = NOW()
+        WHERE id_ = #{courseScheduleId}
+    </update>
 </mapper>

+ 1 - 1
mec-im/src/main/java/com/ym/config/ResourceServerConfig.java

@@ -26,7 +26,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/room/statusImMsg", "/group/batchDismiss", "/private/send", "/group/send", "/user/tencentImCallback",
                         "/group/dismiss", "/room/statusImMsg", "/history/get", "/user/statusImUser", "/liveRoom/recordSync",
                         "/liveRoom/publishRoomMsg", "/liveRoom/destroy", "/liveRoom/create", "/liveRoom/startRecord",
-                        "/liveRoom/stopRecord", "/liveRoom/userExistInRoom","/liveRoom/checkOnline",
+                        "/liveRoom/stopRecord", "/liveRoom/userExistInRoom","/liveRoom/checkOnline","/room/statusSyncTencent",
                         "/user/tencentStreamEventCallback", "/user/tencentStreamRecordCallback", "/user/tencentStreamExceptionCallback",
                         "/liveRoom/addUserUnableSpeak","/liveRoom/removeUserUnableSpeak","/liveRoom/syncChatRoomStatus","/liveRoom/tencentImCallback")
                 .permitAll().anyRequest().authenticated().and().csrf().disable();

+ 41 - 0
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -2,15 +2,19 @@ package com.ym.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.ym.common.BaseResponse;
+import com.ym.mec.biz.dal.dto.TencentData;
+import com.ym.mec.biz.dal.enums.ETencentTRTCCallbackCommand;
 import com.ym.pojo.*;
 import com.ym.service.MessageService;
 import com.ym.service.RoomService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 
 @RestController
 @RequestMapping("/room")
@@ -104,6 +108,43 @@ public class RoomController{
         }
     }
 
+
+    @PostMapping(value = "/statusSyncTencent")
+    public void statusSyncTencent(@RequestBody TencentData.TRTCEventInfo eventInfo) {
+        try {
+            if (Objects.isNull(eventInfo.getEventInfo())) {
+                log.warn("statusSyncTencent eventInfo is null, time={}", DateTime.now().toString("yyy-MM-dd HH:mm:ss"));
+                return;
+            }
+            log.info("statusSyncTencent: {}", eventInfo.jsonString());
+            String roomId = eventInfo.getEventInfo().getRoomId();
+
+            // 网络教室回调整消息
+            if (roomId.startsWith("S") || roomId.startsWith("I")) {
+                // 进出用户信息
+                String userId = eventInfo.getEventInfo().getUserId();
+                switch (ETencentTRTCCallbackCommand.get(eventInfo.getEventType())){
+                    case EVENT_TYPE_ENTER_ROOM:
+                        //成员加入
+                        roomService.joinRoomSuccess(roomId, userId,null);
+                        break;
+                    case EVENT_TYPE_EXIT_ROOM:
+                        //成员退出
+                        roomService.leaveRoomSuccess(roomId, userId,null);
+                        break;
+                    default:
+                        // 默认事件,直接忽略
+                        break;
+                }
+            }
+
+            // 直播回调整消息, roomId.startsWith("LIVE")
+
+        }catch (Exception e){
+            log.error("statusSyncTencent event={}", eventInfo.jsonString(), e);
+        }
+    }
+
     @RequestMapping(value = "/downgrade", method = RequestMethod.POST)
     public Object downRole(@RequestBody ReqChangeUserRoleData data)
             throws Exception {

+ 37 - 0
mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java

@@ -22,6 +22,12 @@ public class ReqDeviceControlData {
 	private Integer musicScoreAccompanimentId;
 	//伴奏音量
 	private Integer soundVolume = 100;
+	// 服务提供方
+	private String serviceProvider;
+	// 发送用户信息
+	private String sendUserId;
+	private String sendUserName;
+	private String avatar;
 
 	public Integer getMusicScoreAccompanimentId() {
 		return musicScoreAccompanimentId;
@@ -102,4 +108,35 @@ public class ReqDeviceControlData {
 		this.ticket = ticket;
 	}
 
+	public String getServiceProvider() {
+		return serviceProvider;
+	}
+
+	public void setServiceProvider(String serviceProvider) {
+		this.serviceProvider = serviceProvider;
+	}
+
+	public String getSendUserId() {
+		return sendUserId;
+	}
+
+	public void setSendUserId(String sendUserId) {
+		this.sendUserId = sendUserId;
+	}
+
+	public String getSendUserName() {
+		return sendUserName;
+	}
+
+	public void setSendUserName(String sendUserName) {
+		this.sendUserName = sendUserName;
+	}
+
+	public String getAvatar() {
+		return avatar;
+	}
+
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
+	}
 }

+ 2 - 0
mec-im/src/main/java/com/ym/pojo/RoomResult.java

@@ -43,6 +43,8 @@ public class RoomResult {
     private @Getter @Setter String userSig;
     @ApiModelProperty("群组id")
     private @Getter @Setter String groupId;
+    @ApiModelProperty("服务提供商")
+    private @Getter @Setter String serviceProvider;
 
     public RoomResult rtcRoomConfig(RTCRoomConfig rtcRoomConfig) {
         this.rtcRoomConfig = rtcRoomConfig;

ファイルの差分が大きいため隠しています
+ 627 - 98
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java


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

@@ -11,8 +11,10 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
+import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.portal.dto.OrderPayRes;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
+import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.redisson.api.RLock;
@@ -52,6 +54,8 @@ public class PaymentController extends BaseController {
     @Autowired
     private RedissonClient redissonClient;
 
+    @Autowired
+    private UserOrderPaymentService userOrderPaymentService;
 
 
     /***
@@ -78,7 +82,14 @@ public class PaymentController extends BaseController {
                 String transType = request.getParameter("type");
 
 
-                RLock lock = redissonClient.getLock(OrderCacheEnum.LOCK_ORDER_NO_MALL.getRedisKey(dataObj.getString("order_no")));
+                String paymentOrderNo = dataObj.getString("order_no");
+
+                UserOrderPayment userOrderPayment = userOrderPaymentService.getByAdapayNo(paymentOrderNo);
+                if (userOrderPayment == null) {
+                    throw new BizException("订单不存在");
+                }
+
+                RLock lock = redissonClient.getLock(OrderCacheEnum.LOCK_ORDER_NO_MALL.getRedisKey(userOrderPayment.getOrderNo()));
                 try {
                     boolean b = lock.tryLock(60, TimeUnit.SECONDS);
 
@@ -87,7 +98,7 @@ public class PaymentController extends BaseController {
                         switch (transType) {
                             case "payment.succeeded":// 支付成功
 
-                                orderService.paymentSucceededHandle(dataObj.getString("order_no"),
+                                orderService.paymentSucceededHandle(paymentOrderNo,
                                                    dataObj.getBigDecimal("pay_amt"),dataObj.getString("pay_channel"));
 
                                 break;
@@ -99,8 +110,8 @@ public class PaymentController extends BaseController {
                                 notifyMap.put("channelType", dataObj.getString("pay_channel"));
                                 notifyMap.put("tradeState", "0");
                                 notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
-                                notifyMap.put("merOrderNo", dataObj.getString("order_no"));
-                                orderService.paymentFailedHandle(dataObj.getString("order_no"),notifyMap);
+                                notifyMap.put("merOrderNo", paymentOrderNo);
+                                orderService.paymentFailedHandle(paymentOrderNo,notifyMap);
 
                                 break;
                             case "payment_reverse.succeeded" :

+ 1 - 1
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -889,7 +889,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
 
 
-            orderRefund(orderPayment,detail.getPayAmount().toString());
+//            orderRefund(orderPayment,detail.getPayAmount().toString());
         }
 
     }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/DegreeController.java

@@ -29,7 +29,7 @@ public class DegreeController extends BaseController { ;
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('degree/queryPage')")
     public HttpResponseResult queryPage(DegreeQueryInfo queryInfo) {
-        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+//        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setSort("create_time_");
         queryInfo.setOrder("DESC");
         return succeed(degreeRegistrationService.getPageList(queryInfo));

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません