浏览代码

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into zx_index_error

zouxuan 2 年之前
父节点
当前提交
882d0b92c6
共有 26 个文件被更改,包括 1171 次插入111 次删除
  1. 119 0
      audio-analysis/src/test/java/com/yonge/netty/client/NettyClient.java
  2. 87 0
      audio-analysis/src/test/java/com/yonge/netty/handler/WebSocketClientHandler.java
  3. 0 0
      audio-analysis/src/test/resoures/9550.json
  4. 二进制
      audio-analysis/src/test/resoures/9550.wav
  5. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectChangeDao.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  7. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempTestDao.java
  8. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherBasicDto.java
  9. 215 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempTest.java
  10. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java
  11. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempTestService.java
  12. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationShareProfitServiceImpl.java
  13. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  14. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  15. 14 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  16. 4 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  17. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  18. 126 93
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  19. 227 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempTestServiceImpl.java
  20. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  21. 8 0
      mec-biz/src/main/resources/config/mybatis/SubjectChangeMapper.xml
  22. 21 5
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  23. 145 0
      mec-biz/src/main/resources/config/mybatis/TempTestMapper.xml
  24. 8 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherImLiveBroadcastRoomController.java
  25. 1 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  26. 64 0
      mec-web/src/main/java/com/ym/mec/web/controller/TempController.java

+ 119 - 0
audio-analysis/src/test/java/com/yonge/netty/client/NettyClient.java

@@ -0,0 +1,119 @@
+package com.yonge.netty.client;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.handler.codec.http.DefaultHttpHeaders;
+import io.netty.handler.codec.http.HttpClientCodec;
+import io.netty.handler.codec.http.HttpHeaders;
+import io.netty.handler.codec.http.HttpObjectAggregator;
+import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame;
+import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
+import io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker;
+import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory;
+import io.netty.handler.codec.http.websocketx.WebSocketVersion;
+import io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketServerCompressionHandler;
+import io.netty.handler.stream.ChunkedWriteHandler;
+
+import java.io.FileInputStream;
+import java.net.URI;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+
+import com.yonge.netty.handler.WebSocketClientHandler;
+
+public class NettyClient {
+	
+	public static void main(String[] args) throws Exception {
+		NettyClient client = new NettyClient();
+		client.connect(new URI("ws://localhost:8090/audioAnalysis/123456"), "654321");
+	}
+
+	public void connect(URI websocketURI, String token) throws Exception {
+		EventLoopGroup worker = new NioEventLoopGroup();
+		try {
+			Bootstrap b = new Bootstrap();
+			/**
+			 *EventLoop的组
+			 */
+			b.group(worker);
+			/**
+			 * 用于构造socketchannel工厂
+			 */
+			b.channel(NioSocketChannel.class);
+			/**设置选项
+			 * 参数:Socket的标准参数(key,value),可自行百度
+			   保持呼吸,不要断气!
+			 * */
+			b.option(ChannelOption.SO_KEEPALIVE, true);
+			
+			HttpHeaders httpHeaders = new DefaultHttpHeaders();
+			httpHeaders.add("Authorization", token);
+            //进行握手
+            WebSocketClientHandshaker handshaker = WebSocketClientHandshakerFactory.newHandshaker(websocketURI, WebSocketVersion.V13, (String)null, true,httpHeaders);
+			
+			final WebSocketClientHandler handler = new WebSocketClientHandler(handshaker);
+			
+			/**
+			 * 自定义客户端Handle(客户端在这里搞事情)
+			 */
+			b.handler(new ChannelInitializer<SocketChannel>() {
+				@Override
+				public void initChannel(SocketChannel ch) throws Exception {
+					ch.pipeline().addLast(new HttpClientCodec());
+					ch.pipeline().addLast(new ChunkedWriteHandler());
+					ch.pipeline().addLast(new HttpObjectAggregator(1024 * 8));
+					ch.pipeline().addLast(new WebSocketServerCompressionHandler());
+					//ch.pipeline().addLast(new WebSocketclientProtocolHandler(webSocketPath, "WebSocket", true, 65536 * 1000, false, true))
+					ch.pipeline().addLast(handler);
+				}
+			});
+			
+			Channel channel = b.connect(websocketURI.getHost(), websocketURI.getPort()).sync().channel();
+	        handler.handshakeFuture().sync();
+	        
+			//step1发送xml
+			String step1 = FileUtils.readFileToString(FileUtils.toFile(WebSocketClientHandler.class.getResource("/9550.json")));
+			channel.writeAndFlush(new TextWebSocketFrame(step1));
+			
+			String step2 = "{\"header\":{\"commond\":\"recordStart\",\"type\":\"SOUND_COMPARE\",\"status\":200}}";
+			channel.writeAndFlush(new TextWebSocketFrame(step2));
+			
+			String step3 = "{\"body\":{\"offsetTime\":113},\"uuid\":\"1662715309875118846\",\"header\":{\"commond\":\"audioPlayStart\",\"type\":\"SOUND_COMPARE\"}}";
+			channel.writeAndFlush(new TextWebSocketFrame(step3));
+			
+			//step4 发送wav
+			String fileName = "/9550.wav";
+			AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(FileUtils.toFile(WebSocketClientHandler.class.getResource(fileName)));
+			
+			AudioFormat baseFormat = audioInputStream.getFormat();
+
+			System.out.println(baseFormat.toString());
+
+			byte[] audio = IOUtils.toByteArray(audioInputStream);
+			
+			channel.writeAndFlush(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(audio)));
+			audioInputStream.close();
+			
+			//step5 结束评测
+			String step5 = "{\"header\":{\"commond\":\"recordEnd\",\"type\":\"SOUND_COMPARE\",\"status\":200}}";
+			channel.writeAndFlush(new TextWebSocketFrame(step5));
+			
+			
+		} finally {
+			//worker.shutdownGracefully();
+		}
+	}
+
+}

+ 87 - 0
audio-analysis/src/test/java/com/yonge/netty/handler/WebSocketClientHandler.java

@@ -0,0 +1,87 @@
+package com.yonge.netty.handler;
+
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelPromise;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.http.FullHttpResponse;
+import io.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
+import io.netty.handler.codec.http.websocketx.PongWebSocketFrame;
+import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
+import io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker;
+import io.netty.handler.codec.http.websocketx.WebSocketFrame;
+import io.netty.handler.codec.http.websocketx.WebSocketHandshakeException;
+import io.netty.util.CharsetUtil;
+
+public class WebSocketClientHandler extends SimpleChannelInboundHandler<Object> {
+
+    private final WebSocketClientHandshaker handshaker;
+    private ChannelPromise handshakeFuture;
+
+    public WebSocketClientHandler(WebSocketClientHandshaker handshaker) {
+        this.handshaker = handshaker;
+    }
+
+    public ChannelFuture handshakeFuture() {
+        return handshakeFuture;
+    }
+
+    @Override
+    public void handlerAdded(ChannelHandlerContext ctx) {
+        handshakeFuture = ctx.newPromise();
+    }
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) {
+        handshaker.handshake(ctx.channel());
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) {
+        System.out.println("WebSocket Client disconnected!");
+    }
+
+    @Override
+    public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
+        Channel ch = ctx.channel();
+        if (!handshaker.isHandshakeComplete()) {
+            try {
+                handshaker.finishHandshake(ch, (FullHttpResponse) msg);
+                System.out.println("WebSocket Client connected!");
+                handshakeFuture.setSuccess();
+            } catch (WebSocketHandshakeException e) {
+                System.out.println("WebSocket Client failed to connect");
+                handshakeFuture.setFailure(e);
+            }
+            return;
+        }
+
+        if (msg instanceof FullHttpResponse) {
+            FullHttpResponse response = (FullHttpResponse) msg;
+            throw new IllegalStateException(
+                    "Unexpected FullHttpResponse (getStatus=" + response.status() +
+                            ", content=" + response.content().toString(CharsetUtil.UTF_8) + ')');
+        }
+
+        WebSocketFrame frame = (WebSocketFrame) msg;
+        if (frame instanceof TextWebSocketFrame) {
+            TextWebSocketFrame textFrame = (TextWebSocketFrame) frame;
+            System.out.println("WebSocket Client received message: " + textFrame.text());
+        } else if (frame instanceof PongWebSocketFrame) {
+            System.out.println("WebSocket Client received pong");
+        } else if (frame instanceof CloseWebSocketFrame) {
+            System.out.println("WebSocket Client received closing");
+            ch.close();
+        }
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+        cause.printStackTrace();
+        if (!handshakeFuture.isDone()) {
+            handshakeFuture.setFailure(cause);
+        }
+        ctx.close();
+    }
+}

文件差异内容过多而无法显示
+ 0 - 0
audio-analysis/src/test/resoures/9550.json


二进制
audio-analysis/src/test/resoures/9550.wav


+ 13 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectChangeDao.java

@@ -1,12 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
-import com.ym.mec.biz.dal.entity.SubjectChange;
-import com.ym.mec.common.dal.BaseDAO;
-import org.apache.ibatis.annotations.Param;
-
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.entity.SubjectChange;
+import com.ym.mec.common.dal.BaseDAO;
+
 public interface SubjectChangeDao extends BaseDAO<Integer, SubjectChange> {
 public interface SubjectChangeDao extends BaseDAO<Integer, SubjectChange> {
 
 
 
 
@@ -74,4 +76,11 @@ public interface SubjectChangeDao extends BaseDAO<Integer, SubjectChange> {
      * @return
      * @return
      */
      */
     List<SubjectChange> getMargin(@Param("musicGroupId") String musicGroupId);
     List<SubjectChange> getMargin(@Param("musicGroupId") String musicGroupId);
+    
+    /**
+     * 获取总的课程差额
+     * @param musicGroupId
+     * @return
+     */
+    BigDecimal getTotalCourseMargin(@Param("musicGroupId") String musicGroupId);
 }
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -328,6 +328,10 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     SysUser getUser(int userId);
     SysUser getUser(int userId);
 
 
     SysUser getUserWithPhone(@Param("phone") String phone);
     SysUser getUserWithPhone(@Param("phone") String phone);
+    
+    SysUser getUserWithIdCard(@Param("idCard") String idCard);
+    
+    SysUser getUserWithRealName(@Param("realName") String realName);
 
 
     /**
     /**
      * 获取教师基本信息
      * 获取教师基本信息

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempTestDao.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.dao;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface TempTestDao extends BaseDAO<Long, TempTest> {
+	
+	int batchInsert(List<TempTest> list);
+
+	List<TempTest> queryCourseScheduleInfo(@Param("userId") Integer userId, @Param("month") String month);
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherBasicDto.java

@@ -9,6 +9,8 @@ public class TeacherBasicDto {
     private String username;
     private String username;
 
 
     private Integer organId;
     private Integer organId;
+    
+    private String mobile;
 
 
     public Integer getOrganId() {
     public Integer getOrganId() {
         return organId;
         return organId;
@@ -41,4 +43,12 @@ public class TeacherBasicDto {
     public void setUsername(String username) {
     public void setUsername(String username) {
         this.username = username;
         this.username = username;
     }
     }
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
 }
 }

+ 215 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempTest.java

@@ -0,0 +1,215 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(temp_test):
+ */
+public class TempTest {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private String groupType;
+	
+	/**  */
+	private String musicGroupId;
+	
+	/** 班级编号 */
+	private Integer classGroupId;
+	
+	/** 上课日期 */
+	private java.util.Date classDate;
+	
+	/** 上课时间 */
+	private java.util.Date startClassTime;
+	
+	/** 结束时间 */
+	private java.util.Date endClassTime;
+	
+	/** 实际上课教师 */
+	private Integer actualTeacherId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/** 教学形式(线上、线下) */
+	private String teachMode;
+	
+	/** 课程类型(单技课、小班课、合奏课、综合课、练习课、启蒙课、集训课、VIP课、试听课) */
+	private String type;
+	
+	/** 课程名 */
+	private String name;
+	
+	/** 实际上课人数 */
+	private Integer studentNum;
+	
+	/**  */
+	private Integer schooleId;
+	
+	/** 备忘录 */
+	private String note;
+	
+	/** 课程分部 */
+	private Integer organId;
+	
+	/** 课酬 */
+	private BigDecimal salary;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setGroupType(String groupType){
+		this.groupType = groupType;
+	}
+	
+	public String getGroupType(){
+		return this.groupType;
+	}
+			
+	public void setMusicGroupId(String musicGroupId){
+		this.musicGroupId = musicGroupId;
+	}
+	
+	public String getMusicGroupId(){
+		return this.musicGroupId;
+	}
+			
+	public void setClassGroupId(Integer classGroupId){
+		this.classGroupId = classGroupId;
+	}
+	
+	public Integer getClassGroupId(){
+		return this.classGroupId;
+	}
+			
+	public void setClassDate(java.util.Date classDate){
+		this.classDate = classDate;
+	}
+	
+	public java.util.Date getClassDate(){
+		return this.classDate;
+	}
+			
+	public void setStartClassTime(java.util.Date startClassTime){
+		this.startClassTime = startClassTime;
+	}
+	
+	public java.util.Date getStartClassTime(){
+		return this.startClassTime;
+	}
+			
+	public void setEndClassTime(java.util.Date endClassTime){
+		this.endClassTime = endClassTime;
+	}
+	
+	public java.util.Date getEndClassTime(){
+		return this.endClassTime;
+	}
+			
+	public void setActualTeacherId(Integer actualTeacherId){
+		this.actualTeacherId = actualTeacherId;
+	}
+	
+	public Integer getActualTeacherId(){
+		return this.actualTeacherId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setTeachMode(String teachMode){
+		this.teachMode = teachMode;
+	}
+	
+	public String getTeachMode(){
+		return this.teachMode;
+	}
+			
+	public void setType(String type){
+		this.type = type;
+	}
+	
+	public String getType(){
+		return this.type;
+	}
+			
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+			
+	public void setStudentNum(Integer studentNum){
+		this.studentNum = studentNum;
+	}
+	
+	public Integer getStudentNum(){
+		return this.studentNum;
+	}
+			
+	public void setSchooleId(Integer schooleId){
+		this.schooleId = schooleId;
+	}
+	
+	public Integer getSchooleId(){
+		return this.schooleId;
+	}
+			
+	public void setNote(String note){
+		this.note = note;
+	}
+	
+	public String getNote(){
+		return this.note;
+	}
+			
+	public void setOrganId(Integer organId){
+		this.organId = organId;
+	}
+	
+	public Integer getOrganId(){
+		return this.organId;
+	}
+			
+	public BigDecimal getSalary() {
+		return salary;
+	}
+
+	public void setSalary(BigDecimal salary) {
+		this.salary = salary;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

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

@@ -117,5 +117,14 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
 
     //查询直播间商品订单列表
     //查询直播间商品订单列表
     PageInfo<LiveRoomGoodsOrderVo> queryLiveRoomGoodsOrderList(LiveRoomGoodsOrderQueryInfo queryInfo);
     PageInfo<LiveRoomGoodsOrderVo> queryLiveRoomGoodsOrderList(LiveRoomGoodsOrderQueryInfo queryInfo);
+
+
+    /**
+     * 设置是否连麦
+     *
+     * @param roomUid 房间号
+     * @param whetherMic 是否连麦 0: 是 1:否
+     */
+    void whetherMic(String roomUid, Integer whetherMic);
 }
 }
 
 

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempTestService.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.common.service.BaseService;
+
+public interface TempTestService extends BaseService<Long, TempTest> {
+
+	/**
+	 * 根据手机号码、身份证、姓名查询用户编号
+	 * @param mobile
+	 * @param idCard
+	 * @param realName
+	 * @return
+	 */
+	Integer queryUserId(String mobile, String idCard, String realName);
+	
+	/**
+	 * 业务逻辑处理
+	 * @param datas
+	 * @return
+	 */
+	boolean processBiz(List<Map<String, Object>> datas);
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationShareProfitServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.SubjectChangeDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CooperationShareProfitDto;
 import com.ym.mec.biz.dal.entity.CooperationShareProfitDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -9,16 +10,20 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.biz.dal.entity.CooperationShareProfit;
 import com.ym.mec.biz.dal.entity.CooperationShareProfit;
 import com.ym.mec.biz.service.CooperationShareProfitService;
 import com.ym.mec.biz.service.CooperationShareProfitService;
 import com.ym.mec.biz.dal.dao.CooperationShareProfitDao;
 import com.ym.mec.biz.dal.dao.CooperationShareProfitDao;
+
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -31,6 +36,9 @@ public class CooperationShareProfitServiceImpl extends BaseServiceImpl<Integer,
 	private CourseScheduleDao courseScheduleDao;
 	private CourseScheduleDao courseScheduleDao;
 	@Autowired
 	@Autowired
 	private TeacherDao teacherDao;
 	private TeacherDao teacherDao;
+	
+	@Autowired
+	private SubjectChangeDao subjectChangeDao;
 
 
 	@Override
 	@Override
 	public BaseDAO<Integer, CooperationShareProfit> getDAO() {
 	public BaseDAO<Integer, CooperationShareProfit> getDAO() {
@@ -85,10 +93,21 @@ public class CooperationShareProfitServiceImpl extends BaseServiceImpl<Integer,
 		if(CollectionUtils.isEmpty(musicGroupIds)){
 		if(CollectionUtils.isEmpty(musicGroupIds)){
 			return;
 			return;
 		}
 		}
+		
 		List<CooperationShareProfit> profits = cooperationShareProfitDao.initShareProfit(musicGroupIds);
 		List<CooperationShareProfit> profits = cooperationShareProfitDao.initShareProfit(musicGroupIds);
 		if(CollectionUtils.isEmpty(profits)){
 		if(CollectionUtils.isEmpty(profits)){
 			return;
 			return;
 		}
 		}
+		
+		//存在声部更换的学生
+		BigDecimal courseMargin = BigDecimal.ZERO;
+		for(CooperationShareProfit sp : profits){
+			courseMargin = subjectChangeDao.getTotalCourseMargin(sp.getMusicGroupId());
+			if(courseMargin != null){
+				sp.setTotalAmount(courseMargin.add(sp.getTotalAmount()));
+			}
+		}
+		
 		cooperationShareProfitDao.batchInsert(profits);
 		cooperationShareProfitDao.batchInsert(profits);
 	}
 	}
 
 

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

@@ -1555,6 +1555,7 @@ public class ExportServiceImpl implements ExportService {
         }
         }
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
         MapUtil.populateMap(params, queryInfo);
+        params.put("notGroupType","MALL_SELL");
         int count = studentPaymentOrderDao.queryCount(params);
         int count = studentPaymentOrderDao.queryCount(params);
         if (count <= 0) {
         if (count <= 0) {
             return BaseController.failed("没有可导出的数据");
             return BaseController.failed("没有可导出的数据");

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

@@ -1405,6 +1405,24 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         return pageInfo;
         return pageInfo;
     }
     }
 
 
+    @Override
+    public void whetherMic(String roomUid, Integer whetherMic) {
+        ImLiveBroadcastRoomVo obj = this.getImLiveBroadcastRoomVo(roomUid);
+        if (obj == null) {
+            throw new BizException("直播间不存在");
+        }
+        ImLiveBroadcastRoomDto.RoomConfig roomConfig = getRoomConfig(obj.getRoomConfig()).orElse(null);
+        if (Objects.isNull(roomConfig)) {
+            return;
+        }
+        ImLiveBroadcastRoom imLiveBroadcastRoom = new ImLiveBroadcastRoom();
+        imLiveBroadcastRoom.setId(obj.getId());
+        roomConfig.setWhether_mic(whetherMic);
+        imLiveBroadcastRoom.setRoomConfig(JSONObject.toJSONString(roomConfig));
+        this.updateById(imLiveBroadcastRoom);
+    }
+
+
     /**
     /**
      * 查询直播间所有用户信息
      * 查询直播间所有用户信息
      *
      *

+ 14 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1098,8 +1098,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception {
     public HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception {
+    	
+    	Integer userId = registerPayDto.getUserId();
+    	String musicGroupId = registerPayDto.getMusicGroupId();
+    	
         //判断用户是否已存在订单
         //判断用户是否已存在订单
-        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(registerPayDto.getUserId(), registerPayDto.getMusicGroupId(), DealStatusEnum.ING);
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, DealStatusEnum.ING);
         if (CollectionUtils.isNotEmpty(applyOrderList)) {
         if (CollectionUtils.isNotEmpty(applyOrderList)) {
             HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), registerPayDto.getRepeatPay());
             HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), registerPayDto.getRepeatPay());
             if (result.getCode() != 200) {
             if (result.getCode() != 200) {
@@ -1119,9 +1123,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup == null) {
         if (musicGroup == null) {
             throw new BizException("查询乐团信息失败");
             throw new BizException("查询乐团信息失败");
         }
         }
+        
+        SubjectChange subjectChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
+        if(subjectChange != null){
+        	throw new BizException("您已做过声部更换操作,不能继续缴费");
+        }
+    	subjectChange = subjectChangeDao.getStudentWaitPay(userId, musicGroupId);
+    	if(subjectChange != null){
+    		throw new BizException("您有处理中的声部更换订单,不能继续缴费");
+    	}
 
 
         Long calenderId = musicGroupRegCalender.getId();
         Long calenderId = musicGroupRegCalender.getId();
-        Integer userId = studentRegistration.getUserId();
 
 
         //获取缴费项目金额
         //获取缴费项目金额
         MusicGroupApplyGoodsDto goodsDto = getCalenderTotalAmount(registerPayDto, musicGroupRegCalender);
         MusicGroupApplyGoodsDto goodsDto = getCalenderTotalAmount(registerPayDto, musicGroupRegCalender);

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

@@ -255,15 +255,14 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
 
 
     private Map<String, Object> getExpend(HfMerchantConfig hfMerchantConfig, PaymentParam payParam) throws Exception {
     private Map<String, Object> getExpend(HfMerchantConfig hfMerchantConfig, PaymentParam payParam) throws Exception {
         Map<String, Object> expendParams = new HashMap<>(5);
         Map<String, Object> expendParams = new HashMap<>(5);
-        String openId = "";
         if (payParam.getPayChannel().equals("wx_pub")) {
         if (payParam.getPayChannel().equals("wx_pub")) {
             //微信支付则获取openId
             //微信支付则获取openId
-            openId = getOpenId(hfMerchantConfig, payParam.getCode());
+        	String openId = getOpenId(hfMerchantConfig, payParam.getCode());
+            expendParams.put("open_id", openId);
+            expendParams.put("is_raw", "1");
         }
         }
-        expendParams.put("open_id", openId);
-        expendParams.put("is_raw", "1");
         //expendParams.put("callback_url", payParam.getReturnUrl());
         //expendParams.put("callback_url", payParam.getReturnUrl());
-        expendParams.put("limit_pay", "1");
+        //expendParams.put("limit_pay", "1"); //值为1时禁用信用卡
         return expendParams;
         return expendParams;
     }
     }
 
 

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -397,7 +397,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             StudentPaymentOrderDetail spod = null;
             StudentPaymentOrderDetail spod = null;
             while (iterator.hasNext()) {
             while (iterator.hasNext()) {
                 spod = iterator.next();
                 spod = iterator.next();
-                if ((spod.getType() == OrderDetailTypeEnum.ACCESSORIES || spod.getType() == OrderDetailTypeEnum.MUSICAL) && (studentLastChange.getOriginalOrderId() != null && spod.getPaymentOrderId() <= studentLastChange.getOriginalOrderId())) {
+                if ((spod.getType() == OrderDetailTypeEnum.ORGAN_SHARE_PROFIT || spod.getType() == OrderDetailTypeEnum.ACCESSORIES || spod.getType() == OrderDetailTypeEnum.MUSICAL) && (studentLastChange.getOriginalOrderId() != null && spod.getPaymentOrderId() <= studentLastChange.getOriginalOrderId())) {
                     iterator.remove();
                     iterator.remove();
                 }
                 }
             }
             }
@@ -434,6 +434,17 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
 
                 studentPaymentOrderDetailList.add(detail);
                 studentPaymentOrderDetailList.add(detail);
             }
             }
+            if(studentLastChange.getChangeCourseFee() != null && studentLastChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0){
+            	StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+                if (studentLastChange.getOriginalOrderId() != null) {
+                    detail.setPaymentOrderId((long) studentLastChange.getOriginalOrderId());
+                }
+                detail.setPrice(studentLastChange.getChangeCourseFee());
+                detail.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
+                detail.setCreateTime(studentLastChange.getCreateTime());
+
+                studentPaymentOrderDetailList.add(detail);
+            }
         }
         }
 
 
         return studentPaymentOrderDetailList;
         return studentPaymentOrderDetailList;
@@ -717,6 +728,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 spod.setCreateTime(date);
                 spod.setCreateTime(date);
                 spod.setUpdateTime(date);
                 spod.setUpdateTime(date);
                 spod.setPaymentOrderId(studentPaymentOrder.getId());
                 spod.setPaymentOrderId(studentPaymentOrder.getId());
+                spod.setTenantId(musicGroup.getTenantId());
                 studentPaymentOrderDetailList.add(spod);
                 studentPaymentOrderDetailList.add(spod);
             }
             }
         }
         }

+ 126 - 93
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -11,6 +11,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -204,10 +205,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
             if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
                 // 查询订单状态
                 // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder);
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder);
-                if (payStatus != PayStatus.FAILED) {
-                    if (payStatus == PayStatus.SUCCESSED) {
-                        throw new BizException("订单已支付成功,请勿重复支付");
-                    }
+                if (payStatus == PayStatus.SUCCESSED) {
+                    throw new BizException("订单已支付成功,请勿重复支付");
                 }
                 }
                 studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrder.setUpdateTime(date);
                 studentPaymentOrder.setUpdateTime(date);
@@ -350,13 +349,13 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         	for(String id : subjectChange.getChangeAccessories().split(",")){
         	for(String id : subjectChange.getChangeAccessories().split(",")){
         		changeGoodsList.add(id);
         		changeGoodsList.add(id);
         	}
         	}
-        	
-        	if(subjectChange.getChangeMusical() != subjectChange.getOriginalMusical()){
-        		changeGoodsList.add(subjectChange.getChangeMusical()+"");
-        	}
         }
         }
+    	
+    	if(subjectChange.getChangeMusical() != subjectChange.getOriginalMusical()){
+    		changeGoodsList.add(subjectChange.getChangeMusical()+"");
+    	}
         
         
-        if(changeGoodsList != null){
+        if(changeGoodsList.size() > 0){
             String goodsIdsStr = changeGoodsList.stream().map(t -> t.toString()).collect(Collectors.joining(","));
             String goodsIdsStr = changeGoodsList.stream().map(t -> t.toString()).collect(Collectors.joining(","));
         	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
         	List<Goods> goodsList = goodsService.findGoodsByIds(goodsIdsStr);
         	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
         	Map<Integer,Goods> goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
@@ -371,7 +370,27 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 				goodsTotalGroupPurchasePrice = goodsTotalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
 				goodsTotalGroupPurchasePrice = goodsTotalGroupPurchasePrice.add(goods.getGroupPurchasePrice());
         	}
         	}
         	
         	
+        	//分润分部
+            if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && subjectChange.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
+            	
+            	goodsTotalGroupPurchasePrice = goodsTotalGroupPurchasePrice.add(subjectChange.getChangeCourseFee());
+            	
+            	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
+                spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
+                spod.setPrice(subjectChange.getChangeCourseFee().multiply(goods.getGroupPurchasePrice()).divide(goodsTotalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN));
+                spod.setRemitFee(BigDecimal.ZERO);
+                spod.setCreateTime(date);
+                spod.setUpdateTime(date);
+                spod.setPaymentOrderId(studentPaymentOrder.getId());
+                spod.setTenantId(tenantId);
+                studentPaymentOrderDetailList.add(spod);
+                
+                totalPrice = totalPrice.add(spod.getPrice());
+            }
+        	
+            int i = 0;
         	for(String goodsIdStr : goodsIdsStr.split(",")){
         	for(String goodsIdStr : goodsIdsStr.split(",")){
+        		i++;
         		if(StringUtils.isBlank(goodsIdStr)){
         		if(StringUtils.isBlank(goodsIdStr)){
 					continue;
 					continue;
 				}
 				}
@@ -392,14 +411,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 
                 
                 BigDecimal tempPrice = studentPaymentOrder.getExpectAmount().multiply(goods.getGroupPurchasePrice()).divide(goodsTotalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
                 BigDecimal tempPrice = studentPaymentOrder.getExpectAmount().multiply(goods.getGroupPurchasePrice()).divide(goodsTotalGroupPurchasePrice, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
                 
                 
-                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == studentPaymentOrderDetailList.size() + 1){
+                if(totalPrice.add(tempPrice).compareTo(studentPaymentOrder.getExpectAmount()) > 0 || goodsIdsStr.split(",").length == i){
                 	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
                 	studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount().subtract(totalPrice));
                 }else{
                 }else{
                 	studentPaymentOrderDetail.setPrice(tempPrice);
                 	studentPaymentOrderDetail.setPrice(tempPrice);
                 }
                 }
                 studentPaymentOrderDetail.setUpdateTime(date);
                 studentPaymentOrderDetail.setUpdateTime(date);
                 studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
                 studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-                
+                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
                 totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
                 totalPrice = totalPrice.add(studentPaymentOrderDetail.getPrice());
                 studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
                 studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
         	}
         	}
@@ -451,10 +470,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             throw new BizException("已有未支付的声部更改,请勿重复创建");
             throw new BizException("已有未支付的声部更改,请勿重复创建");
         }
         }
 
 
-        studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
+        /*studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
         if (studentWaitPay != null) {
         if (studentWaitPay != null) {
             throw new BizException("声部更换只能操作一次,请勿重复操作");
             throw new BizException("声部更换只能操作一次,请勿重复操作");
-        }
+        }*/
 
 
         Set<String> musicGroupIds = new HashSet<String>();
         Set<String> musicGroupIds = new HashSet<String>();
         musicGroupIds.add(musicGroupId);
         musicGroupIds.add(musicGroupId);
@@ -481,27 +500,33 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
             }
         }
         }
         Date nowDate = new Date();
         Date nowDate = new Date();
-        SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
-        if (studentOriginal != null) {
-            subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
-            subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
-            subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
+        SubjectChange lastSubjectChange = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
+        if (lastSubjectChange != null) {
+            subjectChange.setEduTeacherId(lastSubjectChange.getEduTeacherId());
+            subjectChange.setOrganId(lastSubjectChange.getOrganId());
+            subjectChange.setOriginalOrderId(lastSubjectChange.getOrderId());
+            subjectChange.setOriginalSubjectId(lastSubjectChange.getChangeSubjectId());
+            subjectChange.setCooperationOrganId(lastSubjectChange.getCooperationOrganId());
+            subjectChange.setMusicGroupId(musicGroupId);
+            subjectChange.setOriginalCourseFee(lastSubjectChange.getChangeCourseFee());
+            subjectChange.setOriginalMusical(lastSubjectChange.getChangeMusical());
+            subjectChange.setOriginalMusicalPrice(lastSubjectChange.getChangeMusicalPrice());
+            subjectChange.setOriginalAccessories(lastSubjectChange.getChangeAccessories());
+            subjectChange.setOriginalAccessoriesPrice(lastSubjectChange.getChangeAccessoriesPrice());
+            subjectChange.setOriginalCost(lastSubjectChange.getChangeCost());
             subjectChange.setOriginalKitGroupPurchaseType(
             subjectChange.setOriginalKitGroupPurchaseType(
-                    studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
+                    lastSubjectChange.getKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : lastSubjectChange.getKitGroupPurchaseType());
+        }
+        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
+            subjectChange.setChangeMusical(null);
+            subjectChange.setChangeCourseFee(BigDecimal.ZERO);
         }
         }
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
-        MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
-        subjectChange.setOrganId(musicGroup.getOrganId());
-        subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
-        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
         subjectChange.setCourseMargin(subjectChange.getChangeCourseFee().subtract(subjectChange.getOriginalCourseFee()));
         subjectChange.setCourseMargin(subjectChange.getChangeCourseFee().subtract(subjectChange.getOriginalCourseFee()));
         BigDecimal goodsMargin = subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice())
         BigDecimal goodsMargin = subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice())
                 .subtract(subjectChange.getOriginalMusicalPrice()).subtract(subjectChange.getOriginalAccessoriesPrice());
                 .subtract(subjectChange.getOriginalMusicalPrice()).subtract(subjectChange.getOriginalAccessoriesPrice());
         subjectChange.setGoodsMargin(goodsMargin);
         subjectChange.setGoodsMargin(goodsMargin);
         String goodsIds = "";
         String goodsIds = "";
-        if (subjectChange.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.OWNED)) {
-            subjectChange.setChangeMusical(null);
-        }
         if (subjectChange.getChangeMusical() != null) {
         if (subjectChange.getChangeMusical() != null) {
             goodsIds += subjectChange.getChangeMusical() + "";
             goodsIds += subjectChange.getChangeMusical() + "";
         }
         }
@@ -515,10 +540,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         for (Goods goods : goodies) {
         for (Goods goods : goodies) {
             goodsPrice = goodsPrice.add(goods.getDiscountPrice());
             goodsPrice = goodsPrice.add(goods.getDiscountPrice());
         }
         }
+        subjectChange.setChangeCost(goodsPrice);
         
         
         Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
         Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
         
         
-        subjectChange.setChangeCost(goodsPrice);
         subjectChange.setCostMargin(subjectChange.getChangeCost().subtract(subjectChange.getOriginalCost()));
         subjectChange.setCostMargin(subjectChange.getChangeCost().subtract(subjectChange.getOriginalCost()));
         //差价 <= 0
         //差价 <= 0
         BigDecimal amountMargin = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
         BigDecimal amountMargin = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
@@ -526,6 +551,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
             subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
             subjectChange.setSellAmount(BigDecimal.ZERO);
             subjectChange.setSellAmount(BigDecimal.ZERO);
             subjectChange.setSellTime(nowDate);
             subjectChange.setSellTime(nowDate);
+        }else{
+        	subjectChange.setSellAmount(amountMargin);
         }
         }
         subjectChange.setCreateTime(nowDate);
         subjectChange.setCreateTime(nowDate);
         subjectChange.setUpdateTime(nowDate);
         subjectChange.setUpdateTime(nowDate);
@@ -533,7 +560,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChangeDao.insert(subjectChange);
         subjectChangeDao.insert(subjectChange);
         //差价小于0退到余额
         //差价小于0退到余额
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
-            /*sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
+            //sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
             if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
             if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
                 SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
                 SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
                 sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
                 sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
@@ -544,7 +571,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.SUBJECT_CHANGE);
                 sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.SUBJECT_CHANGE);
                 sysUserCashAccountLog.setComment("声部更换退还");
                 sysUserCashAccountLog.setComment("声部更换退还");
                 sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
                 sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
-            }*/
+            }
             studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
             studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
         }
         }
 
 
@@ -564,6 +591,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             studentPaymentOrder.setUpdateTime(nowDate);
             studentPaymentOrder.setUpdateTime(nowDate);
             studentPaymentOrder.setOrganId(subjectChange.getOrganId());
             studentPaymentOrder.setOrganId(subjectChange.getOrganId());
             studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
             studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
+            studentPaymentOrder.setTenantId(subjectChange.getTenantId());
             studentPaymentOrderService.insert(studentPaymentOrder);
             studentPaymentOrderService.insert(studentPaymentOrder);
 
 
             subjectChange.setOrderId(studentPaymentOrder.getId().intValue());
             subjectChange.setOrderId(studentPaymentOrder.getId().intValue());
@@ -590,6 +618,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 	                studentPaymentOrderDetail.setCreateTime(nowDate);
 	                studentPaymentOrderDetail.setCreateTime(nowDate);
 	                if(goods.getType() == GoodsType.INSTRUMENT){
 	                if(goods.getType() == GoodsType.INSTRUMENT){
 	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
 	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+	                	studentPaymentOrderDetail.setKitGroupPurchaseType(subjectChange.getKitGroupPurchaseType());
 	                }else if(goods.getType() == GoodsType.ACCESSORIES){
 	                }else if(goods.getType() == GoodsType.ACCESSORIES){
 	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
 	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
 	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
 	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
@@ -689,8 +718,22 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 							}
 							}
 						}
 						}
 	                }
 	                }
+	                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
 	                
 	                
 	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+	                
+	                //分部分润
+	                if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && studentPaymentOrderDetail.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
+	                	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
+	                    spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
+	                    spod.setPrice(subjectChange.getChangeCourseFee());
+	                    spod.setRemitFee(BigDecimal.ZERO);
+	                    spod.setCreateTime(nowDate);
+	                    spod.setUpdateTime(nowDate);
+	                    spod.setPaymentOrderId(studentPaymentOrder.getId());
+	                    spod.setTenantId(studentPaymentOrder.getTenantId());
+	                    studentPaymentOrderDetailList.add(spod);
+	                }
 				}
 				}
         	}
         	}
             
             
@@ -776,48 +819,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
 
 
         //1、存在历史的更换
         //1、存在历史的更换
-        SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
         if (studentLastChange != null) {
-            throw new BizException("声部更换只能操作一次,请勿重复操作");
-        	/*List<Long> orderIdList = new ArrayList<Long>();
-        	orderIdList.add(studentLastChange.getOrderId().longValue());
-        	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
-            subjectChange.setStudentId(studentLastChange.getStudentId());
-            subjectChange.setOrderId(studentLastChange.getOrderId());
-            subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId());
-            subjectChange.setMusicGroupId(studentLastChange.getMusicGroupId());
-            subjectChange.setOriginalCourseFee(studentLastChange.getChangeCourseFee());
-            subjectChange.setKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
-
-            BigDecimal originalCost = BigDecimal.ZERO;
-            if (studentLastChange.getChangeMusical() != null && !refundSellOrderGoodsIds.contains(studentLastChange.getChangeMusical())) {
-                subjectChange.setOriginalMusical(studentLastChange.getChangeMusical());
-                subjectChange.setOriginalMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
-                subjectChange.setOriginalMusicalPrice(studentLastChange.getChangeMusicalPrice());
-            }
-
-            if (StringUtils.isNotBlank(studentLastChange.getChangeAccessories())) {
-                String[] goodsIdArr = studentLastChange.getChangeAccessories().split(",");
-                String accessoriesId = "";
-                for (String goodsId : goodsIdArr) {
-                    if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
-                        continue;
-                    }
-                    accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
-                }
-                if (StringUtils.isNotBlank(accessoriesId)) {
-                    subjectChange.setOriginalAccessories(accessoriesId);
-                    List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
-                    subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
-                    BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    subjectChange.setOriginalAccessoriesPrice(price);
-                }
-            }
-            subjectChange.setOriginalCost(originalCost);
-            return subjectChange;*/
+        	studentLastChange.setChangeAccessoriesGoods(goodsDao.findGoodsByIds(studentLastChange.getChangeAccessories()));
+        	studentLastChange.setChangeMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
+        	return studentLastChange;
         }
         }
         //2.1不存在历史的更换
         //2.1不存在历史的更换
+        SubjectChange subjectChange = new SubjectChange();
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentId, musicGroupId);
         if (studentRegistration == null) {
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
             throw new BizException("用户注册信息不存在");
@@ -840,9 +849,16 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
             details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
             details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
         }
         }
+        KitGroupPurchaseTypeEnum kitGroupPurchaseType = null;
+        
+        Optional<StudentPaymentOrderDetail> optional = details.stream().filter(t -> (t.getKitGroupPurchaseType() != null && t.getType() == OrderDetailTypeEnum.MUSICAL)).findFirst();
+        if(optional.isPresent()){
+        	kitGroupPurchaseType = optional.get().getKitGroupPurchaseType();
+        }
 
 
         //查询乐器订单
         //查询乐器订单
         Long paymentOrderId = null;
         Long paymentOrderId = null;
+        BigDecimal organShareProfit = BigDecimal.ZERO;
 
 
         for (StudentPaymentOrderDetail detail : details) {
         for (StudentPaymentOrderDetail detail : details) {
             if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
             if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
@@ -850,6 +866,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     paymentOrderId = detail.getPaymentOrderId();
                     paymentOrderId = detail.getPaymentOrderId();
                 }
                 }
             }
             }
+            if(detail.getType() == OrderDetailTypeEnum.ORGAN_SHARE_PROFIT && kitGroupPurchaseType == KitGroupPurchaseTypeEnum.GROUP) {
+            	organShareProfit = organShareProfit.add(detail.getPrice());
+            }
         }
         }
 
 
         Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
         Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
@@ -859,10 +878,23 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
 
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         subjectChange.setStudentId(studentId);
         subjectChange.setStudentId(studentId);
+        subjectChange.setEduTeacherId(musicGroup.getEducationalTeacherId());
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
         subjectChange.setMusicGroupId(musicGroupId);
-
+        subjectChange.setOriginalOrderId(null);
+        subjectChange.setOriginalSubjectId(null);
+        subjectChange.setOriginalCourseFee(null);
+        subjectChange.setOriginalMusical(null);
+        subjectChange.setOriginalMusicalPrice(null);
+        subjectChange.setOriginalAccessories(null);
+        subjectChange.setOriginalAccessoriesPrice(null);
+        subjectChange.setOriginalCost(null);
+        subjectChange.setOriginalKitGroupPurchaseType(null);
+        
+        subjectChange.setChangeSubjectId(studentRegistration.getActualSubjectId());
+        subjectChange.setChangeCourseFee(organShareProfit);
+        
         if (paymentOrderId != null) {
         if (paymentOrderId != null) {
             subjectChange.setOrderId(paymentOrderId.intValue());
             subjectChange.setOrderId(paymentOrderId.intValue());
         }
         }
@@ -871,14 +903,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
         for (StudentPaymentOrderDetail detail : details) {
             if (detail.getType().equals(OrderDetailTypeEnum.COURSE)) {
             if (detail.getType().equals(OrderDetailTypeEnum.COURSE)) {
-                subjectChange.setOriginalCourseFee(detail.getPrice());
+                subjectChange.setChangeCourseFee(detail.getPrice());
             } else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
             } else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
-                subjectChange.setOriginalKitGroupPurchaseType(detail.getKitGroupPurchaseType());
+                subjectChange.setKitGroupPurchaseType(detail.getKitGroupPurchaseType());
                 Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
                 Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
                 if (!refundSellOrderGoodsIds.contains(goodsId)) {
                 if (!refundSellOrderGoodsIds.contains(goodsId)) {
-                    subjectChange.setOriginalMusical(goodsId);
-                    subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
-                    subjectChange.setOriginalMusicalPrice(detail.getPrice());
+                    subjectChange.setChangeMusical(goodsId);
+                    //subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
+                    subjectChange.setChangeMusicalPrice(detail.getPrice());
                 }
                 }
             } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
             } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
@@ -897,26 +929,27 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
                 accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
             }
             }
 
 
-            subjectChange.setOriginalAccessories(accessoriesId);
-
-            Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesId).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
-
-            String[] accessoriesIdList = StringUtils.split(accessoriesId, ',');
-
-            for (String s : accessoriesIdList) {
-                if (StringUtils.isBlank(s)) {
-                    continue;
-                }
-
-                if (subjectChange.getOriginalAccessoriesGoods() == null) {
-                    subjectChange.setOriginalAccessoriesGoods(new ArrayList<Goods>());
-                }
-                subjectChange.getOriginalAccessoriesGoods().add(goodsMap.get(Integer.parseInt(s)));
-            }
+            subjectChange.setChangeAccessories(accessoriesId);
+            subjectChange.setChangeAccessoriesPrice(accessoriesPrice);
 
 
-            //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-            subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
         }
         }
+        
+        subjectChange.setChangeAccessoriesGoods(goodsDao.findGoodsByIds(subjectChange.getChangeAccessories()));
+        
+        BigDecimal goodsPrice = BigDecimal.ZERO;
+        List<Goods> goodies = new ArrayList<Goods>(subjectChange.getChangeAccessoriesGoods());
+        
+        subjectChange.setChangeMusicalGoods(goodsDao.get(subjectChange.getChangeMusical()));
+        
+        goodies.add(subjectChange.getChangeMusicalGoods());
+        
+        for (Goods goods : goodies) {
+            goodsPrice = goodsPrice.add(goods.getDiscountPrice());
+        }
+        subjectChange.setChangeCost(goodsPrice);
+        subjectChange.setGoodsMargin(subjectChange.getChangeMusicalPrice().add(subjectChange.getChangeAccessoriesPrice()));
+        subjectChange.setCostMargin(goodsPrice);
+        
         //2.2 计算销售成本
         //2.2 计算销售成本
         BigDecimal orderSellCost = BigDecimal.ZERO;
         BigDecimal orderSellCost = BigDecimal.ZERO;
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
@@ -996,7 +1029,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder,subjectChange.getMusicGroupId(),
                 List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder,subjectChange.getMusicGroupId(),
                         goodsIdList,
                         goodsIdList,
                         subjectChange.getKitGroupPurchaseType());
                         subjectChange.getKitGroupPurchaseType());
-                if (sellOrders != null && sellOrders.size() > 0) {
+                /*if (sellOrders != null && sellOrders.size() > 0) {
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal accessoriesAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.ACCESSORIES).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal accessoriesAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.ACCESSORIES).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1004,7 +1037,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     change.setChangeAccessoriesPrice(accessoriesAmount.add(change.getOriginalAccessoriesPrice()));
                     change.setChangeAccessoriesPrice(accessoriesAmount.add(change.getOriginalAccessoriesPrice()));
                     change.setSellAmount(instrumentAmount.add(accessoriesAmount));
                     change.setSellAmount(instrumentAmount.add(accessoriesAmount));
                     subjectChangeDao.update(change);
                     subjectChangeDao.update(change);
-                }
+                }*/
             }
             }
             
             
             //更新学生声部
             //更新学生声部

+ 227 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempTestServiceImpl.java

@@ -0,0 +1,227 @@
+package com.ym.mec.biz.service.impl;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TempTestDao;
+import com.ym.mec.biz.dal.entity.TempTest;
+import com.ym.mec.biz.service.TempTestService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.date.DateUtil;
+
+@Service
+public class TempTestServiceImpl extends BaseServiceImpl<Long, TempTest> implements TempTestService {
+
+	@Autowired
+	private TempTestDao tempTestDao;
+
+	@Autowired
+	private TeacherDao teacherDao;
+
+	@Override
+	public BaseDAO<Long, TempTest> getDAO() {
+		return tempTestDao;
+	}
+
+	@Override
+	public Integer queryUserId(String mobile, String idCard, String realName) {
+		return null;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean processBiz(List<Map<String, Object>> datas) {
+
+		String mobile, idCard, realName, orderNo;
+		SysUser user = null;
+		Integer userId = null;
+		Date classDate = null;
+		
+		BigDecimal courseFee = null;
+		
+		List<UserSalary> userSalaryList = new ArrayList<UserSalary>();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+		UserSalary userSalary = null;
+		
+		//数据整合
+		for (Map<String, Object> row : datas) {
+			orderNo = row.get("订单号").toString();
+			mobile = row.get("收款人手机号").toString();
+			idCard = row.get("收款人身份证").toString();
+			realName = row.get("收款人姓名").toString();
+			courseFee = new BigDecimal(row.get("收款金额").toString());
+			classDate = DateUtil.stringToDate(row.get("提交订单时间").toString(), "yyyy/MM/dd HH:mm:ss");
+			classDate = DateUtil.addMonths(classDate, -1);
+			
+			user = teacherDao.getUserWithIdCard(idCard);
+			
+			if (user == null) {
+				user = teacherDao.getUserWithRealName(realName);
+			}
+			if (user == null) {
+				user = teacherDao.getUserWithPhone(mobile);
+			}
+			
+			if(user == null){
+				System.out.println("订单号[" + orderNo + "]用户找不到");
+				continue;
+			}
+			
+			userSalary = new UserSalary(mobile, user, sdf.format(classDate), courseFee, orderNo);
+			userSalaryList.add(userSalary);
+		}
+		
+		Map<String,UserSalary> userSalaryMap = new HashMap<String, UserSalary>();
+		
+		for(UserSalary us : userSalaryList){
+			if(userSalaryMap.containsKey(us.getBatchNo())){
+				userSalary = userSalaryMap.get(us.getBatchNo());
+				userSalary.setCourseFee(userSalary.getCourseFee().add(us.getCourseFee()));
+
+				userSalaryMap.put(us.getBatchNo(), userSalary);
+			}else{
+				userSalaryMap.put(us.getBatchNo(), us);
+			}
+		}
+		
+		
+		
+		for (Entry<String, UserSalary> entry : userSalaryMap.entrySet()) {
+
+			userSalary = entry.getValue();
+			userId = userSalary.getUserId();
+			
+			//查询课程,优先vip课
+			List<TempTest> tempTestList = tempTestDao.queryCourseScheduleInfo(userId, userSalary.getClassMonth());
+			
+			tempTestList = extractCourseSchedule(tempTestList, userSalary.getCourseFee());
+			if(tempTestList.size() > 0){
+				try{
+					tempTestDao.batchInsert(tempTestList);
+				}catch(Exception e){
+					System.out.println("userId:" + userId + "  mobile:" + entry.getValue().getMobile() + " month:" + entry.getValue().getClassMonth() + " message:" + e.getMessage());
+				}
+			}
+			
+		}
+		return true;
+	}
+
+	private List<TempTest> extractCourseSchedule(List<TempTest> srcTempTestList, BigDecimal limitSalary){
+		
+		BigDecimal courseSalary = BigDecimal.ZERO;
+		List<TempTest> result = new ArrayList<TempTest>();
+		
+		for(TempTest tt : srcTempTestList){
+			if(tt.getSalary().compareTo(BigDecimal.ZERO) <= 0){
+				continue;
+			}
+			if(limitSalary.compareTo(courseSalary.add(tt.getSalary())) > 0){
+				courseSalary = courseSalary.add(tt.getSalary());
+				result.add(tt);
+			}else{
+				tt.setSalary(limitSalary.subtract(courseSalary));
+				result.add(tt);
+				break;
+			}
+		}
+		
+		return result;
+	}
+}
+
+class UserSalary{
+	
+	private Integer userId;
+	
+	private SysUser user;
+	
+	private String classMonth;
+	
+	private String orderNo;
+	
+	private BigDecimal courseFee;
+	
+	private String batchNo;
+	
+	private String mobile;
+	
+	public UserSalary(String mobile, SysUser user, String classMonth,BigDecimal courseFee,String orderNo) {
+		this.mobile = mobile;
+		this.user = user;
+		this.classMonth = classMonth;
+		this.courseFee = courseFee;
+		this.orderNo = orderNo;
+		this.batchNo = user.getId() + "#" + classMonth;
+		this.userId = user.getId();
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public SysUser getUser() {
+		return user;
+	}
+
+	public void setUser(SysUser user) {
+		this.user = user;
+	}
+
+	public String getClassMonth() {
+		return classMonth;
+	}
+
+	public void setClassMonth(String classMonth) {
+		this.classMonth = classMonth;
+	}
+
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public BigDecimal getCourseFee() {
+		return courseFee;
+	}
+
+	public void setCourseFee(BigDecimal courseFee) {
+		this.courseFee = courseFee;
+	}
+
+	public String getBatchNo() {
+		return batchNo;
+	}
+
+	public void setBatchNo(String batchNo) {
+		this.batchNo = batchNo;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+}

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

@@ -352,6 +352,9 @@
             <if test="orderEndDate != null">
             <if test="orderEndDate != null">
                 AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
                 AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
             </if>
             </if>
+            <if test="notGroupType != null and notGroupType != ''">
+                AND spo.group_type_ != #{notGroupType}
+            </if>
             <if test="paymentType != null">
             <if test="paymentType != null">
                 AND spo.type_ = #{paymentType}
                 AND spo.type_ = #{paymentType}
             </if>
             </if>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/SubjectChangeMapper.xml

@@ -317,4 +317,12 @@
           AND status_ = 2
           AND status_ = 2
         GROUP BY student_id_
         GROUP BY student_id_
     </select>
     </select>
+    
+    <select id="getTotalCourseMargin" resultType="java.math.BigDecimal">
+        SELECT SUM(course_margin_)
+        FROM subject_change
+        WHERE music_group_id_ = #{musicGroupId}
+          AND status_ = 2
+        GROUP BY music_group_id_
+    </select>
 </mapper>
 </mapper>

+ 21 - 5
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -520,6 +520,7 @@
         <result property="username" column="username_"/>
         <result property="username" column="username_"/>
         <result property="realName" column="real_name_"/>
         <result property="realName" column="real_name_"/>
         <result property="organId" column="organ_id_"/>
         <result property="organId" column="organ_id_"/>
+        <result property="mobile" column="phone_"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap id="ExtendTeacherBasicDto" type="com.ym.mec.biz.dal.dto.ExtendTeacherBasicDto" extends="TeacherBasicDto">
     <resultMap id="ExtendTeacherBasicDto" type="com.ym.mec.biz.dal.dto.ExtendTeacherBasicDto" extends="TeacherBasicDto">
@@ -565,7 +566,8 @@
             su.id_,
             su.id_,
             su.username_,
             su.username_,
             su.real_name_,
             su.real_name_,
-            t.organ_id_
+            t.organ_id_,
+            su.phone_
         FROM
         FROM
             teacher t
             teacher t
             LEFT JOIN sys_user su ON t.id_ = su.id_
             LEFT JOIN sys_user su ON t.id_ = su.id_
@@ -666,7 +668,8 @@
             su.id_,
             su.id_,
             su.username_,
             su.username_,
             su.real_name_,
             su.real_name_,
-            t.organ_id_
+            t.organ_id_,
+            su.phone_
         FROM
         FROM
             teacher t
             teacher t
             LEFT JOIN sys_user su ON t.id_ = su.id_
             LEFT JOIN sys_user su ON t.id_ = su.id_
@@ -679,7 +682,8 @@
             su.id_,
             su.id_,
             su.username_,
             su.username_,
             su.real_name_,
             su.real_name_,
-            t.organ_id_
+            t.organ_id_,
+            su.phone_
         FROM
         FROM
             teacher t
             teacher t
             LEFT JOIN sys_user su ON t.id_ = su.id_
             LEFT JOIN sys_user su ON t.id_ = su.id_
@@ -935,7 +939,7 @@
                 and FIND_IN_SET(organ_id_,#{organId})
                 and FIND_IN_SET(organ_id_,#{organId})
     </select>
     </select>
     <select id="findByFlowOrganRangeTeachers" resultMap="TeacherBasicDto">
     <select id="findByFlowOrganRangeTeachers" resultMap="TeacherBasicDto">
-        SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM teacher t
+        SELECT su.id_,su.username_,su.real_name_,t.organ_id_,su.phone_ FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
         LEFT JOIN sys_user su ON t.id_ = su.id_
         WHERE su.del_flag_ = 0
         WHERE su.del_flag_ = 0
             AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
             AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
@@ -956,7 +960,7 @@
         </foreach>
         </foreach>
     </select>
     </select>
     <select id="findTeacherByOrganId" resultMap="TeacherBasicDto">
     <select id="findTeacherByOrganId" resultMap="TeacherBasicDto">
-        SELECT su.id_,su.username_,su.real_name_ FROM teacher t
+        SELECT su.id_,su.username_,su.real_name_,su.phone_ FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
         LEFT JOIN sys_user su ON t.id_ = su.id_
         WHERE su.del_flag_ != 1 AND su.lock_flag_!=1
         WHERE su.del_flag_ != 1 AND su.lock_flag_!=1
             AND (FIND_IN_SET(t.organ_id_,#{organId}) OR INTE_ARRAY(t.flow_organ_range_,#{organId}))
             AND (FIND_IN_SET(t.organ_id_,#{organId}) OR INTE_ARRAY(t.flow_organ_range_,#{organId}))
@@ -1062,6 +1066,18 @@
         WHERE su.phone_ = #{phone} LIMIT 1
         WHERE su.phone_ = #{phone} LIMIT 1
     </select>
     </select>
 
 
+    <select id="getUserWithIdCard" resultMap="SysUser">
+        SELECT su.*
+        FROM sys_user su
+        WHERE su.id_card_no_ = #{idCard} LIMIT 1
+    </select>
+
+    <select id="getUserWithRealName" resultMap="SysUser">
+        SELECT su.*
+        FROM sys_user su
+        WHERE su.real_name_ = #{realName} LIMIT 1
+    </select>
+
     <select id="queryTeacherBaseInfo"  resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
     <select id="queryTeacherBaseInfo"  resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.BasicUserDto">
         SELECT
         SELECT
         CASE WHEN su.user_type_ LIKE '%TEACHER%' OR su.user_type_ LIKE '%SYSTEM%' THEN su.real_name_ ELSE su.username_ END username_,
         CASE WHEN su.user_type_ LIKE '%TEACHER%' OR su.user_type_ LIKE '%SYSTEM%' THEN su.real_name_ ELSE su.username_ END username_,

+ 145 - 0
mec-biz/src/main/resources/config/mybatis/TempTestMapper.xml

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
+<mapper namespace="com.ym.mec.biz.dal.dao.TempTestDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.TempTest" id="TempTest">
+		<result column="id_" property="id" />
+		<result column="group_type_" property="groupType" />
+		<result column="music_group_id_" property="musicGroupId" />
+		<result column="class_group_id_" property="classGroupId" />
+		<result column="class_date_" property="classDate" />
+		<result column="start_class_time_" property="startClassTime" />
+		<result column="end_class_time_" property="endClassTime" />
+		<result column="actual_teacher_id_" property="actualTeacherId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="teach_mode_" property="teachMode" />
+		<result column="type_" property="type" />
+		<result column="name_" property="name" />
+		<result column="student_num_" property="studentNum" />
+		<result column="schoole_id_" property="schooleId" />
+		<result column="note_" property="note" />
+		<result column="organ_id_" property="organId" />
+		<result column="salary_" property="salary" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="TempTest">
+		SELECT * FROM temp_test
+		WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="TempTest">
+		SELECT * FROM temp_test ORDER BY
+		id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TempTest"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO temp_test
+		(id_,group_type_,music_group_id_,class_group_id_,class_date_,start_class_time_,end_class_time_,actual_teacher_id_,create_time_,update_time_,teach_mode_,type_,name_,student_num_,schoole_id_,note_,organ_id_,salary_)
+		VALUES(#{id},#{groupType},#{musicGroupId},#{classGroupId},#{classDate},#{startClassTime},#{endClassTime},#{actualTeacherId},#{createTime},#{updateTime},#{teachMode},#{type},#{name},#{studentNum},#{schooleId},#{note},#{organId},#{salary})
+	</insert>
+	
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TempTest">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO temp_test
+		(id_,group_type_,music_group_id_,class_group_id_,class_date_,start_class_time_,end_class_time_,actual_teacher_id_,create_time_,update_time_,teach_mode_,type_,name_,student_num_,schoole_id_,note_,organ_id_,salary_)
+		VALUES
+        <foreach collection="list" item="item" separator=",">
+		(#{item.id},#{item.groupType},#{item.musicGroupId},#{item.classGroupId},#{item.classDate},#{item.startClassTime},#{item.endClassTime},#{item.actualTeacherId},#{item.createTime},#{item.updateTime},#{item.teachMode},#{item.type},#{item.name},#{item.studentNum},#{item.schooleId},#{item.note},#{item.organId},#{item.salary})
+        </foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.TempTest">
+		UPDATE temp_test
+		<set>
+			<if test="studentNum != null">
+				student_num_ = #{studentNum},
+			</if>
+			<if test="organId != null">
+				organ_id_ = #{organId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="classGroupId != null">
+				class_group_id_ = #{classGroupId},
+			</if>
+			<if test="teachMode != null">
+				teach_mode_ = #{teachMode},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+			<if test="name != null">
+				name_ = #{name},
+			</if>
+			<if test="note != null">
+				note_ = #{note},
+			</if>
+			<if test="classDate != null">
+				class_date_ = #{classDate},
+			</if>
+			<if test="endClassTime != null">
+				end_class_time_ = #{endClassTime},
+			</if>
+			<if test="actualTeacherId != null">
+				actual_teacher_id_ = #{actualTeacherId},
+			</if>
+			<if test="startClassTime != null">
+				start_class_time_ = #{startClassTime},
+			</if>
+			<if test="updateTime != null">
+				update_time_ = #{updateTime},
+			</if>
+			<if test="groupType != null">
+				group_type_ = #{groupType},
+			</if>
+			<if test="schooleId != null">
+				schoole_id_ = #{schooleId},
+			</if>
+			<if test="musicGroupId != null">
+				music_group_id_ = #{musicGroupId},
+			</if>
+			<if test="type != null">
+				type_ = #{type},
+			</if>
+			<if test="salary != null">
+				salary_ = #{salary},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM temp_test WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="TempTest" parameterType="map">
+		SELECT * FROM temp_test ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM temp_test
+	</select>
+	
+	<select id="queryCourseScheduleInfo" resultMap="TempTest" parameterType="map">
+		SELECT cs.id_,cs.group_type_,cs.music_group_id_,cs.class_group_id_,cs.class_date_,cs.start_class_time_,cs.end_class_time_,csts.user_id_ actual_teacher_id_,
+		cs.create_time_,cs.update_time_,cs.teach_mode_,cs.type_,cs.name_,cs.student_num_,cs.schoole_id_,cs.note_,cs.organ_id_,csts.expect_salary_ salary_ 
+		FROM course_schedule_teacher_salary csts left join course_schedule cs on csts.course_schedule_id_ = cs.id_
+		where csts.user_id_ = #{userId} and cs.class_date_ like concat(#{month},'%') and cs.del_flag_ = 0
+		order by cs.group_type_ desc
+	</select>
+</mapper>

+ 8 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherImLiveBroadcastRoomController.java

@@ -124,6 +124,14 @@ public class TeacherImLiveBroadcastRoomController extends BaseController {
         return succeed(imLiveBroadcastRoomService.queryRoomLimitOnlineUserInfo(roomUid));
         return succeed(imLiveBroadcastRoomService.queryRoomLimitOnlineUserInfo(roomUid));
     }
     }
 
 
+    @ApiOperation("设置是否允许连麦")
+    @GetMapping("/whetherMic")
+    public HttpResponseResult<Object> whetherMic(@ApiParam(value = "房间uid", required = true) String roomUid,
+                                                 @ApiParam(value = "是否连麦 0:是 1否", required = true) Integer whetherMic) {
+        imLiveBroadcastRoomService.whetherMic(roomUid,whetherMic);
+        return succeed();
+    }
+
     @ApiOperation("查询直播间商品订单列表")
     @ApiOperation("查询直播间商品订单列表")
     @GetMapping("/queryLiveRoomGoodsOrderList")
     @GetMapping("/queryLiveRoomGoodsOrderList")
     public HttpResponseResult<PageInfo<LiveRoomGoodsOrderVo>> queryLiveRoomGoodsOrderList(LiveRoomGoodsOrderQueryInfo queryInfo) {
     public HttpResponseResult<PageInfo<LiveRoomGoodsOrderVo>> queryLiveRoomGoodsOrderList(LiveRoomGoodsOrderQueryInfo queryInfo) {

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

@@ -42,7 +42,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
-                        "/tenantInfo/callback","/adapay/callback"
+                        "/tenantInfo/callback","/adapay/callback","/temp/*"
                 )
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }
     }

+ 64 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TempController.java

@@ -0,0 +1,64 @@
+package com.ym.mec.web.controller;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.ym.mec.biz.service.TempTestService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.util.excel.POIUtil;
+
+@RequestMapping("temp")
+@RestController
+public class TempController extends BaseController {
+	
+	@Autowired
+	private TempTestService tempTestService;
+
+	@PostMapping(value = "/queryOrganMusicInfos")
+	public Object queryOrganMusicInfos(@RequestParam("multipartFile") MultipartFile multipartFile) {
+
+		File file = new File(multipartFile.getOriginalFilename());
+		OutputStream out = null;
+		try {
+			out = new FileOutputStream(file);
+		    byte[] ss = multipartFile.getBytes();
+		    for(int i = 0; i < ss.length; i++){
+		        out.write(ss[i]);
+		    }
+		    
+			//FileUtils.write(file, IOUtils.toString(multipartFile.getBytes()), "utf-8");
+
+			Map<String, List<Map<String, Object>>> sheetMap = POIUtil.importExcel(file, 2);
+			
+			tempTestService.processBiz(sheetMap.get("Sheet1"));
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			FileUtils.deleteQuietly(file);
+			if(out != null){
+				try {
+					out.close();
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+
+		return succeed();
+	}
+}

部分文件因为文件数量过多而无法显示