Browse Source

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

lazhaoqian 3 years ago
parent
commit
a9e2d7bf6c
15 changed files with 399 additions and 406 deletions
  1. 41 31
      blade-service-api/blade-check-api/src/main/java/org/springblade/check/entity/AuditPathsLevels.java
  2. 0 5
      blade-service-api/blade-check-api/src/main/java/org/springblade/check/feign/ICheckClient.java
  3. 64 63
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/Message.java
  4. 3 8
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IMessageClient.java
  5. 12 9
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  6. 15 24
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditPathsServiceImpl.java
  7. 141 135
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  8. 22 21
      blade-service/blade-client/src/main/java/org/springblade/client/message/controller/MessageController.java
  9. 13 10
      blade-service/blade-client/src/main/java/org/springblade/client/message/service/IMessageService.java
  10. 47 49
      blade-service/blade-client/src/main/java/org/springblade/client/message/service/impl/MessageServiceImpl.java
  11. 0 15
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java
  12. 0 15
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/dealer/DealerOrderController.java
  13. 0 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  14. 0 9
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  15. 41 10
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

+ 41 - 31
blade-service-api/blade-check-api/src/main/java/org/springblade/check/entity/AuditPathsLevels.java

@@ -18,11 +18,11 @@ package org.springblade.check.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
 
 /**
  * 审批流配置明细级别表实体类
@@ -39,40 +39,50 @@ public class AuditPathsLevels implements Serializable {
 	@TableId(value = "id", type = IdType.AUTO)
 	private Long id;
 	/**
-	* 审批路径id
-	*/
-		@ApiModelProperty(value = "审批路径id")
-		private Long pathId;
+	 * 审批路径id
+	 */
+	@ApiModelProperty(value = "审批路径id")
+	private Long pathId;
+	/**
+	 * 审批级次
+	 */
+	@ApiModelProperty(value = "审批级次")
+	private Integer levelId;
+	/**
+	 * 审批级次名称
+	 */
+	@ApiModelProperty(value = "审批级次名称")
+	private String levelName;
 	/**
-	* 审批级次
-	*/
-		@ApiModelProperty(value = "审批级次")
-		private Integer levelId;
+	 * 审核人类型
+	 */
+	@ApiModelProperty(value = "审核人类型")
+	private Integer userMold;
 	/**
-	* 审批级次名称
-	*/
-		@ApiModelProperty(value = "审批级次名称")
-		private String levelName;
+	 * 审核人类型列表
+	 */
+	@ApiModelProperty(value = "审核人类型列表")
+	private String auditMoldId;
 	/**
-	* 审核人
-	*/
-		@ApiModelProperty(value = "审核人")
-		private String auditUserId;
+	 * 审核人
+	 */
+	@ApiModelProperty(value = "审核人")
+	private String auditUserId;
 	/**
-	* 是否指定审批人
-	*/
-		@ApiModelProperty(value = "是否指定审批人")
-		private String iffixAuditUser;
+	 * 是否指定审批人
+	 */
+	@ApiModelProperty(value = "是否指定审批人")
+	private String iffixAuditUser;
 	/**
-	* 是否是最后一级审核(T是 F不是)
-	*/
-		@ApiModelProperty(value = "是否是最后一级审核(T是 F不是)")
-		private String iffinalItem;
+	 * 是否是最后一级审核(T是 F不是)
+	 */
+	@ApiModelProperty(value = "是否是最后一级审核(T是 F不是)")
+	private String iffinalItem;
 	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remarks;
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
 
 	@ApiModelProperty(value = "租户id")
 	private String tenantId;

+ 0 - 5
blade-service-api/blade-check-api/src/main/java/org/springblade/check/feign/ICheckClient.java

@@ -41,11 +41,6 @@ public interface ICheckClient {
 	R createFinanceProcess (@RequestBody AuditProecessDTO auditProecessDTO);
 
 	/**
-	 * 更换审批人
-	 */
-	@PostMapping("/auditproecess/changeAuditUser")
-	R changeAuditUser(@RequestBody AuditProecess auditProecess);
-	/**
 	 * 删除审批流数据
 	 */
 	@PostMapping("/auditproecess/update")

+ 64 - 63
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/Message.java

@@ -19,16 +19,14 @@ package org.springblade.client.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 实体类
  *
@@ -41,82 +39,85 @@ import io.swagger.annotations.ApiModelProperty;
 public class Message implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-    @TableId
+
+	@TableId
 	private Long id;
 	/**
-	* 发起人id
-	*/
-		@ApiModelProperty(value = "发起人id")
-		private Long userId;
+	 * 发起人id
+	 */
+	@ApiModelProperty(value = "发起人id")
+	private Long userId;
 	/**
-	* 发起人名称
-	*/
-		@ApiModelProperty(value = "发起人名称")
-		private String userName;
+	 * 发起人名称
+	 */
+	@ApiModelProperty(value = "发起人名称")
+	private String userName;
 	/**
-	* 接收者id
-	*/
-		@ApiModelProperty(value = "接收者id")
-		private Long toUserId;
+	 * 接收者id
+	 */
+	@ApiModelProperty(value = "接收者id")
+	private Long toUserId;
 	/**
-	* 接收者名称
-	*/
-		@ApiModelProperty(value = "接收者名称")
-		private String toUserName;
+	 * 接收者名称
+	 */
+	@ApiModelProperty(value = "接收者名称")
+	private String toUserName;
 	/**
-	* 消息类型 : 1.普通消息 2.系统消息
-	*/
-		@ApiModelProperty(value = "消息类型 : 1.普通消息 2.系统消息")
-		private Integer messageType;
+	 * 消息类型 : 1.普通消息 2.系统消息
+	 */
+	@ApiModelProperty(value = "消息类型 : 1.普通消息 2.系统消息")
+	private Integer messageType;
 	/**
-	* 消息体: 可以为字符串, 可以是json串
-	*/
-		@ApiModelProperty(value = "消息体: 可以为字符串, 可以是json串")
-		private String messageBody;
+	 * 消息体: 可以为字符串, 可以是json串
+	 */
+	@ApiModelProperty(value = "消息体: 可以为字符串, 可以是json串")
+	private String messageBody;
 	/**
-	* 接收者是否已读: 0 未读 1已读
-	*/
-		@ApiModelProperty(value = "接收者是否已读: 0 未读 1已读")
-		private Integer isRead;
+	 * 接收者是否已读: 0 未读 1已读
+	 */
+	@ApiModelProperty(value = "接收者是否已读: 0 未读 1已读")
+	private Integer isRead;
 	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
 	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
 	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
 	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
 	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		private Integer isDeleted;
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
 
-		@ApiModelProperty(value = "租户id")
-		private String tenantId;
+	private String url;
 
-		private String url;
+	private String parameter;
 
-		private String parameter;
+	private String pageStatus;
 
-		private String pageStatus;
+	private String pageLabel;
 
-		private String pageLabel;
+	private Integer origin;
 
-		@TableField(exist = false)
-	    private List<Long> userList;
+	@TableField(exist = false)
+	private List<Long> userList;
 
 
 }

+ 3 - 8
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IMessageClient.java

@@ -1,17 +1,11 @@
 package org.springblade.client.feign;
 
 import org.springblade.client.entity.Message;
-import org.springblade.client.entity.StorageDesc;
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.core.tool.api.R;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
-import java.util.Map;
 
 @FeignClient(
 	value = LauncherConstant.APPLICATION_CLIENT_NAME
@@ -21,9 +15,10 @@ import java.util.Map;
  */
 public interface IMessageClient {
 
-
-    @PostMapping("message/save")
+	@PostMapping("message/save")
 	R save(@RequestBody Message message);
 
+	@PostMapping("message/clean")
+	R clean(@RequestBody Message message);
 
 }

+ 12 - 9
blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java

@@ -52,6 +52,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 审批流记录 控制器
@@ -166,17 +167,19 @@ public class AuditProecessController extends BladeController {
 		List<AuditProecess> list = auditProecessService.list(auditProecessLambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(list)) {
 			list.forEach(e -> {
-
-				try {
-					R<User> userR = userClient.userInfoById(Long.valueOf(e.getAuditUserId()));
-					if (userR.isSuccess()) {
-						e.setAuditName(userR.getData().getRealName());
+				String[] userIdArray = e.getAuditUserId().split(",");
+				List<String> realNameList = new ArrayList<>();
+				for (String userId : userIdArray) {
+					try {
+						R<User> userR = userClient.userInfoById(Long.valueOf(userId));
+						if (userR.isSuccess()) {
+							realNameList.add(userR.getData().getRealName());
+						}
+					} catch (Exception exception) {
+						throw new SecurityException("审批人名称查询错误:" + exception.getMessage());
 					}
-				} catch (Exception exception) {
-					throw new SecurityException("审批人名称查询错误:" + exception.getMessage());
 				}
-
-
+				e.setAuditName(String.join(",", realNameList));
 			});
 		}
 		return R.data(list);

+ 15 - 24
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditPathsServiceImpl.java

@@ -55,66 +55,57 @@ public class AuditPathsServiceImpl extends ServiceImpl<AuditPathsMapper, AuditPa
 
 	@Override
 	@Transactional
-	public AuditPaths modify(AuditPaths auditPaths)
-	{
+	public AuditPaths modify(AuditPaths auditPaths) {
 
 
 		List<AuditPathsLevels> auditPathsLevels = auditPaths.getAuditPathsLevels();
-		if(CollectionUtils.isEmpty(auditPathsLevels))
-		{
+		if (CollectionUtils.isEmpty(auditPathsLevels)) {
 			throw new SecurityException("无级次信息,请检查数据后提交");
 		}
 		//校验最后一级审核个数
-		long lastCount = auditPathsLevels.stream().filter(e -> e.getIffinalItem().equals("T")).count();
-		if(lastCount>1)
-		{
+		long lastCount = auditPathsLevels.stream().filter(e -> "T".equals(e.getIffinalItem())).count();
+		if (lastCount > 1) {
 			throw new SecurityException("存在多个最后一级审核,请重新提交");
 		}
 		//校验每一级是否都有审批人
 		long nullCount = auditPathsLevels.stream().filter(e -> StringUtils.isBlank(e.getAuditUserId())).count();
-		if(nullCount>0)
-		{
+		if (nullCount > 0) {
 			throw new SecurityException("审核级次中存在未补充审批人或者角色");
 		}
 
 		//新增操作
-		if(auditPaths.getId()==null)
-		{
+		if (auditPaths.getId() == null) {
 			auditPaths.setOpUserName(AuthUtil.getUserName());
 			auditPaths.setOpUserId(AuthUtil.getUserId());
 			auditPaths.setOpDate(new Date());
 			auditPaths.setTenantId(AuthUtil.getTenantId());
 			baseMapper.insert(auditPaths);
-			auditPathsLevels.forEach(e->{
+			auditPathsLevels.forEach(e -> {
 				e.setPathId(auditPaths.getId());
 				e.setTenantId(AuthUtil.getTenantId());
 				auditPathsLevelsMapper.insert(e);
 			});
 		}
 		//修改操作
-		else
-		{
+		else {
 			//如果是修改操作,需要删除之前的审核路径
-			LambdaQueryWrapper<AuditPathsLevels> auditPathsLevelsLambdaQueryWrapper=new LambdaQueryWrapper<>();
-			auditPathsLevelsLambdaQueryWrapper.eq(AuditPathsLevels::getPathId,auditPaths.getId());
+			LambdaQueryWrapper<AuditPathsLevels> auditPathsLevelsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			auditPathsLevelsLambdaQueryWrapper.eq(AuditPathsLevels::getPathId, auditPaths.getId());
 			List<Long> ids = auditPathsLevelsMapper.selectList(auditPathsLevelsLambdaQueryWrapper).stream().map(AuditPathsLevels::getId).collect(Collectors.toList());
-            if(CollectionUtils.isNotEmpty(ids))
-            {
+			if (CollectionUtils.isNotEmpty(ids)) {
 				auditPathsLevelsMapper.deleteBatchIds(ids);
 			}
 
 			baseMapper.updateById(auditPaths);
-			auditPathsLevels.forEach(lt->{
-                //新增
-				if(lt.getId()==null)
-				{
+			auditPathsLevels.forEach(lt -> {
+				//新增
+				if (lt.getId() == null) {
 					lt.setPathId(auditPaths.getId());
 					lt.setTenantId(AuthUtil.getTenantId());
 					auditPathsLevelsMapper.insert(lt);
 				}
 				//修改
-				else
-				{
+				else {
 					auditPathsLevelsMapper.updateById(lt);
 				}
 

+ 141 - 135
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -51,8 +51,8 @@ import org.springblade.school.feign.ISalaryClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
@@ -170,8 +170,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				Message message = new Message();
 				message.setUserId(AuthUtil.getUserId());
 				message.setUserName(AuthUtil.getUserName());
-				message.setToUserId(Long.valueOf(e.getAuditUserId()));
 				message.setMessageType(1);
+				message.setOrigin(1);
 				message.setParameter(String.valueOf(auditProecessDTO.getBillId()));
 				//不同的审批, 不同的模板
 				if ("付费审批".equals(auditProecessDTO.getProcessType())) {
@@ -224,10 +224,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				}
 
 				message.setUrl("/approveData/index");
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				sendMsgToGroup(message, e.getAuditUserId());
 
 				auditProecess.setAuditStatus("S");
 			} else {
@@ -255,11 +252,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	public void operationFinanceProcess(AuditProecess auditProecess) {
 
 		//查看最新操作记录,防止重复提交
-		AuditProecess auditProecess1 = baseMapper.selectById(auditProecess.getId());
-		if (auditProecess1 == null) {
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
-		if ("A".equals(auditProecess1.getAuditStatus()) || "B".equals(auditProecess1.getAuditStatus())) {
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
 			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
 		}
 
@@ -281,7 +278,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		sendMessage.setPageLabel(auditProecess.getPageLabel());
 		sendMessage.setPageStatus(auditProecess.getPageStatus());
 
-
 		//用户操作 1.通过  2.驳回
 		Integer operate = auditProecess.getOperate();
 		//查看当前审批是否为最后一级
@@ -293,7 +289,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		//不是最后一级
 		if ("F".equals(iffinalItem)) {
 
-
 			//通过
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
@@ -307,7 +302,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					}
 				}
 
-
 				auditProecess.setAuditStatus("A");
 				//查询下一级,开启待审
 				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -333,44 +327,39 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
 				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
 				String corpName = null;
-				if (auditProecess1.getCorpId() != null) {
-					R<CorpsDesc> corpMessage = iCorpsDescClient.getCorpMessage(auditProecess1.getCorpId());
+				if (proecessTemp.getCorpId() != null) {
+					R<CorpsDesc> corpMessage = iCorpsDescClient.getCorpMessage(proecessTemp.getCorpId());
 					if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 						corpName = corpMessage.getData().getCname();
 					}
 				}
 				String orderDate = null;
-				if (auditProecess1.getBillId() != null) {
-					Order order = orderDescClient.getById(auditProecess1.getBillId());
+				if (proecessTemp.getBillId() != null) {
+					Order order = orderDescClient.getById(proecessTemp.getBillId());
 					if (order != null) {
 
 						orderDate = simpleDateFormat.format(order.getCreateTime());
 					}
 				}
 
-
 				Message message = new Message();
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 				//付费申请模板
 				message.setMessageBody("您有付费审核,公司名:" + corpName + "," + "采购订单号:" +
-					"" + auditProecess1.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
-					+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+					"" + proecessTemp.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
+					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 				);
 
 				message.setCreateUser(AuthUtil.getUserId());
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			//不通过
 			else if (operate == 2) {
@@ -381,7 +370,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改财务数据失败");
 				}
 
-				sendMessage.setMessageBody("您的付费请核未通过" + ",采购订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的付费请核未通过" + ",采购订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -400,7 +389,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改财务数据失败");
 				}
 
-				sendMessage.setMessageBody("您的付费请核已通过" + ",采购订单号:" + auditProecess1.getBillNo() + ",请继续操作");
+				sendMessage.setMessageBody("您的付费请核已通过" + ",采购订单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -414,7 +403,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
-				sendMessage.setMessageBody("您的付费请核未通过" + ",采购订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的付费请核未通过" + ",采购订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -423,6 +412,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
@@ -435,11 +427,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	public void serverProcess(AuditProecess auditProecess) {
 
 		//查看最新操作记录,防止重复提交
-		AuditProecess auditProecess1 = baseMapper.selectById(auditProecess.getId());
-		if (auditProecess1 == null) {
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
-		if ("A".equals(auditProecess1.getAuditStatus()) || "B".equals(auditProecess1.getAuditStatus())) {
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
 			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
 		}
 
@@ -473,7 +465,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		//不是最后一级
 		if ("F".equals(iffinalItem)) {
 
-
 			//通过
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
@@ -487,7 +478,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					}
 				}
 
-
 				auditProecess.setAuditStatus("A");
 				//查询下一级,开启待审
 				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -514,8 +504,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 				message.setMessageBody("你有新的审批待操作,请及时处理");
@@ -523,10 +511,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			//不通过
 			else if (operate == 2) {
@@ -556,7 +542,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改财务数据失败");
 				}
 
-
 				sendMessage.setMessageBody("您的请核已通过,请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -580,6 +565,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
@@ -591,11 +579,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void orderCheckProcess(AuditProecess auditProecess) {
 		//查看最新操作记录,防止重复提交
-		AuditProecess auditProecess1 = baseMapper.selectById(auditProecess.getId());
-		if (auditProecess1 == null) {
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
-		if ("A".equals(auditProecess1.getAuditStatus()) || "B".equals(auditProecess1.getAuditStatus())) {
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
 			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
 		}
 
@@ -617,7 +605,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		sendMessage.setPageLabel(auditProecess.getPageLabel());
 		sendMessage.setPageStatus(auditProecess.getPageStatus());
 
-
 		//用户操作 1.通过  2.驳回
 		Integer operate = auditProecess.getOperate();
 		//查看当前审批是否为最后一级
@@ -629,7 +616,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		//不是最后一级
 		if ("F".equals(iffinalItem)) {
 
-
 			//通过
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
@@ -640,7 +626,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					}
 				}
 
-
 				auditProecess.setAuditStatus("A");
 				//查询下一级,开启待审
 				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -664,56 +649,49 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				proecess.setAuditStatus("S");
 				baseMapper.updateById(proecess);
 
-
 				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
 				String corpName = null;
-				if (auditProecess1.getCorpId() != null) {
-					R<CorpsDesc> corpMessage = iCorpsDescClient.getCorpMessage(auditProecess1.getCorpId());
+				if (proecessTemp.getCorpId() != null) {
+					R<CorpsDesc> corpMessage = iCorpsDescClient.getCorpMessage(proecessTemp.getCorpId());
 					if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 						corpName = corpMessage.getData().getCname();
 					}
 				}
 				String orderDate = null;
-				if (auditProecess1.getBillId() != null) {
-					Order order = orderDescClient.getById(auditProecess1.getBillId());
+				if (proecessTemp.getBillId() != null) {
+					Order order = orderDescClient.getById(proecessTemp.getBillId());
 					if (order != null) {
 
 						orderDate = simpleDateFormat.format(order.getCreateTime());
 					}
 				}
 
-
 				Message message = new Message();
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 
 				//判断模板类型
-				if ("销售审批".equals(auditProecess1.getProcessType())) {
+				if ("销售审批".equals(proecessTemp.getProcessType())) {
 					message.setMessageBody("您有销售审核,公司名:" + corpName + "," + "销售订单号:" +
-						"" + auditProecess1.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						"" + proecessTemp.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if ("采购审批".equals(auditProecess1.getProcessType())) {
+				} else if ("采购审批".equals(proecessTemp.getProcessType())) {
 					message.setMessageBody("您有采购审核,公司名:" + corpName + "," + "采购订单号:" +
-						"" + auditProecess1.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						"" + proecessTemp.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
 				}
 
-
 				message.setCreateUser(AuthUtil.getUserId());
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			//不通过
 			else if (operate == 2) {
@@ -724,10 +702,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改财务数据失败");
 				}
 
-				if ("销售审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("采购审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的采购请核未通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				if ("销售审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("采购审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的采购请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 
 
@@ -750,10 +728,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				}
 
 
-				if ("销售审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的销售请核已通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",请继续操作");
-				} else if ("采购审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的采购请核已通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",请继续操作");
+				if ("销售审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的销售请核已通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				} else if ("采购审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的采购请核已通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -768,10 +746,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
-				if ("销售审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("采购审批".equals(auditProecess1.getProcessType())) {
-					sendMessage.setMessageBody("您的采购请核未通过" + ",销售订单号:" + auditProecess1.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				if ("销售审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				} else if ("采购审批".equals(proecessTemp.getProcessType())) {
+					sendMessage.setMessageBody("您的采购请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -781,6 +759,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
@@ -809,10 +790,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void changeAuditUser(AuditProecess auditProecess) {
-		baseMapper.updateById(auditProecess);
-
-		// 保存后查询具体内容
 		AuditProecess process = baseMapper.selectById(auditProecess.getId());
+		List<String> userIdList = Arrays.stream(process.getAuditUserId().split(",")).collect(Collectors.toList());
+		userIdList.remove(String.valueOf(AuthUtil.getUserId()));
+		process.setAuditUserId(String.join(",", userIdList));
+		baseMapper.updateById(process);
 
 		String corpName = null;
 		if (process.getCorpId() != null) {
@@ -832,7 +814,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		Message message = new Message();
 		message.setUserId(AuthUtil.getUserId());
 		message.setUserName(AuthUtil.getUserName());
-		message.setToUserId(Long.valueOf(process.getAuditUserId()));
+		message.setToUserId(Long.valueOf(auditProecess.getAuditUserId()));
 		message.setMessageType(1);
 		message.setParameter(String.valueOf(process.getBillId()));
 		// 不同的审批, 不同的模板
@@ -914,11 +896,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void salaryCheck(AuditProecess auditProecess) {
 		//查看最新操作记录,防止重复提交
-		AuditProecess auditProecess1 = baseMapper.selectById(auditProecess.getId());
-		if (auditProecess1 == null) {
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
-		if ("A".equals(auditProecess1.getAuditStatus()) || "B".equals(auditProecess1.getAuditStatus())) {
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
 			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
 		}
 
@@ -993,35 +975,31 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
-				if (auditProecess1.getCheckType().equals("xsgz")) {
+				if ("xsgz".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有小学部工资审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if (auditProecess1.getCheckType().equals("czgz")) {
+				} else if ("czgz".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有初中部工资审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if (auditProecess1.getCheckType().equals("gzgz")) {
+				} else if ("gzgz".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有高中部工资审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if (auditProecess1.getCheckType().equals("hqgz")) {
+				} else if ("hqgz".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有后勤部工资审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
 				}
 				message.setCreateUser(AuthUtil.getUserId());
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			//不通过
 			else if (operate == 2) {
@@ -1031,13 +1009,13 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改原数据失败");
 				}
-				if (auditProecess1.getCheckType().equals("xsgz")) {
+				if ("xsgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的小学部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("czgz")) {
+				} else if ("czgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的初中部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("gzgz")) {
+				} else if ("gzgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的高中部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("hqgz")) {
+				} else if ("hqgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的后勤部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
@@ -1057,13 +1035,13 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException(r.getMsg());
 				}
-				if (auditProecess1.getCheckType().equals("xsgz")) {
+				if ("xsgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的小学部工资请核已通过,请继续操作");
-				} else if (auditProecess1.getCheckType().equals("czgz")) {
+				} else if ("czgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的初中部工资请核已通过,请继续操作");
-				} else if (auditProecess1.getCheckType().equals("gzgz")) {
+				} else if ("gzgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的高中部工资请核已通过,请继续操作");
-				} else if (auditProecess1.getCheckType().equals("hqgz")) {
+				} else if ("hqgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的后勤部工资请核已通过,请继续操作");
 				}
 				R save = messageClient.save(sendMessage);
@@ -1079,13 +1057,13 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改原数据失败");
 				}
-				if (auditProecess1.getCheckType().equals("xsgz")) {
+				if ("xsgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的小学部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("czgz")) {
+				} else if ("czgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的初中部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("gzgz")) {
+				} else if ("gzgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的高中部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if (auditProecess1.getCheckType().equals("hqgz")) {
+				} else if ("hqgz".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的后勤部工资请核未通过,驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
@@ -1096,6 +1074,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
@@ -1112,11 +1093,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void officeCheck(AuditProecess auditProecess) {
 		// 查看最新操作记录,防止重复提交
-		AuditProecess auditProecess1 = baseMapper.selectById(auditProecess.getId());
-		if (auditProecess1 == null) {
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
 			throw new SecurityException("未查到此审批记录,禁止操作");
 		}
-		if ("A".equals(auditProecess1.getAuditStatus()) || "B".equals(auditProecess1.getAuditStatus())) {
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
 			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
 		}
 
@@ -1188,27 +1169,23 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
-				if ("ocg".equals(auditProecess1.getCheckType())) {
+				if ("ocg".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有办公用品采购审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				} else if ("oly".equals(auditProecess1.getCheckType())) {
+				} else if ("oly".equals(proecessTemp.getCheckType())) {
 					message.setMessageBody("您有办公用品领用审核请审核。"
-						+ "提交人:" + auditProecess1.getSendName() + "  提交时间" + simpleDateFormat.format(auditProecess1.getSendTime())
+						+ "提交人:" + proecessTemp.getSendName() + "  提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
 				}
 				message.setCreateUser(AuthUtil.getUserId());
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			// 不通过
 			else if (operate == 2) {
@@ -1218,9 +1195,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改原数据失败");
 				}
 
-				if ("ocg".equals(auditProecess1.getCheckType())) {
+				if ("ocg".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品采购请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("oly".equals(auditProecess1.getCheckType())) {
+				} else if ("oly".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品领用请核未通过,驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
@@ -1240,9 +1217,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException(r.getMsg());
 				}
 
-				if ("ocg".equals(auditProecess1.getCheckType())) {
+				if ("ocg".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品采购请核已通过,请继续操作");
-				} else if ("oly".equals(auditProecess1.getCheckType())) {
+				} else if ("oly".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品领用请核已通过,请继续操作");
 				}
 				R save = messageClient.save(sendMessage);
@@ -1258,9 +1235,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改原数据失败");
 				}
 
-				if ("ocg".equals(auditProecess1.getCheckType())) {
+				if ("ocg".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品采购请核未通过,驳回原因:" + auditProecess.getAuditMsg());
-				} else if ("oly".equals(auditProecess1.getCheckType())) {
+				} else if ("oly".equals(proecessTemp.getCheckType())) {
 					sendMessage.setMessageBody("您的办公用品领用请核未通过,驳回原因:" + auditProecess.getAuditMsg());
 				}
 				R save = messageClient.save(sendMessage);
@@ -1271,6 +1248,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
@@ -1366,8 +1346,6 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setParameter(String.valueOf(auditProecess.getBillId()));
 				message.setUserName(AuthUtil.getUserName());
 				message.setUserId(AuthUtil.getUserId());
-				//消息通知下一级
-				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 
@@ -1385,10 +1363,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setUrl("/approveData/index");
 				message.setCreateTime(new Date());
 
-				R save = messageClient.save(message);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
 			}
 			// 不通过
 			else if (operate == 2) {
@@ -1469,10 +1445,40 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		} else {
 			throw new SecurityException("审批异常,请联系管理员");
 		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
 		//保存操作记录
 		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
 		auditProecess.setAuditItem(new Date());
 		baseMapper.updateById(auditProecess);
 	}
 
+	private void sendMsgToGroup(Message message, String group) {
+		List<String> userList = Arrays.asList(group.split(","));
+		userList.forEach(user -> {
+			message.setToUserId(Long.valueOf(user));
+			R save = messageClient.save(message);
+			if (!save.isSuccess()) {
+				throw new SecurityException("发送消息失败");
+			}
+		});
+	}
+
+	private void cleanMsg(String userId, Long toUserId, Long billId) {
+		List<Long> userIdList = Arrays.stream(userId.split(","))
+			.map(s -> Long.parseLong(s.trim()))
+			.collect(Collectors.toList());
+
+		Message message = new Message();
+		message.setUserList(userIdList);
+		message.setToUserId(toUserId);
+		message.setParameter(String.valueOf(billId));
+
+		R save = messageClient.clean(message);
+		if (!save.isSuccess()) {
+			throw new SecurityException("清除消息失败");
+		}
+	}
+
 }

+ 22 - 21
blade-service/blade-client/src/main/java/org/springblade/client/message/controller/MessageController.java

@@ -19,31 +19,29 @@ package org.springblade.client.message.controller;
 import com.alibaba.nacos.api.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
 import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.entity.Message;
 import org.springblade.client.message.service.IMessageService;
 import org.springblade.client.vo.MessageVO;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.AesUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
-import org.springblade.core.boot.ctrl.BladeController;
 
+import javax.validation.Valid;
 import java.util.Date;
 import java.util.List;
 
 /**
- *  控制器
+ * 控制器
  *
  * @author BladeX
  * @since 2021-12-20
@@ -69,12 +67,11 @@ public class MessageController extends BladeController {
 		return R.data(detail);
 	}
 
-    //备用接口: socket辅助接口, 防止socket掉线
+	//备用接口: socket辅助接口, 防止socket掉线
 	@GetMapping("/getUserMessage")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入message")
-	public String getUserMessage()
-	{
+	public String getUserMessage() {
 		UnReadDTO readDTO = messageService.getUserMessage(AuthUtil.getUserId());
 		return readDTO.toString();
 	}
@@ -86,12 +83,12 @@ public class MessageController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入message")
 	public R<List<Message>> list(Message message, Query query) {
-		LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		LambdaQueryWrapper<Message> messageLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		messageLambdaQueryWrapper
 			.like(Message::getToUserId, AuthUtil.getUserId())
-			.eq(Message::getTenantId,AuthUtil.getTenantId())
+			.eq(Message::getTenantId, AuthUtil.getTenantId())
 			.orderByDesc(Message::getCreateTime)
-		         .orderByAsc(Message::getIsRead);
+			.orderByAsc(Message::getIsRead);
 
 		List<Message> list = messageService.list(messageLambdaQueryWrapper);
 		return R.data(list);
@@ -114,14 +111,11 @@ public class MessageController extends BladeController {
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入message")
-	public R save(@Valid @RequestBody Message message)
-	{
-		if(message.getUserId()==null)
-		{
+	public R save(@Valid @RequestBody Message message) {
+		if (message.getUserId() == null) {
 			message.setUserId(AuthUtil.getUserId());
 		}
-		if(StringUtils.isBlank(message.getUserName()))
-		{
+		if (StringUtils.isBlank(message.getUserName())) {
 			message.setUserName(AuthUtil.getUserName());
 		}
 		message.setTenantId(AuthUtil.getTenantId());
@@ -136,14 +130,12 @@ public class MessageController extends BladeController {
 	@PostMapping("/batchSave")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "批量发送消息", notes = "传入message")
-	public R batchSave(@Valid @RequestBody Message message)
-	{
+	public R batchSave(@Valid @RequestBody Message message) {
 		messageService.batchSave(message);
 		return R.success("操作成功");
 	}
 
 
-
 	/**
 	 * 修改
 	 */
@@ -175,5 +167,14 @@ public class MessageController extends BladeController {
 		return R.status(messageService.removeByIds(Func.toLongList(ids)));
 	}
 
+	/**
+	 * 清除
+	 */
+	@PostMapping("/clean")
+	public R clean(@RequestBody Message message) {
+		messageService.clean(message);
+		return R.success("操作成功");
+	}
+
 
 }

+ 13 - 10
blade-service/blade-client/src/main/java/org/springblade/client/message/service/IMessageService.java

@@ -17,18 +17,14 @@
 package org.springblade.client.message.service;
 
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import lombok.AllArgsConstructor;
+import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.entity.Message;
 import org.springblade.client.vo.MessageVO;
-import org.springframework.stereotype.Service;
-
-import java.util.Map;
 
 /**
- *  服务类
+ * 服务类
  *
  * @author BladeX
  * @since 2021-12-20
@@ -44,12 +40,19 @@ public interface IMessageService extends IService<Message> {
 	 */
 	IPage<MessageVO> selectMessagePage(IPage<MessageVO> page, MessageVO message);
 
-	//通过用户id推送
-	void pushByUserId(Long userId,String Message,Integer MessageType);
-	//通过用户角色推送
-	void pushByUserRole(String role,String Message,Integer MessageType);
+	/**
+	 * 通过用户id推送
+	 */
+	void pushByUserId(Long userId, String msg, Integer messageType);
+
+	/**
+	 * 通过用户角色推送
+	 */
+	void pushByUserRole(String role, String msg, Integer messageType);
 
 	UnReadDTO getUserMessage(Long userId);
 
 	void batchSave(Message message);
+
+	void clean(Message message);
 }

+ 47 - 49
blade-service/blade-client/src/main/java/org/springblade/client/message/service/impl/MessageServiceImpl.java

@@ -15,12 +15,13 @@
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
 package org.springblade.client.message.service.impl;
+
 import com.alibaba.nacos.api.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
-import lombok.Data;
 import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.entity.Message;
 import org.springblade.client.message.mapper.MessageMapper;
@@ -31,9 +32,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
@@ -43,15 +42,15 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
- *  服务实现类
+ * 服务实现类
  *
  * @author BladeX
  * @since 2021-12-20
  */
 @Service
 @AllArgsConstructor
-public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService
-{
+public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService {
+
 	private final IUserClient userClient;
 
 	private final ISysClient sysClient;
@@ -62,14 +61,13 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 	}
 
 	@Override
-	public void pushByUserId(Long userId, String Message, Integer MessageType)
-	{
-		Message message=new Message();
+	public void pushByUserId(Long userId, String msg, Integer messageType) {
+		Message message = new Message();
 		message.setUserId(AuthUtil.getUserId());
 		message.setUserName(AuthUtil.getUserName());
 		message.setToUserId(userId);
-		message.setMessageType(MessageType);
-		message.setMessageBody(Message);
+		message.setMessageType(messageType);
+		message.setMessageBody(msg);
 		message.setIsRead(0);
 		message.setTenantId(AuthUtil.getTenantId());
 		message.setCreateUser(AuthUtil.getUserId());
@@ -79,37 +77,33 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 	}
 
 	@Override
-	@Transactional
-	public void pushByUserRole(String roleAlias, String Message, Integer MessageType)
-	{
+	@Transactional(rollbackFor = Exception.class)
+	public void pushByUserRole(String roleAlias, String msg, Integer messageType) {
 		//查询角色别名对应的角色id
 		R<Long> roleByAlias = sysClient.getRoleByAlias(roleAlias);
-		if(!roleByAlias.isSuccess())
-		{
+		if (!roleByAlias.isSuccess()) {
 			throw new SecurityException("查询角色信息错误");
 		}
 		//角色id
 		Long roleId = roleByAlias.getData();
-        //查询此角色下全部用户
+		//查询此角色下全部用户
 		R<List<User>> listR = userClient.listUserByRoleId(roleId);
-		if(!listR.isSuccess())
-		{
+		if (!listR.isSuccess()) {
 			throw new SecurityException("查询用户列表信息错误");
 		}
 		//查询符合条件的全部用户
 		List<Long> userIds = listR.getData().stream().map(User::getId).collect(Collectors.toList());
-		if(!CollectionUtils.isNotEmpty(userIds))
-		{
+		if (!CollectionUtils.isNotEmpty(userIds)) {
 			throw new SecurityException("查询用户id集合信息错误");
 		}
 		//开始推送相关人员
-		userIds.forEach(e->{
-			Message message=new Message();
+		userIds.forEach(e -> {
+			Message message = new Message();
 			message.setUserId(AuthUtil.getUserId());
 			message.setUserName(AuthUtil.getUserName());
 			message.setToUserId(e);
-			message.setMessageType(MessageType);
-			message.setMessageBody(Message);
+			message.setMessageType(messageType);
+			message.setMessageBody(msg);
 			message.setIsRead(0);
 			message.setTenantId(AuthUtil.getTenantId());
 			message.setCreateUser(AuthUtil.getUserId());
@@ -119,14 +113,12 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 		});
 
 
-
 	}
 
 	@Override
-	public UnReadDTO getUserMessage(Long userId)
-	{
+	public UnReadDTO getUserMessage(Long userId) {
 		//消息列表
-	/*	LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		/*LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
 		messageLambdaQueryWrapper
 			.eq(Message::getToUserId,userId)
 			.eq(Message::getIsDeleted,0)
@@ -135,39 +127,35 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 		IPage<Message> page = baseMapper.selectPage(iPage, messageLambdaQueryWrapper);
 		List<Message> records = page.getRecords();*/
 		//是否未读
-		LambdaQueryWrapper<Message> readMessageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		LambdaQueryWrapper<Message> readMessageLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		readMessageLambdaQueryWrapper
-			.eq(Message::getToUserId,userId)
-			.eq(Message::getIsDeleted,0)
-			.eq(Message::getIsRead,0);
+			.eq(Message::getToUserId, userId)
+			.eq(Message::getIsDeleted, 0)
+			.eq(Message::getIsRead, 0);
 		Integer count = baseMapper.selectCount(readMessageLambdaQueryWrapper);
-		Map map=new HashMap();
-		UnReadDTO dto=new UnReadDTO();
-		dto.setUnRead(count!=null&&count>0?true:false);
-		dto.setUnReadNum(count!=null&&count>0?count:0);
+		//Map map = new HashMap();
+		UnReadDTO dto = new UnReadDTO();
+		dto.setUnRead(count != null && count > 0);
+		dto.setUnReadNum(count != null && count > 0 ? count : 0);
 
 		/*map.put("list",records);*/
-     return dto;
+		return dto;
 	}
 
 	@Override
-	@Transactional
-	public void batchSave(Message message)
-	{
+	@Transactional(rollbackFor = Exception.class)
+	public void batchSave(Message message) {
 		List<Long> userList = message.getUserList();
-		if(CollectionUtils.isEmpty(userList))
-		{
+		if (CollectionUtils.isEmpty(userList)) {
 			throw new SecurityException("批量发送消息失败:获取到接收人信息");
 		}
-		userList.forEach(e->{
+		userList.forEach(e -> {
 
-			Message model=new Message();
-			if(model.getUserId()==null)
-			{
+			Message model = new Message();
+			if (model.getUserId() == null) {
 				model.setUserId(AuthUtil.getUserId());
 			}
-			if(StringUtils.isBlank(model.getUserName()))
-			{
+			if (StringUtils.isBlank(model.getUserName())) {
 				model.setUserName(AuthUtil.getUserName());
 			}
 			model.setTenantId(AuthUtil.getTenantId());
@@ -180,5 +168,15 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 		});
 	}
 
+	@Override
+	public void clean(Message message) {
+		List<Long> userIdList = message.getUserList();
+		userIdList.remove(message.getToUserId());
+		baseMapper.delete(new LambdaQueryWrapper<Message>()
+			.eq(Message::getParameter, message.getParameter())
+			.in(Message::getToUserId, userIdList)
+			.eq(Message::getOrigin, 1)
+		);
+	}
 
 }

+ 0 - 15
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -667,21 +667,6 @@ public class OrderController extends BladeController {
 	}
 
 	/**
-	 * 更换审批人
-	 */
-	@GetMapping("/changeAuditUser")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "Feign-更换审批人", notes = "传入财务id")
-	public R changeAuditUser(@ApiParam(value = "审批id", required = true) @RequestParam Long auditId,
-							 @ApiParam(value = "更改的审批人id", required = true) @RequestParam String auditUserId) {
-		if (auditId == null || StringUtil.isBlank(auditUserId)) {
-			throw new SecurityException("参数异常,更改审批人失败");
-		}
-		orderService.changeAuditUser(auditId, auditUserId);
-		return R.success("操作成功");
-	}
-
-	/**
 	 * 库存账查询锁定库存订单信息
 	 */
 	@GetMapping("/ListMessage")

+ 0 - 15
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/dealer/DealerOrderController.java

@@ -376,21 +376,6 @@ public class DealerOrderController extends BladeController {
 	}
 
 	/**
-	 * 更换审批人
-	 */
-	@GetMapping("/changeAuditUser")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "Feign-更换审批人", notes = "传入财务id")
-	public R changeAuditUser(@ApiParam(value = "审批id", required = true) @RequestParam Long auditId,
-							 @ApiParam(value = "更改的审批人id", required = true) @RequestParam String auditUserId) {
-		if (auditId == null || StringUtil.isBlank(auditUserId)) {
-			throw new SecurityException("参数异常,更改审批人失败");
-		}
-		orderService.changeAuditUser(auditId, auditUserId);
-		return R.success("操作成功");
-	}
-
-	/**
 	 * 库存账查询锁定库存订单信息
 	 */
 	@GetMapping("/ListMessage")

+ 0 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -112,8 +112,6 @@ public interface IOrderService extends IService<Order> {
 	 */
 	void repealCancel(Order order);
 
-	void changeAuditUser(Long auditId, String auditUserId);
-
 	/**
 	 * 查询锁定库存订单
 	 *

+ 0 - 9
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1081,15 +1081,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
-	public void changeAuditUser(Long auditId, String auditUserId) {
-		AuditProecess process = new AuditProecess();
-		process.setId(auditId);
-		process.setAuditUserId(auditUserId);
-		process.setTenantId(AuthUtil.getTenantId());
-		iCheckClient.changeAuditUser(process);
-	}
-
-	@Override
 	public IPage<OrderVO> orderInventory(IPage<OrderVO> page, String tenantId, String tradeType, String billType, Long itemId, Long corpId) {
 		return page.setRecords(baseMapper.orderInventory(page, tenantId, tradeType, billType, itemId, corpId));
 	}

+ 41 - 10
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -16,7 +16,6 @@
  */
 package org.springblade.system.user.controller;
 
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -40,6 +39,7 @@ import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.entity.Tenant;
 import org.springblade.system.feign.ITenantClient;
 import org.springblade.system.user.entity.User;
@@ -57,6 +57,7 @@ import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
 
@@ -96,23 +97,54 @@ public class UserController {
 		User detail = userService.getById(user.getUserId());
 		UserVO userVO = UserWrapper.build().entityVO(detail);
 		Tenant tenant = tenantClient.tenantMessage(userVO.getTenantId());
-		if (tenant != null){
+		if (tenant != null) {
 			userVO.setBillType(tenant.getBillType());
 		}
 		return R.data(userVO);
 	}
 
 	@GetMapping("/userList")
-	public R  userList(UserVO userVO)
-	{
-		LambdaQueryWrapper<User> lambdaQueryWrapper=new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.like(StringUtils.isNotBlank(userVO.getRealName()),User::getRealName,userVO.getRealName())
-			.eq(User::getTenantId,AuthUtil.getTenantId())
-			.eq(User::getIsDeleted,0);
-		return  R.data(userService.list(lambdaQueryWrapper));
+	public R userList(UserVO userVO) {
+		LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.like(StringUtils.isNotBlank(userVO.getRealName()), User::getRealName, userVO.getRealName())
+			.eq(User::getTenantId, AuthUtil.getTenantId())
+			.eq(User::getIsDeleted, 0);
+		return R.data(userService.list(lambdaQueryWrapper));
 	}
 
+	@GetMapping("/audit-user-list")
+	public R auditUserList(UserVO userVO) {
+		if (StringUtil.isBlank(userVO.getRoleId()) && StringUtil.isBlank(userVO.getDeptId())) {
+			LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+			wrapper.eq(User::getTenantId, AuthUtil.getTenantId())
+				.eq(User::getIsDeleted, 0);
+			return R.data(userService.list(wrapper));
+		}
 
+		List<User> list = new ArrayList<>();
+		if (StringUtil.isNotBlank(userVO.getRoleId())) {
+			String[] roleArray = userVO.getRoleId().split(",");
+			for (String roleId : roleArray) {
+				LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+				wrapper.like(User::getRoleId, roleId)
+					.eq(User::getTenantId, AuthUtil.getTenantId())
+					.eq(User::getIsDeleted, 0);
+				list.addAll(userService.list(wrapper));
+			}
+		}
+		if (StringUtil.isNotBlank(userVO.getDeptId())) {
+			String[] deptArray = userVO.getDeptId().split(",");
+			for (String deptId : deptArray) {
+				LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+				wrapper.like(User::getDeptId, deptId)
+					.eq(User::getTenantId, AuthUtil.getTenantId())
+					.eq(User::getIsDeleted, 0);
+				list.addAll(userService.list(wrapper));
+			}
+		}
+		list = list.stream().distinct().collect(Collectors.toList());
+		return R.data(list);
+	}
 
 	/**
 	 * 用户列表
@@ -294,7 +326,6 @@ public class UserController {
 	}
 
 
-
 	/**
 	 * 配置用户平台信息
 	 */