gong
2024-06-17 4790119bedab62ce14d25e89b7ec28668383d027
加个异步处理项目和设备的状态
8 files modified
5 files added
491 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceGxStepDO.java 51 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxRoleDO.java 48 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgGxRoleVO.java 46 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgGxStepController.java 34 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxRoleMapper.java 37 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxRoleMapper.xml 25 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgGxStepService.java 25 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgGxStepServiceImpl.java 96 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java 101 ●●●●● patch | view | raw | blame | history
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);
            }
        }
    }
}