Przeglądaj źródła

Merge branch 'zx_saas_imGroup' of http://git.dayaedu.com/yonge/mec into test

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
zouxuan 1 rok temu
rodzic
commit
108f0f237e
26 zmienionych plików z 498 dodań i 277 usunięć
  1. 0 2
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  2. 48 13
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java
  3. 12 16
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  4. 47 13
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java
  5. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java
  6. 22 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupMemberWrapper.java
  8. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java
  9. 0 24
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  10. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  11. 0 17
      mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java
  12. 24 64
      mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  14. 2 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  15. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  16. 172 61
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  17. 70 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  18. 26 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  19. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  20. 10 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  21. 4 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  22. 10 4
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  23. 1 1
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  24. 6 1
      mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java
  25. 1 1
      mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  26. 1 1
      pom.xml

+ 0 - 2
mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -97,8 +97,6 @@ public class StudentOrderController extends BaseController {
     @Autowired
     private VipGroupActivityService vipGroupActivityService;
     @Autowired
-    private SellOrderService sellOrderService;
-    @Autowired
     private TenantOrderRecordService tenantOrderRecordService;
     @Autowired
     private OrderPayOpsService orderPayOpsService;

+ 48 - 13
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java

@@ -16,6 +16,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.vo.ImUserWrapper;
+import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -26,6 +27,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -41,9 +43,11 @@ public class ImGroupController extends BaseController {
 	@Resource
 	private ImUserFriendService imUserFriendService;
 	@Resource
+	private ImGroupMemberService imGroupMemberService;
+	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
 	@Resource
-	private SysUserService userLoginService;
+	private SysUserService sysUserService;
     @Resource
     private ImGroupMemberPlusService imGroupMemberPlusService;
 
@@ -57,10 +61,41 @@ public class ImGroupController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(" 移交群主")
+	@PostMapping(value = "/groupChangeOwner")
+	public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
+	}
+
+	@ApiOperation("解散群")
+	@PostMapping(value = "/dismissGroup")
+	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
+		return succeed();
+	}
+
+	@ApiOperation("退群")
+	@PostMapping(value = "/quitGroup")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "String")})
+	public Object quitGroup(String imGroupId, String userId) {
+		List<Integer> userIds = Arrays.stream(userId.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+		return succeed(imGroupMemberService.quit(imGroupId,userIds));
+	}
+
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
-		return succeed(imGroupService.queryByUserId(userLoginService.getUserId(), search,groupType));
+		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
 	}
 
 
@@ -70,7 +105,7 @@ public class ImGroupController extends BaseController {
         if (StringUtils.isNotBlank(classType) && classType.equals("SINGLE")) {
             classType = "NORMAL";
         }
-        return succeed(imGroupService.queryByUserIdV2(userLoginService.getUserId(), search,groupType,musicGroupId,classType));
+        return succeed(imGroupService.queryByUserIdV2(sysUserService.getUserId(), search,groupType,musicGroupId,classType));
     }
 
 	@ApiOperation("查询群详情")
@@ -86,7 +121,7 @@ public class ImGroupController extends BaseController {
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -115,7 +150,7 @@ public class ImGroupController extends BaseController {
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -152,10 +187,10 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询好友详情")
 	@GetMapping(value = "/queryFriendDetail")
 	public HttpResponseResult<ImUserFriendDto> queryFriendDetail(Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 
 			List<String> userTypes = Lists.newArrayList(user.getUserType().split(","));
@@ -180,10 +215,10 @@ public class ImGroupController extends BaseController {
 	})
 	@GetMapping(value = "/imUserFriend/getDetail/{userId}")
 	public HttpResponseResult<ImUserWrapper.ImUserFriend> getImUserFriendDetail(@PathVariable("userId") Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 			if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
 				dto.setFriendNickname(user.getUsername());
@@ -212,7 +247,7 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询好友列表")
 	@GetMapping(value = "/queryFriendList")
 	public HttpResponseResult<List<ImUserFriendDto>> queryFriendList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search));
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search));
 	}
 
 	@ApiOperation("查询好友列表(重构版)")
@@ -220,7 +255,7 @@ public class ImGroupController extends BaseController {
 	public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryImUserFriendList(String search) {
 
 		// 好友关系列表
-		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search);
+		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search);
 
 		List<ImUserWrapper.ImUserFriend> wrappers = Lists.newArrayList();
 		if (CollectionUtils.isNotEmpty(friendDtos)) {
@@ -249,7 +284,7 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询好友中的学生列表")
 	@GetMapping(value = "/queryFriendStudentList")
 	public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
 				.collect(Collectors.toList()));
 	}
 
@@ -257,7 +292,7 @@ public class ImGroupController extends BaseController {
     @ApiOperation("查询好友中的学生列表-v2")
     @GetMapping(value = "/queryFriendStudentList/v2")
     public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentListV2(String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
-        return succeed(imUserFriendService.queryFriendListByUserIdV2(userLoginService.getUserId(), search,musicGroupId,subjectId,vipFlag)
+        return succeed(imUserFriendService.queryFriendListByUserIdV2(sysUserService.getUserId(), search,musicGroupId,subjectId,vipFlag)
                 .stream().filter(e -> StringUtils.isBlank(e.getTags()))
                 .collect(Collectors.toList()));
     }

+ 12 - 16
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -10,12 +10,10 @@ import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
-import com.ym.mec.biz.dal.vo.ImGroupVo;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.vo.ImUserWrapper;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
@@ -74,7 +72,7 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("创建群聊")
 	@PostMapping(value = "/createGroup")
-	public HttpResponseResult queryGroupList(@RequestBody ImGroupDto imGroupDto) {
+	public HttpResponseResult<String> queryGroupList(@RequestBody ImGroupDto imGroupDto) {
 		return succeed(imGroupService.createGroup(imGroupDto));
 	}
 
@@ -311,27 +309,25 @@ public class ImGroupController extends BaseController {
 
     @ApiOperation(" 移交群主")
     @AuditLogAnnotation(operateName = "移交群主",interfaceURL = "imGroup/groupChangeOwner")
-    /*@ApiImplicitParams({
-			@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "integer")
-	})*/
     @PostMapping(value = "/groupChangeOwner")
-    public Object groupChangeOwner(@RequestBody ImGroupVo.GroupChangeOwner info) throws Exception {
-
-		// 校验参数合法性
-		if (StringUtils.isBlank(info.getImGroupId()) || Objects.isNull(info.getUserId())) {
-			throw new BizException("请求参数错误");
+    public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
 		}
-
-        return succeed(imGroupService.groupChangeOwner(info.getUserId(), info.getImGroupId()));
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
     }
 
 	@ApiOperation("解散群")
 	@PostMapping(value = "/dismissGroup")
 	@AuditLogAnnotation(operateName = "解散群",interfaceURL = "imGroup/dismissGroup")
 	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
-	public Object dismissGroup(String imGroupId) {
-		imGroupService.dismissGroup(imGroupId);
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
 		return succeed();
 	}
 

+ 47 - 13
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java

@@ -26,6 +26,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -41,9 +42,11 @@ public class EduImGroupController extends BaseController {
 	@Resource
 	private ImUserFriendService imUserFriendService;
 	@Resource
+	private ImGroupMemberService imGroupMemberService;
+	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
 	@Resource
-	private SysUserService userLoginService;
+	private SysUserService sysUserService;
     @Resource
     private ImGroupMemberPlusService imGroupMemberPlusService;
 
@@ -57,10 +60,41 @@ public class EduImGroupController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(" 移交群主")
+	@PostMapping(value = "/groupChangeOwner")
+	public Object groupChangeOwner(@RequestBody ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+		if (StringUtils.isEmpty(groupTransferOwner.getImGroupId()) || StringUtils.isEmpty(groupTransferOwner.getUserId())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("参数错误");
+		}
+		groupTransferOwner.setCurrentOwner(sysUserService.getUserId().toString());
+		if(StringUtils.equals(groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner())){
+			throw new com.microsvc.toolkit.common.webportal.exception.BizException("不能转交给自己");
+		}
+		imGroupService.transferOwner(groupTransferOwner);
+		return succeed();
+	}
+
+	@ApiOperation("解散群")
+	@PostMapping(value = "/dismissGroup")
+	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
+	public HttpResponseResult<Object> dismissGroup(String imGroupId) {
+		imGroupService.dismissGroup(imGroupId,sysUserService.getUserId().toString());
+		return succeed();
+	}
+
+	@ApiOperation("退群")
+	@PostMapping(value = "/quitGroup")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String"),
+			@ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "String")})
+	public Object quitGroup(String imGroupId, String userId) {
+		List<Integer> userIds = Arrays.stream(userId.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+		return succeed(imGroupMemberService.quit(imGroupId,userIds));
+	}
+
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
-		return succeed(imGroupService.queryByUserId(userLoginService.getUserId(), search,groupType));
+		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
 	}
 
 
@@ -70,7 +104,7 @@ public class EduImGroupController extends BaseController {
         if (StringUtils.isNotBlank(classType) && classType.equals("SINGLE")) {
             classType = "NORMAL";
         }
-        return succeed(imGroupService.queryByUserIdV2(userLoginService.getUserId(), search,groupType,musicGroupId,classType));
+        return succeed(imGroupService.queryByUserIdV2(sysUserService.getUserId(), search,groupType,musicGroupId,classType));
     }
 
 	@ApiOperation("查询群详情")
@@ -86,7 +120,7 @@ public class EduImGroupController extends BaseController {
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -115,7 +149,7 @@ public class EduImGroupController extends BaseController {
         }
         ImGroupMemberPlus admin = imGroupMemberPlusService.lambdaQuery()
             .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
-            .eq(ImGroupMemberPlus::getUserId, userLoginService.getUser().getId())
+            .eq(ImGroupMemberPlus::getUserId, sysUserService.getUser().getId())
             .last("limit 1").one();
         if (admin == null) {
             // 该用户不在该群,无权限查看,处理用户退出群后,查看历史消息校验
@@ -152,10 +186,10 @@ public class EduImGroupController extends BaseController {
 	@ApiOperation("查询好友详情")
 	@GetMapping(value = "/queryFriendDetail")
 	public HttpResponseResult<ImUserFriendDto> queryFriendDetail(Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 
 			List<String> userTypes = Lists.newArrayList(user.getUserType().split(","));
@@ -180,10 +214,10 @@ public class EduImGroupController extends BaseController {
 	})
 	@GetMapping(value = "/imUserFriend/getDetail/{userId}")
 	public HttpResponseResult<ImUserWrapper.ImUserFriend> getImUserFriendDetail(@PathVariable("userId") Integer userId) {
-		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(userLoginService.getUserId(), userId);
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 			dto = new ImUserFriendDto();
-			SysUser user = userLoginService.queryUserById(userId);
+			SysUser user = sysUserService.queryUserById(userId);
 			dto.setFriend(user);
 			if (user.getUserType().contains("STUDENT") || user.getUserType().contains("SCHOOL")) {
 				dto.setFriendNickname(user.getUsername());
@@ -212,7 +246,7 @@ public class EduImGroupController extends BaseController {
 	@ApiOperation("查询好友列表")
 	@GetMapping(value = "/queryFriendList")
 	public HttpResponseResult<List<ImUserFriendDto>> queryFriendList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search));
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search));
 	}
 
 	@ApiOperation("查询好友列表(重构版)")
@@ -220,7 +254,7 @@ public class EduImGroupController extends BaseController {
 	public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryImUserFriendList(String search) {
 
 		// 好友关系列表
-		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search);
+		List<ImUserFriendDto> friendDtos = imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search);
 
 		List<ImUserWrapper.ImUserFriend> wrappers = Lists.newArrayList();
 		if (CollectionUtils.isNotEmpty(friendDtos)) {
@@ -249,7 +283,7 @@ public class EduImGroupController extends BaseController {
 	@ApiOperation("查询好友中的学生列表")
 	@GetMapping(value = "/queryFriendStudentList")
 	public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentList(String search) {
-		return succeed(imUserFriendService.queryFriendListByUserId(userLoginService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
 				.collect(Collectors.toList()));
 	}
 
@@ -257,7 +291,7 @@ public class EduImGroupController extends BaseController {
     @ApiOperation("查询好友中的学生列表-v2")
     @GetMapping(value = "/queryFriendStudentList/v2")
     public HttpResponseResult<List<ImUserFriendDto>> queryFriendStudentListV2(String search, String musicGroupId, Integer subjectId, Boolean vipFlag) {
-        return succeed(imUserFriendService.queryFriendListByUserIdV2(userLoginService.getUserId(), search,musicGroupId,subjectId,vipFlag)
+        return succeed(imUserFriendService.queryFriendListByUserIdV2(sysUserService.getUserId(), search,musicGroupId,subjectId,vipFlag)
                 .stream().filter(e -> StringUtils.isBlank(e.getTags()))
                 .collect(Collectors.toList()));
     }

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java

@@ -4,6 +4,7 @@ import com.ym.mec.common.entity.BaseEntity;
 import com.ym.mec.common.enums.BaseEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -28,7 +29,6 @@ public class ImGroup extends BaseEntity {
 	/** 群备注 */
 	private String memo;
 
-	@Getter
 	@ApiModelProperty(value = "禁言配置")
 	private String configJson;
 	
@@ -97,6 +97,13 @@ public class ImGroup extends BaseEntity {
 		}
 	}
 
+	public String getConfigJson() {
+		if (StringUtils.isEmpty(configJson)){
+			return "{mute: false}";
+		}
+		return configJson;
+	}
+
 	//群类型
 	private GroupTypeEnum groupType;
 

+ 22 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java

@@ -1,12 +1,13 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
+import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
-import com.ym.mec.common.entity.BaseEntity;
-
 import java.util.Date;
 
 /**
@@ -37,12 +38,13 @@ public class ImGroupMember extends BaseEntity {
 	private boolean isAdmin;
 
 	@Getter
+	@Setter
 	@ApiModelProperty(value = "是否禁言")
 	private Boolean muteFlag = false;
 
 	@Getter
 	@ApiModelProperty(value = "第三方群角色")
-	private EImGroupRoleType groupRoleType;
+	private String groupRoleType;
 	
 	@Getter
 	@ApiModelProperty(value = "群角色")
@@ -72,6 +74,16 @@ public class ImGroupMember extends BaseEntity {
 	@Getter
 	private java.util.Date updateTime;
 
+	private ImGroup.GroupTypeEnum groupType;
+
+	public ImGroup.GroupTypeEnum getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(ImGroup.GroupTypeEnum groupType) {
+		this.groupType = groupType;
+	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}
@@ -98,14 +110,20 @@ public class ImGroupMember extends BaseEntity {
 
 	public void setIsAdmin(boolean admin) {
 		isAdmin = admin;
+		if (admin){
+			this.groupRoleType = EImGroupRoleType.Owner.getCode();
+		}
 	}
 
-	public void setGroupRoleType(EImGroupRoleType groupRoleType) {
+	public void setGroupRoleType(String groupRoleType) {
 		this.groupRoleType = groupRoleType;
 	}
 
 	public void setRoleType(String roleType) {
 		this.roleType = roleType;
+		if(StringUtils.isEmpty(this.groupRoleType)){
+			this.groupRoleType = StringUtils.isEmpty(roleType)?EImGroupRoleType.Member.getCode():EImGroupRoleType.Admin.getCode();
+		}
 	}
 
 	public void setType(String type) {

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupMemberWrapper.java

@@ -112,6 +112,8 @@ public class ImGroupMemberWrapper {
         @ApiModelProperty("机构ID")
         private Integer tenantId = TenantContextHolder.getTenantId();
 
+        private String groupRoleType;
+
         public static ImGroupMember from(String json) {
             return JSON.parseObject(json, ImGroupMember.class);
         }

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java

@@ -175,4 +175,20 @@ public class ImGroupWrapper {
             return JSON.parseObject(json, ConfigJson.class);
         }
     }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("转交群主")
+    public static class GroupTransferOwner {
+        @ApiModelProperty(value = "群ID",required = true)
+        private String imGroupId;
+
+        @ApiModelProperty("新群主ID")
+        private String userId;
+
+        @ApiModelProperty("当前群主")
+        private String currentOwner;
+    }
 }

+ 0 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java

@@ -53,14 +53,6 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	boolean quit(String imGroupId, Integer userId);
 
 	/**
-	 * 退出指定群组
-	 * @param imGroupIdList 群组编号列表
-	 * @param userId 用户编号
-	 * @return
-	 */
-	boolean quit(List<String> imGroupIdList, Integer userId);
-
-	/**
 	 * 用户批量退出群组
 	 * @param imGroupId 群组编号
 	 * @param userIdList 学生编号
@@ -89,29 +81,13 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	void batchInsert(List<ImGroupMember> imGroupMemberList);
 
 	/**
-	 * 批量删除
-	 * @param imGroupMemberList
-	 */
-	void batchDelete(List<ImGroupMember> imGroupMemberList);
-
-	/**
 	 * 根据群编号和用户编号批量删除
 	 * @param imGroupMemberList
 	 */
 	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
 
-	/**
-	 * 是否在群里
-	 * @param groupId
-	 * @param userId
-	 * @return
-	 */
-	boolean isExit(String groupId, String userId);
-
 	void delRepeat();
 
-	List<ImGroupMember> queryMembers(String groupId, List<String> userIdList, Integer tenantId);
-
 	PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo);
 
 	void batchJoin(String imGroupId, String userId, String roleType);

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java

@@ -92,7 +92,7 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
     void updateImGroup(ImGroup imGroup);
 
     //解散群组
-    void dismissGroup(String imGroupId);
+    void dismissGroup(String imGroupId,String userId);
 
     /**
      * @description: 获取群聊、用户详情
@@ -134,7 +134,6 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
      * @param userId 用户id
      * @param imGroupId     群组id
      */
-    @Transactional(rollbackFor = Exception.class)
     Boolean  groupChangeOwner(Integer userId, String imGroupId) throws Exception;
 
     /**
@@ -228,4 +227,7 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
     void delGroup(String imGroupId);
 
     void muteAll(ImGroupWrapper.GroupMuteAll groupMuteAll);
+
+    void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner);
+
 }

+ 0 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java

@@ -100,14 +100,6 @@ public interface ImGroupCoreService {
     void saveImGroupMemberList(String groupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
 
     /**
-     * 添加群组成员
-     * @param imGroupId 群组主键ID
-     * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
-     * @throws Exception Exception
-     */
-    void saveImGroupMemberList(Long imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
-
-    /**
      * 群成员加入
      * @param imGroupId 群主ID
      * @param groupMembers 群成员
@@ -116,15 +108,6 @@ public interface ImGroupCoreService {
     void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
 
     /**
-     * 添加进入群组
-     *
-     * @param userId 用户ID
-     * @param clientType 客户端类型
-     * @param imGroupId 群组ID
-     */
-    void groupJoin(Long userId, String clientType, String imGroupId) throws Exception;
-
-    /**
      * 转让群主
      *
      * @param groupId 群组ID

+ 24 - 64
mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java

@@ -10,6 +10,7 @@ import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupPlus;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.ImGroupMemberPlusService;
@@ -256,15 +257,6 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      */
     @Override
     public void groupDismiss(String groupId) throws Exception {
-
-        // 判定登录用户是否为群主
-        ImGroupPlus imGroup = imGroupService.lambdaQuery().eq(ImGroupPlus::getId, groupId).last("LIMIT 1").one();
-        if (Objects.isNull(imGroup)) {
-            //throw new BizException("群组不存在");
-            return;
-        }
-
-
         // 获取群成员
         List<ImGroupMemberWrapper.ImGroupMember> groupMembers = imGroupMemberPlusService.lambdaQuery()
                 .select(ImGroupMemberPlus::getUserId, ImGroupMemberPlus::getImGroupId, ImGroupMemberPlus::getRoleType)
@@ -280,7 +272,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         imGroupMemberPlusService.remove(Wrappers.<ImGroupMemberPlus>lambdaQuery().eq(ImGroupMemberPlus::getImGroupId, groupId));
 
         // 解散群
-        imPluginContext.getPluginService().groupDismiss(imGroup.getId(), getImGroupMembers(groupMembers));
+        imPluginContext.getPluginService().groupDismiss(groupId, getImGroupMembers(groupMembers));
 
     }
 
@@ -449,31 +441,22 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
             // 添加群成员到当前群组
             imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
-
+            // 设置管理员
+            for (ImGroupMemberWrapper.ImGroupMember groupMember : groupMembers) {
+                if (groupMember.getGroupRoleType() != null) {
+                    if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Admin.getCode())){
+                        imPluginContext.getPluginService().groupAdminCreate(imGroup.getId(),groupMember.getImUserId());
+                    }
+                    if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Owner.getCode())){
+                        imPluginContext.getPluginService().changeGroupOwner(imGroup.getId(),groupMember.getImUserId(),null);
+                    }
+                }
+            }
             // 自动激活用户
             asyncRegisterUser(groupMembers);
         }
     }
 
-    /**
-     * 添加群组成员
-     *
-     * @param imGroupId    群组主键ID
-     * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
-     * @throws Exception Exception
-     */
-    @Override
-    public void saveImGroupMemberList(Long imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
-
-        // 群组信息
-        ImGroupPlus imGroup = imGroupService.getById(imGroupId);
-        if (Objects.isNull(imGroup)) {
-            throw new BizException("群组不存在");
-        }
-
-        // 添加群组成员信息
-        saveImGroupMemberList(imGroup.getId(), groupMembers);
-    }
 
     /**
      * 群成员加入
@@ -499,7 +482,17 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
         // 添加群成员到当前群组
         imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
-
+        // 设置管理员
+        for (ImGroupMemberWrapper.ImGroupMember groupMember : groupMembers) {
+            if (groupMember.getGroupRoleType() != null) {
+                if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Admin.getCode())){
+                    imPluginContext.getPluginService().groupAdminCreate(imGroup.getId(),groupMember.getImUserId());
+                }
+                if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Owner.getCode())){
+                    imPluginContext.getPluginService().changeGroupOwner(imGroup.getId(),groupMember.getImUserId(),null);
+                }
+            }
+        }
         // 自动激活用户
         asyncRegisterUser(groupMembers);
 
@@ -522,39 +515,6 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
             .update();
     }
 
-
-    /**
-     * 添加进入群组
-     *
-     * @param userId     用户ID
-     * @param clientType 客户端类型
-     * @param imGroupId  群组ID
-     */
-    @Override
-    public void groupJoin(Long userId, String clientType, String imGroupId) throws Exception {
-
-        // 群组信息
-        ImGroupPlus imGroup = imGroupService.getById(imGroupId);
-        if (Objects.isNull(imGroup)) {
-            throw new BizException("群组不存在");
-        }
-
-        List<ImGroupMemberWrapper.ImGroupMember> imGroupMembers = new ArrayList<>();
-        ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember
-                .builder()
-                .groupId(imGroup.getId())
-                .userId(userId)
-                .clientType(clientType)
-                .imUserId(getImUserId(userId.toString(),clientType))
-                .isAdmin(false)
-                .roleType(clientType)
-                .tenantId(imGroup.getTenantId())
-                .build();
-        imGroupMembers.add(groupMember);
-
-        saveImGroupMemberList(imGroupId, imGroupMembers);
-    }
-
     /**
      * 转让群主
      *

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

@@ -1552,7 +1552,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除班级
         classGroupDao.delete(classGroupId);
         //删除im群组
-        imGroupService.cancel(classGroupId.toString());
+        imGroupService.dismissGroup(classGroupId.toString(),null);
     }
 
     @Override

+ 2 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -23,6 +23,7 @@ import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
@@ -543,6 +544,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     .isAdmin(false)
                     .userId(Long.valueOf(userId))
                     .imUserId(userId)
+                    .groupRoleType(imGroupMember.getGroupRoleType())
                     .nickname(realNameMap.get(imGroupMember.getUserId()))
                     .updateTime(DateTime.now().toDate())
                     .createTime(DateTime.now().toDate())
@@ -562,13 +564,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     for (Map.Entry<String, List<ImGroupMemberWrapper.ImGroupMember>> entry : imGroupMembers.entrySet()) {
 
                         try {
-                            // 获取用户头象
-//                            List<Integer> collect1 = entry.getValue().stream()
-//                                .map(x -> x.getUserId().intValue()).distinct().collect(Collectors.toList());
-//
-//                            Map<Integer, String> avatarMap = teacherDao.getUsersSimpleInfo(collect1).stream()
-//                                .collect(Collectors.toMap(SimpleUserDto::getUserId, SimpleUserDto::getAvatar, (o, n) -> n));
-
                             // 设置用户默认头象
                             for (ImGroupMemberWrapper.ImGroupMember member : entry.getValue()) {
 //                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
@@ -629,17 +624,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                     for (Map.Entry<String, List<GroupMemberWrapper.ImGroupMember>> entry : groupMembers.entrySet()) {
 
                         try {
-                            // 获取用户头象
-//                            List<Integer> collect1 = entry.getValue().stream()
-//                                .map(x -> x.getUserId().intValue()).distinct().collect(Collectors.toList());
-//
-//                            Map<Integer, String> avatarMap = teacherDao.getUsersSimpleInfo(collect1).stream()
-//                                .collect(Collectors.toMap(SimpleUserDto::getUserId, SimpleUserDto::getAvatar, (o, n) -> n));
-//
-//                            // 设置用户默认头象
-//                            for (GroupMemberWrapper.ImGroupMember member : entry.getValue()) {
-//                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
-//                            }
                             // 用户退群
                             imGroupCoreService.groupQuit(entry.getValue(), entry.getKey());
                         } catch (Exception e) {

+ 6 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -2830,8 +2830,11 @@ public class ExportServiceImpl implements ExportService {
         if (!CollectionUtils.isEmpty(sellOrders)) {
             sellOrderMap = sellOrders.stream().collect(Collectors.groupingBy(SellOrder::getOrderId));
             //获取商品列表
-            List<Goods> goodsList = goodsService.findGoodsByIds(sellOrders.stream().map(e -> e.getGoodsId().toString()).distinct().collect(Collectors.joining(",")));
-            goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, Function.identity()));
+            List<Goods> goodsList = goodsService.findGoodsByIds(sellOrders.stream().filter(e->e.getGoodsSkuId()==null)
+                    .map(e -> e.getGoodsId().toString()).distinct().collect(Collectors.joining(",")));
+            goodsList.addAll(goodsService.findGoodsByIds(sellOrders.stream().filter(e->e.getGoodsSkuId() != null)
+                    .map(e -> e.getParentGoodsId().toString()).distinct().collect(Collectors.joining(","))));
+            goodsMap = goodsList.stream().collect(Collectors.groupingBy(e -> e.getId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
         }
 
         //获取订单详情
@@ -3283,7 +3286,7 @@ public class ExportServiceImpl implements ExportService {
         } else if (basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0) {
             //计算销售收入,排除商品编号是76的商品,其他的商品按分类统计
             for (SellOrder e : sellOrderList) {
-                this.setSaleFee(basicOrder, e, goodsMap.get(e.getGoodsId()));
+                this.setSaleFee(basicOrder, e, goodsMap.get(e.getGoodsSkuId() == null ? e.getGoodsId() : e.getParentGoodsId()));
             }
         }
     }

+ 172 - 61
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java

@@ -26,12 +26,13 @@ import com.ym.mec.im.entity.GroupMember;
 import com.ym.mec.im.entity.GroupModel;
 import com.ym.mec.util.collection.MapUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.DateTime;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
@@ -39,34 +40,33 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMember> implements ImGroupMemberService {
-	@Autowired
+	@Resource
 	private ImGroupMemberDao imGroupMemberDao;
-	@Autowired
+	@Resource
 	private ImGroupDao imGroupDao;
-	@Autowired
+	@Resource
 	private ImGroupService imGroupService;
-	@Autowired
+	@Resource
 	private TeacherDao teacherDao;
-	@Autowired
+	@Resource
 	private ClassGroupDao classGroupDao;
-	@Autowired
+	@Resource
 	private MusicGroupDao musicGroupDao;
-	@Autowired
+	@Resource
 	private PracticeGroupDao practiceGroupDao;
-	@Autowired
+	@Resource
 	private VipGroupDao vipGroupDao;
-	@Autowired
+	@Resource
 	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-	@Autowired
+	@Resource
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-	@Autowired
+	@Resource
 	private ImFeignService imFeignService;
-	@Autowired
+	@Resource
 	private ImGroupCoreService imGroupCoreService;
-	@Autowired
+	@Resource
 	private ImPluginContext imPluginContext;
-
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
 	@Override
 	public BaseDAO<Long, ImGroupMember> getDAO() {
@@ -119,7 +119,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			}
 			tags = vipGroup.getName();
 		}
-		ImGroup imGroup = imGroupService.create(imGroupId, null, classGroup.getName(), tags,
+		imGroupService.create(imGroupId, null, classGroup.getName(), tags,
 				tags, tags, null, classGroup.getGroupType().getCode(), ImGroup.GroupTypeEnum.valueOf(classGroup.getType().getCode()));
 		if(userId != null){
 			join(imGroupId,userId,roleType,isAdmin);
@@ -148,19 +148,16 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 		ImGroupMember imGroupMember = new ImGroupMember();
 		Date date = new Date();
-
+		imGroupMember.setGroupType(imGroup.getGroupType());
 		imGroupMember.setCreateTime(date);
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setIsAdmin(isAdmin);
 		imGroupMember.setRoleType(roleType);
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(userId);
-//		if (StringUtils.isBlank(roleType)) {
-//			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
-//		} else {
-//			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
-//		}
-        SysUser user = teacherDao.getUser(userId);
+		//初始化群主数据
+		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
+		SysUser user = teacherDao.getUser(userId);
         imGroupMember.setNickname(sysUserService.getImName(user));
 
 		imGroupMemberDao.insert(imGroupMember);
@@ -181,11 +178,12 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 				groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
 						.groupId(groupId)
-						.isAdmin(isAdmin)
+						.isAdmin(StringUtils.isNotEmpty(roleType))
 						.roleType(roleType)
 						.nickname(imGroupMember.getNickname())
 						.userId(userId.longValue())
 						.imUserId(userId.toString())
+						.groupRoleType(imGroupMember.getGroupRoleType())
 						.avatar(sysUserService.getImAvatar(user))
 						.updateTime(DateTime.now().toDate())
 						.createTime(DateTime.now().toDate())
@@ -199,7 +197,132 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		return true;
 	}
 
-	@Override
+	public void initImGroupMember(ImGroupMember imGroupMember, ImGroup.GroupTypeEnum groupType){
+		try {
+			List<GroupMemberWrapper.Member> members = imPluginContext.getPluginService().groupUserGagList(imGroupMember.getImGroupId());
+			if(CollectionUtils.isNotEmpty(members)){
+				List<String> imGroupUserIds = members.stream().map(e -> e.getId()).collect(Collectors.toList());
+				if(CollectionUtils.isNotEmpty(imGroupUserIds)){
+					if(imGroupUserIds.contains(imGroupMember.getUserId().toString())){
+						imGroupMember.setMuteFlag(true);
+					}
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		//是否有群主
+		if(!imGroupMember.getIsAdmin()){
+			ImGroupMember admin = imGroupMemberDao.getAdmin(imGroupMember.getImGroupId());
+			if(Objects.nonNull(admin)){
+				return;
+			}
+			switch (groupType) {
+				case NORMAL:
+				case MIX:
+				case HIGH:
+				case SNAP:
+				case HIGH_ONLINE:
+				case MUSIC_NETWORK:
+				case PARENT_MEETING:
+					if("乐团主管".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case VIP:
+				case DEMO:
+				case PRACTICE:
+				case COMM:
+				case REPERTOIRE_PLAY:
+				case LIVE:
+					if("指导老师".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case TRAINING:
+					if("分部经理".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+				case SCHOOL:
+					if("乐团领队".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+					}
+					break;
+			}
+		}
+	}
+
+	public void initImGroupMembers(List<ImGroupMember> imGroupMembers, ImGroup.GroupTypeEnum groupType){
+		if (CollectionUtils.isEmpty(imGroupMembers)) {
+			return;
+		}
+		String imGroupId = imGroupMembers.get(0).getImGroupId();
+		try {
+			List<GroupMemberWrapper.Member> members = imPluginContext.getPluginService().groupUserGagList(imGroupId);
+			if(CollectionUtils.isNotEmpty(members)){
+				List<String> imGroupUserIds = members.stream().map(e -> e.getId()).collect(Collectors.toList());
+				if(CollectionUtils.isNotEmpty(imGroupUserIds)){
+					for (ImGroupMember imGroupMember : imGroupMembers) {
+						if(imGroupUserIds.contains(imGroupMember.getUserId().toString())){
+							imGroupMember.setMuteFlag(true);
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		//是否有群主
+		long count = imGroupMembers.stream().filter(e -> e.getIsAdmin()).count();
+		if(count > 0){
+			return;
+		}
+		ImGroupMember admin = imGroupMemberDao.getAdmin(imGroupId);
+		if(Objects.nonNull(admin)){
+			return;
+		}
+		for (ImGroupMember imGroupMember : imGroupMembers) {
+			switch (groupType) {
+				case NORMAL:
+				case MIX:
+				case HIGH:
+				case SNAP:
+				case HIGH_ONLINE:
+				case MUSIC_NETWORK:
+				case PARENT_MEETING:
+					if("乐团主管".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case VIP:
+				case DEMO:
+				case PRACTICE:
+				case COMM:
+				case REPERTOIRE_PLAY:
+				case LIVE:
+					if("指导老师".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case TRAINING:
+					if("分部经理".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+				case SCHOOL:
+					if("乐团领队".equals(imGroupMember.getRoleType())){
+						imGroupMember.setIsAdmin(true);
+						return;
+					}
+					break;
+			}
+		}
+	}
+
 	@Transactional(rollbackFor = Exception.class)
 	public boolean join(String imGroupId,String roleType, boolean isAdmin,ImGroup imGroup,SysUser user) {
 		if (imGroup == null) {
@@ -224,13 +347,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMember.setRoleType(roleType);
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(user.getId());
-//		if (StringUtils.isBlank(roleType)) {
-//			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
-//		} else {
-//			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
-//		}
-
-
+		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
         imGroupMember.setNickname(sysUserService.getImName(user));
 		imGroupMemberDao.insert(imGroupMember);
 
@@ -254,7 +371,8 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 						.userId(imGroupMember.getUserId().longValue())
 						.imUserId(imGroupMember.getUserId().toString())
 						.nickname(imGroupMember.getNickname())
-						.isAdmin(imGroupMember.getIsAdmin())
+						.isAdmin(StringUtils.isNotEmpty(imGroupMember.getGroupRoleType()))
+						.groupRoleType(imGroupMember.getGroupRoleType())
 						.roleType(imGroupMember.getRoleType())
 						.avatar(sysUserService.getImAvatar(user))
 					.build());
@@ -307,7 +425,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			}
 			imGroupMember.setUpdateTime(date);
 			imGroupMember.setUserId(entry.getKey());
-//			imGroupMember.setNickname(nameIdMap.get(imGroupMember.getUserId()));
+			this.initImGroupMember(imGroupMember,imGroup.getGroupType());
 			imGroupMemberList.add(imGroupMember);
 			groupMemberList.add(new GroupMember(imGroupMember.getUserId().toString(), groupId));
 
@@ -316,7 +434,8 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					.groupId(groupId)
 					.userId(imGroupMember.getUserId().longValue())
 					.imUserId(imGroupMember.getUserId().toString())
-					.isAdmin(imGroupMember.getIsAdmin())
+					.isAdmin(StringUtils.isNotEmpty(imGroupMember.getRoleType()))
+					.groupRoleType(imGroupMember.getGroupRoleType())
 					.roleType(imGroupMember.getRoleType())
 					.updateTime(imGroupMember.getUpdateTime())
 					.createTime(imGroupMember.getCreateTime())
@@ -340,6 +459,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
 				}
 			}
+			this.initImGroupMembers(imGroupMemberList,imGroup.getGroupType());
 			imGroupMemberDao.batchInsert(imGroupMemberList);
 			imGroup.setMemberNum(imGroupMemberList.size());
 			imGroup.setUpdateTime(date);
@@ -350,19 +470,15 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 				imFeignService.groupJoin(new GroupModel(groupId, groupMemberList.stream().toArray(GroupMember[]::new), imGroup.getName()));
 			} else {
 				try {
+					List<SysUser> userList = teacherDao.getUserList(groupMembers.stream().map(e -> e.getUserId()).collect(Collectors.toList()));
+					Map<Integer,SysUser> userMap = userList.stream().collect(Collectors.toMap(SysUser::getId, e -> e));
 					for (ImGroupMemberWrapper.ImGroupMember item : groupMembers) {
-						// 用户昵称
-//						if (StringUtils.isBlank(item.getRoleType())) {
-//							item.setNickname(usernameMap.get(item.getUserId().intValue()));
-//						} else {
-//							item.setNickname(realNameMap.get(item.getUserId().intValue()));
-//						}
-//						item.setImUserId(item.getUserId().toString());
-                        SysUser user = teacherDao.getUser(item.getUserId().intValue());
-
-                        // 用户头像
-						item.setAvatar(sysUserService.getImAvatar(user));
-						item.setNickname(sysUserService.getImName(user));
+                        SysUser user = userMap.get(item.getUserId().intValue());
+						if (user != null) {
+							// 用户头像
+							item.setAvatar(sysUserService.getImAvatar(user));
+							item.setNickname(sysUserService.getImName(user));
+						}
 					}
 					// 腾讯云IM用户加群
 					imGroupCoreService.groupMemberJoin(groupId, groupMembers);
@@ -479,31 +595,18 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMemberDao.batchInsert(imGroupMemberList);
 	}
 
-	@Override
-	public void batchDelete(List<ImGroupMember> imGroupMemberList) {
-		imGroupMemberDao.batchDelete(imGroupMemberList);
-	}
 
 	@Override
 	public void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList) {
 		imGroupMemberDao.batchDeleteByGroupIdAndUserId(imGroupMemberList);
 	}
 
-	@Override
-	public boolean isExit(String groupId, String userId) {
-		return imGroupMemberDao.isExit(groupId,userId);
-	}
 
 	@Override
 	public void delRepeat() {
 		imGroupMemberDao.delRepeat();
 	}
 
-	@Override
-	public List<ImGroupMember> queryMembers(String groupId, List<String> userIdList, Integer tenantId) {
-		return imGroupMemberDao.queryMembers(groupId, userIdList, tenantId);
-	}
-
     @Override
     public PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
 		PageInfo<ImGroupMemberDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
@@ -567,6 +670,10 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					try {
 						ImPluginService pluginService = imPluginContext.getPluginService();
 						switch (member.getGroupRoleType()) {
+							case Owner:
+								// 设置群主
+								pluginService.changeGroupOwner(member.getGroupId(), item,null);
+								break;
 							case Admin:
 								// 设置管理员
 								pluginService.groupAdminCreate(member.getGroupId(), item);
@@ -597,6 +704,10 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		try {
 			for (String userId : member.getUserIds()) {
 				switch (member.getGroupRoleType()) {
+					case Owner:
+						// 设置群主
+						pluginService.changeGroupOwner(member.getGroupId(), userId,null);
+						break;
 					case Admin:
 						// 设置管理员
 						pluginService.groupAdminCreate(member.getGroupId(), userId);

+ 70 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
+import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
@@ -28,16 +29,7 @@ import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.ImHistoryMessageWrapper;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
-import com.ym.mec.biz.service.CooperationOrganService;
-import com.ym.mec.biz.service.EmployeeService;
-import com.ym.mec.biz.service.ImGroupMemberService;
-import com.ym.mec.biz.service.ImGroupService;
-import com.ym.mec.biz.service.SchoolStaffService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.TeacherService;
-import com.ym.mec.biz.service.UploadFileService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.UploadReturnBean;
@@ -73,7 +65,9 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -267,7 +261,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
                     .userId(groupMember.getUserId().longValue())
                     .avatar(sysUserService.getImAvatar(user))
                     .nickname(sysUserService.getImName(user))
-                    .isAdmin(groupMember.getIsAdmin())
+                    .isAdmin(StringUtils.isNotEmpty(groupMember.getRoleType()))
+                    .groupRoleType(groupMember.getGroupRoleType())
                     .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
                     .imUserId(getImUserId(groupMember.getUserId().toString(), ""))
                     .roleType(groupMember.getRoleType())
@@ -415,9 +410,28 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dismissGroup(String imGroupId) {
+    public void dismissGroup(String groupId,String userId) {
+        ImGroup imGroup = imGroupService.get(groupId);
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        if(StringUtils.isNotEmpty(userId)){
+            ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupId);
+            if (admin == null) {
+                throw new BizException("群主信息不存在");
+            }
+            if (!StringUtils.equals(admin.getUserId().toString(), userId)) {
+                throw new BizException("当前操作人不是群主");
+            }
+        }
+        // 删除群成员
+        imGroupMemberDao.deleteByImGroupId(groupId);
+        // 删除群公告
+        imGroupNoticeDao.deleteByImGroupId(groupId);
+        // 删除群信息
+        imGroupDao.delete(groupId);
         try {
-            imGroupCoreService.groupDismiss(imGroupId);
+            imPluginContext.getPluginService().groupDismiss(groupId,new ArrayList<>());
         } catch (Exception e) {
             log.error("解散群组失败",e);
             throw new BizException("解散群组失败");
@@ -509,7 +523,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         List<ImGroup> groups = imGroups.stream().filter(imGroup -> imGroup.getMemberNum().equals(1)).collect(Collectors.toList());
         for (ImGroup group : groups) {
             try {
-                dismissGroup(group.getId());
+                dismissGroup(group.getId(),userId.toString());
             } catch (Exception e) {
                 log.error("解散群组失败{},{}", userId, group.getId(), e);
             }
@@ -1933,6 +1947,47 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void transferOwner(ImGroupWrapper.GroupTransferOwner groupTransferOwner) {
+        ImGroup imGroup = imGroupService.get(groupTransferOwner.getImGroupId());
+        if (imGroup == null) {
+            throw new BizException("群组不存在");
+        }
+        ImGroupMember admin = imGroupMemberService.getDao().getAdmin(groupTransferOwner.getImGroupId());
+        if (admin == null) {
+            throw new BizException("群主信息不存在");
+        }
+        if (!StringUtils.equals(admin.getUserId().toString(), groupTransferOwner.getCurrentOwner())) {
+            throw new BizException("当前操作人不是群主");
+        }
+        List<ImGroupMember> imGroupMembers = imGroupMemberService.getDao().queryByImGroupIdAndUserId(groupTransferOwner.getImGroupId(), groupTransferOwner.getUserId());
+        if (CollectionUtils.isEmpty(imGroupMembers)) {
+            throw new BizException("新群主不在群组中");
+        }
+        ImGroupMember imGroupMember = imGroupMembers.get(0);
+        if (!Objects.equals(imGroupMember.getGroupRoleType(), EImGroupRoleType.Admin.getCode())) {
+            throw new BizException("新群主不是管理员");
+        }
+        // 更新群主
+        imGroupMember.setIsAdmin(true);
+        imGroupMemberService.update(imGroupMember);
+        admin.setGroupRoleType(EImGroupRoleType.Admin.getCode());
+        admin.setIsAdmin(false);
+        imGroupMemberService.update(admin);
+        // 调用IM接口
+        try {
+            //设置成群主
+            imPluginContext.getPluginService().changeGroupOwner(groupTransferOwner.getImGroupId(), groupTransferOwner.getUserId(),groupTransferOwner.getCurrentOwner());
+            //设置成管理员
+            imPluginContext.getPluginService().groupAdminCreate(admin.getImGroupId(),admin.getUserId().toString());
+        } catch (Exception e) {
+            log.error("转让群主失败", e);
+            throw new BizException("转让群主失败");
+        }
+    }
+
+
     private TencentRequest.MessageBody getTimGifElem(String remoteUr,int size,int width,int height) {
         if (StringUtils.isEmpty(remoteUr) && size == 0 && width == 0 && height == 0) {
             return null;

+ 26 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -91,33 +91,48 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         //获取比例
         BigDecimal totalRatioAmount = BigDecimal.ZERO;
         if(studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0){
-            totalRatioAmount = detailTotalPrice.divide(studentPaymentOrder.getExpectAmount(), 16, RoundingMode.DOWN);
+            totalRatioAmount = detailTotalPrice.divide(studentPaymentOrder.getExpectAmount(), 32, RoundingMode.DOWN);
         }
         //获取分配的余额
         BigDecimal balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount().multiply(totalRatioAmount).setScale(2, RoundingMode.DOWN);
+        //获取分配的现金
+        BigDecimal totalDetailActualAmount = studentPaymentOrder.getActualAmount().multiply(totalRatioAmount).setScale(2, RoundingMode.DOWN);
         //获取总优惠券金额
         BigDecimal detailTotalRemitPrice = goodsOrderDetails.stream().map(StudentPaymentOrderDetail::getRemitFee).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         List<SellOrder> sellOrders = new ArrayList<>();
-
+        if(balancePaymentAmount.add(totalDetailActualAmount).compareTo(detailTotalPrice) < 0){
+            //多出来的金额
+            BigDecimal subtract = detailTotalPrice.subtract(balancePaymentAmount).subtract(totalDetailActualAmount);
+            if(balancePaymentAmount.compareTo(BigDecimal.ZERO) == 0){
+                totalDetailActualAmount = totalDetailActualAmount.add(subtract);
+            }else if(totalDetailActualAmount.compareTo(BigDecimal.ZERO) == 0){
+                balancePaymentAmount = balancePaymentAmount.add(subtract);
+            }else {
+                balancePaymentAmount = balancePaymentAmount.add(subtract);
+                if(balancePaymentAmount.compareTo(studentPaymentOrder.getBalancePaymentAmount()) > 0){
+                    totalDetailActualAmount = totalDetailActualAmount.add(balancePaymentAmount.subtract(studentPaymentOrder.getBalancePaymentAmount()));
+                    balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount();
+                }
+            }
+        }
         //剩余待分配的余额
         BigDecimal subDetailBalance = balancePaymentAmount;
         //剩余待分配的优惠券金额
         BigDecimal subDetailCouponRemitFee = detailTotalRemitPrice;
         //剩余待分配现金
-        BigDecimal totalDetailActualAmount = detailTotalPrice.subtract(balancePaymentAmount);
         BigDecimal subDetailActualAmount = totalDetailActualAmount;
         for (int i = 0; i < goodsOrderDetails.size(); i++) {
             StudentPaymentOrderDetail orderDetail = goodsOrderDetails.get(i);
             //获取支付金额比例
             BigDecimal ratioAmount = BigDecimal.ZERO;
             if(detailTotalPrice.compareTo(BigDecimal.ZERO) > 0){
-                ratioAmount = orderDetail.getPrice().divide(detailTotalPrice, 16, RoundingMode.DOWN);
+                ratioAmount = orderDetail.getPrice().divide(detailTotalPrice, 32, RoundingMode.DOWN);
             }
             BigDecimal ratioCouponAmount = BigDecimal.ZERO;
             if (detailTotalRemitPrice.compareTo(BigDecimal.ZERO) > 0) {
                 //获取优惠券金额比例
-                ratioCouponAmount = orderDetail.getRemitFee().divide(detailTotalRemitPrice, 16, RoundingMode.DOWN);
+                ratioCouponAmount = orderDetail.getRemitFee().divide(detailTotalRemitPrice, 32, RoundingMode.DOWN);
             }
             //获取分配的余额
             BigDecimal detailBalance;
@@ -285,7 +300,11 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         mallOrder.setTotalAmount(sellOrders.stream().map(SellOrder::getExpectAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
         String paymentBusinessChannel = studentPaymentOrder.getPaymentBusinessChannel();
         if(StringUtils.isEmpty(paymentBusinessChannel)) {
-            mallOrder.setPayType(4);
+            if (StringUtils.isEmpty(studentPaymentOrder.getPaymentChannel())){
+                mallOrder.setPayType(4);
+            }else {
+                mallOrder.setPayType(3);
+            }
         }else {
             if (StringUtils.endsWithIgnoreCase(paymentBusinessChannel, "wx_pub") ||
                     StringUtils.endsWithIgnoreCase(paymentBusinessChannel, "WECHAT") ||
@@ -433,7 +452,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
 
             if (goodsTotalPrice.compareTo(BigDecimal.ZERO) > 0) {
                 goodsRatioAmount = order.getGroupType() == MUSIC ?nowGoods.getGroupPurchasePrice():nowGoods.getDiscountPrice()
-                        .divide(goodsTotalPrice, 16, RoundingMode.DOWN);
+                        .divide(goodsTotalPrice, 32, RoundingMode.DOWN);
             }
             if(i == goodies.size() - 1){
                 expectAmount = subExpectTotalAmount;

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

@@ -229,9 +229,11 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         //获取课程规划
         MusicGroupTrainPlanSaveDto schoolTerm = musicGroupTrainPlanService.getSchoolTerm(courseSchedule);
         int courseNumNo = courseScheduleDao.getCourseNumNo(schoolTerm);
-        List<MusicGroupTrainPlan> planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
-        if(planList.size() >= courseNumNo){
-            musicGroupTrainPlan = planList.get(courseNumNo - 1);
+        if(courseNumNo > 0){
+            List<MusicGroupTrainPlan> planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
+            if(planList.size() >= courseNumNo){
+                musicGroupTrainPlan = planList.get(courseNumNo - 1);
+            }
         }
 
         CourseHomeworkStudentDetailDto courseHomeworkStudentDetail = studentCourseHomeworkDao.findCourseHomeworkStudentDetail(courseScheduleID, userId);

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
@@ -14,6 +15,7 @@ import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -93,7 +95,7 @@ public class StudentServeServiceImpl implements StudentServeService {
         
         //查询进行中乐团在读的学生列表
         List<StudentRegistration> studentRegistrationList = studentRegistrationDao.queryServiceStudentByMusicGroupStatus(DateUtil.dateToString(nextMonday, "yyyy-MM-dd"), tenantId);
-        if(studentRegistrationList == null || studentRegistrationList.size() == 0){
+        if(CollectionUtils.isEmpty(studentRegistrationList)){
         	return;
         }
         
@@ -121,10 +123,13 @@ public class StudentServeServiceImpl implements StudentServeService {
             studentExtracurricularExercisesSituationService.deleteByMonday(monDayDate.toString(), studentIds);
             return;
         }
-        
-        //查询截止到本周有课的信息
-        List<StudentServeCourseDto> studentCutoffWeekCourseInfo = studentDao.getStudentFutureCourseInfo("2019-01-01", sunDayDate.toString(), studentIds, tenantId);
-        
+        //拆分studentIds,每次查询1000个学生
+        List<List<Integer>> partition = Lists.partition(studentIds, 1000);
+        List<StudentServeCourseDto> studentCutoffWeekCourseInfo = new ArrayList<>();
+        for (List<Integer> integers : partition) {
+            //查询截止到本周有课的信息
+            studentCutoffWeekCourseInfo.addAll(studentDao.getStudentFutureCourseInfo("2019-01-01", sunDayDate.toString(), integers, tenantId));
+        }
         Map<String,List<Integer>> musicGroupStudentIdListMap = new HashMap<String, List<Integer>>();
         
         Map<String, List<StudentServeCourseDto>> musicGroupStudentServiceCourseMap = studentCutoffWeekCourseInfo.stream().collect((Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId)));

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -40,6 +40,7 @@
 		<result column="real_name_" property="user.realName" />
 		<result column="user_type_" property="user.userType" />
 		<result column="group_nickname_" property="groupNickname" />
+		<result property="groupRoleType" column="group_role_type_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -65,6 +66,9 @@
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroup">
 		UPDATE im_group <set>
+		<if test="configJson != null">
+			config_json_ = #{configJson},
+		</if>
 		<if test="groupType != null">
 			group_type_ = #{groupType},
 		</if>

+ 10 - 4
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -32,15 +32,15 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_)
-		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type})
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_)
+		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type},#{groupRoleType})
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
 	
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_) VALUES
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_) VALUES
 		 <foreach collection="list" item="item" separator=",">
-		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type})
+		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType})
 		</foreach>
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
@@ -48,6 +48,9 @@
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember">
 		UPDATE im_group_member <set>
+		<if test="groupRoleType != null and groupRoleType != ''">
+			group_role_type_ = #{groupRoleType},
+		</if>
 		<if test="roleType != null">
 		role_type_ = #{roleType},
 		</if>
@@ -74,6 +77,9 @@
 		<foreach collection="list" item="item" index="index" open="" close="" separator=";">
 			UPDATE im_group_member 
 			<set>
+				<if test="item.groupRoleType != null">
+					group_role_type_ = #{item.groupRoleType},
+				</if>
 				<if test="item.roleType != null">
 				role_type_ = #{item.roleType},
 				</if>

+ 1 - 1
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -41,7 +41,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-//        syncSaveLog(request, handler);
+        syncSaveLog(request, handler);
     }
 
     public void syncSaveLog(HttpServletRequest request, Object handler) {

+ 6 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/page/PageInfo.java

@@ -138,7 +138,9 @@ public class PageInfo<T> implements Serializable {
 	}
 
 	public int getTotalPage() {
-		this.totalPage = new BigDecimal(total).divide(new BigDecimal(limit), 0, BigDecimal.ROUND_CEILING).intValue();
+		if(limit>0){
+			this.totalPage=new BigDecimal(total).divide(new BigDecimal(limit),0,BigDecimal.ROUND_CEILING).intValue();
+		}
 		return totalPage;
 	}
 
@@ -148,6 +150,9 @@ public class PageInfo<T> implements Serializable {
 
 	public void setTotal(int total) {
 		this.total = total;
+		if(limit>0){
+			this.totalPage=new BigDecimal(total).divide(new BigDecimal(limit),0,BigDecimal.ROUND_CEILING).intValue();
+		}
 	}
 
 	public List<T> getRows() {

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

@@ -571,7 +571,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                                            try {
                                                cancelOrder(timeOutOrder.getId(), "超时取消");
                                            } catch (Exception e) {
-                                               LOG.warn("订单取消失败,{}",e.fillInStackTrace());
+                                               LOG.error("订单取消失败,",e);
                                            }
                                        }
                                    }, 60L, TimeUnit.SECONDS);

+ 1 - 1
pom.xml

@@ -25,7 +25,7 @@
 		<docker.host>http://127.0.0.1:2375</docker.host>
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
-		<com.microsvc.toolkit.version>1.0.3</com.microsvc.toolkit.version>
+		<com.microsvc.toolkit.version>1.0.4</com.microsvc.toolkit.version>
 	</properties>
 
 	<dependencyManagement>