shenyijian
2024-06-21 60483b2e9a5e597c0dec6aa30037e62356dd52af
湖北水库:施工:项目进度查询计算百分比
13 files modified
1 files added
94 ■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgGxStepDO.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectRolePersonV0.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/AddSgProjectPersonConfigDTO.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgTypeVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectPersonConfigController.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectPersonConfigService.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java 45 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectPersonConfigServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
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 {