Jelajahi Sumber

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

zouxuan 3 tahun lalu
induk
melakukan
56e15676e7
23 mengubah file dengan 507 tambahan dan 30 penghapusan
  1. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveBroadcastRoomDao.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveRoomReservationDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  4. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RoomReservationUserSearch.java
  5. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomVo.java
  7. 80 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/RoomReservationUserVo.java
  8. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java
  9. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomReservationService.java
  10. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java
  12. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  13. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  14. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomReservationServiceImpl.java
  15. 128 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  16. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  17. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java
  18. 22 0
      mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml
  19. 17 0
      mec-biz/src/main/resources/config/mybatis/ImLiveRoomReservationMapper.xml
  20. 49 5
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  21. 3 0
      mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml
  22. 24 18
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml
  23. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveBroadcastRoomDao.java

@@ -3,9 +3,12 @@ package com.ym.mec.biz.dal.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.vo.BaseRoomUserVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
+import com.ym.mec.biz.dal.vo.RoomReservationUserVo;
+import com.ym.mec.common.page.PageInfo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -25,9 +28,16 @@ public interface ImLiveBroadcastRoomDao extends BaseMapper<ImLiveBroadcastRoom>
 
     int insertBatch(@Param("entities") List<ImLiveBroadcastRoom> entities);
 
-    IPage<Map<Integer,Object>> queryUserPageByTenantId(Page<Map<Integer,Object>> page);
+    IPage<Map<Integer, Object>> queryUserPageByTenantId(Page<Map<Integer, Object>> page);
 
     List<BaseRoomUserVo> queryBaseUserInfo(@Param("list") List<Integer> list);
 
+    /**
+     * 查询直播间预约用户信息
+     *
+     * @return
+     */
+    IPage<RoomReservationUserVo> queryRoomUser(@Param("page") IPage<RoomReservationUserVo> page,
+                                                  @Param("query") RoomReservationUserSearch query);
 }
 

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

@@ -22,5 +22,12 @@ public interface ImLiveRoomReservationDao extends BaseMapper<ImLiveRoomReservati
 
     IPage<ImLiveBroadcastRoomVo> queryPageStudent(Page<ImLiveBroadcastRoomVo> page, @Param("param") Map<String, Object> param);
 
+    /**
+     * 查询房间预约人数
+     *
+     * @param roomIdList 房间id集合
+     * @return
+     */
+    List<ImLiveBroadcastRoomVo> selectCountRoomReservation(@Param("roomIdList") List<String> roomIdList);
 }
 

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java

@@ -26,6 +26,8 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      * @return
      */
     int batchAdd(@Param("studentPaymentOrderDetailList") List<StudentPaymentOrderDetail> studentPaymentOrderDetailList);
+    
+    int batchUpdate(List<StudentPaymentOrderDetail> studentPaymentOrderDetailList);
 
     /**
      * 查询注册支付的订单详情

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RoomReservationUserSearch.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-31
+ */
+public class RoomReservationUserSearch extends QueryInfo {
+
+    @NotBlank(message = "房间号不能为空")
+    @ApiModelProperty("直播房间号")
+    private String roomUid;
+
+    @ApiModelProperty("用户编号/用户名/用户手机号")
+    private String search;
+
+
+    public String getRoomUid() {
+        return roomUid;
+    }
+
+    public void setRoomUid(String roomUid) {
+        this.roomUid = roomUid;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java

@@ -60,6 +60,10 @@ public class StudentPaymentOrderDetail extends BaseEntity {
 
 	//乐保是否是续费 0-否 1-是
 	private Integer isRenew;
+	
+	private String incomeItem;
+	
+	private BigDecimal income;
 
 	@ApiModelProperty(value = "子商品列表",required = false)
 	private List<Goods> childGoodsList;
@@ -208,4 +212,20 @@ public class StudentPaymentOrderDetail extends BaseEntity {
 	public void setCloudTeacherOrderDto(CloudTeacherOrderDto cloudTeacherOrderDto) {
 		this.cloudTeacherOrderDto = cloudTeacherOrderDto;
 	}
+
+	public String getIncomeItem() {
+		return incomeItem;
+	}
+
+	public void setIncomeItem(String incomeItem) {
+		this.incomeItem = incomeItem;
+	}
+
+	public BigDecimal getIncome() {
+		return income;
+	}
+
+	public void setIncome(BigDecimal income) {
+		this.income = income;
+	}
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomVo.java

@@ -87,6 +87,9 @@ public class ImLiveBroadcastRoomVo implements Serializable {
     @ApiModelProperty(value = "累计观看人数")
     private Integer totalLookNum;
 
+    @ApiModelProperty("预约人数")
+    private Integer roomReservationNum;
+
     public Integer getId() {
         return id;
     }
@@ -284,5 +287,13 @@ public class ImLiveBroadcastRoomVo implements Serializable {
     public void setBlacklistFlag(Integer blacklistFlag) {
         this.blacklistFlag = blacklistFlag;
     }
+
+    public Integer getRoomReservationNum() {
+        return roomReservationNum;
+    }
+
+    public void setRoomReservationNum(Integer roomReservationNum) {
+        this.roomReservationNum = roomReservationNum;
+    }
 }
 

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/RoomReservationUserVo.java

@@ -0,0 +1,80 @@
+package com.ym.mec.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-31
+ */
+@ApiModel("预约直播课人员信息")
+public class RoomReservationUserVo {
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("用户名")
+    private String username;
+
+    @ApiModelProperty("手机号")
+    private String phone;
+
+    @ApiModelProperty("分部id")
+    private Long organId;
+
+    @ApiModelProperty("分部名")
+    private  String organName;
+
+    @ApiModelProperty("声部名")
+    private String subjectName;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Long getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Long organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -2,9 +2,11 @@ package com.ym.mec.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
+import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.vo.BaseRoomUserVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
+import com.ym.mec.biz.dal.vo.RoomReservationUserVo;
 import com.ym.mec.common.entity.ImUserState;
 import com.ym.mec.common.page.PageInfo;
 
@@ -85,5 +87,12 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
      */
     List<BaseRoomUserVo> queryBaseUserInfo(List<Integer> userIdList);
 
+    /**
+     * 获取直播间预约用户信息
+     *
+     * @param query
+     * @return
+     */
+    PageInfo<RoomReservationUserVo> queryRoomUser(RoomReservationUserSearch query);
 }
 

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomReservationService.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.common.page.PageInfo;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -38,5 +39,13 @@ public interface ImLiveRoomReservationService extends IService<ImLiveRoomReserva
      * 预约直播间推送极光
      */
     void push(ImLiveBroadcastRoom room);
+
+    /**
+     * 查询直播间预约人数
+     *
+     * @param roomIdList 房间号
+     * @return
+     */
+    List<ImLiveBroadcastRoomVo> countRoomReservation(List<String> roomIdList);
 }
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -12,7 +12,8 @@ import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 public interface PayService {
 	/**
 	*
-	* @param amount 支付金额
+	* @param amount 支付现金
+	* @param balanceAmount 支付余额
 	* @param orderNo 订单编号
 	* @param notifyUrl 回调地址
 	* @param returnUrl 返回地址

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -18,6 +18,8 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      * @param studentPaymentOrderDetailList 订单详情
      */
     int batchAdd(List<StudentPaymentOrderDetail> studentPaymentOrderDetailList);
+    
+    int batchUpdate(List<StudentPaymentOrderDetail> studentPaymentOrderDetailList);
 
     /**
      * 按比例分摊优惠券减免金额-并且批量添加订单

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -26,6 +26,7 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
 import com.ym.mec.util.ini.IniFileUtil;
 import com.ym.mec.util.upload.UploadUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.formula.functions.T;
@@ -39,6 +40,7 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.*;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
@@ -2444,6 +2446,10 @@ public class ExportServiceImpl implements ExportService {
                             row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
                             break;
                         case MUSICAL:
+                        	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
+                        		row.setCloudTeacherFee(orderDetail.getIncome());
+                        		break;
+                        	}
                             if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
                                 BigDecimal leaseFee = orderDetail.getPrice();
                                 if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -2456,9 +2462,17 @@ public class ExportServiceImpl implements ExportService {
                             break;
                         case ACCESSORIES:
                         case TEACHING:
+                        	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
+                        		row.setCloudTeacherFee(orderDetail.getIncome());
+                        		break;
+                        	}
                             row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
                             break;
                         case OTHER:
+                        	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
+                        		row.setCloudTeacherFee(orderDetail.getIncome());
+                        		break;
+                        	}
                             row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
                             break;
                         case MAINTENANCE:

+ 31 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -15,6 +15,7 @@ import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
 import com.ym.mec.biz.dal.dao.LiveGoodsMapperDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
+import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomData;
 import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
@@ -22,6 +23,7 @@ import com.ym.mec.biz.dal.entity.ImLiveRoomBlack;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.vo.BaseRoomUserVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
+import com.ym.mec.biz.dal.vo.RoomReservationUserVo;
 import com.ym.mec.biz.dal.vo.RoomUserInfoVo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.entity.ImRoomMessage;
@@ -201,6 +203,26 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         addTimeCons.accept("startTime", "00:00:00");
         addTimeCons.accept("endTime", "23:59:59");
         IPage<ImLiveBroadcastRoomVo> page = baseMapper.queryPage(pageInfo, param);
+
+        // 查询预约人数
+        List<ImLiveBroadcastRoomVo> records = page.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return PageUtil.pageInfo(page);
+        }
+
+        List<String> roomIdList = records.stream().map(ImLiveBroadcastRoomVo::getRoomUid).collect(Collectors.toList());
+
+        List<ImLiveBroadcastRoomVo> countRoomReservationList = imLiveRoomReservationService.countRoomReservation(roomIdList);
+        Map<String, List<ImLiveBroadcastRoomVo>> collect = countRoomReservationList.stream()
+                                               .collect(Collectors.groupingBy(ImLiveBroadcastRoomVo::getRoomUid));
+        for (ImLiveBroadcastRoomVo record : records) {
+            List<ImLiveBroadcastRoomVo> imLiveBroadcastRoomVos = collect.get(record.getRoomUid());
+            if (CollectionUtils.isEmpty(imLiveBroadcastRoomVos)) {
+                continue;
+            }
+            record.setRoomReservationNum(imLiveBroadcastRoomVos.get(0).getRoomReservationNum());
+        }
+
         return PageUtil.pageInfo(page);
     }
 
@@ -1148,6 +1170,15 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 .orElseThrow(() -> new BizException("用户id集合不能为空"));
     }
 
+    @Override
+    public PageInfo<RoomReservationUserVo> queryRoomUser(RoomReservationUserSearch query) {
+
+
+        IPage<RoomReservationUserVo> page = new Page<>(query.getPage(),query.getRows());
+        page = baseMapper.queryRoomUser(page, query);
+        return PageUtil.pageInfo(page);
+    }
+
     /**
      * 查询直播间所有用户信息
      *

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomReservationServiceImpl.java

@@ -130,6 +130,13 @@ public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomRese
                 .eq(ImLiveRoomReservation::getRoomUid, room.getRoomUid()));
     }
 
+    @Override
+    public List<ImLiveBroadcastRoomVo> countRoomReservation(List<String> roomIdList) {
+
+        return  baseMapper.selectCountRoomReservation(roomIdList);
+
+    }
+
     private SysUser getUser() {
         return Optional.ofNullable(sysUserFeignService.queryUserInfo())
                 .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));

+ 128 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -9,7 +9,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -23,16 +22,20 @@ import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.AmountChannelDto;
 import com.ym.mec.biz.dal.dto.RouteScaleDto;
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
-import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
 import com.ym.mec.biz.dal.enums.FeeTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.SellOrderService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysPaymentConfigService;
@@ -50,6 +53,13 @@ import com.ym.mec.util.date.DateUtil;
 public class PayServiceImpl implements PayService {
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
+    
+    @Autowired
+    private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
+    
+    @Autowired
+    private GoodsService goodsService;
+    
     @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
@@ -111,6 +121,8 @@ public class PayServiceImpl implements PayService {
             return unionPay;
         }
         
+		Date date = new Date();
+        
         //如果当前是买的小课/网管课
 		if (studentPaymentOrder != null && studentPaymentOrder.getType() == OrderTypeEnum.SMALL_CLASS_TO_BUY || studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_BUY
 				|| studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_RENEW) {
@@ -122,7 +134,6 @@ public class PayServiceImpl implements PayService {
 			String isPlatformCollection = sysConfigDao.findConfigValue(SysConfigService.IS_OPEN_SMALL_CLASS_INCOME_TO_PLATFORM);
 			
 			if (StringUtils.equals("1", isPlatformCollection) && !ignoreOrganList.contains(organId)) {
-				Date date = new Date();
 	        	
 	        	String merNo = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
 	        	
@@ -158,12 +169,125 @@ public class PayServiceImpl implements PayService {
 			}
 			
 		}
+
+		BigDecimal subBalance = BigDecimal.ZERO;
+		
+		BigDecimal subCashAmount = BigDecimal.ZERO;
+    	//忽略的分部
+		List<Integer> ignoreOrganList = Arrays.asList(4, 55, 59);
+		
+		//查询商品收款账户配置
+        String goodsSellReceiptMerNo = sysConfigDao.findConfigValue("goodsSellReceiptMerNo");
+        
+        if(!ignoreOrganList.contains(organId) && StringUtils.isNotBlank(goodsSellReceiptMerNo)){
+			
+        	//根据商户号查询对应分部
+        	SysPaymentConfig sysPaymentConfig = sysPaymentConfigService.findPaymentConfigByMerNo(StringUtils.trim(goodsSellReceiptMerNo));
+        	
+        	if(sysPaymentConfig != null){
+
+    			List<StudentPaymentOrderDetail> batchUpdateList = new ArrayList<StudentPaymentOrderDetail>();
+        		
+        		// 如果买了商品或组合商品,商品有内部库存,则将钱转入指定账户已云教练的方式作为收费项目(杭州、齐齐哈尔除外)
+        		// 1.查询商品订单明细
+        		List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailService.queryOrderDetail(studentPaymentOrder.getId());
+        		if (studentPaymentOrderDetailList != null && studentPaymentOrderDetailList.size() > 0) {
+        			
+        			String goodIds = studentPaymentOrderDetailList.stream().filter(t -> StringUtils.isNotBlank(t.getGoodsIdList())).map(StudentPaymentOrderDetail :: getGoodsIdList).collect(Collectors.joining(","));
+        			if(StringUtils.isNotBlank(goodIds)){
+        				List<Goods> goodsList = goodsService.findGoodsByIds(goodIds);
+        				
+        				Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
+        				Goods goods = null;
+        				BigDecimal totalAmout = studentPaymentOrder.getExpectAmount();
+        				
+        				for(StudentPaymentOrderDetail spod : studentPaymentOrderDetailList){
+        					
+        					if(StringUtils.isBlank(spod.getGoodsIdList())){
+        						continue;
+        					}
+        					BigDecimal tempBalance = BigDecimal.ZERO;
+        					
+        					BigDecimal tempCashAmount = BigDecimal.ZERO;
+        					
+        					BigDecimal totalGroupPurchaseAmount = BigDecimal.ZERO;
+        					
+        					BigDecimal groupPurchaseAmount = BigDecimal.ZERO;
+        					
+        					for(String goodsIdStr : spod.getGoodsIdList().split(",")){
+        						if(StringUtils.isBlank(goodsIdStr)){
+        							continue;
+        						}
+        						goods = goodsMap.get(Integer.parseInt(goodsIdStr));
+        						
+        						if(goods != null){
+        							// 是否是组合商品
+        							if(StringUtils.isNotBlank(goods.getComplementGoodsIdList())){
+        								goodsList = goodsService.findGoodsByIds(goods.getComplementGoodsIdList());
+        								totalGroupPurchaseAmount =  totalGroupPurchaseAmount.add(goodsList.stream().map(Goods :: getGroupPurchasePrice).reduce(BigDecimal.ZERO,BigDecimal :: add));
+        								
+        								for(Goods subGoods : goodsList){
+        									//判断是否有内部库存
+        									if(subGoods.getStockCount() > 0){
+        										groupPurchaseAmount = groupPurchaseAmount.add(subGoods.getGroupPurchasePrice());
+        									}
+        								}
+        							}else{
+    									totalGroupPurchaseAmount = totalGroupPurchaseAmount.add(goods.getGroupPurchasePrice());
+        								//判断是否有内部库存
+        								if(goods.getStockCount() > 0){
+    										groupPurchaseAmount = groupPurchaseAmount.add(goods.getGroupPurchasePrice());
+        								}
+        							}
+        						}
+        					}
+        					
+							if (groupPurchaseAmount.doubleValue() > 0) {
+	        					// 3.是否使用余额
+								if (balanceAmount.doubleValue() > 0) {
+									tempBalance = balanceAmount.multiply(spod.getPrice()).divide(totalAmout).multiply(groupPurchaseAmount)
+											.divide(totalGroupPurchaseAmount);
+									subBalance = subBalance.add(tempBalance);
+								}
+								tempCashAmount = spod.getPrice().subtract(tempBalance).multiply(groupPurchaseAmount).divide(totalGroupPurchaseAmount);
+								subCashAmount = subCashAmount.add(spod.getPrice().subtract(tempBalance).subtract(tempCashAmount));
+								spod.setIncomeItem(OrderDetailTypeEnum.CLOUD_TEACHER.name());
+								spod.setIncome(tempCashAmount);
+								batchUpdateList.add(spod);
+							}
+        				}
+        			}
+        		}
+        		
+        		if(batchUpdateList.size() > 0){
+        			studentPaymentOrderDetailService.batchUpdate(batchUpdateList);
+        		}
+        		
+        		if(subCashAmount.doubleValue() > 0){
+        			StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+    	            studentPaymentRouteOrder.setOrderNo(orderNo);
+    	            studentPaymentRouteOrder.setRouteOrganId(sysPaymentConfig.getOrganId());
+    	            studentPaymentRouteOrder.setFeeFlag("Y");
+    	            studentPaymentRouteOrder.setRouteAmount(subCashAmount);
+    	            studentPaymentRouteOrder.setRouteBalanceAmount(subBalance);
+    	            studentPaymentRouteOrder.setMerNo(goodsSellReceiptMerNo);
+    	            studentPaymentRouteOrder.setSaleAmount(BigDecimal.ZERO);
+    	            studentPaymentRouteOrder.setServiceAmount(amount);
+    	            studentPaymentRouteOrder.setCreateTime(date);
+    	            studentPaymentRouteOrder.setUpdateTime(date);
+    	            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
+        		}
+        	}
+        }
+		
+		amount = amount.subtract(subCashAmount);
+		balanceAmount = balanceAmount.subtract(subBalance);
         
         String usePaymentConfig = sysConfigDao.findConfigValue("use_payment_config");// 是否用收费配置(1:使用 0:不使用)
         List<RouteScaleDto> routeScaleDtos = null;
         //使用配置开关
         if (usePaymentConfig.equals("0")) {
-            routeScaleDtos = noUsePaymentConfig(amount);
+            routeScaleDtos = noUsePaymentConfig(amount); //款项都收到平台商户
         }
 
         //根据费用类型

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -10,6 +10,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -75,7 +76,12 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 .orElse(0);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @Override
+	public int batchUpdate(List<StudentPaymentOrderDetail> studentPaymentOrderDetailList) {
+		return studentPaymentOrderDetailDao.batchUpdate(studentPaymentOrderDetailList);
+	}
+
+	@Transactional(rollbackFor = Exception.class)
     @Override
     public int allocateAndAdd(List<StudentPaymentOrderDetail> studentPaymentOrderDetailList, BigDecimal couponRemitFee) {
         return Optional.ofNullable(studentPaymentOrderDetailList)

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java

@@ -72,6 +72,7 @@ public class SysCouponServiceImpl extends BaseServiceImpl<Integer, SysCoupon> im
             if (oldCoupon.getStockCount() - oldCoupon.getConsumeNum() > oldCoupon.getWarningStockNum()) {
                 oldCoupon.setWarningStatus(0);
             }
+            oldCoupon.setUseCondition(sysCoupon.getUseCondition());
             sysCouponDao.update(oldCoupon);
         } else {
             switch (sysCoupon.getType()) {

+ 22 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml

@@ -113,4 +113,26 @@
         </where>
     </select>
 
+    <select id="queryRoomUser" resultType="com.ym.mec.biz.dal.vo.RoomReservationUserVo">
+
+        select
+            su.id_ as userId
+            ,su.username_ as username
+            ,su.phone_ as phone
+            ,su.organ_id_ as organId
+            ,o.name_ as organName
+            ,(select group_concat(sub.name_) from subject sub
+                where find_in_set(sub.id_,s.subject_id_list_) and sub.del_flag_ = 0 ) as subjectName
+        from im_live_room_reservation ilrr
+        left join sys_user su on su.id_ = ilrr.user_id_
+        left join organization o on o.id_ = su.organ_id_
+        left join student s on s.user_id_ = su.id_
+        where ilrr.room_uid_ = #{query.roomUid}
+            <if test="query.search != null and query.search != ''">
+                and (su.id_ like concat('%',#{query.search},'%')
+                    or su.phone_ like concat('%',#{query.search},'%')
+                    or su.username_ like concat('%',#{query.search},'%'))
+            </if>
+
+    </select>
 </mapper>

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveRoomReservationMapper.xml

@@ -64,4 +64,21 @@
             </if>
         </where>
     </select>
+
+    <select id="selectCountRoomReservation" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo">
+        select
+        lbr.room_uid_,
+        count(1)
+        from im_live_room_reservation lbr
+
+        <where>
+            <if test="roomIdList != null and roomIdList.size() != 0">
+                and lbr.room_uid_ in
+                <foreach collection="roomIdList" separator="," close=")" open="(" item="item" >
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        group by lbr.room_uid_
+    </select>
 </mapper>

+ 49 - 5
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -19,8 +19,9 @@
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="student_instrument_id_" property="studentInstrumentId"/>
         <result column="is_renew_" property="isRenew"/>
+        <result column="income_item_" property="incomeItem"/>
+        <result column="income_" property="income"/>
         <result column="user_id_" property="userId"/>
-        <result column="remit_fee_" property="remitFee"/>
         <collection property="goodsList" ofType="com.ym.mec.biz.dal.entity.Goods">
             <result column="goods_id_" property="id"/>
             <result column="goods_name_" property="name"/>
@@ -63,10 +64,10 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order_detail
         (type_,goods_id_list_,price_,create_time_,update_time_,payment_order_id_,kit_group_purchase_type_,
-         student_instrument_id_,is_renew_,tenant_id_,remit_fee_)
+         student_instrument_id_,is_renew_,income_item_,income_,tenant_id_,remit_fee_)
         VALUES(#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{goodsIdList},#{price},now(),now(),
         #{paymentOrderId},#{kitGroupPurchaseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-               #{studentInstrumentId},#{isRenew},#{tenantId},#{remitFee})
+               #{studentInstrumentId},#{isRenew},#{incomeItem},#{income},#{tenantId},#{remitFee})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -95,9 +96,52 @@
             <if test="studentInstrumentId != null">
                 student_instrument_id_ = #{studentInstrumentId},
             </if>
+            <if test="incomeItem != null">
+                income_item_ = #{incomeItem},
+            </if>
+            <if test="income != null">
+                income_ = #{income},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>
+    
+    <update id="batchUpdate" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+	        UPDATE student_payment_order_detail
+	        <set>
+	            <if test="item.price != null">
+	                price_ = #{item.price},
+	            </if>
+	            <if test="item.goodsIdList != null">
+	                goods_id_list_ = #{item.goodsIdList},
+	            </if>
+	            <if test="item.updateTime != null">
+	                update_time_ = NOW(),
+	            </if>
+	            <if test="item.paymentOrderId != null">
+	                payment_order_id_ = #{item.paymentOrderId},
+	            </if>
+	            <if test="item.kitGroupPurchaseType != null">
+	                kit_group_purchase_type_ =
+	                #{item.kitGroupPurchaseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.type != null">
+	                type_ = #{item.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+	            </if>
+	            <if test="item.studentInstrumentId != null">
+	                student_instrument_id_ = #{item.studentInstrumentId},
+	            </if>
+	            <if test="item.incomeItem != null">
+	                income_item_ = #{item.incomeItem},
+	            </if>
+	            <if test="item.income != null">
+	                income_ = #{item.income},
+	            </if>
+	        </set>
+	        WHERE id_ = #{item.id} and tenant_id_ = #{item.tenantId}
+        </foreach>
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">
@@ -121,13 +165,13 @@
     <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
         INSERT INTO student_payment_order_detail
         (type_,goods_id_list_,price_,remit_fee_,create_time_,update_time_,payment_order_id_,
-         kit_group_purchase_type_,student_instrument_id_,is_renew_,tenant_id_)
+         kit_group_purchase_type_,student_instrument_id_,is_renew_,income_item_,income_,tenant_id_)
         VALUE
         <foreach collection="studentPaymentOrderDetailList" item="orderDetail" separator=",">
             (#{orderDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{orderDetail.goodsIdList},#{orderDetail.price},#{orderDetail.remitFee},now(),now(),#{orderDetail.paymentOrderId},
             #{orderDetail.kitGroupPurchaseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{orderDetail.studentInstrumentId},#{orderDetail.isRenew},#{orderDetail.tenantId})
+            #{orderDetail.studentInstrumentId},#{orderDetail.isRenew},#{orderDetail.incomeItem},#{orderDetail.income},#{orderDetail.tenantId})
         </foreach>
     </insert>
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml

@@ -106,6 +106,9 @@
 			<if test="useCondition != null">
 				use_condition_ = #{useCondition},
 			</if>
+			<if test="issuanceType != null">
+				issuance_type_ = #{issuanceType},
+			</if>
 				update_time_ = NOW()
 		</set>
 		WHERE id_ = #{id} and tenant_id_ = #{tenantId}

+ 24 - 18
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml

@@ -106,24 +106,30 @@
         e.name_ as imGroupName,
         ifnull(b.playDay, 0) as playDay,
         ifnull(c.playTime, 0) as playTime
-        FROM temp_little_artist_training_camp_user_relation as a
-        left join (select a.user_id_, count(playDay) as playDay
-        from (SELECT cr.`user_id_`,
-        date(cr.`create_time_`) as playDay
-        FROM `sys_music_compare_record` cr
-        WHERE date(cr.`create_time_`) &gt;= #{param.startTime}
-        AND date(cr.`create_time_`) &lt;= #{param.endTime}
-        GROUP BY cr.`user_id_`, date(cr.`create_time_`)
-        HAVING sum(cr.`play_time_`) > 1200) as a
-        group by a.user_id_) as b on a.user_id_ = b.user_id_
-        left join (SELECT cr.`user_id_`,
-        sum(cr.`play_time_`) as playTime
-        FROM `sys_music_compare_record` cr
-        WHERE date(cr.`create_time_`) &gt;= #{param.startTime}
-        AND date(cr.`create_time_`) &lt;= #{param.endTime}
-        GROUP BY cr.`user_id_`) as c on a.user_id_ = c.user_id_
-        left join sys_user as d on d.id_ = a.user_id_
-        left join im_group as e on a.im_group_id_ = e.id_
+        FROM `temp_little_artist_training_camp_user_relation` `a`
+        LEFT JOIN (
+        SELECT `a`.`user_id_`, COUNT(`playDay`) AS `playDay`
+        FROM (
+        SELECT `cr`.`user_id_`, DATE(`cr`.`create_time_`) AS `playDay`
+        FROM `sys_music_compare_record` `cr`
+        WHERE `cr`.`create_time_` &gt;= DATE_ADD(DATE(#{param.startTime}), INTERVAL IF(#{param.startTime} = DATE(#{param.startTime}), 0, 1) DAY)
+        AND `cr`.`create_time_` &lt; DATE_ADD(DATE(#{param.endTime}), INTERVAL 1 DAY)
+        GROUP BY `cr`.`user_id_`, DATE(`cr`.`create_time_`)
+        HAVING SUM(`cr`.`play_time_`) > 1200
+        ) `a`
+        GROUP BY `a`.`user_id_`
+        ) `b`
+        ON `a`.`user_id_` = `b`.`user_id_`
+        LEFT JOIN (
+        SELECT `cr`.`user_id_`, SUM(`cr`.`play_time_`) AS `playTime`
+        FROM `sys_music_compare_record` `cr`
+        WHERE `cr`.`create_time_` &gt;= DATE_ADD(DATE(#{param.startTime}), INTERVAL IF(#{param.startTime} = DATE(#{param.startTime}), 0, 1) DAY)
+        AND `cr`.`create_time_` &lt; DATE_ADD(DATE(#{param.endTime}), INTERVAL 1 DAY)
+        GROUP BY `cr`.`user_id_`
+        ) `c`
+        ON `a`.`user_id_` = `c`.`user_id_`
+        LEFT JOIN `sys_user` `d` ON `d`.`id_` = `a`.`user_id_`
+        LEFT JOIN `im_group` `e` ON `a`.`im_group_id_` = `e`.`id_`
         <where>
             a.activity_id_ = #{param.campId} and a.state_ = #{param.state}
             <if test="param.imGroupId != null">

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -2,13 +2,16 @@ package com.ym.mec.web.controller;
 
 
 import com.ym.mec.biz.dal.dto.ImLiveBroadcastRoomDto;
+import com.ym.mec.biz.dal.dto.RoomReservationUserSearch;
 import com.ym.mec.biz.dal.vo.BaseRoomUserVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
+import com.ym.mec.biz.dal.vo.RoomReservationUserVo;
 import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImUserState;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.WrapperUtil;
 import io.swagger.annotations.*;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -51,6 +54,13 @@ public class ImLiveBroadcastRoomController extends BaseController {
         return succeed(imLiveBroadcastRoomService.queryPage(param));
     }
 
+
+    @ApiOperation("直播间预约人员信息")
+    @PostMapping("/query/roomUser")
+    public HttpResponseResult<PageInfo<RoomReservationUserVo>> queryRoomUser(@RequestBody @Valid RoomReservationUserSearch query) {
+        return succeed(imLiveBroadcastRoomService.queryRoomUser(query));
+    }
+
     @ApiOperation("查询房间信息并校验房间是否合规")
     @GetMapping("/queryRoom")
     public HttpResponseResult<ImLiveBroadcastRoomVo> queryRoomAndCheck(@ApiParam(value = "房间uid", required = true) String roomUid,