From 4790119bedab62ce14d25e89b7ec28668383d027 Mon Sep 17 00:00:00 2001
From: gong <328255720@qq.com>
Date: Mon, 17 Jun 2024 16:22:31 +0800
Subject: [PATCH] 加个异步处理项目和设备的状态

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 92 insertions(+), 9 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
index 6349b65..6daf72e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
@@ -6,6 +6,7 @@
 import cn.gistack.sm.sg.VO.SgProgressReportVO;
 import cn.gistack.sm.sg.mapper.*;
 import cn.gistack.sm.sg.service.SgProgressReportService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
@@ -21,6 +22,8 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -51,6 +54,11 @@
 
 	@Autowired
 	private SgGxStepMapper sgGxStepMapper;
+
+	@Autowired
+	private SgProjectInfoMapper sgProjectInfoMapper;
+
+	ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
 	@Override
 	public IPage<SgProgressReportVO> queryPageList(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) {
 		List<SgProgressReportVO> list = sgProgressReportMapper.queryPageList(page,searchDTO);
@@ -62,14 +70,14 @@
 	public void add(SgProgressReportDO sgProgressReportDO) {
 		Long gxDeviceId = sgProgressReportDO.getGxDeviceId();
 		Long gxStepId = sgProgressReportDO.getGxStepId();
-		List<SgGxStepDO> list= sgGxStepMapper.selectByGxInfoId(gxDeviceId);
+		List<SgGxStepDO> list = sgGxStepMapper.selectByGxInfoId(gxDeviceId);
 		SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(gxDeviceId);
 		for (SgGxStepDO gxStepDO : list) {
-			if (Integer.parseInt(sgGxStepDO.getGxStepNum()) - Integer.parseInt(gxStepDO.getGxStepNum())==1 ){
+			if (Integer.parseInt(sgGxStepDO.getGxStepNum()) - Integer.parseInt(gxStepDO.getGxStepNum()) == 1) {
 				LambdaQueryChainWrapper<SgProgressReportDO> wrapper = new LambdaQueryChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getGxStepId, gxStepDO.getId());
 				SgProgressReportDO one = sgProgressReportMapper.selectOne(wrapper);
-				if (one!=null && one.getStatus()!=3){
-					throw new ServiceException("请先完成"+gxStepDO.getGxStepName()+"的审批!");
+				if (one != null && one.getStatus() != 3) {
+					throw new ServiceException("请先完成" + gxStepDO.getGxStepName() + "的审批!");
 				}
 			}
 		}
@@ -77,21 +85,33 @@
 		sgProgressReportDO.setStatus(0);
 		sgProgressReportDO.setReportUser(userId);
 		sgProgressReportMapper.insert(sgProgressReportDO);
-		String deviceType = sgDeviceMapper.selectById(gxDeviceId).getDeviceType();
+		SgDeviceDO sgDeviceDO = sgDeviceMapper.selectById(gxDeviceId);
+		String deviceType = sgDeviceDO.getDeviceType();
 		List<SgGxConfigDO> sgGxConfigDOS = new LambdaQueryChainWrapper<>(sgGxConfigMapper)
-			.eq(SgGxConfigDO::getGxDeviceType,deviceType).eq(SgGxConfigDO::getGxStepId,gxStepId).list();
+			.eq(SgGxConfigDO::getGxDeviceType, deviceType).eq(SgGxConfigDO::getGxStepId, gxStepId).list();
 		List<String> roIds = sgGxConfigDOS.stream().map(SgGxConfigDO::getRoleId).collect(Collectors.toList());
 		List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).in(SgProjectPersonConfigDO::getRoldId, roIds).list();
 		Map<Long, Long> userMap = personConfigDOS.stream().collect(Collectors.toMap(SgProjectPersonConfigDO::getRoldId, SgProjectPersonConfigDO::getUserId));
 		Date now = DateUtil.now();
-		sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgProgressReportDO.getReportUser()).approvalContent("提交审批").approvalStatus(0).approvalOrder(0).approvalTime(now).build()) ;
+		sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgProgressReportDO.getReportUser()).approvalContent("提交审批").approvalStatus(0).approvalOrder(0).approvalTime(now).build());
 		for (SgGxConfigDO sgGxConfigDO : sgGxConfigDOS) {
 			sgGxConfigDO.setUser(userMap.get(Long.parseLong(sgGxConfigDO.getRoleId())));
 			sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgGxConfigDO.getUser()).approvalStatus(0).approvalOrder(sgGxConfigDO.getSgOrder()).build());
-			if (sgGxConfigDO.getSgOrder()==1){
+			if (sgGxConfigDO.getSgOrder() == 1) {
 				sgProgressReportDO.setAuditPerson(String.valueOf(sgGxConfigDO.getUser()));
 				sgProgressReportMapper.updateById(sgProgressReportDO);
 			}
+		}
+
+		//加个项目及设备的状态判断 方便统计计算
+		if (sgDeviceDO != null && sgDeviceDO.getStatus() == 0) {
+			sgDeviceDO.setStatus(1);
+			sgDeviceMapper.updateById(sgDeviceDO);
+		}
+		SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(sgProgressReportDO.getProframId());
+		if (sgProjectInfoDO != null && sgProjectInfoDO.getStatus() == 0) {
+			sgDeviceDO.setStatus(1);
+			sgProjectInfoMapper.updateById(sgProjectInfoDO);
 		}
 	}
 
@@ -121,7 +141,20 @@
 		if (approvalDTO.getStatus()==1){
 			userUpdate.set(SgReportUserDO::getApprovalStatus,1).update();
 			if (sgReportUserDO.getId()==list.get(0).getId()){
-				updateChainWrapper.set(SgProgressReportDO::getStatus,3).set(SgProgressReportDO::getAuditPerson,null).update();
+				updateChainWrapper.set(SgProgressReportDO::getStatus,2).set(SgProgressReportDO::getAuditPerson,null).update();
+
+
+				//工序审核完成后 进行项目和设备状态的判断
+
+				cachedThreadPool.execute(new Runnable(){
+					@Override
+					public  void  run(){
+						setProgramAndDeviceStatus();
+					}
+				});
+
+
+
 			}else {
 				SgReportUserDO nextUser = list.stream().filter(s -> s.getApprovalOrder()==sgReportUserDO.getApprovalOrder()+1).findFirst().get();
 				updateChainWrapper.set(SgProgressReportDO::getStatus,1).set(SgProgressReportDO::getAuditPerson,nextUser.getUserId()).update();
@@ -153,5 +186,55 @@
 			}
 			updateChainWrapper.update();
 		}
+
+
+	}
+
+
+	public void  setProgramAndDeviceStatus(){
+		//查询所有的项目
+		List<SgProjectInfoDO> sgProjectInfoDOS = sgProjectInfoMapper.selectList(null);
+
+		for (SgProjectInfoDO project: sgProjectInfoDOS){
+			QueryWrapper<SgDeviceDO> queryWrapper = new QueryWrapper<>();
+			queryWrapper.eq("program_id",project.getId());
+			//所有设备
+			List<SgDeviceDO> sgDeviceDOS = sgDeviceMapper.selectList(queryWrapper);
+			//项目下完成的设备数
+			int deviceFinishCount=0;
+			for (SgDeviceDO sgDeviceDO: sgDeviceDOS){
+
+				//设备的工序
+				List<SgDeviceGxStepDO> sgDeviceGxStepDOs = sgGxStepMapper.getDeviceGXList(sgDeviceDO.getId());
+
+				if(sgDeviceGxStepDOs!=null){
+					int countStatus=0;
+					for (SgDeviceGxStepDO sgDeviceGxStepDO: sgDeviceGxStepDOs){
+						countStatus=+sgDeviceGxStepDO.getStatus();
+
+					}
+					int size = sgDeviceGxStepDOs.size();
+					if((size*2)/countStatus==1){
+						//如果设备下全部工序审核完成
+						sgDeviceDO.setStatus(2);
+						sgDeviceMapper.updateById(sgDeviceDO);
+						deviceFinishCount++;
+					}
+
+
+				}
+			}
+
+			if(deviceFinishCount==sgDeviceDOS.size()){
+				//如果项目下的设备下全部完成
+				project.setStatus(2);
+				sgProjectInfoMapper.updateById(project);
+			}
+		}
+
+
 	}
 }
+
+
+

--
Gitblit v1.9.3