skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java
@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -50,6 +51,12 @@ @TableField(exist = false) private String typeName; /** * 设备进度 */ @TableField(exist = false) private String deviceProgress; private String progress; /** * 项目id */ private String programId; skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxStepDO.java
@@ -56,4 +56,7 @@ @TableField(exist = false) private Long deviceId; @TableField(exist = false) private String gxType; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java
@@ -173,4 +173,7 @@ private List<SgTypeVO> sgGxDOS; private Integer status; @TableField(exist = false) private String projectProgress; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectRolePersonV0.java
@@ -7,8 +7,8 @@ private Long id; private Long projectId; private String projectName; private Long roleId; private String roleId; private String roleName; private Long userId; private String userId; private String userName; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/AddSgProjectPersonConfigDTO.java
New file @@ -0,0 +1,11 @@ package cn.gistack.sm.sg.DTO; import cn.gistack.sm.sg.DO.SgProjectPersonConfigDO; import lombok.Data; import java.util.List; @Data public class AddSgProjectPersonConfigDTO { private List<SgProjectPersonConfigDO> data; } skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
@@ -17,6 +17,7 @@ private String deviceName; private Long dId; private Long reportId; private Long stepId; private String gxStepName; private Integer reportStatus; private String gxStepNum; skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgTypeVO.java
@@ -1,6 +1,7 @@ package cn.gistack.sm.sg.VO; import cn.gistack.sm.sg.DO.SgDeviceDO; import com.baomidou.mybatisplus.annotation.TableField; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -14,5 +15,6 @@ @Builder public class SgTypeVO { private String typeName; private String typeProgress; private List<SgDeviceDO> deviceDOS; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectPersonConfigController.java
@@ -3,6 +3,7 @@ import cn.gistack.sm.sg.DO.SgProjectInfoDO; import cn.gistack.sm.sg.DO.SgProjectPersonConfigDO; import cn.gistack.sm.sg.DO.SgProjectRolePersonV0; import cn.gistack.sm.sg.DTO.AddSgProjectPersonConfigDTO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import cn.gistack.sm.sg.service.SgProjectPersonConfigService; import org.checkerframework.checker.units.qual.A; @@ -42,8 +43,8 @@ * 新增项目人员配置 */ @PostMapping(value = "/add") public R add( @RequestBody List<SgProjectPersonConfigDO> list) { projectPersonConfigService.add(list); public R add(@RequestBody AddSgProjectPersonConfigDTO dto) { projectPersonConfigService.add(dto); return R.success("新增成功"); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml
@@ -6,7 +6,7 @@ select * from YWXT.SG_GX_STEP step where step.GX_INFO_ID = #{gxInfoId} order by step.GX_STEP_NUM desc </select> <select id="queryPageList" resultType="cn.gistack.sm.sg.DO.SgGxStepDO"> select * from YWXT.SG_GX_STEP step where 1=1 select step.*,GX.GX_TYPE from YWXT.SG_GX_STEP step left join YWXT.SG_GX GX ON step.GX_INFO_ID = GX.ID where 1=1 <if test="dto.gxInfoId != null and dto.gxInfoId != ''"> and step.GX_INFO_ID = #{dto.gxInfoId} </if> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
@@ -110,7 +110,7 @@ and de.device_name like CONCAT(CONCAT('%', #{dto.deviceName}), '%') </if> <if test="dto.reportPerson != null"> and report.reportPerson = #{dto.reportPerson} and report.report_user = #{dto.reportPerson} </if> </select> <select id="getUserByIds" resultType="java.util.Map"> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
@@ -23,6 +23,7 @@ d.id as dId, step.gx_step_name, step.gx_step_num, step.id as stepId, re.STATUS as reportStatus, d.STATUS as deviceStatus, pro.STATUS as projectStatus, skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectPersonConfigService.java
@@ -2,6 +2,7 @@ import cn.gistack.sm.sg.DO.SgProjectPersonConfigDO; import cn.gistack.sm.sg.DO.SgProjectRolePersonV0; import cn.gistack.sm.sg.DTO.AddSgProjectPersonConfigDTO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import com.baomidou.mybatisplus.extension.service.IService; @@ -20,7 +21,7 @@ List<String> getRoleList(ProjectSearchDTO searchDTO); void add(List<SgProjectPersonConfigDO> list); void add(AddSgProjectPersonConfigDTO dto); List<SgProjectRolePersonV0> getList(ProjectSearchDTO searchDTO); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -50,6 +50,7 @@ Map<Long, List<SgProjectInfoVO>> projectMap = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId)); List<SgProjectInfoDO> result = new ArrayList<>(); for (Map.Entry<Long, List<SgProjectInfoVO>> entry : projectMap.entrySet()) { List<SgDeviceDO> allDevice = new ArrayList<>(); Long porId = entry.getKey(); List<SgProjectInfoVO> value = entry.getValue(); if (CollectionUtils.isEmpty(value)){ @@ -77,13 +78,36 @@ sgDeviceDO.setId(dId); sgDeviceDO.setDeviceName(deList.get(0).getDeviceName()); sgDeviceDO.setStatus( deList.get(0).getDeviceStatus()); sgDeviceDO.setStepDOList(deList.stream().map(s->SgGxStepDO.builder().id(s.getReportId()).gxStepNum(s.getGxStepNum()).gxStepName(s.getGxStepName()).deviceId(s.getDId()).approvalStatus(s.getReportStatus()).build()).collect(Collectors.toList())); List<SgGxStepDO> stepDOS = deList.stream().map(s -> SgGxStepDO.builder().id(s.getStepId()).gxStepNum(s.getGxStepNum()).gxStepName(s.getGxStepName()).deviceId(s.getDId()).approvalStatus(s.getReportStatus()).build()).collect(Collectors.toList()); List<SgGxStepDO> stepOver = stepDOS.stream().filter(s -> s.getApprovalStatus() != null && s.getApprovalStatus() == 2).collect(Collectors.toList()); BigDecimal stepSize = BigDecimal.valueOf(stepDOS.size()); BigDecimal stepOverSize = BigDecimal.ZERO; if (!stepOver.isEmpty()){ stepOverSize = BigDecimal.valueOf(stepOver.size()); } BigDecimal divide = stepOverSize.divide(stepSize, 2, RoundingMode.HALF_UP); sgDeviceDO.setProgress(divide.toString()); sgDeviceDO.setDeviceProgress(getBigDecimalPercent(divide)); sgDeviceDO.setStepDOList(stepDOS); deviceDOS.add(sgDeviceDO); allDevice.add(sgDeviceDO); } BigDecimal deviceSize = BigDecimal.valueOf(deviceDOS.size()); double sum = deviceDOS.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum(); BigDecimal deviceOver = BigDecimal.valueOf(sum); BigDecimal divideDevice = deviceOver.divide(deviceSize, 2, RoundingMode.HALF_UP); typeVO.setDeviceDOS(deviceDOS); typeVO.setTypeProgress(getBigDecimalPercent(divideDevice)); sgGxDOS.add(typeVO); } sgProjectInfoDO.setSgGxDOS(sgGxDOS); BigDecimal allDeviceSize = BigDecimal.valueOf(allDevice.size()); if (!allDeviceSize.equals(BigDecimal.ZERO)){ double sum = allDevice.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum(); BigDecimal allDeviceOver = BigDecimal.valueOf(sum); BigDecimal allDivideDevice = allDeviceOver.divide(allDeviceSize, 2, RoundingMode.HALF_UP); sgProjectInfoDO.setSgGxDOS(sgGxDOS); sgProjectInfoDO.setProjectProgress( getBigDecimalPercent(allDivideDevice)); } result.add(sgProjectInfoDO); } return result; @@ -108,15 +132,24 @@ v1 = BigDecimal.valueOf(overList.size()); } BigDecimal v2 = BigDecimal.valueOf(deviceList.size()); BigDecimal percentage = v1.divide(v2,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); // 如果不需要保留小数位,可以设置一个scale为0 BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP); sgProjectInfoVO.setProgressName(percentageRounded+"%"); sgProjectInfoVO.setProgressName(getBigDecimalPercent( v1.divide(v2,2,BigDecimal.ROUND_HALF_UP))); result.add(sgProjectInfoVO); } return result; } /** * 获取百分比 * @param bigDecimal * @return */ private String getBigDecimalPercent(BigDecimal bigDecimal) { BigDecimal percentage = bigDecimal.multiply(new BigDecimal("100")); // 如果不需要保留小数位,可以设置一个scale为0 BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP); return percentageRounded+"%"; } @Override public Map<String, Long> projectCount(ProjectSearchDTO searchDTO) { Map<String, Long> map = new HashMap<>(); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectPersonConfigServiceImpl.java
@@ -2,6 +2,7 @@ import cn.gistack.sm.sg.DO.SgProjectPersonConfigDO; import cn.gistack.sm.sg.DO.SgProjectRolePersonV0; import cn.gistack.sm.sg.DTO.AddSgProjectPersonConfigDTO; import cn.gistack.sm.sg.DTO.ProjectSearchDTO; import cn.gistack.sm.sg.mapper.SgProjectPersonConfigMapper; import cn.gistack.sm.sg.service.SgProjectPersonConfigService; @@ -32,8 +33,8 @@ } @Override public void add(List<SgProjectPersonConfigDO> list) { for (SgProjectPersonConfigDO sgProjectPersonConfigDO : list) { public void add(AddSgProjectPersonConfigDTO dto) { for (SgProjectPersonConfigDO sgProjectPersonConfigDO : dto.getData()) { if (Objects.isNull(sgProjectPersonConfigDO.getId())){ projectPersonConfigMapper.insert(sgProjectPersonConfigDO); }else {