shenyijian
2024-06-15 1a3f1e1aa0651b96fe347ce47591fd0af956d305
湖北水库:施工:工序审批
17 files added
654 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxConfigDO.java 51 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProgressReportDO.java 105 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectPersonConfigDO.java 42 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgReportUserDO.java 65 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ApprovalDTO.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java 67 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxConfigMapper.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxConfigMapper.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java 25 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml 14 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.xml 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgReportUserMapper.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgReportUserMapper.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProgressReportService.java 27 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java 157 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxConfigDO.java
New file
@@ -0,0 +1,51 @@
package cn.gistack.sm.sg.DO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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 shenyijian
 * @since 2024-06-15 11:45:35
 */
@Getter
@Setter
@TableName("SG_GX_CONFIG")
public class SgGxConfigDO implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 设备类型
     */
    private String gxDeviceType;
    /**
     * 工序步骤id
     */
    private Long gxStepId;
    /**
     * 角色id
     */
    private String roleId;
    /**
     * 审核顺序
     */
    private Integer sgOrder;
    @TableField(exist = false)
    private Long user;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProgressReportDO.java
New file
@@ -0,0 +1,105 @@
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;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
 * 施工进度上报表
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 10:22:08
 */
@Getter
@Setter
@TableName("SG_PROGRESS_REPORT")
public class SgProgressReportDO implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 项目id
     */
    private Long proframId;
    /**
     * 项目名称
     */
    private String programName;
    /**
     * 工序步骤id
     */
    private Long gxStepId;
    /**
     * 工序步骤名称
     */
    private String gxStepName;
    /**
     * 上报时间
     */
    private Date reportTime;
    /**
     * 施工工序进度
     */
    private String gxProgress;
    /**
     * 施工情况
     */
    private String remark;
    /**
     * 施工工序状态(0待审核 1进行中,2已完成)
     */
    private Integer status;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 施工设备ID
     */
    private Long gxDeviceId;
    /**
     * 上报人
     */
    private Long reportUser;
    /**
     * 图片附件
     */
    private String imagesUrls;
    /**
     * 视频附件
     */
    private String videoUrls;
    /**
     * 审核意见
     */
    private String auditOpinion;
    /**
     * 审核人
     */
    private String auditPerson;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectPersonConfigDO.java
New file
@@ -0,0 +1,42 @@
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 shenyijian
 * @since 2024-06-15 11:45:35
 */
@Getter
@Setter
@TableName("SG_PROJECT_PERSON_CONFIG")
public class SgProjectPersonConfigDO implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 项目id
     */
    private Long programId;
    /**
     * 角色id
     */
    private Long roldId;
    /**
     * 用户id
     */
    private Long userId;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgReportUserDO.java
New file
@@ -0,0 +1,65 @@
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.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
 * 审批报告人
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 14:57:55
 */
@Data
@TableName("SG_REPORT_USER")
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SgReportUserDO implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 报告ID
     */
    private Long reportId;
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * 审批状态 0未审批 1通过,2驳回
     */
    private Integer approvalStatus;
    /**
     * 审批内容
     */
    private String approvalContent;
    /**
     * 审批时间
     */
    private Date approvalTime;
    /**
     * 审批顺序
     */
    private Integer approvalOrder;
    /**
     * 审批顺序
     */
    private Integer isHis;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ApprovalDTO.java
New file
@@ -0,0 +1,22 @@
package cn.gistack.sm.sg.DTO;
import lombok.Data;
@Data
public class ApprovalDTO {
    private Long id;
    /**
     * 审批状态 1通过 , 2驳回
     */
    private Integer status;
    /**
     * 审批意见
     */
    private String approvalContent;
    /**
     * 审核人
     */
    private Long userId;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
New file
@@ -0,0 +1,12 @@
package cn.gistack.sm.sg.VO;
import cn.gistack.sm.sg.DO.SgProgressReportDO;
import cn.gistack.sm.sg.DO.SgReportUserDO;
import lombok.Data;
import java.util.List;
@Data
public class SgProgressReportVO extends SgProgressReportDO {
    private List<SgReportUserDO> sgReportUserDOS;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java
New file
@@ -0,0 +1,67 @@
package cn.gistack.sm.sg.controller;
import cn.gistack.sm.sg.DO.SgProgressReportDO;
import cn.gistack.sm.sg.DO.SgProjectInfoDO;
import cn.gistack.sm.sg.DTO.ApprovalDTO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
import cn.gistack.sm.sg.service.SgProgressReportService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * <p>
 * 施工进度上报表 前端控制器
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 10:22:08
 */
@RestController
@RequestMapping("/progress_report")
public class SgProgressReportController {
    @Autowired
    private SgProgressReportService sgProgressReportService;
    /**
     * 分页列表查询
     */
    @GetMapping(value = "/page")
    public R queryPageList(ProjectSearchDTO searchDTO, Query query) {
        IPage<SgProgressReportVO> page = sgProgressReportService.queryPageList(Condition.getPage(query), searchDTO);
        return R.data(page);
    }
    /**
     * 新增上报
     */
    @PostMapping(value = "/add")
    public R add(@RequestBody SgProgressReportDO sgProgressReportDO) {
     sgProgressReportService.add(sgProgressReportDO);
        return R.success("添加成功");
    }
    /**
     * 新增上报
     */
    @GetMapping(value = "/detail")
    public R detail(String id) {
        SgProgressReportVO sgProgressReportVO = sgProgressReportService.detail(id);
        return R.data(sgProgressReportVO);
    }
    /**
     * 审批
     */
    @PostMapping(value = "/approval")
    public R approval(@RequestBody ApprovalDTO approvalDTO) {
        sgProgressReportService.approval(approvalDTO);
        return R.success("审批成功");
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxConfigMapper.java
New file
@@ -0,0 +1,16 @@
package cn.gistack.sm.sg.mapper;
import cn.gistack.sm.sg.DO.SgGxConfigDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * 设备工序配置角色表 Mapper 接口
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 11:45:35
 */
public interface SgGxConfigMapper extends BaseMapper<SgGxConfigDO> {
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxConfigMapper.xml
New file
@@ -0,0 +1,5 @@
<?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.SgGxConfigMapper">
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
New file
@@ -0,0 +1,25 @@
package cn.gistack.sm.sg.mapper;
import cn.gistack.sm.sg.DO.SgProgressReportDO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
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-15 10:22:08
 */
public interface SgProgressReportMapper extends BaseMapper<SgProgressReportDO> {
    List<SgProgressReportVO> queryPageList(IPage<SgProgressReportVO> page, @Param("dto") ProjectSearchDTO searchDTO);
    SgProgressReportVO queryById(@Param("id") String id);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
New file
@@ -0,0 +1,14 @@
<?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.SgProgressReportMapper">
    <select id="queryPageList" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO">
        select * from  SG_PROGRESS_REPORT report where 1=1
        <if test="dto.projectName != null and dto.projectName != ''">
            and report.PROGRAM_NAME = #{dto.projectName}
        </if>
    </select>
    <select id="queryById" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO">
        select * from  SG_PROGRESS_REPORT report where id = #{id}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.java
New file
@@ -0,0 +1,18 @@
package cn.gistack.sm.sg.mapper;
import cn.gistack.sm.sg.DO.SgProjectPersonConfigDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * 施工项目人员配置表 Mapper 接口
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 11:45:35
 */
public interface SgProjectPersonConfigMapper extends BaseMapper<SgProjectPersonConfigDO> {
    SgProjectPersonConfigDO selectByUserId(@Param("userId") Long reportUser);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.xml
New file
@@ -0,0 +1,8 @@
<?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.SgProjectPersonConfigMapper">
    <select id="selectByUserId" resultType="cn.gistack.sm.sg.DO.SgProjectPersonConfigDO">
        select  * from YWXT.SG_PROJECT_PERSON_CONFIG where USER_ID = #{userId}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgReportUserMapper.java
New file
@@ -0,0 +1,15 @@
package cn.gistack.sm.sg.mapper;
import cn.gistack.sm.sg.DO.SgReportUserDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * 审批报告人 Mapper 接口
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 14:57:55
 */
public interface SgReportUserMapper extends BaseMapper<SgReportUserDO> {
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgReportUserMapper.xml
New file
@@ -0,0 +1,5 @@
<?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.SgReportUserMapper">
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProgressReportService.java
New file
@@ -0,0 +1,27 @@
package cn.gistack.sm.sg.service;
import cn.gistack.sm.sg.DO.SgProgressReportDO;
import cn.gistack.sm.sg.DTO.ApprovalDTO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 * 施工进度上报表 服务类
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 10:22:08
 */
public interface SgProgressReportService extends IService<SgProgressReportDO> {
    IPage<SgProgressReportVO> queryPageList(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO);
    void add(SgProgressReportDO sgProgressReportDO);
    SgProgressReportVO detail(String id);
    void approval(ApprovalDTO approvalDTO);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
New file
@@ -0,0 +1,157 @@
package cn.gistack.sm.sg.service.impl;
import cn.gistack.sm.sg.DO.*;
import cn.gistack.sm.sg.DTO.ApprovalDTO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
 * 施工进度上报表 服务实现类
 * </p>
 *
 * @author shenyijian
 * @since 2024-06-15 10:22:08
 */
@Service
public class SgProgressReportServiceImpl extends ServiceImpl<SgProgressReportMapper, SgProgressReportDO> implements SgProgressReportService {
    @Autowired
    private SgProgressReportMapper sgProgressReportMapper;
    @Autowired
    private SgProjectPersonConfigMapper sgProjectPersonConfigMapper;
    @Autowired
    private SgGxConfigMapper sgGxConfigMapper;
    @Autowired
    private SgDeviceMapper sgDeviceMapper;
    @Autowired
    private SgReportUserMapper sgReportUserMapper;
    @Autowired
    private SgGxStepMapper sgGxStepMapper;
    @Override
    public IPage<SgProgressReportVO> queryPageList(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) {
        List<SgProgressReportVO> list = sgProgressReportMapper.queryPageList(page,searchDTO);
        return page.setRecords(list);
    }
    @Override
    @Transactional
    public void add(SgProgressReportDO sgProgressReportDO) {
        Long gxDeviceId = sgProgressReportDO.getGxDeviceId();
        Long gxStepId = sgProgressReportDO.getGxStepId();
        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 ){
                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()+"的审批!");
                }
            }
        }
        Long userId = AuthUtil.getUserId();
        sgProgressReportDO.setStatus(0);
        sgProgressReportDO.setReportUser(userId);
        sgProgressReportMapper.insert(sgProgressReportDO);
        String deviceType = sgDeviceMapper.selectById(gxDeviceId).getDeviceType();
        List<SgGxConfigDO> sgGxConfigDOS = new LambdaQueryChainWrapper<>(sgGxConfigMapper)
            .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()) ;
        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){
                sgProgressReportDO.setAuditPerson(String.valueOf(sgGxConfigDO.getUser()));
                sgProgressReportMapper.updateById(sgProgressReportDO);
            }
        }
    }
    @Override
    public SgProgressReportVO detail(String id) {
        SgProgressReportVO sgProgressReportVO = sgProgressReportMapper.queryById(id);
        List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).orderByAsc(SgReportUserDO::getApprovalTime).list();
        sgProgressReportVO.setSgReportUserDOS(list);
        return sgProgressReportVO;
    }
    /**
     * 审批
     * @param approvalDTO
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void approval(ApprovalDTO approvalDTO) {
        Long id = approvalDTO.getId();
        List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).eq(SgReportUserDO::getIsHis,0)
            .eq(SgReportUserDO::getApprovalStatus, 0).orderByDesc(SgReportUserDO::getApprovalOrder).list();
        SgReportUserDO sgReportUserDO = list.stream().filter(s -> s.getUserId().equals(approvalDTO.getUserId())).findFirst().get();
        Date date = new Date();
        LambdaUpdateChainWrapper<SgProgressReportDO> updateChainWrapper = new LambdaUpdateChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getId, id);
        LambdaUpdateChainWrapper<SgReportUserDO> userUpdate = new LambdaUpdateChainWrapper<>(sgReportUserMapper)
            .eq(SgReportUserDO::getId, sgReportUserDO.getId()).set(SgReportUserDO::getApprovalContent,approvalDTO.getApprovalContent()).set(SgReportUserDO::getApprovalTime,date);
        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();
            }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();
            }
        }else {
            updateChainWrapper.set(SgProgressReportDO::getStatus,0);
            List<SgReportUserDO> sgReportUserDOS = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).eq(SgReportUserDO::getIsHis,0)
                .orderByAsc(SgReportUserDO::getApprovalOrder).list()
//                .stream().distinct()
//                .stream().filter(s->s.getApprovalOrder()!=0 && s.getApprovalOrder()<= sgReportUserDO.getApprovalOrder()).collect(Collectors.toList())
                ;
            userUpdate.set(SgReportUserDO::getApprovalStatus,2).update();
            for (SgReportUserDO reportUserDO : sgReportUserDOS) {
                if (reportUserDO.getApprovalOrder()<=sgReportUserDO.getApprovalOrder()&&reportUserDO.getApprovalOrder()!=0){
                    //更新为历史数据
                    new LambdaUpdateChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getId,reportUserDO.getId()).set(SgReportUserDO::getIsHis,1).update();
                    reportUserDO.setId(null);
                    reportUserDO.setApprovalStatus(0);
                    reportUserDO.setIsHis(0);
                    reportUserDO.setApprovalTime(date);
                    sgReportUserMapper.insert(reportUserDO);
                }else if (reportUserDO.getApprovalOrder()>sgReportUserDO.getApprovalOrder()){
                    reportUserDO.setApprovalTime(date);
                    sgReportUserMapper.updateById(reportUserDO);
                }
                if (reportUserDO.getApprovalOrder()==1){
                    updateChainWrapper.set(SgProgressReportDO::getAuditPerson,reportUserDO.getUserId());
                }
            }
            updateChainWrapper.update();
        }
    }
}