ioioio 3 rokov pred
rodič
commit
8d1b9a2aea

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

@@ -0,0 +1,33 @@
+package org.springblade.purchase.sales.feign;
+
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
+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 javax.validation.Valid;
+
+/**
+ * @author caifc
+ * @date 2021-10-21 22:28
+ */
+@FeignClient(
+	value = "blade-purchase-sales"
+)
+public interface IOrderCheckClient
+{
+	@PostMapping("/order/passCheck")
+	R passCheck(@RequestParam("id") Long id);
+
+	@PostMapping("/order/passCancel")
+	R passCancel(@RequestParam("id") Long id);
+
+
+	@PostMapping("order/submit")
+	R submit(@Valid @RequestBody Order order);
+}

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

@@ -222,6 +222,15 @@ public class AuditProecessController extends BladeController {
 		return R.data(auditProecess);
 	}
 
+	@PostMapping("orderCheckProcess")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "操作-财务审批流记录", notes = "传入auditProecessDTO")
+	public  R orderCheckProcess(@RequestBody AuditProecess auditProecess)
+	{
+		auditProecessService.orderCheckProcess(auditProecess);
+		return R.data(auditProecess);
+	}
+
 	@PostMapping("batchOperation")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "批量审批", notes = "传入auditProecessDTOList")

+ 2 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java

@@ -47,6 +47,8 @@ public interface IAuditProecessService extends IService<AuditProecess> {
 
 	void serverProcess(AuditProecess auditProecess);
 
+	void orderCheckProcess(AuditProecess auditProecess);
+
 	void batchOperation(List<AuditProecess> processLis,Integer operate,String auditMsg);
 
 	void cancelCheck(Long srcBillId);

+ 180 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -39,6 +39,7 @@ import org.springblade.project.entity.ServiceProject;
 import org.springblade.project.feign.IProjectClient;
 import org.springblade.project.feign.IProjectItemClient;
 import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.feign.IOrderCheckClient;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -73,6 +74,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
     private IProjectClient iProjectClient;
 
+    private IOrderCheckClient orderCheckClient;
+
 	@Override
 	public IPage<AuditProecessVO> selectAuditProecessPage(IPage<AuditProecessVO> page, AuditProecessVO auditProecess) {
 		return page.setRecords(baseMapper.selectAuditProecessPage(page, auditProecess));
@@ -527,6 +530,183 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@Override
 	@Transactional
 	@GlobalTransactional
+	public void orderCheckProcess(AuditProecess auditProecess)
+	{
+		//查看最新操作记录,防止重复提交
+		AuditProecess auditProecess1= baseMapper.selectById(auditProecess.getId());
+		if(auditProecess1==null)
+		{
+			throw new SecurityException("未查到此审批记录,禁止操作");
+		}
+		if(auditProecess1.getAuditStatus().equals("A")||auditProecess1.getAuditStatus().equals("B"))
+		{
+			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
+		}
+
+		if(auditProecess.getAuditStatus()==null || !auditProecess.getAuditStatus().equals("S"))
+		{
+			throw new SecurityException("审批状态非待审,禁止操作");
+		}
+		//信息
+		Message sendMessage=new Message();
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(auditProecess.getSendUserId());
+		sendMessage.setToUserName(auditProecess.getSendName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl(auditProecess.getUrl());
+		sendMessage.setPageLabel(auditProecess.getPageLabel());
+		sendMessage.setPageStatus(auditProecess.getPageStatus());
+
+
+		//用户操作 1.通过  2.驳回
+		Integer operate = auditProecess.getOperate();
+		//查看当前审批是否为最后一级
+		String iffinalItem = auditProecess.getIffinalItem();
+		//审批人
+		auditProecess.setAuditUserId(String.valueOf(AuthUtil.getUserId()));
+		//审批时间
+		auditProecess.setAuditOpTime(new Date());
+		//不是最后一级
+		if(iffinalItem.equals("F"))
+		{
+
+
+			//通过
+			if(operate==1)
+			{
+				//如果是第一级, 则修改状态为审批中
+				if(auditProecess.getLevelId()==1)
+				{
+					Order order=new Order();
+					order.setId(auditProecess.getSrcBillId());
+					order.setStatus(2);
+					R submit = orderCheckClient.submit(order);
+					if(!submit.isSuccess())
+					{
+						throw new SecurityException("审批开始修改审核状态失败");
+					}
+				}
+
+
+				auditProecess.setAuditStatus("A");
+				//查询下一级,开启待审
+				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper=new LambdaQueryWrapper<>();
+				auditProecessLambdaQueryWrapper
+					.eq(AuditProecess::getBatchNo,auditProecess.getBatchNo())
+					.eq(AuditProecess::getSrcBillId,auditProecess.getSrcBillId())
+					.eq(AuditProecess::getIsDelete,0)
+					.eq(AuditProecess::getActId,auditProecess.getActId())
+					.eq(AuditProecess::getBillId,auditProecess.getBillId())
+					.eq(AuditProecess::getBillNo,auditProecess.getBillNo())
+					.eq(AuditProecess::getTenantId,AuthUtil.getTenantId())
+					.eq(AuditProecess::getLevelId,auditProecess.getLevelId()+1);
+				Integer count = baseMapper.selectCount(auditProecessLambdaQueryWrapper);
+				if(count!=null && count>1)
+				{
+					throw new SecurityException("审核失败,获取下一级信息失败");
+				}
+				AuditProecess proecess = baseMapper.selectOne(auditProecessLambdaQueryWrapper);
+				if(proecess==null)
+				{
+					throw new SecurityException("审批通过=>获取下一级信息失败");
+				}
+				proecess.setAuditStatus("S");
+				baseMapper.updateById(proecess);
+				Message message=new Message();
+				message.setUserName(AuthUtil.getUserName());
+				message.setUserId(AuthUtil.getUserId());
+				//消息通知下一级
+				message.setToUserId(Long.valueOf(proecess.getAuditUserId()));
+				message.setMessageType(1);
+				message.setTenantId(AuthUtil.getTenantId());
+				message.setMessageBody("你有新的审批待操作,请及时处理");
+				message.setCreateUser(AuthUtil.getUserId());
+				message.setUrl("/approveData/index");
+				message.setCreateTime(new Date());
+
+				R save = messageClient.save(message);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if(operate==2)
+			{
+				auditProecess.setAuditStatus("B");
+				//todo 调用feign取消
+				R r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+
+				sendMessage.setMessageBody("您的请核未通过,请查看原因");
+				R save = messageClient.save(sendMessage);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
+			}
+
+		}
+		//是最后一级
+		else if(iffinalItem.equals("T"))
+		{
+			//通过
+			if(operate==1)
+			{
+				//todo 调用feign直接通过
+				auditProecess.setAuditStatus("A");
+				R r = orderCheckClient.passCheck(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+
+
+				sendMessage.setMessageBody("您的请核已通过,请继续操作");
+				R save = messageClient.save(sendMessage);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if(operate==2)
+			{
+				//todo 调用feign取消
+				auditProecess.setAuditStatus("B");
+				R r = orderCheckClient.passCancel(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+				sendMessage.setMessageBody("您的请核未通过,请查看原因");
+				R save = messageClient.save(sendMessage);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		}
+		else
+		{
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
+	@Override
+	@Transactional
+	@GlobalTransactional
 	public void batchOperation(List<AuditProecess> processLis, Integer operate,String auditMsg)
 	{
 		processLis.forEach(e->{

+ 6 - 0
blade-service/blade-purchase-sales/pom.xml

@@ -77,6 +77,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-check-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

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

@@ -28,6 +28,10 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.entity.AuditPathsActs;
+import org.springblade.check.entity.AuditPathsLevels;
+import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -54,6 +58,7 @@ import org.springblade.purchase.sales.vo.OrderVO;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -81,6 +86,7 @@ public class OrderController extends BladeController {
 	private final IFeesDescClient feesDescClient;
 	private final IFinanceClient iFinanceClient;
 
+
 	/**
 	 * 详情
 	 */
@@ -623,4 +629,37 @@ public class OrderController extends BladeController {
 		return R.data(orderStatisticAnalysisVOIPage);
 	}
 
+	@PostMapping("checkOrder")
+	public R checkOrder(@ApiParam(value = "主键集合", required = true) @RequestParam Long id)
+	{
+
+		orderService.checkOrder(id);
+		return R.data("操作成功");
+	}
+
+	/**
+	 * 审核通过
+	 * */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核通过", notes = "传入财务id")
+	public R passCheck (@ApiParam(value = "财务主表id", required = true) @RequestParam Long id)
+	{
+		orderService.passCheck(id);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 审核不通过
+	 * */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R passCancel (@ApiParam(value = "财务主表id", required = true) @RequestParam Long id)
+	{
+		orderService.passCancel(id);
+		return R.success("操作成功");
+	}
+
+
 }

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

@@ -90,4 +90,9 @@ public interface IOrderService extends IService<Order> {
 
 	IPage<OrderStatisticAnalysisVO> listOrderStatisticAnalysis(Page<OrderStatisticAnalysisVO> page, @Param("tenantId")String tenantId, @Param("orderNo")String orderNo,@Param("startTime")String startTime,@Param("endTime")String endTime);
 
+	void checkOrder(Long id);
+
+	void passCheck(Long id);
+
+	void passCancel(Long id);
 }

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

@@ -28,6 +28,10 @@ import com.trade.purchase.order.enums.OrderTypeEnum;
 import com.trade.purchase.order.vo.OrderDTO;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.entity.AuditPathsActs;
+import org.springblade.check.entity.AuditPathsLevels;
+import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.entity.GoodsDesc;
@@ -38,6 +42,7 @@ 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.finance.vojo.Settlement;
 import org.springblade.purchase.sales.entity.*;
 import org.springblade.purchase.sales.vo.OrderItemBillNoVO;
 import org.springblade.purchase.sales.vo.OrderStatisticAnalysisVO;
@@ -77,6 +82,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	private IUserClient userClient;//获取用户信息
 	private ICorpsDescClient corpsDescClient;//获取客户信息
 	private OrderMapper orderMapper;
+	private final ICheckClient iCheckClient;
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		List<OrderVO> orderVOList = baseMapper.selectOrderPage(page, order);
@@ -545,4 +551,83 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return orderMapper.listOrderStatisticAnalysis(page,tenantId,orderNo,startTime,endTime);
 	}
 
+	@Override
+	@Transactional
+	public void checkOrder(Long id)
+	{
+		Order order = baseMapper.selectById(id);
+		if(order==null)
+		{
+			throw new SecurityException("审批失败,未查到单据");
+		}
+		//判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		AuditPathsActs pathsActs = iCheckClient.getActsByActId(3, "status");
+		//没开启审批流直接走 通过流程
+		if(pathsActs==null || pathsActs.getIsEnable()==2)
+		{
+			throw new SecurityException("当前租户未查询到审批流配置");
+		}
+		else
+		{
+			order.setStatus(1);
+			baseMapper.updateById(order);
+
+			//获取审批级次
+			List<AuditPathsLevels> auditPathsLevels = iCheckClient.listLevelsByActId(3, "status");
+			AuditProecessDTO auditProecessDTO=new AuditProecessDTO();
+			//追加跳转路由url
+		/*	auditProecessDTO.setUrl(settlement.getUrl());
+			auditProecessDTO.setPageStatus(settlement.getPageStatus());
+			auditProecessDTO.setPageLabel(settlement.getPageLabel());*/
+			//增加审批类型
+			auditProecessDTO.setProcessType("付费审批");
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(order.getId());
+			auditProecessDTO.setBillId(order.getId());
+			auditProecessDTO.setBillNo(order.getOrderNo());
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());
+			auditProecessDTO.setSendName(AuthUtil.getUserName());
+			auditProecessDTO.setSendTime(new Date());
+			R financeProcess = iCheckClient.createFinanceProcess(auditProecessDTO);
+			if(!financeProcess.isSuccess())
+			{
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+
+		}
+	}
+
+	@Override
+	public void passCheck(Long id)
+	{
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId,id)
+			.eq(Order::getTenantId,AuthUtil.getTenantId());
+		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
+		if(order == null)
+		{
+			throw new SecurityException("审批通过失败");
+		}
+		order.setStatus(3);
+		baseMapper.updateById(order);
+	}
+
+	@Override
+	public void passCancel(Long id)
+	{
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId,id)
+			.eq(Order::getTenantId,AuthUtil.getTenantId());
+		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
+		if(order == null)
+		{
+			throw new SecurityException("审批驳回失败");
+		}
+		order.setStatus(0);
+		baseMapper.updateById(order);
+	}
+
 }