Browse Source

达沃特修改

Signed-off-by: sunhz <mpcoo@foxmail.com>
sunhz 3 years ago
parent
commit
0f6e3bf469

+ 22 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -875,4 +875,26 @@ public class Order implements Serializable {
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date receiveTime;
 
+	/**
+	 * 是否特批
+	 */
+	@ApiModelProperty(value = "是否特批")
+	private Integer specialCheck;
+	/**
+	 * 特批状态
+	 */
+	@ApiModelProperty(value = "特批状态")
+	private Integer specialCheckStatus;
+	/**
+	 * 特批提交人
+	 */
+	@ApiModelProperty(value = "特批提交人")
+	private String specialCheckUser;
+	/**
+	 * 特批提交时间
+	 */
+	@ApiModelProperty(value = "特批提交时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date specialCheckTime;
+
 }

+ 9 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderCheckClient.java

@@ -21,4 +21,13 @@ public interface IOrderCheckClient {
 
 	@PostMapping("order/underReview")
 	R underReview(@RequestParam("id") Long id);
+
+	@PostMapping("/order/passSpecialCheck")
+	R passSpecialCheck(@RequestParam("id") Long id);
+
+	@PostMapping("/order/passSpecialCancel")
+	R passSpecialCancel(@RequestParam("id") Long id);
+
+	@PostMapping("order/underSpecialReview")
+	R underSpecialReview(@RequestParam("id") Long id);
 }

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

@@ -219,7 +219,7 @@ public class AuditProecessController extends BladeController {
 			auditProecessService.operationFinanceProcess(auditProecess);
 		}
 		// 采购 或者 销售 订单请核
-		else if ("xsqh".equals(proecess.getCheckType()) || "cgqh".equals(proecess.getCheckType())) {
+		else if ("xsqh".equals(proecess.getCheckType()) || "cgqh".equals(proecess.getCheckType()) || "xstpqh".equals(proecess.getCheckType())) {
 			auditProecessService.orderCheckProcess(auditProecess);
 		}
 		// 通济学校 小学 初中 高中 后勤工资审核

+ 37 - 6
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -620,7 +620,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
 				if (auditProecess.getLevelId() == 1) {
-					R submit = orderCheckClient.underReview(auditProecess.getSrcBillId());
+					R submit;
+					if ("销售特批审批".equals(proecessTemp.getProcessType())) {
+						submit = orderCheckClient.underSpecialReview(auditProecess.getSrcBillId());
+					} else {
+						submit = orderCheckClient.underReview(auditProecess.getSrcBillId());
+					}
 					if (!submit.isSuccess()) {
 						throw new SecurityException("审批开始修改审核状态失败");
 					}
@@ -684,6 +689,11 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 						"" + proecessTemp.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
+				} else if ("销售特批审批".equals(proecessTemp.getProcessType())) {
+					message.setMessageBody("您有销售特批审核,公司名:" + corpName + "," + "采购订单号:" +
+						"" + proecessTemp.getBillNo() + "," + "订单日期:" + orderDate + ",请审核。"
+						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+					);
 				}
 
 				message.setCreateUser(AuthUtil.getUserId());
@@ -697,7 +707,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				auditProecess.setAuditStatus("B");
 				//todo 调用feign取消
-				R r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				R r;
+				if ("销售特批审批".equals(proecessTemp.getProcessType())) {
+					r = orderCheckClient.passSpecialCancel(auditProecess.getSrcBillId());
+				} else {
+					r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				}
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
@@ -706,9 +721,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else 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()) {
 					throw new SecurityException("发送消息失败");
@@ -722,17 +738,24 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//todo 调用feign直接通过
 				auditProecess.setAuditStatus("A");
-				R r = orderCheckClient.passCheck(auditProecess.getSrcBillId());
+				R r;
+				if ("销售特批审批".equals(proecessTemp.getProcessType())) {
+					r = orderCheckClient.passSpecialCheck(auditProecess.getSrcBillId());
+				} else {
+					r = orderCheckClient.passCheck(auditProecess.getSrcBillId());
+				}
 				if (!r.isSuccess()) {
 					throw new SecurityException(r.getMsg());
 				}
 
-
 				if ("销售审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的销售请核已通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				} else 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()) {
 					throw new SecurityException("发送消息失败");
@@ -742,7 +765,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				//todo 调用feign取消
 				auditProecess.setAuditStatus("B");
-				R r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				R r;
+				if ("销售特批审批".equals(proecessTemp.getProcessType())) {
+					r = orderCheckClient.passSpecialCancel(auditProecess.getSrcBillId());
+				} else {
+					r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				}
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改财务数据失败");
 				}
@@ -750,7 +778,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					sendMessage.setMessageBody("您的销售请核未通过" + ",销售订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else 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()) {
 					throw new SecurityException("发送消息失败");

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

@@ -652,6 +652,36 @@ public class OrderController extends BladeController {
 		orderService.passCancel(id);
 		return R.success("操作成功");
 	}
+
+	/**
+	 * 特批审核通过
+	 */
+	@PostMapping("/passSpecialCheck")
+	public R passSpecialCheck(@RequestParam Long id) {
+		orderService.passSpecialCheck(id);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 特批审核中
+	 */
+	@PostMapping("/underSpecialReview")
+	public R underSpecialReview(@RequestParam Long id) {
+		orderService.underSpecialReview(id);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 特批审核不通过
+	 */
+	@PostMapping("/passSpecialCancel")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R passSpecialCancel(@RequestParam Long id) {
+		orderService.passSpecialCancel(id);
+		return R.success("操作成功");
+	}
+
 	/**
 	 * 撤销审核
 	 */

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

@@ -104,6 +104,12 @@ public interface IOrderService extends IService<Order> {
 
 	void passCancel(Long id);
 
+	void passSpecialCheck(Long id);
+
+	void underSpecialReview(Long id);
+
+	void passSpecialCancel(Long id);
+
 	/**
 	 * 撤销审核
 	 * @param order

+ 128 - 67
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -18,6 +18,7 @@ package org.springblade.purchase.sales.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -646,7 +647,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
 		Integer checkFlag = order.getCheckFlag();
-		AuditPathsActs pathsActs = null;
+		AuditPathsActs pathsActs;
 		if (checkFlag == null) {
 			throw new SecurityException("请核失败:未配置请核标识");
 		}
@@ -703,11 +704,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 			}
 		}
-		// 判断是采购审批 还是 销售审批
-		if (checkFlag == 2) {
-			pathsActs = iCheckClient.getActsByActId(3, "status");
-		} else if (checkFlag == 1) {
+		// 判断是采购审批 还是 销售审批  新增3特批审核
+		if (checkFlag == 1) {
 			pathsActs = iCheckClient.getActsByActId(4, "status");
+		} else if (checkFlag == 2) {
+			pathsActs = iCheckClient.getActsByActId(3, "status");
+		} else if (checkFlag == 3) {
+			pathsActs = iCheckClient.getActsByActId(13, "status");
 		} else {
 			throw new SecurityException("请核失败:请核标识设置不正确");
 		}
@@ -717,16 +720,24 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
 			throw new SecurityException("当前租户未查询到审批流配置");
 		} else {
-			salesOrder.setStatus(1);
-			salesOrder.setCheckDate(new Date());
+			if (checkFlag == 3) {
+				salesOrder.setSpecialCheckStatus(1);
+				salesOrder.setSpecialCheckUser(AuthUtil.getUserName());
+				salesOrder.setSpecialCheckTime(new Date());
+			} else {
+				salesOrder.setStatus(1);
+				salesOrder.setCheckDate(new Date());
+			}
 			baseMapper.updateById(salesOrder);
 
 			//获取审批级次
 			List<AuditPathsLevels> auditPathsLevels;
-			if (checkFlag == 2) {
+			if (checkFlag == 1) {
+				auditPathsLevels = iCheckClient.listLevelsByActId(4, "status");
+			} else if (checkFlag == 2){
 				auditPathsLevels = iCheckClient.listLevelsByActId(3, "status");
 			} else {
-				auditPathsLevels = iCheckClient.listLevelsByActId(4, "status");
+				auditPathsLevels = iCheckClient.listLevelsByActId(13, "status");
 			}
 			if (CollectionUtils.isEmpty(auditPathsLevels)) {
 				throw new SecurityException("开启审批失败:未查询到审批信息");
@@ -749,10 +760,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			auditProecessDTO.setPageLabel(order.getPageLabel());
 			//增加审批类型
 
-			if (checkFlag == 2) {
+			if (checkFlag == 1) {
+				auditProecessDTO.setProcessType("采购审批");
+			} else if (checkFlag == 2) {
 				auditProecessDTO.setProcessType("销售审批");
 			} else {
-				auditProecessDTO.setProcessType("采购审批");
+				auditProecessDTO.setProcessType("销售特批审批");
 			}
 			LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			orderItemsLambdaQueryWrapper
@@ -1012,6 +1025,41 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
+	public void passSpecialCheck(Long id) {
+		Order order = baseMapper.selectById(id);
+		if (order == null) {
+			throw new SecurityException("审批失败");
+		}
+		order.setSpecialCheck(1);
+		order.setSpecialCheckStatus(3);
+		baseMapper.updateById(order);
+	}
+
+	@Override
+	public void underSpecialReview(Long id) {
+		Order order = baseMapper.selectById(id);
+		if (order == null) {
+			throw new SecurityException("审批失败");
+		}
+		order.setSpecialCheckStatus(2);
+		baseMapper.updateById(order);
+	}
+
+	@Override
+	public void passSpecialCancel(Long id) {
+		Order order = baseMapper.selectById(id);
+		if (order == null) {
+			throw new SecurityException("审批失败");
+		}
+		baseMapper.update(null, new LambdaUpdateWrapper<Order>()
+			.set(Order::getSpecialCheckStatus, 0)
+			.set(Order::getSpecialCheckUser, null)
+			.set(Order::getSpecialCheckTime, null)
+			.eq(Order::getId, id)
+		);
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class)
 	public void repealCancel(Order orderMessage) {
@@ -1023,68 +1071,81 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (order == null) {
 			throw new SecurityException("未找到订单");
 		}
-		if (order.getStatus() == 0) {
-			throw new SecurityException("订单未开启审批");
-		}
-		if (order.getStatus() != 1) {
-			throw new SecurityException("订单已经开启审批不能撤销");
-		}
-		// 销售审核撤销释放库存
-		if ("XS".equals(order.getBillType()) && "681169".equals(SecureUtil.getTenantId())) {
-			// ===========================Start 审核撤销释放库存=============================
-			// 获取此销售订单下,所有明细的库存
-			LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
-			orderItemsLambdaQueryWrapper
-				.eq(OrderItems::getGoodType, 0)
-				.eq(OrderItems::getPid, order.getId())
-				.eq(OrderItems::getIsDeleted, 0);
-			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
-			if (CollectionUtils.isNotEmpty(orderItems)) {
-				orderItems.forEach(e -> {
-					StockGoods stockGoods = new StockGoods();
-					stockGoods.setCorpId(e.getCorpId());
-					stockGoods.setGoodsId(e.getItemId());
-					stockGoods.setTenantId(SecureUtil.getTenantId());
-					List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
-					if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
-						throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
-					}
-					// 开始锁定库存,减少可用
-					StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
-					if (oneStock == null) {
-						throw new SecurityException("撤销失败:未查询到库存信息");
-					}
-					// 原单据的订货数量
-					BigDecimal orderQuantity = e.getOrderQuantity();
-					// 可用库存
-					BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
-					// 锁定库存
-					BigDecimal lockingQuantity = oneStock.getLockingQuantity();
 
-					// 判断比较大小
-					if (orderQuantity.compareTo(lockingQuantity) > 0) {
-						throw new SecurityException("撤销失败:原单据的订货数量大于锁定库存,无法释放 库存");
-					}
-					// 增加可用库存
-					oneStock.setSurplusRouteQuantity(surplusRouteQuantity.add(orderQuantity));
-					// 减少锁定库存
-					oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
-					// 更新库存
-					R r = stockGoodsClient.updateStock(oneStock);
-					if (!r.isSuccess()) {
-						throw new SecurityException("撤销失败: 更新库存失败");
-					}
-				});
+		if (orderMessage.getCheckFlag() != 3) {
+			if (order.getStatus() == 0) {
+				throw new SecurityException("订单未开启审批");
 			}
+			if (order.getStatus() != 1) {
+				throw new SecurityException("订单已经开启审批不能撤销");
+			}
+			// 销售审核撤销释放库存
+			if ("XS".equals(order.getBillType()) && "681169".equals(SecureUtil.getTenantId())) {
+				// ===========================Start 审核撤销释放库存=============================
+				// 获取此销售订单下,所有明细的库存
+				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				orderItemsLambdaQueryWrapper
+					.eq(OrderItems::getGoodType, 0)
+					.eq(OrderItems::getPid, order.getId())
+					.eq(OrderItems::getIsDeleted, 0);
+				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+				if (CollectionUtils.isNotEmpty(orderItems)) {
+					orderItems.forEach(e -> {
+						StockGoods stockGoods = new StockGoods();
+						stockGoods.setCorpId(e.getCorpId());
+						stockGoods.setGoodsId(e.getItemId());
+						stockGoods.setTenantId(SecureUtil.getTenantId());
+						List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
+						if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
+							throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
+						}
+						// 开始锁定库存,减少可用
+						StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						if (oneStock == null) {
+							throw new SecurityException("撤销失败:未查询到库存信息");
+						}
+						// 原单据的订货数量
+						BigDecimal orderQuantity = e.getOrderQuantity();
+						// 可用库存
+						BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
+						// 锁定库存
+						BigDecimal lockingQuantity = oneStock.getLockingQuantity();
+
+						// 判断比较大小
+						if (orderQuantity.compareTo(lockingQuantity) > 0) {
+							throw new SecurityException("撤销失败:原单据的订货数量大于锁定库存,无法释放 库存");
+						}
+						// 增加可用库存
+						oneStock.setSurplusRouteQuantity(surplusRouteQuantity.add(orderQuantity));
+						// 减少锁定库存
+						oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
+						// 更新库存
+						R r = stockGoodsClient.updateStock(oneStock);
+						if (!r.isSuccess()) {
+							throw new SecurityException("撤销失败: 更新库存失败");
+						}
+					});
+				}
+			}
+			order.setStatus(0);
+			baseMapper.updateById(order);
+		} else {
+			baseMapper.update(null, new LambdaUpdateWrapper<Order>()
+				.set(Order::getSpecialCheckStatus, 0)
+				.set(Order::getSpecialCheckUser, null)
+				.set(Order::getSpecialCheckTime, null)
+				.eq(Order::getId, orderMessage.getId())
+			);
 		}
-		order.setStatus(0);
-		baseMapper.updateById(order);
+
 		// 删除审批流数据
 		AuditProecessDTO proecessDTO = new AuditProecessDTO();
-		if (orderMessage.getCheckFlag() == 2) {
-			proecessDTO.setProcessType("销售审批");
-		} else if (orderMessage.getCheckFlag() == 1) {
+		if (orderMessage.getCheckFlag() == 1) {
 			proecessDTO.setProcessType("采购审批");
+		} else if (orderMessage.getCheckFlag() == 2) {
+			proecessDTO.setProcessType("销售审批");
+		} else {
+			proecessDTO.setProcessType("销售特批审批");
 		}
 		proecessDTO.setCheckType(orderMessage.getCheckType());
 		proecessDTO.setBillId(orderMessage.getId());

+ 44 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -33,11 +33,15 @@ import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.CorpsBank;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.Message;
 import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IMessageClient;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.deliver.goods.entity.DeliveryFees;
 import org.springblade.deliver.goods.feign.IDeliveryClient;
 import org.springblade.finance.dto.SettlementDTO;
@@ -60,6 +64,7 @@ import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.purchase.sales.feign.IOrderFeesClient;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
@@ -107,10 +112,14 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
 	private final IUserClient userClient;
 
+	private final ISysClient sysClient;
+
 	private final IOrderItemsClient orderItemsClient;
 
 	private final IOrderFeesClient orderFeesClient;
 
+	private final IMessageClient messageClient;
+
 	/**
 	 * 溢付款对外访问接口
 	 */
@@ -367,6 +376,41 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
 		}
 		model.setFinanceStatus("结算完成");
+
+		List<Long> orderIdList = itemsList.stream().filter(e -> "销售".equals(e.getItemType())).map(Items::getSrcParentId).distinct().collect(Collectors.toList());
+		if (CollectionUtil.isNotEmpty(orderIdList)) {
+			orderIdList.forEach(orderId -> {
+				Order order = orderDescClient.getById(orderId);
+				if (ObjectUtil.isNotEmpty(order)) {
+					if (order.getSettlmentAmount().compareTo(order.getDebitAmount()) >= 0) {
+						// 给角色为助理的人发送消息
+						R<String> roleId = sysClient.getRoleIds(AuthUtil.getTenantId(), "助理");
+						if (roleId.isSuccess() && roleId.getData() != null) {
+							R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(roleId.getData()));
+							if (userList.isSuccess() && userList.getData() != null) {
+								userList.getData().forEach(user -> {
+									// 推送消息提醒助理生成采购
+									Message message = new Message();
+									message.setUserName(AuthUtil.getUserName());
+									message.setUserId(AuthUtil.getUserId());
+									message.setToUserId(user.getId());
+									message.setMessageType(1);
+									message.setTenantId(AuthUtil.getTenantId());
+									message.setCreateUser(AuthUtil.getUserId());
+									message.setCreateTime(new Date());
+									message.setParameter(String.valueOf(order.getId()));
+									message.setPageStatus("this.$store.getters.domSaleStatus");
+									message.setUrl("/businessManagement/salesOrder/index");
+									message.setMessageBody("销售订单“" + order.getOrderNo() + "“已完成收费,请尽快生成采购。");
+									message.setPageLabel("销售订单(N)");
+									messageClient.save(message);
+								});
+							}
+						}
+					}
+				}
+			});
+		}
 		return model;
 		//验证结算总金额是否超限
 		/*if(settlementDTO.getBillType().equals("收费")||settlementDTO.getBillType().equals("付费"))