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(); } } }