From 402ff1aeac9bb33e6d8ff04913cbf1b0364df2a6 Mon Sep 17 00:00:00 2001
From: shenyijian <1178253012@qq.com>
Date: Tue, 18 Jun 2024 13:55:03 +0800
Subject: [PATCH] 湖北水库:施工:APP项目统计、项目进度列表

---
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java            |    7 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java    |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java            |    3 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java |   12 ++-
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java               |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java    |   46 +++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java               |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java             |    5 +
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java                |   11 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml                |    9 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java       |   20 ++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml             |   14 ++++
 12 files changed, 128 insertions(+), 5 deletions(-)

diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
index 49b5edb..8fc6ac6 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
@@ -8,5 +8,12 @@
 
 @Data
 public class SgProgressReportVO extends SgProgressReportDO {
+	/**
+	 * 各级审批流程
+	 */
 	private List<SgReportUserDO> sgReportUserDOS;
+	/**
+	 * 同设备流程审批情况
+	 */
+	private List<SgStepReportVO> sgStepReportVOS;
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
index 26ec740..f7b08c0 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
@@ -21,4 +21,6 @@
 	private String gxStepNum;
 	private String deviceType;
 	private String typeName;
+	private Integer deviceStatus;
+	private String progressName;
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java
new file mode 100644
index 0000000..c51365c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java
@@ -0,0 +1,11 @@
+package cn.gistack.sm.sg.VO;
+
+import lombok.Data;
+
+@Data
+public class SgStepReportVO {
+private Long	stepId;
+private String	stepName;
+private Integer	approvalStatus;
+private String 	stepNum;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java
index acc4712..6a933a2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java
@@ -58,7 +58,7 @@
 	}
 
 	/**
-	 * 新增上报
+	 * 上报详情
 	 */
 	@GetMapping(value = "/detail")
 	public R detail(String id) {
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
index e2cdb53..eca12d0 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
@@ -15,6 +15,7 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -46,4 +47,23 @@
 		List<SgProjectInfoDO> list= sgProjectInfoService.queryStepByProject(searchDTO);
 		return R.data(list);
 	}
+
+
+	/**
+	 * 项目进度列表(APP)
+	 */
+	@GetMapping(value = "/project_progress_list")
+	public R progressList(ProjectSearchDTO searchDTO) {
+		List<SgProjectInfoVO> list= sgProjectInfoService.progressList(searchDTO);
+		return R.data(list);
+	}
+
+	/**
+	 * 首页项目统计(APP)
+	 */
+	@GetMapping(value = "/project_count")
+	public R projectCount(ProjectSearchDTO searchDTO) {
+		Map<String,Long> map = sgProjectInfoService.projectCount(searchDTO);
+		return R.data(map);
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
index 650d0bb..979f970 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
@@ -3,6 +3,7 @@
 import cn.gistack.sm.sg.DO.SgProgressReportDO;
 import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
 import cn.gistack.sm.sg.VO.SgProgressReportVO;
+import cn.gistack.sm.sg.VO.SgStepReportVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,6 @@
 	List<SgProgressReportVO> queryList(@Param("dto") ProjectSearchDTO searchDTO);
 
 	Long countList(@Param("dto") ProjectSearchDTO searchDTO);
+
+	List<SgStepReportVO> selectByDeviceId(@Param("deviceId") Long gxDeviceId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
index e0c5cd9..515c3f9 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
@@ -37,4 +37,18 @@
             and userR.approval_status = #{dto.approvalStatus}
         </if>
     </select>
+    <select id="selectByDeviceId" resultType="cn.gistack.sm.sg.VO.SgStepReportVO">
+        SELECT
+            step.id AS stepId,
+            step.gx_step_name AS stepName,
+            step.gx_step_num AS stepNum,
+            re.STATUS AS approvalStatus
+        FROM
+            ywxt.sg_gx_step step
+                LEFT JOIN ywxt.sg_gx gx ON step.gx_info_id = gx.id
+                LEFT JOIN ywxt.sg_device de ON gx.gx_type = de.device_type
+                LEFT JOIN ywxt.sg_progress_report re ON re.gx_step_id = step.id and re.gx_device_id = de.id
+        WHERE
+            1 =1 and de.id = #{deviceId}
+    </select>
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
index b4900ff..332ad8e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
@@ -23,4 +23,6 @@
 	List<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, @Param("dto") ProjectSearchDTO dto);
 
     List<SgProjectInfoVO> queryStepByProject(@Param("dto") ProjectSearchDTO searchDTO);
+
+	List<SgProjectInfoVO> progressList(@Param("dto") ProjectSearchDTO searchDTO);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
index 4eb77e3..31c0d19 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
@@ -39,4 +39,13 @@
             and pro.project_name like CONCAT(CONCAT('%', #{dto.projectName}), '%')
         </if>
     </select>
+    <select id="progressList" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
+        SELECT
+            pro.id,
+            pro.project_name,
+            de.STATUS as deviceStatus
+        FROM
+            ywxt.sg_project_info pro
+                LEFT JOIN ywxt.sg_device de ON pro.id = de.program_id
+    </select>
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
index d17b9c0..8174ded 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -21,4 +22,8 @@
 	IPage<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO);
 
 	List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO);
+
+	List<SgProjectInfoVO> progressList(ProjectSearchDTO searchDTO);
+
+	Map<String, Long> projectCount(ProjectSearchDTO searchDTO);
 }
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 0e083a6..0c21022 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
@@ -4,6 +4,7 @@
 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.VO.SgStepReportVO;
 import cn.gistack.sm.sg.mapper.*;
 import cn.gistack.sm.sg.service.SgProgressReportService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -69,9 +70,10 @@
 		Long gxStepId = sgProgressReportDO.getGxStepId();
 		List<SgGxStepDO> list = sgGxStepMapper.selectByGxInfoId(gxDeviceId);
 		SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(gxStepId);
-		LambdaQueryChainWrapper<SgProgressReportDO> wrapper = new LambdaQueryChainWrapper<>(sgProgressReportMapper)
-			.eq(SgProgressReportDO::getGxStepId, gxStepId).eq(SgProgressReportDO::getGxDeviceId,gxDeviceId);
-		if ( sgProgressReportMapper.selectOne(wrapper)!=null){
+		QueryWrapper<SgProgressReportDO> wrapper = new QueryWrapper<>();
+		wrapper.eq("gx_step_id", gxStepId).eq("gx_device_id",gxDeviceId);
+		List<SgProgressReportDO> sgProgressReportDOS = sgProgressReportMapper.selectList(wrapper);
+		if ( sgProgressReportDOS!=null && sgProgressReportDOS.size()>0){
 			throw new ServiceException("此工序已存在审批!");
 		}
 		for (SgGxStepDO gxStepDO : list) {
@@ -92,7 +94,7 @@
 		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();
+		List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).eq(SgProjectPersonConfigDO::getProgramId,sgProgressReportDO.getProframId()).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());
@@ -122,6 +124,8 @@
 		SgProgressReportVO sgProgressReportVO = sgProgressReportMapper.queryById(id);
 		List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).orderByAsc(SgReportUserDO::getApprovalTime).list();
 		sgProgressReportVO.setSgReportUserDOS(list);
+		List<SgStepReportVO> sgStepReportVOS = sgProgressReportMapper.selectByDeviceId(sgProgressReportVO.getGxDeviceId());
+		sgProgressReportVO.setSgStepReportVOS(sgStepReportVOS);
 		return sgProgressReportVO;
 	}
 
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
index 964cc63..a503ac6 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -11,11 +11,15 @@
 import cn.gistack.sm.sg.service.SgProjectInfoService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -81,4 +85,46 @@
 		}
 		return result;
 	}
+
+	@Override
+	public List<SgProjectInfoVO> progressList(ProjectSearchDTO searchDTO) {
+		List<SgProjectInfoVO> list = sgProjectInfoMapper.progressList(searchDTO);
+		Map<Long, List<SgProjectInfoVO>> map = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
+		List<SgProjectInfoVO> result = new ArrayList<>();
+		for (Map.Entry<Long, List<SgProjectInfoVO>> entry : map.entrySet()) {
+			SgProjectInfoVO sgProjectInfoVO = new SgProjectInfoVO();
+			List<SgProjectInfoVO> deviceList = entry.getValue();
+			if (CollectionUtils.isEmpty(deviceList)){
+				continue;
+			}
+			sgProjectInfoVO.setId(entry.getKey());
+			sgProjectInfoVO.setProjectName(deviceList.get(0).getProjectName());
+			List<SgProjectInfoVO> overList = deviceList.stream().filter(s->s.getDeviceStatus()!=null).filter(s -> s.getDeviceStatus() == 2).collect(Collectors.toList());
+			BigDecimal v1 =BigDecimal.ZERO;
+			if (CollectionUtils.isNotEmpty(overList)){
+				v1 = BigDecimal.valueOf(overList.size());
+			}
+			BigDecimal v2 = BigDecimal.valueOf(deviceList.size());
+			BigDecimal percentage = v1.divide(v2).multiply(new BigDecimal("100"));
+			// 如果不需要保留小数位,可以设置一个scale为0
+			BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP);
+			sgProjectInfoVO.setProgressName(percentageRounded+"%");
+			result.add(sgProjectInfoVO);
+		}
+		return result;
+	}
+
+	@Override
+	public Map<String, Long> projectCount(ProjectSearchDTO searchDTO) {
+		Map<String, Long> map  = new HashMap<>();
+		List<SgProjectInfoDO> list = new LambdaQueryChainWrapper<>(sgProjectInfoMapper).list();
+		List<SgProjectInfoDO> pending = list.stream().filter(s -> s.getStatus() == 0).collect(Collectors.toList());
+		List<SgProjectInfoDO> progress = list.stream().filter(s -> s.getStatus() == 1).collect(Collectors.toList());
+		List<SgProjectInfoDO> over = list.stream().filter(s -> s.getStatus() == 2).collect(Collectors.toList());
+		map.put("all", (long) list.size());
+		map.put("pending", (long) pending.size());
+		map.put("progress", (long) progress.size());
+		map.put("over", (long) over.size());
+		return map;
+	}
 }

--
Gitblit v1.9.3