skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java
@@ -90,6 +90,6 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; private Integer status; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceGxStepDO.java
New file @@ -0,0 +1,51 @@ package cn.gistack.sm.sg.DO; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * <p> * 施工设备工序步骤表 * </p> * * @author shenyijian * @since 2024-06-13 15:46:18 */ @Data public class SgDeviceGxStepDO implements Serializable { private static final long serialVersionUID = 1L; /** * 工序编号 */ private String gxStepNum; /** * 工序设备id */ private String gxDeviceId; /** * 工序设备id */ private String gxDeviceName; /** * 工序步骤id */ private String gxId; /** * 工序基础信息id */ private Integer status; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxRoleDO.java
New file @@ -0,0 +1,48 @@ package cn.gistack.sm.sg.DO; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * <p> * 施工工序角色配置通用表 * </p> * * @author 龚丽龙 * @since 2024-06-13 15:46:18 */ @Getter @Setter @TableName("SG_GX_CONFIG") public class SgGxRoleDO implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Long id; /** * 工序类型 */ private String gxDeviceType; /** * 工序步骤名称 */ private String gxStepId; /** * 角色id */ private Long roleId; /** * 角色审核顺序 */ private Integer sgOrder; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java
@@ -162,4 +162,6 @@ * 水库名 */ private String skName; private Integer status; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgGxRoleVO.java
New file @@ -0,0 +1,46 @@ package cn.gistack.sm.sg.VO; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.List; /** * <p> * 施工工序角色配置通用表 * </p> * * @author 龚丽龙 * @since 2024-06-13 15:46:18 */ @Data public class SgGxRoleVO implements Serializable { private static final long serialVersionUID = 1L; /** * 工序类型 */ private String gxDeviceType; /** * 工序步骤名称 */ private String gxStepId; /** * 角色id */ private List<String> roleIds; /** * 角色审核顺序 */ private List<Integer> orders; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgGxStepController.java
@@ -1,7 +1,9 @@ package cn.gistack.sm.sg.controller; import cn.gistack.sm.sg.DO.SgGxRoleDO; import cn.gistack.sm.sg.DO.SgGxStepDO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import cn.gistack.sm.sg.VO.SgGxRoleVO; import cn.gistack.sm.sg.VO.SgGxVO; import cn.gistack.sm.sg.service.SgGxStepService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -11,6 +13,9 @@ import org.springblade.core.tool.api.R; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; /** * <p> @@ -69,4 +74,33 @@ public R queryPageList(String id) { return R.data(sgGxStepService.getById(id)); } /** * 新增工序角色配置记录 * @param SgGxRoleVO * @return */ @PostMapping(value = "/addSgGxRole") public R addSgGxRole(@RequestBody SgGxRoleVO SgGxRoleVO) { sgGxStepService.insertSgGxRole(SgGxRoleVO); return R.success("添加成功"); } /** * 更新工序角色配置记录 * @param SgGxRoleVO * @return */ @PostMapping(value = "/updateSgGxRole") public R updateSgGxRole(@RequestBody SgGxRoleVO SgGxRoleVO) { sgGxStepService.updateSgGxRole(SgGxRoleVO); return R.success("修改成功"); } @GetMapping(value = "/getSgGxRoles") public R getSgGxRoles(String gxDeviceType,String gxStepId) { List<String> roleIds=sgGxStepService.getSgGxRoles(gxDeviceType,gxStepId); return R.data(roleIds); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxRoleMapper.java
New file @@ -0,0 +1,37 @@ package cn.gistack.sm.sg.mapper; import cn.gistack.sm.sg.DO.SgGxRoleDO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * 施工工序角色配置表 Mapper 接口 * </p> * * @author shenyijian * @since 2024-06-13 15:46:18 */ public interface SgGxRoleMapper extends BaseMapper<SgGxRoleDO> { List<SgGxRoleDO> selectSgGxRole(@Param("gxDeviceType") String gxDeviceType,@Param("gxStepId") String gxStepId); /** * 批量插入 * @param sgGxRoles */ void insertBach(List<SgGxRoleDO> sgGxRoles); /** * 根据工序类型、工序步骤id删除绑定 * @param gxDeviceType * @param gxStepId */ void deleteSgGxRoleDOs(@Param("gxDeviceType") String gxDeviceType,@Param("gxStepId") String gxStepId); List<String> getSgGxRoles(@Param("gxDeviceType") String gxDeviceType,@Param("gxStepId") String gxStepId); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxRoleMapper.xml
New file @@ -0,0 +1,25 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.gistack.sm.sg.mapper.SgGxRoleMapper"> <insert id="insertBach"> INSERT INTO YWXT.SG_GX_CONFIG (gx_device_type,gx_step_id,role_id,sg_order) VALUES <foreach collection="list" item="item" index="index" separator="," > (#{item.gxDeviceType},#{item.gxStepId},#{item.roleId},#{item.sgOrder}) </foreach> </insert> <delete id="deleteSgGxRoleDOs"> delete from YWXT.SG_GX_CONFIG where gx_device_type = #{gxDeviceType} and gx_step_id = #{gxStepId} </delete> <select id="selectSgGxRole" resultType="cn.gistack.sm.sg.DO.SgGxRoleDO"> select * from YWXT.SG_GX_CONFIG where gx_device_type = #{gxDeviceType} and gx_step_id = #{gxStepId} </select> <select id="getSgGxRoles" resultType="java.lang.String"> select role_id from YWXT.SG_GX_CONFIG where gx_device_type = #{gxDeviceType} and gx_step_id = #{gxStepId} </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.java
@@ -1,5 +1,6 @@ package cn.gistack.sm.sg.mapper; import cn.gistack.sm.sg.DO.SgDeviceGxStepDO; import cn.gistack.sm.sg.DO.SgGxStepDO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -21,4 +22,11 @@ List<SgGxStepDO> selectByGxInfoId(@Param("gxInfoId") Long gxInfoId); List<SgGxStepDO> queryPageList(IPage<SgGxStepDO> page, @Param("dto") ProjectSearchDTO searchDTO); /** * 查询设备下的工序状态 * @param deviceId * @return */ List<SgDeviceGxStepDO> getDeviceGXList(@Param("gxInfoId") Long deviceId); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml
@@ -14,4 +14,20 @@ and step.GX_STEP_NUM = #{dto.gxStepNum} </if> </select> <select id="getDeviceGXList" resultType="cn.gistack.sm.sg.DO.SgDeviceGxStepDO"> select info.*,ifnull(sp.status,0) as status from ( select sd.id as gxDeviceId ,sd.device_name as gxDeviceName,step.id as gxId, step.gx_step_num from YWXT.SG_DEVICE sd inner join YWXT.SG_GX sg on sd.device_type=sg.gx_type left join YWXT.SG_GX_STEP step on sg.id=step.gx_info_id where sd.id= = #{deviceId} ) info left join YWXT.SG_PROGRESS_REPORT sp on info.gxDeviceId=sp.PROFRAM_ID and info.gxId=sp.GX_STEP_ID </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgGxStepService.java
@@ -1,10 +1,14 @@ package cn.gistack.sm.sg.service; import cn.gistack.sm.sg.DO.SgGxRoleDO; import cn.gistack.sm.sg.DO.SgGxStepDO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import cn.gistack.sm.sg.VO.SgGxRoleVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -23,4 +27,25 @@ void delete(String id); IPage<SgGxStepDO> queryPageList(IPage<SgGxStepDO> page, @Param("dto") ProjectSearchDTO searchDTO); /** * 新增绑定的角色 * @param sgGxRoleVO */ void insertSgGxRole(SgGxRoleVO sgGxRoleVO); /** * 更新绑定的角色 * @param sgGxRoleVO */ void updateSgGxRole(SgGxRoleVO sgGxRoleVO); /** * 获取绑定的角色 * @param gxDeviceType * @param gxStepId * @return */ List<String> getSgGxRoles(String gxDeviceType, String gxStepId); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgGxStepServiceImpl.java
@@ -1,7 +1,10 @@ package cn.gistack.sm.sg.service.impl; import cn.gistack.sm.sg.DO.SgGxRoleDO; import cn.gistack.sm.sg.DO.SgGxStepDO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import cn.gistack.sm.sg.VO.SgGxRoleVO; import cn.gistack.sm.sg.mapper.SgGxRoleMapper; import cn.gistack.sm.sg.mapper.SgGxStepMapper; import cn.gistack.sm.sg.service.SgGxStepService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -10,6 +13,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** @@ -24,6 +30,8 @@ public class SgGxStepServiceImpl extends ServiceImpl<SgGxStepMapper, SgGxStepDO> implements SgGxStepService { @Autowired private SgGxStepMapper sgGxStepMapper; @Autowired private SgGxRoleMapper sgGxRoleMapper; @Override public void add(SgGxStepDO sgGxStepDO) { List<SgGxStepDO> list= sgGxStepMapper.selectByGxInfoId(sgGxStepDO.getGxInfoId()); @@ -55,4 +63,92 @@ List<SgGxStepDO> list = sgGxStepMapper.queryPageList(page,searchDTO); return page.setRecords(list); } /** * 新增工序角色配置逻辑 * @param sgGxRoleVO */ @Override public void insertSgGxRole(SgGxRoleVO sgGxRoleVO){ if (sgGxRoleVO.getGxStepId()==null){ throw new ServiceException("工序步骤参数错误"); } if (sgGxRoleVO.getGxDeviceType()==null){ throw new ServiceException("工序类型参数错误"); } List<SgGxRoleDO> sgGxRoleDOS = sgGxRoleMapper.selectSgGxRole(sgGxRoleVO.getGxDeviceType(), sgGxRoleVO.getGxStepId()); if (sgGxRoleDOS==null||sgGxRoleDOS.size()>0){ throw new ServiceException("已存在相同的工序角色配置"); } List<SgGxRoleDO> sgGxRoles=new ArrayList<>(); if (sgGxRoleVO.getRoleIds()==null||sgGxRoleVO.getRoleIds().size()==0){ throw new ServiceException("工序角色参数错误"); } List<String> roleIds = sgGxRoleVO.getRoleIds(); for (int i = 0; i <roleIds.size() ; i++) { SgGxRoleDO sgGxRoleDO=new SgGxRoleDO(); sgGxRoleDO.setGxDeviceType(sgGxRoleVO.getGxDeviceType()); sgGxRoleDO.setGxStepId(sgGxRoleVO.getGxStepId()); sgGxRoleDO.setRoleId(Long.valueOf(roleIds.get(i))); sgGxRoleDO.setSgOrder(sgGxRoleVO.getOrders().get(i)); sgGxRoles.add(sgGxRoleDO); } sgGxRoleMapper.insertBach(sgGxRoles); } /** * 更新工序角色配置 * @param sgGxRoleVO */ @Override @Transactional public void updateSgGxRole(SgGxRoleVO sgGxRoleVO){ if (sgGxRoleVO.getGxStepId()==null){ throw new ServiceException("工序步骤参数错误"); } if (sgGxRoleVO.getGxDeviceType()==null){ throw new ServiceException("工序类型参数错误"); } List<SgGxRoleDO> sgGxRoleDOS = sgGxRoleMapper.selectSgGxRole(sgGxRoleVO.getGxDeviceType(), sgGxRoleVO.getGxStepId()); if (sgGxRoleDOS==null||sgGxRoleDOS.size()>0){ //删除原来的 sgGxRoleMapper.deleteSgGxRoleDOs(sgGxRoleVO.getGxDeviceType(),sgGxRoleVO.getGxStepId()); } List<SgGxRoleDO> sgGxRoles=new ArrayList<>(); if (sgGxRoleVO.getRoleIds()==null||sgGxRoleVO.getRoleIds().size()==0){ throw new ServiceException("工序角色参数错误"); } List<String> roleIds = sgGxRoleVO.getRoleIds(); for (int i = 0; i <roleIds.size() ; i++) { SgGxRoleDO sgGxRoleDO=new SgGxRoleDO(); sgGxRoleDO.setGxDeviceType(sgGxRoleVO.getGxDeviceType()); sgGxRoleDO.setGxStepId(sgGxRoleVO.getGxStepId()); sgGxRoleDO.setRoleId(Long.valueOf(roleIds.get(i))); sgGxRoleDO.setSgOrder(sgGxRoleVO.getOrders().get(i)); sgGxRoles.add(sgGxRoleDO); } sgGxRoleMapper.insertBach(sgGxRoles); } /** * 获取绑定的角色进行回显 * * @param gxDeviceType * @param gxStepId * @return */ @Override public List<String> getSgGxRoles(String gxDeviceType, String gxStepId) { return sgGxRoleMapper.getSgGxRoles(gxDeviceType, gxStepId); } } 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); } } } }