ke
2024-11-26 b672cafe6a447c9b19691b583df9542ad84bce2c
Merge remote-tracking branch 'origin/jtdev' into jtdev
66 files modified
4 files added
3171 ■■■■ changed files
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java 65 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java 27 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/entity/AlarmRuleDetail.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProgressReportDO.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java 39 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgReportUserDO.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ProjectSearchDTO.java 102 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/SgDeviceSearchDTO.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/PtypeVO.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/ResVO.java 40 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgAllDeptOrUser.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgOperatingRateVO.java 38 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectTreeVO.java 70 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStatisProVO.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgTypeVO.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Dept.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/DeptVO.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java 73 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 104 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 415 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 22 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 81 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/SmsRequestTemplate.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.xml 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java 37 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/controller/ReportFloodRecordController.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java 40 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgDeviceMapper.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxMapper.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxMapper.xml 13 ●●●● 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.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml 92 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml 273 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgDeviceServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgGxServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java 457 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java 473 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbProject.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbProjectSchedule.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml 36 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.xml 12 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeUnitDangerMapper.xml 10 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml 188 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResDykeMapper.xml 63 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.xml 43 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResBaseService.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResBaseServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbDykeInvestigationServiceImpl.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbResGeneralInvestigationServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/statisticsVO/StatisticsParams.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/statisticsVO/StatisticsTableProject.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbDykeUnitDangerVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbProjectVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbResDykeVO.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java
@@ -27,6 +27,7 @@
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
import org.springframework.util.Base64Utils;
import java.util.Base64;
import java.util.Calendar;
@@ -132,6 +133,12 @@
        return tokens[0];
    }
    private static String getHttpBasic(String clientId,String clientSecret) {
        String string = clientId+":"+clientSecret;
        byte[] encode = Base64Utils.encode(string.getBytes());
        return "Basic "+new String(encode);
    }
    /**
     * 获取token过期时间(次日凌晨3点)
     *
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/filter/AuthFilter.java
@@ -42,6 +42,7 @@
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
 * 鉴权认证
@@ -59,6 +60,7 @@
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //校验 Token 放行
        String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
        String path = exchange.getRequest().getURI().getPath();
@@ -88,13 +90,72 @@
            }
        }
        return chain.filter(exchange);
        //校验 Token 放行
//        String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
//        String path = exchange.getRequest().getURI().getPath();
//        if (isSkip(originalRequestUrl)) {
//            return chain.filter(exchange);
//        }
//
//        //校验 Token 合法性
//        ServerHttpResponse resp = exchange.getResponse();
//        String headerToken = exchange.getRequest().getHeaders().getFirst(AuthProvider.AUTH_KEY);
//        String paramToken = exchange.getRequest().getQueryParams().getFirst(AuthProvider.AUTH_KEY);
//
//        //校验 basic 放行
//        if (isSkip(path)) {
//            String header = exchange.getRequest().getHeaders().getFirst("Authorization");
//            if (header == null || !header.startsWith("Basic")) {
//                return unAuth(resp, "缺失令牌,鉴权失败");
//            }
//
//            byte[] base64Token = header.substring(6).getBytes();
//
//            byte[] decoded;
//            try {
//                decoded = Base64.getDecoder().decode(base64Token);
//            } catch (IllegalArgumentException var7) {
//                return unAuth(resp, "缺失令牌,鉴权失败");
//            }
//            String token = new String(decoded);
//            int index = token.indexOf(":");
//
//            String[] tokens = new String[]{token.substring(0, index), token.substring(index + 1)};
//            if (tokens.length <= 0) {
//                return unAuth(resp, "缺失令牌,鉴权失败");
//            }
//
//            return chain.filter(exchange);
//        }
//
//        if (StringUtils.isBlank(headerToken) && StringUtils.isBlank(paramToken)) {
//            return unAuth(resp, "缺失令牌,鉴权失败");
//        }
//        String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
//        String token = JwtUtil.getToken(auth);
//        Claims claims = JwtUtil.parseJWT(token);
//        if (token == null || claims == null) {
//            return unAuth(resp, "请求未授权");
//        }
//        //判断 Token 状态
//        if (jwtProperties.getState()) {
//            String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
//            String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
//            String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
//            if (!token.equalsIgnoreCase(accessToken)) {
//                return unAuth(resp, "令牌已失效");
//            }
//        }
//        return chain.filter(exchange);
    }
    private boolean isSkip(String path) {
        return AuthProvider.getDefaultSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
            || authProperties.getSkipUrl().stream().anyMatch(pattern -> antPathMatcher.match(pattern, path))
             || authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
             || authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
            || authProperties.getAuth().stream().anyMatch(auth -> antPathMatcher.match(auth.getPattern(), path))
            || authProperties.getBasic().stream().anyMatch(basic -> antPathMatcher.match(basic.getPattern(), path))
            || authProperties.getSign().stream().anyMatch(sign -> antPathMatcher.match(sign.getPattern(), path));
    }
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java
@@ -55,20 +55,21 @@
        DEFAULT_SKIP_URL.add("/manager/check-upload");
        DEFAULT_SKIP_URL.add("/error/**");
        DEFAULT_SKIP_URL.add("/assets/**");
        DEFAULT_SKIP_URL.add("/sjztmd/**/**");
        DEFAULT_SKIP_URL.add("/simulate/**");
        DEFAULT_SKIP_URL.add("/app/manage/getLastInfo");
        DEFAULT_SKIP_URL.add("/app/manage/getMiniProgramPath");
        DEFAULT_SKIP_URL.add("/oauth/wxLogin");
        DEFAULT_SKIP_URL.add("/oauth/tokenLogin/**");
        DEFAULT_SKIP_URL.add("/sms/sms/sendCode");
        DEFAULT_SKIP_URL.add("/hk/hk/queryHkPreviewUrlCommon");
        DEFAULT_SKIP_URL.add("/hk/hk/handleCameraPosition");
        DEFAULT_SKIP_URL.add("/hk/hk/presetsSearchesUrls");
        DEFAULT_SKIP_URL.add("/hk/hk/presetsAddition");
        DEFAULT_SKIP_URL.add("/hk/hk/presetsDeletion");
        DEFAULT_SKIP_URL.add("/hk/hk/talkURLs");
//        DEFAULT_SKIP_URL.add("/sjztmd/**/**");
//        DEFAULT_SKIP_URL.add("/simulate/**");
//        DEFAULT_SKIP_URL.add("/app/manage/getLastInfo");
//        DEFAULT_SKIP_URL.add("/app/manage/getMiniProgramPath");
//        DEFAULT_SKIP_URL.add("/oauth/wxLogin");
//        DEFAULT_SKIP_URL.add("/oauth/tokenLogin/**");
//        DEFAULT_SKIP_URL.add("/sms/sms/sendCode");
//
//        DEFAULT_SKIP_URL.add("/hk/hk/queryHkPreviewUrlCommon");
//        DEFAULT_SKIP_URL.add("/hk/hk/handleCameraPosition");
//        DEFAULT_SKIP_URL.add("/hk/hk/presetsSearchesUrls");
//        DEFAULT_SKIP_URL.add("/hk/hk/presetsAddition");
//        DEFAULT_SKIP_URL.add("/hk/hk/presetsDeletion");
//        DEFAULT_SKIP_URL.add("/hk/hk/talkURLs");
    }
    /**
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/entity/AlarmRuleDetail.java
@@ -43,6 +43,11 @@
    private String templateId;
    /**
     * 模板表ID (合并内容发送模板)
     */
    private String mergeTemplateId;
    /**
     * 备注
     */
    private String alarmRemark;
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgDeviceDO.java
@@ -107,4 +107,9 @@
    private Integer status;
    /**
     * 价格
     */
    private String price;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProgressReportDO.java
@@ -148,4 +148,26 @@
     */
    @TableField(exist = false)
    private String resubmitId;
    @TableField(exist = false)
    private List<String> userIDs;
    @TableField(exist = false)
    private String controlUnit;
    @TableField(exist = false)
    private String selfUnit;
    @TableField(exist = false)
    private String countryUnit;
    @TableField(exist = false)
    private String countyCd;
    @TableField(exist = false)
    private  List<String> xbUnitIDs;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java
@@ -181,7 +181,6 @@
    private Integer status;
    @TableField(exist = false)
    private String projectProgress;
    @TableField(exist = false)
@@ -202,4 +201,42 @@
     */
    private String lot;
    /**
     * 表面变形
     */
    private int surfaceNum;
    private String surfaceProgress;
    /**
     * 视频
     */
    private int videoNum;
    private String videoProgress;
    /**
     * 渗流压力
     */
    private int transNum;
    private String transProgress;
    /**
     * 渗流量
     */
    private int seepageNum;
    private String seepageProgress;
    /**
     * 水库注册码
     */
    @TableField(exist = false)
    private String othRegCd;
    /**
     * 设备价格排序
     */
    @TableField(exist = false)
    private String price;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgReportUserDO.java
@@ -39,7 +39,16 @@
     */
    private Long userId;
    /**
    /**
     * 角色ID
     */
    private Long roleId;
    @TableField(exist = false)
    private String roleName;
    /**
     * 审批状态 0未审批 1通过,2驳回
     */
    private Integer approvalStatus;
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ProjectSearchDTO.java
@@ -5,6 +5,7 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springblade.core.secure.utils.AuthUtil;
import java.util.List;
@@ -16,22 +17,94 @@
@NoArgsConstructor
@Builder
public class ProjectSearchDTO {
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 区域编码
     */
    private String adCode;
    /**
     * 设备名
     */
    private String deviceName;
    /**
     * 水库名
     */
    private String skName;
    /**
     * 工序类型
     */
    private String gxType;
    private String typeName;
    /**
     * 工序名
     */
    private String gxName;
    /**
     * 创建人
     */
    private String createUser;
    /**
     * 用户名
     */
    private Long userId;
    /**
     * 用户所在单位
     */
    private List<String>  userUnit;
    /**
     * 县单位位
     */
    private List<String> countryUnit;
    private List<String> selfUnit;
    /**
     * 设备施工单位
     */
    private List<String> sgUnit;
    /**
     * 用户角色
     */
    private Long roleUnit;
    /**
     *
     */
    private String gxInfoId;
    /**
     *
     */
    private String gxStepNum;
    /**
     *
     */
    private String projectId;
    /**
     *
     */
    private Integer approvalStatus;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Long reportPerson;
    /**
     *
     */
    private List<Long> projectIds;
    /**
     *
     */
    private String startTime;
    /**
     *
     */
    private String endTime;
    /**
     * 工程规模
@@ -59,15 +132,42 @@
     */
    private String reportTime;
    /**
     * 标段
     */
    private String lot;
    /**
     * 项目排序 0状态 , 1进度 ,2注册码
     */
    private Integer projectSort;
    private String auditPerson;
    private Boolean isPage;
    private List<String> sgCodeS;
    /**
     * 建设期次
     */
    private String buildStage;
    /**
     * 子类型
     */
    private List<String> childTypeList;
    /**
     * 部门ID
     */
    private String deptId;
    /**
     * 是否单位过滤 1不过滤
     */
    private Integer isUnit;
    /**
     * 施工单位
     */
//    private String selfUnit;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/SgDeviceSearchDTO.java
@@ -1,11 +1,17 @@
package cn.gistack.sm.sg.DTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * 施工设备查询类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SgDeviceSearchDTO {
    private String deviceName;
    private String deviceType;
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/PtypeVO.java
@@ -18,5 +18,6 @@
public class PtypeVO {
    private String pTypeName;
    private String pTypeProgress;
    private Integer sort;
    private List<SgTypeVO> sgTypeVOS;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/ResVO.java
New file
@@ -0,0 +1,40 @@
package cn.gistack.sm.sg.VO;
import lombok.Data;
/**
 * 水库实体类
 */
@Data
public class ResVO {
    /**
     * 主键
     */
    private  String guid;
    /**
     * 市
     */
    private  String cityNm;
    /**
     * 县
     */
    private  String countyNm;
    /**
     * 水库
     */
    private  String resNm;
    /**
     * 注册登记号
     */
    private  String othRegCd;
    /**
     * 工程规模
     */
    private  String engScal;
    /**
     * 乡镇
     */
    private  String townNm;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgAllDeptOrUser.java
New file
@@ -0,0 +1,9 @@
package cn.gistack.sm.sg.VO;
import lombok.Data;
@Data
public class SgAllDeptOrUser {
    private Long id;
    private String name;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgOperatingRateVO.java
New file
@@ -0,0 +1,38 @@
package cn.gistack.sm.sg.VO;
import lombok.Data;
/**
 * 设备类型开工率VO
 */
@Data
public class SgOperatingRateVO {
    /**
     * 表面变形
     */
    private int surfaceNum;
    private int surfaceStartNum;
    private String surfaceProgress;
    /**
     * 视频
     */
    private int videoNum;
    private int videoStartNum;
    private String videoProgress;
    /**
     * 渗流压力
     */
    private int transNum;
    private int transStartNum;
    private String transProgress;
    /**
     * 渗流量
     */
    private int seepageNum;
    private int seepageStartNum;
    private String seepageProgress;
    private String proIds;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
@@ -20,4 +20,6 @@
    private Integer approvalStatus;
    private String stepRemark;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
@@ -32,4 +32,6 @@
    private String Ptype;
    private String PtypeName;
    private Integer resubmit;
    private Integer sort;
    private Integer dSort;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectTreeVO.java
New file
@@ -0,0 +1,70 @@
package cn.gistack.sm.sg.VO;
import lombok.Data;
import java.util.List;
/**
 * 项目树实体类
 */
@Data
public class SgProjectTreeVO {
    /**
     * id
     */
    private String id;
    /**
     * 层级
     */
    private Integer level;
    /**
     * 片区
     */
    private String lot;
    /**
     * 省
     */
    private String provinceNm;
    /**
     * 市
     */
    private String cityNm;
    /**
     * 县
     */
    private String countyNm;
    /**
     * 乡镇
     */
    private String townNm;
    /**
     * 水库名
     */
    private String resNm;
    /**
     * 子级水库数量
     */
    private Long childNum;
    /**
     * 项目ID集合
     */
    private List<String> projectIds;
    /**
     * 子列表
     */
    List<SgProjectTreeVO> childList;
    /**
     * 名称
     */
    private String regionName;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStatisProVO.java
@@ -24,27 +24,35 @@
     * 表面变形
     */
    private int surfaceNum;
    private int surfaceStartNum;
    private String surfaceProgress;
    /**
     * 视频
     */
    private int videoNum;
    private int videoStartNum;
    private String videoProgress;
    /**
     * 渗流压力
     */
    private int transNum;
    private int transStartNum;
    private String transProgress;
    /**
     * 渗流量
     */
    private int seepageNum;
    private int seepageStartNum;
    private String seepageProgress;
    private String proIds;
    /**
     * 建设期次
     */
    private String buildStage;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgTypeVO.java
@@ -17,5 +17,6 @@
    private String typeName;
    private String typeProgress;
    private String progress;
    private Integer sort;
    private List<SgDeviceDO> deviceDOS;
}
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Dept.java
@@ -116,6 +116,12 @@
    @ApiModelProperty(value = "工程区划")
    private String sgCode;
    /**
     * 片区 所属标段
     */
    @ApiModelProperty(value = "片区 所属标段")
    private String precinct;
    private String adGrad;
    private String resGuid;
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/DeptVO.java
@@ -81,4 +81,10 @@
     */
    private String deptCategoryName;
    private String sgCode;
    /**
     * 片区 所属标段
     */
    private String precinct;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -68,6 +68,14 @@
    }};
    /**
     * 6.1水位初次超汛限告警-合并水库
     */
    public static List<String>  waterFirstOverMergeWaterList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
     * 7.水位小幅超汛限告警
     */
    public static List<String>  waterSmallScaleOverList = new ArrayList<String>()
@@ -78,6 +86,14 @@
        add("over_1h");
        add("over_z");
        add("flse_lim_stag");
    }};
    /**
     * 7.1水位小幅超汛限告警-合并
     */
    public static List<String>  waterSmallScaleOverMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
@@ -161,6 +177,14 @@
    }};
    /**
     * 10.1 水位超设计洪水位告警处理-合并
     */
    public static List<String>  waterMoreDesignMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
     * 11 水位超校核洪水位告警
     */
    public static List<String>  waterMoreCheckList = new ArrayList<String>()
@@ -171,6 +195,14 @@
        add("over_chec_fl_stag");
        add("diff_dam");
        add("drp_24");
    }};
    /**
     * 11.1 水位超校核洪水位告警-合并
     */
    public static List<String>  waterMoreCheckMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
@@ -186,6 +218,14 @@
    }};
    /**
     * 12.1 近1h水位陡升-合并
     */
    public static List<String>  waterComeOneHourUpMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
     * 13 近1h水位陡降
     */
    public static List<String>  waterComeOneHourDownList = new ArrayList<String>()
@@ -195,6 +235,14 @@
        add("rz");
        add("over_1h");
        add("drp_24");
    }};
    /**
     * 13.1 近1h水位陡降-合并
     */
    public static List<String>  waterComeOneHourDownMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
@@ -209,6 +257,14 @@
    }};
    /**
     * 15.1 已降大雨告警-合并
     */
    public static List<String>  alreadyHeavyRainMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
     * 16 已降暴雨告警
     */
    public static List<String> alreadyRainstormList = new ArrayList<String>()
@@ -220,6 +276,14 @@
    }};
    /**
     * 16.1 已降暴雨告警合并
     */
    public static List<String> alreadyRainstormMergeList = new ArrayList<String>()
    {{
        add("town_nm,res_nm,1");
    }};
    /**
     * 18 6小时降雨告警
     */
    public static List<String> sixHourRainList = new ArrayList<String>()
@@ -230,6 +294,15 @@
        add("rz");
    }};
    /**
     * 18.1 6小时降雨告警-合并
     */
    public static List<String> sixHourRainMergeList = new ArrayList<String>()
    {{
        add("county_nm,town_nm,res_nm,1");
    }};
    /**
     * 19.坝安全监测告警-数据缺失
     */
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -203,22 +203,22 @@
        String uuid = alarmRuleDetail.getTemplateId() + UUID.randomUUID().toString();
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate
            = noticeHandle.getSendSmsTemplate(ztData, alarmRule, alarmRuleDetail, columnList, flag, adCode, uuid, isSendStation);
            = noticeHandle.getSendSmsTemplate(ztData, alarmRule, alarmRuleDetail, columnList, ZtApiDataColumnConstant.waterFirstOverMergeWaterList,flag, adCode, uuid, isSendStation);
        // 拼接后面内容
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次拼接巡查责任人,技术责任人姓名
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
                    list.get(9), list.get(11), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(11)))
                );
                list.remove(11);
//                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
//                    list.get(9), list.get(11), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(11)))
//                );
//                list.remove(11);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -265,17 +265,17 @@
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次拼接巡查责任人,技术责任人姓名
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
                    list.get(9), list.get(12), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(12)))
                );
                list.remove(12);
//                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
//                    list.get(9), list.get(12), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(12)))
//                );
//                list.remove(12);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -319,17 +319,17 @@
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次拼接巡查责任人,技术责任人姓名联系电话
                noticeHandle.addPatrolTechnologyInfo(list, true);
//                noticeHandle.addPatrolTechnologyInfo(list, true);
                // 拼接市县水利部人员姓名及联系方式
//                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
                    list.get(9), list.get(12), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(12)))
                );
                list.remove(12);
//                String remark = StringUtil.format("水位:{}\n汛限水位:{}米\n超汛限水位:{}米\n",
//                    list.get(9), list.get(12), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(12)))
//                );
//                list.remove(12);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -620,18 +620,18 @@
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                String remark = StringUtil.format("水位:{}\n设计洪水位:{}米\n超设计洪水位:{}米\n",
                    list.get(9), list.get(13), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(13)))
                );
                list.remove(13);
//                String remark = StringUtil.format("水位:{}\n设计洪水位:{}米\n超设计洪水位:{}米\n",
//                    list.get(9), list.get(13), String.format("%.2f", Double.valueOf(list.get(9).replace("米", "")) - Double.valueOf(list.get(13)))
//                );
//                list.remove(13);
//                System.out.println(remark);
                // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
                noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
//                noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -720,16 +720,16 @@
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
                noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
//                noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("水位:{}\n校核洪水位:{}米\n{}米\n",
                    list.get(9), list.get(10), list.get(11)
                );
//                String remark = StringUtil.format("水位:{}\n校核洪水位:{}米\n{}米\n",
//                    list.get(9), list.get(10), list.get(11)
//                );
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -815,18 +815,18 @@
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次添加行巡查责任人,技术责任人信息(姓名)
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
//                // 依次添加行巡查责任人,技术责任人信息,主管部门责任人(姓名)
//                noticeHandle.addPatrolTechnologyInfoNew(list, false);
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("近1h水位陡升:{}\n",
                    list.get(10)
                );
//                String remark = StringUtil.format("近1h水位陡升:{}\n",
//                    list.get(10)
//                );
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -869,16 +869,16 @@
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次添加行巡查责任人,技术责任人信息(姓名)
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
//                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("近1h水位陡降:{}\n",
                    list.get(10)
                );
//                String remark = StringUtil.format("近1h水位陡降:{}\n",
//                    list.get(10)
//                );
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -921,13 +921,13 @@
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次添加巡查责任人技术责任人信息姓名
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = list.get(9);
//                String remark = list.get(9);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -970,14 +970,14 @@
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次添加巡查责任人技术责任人信息姓名
                noticeHandle.addPatrolTechnologyInfo(list, false);
//                noticeHandle.addPatrolTechnologyInfo(list, false);
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = list.get(9);
//                String remark = list.get(9);
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -1021,16 +1021,16 @@
                // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
//                noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
                // 主管部门责任人,技术责任人,巡查责任人信息 2024-05-29修改
                noticeHandle.addWaterMoreDesignPatrolTechnologyInfoNew(list, "2,4,5");
//                noticeHandle.addWaterMoreDesignPatrolTechnologyInfoNew(list, "2,4,5");
                // 拼接市县水利部人员姓名及联系方式
                noticeHandle.addCityCountyBusinessPersonInfo(list);
                String remark = StringUtil.format("降雨:{}\n",
                    list.get(6) + "毫米"
                );
//                String remark = StringUtil.format("降雨:{}\n",
//                    list.get(6) + "毫米"
//                );
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, remark);
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
@@ -2432,7 +2432,7 @@
     *
     * @param alarmRule       告警规则
     * @param alarmRuleDetail 告警规则详情
     * @param ztData            中台数据
     * @param data            中台数据
     * @param columnList      需要展示的数据字段
     * @param flag            是否显示日期
     * @param adCode          行政区划
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -38,6 +38,7 @@
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.jetbrains.annotations.NotNull;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
@@ -118,6 +119,12 @@
        if (null != smsTemplate) {
            // 创建消息发送对象
            SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
            // 通过模板id 查询模板相关信息(外呼对应的模板id则为场景id)
            SmsTemplate mergeSmsTemplate
                = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("id", alarmRuleDetail.getMergeTemplateId()).eq("is_deleted", 0));
            if (null!=mergeSmsTemplate){
                smsRequestTemplate.setSmsTemplateMerge(mergeSmsTemplate);
            }
            // 设置是否发送站内信
            smsRequestTemplate.setIsSendStation(isSendStation);
            // 设置告警信息
@@ -127,7 +134,52 @@
            // 解析模板并设置 title
            smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
            // 列名数据转换
            getColumnData(jsonArray, columnsList, smsRequestTemplate, alarmRuleDetail, flag, adCode, uuid);
            getColumnData(jsonArray, columnsList,null, smsRequestTemplate, alarmRuleDetail, flag, adCode, uuid);
            //返回
            return smsRequestTemplate;
        }
        return null;
    }
    /**
     * 短信发送数据组装(包含了合并水库名称)
     *
     * @param jsonArray       告警动态数据
     * @param alarmRule       告警规则信息
     * @param alarmRuleDetail 告警规则详情信息
     * @param columnsList     列名集合信息
     * @param mergeColumnsList     合并列名集合信息(合并水库名称)
     * @param flag            是否包含日期
     * @param adCode          行政区编号(是否过滤区县数据)
     * @param uuid            本次执行临时编号
     * @param isSendStation   是否发送站内信
     * @return
     */
    public SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
                                                 AlarmRule alarmRule,
                                                 AlarmRuleDetail alarmRuleDetail,
                                                 List<String> columnsList,
                                                 List<String> mergeColumnsList,
                                                 Boolean flag,
                                                 String adCode,
                                                 String uuid,
                                                 Boolean isSendStation) {
        // 通过模板id 查询模板相关信息(外呼对应的模板id则为场景id)
        SmsTemplate smsTemplate
            = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("id", alarmRuleDetail.getTemplateId()).eq("is_deleted", 0));
        if (null != smsTemplate) {
            // 创建消息发送对象
            SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
            // 设置是否发送站内信
            smsRequestTemplate.setIsSendStation(isSendStation);
            // 设置告警信息
            smsRequestTemplate.setAlarmRule(alarmRule);
            // 设置模板信息
            smsRequestTemplate.setSmsTemplate(smsTemplate);
            // 解析模板并设置 title
            smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
            // 列名数据转换
            getColumnData(jsonArray, columnsList, mergeColumnsList, smsRequestTemplate, alarmRuleDetail, flag, adCode, uuid);
            //返回
            return smsRequestTemplate;
        }
@@ -148,6 +200,7 @@
     */
    private void getColumnData(JSONArray jsonArray,
                               List<String> columnsList,
                               List<String> mergeColumnsList,
                               SmsRequestTemplate smsRequestTemplate,
                               AlarmRuleDetail alarmRuleDetail,
                               Boolean flag,
@@ -157,147 +210,305 @@
        List<PersonVO> personLists = new ArrayList<>();
        // 告警内容
        List<List<String>> lists = new ArrayList<>();
        // 合并告警内容集合
        List<List<String>> moreLists = new ArrayList<>();
        // 创建set对象用于去重处理
        Set<String> set = new HashSet<>();
        // 查询对应的角色信息
        List<String> roles = sysClient.getRoleNames(alarmRuleDetail.getAlarmPerson()).getData();
        // 遍历处理数据
        for (int i = 0; i < jsonArray.size(); i++) {
            if (null != adCode) {
                // city_cd,county_cd 过滤数据
                String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
                if (null != county_cd && county_cd.equals(adCode)) {
//                    jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
                    jointDataV2(jsonArray, columnsList, alarmRuleDetail, roles, flag, personLists, lists, i, uuid, set);
                    jointDataV2(jsonArray, columnsList,mergeColumnsList, alarmRuleDetail, roles, flag, personLists, lists,moreLists, i, uuid, set);
                }
            } else {
//                jointData(jsonArray, columnsList, alarmRuleDetail, flag, personLists, lists, i,uuid,set);
                jointDataV2(jsonArray, columnsList, alarmRuleDetail, roles, flag, personLists, lists, i, uuid, set);
                jointDataV2(jsonArray, columnsList,mergeColumnsList, alarmRuleDetail, roles, flag, personLists, lists,moreLists, i, uuid, set);
            }
        }
        // 设置信息
        smsRequestTemplate.setPersonVOList(personLists);
        smsRequestTemplate.setTemplateContent(lists);
        smsRequestTemplate.setTemplateMergeContent(moreLists);
    }
    private void jointDataV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String uuid, Set<String> set) {
    /**
     * 设置合并数据
     * @param jsonArray          告警动态数据
     * @param columnsList        告警动态内容 key
     * @param alarmRuleDetail    告警人员角色ids
     * @param flag               告警内容是否日期
     * @param personLists        人员集合
     * @param lists              告警内容集合
     * @param i                  遍历集合的索引
     * @param uuid                 uuid
     * @param set                 用于去重
     */
    private void jointDataV2(JSONArray jsonArray,
                             List<String> columnsList,
                             List<String> mergeColumnsList,
                             AlarmRuleDetail alarmRuleDetail,
                             List<String> roles,
                             Boolean flag,
                             List<PersonVO> personLists,
                             List<List<String>> lists,
                             List<List<String>> moreLists,
                             int i,
                             String uuid,
                             Set<String> set) {
        // 根据水库编号,所在区域查询需要发送的人员手机号及设置
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        String res_cd = jsonObject.getString("res_cd");
        String res_nm = jsonObject.getString("res_nm");
        String town_nm = jsonObject.getString("town_nm");
        String county_nm = jsonObject.getString("county_nm");
        String city_nm = jsonObject.getString("city_nm");
        log.info("当前为第{}个水库,行政区划:{}-{}-{},水库编码:{},水库名称:{}", i + 1, city_nm, county_nm, town_nm, res_cd, res_nm);
        // 取出测站编码
//        String stcd = jsonArray.getJSONObject(i).getString("stcd");
//        if (StringUtil.isBlank(stcd)) {
//            stcd = jsonArray.getJSONObject(i).getString("cd");
//        }
//        //如果stcd是空的就设置为-1
//        if (StringUtil.isBlank(stcd)){
//            stcd = "-1";
//        }
        log.info("当前为第{}个水库,行政区划:{}-{}-{},水库编码:{},水库名称:{}", i + 1,
            jsonObject.getString("city_nm"), jsonObject.getString("county_nm"), jsonObject.getString("town_nm"), res_cd, jsonObject.getString("res_nm"));
        // 设置临时字符串,用于去重判断
        String tempStr = uuid + res_cd;
        // 去重水库操作,如果有重复的水库则不操作
        if (!set.contains(tempStr)) {
            set.add(tempStr);
            String stcd = jsonArray.getJSONObject(i).getString("stcd");
            if (StringUtil.isBlank(stcd)) {
                stcd = jsonArray.getJSONObject(i).getString("rain_stcd");
            }
            if (StringUtil.isBlank(stcd)) {
                stcd = jsonArray.getJSONObject(i).getString("cd");
            }
            //如果stcd是空的就设置为-1
            if (StringUtil.isBlank(stcd)){
                stcd = "-1";
            }
            // 判断时间是否存在
            String tm = jsonArray.getJSONObject(i).getString("tm");
            String day = "";
            String hour = "";
            String minute = "";
            if (null != tm && !tm.equals("") && flag) {
                //如果显示日期,并且中台的日期不为空,则使用中台的日期
                flag = true;
                // 加入天,时,分
                day = tm.substring(8, 10);
                hour = tm.substring(11, 13);
                minute = tm.substring(14, 16);
            } else if (flag) {
                //如果显示日期,但是中台没传日期,就使用当前时间
                Date now = DateUtil.now();
                String formatTm = DateUtil.format(now, DateUtil.PATTERN_DATETIME);
                // 加入天,时,分
                day = formatTm.substring(8, 10);
                hour = formatTm.substring(11, 13);
                minute = formatTm.substring(14, 16);
            } else {
                flag = false;
            }
            // 获取告警人员信息
//            getAlarmPersonList(jsonArray, columnsList, alarmRuleDetail,flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
            JSONObject jsonData = jsonArray.getJSONObject(i);
            //这里把jsonObject传过去
            getAlarmPersonListV2(jsonArray, columnsList, alarmRuleDetail, roles, flag, personLists, lists, i, res_cd, day, hour, minute, stcd,jsonData);
        }
    }
    private void getAlarmPersonListV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String res_cd, String day, String hour, String minute, String stcd,JSONObject jsonData) {
        // 查询告警人员信息
//        List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRuleDetail.getAlarmPerson());
        List<PersonVO> personVOList = getPersonListByResGuidV2(res_cd, roles);
        if (personVOList.size() > 0) {
            List<PersonVO> personVOList = getPersonListByResGuidV2(res_cd, roles);
            // 按发送人员手机号进行告警内容数据拼接
            for (PersonVO personVO : personVOList) {
                // 处理重复发送手机号,跳出本次循环,直接进行下一次循环
                if (!isAdd(lists, res_cd, personVO)){
                    break;
                }
                // 开始拼接内容
                List<String> list = new ArrayList<>();
                list.add(stcd);
                // 测站编号处理
                stcdHandle(jsonArray, i, list);
                // 加入水库编号、手机号
                list.add(res_cd);
                list.add(personVO.getPhone());
                //拿测点值
                String val = "";
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                val = jsonObject.getString("monitorData");
                list.add(val);
                if (flag) {
                    // 如果是电话告警,需要把日期拼到一起
                    if (alarmRuleDetail.getAlarmMode().equals("电话")) {
                        String tem = day + "日" + hour + "时" + minute + "分";
                        list.add(tem);
                    } else {
                        list.add(day);
                        list.add(hour);
                        list.add(minute);
                    }
                list.add(Strings.isBlank(jsonObject.getString("monitorData"))?"":jsonObject.getString("monitorData"));
                //日期处理
                flag = timeHandle(jsonArray, alarmRuleDetail, flag, i, list);
                // 合并水库名称
                boolean isMerge = Strings.isBlank(alarmRuleDetail.getMergeTemplateId())?
                    mergeResName(jsonArray, columnsList,lists, i, personVO,list.size()):
                    mergeResName(jsonArray,list, mergeColumnsList,lists,moreLists, i, personVO,list.size());
                if (isMerge){
                    break;
                }
                // 最后动态将变量将值放入集合中
                for (String column : columnsList) {
                    String[] split = column.split(",");
                    String format = "";
                    format = addAlarmContent(jsonArray,i,split,format);
                    // 加入集合
                    list.add(format);
                }
                // 加入告警内容集合
                lists.add(list);
            }
            personLists.addAll(personVOList);
        }
    }
    /**
     * 日期处理
     * @param jsonArray
     * @param alarmRuleDetail
     * @param flag
     * @param i
     * @param list
     * @return
     */
    @NotNull
    private Boolean timeHandle(JSONArray jsonArray, AlarmRuleDetail alarmRuleDetail, Boolean flag, int i, List<String> list) {
        // 判断时间是否存在
        String tm = jsonArray.getJSONObject(i).getString("tm");
        String day = "";
        String hour = "";
        String minute = "";
        if (!Strings.isBlank(tm) && flag) {
            //如果显示日期,并且中台的日期不为空,则使用中台的日期
            flag = true;
            // 加入天,时,分
            day = tm.substring(8, 10);
            hour = tm.substring(11, 13);
            minute = tm.substring(14, 16);
        } else if (flag) {
            //如果显示日期,但是中台没传日期,就使用当前时间
            Date now = DateUtil.now();
            String formatTm = DateUtil.format(now, DateUtil.PATTERN_DATETIME);
            // 加入天,时,分
            day = formatTm.substring(8, 10);
            hour = formatTm.substring(11, 13);
            minute = formatTm.substring(14, 16);
        } else {
            flag = false;
        }
        if (flag) {
            // 如果是电话告警,需要把日期拼到一起
            if (alarmRuleDetail.getAlarmMode().equals("电话")) {
                String tem = day + "日" + hour + "时" + minute + "分";
                list.add(tem);
            } else {
                list.add(day);
                list.add(hour);
                list.add(minute);
            }
        }
        return flag;
    }
    /**
     * 测站编号处理
     * @param jsonArray
     * @param i
     * @param list
     */
    private void stcdHandle(JSONArray jsonArray, int i, List<String> list) {
        String stcd = jsonArray.getJSONObject(i).getString("stcd");
        if (StringUtil.isBlank(stcd)) {
            stcd = jsonArray.getJSONObject(i).getString("rain_stcd");
        }
        if (StringUtil.isBlank(stcd)) {
            stcd = jsonArray.getJSONObject(i).getString("cd");
        }
        //如果stcd是空的就设置为-1
        if (StringUtil.isBlank(stcd)){
            stcd = "-1";
        }
        list.add(stcd);
    }
    /**
     * 如果存在一个人对应水库有重复的则不新增
     * @param lists
     * @param res_cd
     * @param personVO
     * @return
     */
    private boolean isAdd(List<List<String>> lists, String res_cd, PersonVO personVO) {
        boolean isAdd = true;
        for (List<String> listStr : lists) {
            // 如果水库编号和手机号都一致,则不新增
            if (listStr.contains(res_cd) && listStr.contains(personVO.getPhone())) {
                isAdd = false;
                break;
            }
        }
        return isAdd;
    }
    /**
     * 合并水库名称内容
     * @param jsonArray 告警数据
     * @param columnsList 告警列
     * @param lists 告警内容
     * @param i 集合索引
     * @param personVO 人员信息
     * @param index 索引
     * @return
     */
    private boolean mergeResName(JSONArray jsonArray,
                                 List<String> columnsList,
                                 List<List<String>> lists,
                                 int i,
                                 PersonVO personVO,
                                 int index) {
        boolean isMerge = false;
        for (List<String> listStr : lists) {
            // 如果告警人员已经存在,则需要按规则判断是否合并水库名称,将当前人员告警内容中的水库名称合并
            if (listStr.contains(personVO.getPhone())) {
                isMerge = true;
                // 判断合并的水库名称是否超过3个,超过3个则不在合并,直接舍弃
                String resNames = listStr.get(index);
                int length = resNames.split("、").length;
                if (length>2){
                    break;
                }
                // 变量将值放入集合中
                for (String column : columnsList) {
                    String[] split = column.split(",");
                    String format = "";
                    // 内容处理
                    format = addAlarmContent(jsonArray, i, split, format);
//                    format = addAlarmContentV2(jsonData,split,format);
                    // 加入集合
                    list.add(format);
                }
                //处理重复发送手机号
                boolean isAdd = true;
                for (List<String> listStr : lists) {
                    if (listStr.contains(res_cd) && listStr.contains(personVO.getPhone())) {
                        isAdd = false;
                        break;
                    String lastString = split[split.length-1];
                    if (lastString.equals("1")) {
                        // 需要合并数据,目前只会合并乡镇水库名称,其他情况不处理
                        for (String s : split) {
                            // 乡镇水库拼接
                            format = format + jsonArray.getJSONObject(i).getString(s);
                        }
                        format = format.replaceAll("null","");
                        // 合并水库名称信息,2個以上拼接等
                        if (length==2){
                            listStr.set(index,listStr.get(index) + "、" + format + "等");
                        }else {
                            listStr.set(index, listStr.get(index) + "、" + format);
                        }
                    }
                }
                if (isAdd)
                    lists.add(list);
                break;
            }
        }
        personLists.addAll(personVOList);
        return isMerge;
    }
    /**
     * 合并水库名称内容--暂不启用
     * @param jsonArray 告警数据
     * @param list 当前告警内容
     * @param columnsList 告警列(合并)
     * @param lists 告警内容
     * @param moreLists 合并告警内容
     * @param i 集合索引
     * @param personVO 人员信息
     * @param index 索引
     * @return
     */
    private boolean mergeResName(JSONArray jsonArray,
                                 List<String> list,
                                 List<String> columnsList,
                                 List<List<String>> lists,
                                 List<List<String>> moreLists,
                                 int i,
                                 PersonVO personVO,
                                 int index) {
        boolean isMerge = false;
        for (List<String> listStr : lists) {
            // 如果告警人员已经存在,则需要按规则判断是否合并水库名称,将当前人员告警内容中的水库名称合并
            if (listStr.contains(personVO.getPhone())) {
                isMerge = true;
                // 判断合并的水库名称是否超过3个,超过3个则不在合并,直接舍弃
                String resNames = listStr.get(index);
                int length = resNames.split("、").length;
                if (length>2){
                    break;
                }
                // 变量将值放入集合中
                for (String column : columnsList) {
                    String[] split = column.split(",");
                    String format = "";
                    String lastString = split[split.length-1];
                    if (lastString.equals("1")) {
                        // 需要合并数据,目前只会合并乡镇水库名称,其他情况不处理
                        for (String s : split) {
                            // 乡镇水库拼接
                            format = format + jsonArray.getJSONObject(i).getString(s);
                        }
                        format = format.replaceAll("null","");
                        // 合并水库名称信息,2個以上拼接等
                        if (length==2){
                            list.add(listStr.get(index) + "、" + format + "等");
                        }else {
                            list.add(listStr.get(index) + "、" + format);
                        }
                    }
                }
                // 加入合并的集合
                moreLists.add(list);
                break;
            }
        }
        return isMerge;
    }
    private List<PersonVO> getPersonListByResGuidV2(String res_cd, List<String> roles) {
@@ -451,6 +662,7 @@
     * @return
     */
    private String addAlarmContent(JSONArray jsonArray, int i, String[] split, String format) {
        // 无需合并数据
        for (String s : split) {
            // 超汛限水位
            if (s.equals("over_z")) {
@@ -510,12 +722,11 @@
            } else {
                format = format + jsonArray.getJSONObject(i).getString(s);
            }
            format = format.replaceAll("null","");
        }
        // 返回
        return format;
    }
    /**
     * 告警内容拼接处理
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -218,7 +218,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.waterFirstOverHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterFirstOverList, true, adCode, false);
                        asyncNoticeHandle.waterFirstOverHandle(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterFirstOverMergeWaterList, true, adCode, false);
                    }
                }
            }
@@ -250,10 +250,10 @@
            if (alarmRuleDetailList.size() > 0) {
                // 遍历
                if (alarmRuleDetailList.get(0).getAlarmMode().equals("短信")) {
                    asyncNoticeHandle.waterSmallScaleOverHandle1(alarmRule, alarmRuleDetailList.get(0), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
                    asyncNoticeHandle.waterSmallScaleOverHandle1(alarmRule, alarmRuleDetailList.get(0), ztData, ZtApiDataColumnConstant.waterSmallScaleOverMergeList, true, adCode, false, uuid);
                }
                if (alarmRuleDetailList.get(1).getAlarmMode().equals("短信")) {
                    asyncNoticeHandle.waterSmallScaleOverHandle2(alarmRule, alarmRuleDetailList.get(1), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
                    asyncNoticeHandle.waterSmallScaleOverHandle2(alarmRule, alarmRuleDetailList.get(1), ztData, ZtApiDataColumnConstant.waterSmallScaleOverMergeList, true, adCode, false, uuid);
                }
            }
        }
@@ -391,7 +391,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.waterMoreDesignHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreDesignList, true, adCode, false, uuid);
                        asyncNoticeHandle.waterMoreDesignHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreDesignMergeList, true, adCode, false, uuid);
                    }
//                    if (alarmRuleDetail.getAlarmMode().equals("电话") && isTimeSend()) {
//                        asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterMoreDesignList,true, adCode, false,uuid);
@@ -425,7 +425,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.waterMoreCheckHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreCheckList, true, adCode, false, uuid);
                        asyncNoticeHandle.waterMoreCheckHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreCheckMergeList, true, adCode, false, uuid);
                    }
//                    if (alarmRuleDetail.getAlarmMode().equals("电话") && isTimeSend()) {
//                        asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterMoreCheckList,true, adCode, false,uuid);
@@ -459,7 +459,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.waterComeOneHourUpHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourUpList, true, adCode, false, uuid);
                        asyncNoticeHandle.waterComeOneHourUpHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourUpMergeList, true, adCode, false, uuid);
                    }
                }
            }
@@ -490,7 +490,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.waterComeOneHourDownHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourDownList, true, adCode, false, uuid);
                        asyncNoticeHandle.waterComeOneHourDownHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourDownMergeList, true, adCode, false, uuid);
                    }
                }
            }
@@ -533,7 +533,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.alreadyHeavyRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyHeavyRainList, false, adCode, false);
                        asyncNoticeHandle.alreadyHeavyRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyHeavyRainMergeList, false, adCode, false);
                    }
                }
            }
@@ -564,7 +564,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.alreadyRainstormHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyRainstormList, false, adCode, false);
                        asyncNoticeHandle.alreadyRainstormHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyRainstormMergeList, false, adCode, false);
                    }
                }
            }
@@ -608,7 +608,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.sixHourRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.sixHourRainList, false, adCode, false, uuid);
                        asyncNoticeHandle.sixHourRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.sixHourRainMergeList, false, adCode, false, uuid);
                    }
//                    if (alarmRuleDetail.getAlarmMode().equals("电话") && isTimeSend()) {
//                        asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.sixHourRainList,true, adCode, false,uuid);
@@ -1652,7 +1652,7 @@
            //左右岸方向
            Double dnVal = jsonObject.getDouble("dn_val");
            //垂直
            Double duValue = jsonObject.getDouble("垂直位移");
            Double duValue = jsonObject.getDouble("du_value");
            String direction = "";
            String val = "";
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -204,39 +204,72 @@
    @Override
    public Map<String, Object> sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
        // 取出数据
        SMSSendRequest request = new SMSSendRequest();
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        request.setTemplateId(smsTemplate.getTemplateId());
        // 合并
        SmsTemplate smsTemplateMerge = smsRequestTemplate.getSmsTemplateMerge();
        // 告警内容
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        // 合并水库告警内容
        List<List<String>> templateTemplateMergeContent = smsRequestTemplate.getTemplateMergeContent();
        // 获取告警规则
        AlarmRule alarmRule = smsRequestTemplate.getAlarmRule();
        // 是否同时发送站内信
        Boolean isSendStation = false;
        if (null!=smsRequestTemplate.getIsSendStation()){
            isSendStation = smsRequestTemplate.getIsSendStation();
        }
        // 判断 templateContent 个数,个数超过1000 需要分段发送短信
        List<List<List<String>>> lists = Lists.partition(templateContent, 1000);
        int number = 0;
        for (List<List<String>> list : lists) {
            // 临时保存告警记录用
            List<List<String>> templateList = getAlarmList(list);
            // 批量发送短信
            Map<String, Object> map = batchSendAlertsSms(smsRequestTemplate.getSmsTemplate(), list);
            int count = Integer.parseInt(map.get("errCount").toString());
            ComResult<DynSMSSendDataResult> resultComResult =(ComResult<DynSMSSendDataResult>) map.get("resultComResult");
            // 保存短信结果记录
            SmsResult smsResult = saveSendResult(alarmRule.getId(),resultComResult.getCode().toString(),resultComResult.getMsg(),request, list.size() - count);
            // 保存详情记录(短信详情,告警详情)
            List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult,resultComResult,smsRequestTemplate.getSmsTemplate(),
                templateList,request,smsRequestTemplate.getAlarmRule(),isSendStation);
            // number 累加
            number += smsRecordList.size();
        }
        // 设置返回数据
        Map<String, Object> params = new HashMap<>(1);
        params.put("sendNumber",number);
        Map<String, Object> map = new HashMap<>(2);
        // 发送消息处理
        Map<String, Object> params = sendSmsReturnStringObjectMap(smsTemplate, templateContent, alarmRule, isSendStation);
        // 发送合并水库消息处理
        Map<String, Object> mergeParams = sendSmsReturnStringObjectMap(smsTemplateMerge, templateTemplateMergeContent, alarmRule, isSendStation);
        // 合并返回数据
        map.put("oneMap",params);
        map.put("moreMap",mergeParams);
        // 返回
        return params;
        return map;
    }
    /**
     * 发送消息处理
     * @param smsTemplate
     * @param templateContent
     * @param alarmRule
     * @param isSendStation
     * @return
     */
    @NotNull
    private Map<String, Object> sendSmsReturnStringObjectMap(SmsTemplate smsTemplate,
                                                             List<List<String>> templateContent,
                                                             AlarmRule alarmRule,
                                                             Boolean isSendStation) {
        if (null!=smsTemplate) {
            // 取出数据
            SMSSendRequest request = new SMSSendRequest();
            request.setTemplateId(smsTemplate.getTemplateId());
            // 判断 templateContent 个数,个数超过1000 需要分段发送短信
            List<List<List<String>>> lists = Lists.partition(templateContent, 1000);
            int number = 0;
            for (List<List<String>> list : lists) {
                // 临时保存告警记录用
                List<List<String>> templateList = getAlarmList(list);
                // 批量发送短信
                Map<String, Object> map = batchSendAlertsSms(smsTemplate, list);
                int count = Integer.parseInt(map.get("errCount").toString());
                ComResult<DynSMSSendDataResult> resultComResult = (ComResult<DynSMSSendDataResult>) map.get("resultComResult");
                // 保存短信结果记录
                SmsResult smsResult = saveSendResult(alarmRule.getId(), resultComResult.getCode().toString(), resultComResult.getMsg(), request, list.size() - count);
                // 保存详情记录(短信详情,告警详情)
                List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult, resultComResult, smsTemplate,
                    templateList, request, alarmRule, isSendStation);
                // number 累加
                number += smsRecordList.size();
            }
            // 设置返回数据
            Map<String, Object> params = new HashMap<>(1);
            params.put("sendNumber", number);
        }
        return null;
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/SmsRequestTemplate.java
@@ -52,6 +52,12 @@
     */
    private List<List<String>> templateContent;
    /**
     * 合并内容(短信内容)--临时
     */
    private List<List<String>> templateMergeContent;
    /**
     * 类型 1:遍历发送  2:批量发送(一次发多个)
     */
@@ -63,6 +69,11 @@
    private SmsTemplate smsTemplate;
    /**
     * 短信模板对象信息(合并的模板)
     */
    private SmsTemplate smsTemplateMerge;
    /**
     * 是否发送站内信
     */
    private Boolean isSendStation;
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.java
@@ -15,4 +15,12 @@
     */
    @DS("zt")
    List<Map<String, String>> getResInfo(@Param("list") List<String> resGuidList);
    /**
     * 按水库编号查询水库是否为2022高标准
     * @param res_cd
     * @return
     */
    @DS("zt")
    String getResInfoBy2022(@Param("resCd") String res_cd);
}
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.xml
@@ -42,5 +42,9 @@
        )
    </select>
    <!--按水库编号查询水库是否为2022高标准-->
    <select id="getResInfoBy2022" resultType="java.lang.String">
        select a."guid" from SJZT_MD."att_res_base" a where a."label" like '%2022高标准%' and a."guid" = #{resCd}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java
@@ -126,7 +126,7 @@
            JSONObject jsonObject = ztData.getJSONObject(i);
            Map<String,Object> map = new HashMap<>();
            // 水库信息设置
            flag = waterInfoSet(jsonObject, map,flag);
            flag = waterInfoSet(jsonObject, map);
            if (flag) {
                // 测点信息设置
                flag = pointValueInfoSet(jsonObject, map, type,flag);
@@ -134,6 +134,7 @@
            if (flag) {
                map.put("batchId",UUID.randomUUID());
                map.put("serialNo",getSerialNo());
                log.info("发送数据:{}",map);
                // 发送请求
                String response = sendPostJsonRequest(OpenApiConstant.POINT_VALUE_INLET_URL, map);
                JSONObject parseObject = JSON.parseObject(response);
@@ -149,23 +150,27 @@
     * @param jsonObject
     * @param map
     */
    private boolean waterInfoSet(JSONObject jsonObject, Map<String, Object> map,boolean flag) {
    private boolean waterInfoSet(JSONObject jsonObject, Map<String, Object> map) {
        String rz = jsonObject.getString("rz");
        flag = false;
        if (!Strings.isBlank(rz)) {
            flag = true;
            String res_cd = replaceSpecialStr(jsonObject.getString("res_cd"));
            List<Map<String, Object>> waterLevelInfoList = new ArrayList<>();
            Map<String, Object> waterLevelInfoMap = new HashMap<>();
            waterLevelInfoMap.put("damCode", res_cd);
            waterLevelInfoMap.put("waterLevel", jsonObject.getString("rz"));
            waterLevelInfoMap.put("waterLevelTime", jsonObject.getString("rz_tm"));
            waterLevelInfoMap.put("rainCondition", jsonObject.getString("drp"));
            waterLevelInfoMap.put("rainConditionTime", jsonObject.getString("drp_tm"));
            waterLevelInfoList.add(waterLevelInfoMap);
            map.put("waterLevelInfo", waterLevelInfoList);
        if(Strings.isBlank(rz)){
            return false;
        }
        return flag;
        // 需要过滤2022高标准水库才发送
        String res_cd = replaceSpecialStr(jsonObject.getString("res_cd"));
        String flag = openApiMapper.getResInfoBy2022(res_cd);
        if (Strings.isBlank(flag)){
            return false;
        }
        List<Map<String, Object>> waterLevelInfoList = new ArrayList<>();
        Map<String, Object> waterLevelInfoMap = new HashMap<>();
        waterLevelInfoMap.put("damCode", res_cd);
        waterLevelInfoMap.put("waterLevel", jsonObject.getString("rz"));
        waterLevelInfoMap.put("waterLevelTime", jsonObject.getString("rz_tm"));
        waterLevelInfoMap.put("rainCondition", jsonObject.getString("drp"));
        waterLevelInfoMap.put("rainConditionTime", jsonObject.getString("drp_tm"));
        waterLevelInfoList.add(waterLevelInfoMap);
        map.put("waterLevelInfo", waterLevelInfoList);
        return true;
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/controller/ReportFloodRecordController.java
@@ -4,6 +4,7 @@
import cn.gistack.sm.reportFlood.entity.ReportFloodRecord;
import cn.gistack.sm.reportFlood.service.IReportFloodRecordService;
import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -33,6 +34,15 @@
    private IReportFloodRecordService reportFloodRecordService;
    private IFlowClient flowClient;
    @GetMapping(value = "/isExistByTime")
    public R isExistByTime(String reservoirId,String time) {
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("reservoir_id" ,reservoirId);
        queryWrapper.eq("report_time" ,time);
        return R.data(reportFloodRecordService.count(queryWrapper) > 0);
    }
    /**
     * 分页列表查询
     */
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
@@ -2,13 +2,11 @@
import cn.gistack.sm.sg.DO.SgProjectInfoDO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProjectInfoVO;
import cn.gistack.sm.sg.VO.SgStatisProVO;
import cn.gistack.sm.sg.VO.SgStatistccVO;
import cn.gistack.sm.sg.VO.SgStatisticsVO;
import cn.gistack.sm.sg.VO.*;
import cn.gistack.sm.sg.excel.ProjectExcel;
import cn.gistack.sm.sg.excel.ProjectImport;
import cn.gistack.sm.sg.service.SgProjectInfoService;
import cn.gistack.sm.sjztmd.entity.AttResBase;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import org.springblade.core.boot.ctrl.BladeController;
@@ -44,7 +42,7 @@
        Query query = new Query();
        query.setCurrent(searchDTO.getCurrent());
        query.setSize(searchDTO.getSize());
        IPage<SgProjectInfoDO> page = sgProjectInfoService.queryPageList(Condition.getPage(query), searchDTO);
        Object page = sgProjectInfoService.queryPageList(Condition.getPage(query), searchDTO);
        return R.data(page);
    }
@@ -138,15 +136,43 @@
    @PostMapping("add")
    public R add(@RequestBody SgProjectInfoDO sgProjectInfoDO) {
        sgProjectInfoService.save(sgProjectInfoDO);
        return R.success("新增成功");
        return R.data(sgProjectInfoDO);
    }
    /**
     * 新增项目
     * 修改项目
     */
    @PostMapping("update")
    public R update(@RequestBody SgProjectInfoDO sgProjectInfoDO) {
        sgProjectInfoService.updateById(sgProjectInfoDO);
        return R.success("修改成功");
    }
    /**
     * 项目树
     */
    @GetMapping("project_tree")
    public R projectTree(ProjectSearchDTO dto) {
    List<SgProjectTreeVO> tree = sgProjectInfoService.projectTree(dto);
        return R.data(tree);
    }
    /**
     * 水库列表
     */
    @GetMapping("res_list")
    public R resList(ProjectSearchDTO dto,Query query) {
        IPage<ResVO> page= sgProjectInfoService.resList(Condition.getPage(query),dto);
        return R.data(page);
    }
    /**
     * 删除项目
     */
    @PostMapping("delete")
    public R delete(@RequestParam(name="ids",required=true)  String ids) {
        sgProjectInfoService.delete(ids);
        return R.success("删除成功");
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgDeviceMapper.xml
@@ -17,6 +17,7 @@
        <if test="dto.deviceType != null and dto.deviceType != ''">
            and ds.device_type = #{dto.deviceType}
        </if>
        order by dict.sort, TO_NUMBER (ds.price) asc NULLS LAST
    </select>
    <select id="getSgDeviceById" resultType="cn.gistack.sm.sg.DO.SgDeviceDO">
        select ds.*,project.project_name as programName,dict."DICT_VALUE" as typeName from YWXT."SG_DEVICE" as ds left join YWXT."SG_PROJECT_INFO"  as project  on ds.program_id=project.id
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxMapper.java
@@ -28,4 +28,6 @@
    SgGxDO selectByGxType(@Param("gxType") String gxType);
    SgGxVO getById(@Param("id") Long id);
    List<String> childType(@Param("gxType") String gxType);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxMapper.xml
@@ -3,9 +3,15 @@
<mapper namespace="cn.gistack.sm.sg.mapper.SgGxMapper">
    <select id="queryPageList" resultType="cn.gistack.sm.sg.VO.SgGxVO">
        select * from  YWXT.SG_GX gx where 1=1 and GX_TYPE not in('sgzb','sgys')
        select * from  YWXT.SG_GX gx where 1=1 and GX_TYPE not in('cldw','sgys')
        <if test="dto.gxType != null and dto.gxType != ''">
            and gx.gx_type LIKE CONCAT('%', #{dto.gxType}, '%')
            and gx.gx_type  = #{dto.gxType}
            <if test="dto.childTypeList != null and !dto.childTypeList.isEmpty()">
                or gx.gx_type in
                <foreach collection="dto.childTypeList" open="(" close=")" separator="," item="id">
                    #{id}
                </foreach>
            </if>
        </if>
        <if test="dto.gxName != null and dto.gxName != ''">
            and gx.gx_name LIKE CONCAT('%', #{dto.gxName}, '%')
@@ -26,4 +32,7 @@
    <select id="getById" resultType="cn.gistack.sm.sg.VO.SgGxVO">
        select * from  YWXT.SG_GX  where id = #{id}
    </select>
    <select id="childType" resultType="java.lang.String">
        select dict_key from "YWXT"."BLADE_DICT_BIZ" where parent_id = (select id from "YWXT"."BLADE_DICT_BIZ" where dict_key = #{gxType});
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml
@@ -38,7 +38,7 @@
    <select id="getDEviceGXtwo" resultType="cn.gistack.sm.sg.DO.SgGxStepDO">
        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
           GX.GX_TYPE in ('sgzb','sgys') order by  id asc
           GX.GX_TYPE in ('cldw','sgys') order by  id asc
    </select>
    <select id="queryStepLists" resultType="cn.gistack.sm.sg.DO.SgGxStepDO">
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
@@ -42,4 +42,10 @@
    Long selectProframId(Long deviceId);
    List<SgReportUserDO> selectProcessUserByProjectId(@Param("programId") Long programId);
    List<Map<String, Object>> getRoleByIds(@Param("ids")List<Long> rids);
    List<Long> getSgEngineerRole();
    List<Map<String, Object>> getUserByIdsCounty(@Param("ids") List<Long> ids);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
@@ -31,6 +31,7 @@
        <if test="dto.endTime != null and dto.endTime !='' ">
            and report.report_time &lt;= #{dto.endTime}
        </if>
        order by report_time desc
    </select>
    <select id="queryPageListAll" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO">
@@ -38,9 +39,11 @@
        report.*,
        de.device_name,
        de.device_type,
        dict."DICT_VALUE" as typeName
        dict."DICT_VALUE" as typeName, si.control_unit,si.self_unit,dria."county_cd"
        FROM
        ywxt.SG_PROGRESS_REPORT report
        LEFT JOIN ywxt.SG_PROJECT_INFO si ON report.profram_id = si.id
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = si.sk_id
        LEFT JOIN ywxt.sg_device de ON report.gx_device_id = de.id
        left join YWXT."BLADE_DICT_BIZ" as dict  on de.device_type=dict.DICT_KEY  and dict.CODE='SG_DEVICE_TYPE'
        where 1=1 and report."STATUS" != 4
@@ -59,10 +62,21 @@
        <if test="dto.endTime != null and dto.endTime != ''">
            and report.create_time &lt;= #{dto.endTime}
        </if>
        <if test="dto.typeName != null and dto.typeName != ''">
            and dict.DICT_KEY  = #{dto.typeName}
            <if test="dto.childTypeList != null and !dto.childTypeList.isEmpty()">
                or dict.DICT_KEY in
                <foreach collection="dto.childTypeList" open="(" close=")" separator="," item="id">
                    #{id}
                </foreach>
            </if>
        </if>
        order by report.report_time desc
    </select>
    <select id="queryById" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO">
        select * from  SG_PROGRESS_REPORT report where id = #{id}
        select report.*,si.control_unit,si.self_unit,dria."county_cd" from  SG_PROGRESS_REPORT report  LEFT JOIN ywxt.SG_PROJECT_INFO si ON report.profram_id = si.id
                                                  LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = si.sk_id where report.id = #{id}
    </select>
    <select id="queryList" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO">
        SELECT distinct
@@ -79,15 +93,39 @@
        DBMS_LOB.SUBSTR(report.video_urls) videoUrls,
        de.device_name,
        de.device_type,
       <!-- userR.approval_status, -->
        dict."DICT_VALUE" as typeName
        MAX(userR.approval_status) as approval_status,
        dict."DICT_VALUE" as typeName,
        si.control_unit,si.self_unit,dria."county_cd"
        FROM
        ywxt.SG_PROGRESS_REPORT report
        LEFT JOIN ywxt.SG_PROJECT_INFO si ON report.profram_id = si.id
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = si.sk_id
        LEFT JOIN ywxt.sg_device de ON report.gx_device_id = de.id
        left join YWXT."BLADE_DICT_BIZ" as dict  on de.device_type=dict.DICT_KEY  and dict.CODE='SG_DEVICE_TYPE'
        LEFT JOIN ywxt.sg_report_user userR ON report.id = userR.report_id
        WHERE
        1 = 1 and report."STATUS" != 4
        <if test="dto.selfUnit != null and dto.selfUnit.size>0">
            and
            <foreach collection="dto.selfUnit" item="item" index="index" open="(" separator="or" close=")">
                si.CONSTRUCTION_UNIT Like  CONCAT(CONCAT('%', #{item}), '%') or   si.SELF_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.userUnit != null and dto.userUnit.size>0">
            and
            <foreach collection="dto.userUnit" item="item" index="index" open="(" separator="or" close=")">
                si.CONTROL_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.countryUnit != null and dto.countryUnit.size>0">
            and dria."county_cd" in
            <foreach collection="dto.countryUnit" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="dto.roleUnit != null and dto.roleUnit != ''">
            and userR.role_id=#{dto.roleUnit}
        </if>
       <!-- AND userR.is_his = 0 -->
        <if test="dto.projectName != null and dto.projectName != ''">
            and report.PROGRAM_NAME like CONCAT(CONCAT('%',#{dto.projectName}),'%')
@@ -99,7 +137,7 @@
            and userR.user_id = #{dto.userId} and userR.approval_order != 0
        </if>
        <if test="dto.approvalStatus != null and dto.approvalStatus ==0">
            and userR.approval_status = 0 and report.audit_person = #{dto.auditPerson} and (report."STATUS" = 0 or report."STATUS" = 1)
            and userR.approval_status = 0 and report.audit_person = #{dto.roleUnit} and (report."STATUS" = 0 or report."STATUS" = 1)
        </if>
        <if test="dto.approvalStatus != null and dto.approvalStatus ==1">
           and userR.approval_status = 1
@@ -113,6 +151,25 @@
        <if test="dto.endTime != null and dto.endTime !='' ">
            and report.report_time &lt;= #{dto.endTime}
        </if>
        group by
        report.id,
        report.program_name,
        report.gx_step_name,
        report."STATUS",
        report.audit_person,
        report.report_time,
        report.create_time,
        report.gx_progress,
        report.remark,
        DBMS_LOB.SUBSTR( report.images_urls) ,
        DBMS_LOB.SUBSTR( report.video_urls ) ,
        de.device_name,
        de.device_type,
        dict."DICT_VALUE" ,
        si.control_unit,
        si.self_unit,
        dria."county_cd"
        order by report.report_time desc
        <!--<choose >
            <when test="dto.approvalStatus != null and dto.approvalStatus == 0">
                and report.audit_person = #{dto.userId} and (report."STATUS" = 0 or report."STATUS" = 1)
@@ -180,13 +237,24 @@
        </if>
    </select>
    <select id="getUserByIds" resultType="java.util.Map">
        select u.id ,u.real_name ,d.full_name as deptName from ywxt.blade_user u inner join ywxt.blade_dept d on u.dept_id = convert(varchar(100),d.id) where 1 = 1
        select u.id ,u.real_name ,d.full_name as deptName from ywxt.blade_user u inner join ywxt.blade_dept d on  u.dept_id like CONCAT('%', d.id, '%') where 1 = 1  and d."SG_CODE" is not null
        <if test="ids != null and ids.size>0">
            AND u.id in
            <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="getUserByIdsCounty" resultType="java.util.Map">
        select u.id ,u.real_name ,d.full_name as deptName from ywxt.blade_user u inner join ywxt.blade_dept d  on FIND_IN_SET(u.dept_id, d.id) > 0 where 1 = 1
        <if test="ids != null and ids.size>0">
            AND u.id in
            <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="selectProframId" resultType="java.lang.Long">
        select program_id from ywxt.sg_device where id = #{deviceId}
@@ -195,4 +263,16 @@
        select  u.* from ywxt.sg_report_user u left join  ywxt.sg_progresss_report r on u.report_id = r.id
        where 1=1 and r.profram_id = #{programId}
    </select>
    <select id="getRoleByIds" resultType="java.util.Map">
        select id,role_name as roleName from "YWXT"."BLADE_ROLE" WHERE 1=1
        <if test="ids != null and ids.size>0">
            AND id in
            <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="getSgEngineerRole" resultType="java.lang.Long">
        select id from "YWXT"."BLADE_ROLE" where parent_id = 1800818080896073730;
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
@@ -1,6 +1,5 @@
package cn.gistack.sm.sg.mapper;
import cn.gistack.sm.sg.DO.SgGxStepDO;
import cn.gistack.sm.sg.DO.SgProjectInfoDO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.*;
@@ -52,5 +51,16 @@
    List<SgStatisDeviceVO> getDeviceTypes(@Param("s") String s);
    List<SgAllDeptOrUser> queryDept();
    List<SgAllDeptOrUser> queryUser();
    List<SgProjectTreeVO> projectTree(@Param("dto") ProjectSearchDTO dto);
    List<String> getUserS(@Param("list") List<String> controlUnit);
    List<ResVO> resList(IPage<ResVO> page, @Param("dto") ProjectSearchDTO dto);
    //List<String> getProjectIds(String code,@Param("grad") String grad );
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
@@ -9,17 +9,39 @@
        dria."county_nm",
        dria."town_nm",
        dria."eng_scal",
        dria."bas_guid"
        dria."bas_guid",
        dria."oth_reg_cd"
        FROM
        YWXT.SG_PROJECT_INFO info
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = info.sk_id
        WHERE
        1 =1
        <if test="dto.selfUnit != null and dto.selfUnit.size>0 ">
            and
            <foreach collection="dto.selfUnit" item="item" index="index" open="(" separator="or" close=")">
                info.CONSTRUCTION_UNIT Like  CONCAT(CONCAT('%', #{item}), '%') or   info.SELF_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.userUnit != null and dto.userUnit.size>0">
            and
            <foreach collection="dto.userUnit" item="item" index="index" open="(" separator="or" close=")">
                info.CONTROL_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.countryUnit != null and dto.countryUnit.size>0">
            and dria."county_cd" in
            <foreach collection="dto.countryUnit" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="dto.projectName != null and dto.projectName != ''">
            and info.project_name like concat( concat ('%',#{dto.projectName}),'%')
        </if>
        <if test="dto.skName != null and dto.skName != ''">
            and info.sk_name like concat(concat('%',#{dto.skName}),'%')
        </if>
        <if test="dto.lot != null and dto.lot != ''">
            and info.lot = #{dto.lot}
        </if>
        <if test="dto.resCd != null and dto.resCd != '' ">
            and info.sk_id like CONCAT(CONCAT('%', #{dto.resCd}), '%')
@@ -35,6 +57,9 @@
        </if>
        <if test="dto.isBegin != null and dto.isBegin == 2">
            and info.status = 0
        </if>
        <if test="dto.buildStage != null and dto.buildStage != ''">
            and info.build_stage = #{dto.buildStage}
        </if>
        <if test="dto.projectIds != null and dto.projectIds.size > 0">
            and info.id in
@@ -60,14 +85,33 @@
                #{id}
            </foreach>)
        </if>
        <if test="dto.projectSort == null or dto.projectSort ==0">
            ORDER BY info.status desc ,info.project_progress desc
        <!--<if test="dto.deptId != null and dto.deptId !=''">
            and (info.control_unit = #{dto.deptId} or info.construction_unit = #{dto.deptId})
        </if>-->
        <if test="dto.adCode != null and dto.adCode !=''">
            and dria."county_cd" = #{dto.adCode}
        </if>
        <if test="dto.projectSort ==1">
            ORDER BY info.project_progress desc
       <if test="dto.projectSort == null">
            ORDER BY TO_NUMBER(info.project_progress) desc NULLS LAST,info.status desc
        </if>
        <if test="dto.projectSort != null and dto.projectSort ==2">
            ORDER BY info.sk_id asc
        <!--
       <if test="dto.projectSort ==1">
           ORDER BY info.project_progress desc NULLS LAST
       </if>
       <if test="dto.projectSort != null and dto.projectSort ==2">
           ORDER BY info.sk_id asc
       </if>-->
        <if test="dto.projectSort != null and dto.projectSort ==3">
            ORDER BY TO_NUMBER(SUBSTR(info.surface_progress, 1, LENGTH(info.surface_progress) - 1))  desc NULLS LAST
        </if>
        <if test="dto.projectSort != null and dto.projectSort ==4">
            ORDER BY TO_NUMBER(SUBSTR(info.video_progress, 1, LENGTH(info.video_progress) - 1))  desc NULLS LAST
        </if>
        <if test="dto.projectSort != null and dto.projectSort ==5">
            ORDER BY TO_NUMBER(SUBSTR(info.trans_progress, 1, LENGTH(info.trans_progress) - 1))  desc NULLS LAST
        </if>
        <if test="dto.projectSort != null and dto.projectSort ==6">
            ORDER BY TO_NUMBER(SUBSTR(info.seepage_progress , 1, LENGTH(info.seepage_progress ) - 1))  desc NULLS LAST
        </if>
    </select>
@@ -105,9 +149,13 @@
        pro.STATUS AS projectStatus,
        re.id AS reportId,
        pro.lon_lat,
        re.resubmit
        re.resubmit,
        COALESCE(d.price, 99) as price,
        COALESCE(Pdict.sort, 0)  as sort,
        COALESCE(dict.sort, 0)  as dSort
        FROM
        ywxt.sg_project_info pro
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = pro.sk_id
        LEFT JOIN ywxt.sg_device d ON pro.id = d.program_id
        LEFT JOIN YWXT."BLADE_DICT_BIZ" AS dict ON d.device_type = dict.DICT_KEY AND dict.CODE = 'SG_DEVICE_TYPE'
        LEFT JOIN YWXT."BLADE_DICT_BIZ" Pdict on dict.parent_id = Pdict.id
@@ -131,7 +179,14 @@
                #{id}
            </foreach>
        </if>
       ORDER BY pro.status desc ,pro.project_progress desc
        <if test="dto.lot != null and dto.lot != ''">
            and pro.lot like CONCAT(CONCAT('%',#{dto.lot}),'%')
        </if>
        <if test="dto.buildStage != null and dto.buildStage != ''">
            and pro.build_stage like CONCAT(CONCAT('%',#{dto.buildStage}),'%')
        </if>
        <include refid="queryBySgCodeS"></include>
       ORDER BY pro.status desc ,pro.project_progress desc,step.gx_step_num asc
    </select>
    <select id="progressList" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
@@ -149,6 +204,16 @@
     <if test="dto.projectName != null and dto.projectName != ''">
         and pro.project_name like CONCAT(CONCAT('%',#{dto.projectName}),'%')
     </if>
     <if test="dto.lot != null and dto.lot != ''">
         and pro.lot like CONCAT(CONCAT('%',#{dto.lot}),'%')
     </if>
     <if test="dto.buildStage != null and dto.buildStage != ''">
         and pro.build_stage like CONCAT(CONCAT('%',#{dto.buildStage}),'%')
     </if>
     <if test="dto.deptId != null and dto.deptId !=''">
         and (pro.control_unit = #{dto.deptId} or pro.construction_unit = #{dto.deptId})
     </if>
        ORDER BY pro.project_progress desc NULLS LAST
    </select>
    <select id="getSgstatiss" resultType="cn.gistack.sm.sg.VO.SgStatisticsVO">
        SELECT
@@ -182,7 +247,8 @@
    a."ad_name" NAME,
    SUM( CASE WHEN b.STATUS IN ( 1, 2 ) THEN 1 ELSE 0 END ) AS commenceNum,
    count( b.STATUS ) projectSum,
    LISTAGG(b.id, ',') as proIds
    LISTAGG(b.id, ',') as proIds,
    b.build_stage
FROM
    (
    SELECT
@@ -190,7 +256,8 @@
        att."guid" AS cityCode,
        ad."ad_code" AS provinceCode,
        info.STATUS,
        info.id
        info.id,
        info.build_stage
    FROM
        YWXT.SG_PROJECT_INFO info
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = info.sk_id
@@ -206,7 +273,8 @@
    a."p_ad_code" = #{code}
GROUP BY
    a."ad_code",
    a."ad_name"
    a."ad_name",
    b.build_stage
    </select>
    <select id="getsgStatisticsZero" resultType="cn.gistack.sm.sg.VO.SgStatisProVO">
@@ -214,7 +282,8 @@
    dria."city_cd" code, dria."city_nm" name ,
    sum( CASE WHEN info.STATUS IN ( 1, 2 ) THEN 1 ELSE 0 END ) AS commenceNum,
    count( info.STATUS ) projectSum,
    LISTAGG(info.id, ',') as proIds
    LISTAGG(info.id, ',') as proIds,
    info.build_stage as buildStage
    FROM
    YWXT.SG_PROJECT_INFO info
    LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = info.sk_id
@@ -223,7 +292,7 @@
    <if test="code != null and code != ''">
        AND   info.lot =#{code}
    </if>
    Group By dria."city_cd",dria."city_nm"
    Group By dria."city_cd",dria."city_nm",info.build_stage
    HAVING
    dria."city_cd" IS NOT NULL AND
    dria."city_nm" IS NOT NULL
@@ -237,14 +306,15 @@
    info.lot as name,
    sum( CASE WHEN info.STATUS IN ( 1, 2 ) THEN 1 ELSE 0 END ) AS commenceNum,
    count( info.STATUS ) AS projectSum,
    LISTAGG(info.id, ',') as proIds
    LISTAGG(info.id, ',') as proIds,
    info.build_stage
FROM
    YWXT.SG_PROJECT_INFO info
    LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = info.sk_id
WHERE
    1 = 1
GROUP BY
     info.lot
     info.lot,info.build_stage
 <!--    dria."bas_guid", dria."bas_name" -->
    HAVING
 <!--   dria."bas_guid" IS NOT NULL AND
@@ -300,19 +370,25 @@
        select DISTINCT  "bas_guid"  from SJZT_DW."dim_res_info_a" where "bas_name" = #{code}
    </select>
    <select id="progressList1" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
        select pro.id,
        select DISTINCT pro.id,
        pro.project_name,
        pro.lon_lat,
        pro.status
        pro.status,
        pro.project_progress
        from
        (SELECT
        pro.id,
        pro.project_name,
        pro.lon_lat,
        pro.status,
        pro.lot,
        pro.build_stage,
        dria."county_cd" AS countyCode,
        att."guid" AS cityCode,
        ad."ad_code" AS provinceCode
        ad."ad_code" AS provinceCode,
        pro.project_progress,
        pro.control_unit,
        pro.construction_unit
        FROM
        ywxt.sg_project_info pro
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = pro.sk_id
@@ -330,6 +406,16 @@
        <if test="dto.projectName != null and dto.projectName != ''">
            and pro.project_name like CONCAT(CONCAT('%',#{dto.projectName}),'%')
        </if>
        <if test="dto.lot != null and dto.lot != ''">
            and pro.lot like CONCAT(CONCAT('%',#{dto.lot}),'%')
        </if>
        <if test="dto.buildStage != null and dto.buildStage != ''">
            and pro.build_stage like CONCAT(CONCAT('%',#{dto.buildStage}),'%')
        </if>
        <if test="dto.deptId != null and dto.deptId !=''">
            and (pro.control_unit = #{dto.deptId} or pro.construction_unit = #{dto.deptId})
        </if>
        order by pro.project_progress desc NULLS LAST
    </select>
    <select id="queryStepByProject1" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
    select
@@ -371,7 +457,9 @@
        dria."county_cd" AS countyCode,
        att."guid" AS cityCode,
        ad."ad_code" AS provinceCode,
        pro.project_progress
        pro.project_progress,
        pro.lot,
        pro.build_stage
        FROM
        ywxt.sg_project_info pro
        LEFT JOIN ywxt.sg_device d ON pro.id = d.program_id
@@ -384,7 +472,10 @@
        LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = pro.sk_id
        LEFT JOIN YWXT."att_ad_base" att ON att."ad_code" = dria."city_cd"
        LEFT JOIN YWXT."att_ad_base" ad ON att."p_ad_code" = ad."ad_code"
        LEFT JOIN YWXT."att_ad_base" aad ON aad."ad_code" = ad."p_ad_code") pro
        LEFT JOIN YWXT."att_ad_base" aad ON aad."ad_code" = ad."p_ad_code"
        where 1=1
        <include refid="queryBySgCodeS"></include>
        ) pro
        LEFT JOIN YWXT."att_ad_base" a ON (
        ( pro.countyCode = a."guid" )
        OR ( pro.cityCode = a."guid" )
@@ -405,8 +496,54 @@
                #{id}
            </foreach>
        </if>
        <if test="dto.lot != null and dto.lot != ''">
            and pro.lot like CONCAT(CONCAT('%',#{dto.lot}),'%')
        </if>
        <if test="dto.buildStage != null and dto.buildStage != ''">
            and pro.build_stage like CONCAT(CONCAT('%',#{dto.buildStage}),'%')
        </if>
        ORDER BY pro.projectStatus desc ,pro.project_progress desc
    </select>
    <sql id="queryBySgCodeS">
        <if test="dto.selfUnit != null and dto.selfUnit.size>0">
            and
            <foreach collection="dto.selfUnit" item="item" index="index" open="(" separator="or" close=")">
                pro.CONSTRUCTION_UNIT Like  CONCAT(CONCAT('%', #{item}), '%') or  pro.SELF_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.userUnit != null and dto.userUnit.size>0">
            and
            <foreach collection="dto.userUnit" item="item" index="index" open="(" separator="or" close=")">
                pro.CONTROL_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.countryUnit != null and dto.countryUnit.size>0">
            and dria."county_cd" in
            <foreach collection="dto.countryUnit" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="dto.sgCodeS != null and dto.sgCodeS.size > 0">
            and (dria."province_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."city_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."county_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."town_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>)
        </if>
    </sql>
    <select id="selectVOById" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
        select * from  ywxt.sg_project_info pro where pro.id = #{proframId}
    </select>
@@ -425,12 +562,102 @@
            Pdict.DICT_KEY
    </select>
    <select id="getSgCodeByUser" resultType="java.lang.String">
        SELECT
       <!-- SELECT
            dp."SG_CODE"
        FROM
            ywxt.BLADE_USER u
                LEFT JOIN ywxt.blade_dept dp ON u.dept_id = cast( dp.id AS VARCHAR )
        WHERE u.id = #{userId}
        WHERE u.id = #{userId} -->
        SELECT
        distinct dp."SG_CODE"
        FROM
        ywxt.BLADE_USER u
        LEFT JOIN ywxt.blade_dept dp ON   u.dept_id  Like  CONCAT('%',  dp.id , '%')
        WHERE u.id =  #{userId}  and   dp."SG_CODE"  is not null  and <![CDATA[dp."SG_CODE" <>'' ]]>   limit 1
    </select>
    <select id="queryDept" resultType="cn.gistack.sm.sg.VO.SgAllDeptOrUser">
        select id,full_name as name from "YWXT"."BLADE_DEPT"
    </select>
    <select id="queryUser" resultType="cn.gistack.sm.sg.VO.SgAllDeptOrUser">
        select id,real_name as name from "YWXT"."BLADE_USER";
    </select>
    <select id="projectTree" resultType="cn.gistack.sm.sg.VO.SgProjectTreeVO">
        SELECT
       <!--  TOP 200 -->
        info.id,
        info.lot,
        dria."province_nm",
        dria."city_nm",
        dria."county_nm",
        dria."town_nm",
        dria."res_nm"
        FROM
        YWXT.SG_PROJECT_INFO info
                LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = info.sk_id
        WHERE
            1 =1
        <if test="dto.buildStage != null and dto.buildStage != ''">
            and info.build_stage = #{dto.buildStage}
        </if>
        <if test="dto.selfUnit != null and dto.selfUnit.size>0 ">
            and
            <foreach collection="dto.selfUnit" item="item" index="index" open="(" separator="or" close=")">
                info.CONSTRUCTION_UNIT Like  CONCAT(CONCAT('%', #{item}), '%') or info.SELF_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.userUnit != null and dto.userUnit.size>0">
            and
            <foreach collection="dto.userUnit" item="item" index="index" open="(" separator="or" close=")">
                info.CONTROL_UNIT Like  CONCAT(CONCAT('%', #{item}), '%')
            </foreach>
        </if>
        <if test="dto.sgCodeS != null and dto.sgCodeS.size > 0">
            and (dria."province_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."city_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."county_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            or dria."town_cd" in
            <foreach collection="dto.sgCodeS" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>)
        </if>
        <if test="dto.adCode != null and dto.adCode !=''">
            and dria."county_cd" = #{dto.adCode}
        </if>
    </select>
    <select id="getUserS" resultType="java.lang.String">
        SELECT
            user_id
        FROM
            "YWXT"."BLADE_USER_DEPT"
        WHERE 1=1
        <if test="list != null and list.size>0">
            and dept_id in
            <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="resList" resultType="cn.gistack.sm.sg.VO.ResVO">
        select dria.* from "SJZT_DW"."dim_res_info_a" dria where 1=1
        <if test="dto.adCode != null and dto.adCode != ''">
           and (dria."province_cd" = #{dto.adCode} or dria."city_cd" = #{dto.adCode} or dria."county_cd" = #{dto.adCode})
        </if>
        <if test="dto.skName != null and dto.skName != ''">
            and dria."res_nm" like CONCAT(CONCAT('%', #{dto.skName}), '%')
        </if>
        <include refid="queryBySgCodeS"></include>
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectPersonConfigMapper.xml
@@ -36,7 +36,7 @@
        FROM
            ywxt.sg_project_info pro
                inner JOIN ywxt.sg_device d ON pro.id = d.program_id
                Left JOIN ywxt.sg_gx_config sgc ON d.device_type = sgc.gx_device_type or sgc.gx_device_type in ('sgzb','sgys')
                Left JOIN ywxt.sg_gx_config sgc ON d.device_type = sgc.gx_device_type or sgc.gx_device_type in ('cldw','sgys')
                left join ywxt.blade_role ro on    ro.id = sgc.role_id
                left join ywxt.sg_project_person_config sppc  on sgc.role_id = sppc.rold_id and sppc.program_id = pro.id
                left join ywxt.blade_user bu on sppc.user_id = bu.id
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
@@ -2,10 +2,7 @@
import cn.gistack.sm.sg.DO.SgProjectInfoDO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProjectInfoVO;
import cn.gistack.sm.sg.VO.SgStatisProVO;
import cn.gistack.sm.sg.VO.SgStatistccVO;
import cn.gistack.sm.sg.VO.SgStatisticsVO;
import cn.gistack.sm.sg.VO.*;
import cn.gistack.sm.sg.excel.ProjectExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -23,7 +20,7 @@
 */
public interface SgProjectInfoService extends IService<SgProjectInfoDO> {
    IPage<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO);
    Object queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO);
    List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO);
@@ -42,4 +39,10 @@
    List<SgStatisProVO> getsgStatisticsList(String code);
    List<SgStatistccVO> getsgStatisticscc(String code);
    List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto);
    IPage<ResVO> resList(IPage<ResVO> page, ProjectSearchDTO dto);
    void delete(String ids);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgDeviceServiceImpl.java
@@ -52,16 +52,14 @@
    @Override
    public List<SgDeviceDO> getDeviceList(String programId) {
        List<SgDeviceDO> list = new ArrayList<>();
        QueryWrapper<SgDeviceDO> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("program_id", programId);
        SgDeviceDO sg1 = new SgDeviceDO();
        sg1.setId((long) 999);
        sg1.setDeviceName("施工准备");
        sg1.setDeviceType("sgzb");
        sg1.setDeviceName("测量定位");
        sg1.setDeviceType("cldw");
        sg1.setStatus(0);
        list.add(sg1);
        List<SgDeviceDO> sgDeviceDOS = baseMapper.selectList(queryWrapper);
        List<SgDeviceDO> sgDeviceDOS = baseMapper.queryPageList(null,SgDeviceSearchDTO.builder().projectId(programId).build());
        if (CollectionUtils.isNotEmpty(sgDeviceDOS)) {
            list.addAll(sgDeviceDOS);
        }
@@ -86,7 +84,7 @@
        if(deviceId.equals("998")){
            return sgGxStepMapper.queryStepLists("sgys");
        }else if (deviceId.equals("999")){
            return sgGxStepMapper.queryStepLists("sgzb");
            return sgGxStepMapper.queryStepLists("cldw");
        }
        List<SgGxStepDO> sgGxStepDOS = sgGxStepMapper.queryStepList(deviceId);
        return sgGxStepDOS;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgGxServiceImpl.java
@@ -12,6 +12,7 @@
import cn.gistack.sm.sg.service.SgGxStepService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.log.exception.ServiceException;
@@ -46,7 +47,12 @@
    private SgProgressReportMapper sgProgressReportMapper;
    @Override
    public IPage<SgGxVO> queryPageList(IPage<SgGxVO> page, ProjectSearchDTO searchDTO) {
        if (StringUtils.isNotBlank(searchDTO.getGxType())){
            List<String> childType = sgGxMapper.childType(searchDTO.getGxType());
            searchDTO.setChildTypeList(childType);
        }
        List<SgGxVO> list = sgGxMapper.queryPageList(page,searchDTO);
        if (CollectionUtils.isNotEmpty(list)){
            List<Long> ids = list.stream().map(SgGxDO::getId).collect(Collectors.toList());
            List<Long> userIds = list.stream().map(SgGxDO::getCreateUser).collect(Collectors.toList());
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
@@ -3,10 +3,7 @@
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.VO.SgProjectInfoVO;
import cn.gistack.sm.sg.VO.SgReportVO;
import cn.gistack.sm.sg.VO.SgStepReportVO;
import cn.gistack.sm.sg.VO.*;
import cn.gistack.sm.sg.mapper.*;
import cn.gistack.sm.sg.service.SgProgressReportService;
import cn.gistack.sm.sg.service.SgProjectInfoService;
@@ -19,6 +16,7 @@
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.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.DateUtil;
@@ -66,21 +64,101 @@
    @Autowired
    private SgProjectInfoServiceImpl sgProjectInfoService;
    @Autowired
    private SgGxMapper sgGxMapper;
    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    @Override
    public IPage<SgProgressReportVO> queryPageList(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) {
        List<SgProgressReportVO> list = sgProgressReportMapper.queryPageList(page,searchDTO);
        if(list != null){
            list.forEach(s ->{
                List<String> resultUsers=new ArrayList<>();
                if(s.getControlUnit()!=null){
                    String controlUnit = s.getControlUnit();
                    List<String> controlUnitS = Arrays.asList(controlUnit.split(","));
                    List<String> users=sgProjectInfoMapper.getUserS(controlUnitS);
                    resultUsers.addAll(users);
                }
                if(s.getSelfUnit()!=null){
                    String selfUnit = s.getSelfUnit();
                    List<String> selfUnitS = Arrays.asList(selfUnit.split(","));
                    List<String> selfUnitusers=sgProjectInfoMapper.getUserS(selfUnitS);
                    resultUsers.addAll(selfUnitusers);
                }
                s.setUserIDs(resultUsers);
                String gxStepName = s.getGxStepName();
                String countyCd = s.getCountyCd();
                if("测量定位".equals(gxStepName)){
                    if(countyCd!=null){
                        List<String> controlUnitS = Arrays.asList(countyCd.split(","));
                        List<String> xbUnitIDs=sgProjectInfoMapper.getUserS(controlUnitS);
                        s.setXbUnitIDs(xbUnitIDs);
                    }
                }
            });
        }
        return page.setRecords(list);
    }
    @Override
    public IPage<SgProgressReportVO> queryPageListAll(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) {
        if (StringUtils.isNotBlank(searchDTO.getTypeName())){
            List<String> childType = sgGxMapper.childType(searchDTO.getTypeName());
            searchDTO.setChildTypeList(childType);
        }
        List<SgProgressReportVO> list = sgProgressReportMapper.queryPageListAll(page,searchDTO);
        if(list != null){
            list.forEach(s ->{
                List<String> resultUsers=new ArrayList<>();
                if(s.getControlUnit()!=null){
                    String controlUnit = s.getControlUnit();
                    List<String> controlUnitS = Arrays.asList(controlUnit.split(","));
                    List<String> users=sgProjectInfoMapper.getUserS(controlUnitS);
                    resultUsers.addAll(users);
                }
                if(s.getSelfUnit()!=null){
                    String selfUnit = s.getSelfUnit();
                    List<String> selfUnitS = Arrays.asList(selfUnit.split(","));
                    List<String> selfUnitusers=sgProjectInfoMapper.getUserS(selfUnitS);
                    resultUsers.addAll(selfUnitusers);
                }
                s.setUserIDs(resultUsers);
                String gxStepName = s.getGxStepName();
                String countyCd = s.getCountyCd();
                if("测量定位".equals(gxStepName)){
                    if(countyCd!=null){
                        List<String> controlUnitS = Arrays.asList(countyCd.split(","));
                        List<String> xbUnitIDs=sgProjectInfoMapper.getUserS(controlUnitS);
                        s.setXbUnitIDs(xbUnitIDs);
                    }
                }
            });
        }
        return page.setRecords(list);
    }
    @Override
    @Transactional
    public void add(SgProgressReportDO sgProgressReportDO) {
        String resubmitId = sgProgressReportDO.getResubmitId();
        Long roleId = getRoleId();
        if (StringUtils.isNotBlank(resubmitId)){
            new LambdaUpdateChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getId,resubmitId).set(SgProgressReportDO::getResubmit,1).update();
        }
@@ -103,7 +181,7 @@
        }
        QueryWrapper<SgProgressReportDO> wrappers = new QueryWrapper<>();
        wrappers.eq("profram_id", sgProgressReportDO.getProframId()).ne("status", 4).eq("gx_step_name", "施工准备");
        wrappers.eq("profram_id", sgProgressReportDO.getProframId()).ne("status", 4).eq("gx_step_name", "测量定位");
        List<SgProgressReportDO> sgProgressReportDOS1 = sgProgressReportMapper.selectList(wrappers);
        if(sgProgressReportDO.getGxDeviceId()==998){
@@ -125,11 +203,11 @@
        if (sgProgressReportDOS1!= null && sgProgressReportDOS1.size() > 0) {
            for (SgProgressReportDO sgProgressReportDO1 : sgProgressReportDOS1) {
                if (sgProgressReportDO1.getStatus()!= 2 && sgProgressReportDO1.getStatus()!= 3)  {
                    throw new ServiceException("请先完成施工准备的审批!");
                    throw new ServiceException("请先完成测量定位的审批!");
                }
            }
        } else if (sgProgressReportDOS1 == null || (!sgProgressReportDO.getGxStepName().equals("施工准备"))) {
            throw new ServiceException("请先发起施工准备的审批!");
        } else if (sgProgressReportDOS1 == null || (!sgProgressReportDO.getGxStepName().equals("测量定位"))) {
            throw new ServiceException("请先发起测量定位的审批!");
        }
        Long gxDeviceId = sgProgressReportDO.getGxDeviceId();
        Long gxStepId = sgProgressReportDO.getGxStepId();
@@ -137,7 +215,9 @@
        List<SgGxStepDO> list = sgGxStepMapper.selectByGxInfoId(sgGxStepDO.getGxInfoId());
        QueryWrapper<SgProgressReportDO> wrapper = new QueryWrapper<>();
        wrapper.in("status",Arrays.asList(0,1,2,3));
        if(sgProgressReportDO.getGxDeviceId()==998 || sgProgressReportDO.getGxDeviceId()==999){
        if(sgProgressReportDO.getGxDeviceId()==998
            || sgProgressReportDO.getGxDeviceId()==999
        ){
            wrapper.eq("gx_step_id", gxStepId).eq("gx_device_id",gxDeviceId).ne("status",4).eq("profram_id",sgProgressReportDO.getProframId());
        }else {
            wrapper.eq("gx_step_id", gxStepId).eq("gx_device_id",gxDeviceId).ne("status",4);
@@ -173,9 +253,12 @@
        String deviceType ="";
        SgDeviceDO sgDeviceDO = new SgDeviceDO();
        if (gxDeviceId == 999){
             deviceType = "sgzb";
        }else if(gxDeviceId == 998){
             deviceType = "cldw";
            //sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).roleId(Long.parseLong("1811657352658042882")).approvalStatus(0).approvalOrder(1).build());
        }else
            if(gxDeviceId == 998){
            deviceType = "sgys";
            //sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).roleId(Long.parseLong("1811657352658042882")).approvalStatus(0).approvalOrder(1).build());
        }else {
             sgDeviceDO = sgDeviceMapper.selectById(gxDeviceId);
            deviceType = sgDeviceDO.getDeviceType();
@@ -186,35 +269,38 @@
        if (CollectionUtils.isEmpty(roIds)){
            throw new ServiceException("请完成工序角色配置!");
        }
        List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).eq(SgProjectPersonConfigDO::getProgramId,sgProgressReportDO.getProframId()).in(SgProjectPersonConfigDO::getRoldId, roIds).list();
        if (CollectionUtils.isEmpty(personConfigDOS)){
            throw new ServiceException("请完成项目审批人员配置!");
        }
        Map<Long, Long> userMap = personConfigDOS.stream().collect(Collectors.toMap(SgProjectPersonConfigDO::getRoldId, SgProjectPersonConfigDO::getUserId));
        sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgProgressReportDO.getReportUser()).approvalContent("提交审批").approvalStatus(0).approvalOrder(0).approvalTime(now).build());
//        List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).eq(SgProjectPersonConfigDO::getProgramId,sgProgressReportDO.getProframId()).in(SgProjectPersonConfigDO::getRoldId, roIds).list();
//        if (CollectionUtils.isEmpty(personConfigDOS)){
//            throw new ServiceException("请完成项目审批人员配置!");
//        }
        //Map<Long, Long> userMap = personConfigDOS.stream().collect(Collectors.toMap(SgProjectPersonConfigDO::getRoldId, SgProjectPersonConfigDO::getUserId));
        //新增审批记录
            sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgProgressReportDO.getReportUser()).approvalContent("提交审批").roleId(roleId).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());
            //sgGxConfigDO.setUser(userMap.get(Long.parseLong(sgGxConfigDO.getRoleId())));
            sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).roleId(Long.parseLong(sgGxConfigDO.getRoleId())).approvalStatus(0).approvalOrder(sgGxConfigDO.getSgOrder()).build());
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            if (sgGxConfigDO.getSgOrder() == 1) {
                sgProgressReportDO.setAuditPerson(String.valueOf(sgGxConfigDO.getUser()));
                sgProgressReportDO.setAuditPerson(String.valueOf(sgGxConfigDO.getRoleId()));
                sgProgressReportMapper.updateById(sgProgressReportDO);
            }
        }
        //加个项目及设备的状态判断 方便统计计算
        if(gxStepId != 25 && gxStepId != 26 ) {
        if(gxStepId != 20 &&
            gxStepId != 26 ) {
            if (sgDeviceDO != null && sgDeviceDO.getStatus() == 0) {
                sgDeviceDO.setStatus(1);
                sgDeviceMapper.updateById(sgDeviceDO);
            }
        }
        SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(sgProgressReportDO.getProframId());
        if (sgProjectInfoDO != null && sgProjectInfoDO.getStatus() == 0) {
        Integer status = sgProjectInfoDO.getStatus();
        if (sgProjectInfoDO != null && ( Objects.isNull(status)||0 == status)) {
            sgProjectInfoDO.setStatus(1);
            sgProjectInfoMapper.updateById(sgProjectInfoDO);
        }
@@ -230,9 +316,15 @@
            sgProgressReportVO.setDeviceName(sgDeviceDO.getDeviceName());
        }else {
        sgProgressReportVO.setDeviceName("");}
        List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId,id).orderByAsc(SgReportUserDO::getId).list();
        List<Long> ids = list.stream().map(s -> s.getUserId()).collect(Collectors.toList());
        List<SgReportUserDO> list =  new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId,id).orderByAsc(SgReportUserDO::getApprovalOrder).list();
        List<Long> ids = list.stream().map(SgReportUserDO::getUserId).collect(Collectors.toList());
        List<Long> idsCounty = list.stream().filter(s->s.getRoleId().equals(1811657352658042882L)).map(SgReportUserDO::getUserId).collect(Collectors.toList());
        List<Long> rids = list.stream().map(SgReportUserDO::getRoleId).collect(Collectors.toList());
        List<Map<String,Object>> users = sgProgressReportMapper.getUserByIds(ids);
        List<Map<String,Object>> usersCounty = sgProgressReportMapper.getUserByIdsCounty(idsCounty);
        users.addAll(usersCounty);
        List<Map<String,Object>> roles = sgProgressReportMapper.getRoleByIds(rids);
        for (Map<String, Object> user : users) {
            for (SgReportUserDO sgReportUserDO : list) {
                if (user.get("ID").equals(sgReportUserDO.getUserId())){
@@ -241,10 +333,36 @@
                }
            }
        }
        for (Map<String, Object> r : roles) {
            for (SgReportUserDO sgReportUserDO : list) {
                if (r.get("ID").equals(sgReportUserDO.getRoleId())){
                    sgReportUserDO.setRoleName(r.get("ROLENAME").toString());
                }
            }
        }
        sgProgressReportVO.setSgReportUserDOS(list);
        List<SgStepReportVO> sgStepReportVOS = sgProgressReportMapper.selectByDeviceId(sgProgressReportVO.getGxDeviceId());
        sgStepReportVOS = sgStepReportVOS.stream().filter(s -> s.getApprovalStatus() == null || (s.getApprovalStatus() != 4 && !(s.getApprovalStatus() == 3 && s.getResubmit() != 0))).collect(Collectors.toList());
        sgProgressReportVO.setSgStepReportVOS(sgStepReportVOS);
        if(sgProgressReportVO.getControlUnit()!=null){
            String controlUnit = sgProgressReportVO.getControlUnit();
            List<String> controlUnitS = Arrays.asList(controlUnit.split(","));
            List<String> users1=sgProjectInfoMapper.getUserS(controlUnitS);
            sgProgressReportVO.setUserIDs(users1);
        }
        String gxStepName = sgProgressReportVO.getGxStepName();
        String countyCd = sgProgressReportVO.getCountyCd();
        if("测量定位".equals(gxStepName)){
            if(countyCd!=null){
                List<String> controlUnitS = Arrays.asList(countyCd.split(","));
                List<String> xbUnitIDs=sgProjectInfoMapper.getUserS(controlUnitS);
                sgProgressReportVO.setXbUnitIDs(xbUnitIDs);
            }
        }
        return sgProgressReportVO;
    }
@@ -258,15 +376,33 @@
        Integer isReject = approvalDTO.getIsReject();
        Long userId = approvalDTO.getUserId();
        Long id = approvalDTO.getId();
        Long roleId = getRoleId();
        QueryWrapper<SgProgressReportDO> wrappers = new QueryWrapper<>();
        wrappers.eq("id", id);
        SgProgressReportDO sgProgressReportDOS1 = sgProgressReportMapper.selectOne(wrappers);
        //判断当前用户的角色是不是   工序配置的审核的角色
        Long gxDeviceId = sgProgressReportDOS1.getGxDeviceId();
        if (gxDeviceId != 998 && gxDeviceId != 999) {
            List<SgGxConfigDO> sgGxConfigDOS = new LambdaQueryChainWrapper<>(sgGxConfigMapper)
//                .eq(SgGxConfigDO::getGxDeviceType, sgProgressReportDOS1.getDeviceType())
                .eq(SgGxConfigDO::getGxStepId, sgProgressReportDOS1.getGxStepId()).orderByAsc(SgGxConfigDO::getSgOrder).list();
            List<String> roIds = sgGxConfigDOS.stream().map(SgGxConfigDO::getRoleId).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(roIds)){
                throw new ServiceException("请完成工序角色配置!");
            }
        }
        SgProgressReportDO sgProgressReportDO = sgProgressReportMapper.selectById(id);
        List<SgReportUserDO> sgReportUserDOS = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).ne(SgReportUserDO::getApprovalOrder,0).eq(SgReportUserDO::getIsHis,0)
            .orderByAsc(SgReportUserDO::getApprovalOrder).list();
        //审批者
        SgReportUserDO sgReportUserDO = new SgReportUserDO();
        if (isReject==1 && sgProgressReportDO.getStatus().equals(2)){
            sgReportUserDO = sgReportUserDOS.get(0);
        if (isReject==1){
            sgReportUserDO = SgReportUserDO.builder().reportId(approvalDTO.getId()).approvalOrder(sgReportUserDOS.get(sgReportUserDOS.size() - 1).getApprovalOrder()+1).roleId(roleId).build();
            sgReportUserMapper.insert(sgReportUserDO);
        }else {
            sgReportUserDO = sgReportUserDOS.stream().filter(s -> s.getUserId().equals(Long.parseLong(sgProgressReportDO.getAuditPerson()))).findFirst().get();
            sgReportUserDO = sgReportUserDOS.stream().filter(s -> s.getRoleId().equals(Long.parseLong(sgProgressReportDO.getAuditPerson()))).findFirst().get();
        }
        Date date = new Date();
        LambdaUpdateChainWrapper<SgProgressReportDO> updateChainWrapper = new LambdaUpdateChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getId, id);
@@ -274,64 +410,32 @@
            .eq(SgReportUserDO::getId, sgReportUserDO.getId()).set(SgReportUserDO::getApprovalContent,approvalDTO.getApprovalContent()).set(SgReportUserDO::getApprovalTime,date);
        if (approvalDTO.getStatus()==1){
            Integer approvalOrder = sgReportUserDO.getApprovalOrder();
            userUpdate.set(SgReportUserDO::getApprovalStatus,1).update();
            userUpdate.set(SgReportUserDO::getApprovalStatus,1).set(SgReportUserDO::getUserId,userId).update();
        Optional<SgReportUserDO> next = sgReportUserDOS.stream().filter(s -> s.getApprovalOrder() == approvalOrder + 1).findFirst();
        //如果存在下一个审批人,则继续审批
        if (next.isPresent()){
            SgReportUserDO nextUser = next.get();
            updateChainWrapper.set(SgProgressReportDO::getStatus,1).set(SgProgressReportDO::getAuditPerson,nextUser.getUserId()).update();
            updateChainWrapper.set(SgProgressReportDO::getStatus,1).set(SgProgressReportDO::getAuditPerson,nextUser.getRoleId()).update();
        }else {
            updateChainWrapper.set(SgProgressReportDO::getStatus,2).set(SgProgressReportDO::getAuditPerson,null).update();
            Long proframId = sgProgressReportMapper.selectById(approvalDTO.getId()).getProframId();
            //工序审核完成后 进行项目和设备状态的判断
            cachedThreadPool.execute(new Runnable(){
                @Override
                public  void  run(){
//            cachedThreadPool.execute(new Runnable(){
//                @Override
//                public  void  run(){
                    setProgramAndDeviceStatus(proframId);
                }
            });
            cachedThreadPool.execute(new Runnable(){
                @Override
                public  void  run(){
                    Long proframId = sgProgressReportMapper.selectById(approvalDTO.getId()).getProframId();
                    setProgramProgress(proframId);
                }
            });
//
//                }
//            });
            Long projectID = sgProgressReportMapper.selectById(approvalDTO.getId()).getProframId();
            setProgramProgress(projectID);
        }
        }else {
            updateChainWrapper.set(SgProgressReportDO::getStatus,3);
            updateChainWrapper.set(SgProgressReportDO::getResubmit,0);
            userUpdate.set(SgReportUserDO::getApprovalStatus,2);
            /*if (isReject==1){
                userUpdate.set(SgReportUserDO::getUserId,userId);
            }*/
            userUpdate.set(SgReportUserDO::getUserId,userId);
            userUpdate.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();
                    setReportUser(date, reportUserDO);
                    sgReportUserMapper.insert(reportUserDO);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }else if (reportUserDO.getApprovalOrder()>sgReportUserDO.getApprovalOrder()){
                    sgReportUserMapper.deleteById(reportUserDO.getId());
                    setReportUser(date, reportUserDO);
                    sgReportUserMapper.insert(reportUserDO);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                if (reportUserDO.getApprovalOrder()==1){
                    updateChainWrapper.set(SgProgressReportDO::getAuditPerson,reportUserDO.getUserId());
                }
            }*/
            updateChainWrapper.update();
        }
@@ -343,12 +447,14 @@
     * @param proframId
     */
    public void setProgramProgress(Long proframId) {
        SgProjectInfoVO sgProjectInfoVO = sgProjectInfoMapper.selectVOById(proframId);
        List<SgProjectInfoDO> progress = sgProjectInfoService.getProjectProgress(Collections.singletonList(sgProjectInfoVO));
        ProjectSearchDTO searchDTO = new ProjectSearchDTO();
        searchDTO.setProjectId(String.valueOf(proframId));
        List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject(searchDTO);
        List<SgProjectInfoDO> progress = sgProjectInfoService.getProjectProgress(list);
        String projectProgress = progress.get(0).getProjectProgress();
        if (StringUtils.isNotBlank(projectProgress)){
            String s = projectProgress.substring(0, projectProgress.length() - 1);
            new LambdaUpdateChainWrapper<>(sgProjectInfoMapper).set(SgProjectInfoDO::getProjectProgress,s).update() ;
            new LambdaUpdateChainWrapper<>(sgProjectInfoMapper).set(SgProjectInfoDO::getProjectProgress,s).eq(SgProjectInfoDO::getId,proframId).update() ;
        }
    }
    private  void setReportUser(Date date, SgReportUserDO reportUserDO) {
@@ -401,7 +507,19 @@
                        sgProjectInfoMapper.updateById(project);
                    }
                }
                Map<String, SgOperatingRateVO> deviceTypes = sgProjectInfoService.getDeviceTypes(Arrays.asList(projectId.toString()));
                SgOperatingRateVO vo = deviceTypes.get(projectId.toString());
                if (Objects.nonNull(vo)){
                    project.setSurfaceProgress(vo.getSurfaceProgress());
                    project.setSurfaceNum(vo.getSurfaceNum());
                    project.setVideoProgress(vo.getVideoProgress());
                    project.setVideoNum(vo.getVideoNum());
                    project.setTransProgress(vo.getTransProgress());
                    project.setTransNum(vo.getTransNum());
                    project.setSeepageProgress(vo.getSeepageProgress());
                    project.setSeepageNum(vo.getSeepageNum());
                    sgProjectInfoMapper.updateById(project);
                }
            }
        }
@@ -409,22 +527,111 @@
    @Override
    public void updateReport(SgProgressReportDO sgProgressReportDO) {
        Long gxDeviceId = sgProgressReportDO.getGxDeviceId();
        Long gxStepId = sgProgressReportDO.getGxStepId();
        SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(gxStepId);
        List<SgGxStepDO> list = sgGxStepMapper.selectByGxInfoId(sgGxStepDO.getGxInfoId());
        QueryWrapper<SgProgressReportDO> wrappers = new QueryWrapper<>();
        wrappers.eq("profram_id", sgProgressReportDO.getProframId()).ne("status", 4).eq("gx_step_name", "测量定位");
        List<SgProgressReportDO> sgProgressReportDOS1 = sgProgressReportMapper.selectList(wrappers);
        if(sgProgressReportDO.getGxDeviceId()==998){
            ProjectSearchDTO search = new ProjectSearchDTO();
            search.setProjectId(sgProgressReportDO.getProframId().toString());
            List<SgProjectInfoVO> sgProjectInfoVOS = sgProjectInfoMapper.queryStepByProject(search);
            if(sgProjectInfoVOS != null){
                sgProjectInfoVOS.forEach(s ->{
                    if(!s.getProjectStatus().equals(2)){
                        throw new ServiceException("请完成所有设备工序审批!");
                    }
                });
            }else{
                throw new ServiceException("无设备审批数据!");
            }
        }
        if (sgProgressReportDOS1!= null && sgProgressReportDOS1.size() > 0) {
            for (SgProgressReportDO sgProgressReportDO1 : sgProgressReportDOS1) {
                if (sgProgressReportDO1.getStatus()!= 2 && sgProgressReportDO1.getStatus()!= 3)  {
                    throw new ServiceException("请先完成测量定位的审批!");
                }
            }
        } else if (sgProgressReportDOS1 == null || (!sgProgressReportDO.getGxStepName().equals("测量定位"))) {
            throw new ServiceException("请先发起测量定位的审批!");
        }
        for (SgGxStepDO gxStepDO : list) {
            if (Integer.parseInt(sgGxStepDO.getGxStepNum()) - Integer.parseInt(gxStepDO.getGxStepNum()) >= 1) {
                QueryWrapper<SgProgressReportDO> wrapper1 = new QueryWrapper<>();
                wrapper1.eq("gx_step_id", gxStepDO.getId());
                wrapper1.eq("gx_device_id",gxDeviceId);
                wrapper1.ne("status",4);
                wrapper1.ne("status",3);
                SgProgressReportDO one = sgProgressReportMapper.selectOne(wrapper1);
                if (one == null || one.getStatus() != 2) {
                    throw new ServiceException("请先完成" + gxStepDO.getGxStepName() + "的审批!");
                }
            }
        }
        sgProgressReportMapper.updateById(sgProgressReportDO);
    }
    @Override
    public List<SgProgressReportVO> queryList(ProjectSearchDTO searchDTO) {
        Long userId = AuthUtil.getUserId();
        searchDTO.setUserId(userId);
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        setUnit(searchDTO,user,roleId);
        searchDTO.setRoleUnit(roleId);
        //searchDTO.setUserId(userId);
        List<SgProgressReportVO> list = sgProgressReportMapper.queryList(searchDTO);
        if(list != null){
            list.forEach(s ->{
                List<String> resultUsers=new ArrayList<>();
                if(s.getControlUnit()!=null){
                    String controlUnit = s.getControlUnit();
                    List<String> controlUnitS = Arrays.asList(controlUnit.split(","));
                    List<String> users=sgProjectInfoMapper.getUserS(controlUnitS);
                    resultUsers.addAll(users);
                }
                if(s.getSelfUnit()!=null){
                    String selfUnit = s.getSelfUnit();
                    List<String> selfUnitS = Arrays.asList(selfUnit.split(","));
                    List<String> selfUnitusers=sgProjectInfoMapper.getUserS(selfUnitS);
                    resultUsers.addAll(selfUnitusers);
                }
                s.setUserIDs(resultUsers);
                String gxStepName = s.getGxStepName();
                String countyCd = s.getCountyCd();
                if("测量定位".equals(gxStepName)){
                    if(countyCd!=null){
                        List<String> controlUnitS = Arrays.asList(countyCd.split(","));
                        List<String> xbUnitIDs=sgProjectInfoMapper.getUserS(controlUnitS);
                        s.setXbUnitIDs(xbUnitIDs);
                    }
                }
            });
        }
        return list;
    }
    @Override
    public Map<String, Long> countList(ProjectSearchDTO searchDTO) {
        Long userId = AuthUtil.getUserId();
        searchDTO.setUserId(userId);
        searchDTO.setAuditPerson(userId.toString());
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        setUnit(searchDTO,user,roleId);
        searchDTO.setRoleUnit(roleId);
        //searchDTO.setUserId(userId);
        //searchDTO.setAuditPerson(userId.toString());
        List<SgProgressReportVO> all = sgProgressReportMapper.queryList(searchDTO);
        searchDTO.setApprovalStatus(0);
        List<SgProgressReportVO> pending = sgProgressReportMapper.queryList(searchDTO);
@@ -442,6 +649,10 @@
    @Override
    public Map<String, Long> countListAll(ProjectSearchDTO searchDTO) {
        if (StringUtils.isNotBlank(searchDTO.getTypeName())){
            List<String> childType = sgGxMapper.childType(searchDTO.getTypeName());
            searchDTO.setChildTypeList(childType);
        }
        List<SgProgressReportVO> list = sgProgressReportMapper.queryPageListAll(null, searchDTO);
        Map<String, Long> map = new HashMap<>();
        getStatusCountByList(list, map);
@@ -495,17 +706,95 @@
        return true;
    }
    public Long getRoleId(){
        BladeUser user = AuthUtil.getUser();
        List<String> userRole = Arrays.asList(user.getRoleId().split(","));
        List<Long> roleList = sgProgressReportMapper.getSgEngineerRole();
        Long roleId = null;
        for (String s : userRole) {
            long l = Long.parseLong(s);
            if (roleList.contains(l)){
                roleId = l;
            }
        }
        if (Objects.isNull(roleId)){
            roleId = Long.parseLong(userRole.get(0));
        }
        return roleId;
    }
    @Override
    public IPage<SgProgressReportVO> progressPage(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) {
        Long userId = AuthUtil.getUserId();
        searchDTO.setUserId(userId);
        if (searchDTO.getApprovalStatus()!=null && searchDTO.getApprovalStatus() ==0){
            searchDTO.setAuditPerson(String.valueOf(userId));
        }
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        setUnit(searchDTO, user, roleId);
        searchDTO.setRoleUnit(roleId);
//        if (searchDTO.getApprovalStatus()!=null && searchDTO.getApprovalStatus() ==0){
//            searchDTO.setAuditPerson(String.valueOf(userId));
//        }
        List<SgProgressReportVO> list = sgProgressReportMapper.queryList(page, searchDTO);
        if(list != null){
            list.forEach(s ->{
                List<String> resultUsers=new ArrayList<>();
                if(s.getControlUnit()!=null){
                    String controlUnit = s.getControlUnit();
                    List<String> controlUnitS = Arrays.asList(controlUnit.split(","));
                    List<String> users=sgProjectInfoMapper.getUserS(controlUnitS);
                    resultUsers.addAll(users);
                }
                if(s.getSelfUnit()!=null){
                    String selfUnit = s.getSelfUnit();
                    List<String> selfUnitS = Arrays.asList(selfUnit.split(","));
                    List<String> selfUnitusers=sgProjectInfoMapper.getUserS(selfUnitS);
                    resultUsers.addAll(selfUnitusers);
                }
                s.setUserIDs(resultUsers);
                String gxStepName = s.getGxStepName();
                String countyCd = s.getCountyCd();
                if("测量定位".equals(gxStepName)){
                    if(countyCd!=null){
                        List<String> controlUnitS = Arrays.asList(countyCd.split(","));
                        List<String> xbUnitIDs=sgProjectInfoMapper.getUserS(controlUnitS);
                        s.setXbUnitIDs(xbUnitIDs);
                    }
                }
            });
        }
        return page.setRecords(list);
    }
    /**
     * 设置部门单位查询条件
     */
    private  void setUnit(ProjectSearchDTO searchDTO, BladeUser user, Long roleId) {
        List<String> longList = Arrays.stream(user.getDeptId().split(","))
            .collect(Collectors.toList());
        //判断是不是省厅建办  否的话就不设置部门
        if (!roleId.equals(1800820667082948610L)){
            //判断是不是县级建办  否的话就是监理单位下人员进行
            if(roleId.equals(1800820855352672257L)){
                searchDTO.setUserUnit(longList);
            }
            if(roleId.equals(1811657352658042882L)) {
                searchDTO.setCountryUnit(longList);
            }
            if(roleId.equals(1800818489547112450L)){
                searchDTO.setSelfUnit(longList);
            }
        }
    }
    @Override
    public String getDeviceReport(Long gxDeviceId, Long gxStepId) {
        QueryWrapper<SgProgressReportDO> wrapper = new QueryWrapper<>();
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -10,7 +10,6 @@
import cn.gistack.sm.sg.service.SgProjectInfoService;
import cn.gistack.sm.sjztmd.entity.AttAdBase;
import cn.gistack.sm.sjztmd.service.IAttAdBaseService;
import cn.hutool.core.lang.copier.Copier;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -18,15 +17,14 @@
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jetbrains.annotations.NotNull;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import javax.security.auth.login.LoginContext;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.*;
import java.util.function.Function;
@@ -53,19 +51,133 @@
    @Autowired
    private SgGxStepMapper sgGxStepMapper;
    @Autowired
    private SgProgressReportServiceImpl sgProgressReportService;
    @Override
    public IPage<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO) {
    public Object queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO) {
        List<String> sgCodeS = getSgCodeByUser();
        searchDTO.setSgCodeS(sgCodeS);
        List<SgProjectInfoDO> sgProjectInfoDOS = baseMapper.queryPageList(page,searchDTO);
        List<SgProjectInfoDO> projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
        if (CollectionUtils.isNotEmpty(projectProgress)){
            Map<Long, String> progressMap = projectProgress.stream().filter(s->s.getProjectProgress()!=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
        setAdCode(searchDTO);
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        //setUnit2(searchDTO,user,roleId);
        Boolean isPage = searchDTO.getIsPage();
        if (isPage==null) isPage = true;
        if (isPage ){
            List<SgProjectInfoDO> sgProjectInfoDOS = baseMapper.queryPageList(page,searchDTO);
            List<SgProjectInfoDO> projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
            if (CollectionUtils.isNotEmpty(projectProgress)){
                Map<Long, String> progressMap = projectProgress.stream().filter(s->s.getProjectProgress()!=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
                sgProjectInfoDOS.forEach(s->{
                    s.setProjectProgress(progressMap.get(s.getId()));
//                    setPercentage(s);
                });
            }
            return page.setRecords(sgProjectInfoDOS);
        }else {
            List<SgAllDeptOrUser> allDepts = sgProjectInfoMapper.queryDept();
            Map<Long, String> deptMap = allDepts.stream().collect(Collectors.toMap(SgAllDeptOrUser::getId, SgAllDeptOrUser::getName));
            List<SgAllDeptOrUser> allUser = sgProjectInfoMapper.queryUser();
            Map<Long, String> userMap = allUser.stream().collect(Collectors.toMap(SgAllDeptOrUser::getId, SgAllDeptOrUser::getName));
            List<SgProjectInfoDO> sgProjectInfoDOS = baseMapper.queryPageList(null,searchDTO);
            List<SgProjectInfoDO> projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
            if (CollectionUtils.isNotEmpty(projectProgress)){
                Map<Long, String> progressMap = projectProgress.stream().filter(s->s.getProjectProgress()!=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
                sgProjectInfoDOS.forEach(s->{
                    s.setProjectProgress(progressMap.get(s.getId()));
//                    setPercentage(s);
                });
            }
            sgProjectInfoDOS.forEach(s->{
                s.setProjectProgress(progressMap.get(s.getId()));
                //土建
                String constructionUnit = s.getConstructionUnit();
                s.setConstructionUnit(getUserOrDeptNames(deptMap,s.getConstructionUnit()));
                s.setConstructionPerson(getUserOrDeptNames(userMap, s.getConstructionPerson()));
                //设备
                s.setSelfUnit(getUserOrDeptNames(deptMap,s.getSelfUnit()));
                s.setSelfPerson(getUserOrDeptNames(userMap, s.getSelfPerson()));
                //设计
                s.setDesignUnit(getUserOrDeptNames(deptMap, s.getDesignUnit()));
                s.setDesignPerson(getUserOrDeptNames(userMap, s.getDesignPerson()));
                //监理
                s.setControlUnit(getUserOrDeptNames(deptMap, s.getControlUnit()));
                s.setControlPerson(getUserOrDeptNames(userMap, s.getControlPerson()));
                //检测
                s.setAcceptanceUnit(getUserOrDeptNames(deptMap, s.getAcceptanceUnit()));
                s.setAcceptancePerson(getUserOrDeptNames(userMap, s.getAcceptancePerson()));
            });
            return sgProjectInfoDOS;
        }
        return page.setRecords(sgProjectInfoDOS);
    }
    private  void setUnit2(ProjectSearchDTO searchDTO, BladeUser user, Long roleId) {
        List<String> longList = Arrays.stream(user.getDeptId().split(","))
            .collect(Collectors.toList());
        //判断是不是省厅建办  否的话就不设置部门
        if (!roleId.equals(1800820667082948610L)){
            //判断是不是县级建办  否的话就是监理单位下人员进行
            if(roleId.equals(1800820855352672257L)){
                searchDTO.setUserUnit(longList);
            }
            if(roleId.equals(1811657352658042882L)) {
                searchDTO.setCountryUnit(longList);
            }
            if(roleId==1800818489547112450L){
                searchDTO.setSelfUnit(longList);
            }
        }
    }
    public Long getRoleId(){
        BladeUser user = AuthUtil.getUser();
        List<String> userRole = Arrays.asList(user.getRoleId().split(","));
        List<Long> roleList = sgProgressReportMapper.getSgEngineerRole();
        Long roleId = null;
        for (String s : userRole) {
            long l = Long.parseLong(s);
            if (roleList.contains(l)){
                roleId = l;
            }
        }
        if (Objects.isNull(roleId)){
            roleId = Long.parseLong(userRole.get(0));
        }
        return roleId;
    }
    /**
     * 设置百分号
     * @param s
     */
    private void setPercentage(SgProjectInfoDO s) {
        s.setSurfaceProgress(StringUtils.isNotBlank(s.getSurfaceProgress()) ?null:s.getSurfaceProgress()+"%");
        s.setVideoProgress(StringUtils.isNotBlank(s.getVideoProgress())?null:s.getVideoProgress()+"%");
        s.setTransProgress(StringUtils.isNotBlank(s.getTransProgress())?null:s.getTransProgress()+"%");
        s.setSeepageProgress(StringUtils.isNotBlank(s.getSeepageProgress())?null:s.getSeepageProgress()+"%");
        s.setProjectAddress(StringUtils.isNotBlank(s.getProjectProgress())?null:s.getProjectProgress()+"%");
    }
    /**
     * 获取用户或者部门姓名
     * @return
     */
    private  String getUserOrDeptNames(Map<Long, String> map, String param ) {
        String result = "";
        if (StringUtils.isNotBlank(param)){
            // 使用Stream API来处理分割和映射
            result = Arrays.stream(param.split(",")) // 将字符串按逗号分割成数组,并转为Stream
                .map(Long::valueOf) // 将每个字符串元素转换为Long
                .map(map::get) // 使用userMap将Long映射为对应的用户名
                .collect(Collectors.joining(",")); // 使用逗号将用户名拼接成一个字符串
            return result;
        }
        return result;
    }
    /**
@@ -89,7 +201,7 @@
    public List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO) {
        List<PreAcceVO>  palist = new ArrayList<>();
        List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject( searchDTO);
        palist.add(handleQuery(25, list.get(0).getId()));
        palist.add(handleQuery(20, list.get(0).getId()));
        palist.add(handleQuery(26, list.get(0).getId()));
        List<SgProjectInfoDO> projectProgress = getProjectProgress(list);
        projectProgress.forEach(s->{
@@ -107,8 +219,11 @@
     */
    @NotNull
    public List<SgProjectInfoDO> getProjectProgress(List<SgProjectInfoVO> list) {
        List<SgProjectInfoVO> sortedList = list.stream()
            .sorted(Comparator.comparing(SgProjectInfoVO::getSort))
            .collect(Collectors.toList());
        //项目分组
        Map<Long, List<SgProjectInfoVO>> projectMap = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
        Map<Long, List<SgProjectInfoVO>> projectMap = sortedList.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<>();
@@ -127,7 +242,7 @@
                if (CollectionUtils.isEmpty(ptyValue)){
                    continue;
                }
                PtypeVO ptypeVO = PtypeVO.builder().pTypeName(ptyValue.get(0).getPtypeName()).build();
                PtypeVO ptypeVO = PtypeVO.builder().pTypeName(ptyValue.get(0).getPtypeName()).sort(ptyValue.get(0).getSort()).build();
                List<SgTypeVO> sgGxDOS = new ArrayList<>();
                //类型分组
                Map<String, List<SgProjectInfoVO>> GxMap = ptyValue.stream().filter(s->s.getDeviceType()!=null).collect(Collectors.groupingBy(SgProjectInfoVO::getDeviceType));
@@ -137,16 +252,18 @@
                    if (CollectionUtils.isEmpty(gxList)){
                        continue;
                    }
                    SgTypeVO typeVO = SgTypeVO.builder().typeName(gxList.get(0).getTypeName()).build();
                    gxList = gxList.stream().sorted(Comparator.comparing(SgProjectInfoVO::getPrice)).collect(Collectors.toList());
                    SgTypeVO typeVO = SgTypeVO.builder().typeName(gxList.get(0).getTypeName()).sort(gxList.get(0).getDSort()).build();
                    List<SgDeviceDO> deviceDOS = new ArrayList<>();
                    //设备分组
                    Map<Long, List<SgProjectInfoVO>> dMap = gxList.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getDId));
                    Map<Long, List<SgProjectInfoVO>> dMap = gxList.stream().filter(s->s.getDId()!=null).collect(Collectors.groupingBy(SgProjectInfoVO::getDId));
                    for (Map.Entry<Long, List<SgProjectInfoVO>> device : dMap.entrySet()) {
                        Long dId = device.getKey();
                        List<SgProjectInfoVO> deList = device.getValue();
                        SgDeviceDO sgDeviceDO = new SgDeviceDO();
                        sgDeviceDO.setId(dId);
                        sgDeviceDO.setDeviceName(deList.get(0).getDeviceName());
                        sgDeviceDO.setPrice(deList.get(0).getPrice());
                        List<SgGxStepDO> stepDOS = deList.stream().filter(s -> s.getReportStatus() == null || (s.getReportStatus() != 4 && !(s.getReportStatus() == 3 && s.getResubmit() != 0))).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());
@@ -166,7 +283,8 @@
                    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);
                    List<SgDeviceDO> sortDeviceDOs = deviceDOS.stream().filter(s->s.getPrice()!=null).sorted(Comparator.comparing(SgDeviceDO::getPrice)).collect(Collectors.toList());
                    typeVO.setDeviceDOS(sortDeviceDOs);
                    typeVO.setTypeProgress(getBigDecimalPercent(divideDevice));
                    typeVO.setProgress(divideDevice.toString());
                    sgGxDOS.add(typeVO);
@@ -176,6 +294,7 @@
                BigDecimal sgGxOver = BigDecimal.valueOf(sum);
                BigDecimal divideSgGx = sgGxOver.divide(sgGxSize, 2, RoundingMode.HALF_UP);
                ptypeVO.setPTypeProgress(getBigDecimalPercent(divideSgGx));
                sgGxDOS = sgGxDOS.stream().sorted(Comparator.comparing(SgTypeVO::getSort)).collect(Collectors.toList());
                ptypeVO.setSgTypeVOS(sgGxDOS);
                pTypes.add(ptypeVO);
            }
@@ -184,7 +303,8 @@
                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.setPtypeVOS(pTypes);
                List<PtypeVO> sortPtpes = pTypes.stream().sorted(Comparator.comparing(PtypeVO::getSort)).collect(Collectors.toList());
                sgProjectInfoDO.setPtypeVOS(sortPtpes);
                sgProjectInfoDO.setProjectProgress( getBigDecimalPercent(allDivideDevice));
                sgProjectInfoDO.setProjectProgressNum(allDivideDevice);
            }
@@ -225,33 +345,60 @@
     */
    @Override
    public IPage<SgProjectInfoVO> progressPage(IPage<SgProjectInfoVO> page, ProjectSearchDTO searchDTO) {
//        setDeptId(searchDTO);
        List<SgProjectInfoVO> list = new ArrayList<>();
            if(!searchDTO.getAdCode().isEmpty()){
            if(StringUtils.isNotBlank(searchDTO.getAdCode())){
                list =    sgProjectInfoMapper.progressList1(page, searchDTO);
            }else {
                list = sgProjectInfoMapper.progressList(page, searchDTO);
            }
        List<Long> ids = list.stream().map(SgProjectInfoVO::getId).collect(Collectors.toList());
        searchDTO.setProjectIds(ids);
        List<SgProjectInfoDO> projectProgress = new ArrayList<>();
        if(!searchDTO.getAdCode().isEmpty()){
            projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject1(searchDTO));
        }else {
            projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
        }
//        List<Long> ids = list.stream().map(SgProjectInfoVO::getId).collect(Collectors.toList());
//        searchDTO.setProjectIds(ids);
//        List<SgProjectInfoDO> projectProgress = new ArrayList<>();
//        if(StringUtils.isNotBlank(searchDTO.getAdCode())){
//            projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject1(searchDTO));
//        }else {
//            projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
//        }
        if (CollectionUtils.isNotEmpty(projectProgress)){
        Map<Long, String> progressMap = projectProgress.stream().filter(s->s!=null && s.getProjectProgress() !=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
//        if (CollectionUtils.isNotEmpty(projectProgress)){
        //Map<Long, String> progressMap = projectProgress.stream().filter(s->s!=null && s.getProjectProgress() !=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
        list.forEach(s->{
            s.setProjectProgress(progressMap.get(s.getId()));
        });}
            if (StringUtils.isNotBlank(s.getProjectProgress())){
                s.setProjectProgress(s.getProjectProgress()+"%");
            }else {
                s.setProjectProgress("0%");
            }
        });
//        }
        return page.setRecords(list);
    }
    @Override
    public List<SgProjectInfoDO> listAll(ProjectSearchDTO searchDTO) {
        return sgProjectInfoMapper.queryPageList(null,searchDTO);
        List<String> sgCodeS = getSgCodeByUser();
        searchDTO.setSgCodeS(sgCodeS);
        setDeptId(searchDTO);
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        setUnit2(searchDTO,user,roleId);
        List<SgProjectInfoDO> list = sgProjectInfoMapper.queryPageList(null, searchDTO);
        return list;
    }
    /**
     * setDeptId
     * @param searchDTO
     */
    private  void setDeptId(ProjectSearchDTO searchDTO) {
        String deptId = AuthUtil.getDeptId();
        boolean b = Objects.nonNull(searchDTO.getIsUnit()) && searchDTO.getIsUnit() == 1;
        if (!deptId.equals("420000000000")){
            if (!b){
                searchDTO.setDeptId(deptId);
            }
        }
    }
    /**
@@ -280,35 +427,88 @@
    public List<SgStatisProVO> getsgStatisticsList(String code) {
        AttAdBase ywxtAdDetail = iAttAdBaseService.getYwxtAdDetail(code);
        List<SgStatisProVO> sgStatisProVOS;
        //片区
        if (ywxtAdDetail == null) {
            sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsZero(code);
            getDeviceTypes(sgStatisProVOS);
            setDeviceTypes(sgStatisProVOS);
//            String getname = sgProjectInfoMapper.getname(code);
            String getname = code;
            updateProjectProgress(sgStatisProVOS, code, getname, "2");
        } else if (ywxtAdDetail.getAdGrad().equals("1")) {//默认
            sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsOne(code);
            getDeviceTypes(sgStatisProVOS);
            sgStatisProVOS = getSgStatisProVOS(sgStatisProVOS);
            setDeviceTypes(sgStatisProVOS);
            updateProjectProgress(sgStatisProVOS, ywxtAdDetail.getPAdCode(), ywxtAdDetail.getPAdName(), "0");
        } else {//区县
            sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsList(code);
            getDeviceTypes(sgStatisProVOS);
            setDeviceTypes(sgStatisProVOS);
            updateProjectProgress(sgStatisProVOS, ywxtAdDetail.getAdCode(), ywxtAdDetail.getAdName(), "3");
        }
        return sgStatisProVOS;
    }
    /**
     * 统计设备类型开工率
     * 统计施工进度
     * @param sgStatisProVOS
     */
    private void getDeviceTypes(List<SgStatisProVO> sgStatisProVOS) {
    private void setDeviceTypes(List<SgStatisProVO> sgStatisProVOS) {
        if (CollectionUtils.isNotEmpty(sgStatisProVOS)){
            Map<String, SgOperatingRateVO> deviceTypes = getDeviceTypes(sgStatisProVOS.stream().map(SgStatisProVO::getProIds).collect(Collectors.toList()));
            for (SgStatisProVO vo : sgStatisProVOS) {
                String proIds = vo.getProIds();
                SgOperatingRateVO sVo = deviceTypes.get(vo.getProIds());
                if (Objects.nonNull(sVo)){
                    vo.setSurfaceNum(sVo.getSurfaceNum());
                    vo.setSurfaceStartNum(sVo.getSurfaceStartNum());
                    vo.setSurfaceProgress(sVo.getSurfaceProgress());
                    vo.setVideoNum(sVo.getVideoNum());
                    vo.setVideoStartNum(sVo.getVideoStartNum());
                    vo.setVideoProgress(sVo.getVideoProgress());
                    vo.setTransNum(sVo.getTransNum());
                    vo.setTransStartNum(sVo.getTransStartNum());
                    vo.setTransProgress(sVo.getTransProgress());
                    vo.setSeepageNum(sVo.getSeepageNum());
                    vo.setSeepageStartNum(sVo.getSeepageStartNum());
                    vo.setSeepageProgress(sVo.getSeepageProgress());
                }
            }
        }
    }
    /**
     * 标段排序
     * @param sgStatisProVOS
     * @return
     */
    private  List<SgStatisProVO> getSgStatisProVOS(List<SgStatisProVO> sgStatisProVOS) {
        sgStatisProVOS = sgStatisProVOS.stream()
            .sorted(Comparator.comparing(s -> {
                String scode = s.getCode();
                if (scode.equals("第一标段")) {
                    return 1;
                } else if (scode.equals("第二标段")) {
                    return 2;
                } else if (scode.equals("第三标段")) {
                    return 3;
                } else if (scode.equals("第四标段")) {
                    return 4;
                } else if (scode.equals("第五标段")) {
                    return 5;
                } else {
                    return Integer.MAX_VALUE;
                }
            }))
            .collect(Collectors.toList());
        return sgStatisProVOS;
    }
    /**
     * 统计设备类型开工率
     */
    public Map<String,SgOperatingRateVO> getDeviceTypes(List<String> projectIds) {
        Map<String,SgOperatingRateVO> result = new HashMap<>();
        if (CollectionUtils.isNotEmpty(projectIds)){
            for (String proIds : projectIds) {
                SgOperatingRateVO sgOperatingRateVO = new SgOperatingRateVO();
                if (StringUtils.isNotBlank(proIds)){
                List<SgStatisDeviceVO> deviceVOS =    sgProjectInfoMapper.getDeviceTypes("("+proIds+")");
                if(CollectionUtils.isNotEmpty(deviceVOS)){
@@ -318,12 +518,13 @@
                    if (Objects.nonNull(sg108)){
                        Integer deviceCount = sg108.getDeviceCount();
                        Integer deviceStart = sg108.getDeviceStart();
                        vo.setSurfaceNum(deviceCount);
                        sgOperatingRateVO.setSurfaceNum(deviceCount);
                        sgOperatingRateVO.setSurfaceStartNum(deviceStart);
                        if (deviceCount != 0){
                            BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                            vo.setSeepageProgress(getBigDecimalPercent(divide));
                            sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide));
                        }else {
                            vo.setSeepageProgress("0%");
                            sgOperatingRateVO.setSeepageProgress("0%");
                        }
                    }
                    //视频
@@ -331,12 +532,13 @@
                    if (Objects.nonNull(sg104)){
                        Integer deviceCount = sg104.getDeviceCount();
                        Integer deviceStart = sg104.getDeviceStart();
                        vo.setVideoNum(deviceCount);
                        sgOperatingRateVO.setVideoNum(deviceCount);
                        sgOperatingRateVO.setVideoStartNum(deviceStart);
                        if (deviceCount != 0){
                            BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                            vo.setVideoProgress(getBigDecimalPercent(divide));
                            sgOperatingRateVO.setVideoProgress(getBigDecimalPercent(divide));
                        }else {
                            vo.setVideoProgress("0%");
                            sgOperatingRateVO.setVideoProgress("0%");
                        }
                    }
                    //渗压
@@ -344,12 +546,13 @@
                    if (Objects.nonNull(sg101)){
                        Integer deviceCount = sg101.getDeviceCount();
                        Integer deviceStart = sg101.getDeviceStart();
                        vo.setTransNum(deviceCount);
                        sgOperatingRateVO.setTransNum(deviceCount);
                        sgOperatingRateVO.setTransStartNum(deviceStart);
                        if (deviceCount != 0){
                            BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                            vo.setTransProgress(getBigDecimalPercent(divide));
                            sgOperatingRateVO.setTransProgress(getBigDecimalPercent(divide));
                        }else {
                            vo.setTransProgress("0%");
                            sgOperatingRateVO.setTransProgress("0%");
                        }
                    }
                    //渗流
@@ -357,18 +560,21 @@
                    if (Objects.nonNull(sg102)){
                        Integer deviceCount = sg102.getDeviceCount();
                        Integer deviceStart = sg102.getDeviceStart();
                        vo.setSeepageNum(deviceCount);
                        sgOperatingRateVO.setSeepageNum(deviceCount);
                        sgOperatingRateVO.setSeepageStartNum(deviceStart);
                        if (deviceCount != 0){
                            BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                            vo.setSeepageProgress(getBigDecimalPercent(divide));
                            sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide));
                        }else {
                            vo.setSeepageProgress("0%");
                            sgOperatingRateVO.setSeepageProgress("0%");
                        }
                    }
                    }
                    result.put(proIds,sgOperatingRateVO);
                }
            }
        }
        return result;
    }
    private void updateProjectProgress(List<SgStatisProVO> sgStatisProVOS, String pcode, String pname, String adGrad) {
@@ -386,7 +592,11 @@
                for (String id : ids) {
                    projectSearchDTO.setProjectId(id);
                    List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject(projectSearchDTO);
                    getProjectProgress(list).forEach(ss -> bigDecimals.add(ss.getProjectProgressNum()));
                    getProjectProgress(list).forEach(ss->{
                        if (Objects.nonNull(ss.getProjectProgressNum())){
                            bigDecimals.add(ss.getProjectProgressNum());
                        }
                    });
                }
                BigDecimal reduce = bigDecimals.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -466,10 +676,15 @@
    @Override
    public Map<String, Object> projectCount(ProjectSearchDTO searchDTO) {
        List<String> sgCodeS = getSgCodeByUser();
        searchDTO.setSgCodeS(sgCodeS);
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        //setUnit2(searchDTO,user,roleId);
        Map<String, Object> map  = new HashMap<>();
        List<SgProjectInfoVO> progressList = progressList(searchDTO);
        BigDecimal reduce = progressList.stream().filter(s->s.getProjectProgressNum()!=null).map(SgProjectInfoDO::getProjectProgressNum).reduce(BigDecimal.ZERO, BigDecimal::add);
        BigDecimal divide = reduce.divide(BigDecimal.valueOf(progressList.size()), 2, RoundingMode.HALF_UP);
        BigDecimal divide = reduce.divide(BigDecimal.valueOf(progressList.size()==0?1:progressList.size()), 2, RoundingMode.HALF_UP);
        List<SgProjectInfoDO> pending = progressList.stream().filter(s -> s.getStatus() == 0).collect(Collectors.toList());
        List<SgProjectInfoDO> progress = progressList.stream().filter(s -> s.getStatus() == 1).collect(Collectors.toList());
        List<SgProjectInfoDO> over = progressList.stream().filter(s -> s.getStatus() == 2).collect(Collectors.toList());
@@ -512,7 +727,7 @@
            SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(stepIdForNull);
            preAcceVO.setName(sgGxStepDO.getGxStepName());
            preAcceVO.setProgramId(programId);
            preAcceVO.setGxDeviceId(stepIdForNull != 25? (long)998:(long)999);
            preAcceVO.setGxDeviceId(stepIdForNull != 20? (long)998:(long)999);
            preAcceVO.setGxStepId(sgGxStepDO.getId());
        }
@@ -520,4 +735,152 @@
    }
    @Override
    public List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto) {
        List<String> sgCodeS = getSgCodeByUser();
        dto.setSgCodeS(sgCodeS);
        setAdCode(dto);
        BladeUser user = AuthUtil.getUser();
        Long roleId = getRoleId();
        //setUnit2(dto,user,roleId);
        List<SgProjectTreeVO> list =     sgProjectInfoMapper.projectTree(dto);
        if (CollectionUtils.isNotEmpty(list)){
            list.forEach(x->{
                if (StringUtils.isBlank(x.getCountyNm())){
                    x.setCountyNm(x.getCityNm());
                }
                if (StringUtils.isBlank(x.getTownNm())){
                    x.setTownNm(x.getCountyNm());
                }
            });
            // 按省、片区、市、县、乡镇分组
            Map<String, Map<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>>> groupedProjects = list.stream()
                .collect(
                    Collectors.groupingBy(SgProjectTreeVO::getProvinceNm,
                        Collectors.groupingBy(SgProjectTreeVO::getLot,
                            Collectors.groupingBy(SgProjectTreeVO::getCityNm,
                                Collectors.groupingBy(SgProjectTreeVO::getCountyNm,
                                    Collectors.groupingBy(SgProjectTreeVO::getTownNm
                                    ))))));
                List<SgProjectTreeVO> tree = new ArrayList<>();
                for (Map.Entry<String, Map<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>>> provinceEntry : groupedProjects.entrySet()) {
                    SgProjectTreeVO provinceNode = new SgProjectTreeVO();
                    provinceNode.setProvinceNm(provinceEntry.getKey());
                    provinceNode.setRegionName(provinceEntry.getKey());
                    provinceNode.setId(UUID.randomUUID().toString().replace("-",""));
                    provinceNode.setLevel(1);
                    List<SgProjectTreeVO> provinceChildren = new ArrayList<>();
                    for (Map.Entry<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>> lotEntry : provinceEntry.getValue().entrySet()) {
                        SgProjectTreeVO lotNode = new SgProjectTreeVO();
                        List<String> lotIds = new ArrayList<>();
                        lotNode.setLot(lotEntry.getKey());
                        lotNode.setRegionName(lotEntry.getKey());
                        lotNode.setId(UUID.randomUUID().toString().replace("-",""));
                        lotNode.setLevel(2);
                        List<SgProjectTreeVO> lotChildren = new ArrayList<>();
                        for (Map.Entry<String, Map<String, Map<String, List<SgProjectTreeVO>>>> cityEntry : lotEntry.getValue().entrySet()) {
                            SgProjectTreeVO cityNode = new SgProjectTreeVO();
                            List<String> cityIds = new ArrayList<>();
                            cityNode.setCityNm(cityEntry.getKey());
                            cityNode.setRegionName(cityEntry.getKey());
                            cityNode.setId(UUID.randomUUID().toString().replace("-",""));
                            cityNode.setLevel(3);
                            List<SgProjectTreeVO> cityChildren = new ArrayList<>();
                            for (Map.Entry<String, Map<String, List<SgProjectTreeVO>>> countyEntry : cityEntry.getValue().entrySet()) {
                                SgProjectTreeVO countyNode = new SgProjectTreeVO();
                                List<String> countyIds = new ArrayList<>();
                                countyNode.setCountyNm(countyEntry.getKey());
                                countyNode.setRegionName(countyEntry.getKey());
                                countyNode.setId(UUID.randomUUID().toString().replace("-",""));
                                countyNode.setLevel(4);
                                List<SgProjectTreeVO> countyChildren = new ArrayList<>();
                                for (Map.Entry<String, List<SgProjectTreeVO>> townEntry : countyEntry.getValue().entrySet()) {
                                    SgProjectTreeVO townNode = new SgProjectTreeVO();
                                    townNode.setTownNm(townEntry.getKey());
                                    townNode.setRegionName(townEntry.getKey());
                                    townNode.setChildList(townEntry.getValue());
                                    townNode.setChildNum((long) townEntry.getValue().size());
                                    townNode.setId(UUID.randomUUID().toString().replace("-",""));
                                    townNode.setLevel(5);
                                    townNode.setProjectIds(townEntry.getValue().stream().map(SgProjectTreeVO::getId).collect(Collectors.toList()));
                                    countyIds.addAll(townNode.getProjectIds());
                                    countyChildren.add(townNode);
                                }
                                countyNode.setChildNum(countyChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum());
                                countyNode.setChildList(countyChildren);
                                countyNode.setProjectIds(countyIds);
                                cityIds.addAll(countyIds);
                                cityChildren.add(countyNode);
                            }
                            cityNode.setChildNum(cityChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum());
                            cityNode.setChildList(cityChildren);
                            cityNode.setProjectIds(cityIds);
                            lotIds.addAll(cityIds);
                            lotChildren.add(cityNode);
                        }
                        lotNode.setChildNum(lotChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum());
                        lotNode.setChildList(lotChildren);
                        lotNode.setProjectIds(lotIds);
                        provinceChildren.add(lotNode);
                    }
                    provinceNode.setChildNum(provinceChildren.stream().mapToLong(SgProjectTreeVO::getChildNum).sum());
                    provinceNode.setChildList(provinceChildren);
                    tree.add(provinceNode);
                }
            List<SgProjectTreeVO> childList = tree.get(0).getChildList();
            List<SgProjectTreeVO> collect = childList.stream()
                .sorted(Comparator.comparing(s -> {
                    String scode = s.getRegionName();
                    if (scode.equals("第一标段")) {
                        return 1;
                    } else if (scode.equals("第二标段")) {
                        return 2;
                    } else if (scode.equals("第三标段")) {
                        return 3;
                    } else if (scode.equals("第四标段")) {
                        return 4;
                    } else if (scode.equals("第五标段")) {
                        return 5;
                    } else {
                        return Integer.MAX_VALUE;
                    }
                }))
                .collect(Collectors.toList());
            tree.get(0).setChildList(collect);
            return tree;
        }
        return new ArrayList<>();
    }
    private void setAdCode(ProjectSearchDTO dto) {
        String deptId = AuthUtil.getDeptId();
        Long roleId = sgProgressReportService.getRoleId();
        if(roleId.equals(1811657352658042882L)){
            dto.setAdCode(deptId);
        }
    }
    @Override
    public IPage<ResVO> resList(IPage<ResVO> page, ProjectSearchDTO dto) {
        List<String> sgCodeByUser = getSgCodeByUser();
        dto.setSgCodeS(sgCodeByUser);
        return page.setRecords(baseMapper.resList(page,dto));
    }
    @Override
    @Transactional
    public void delete(String ids) {
        List<String> list = Arrays.asList(ids.split(","));
        list.forEach(id->{
            List<SgProgressReportDO> reportDOS = new LambdaQueryChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getProframId, id).list();
            if (CollectionUtils.isNotEmpty(reportDOS)){
                SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(id);
                throw new ServiceException(sgProjectInfoDO.getProjectName() + "存在施工审批,无法删除!");
            }
            sgProjectInfoMapper.deleteById(id);
        });
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbProject.java
@@ -59,9 +59,15 @@
    @TableField("\"plan_url\"")
    private String planUrl;
    @TableField("\"plan_name\"")
    private String planName;
    //方案批复,逗号分隔字符串xxxx,xxxx
    @TableField("\"plan_feed_back_url\"")
    private String planFeedBackUrl;
    @TableField("\"plan_feed_back_name\"")
    private String planFeedBackName;
    //是否政府采购,1是;2否
    @TableField("\"is_gov_purchase\"")
@@ -75,6 +81,9 @@
    @TableField("\"gov_url\"")
    private String govUrl;
    @TableField("\"gov_name\"")
    private String govName;
    //合同签订时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
@@ -84,6 +93,9 @@
    //合同附件
    @TableField("\"contract_url\"")
    private String contractUrl;
    @TableField("\"contract_name\"")
    private String contractName;
    //计划验收时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -105,6 +117,9 @@
    @TableField("\"check_url\"")
    private String checkUrl;
    @TableField("\"check_name\"")
    private String checkName;
    //是否校验
    @TableField("\"check_state\"")
    private String checkState;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbProjectSchedule.java
@@ -44,6 +44,13 @@
    @TableField("\"actual_fund\"")
    private double actualFund;
    //附件名称
    @TableField("\"pay_order_name\"")
    private String payOrderName;
    //附件url
    @TableField("\"pay_order_url\"")
    private String payOrderUrl;
    //创建人
    @TableField("\"create_user\"")
    private String createUser;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.java
@@ -77,6 +77,10 @@
     * @return
     */
    int getDimResInfoACount();
    int getAttWmstBaseCount();
    int getAttImagestBaseCount();
    int getAttCdBaseCount();
    int getAttWyCdBaseCount();
    Boolean updateIsShowStatus(@Param("ids") String ids, @Param("isShow") Integer status);
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml
@@ -14,7 +14,7 @@
    <select id="selectAttResBaseGeneralInvestigation"
            resultType="cn.gistack.sm.sjztmd.vo.AttResBaseGeneralInvestigationVO">
SELECT base.* from (
    SELECT base.* from (
        select
        a.*,
        b."check_state" AS tb_state,
@@ -58,6 +58,12 @@
        left join ywxt."att_ad_base" city on county."p_ad_code" = city."ad_code"
        left join ywxt."att_ad_base" province on city."p_ad_code" = province."ad_code"
        left join "SJZT_MD"."tb_res_general_investigation_state" b on a."code" = b."res_guid"
        <if test="attResBase.tbYear !=null and attResBase.tbYear !=''">
            AND b."tb_year" = #{attResBase.tbYear}
        </if>
        <if test="attResBase.tbQuarter !=null and attResBase.tbQuarter !=''">
            AND b."tb_quarter" = #{attResBase.tbQuarter}
        </if>
        left join
@@ -76,14 +82,14 @@
        <if test="attResBase.tbYear !=null and attResBase.tbYear !=''">
            AND TRGI."tb_year" = #{attResBase.tbYear}
        </if>
        <if test="attResBase.tbQuarter !=null and attResBase.tbQuarter !=''">
            AND TRGI."tb_quarter" = #{attResBase.tbQuarter}
        </if>
        group by TRGI."tb_state_id",TRGI."res_guid"
        ) tmp on tmp."tb_state_id" = b."guid"
        where 1 = 1
        <if test="attResBase.tbQuarter !=null and attResBase.tbQuarter !=''">
            AND b."tb_quarter" = #{attResBase.tbQuarter}
        </if>
        <if test="attResBase.name !=null and attResBase.name !=''">
            AND a."name" LIKE CONCAT('%',#{attResBase.name},'%')
        </if>
@@ -165,7 +171,11 @@
        left join "att_ad_base" county on town."p_ad_code" = county."ad_code"
        left join "att_ad_base" city on county."p_ad_code" = city."ad_code"
        left join "att_ad_base" province on city."p_ad_code" = province."ad_code"
        left join "att_res_rsb_norspi" arrn on arb."guid" = arrn."res_guid"
        left join (
            SELECT *,
            ROW_NUMBER() OVER(PARTITION BY "res_guid" ORDER BY "res_guid") AS rn
            from "att_res_rsb_norspi" arrn
        ) arrn on arb."guid" = arrn."res_guid" AND arrn.rn = 1
        WHERE arb."is_deleted"=0
        <if test="obj.code != null and obj.code != '' ">
            and (town."ad_code" = #{obj.code} or county."ad_code" = #{obj.code} or city."ad_code" = #{obj.code} or province."ad_code"
@@ -383,6 +393,22 @@
        from sjzt_dw."dim_res_info_a"
    </select>
    <select id="getAttWmstBaseCount" resultType="java.lang.Integer">
        select count(*) from sjzt_md."att_wmst_base"
    </select>
    <select id="getAttImagestBaseCount" resultType="java.lang.Integer">
        select count(*) from sjzt_md."att_imagest_base"
    </select>
    <select id="getAttCdBaseCount" resultType="java.lang.Integer">
        select count(*) from sjzt_md."att_cd_base"
    </select>
    <select id="getAttWyCdBaseCount" resultType="java.lang.Integer">
        select count(*) from sjzt_md."att_wy_cd_base"
    </select>
    <update id="updateIsShowStatus">
        UPDATE SJZT_MD."att_res_base" SET "is_show" = #{isShow}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeInvestigationMapper.xml
@@ -11,12 +11,15 @@
        SELECT
        COUNT(*) totalNum,
        SUM(CASE WHEN  (tdis."check_state" = 3) THEN 1 ELSE 0 END) as finishNum
        SUM(CASE WHEN  (tdis."check_state" >= 2) THEN 1 ELSE 0 END) as finishNum
        from
        SJZT_MD."tb_res_dyke" trd
        LEFT JOIN SJZT_MD."tb_dyke_investigation_state" tdis ON tdis."dyke_guid" = trd."guid" AND (tdis."check_state" = 3)
        LEFT JOIN SJZT_MD."tb_dyke_investigation_state" tdis ON tdis."dyke_guid" = trd."guid" AND (tdis."check_state" >= 2)
        <if test="params.tbYear != null and params.tbYear !=''">
            AND tdis."tb_year" = #{params.tbYear}
        </if>
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND tdis."tb_quarter" = #{params.tbQuarter}
        </if>
        LEFT JOIN YWXT."att_ad_base" aab ON aab."ad_code" = trd."ad_code"
        WHERE
@@ -47,7 +50,7 @@
        CASE WHEN dykeTmp.termiteLength THEN dykeTmp.termiteLength ELSE 0 END as termiteLength
        FROM
        sjzt_md."tb_res_dyke" trd
        LEFT JOIN SJZT_MD."tb_dyke_investigation_state" tdis ON tdis."dyke_guid" = trd."guid" AND (tdis."check_state" = 1 or tdis."check_state" = 2)
        LEFT JOIN SJZT_MD."tb_dyke_investigation_state" tdis ON tdis."dyke_guid" = trd."guid" AND (tdis."check_state" >= 2)
        LEFT JOIN (
        SELECT
        TEMP1.*,
@@ -263,6 +266,9 @@
        <if test="params.tbYear!=null and params.tbYear!=''">
            AND    tdi."tb_year" = #{params.tbYear}
        </if>
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND tdi."tb_quarter" = #{params.tbQuarter}
        </if>
--         and tdi."investigation_variety" = '白蚁'
        group by tdi."tb_state_id",tdi."dyke_guid",tdi."unit"
        )TEMP1
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbDykeUnitDangerMapper.xml
@@ -5,16 +5,22 @@
    <select id="listDykeUnitDanger" resultType="cn.gistack.sm.sjztmd.vo.TbDykeUnitDangerVO">
        select tdi.*,ifnull(tdud."danger_level",0) dangerLevel,tdud."id" from (
            select
                "dyke_guid" dykeGuid,"unit",count(*) dangerNum,wm_concat(distinct "signs_of_termite_activity") hdjxs,
                "dyke_guid" dykeGuid,"unit",count(*) dangerNum,wm_concat(distinct "signs_of_termite_activity") hdjxs,max("tb_year") as "tb_year",max("tb_quarter") as "tb_quarter",
                sum("danger_length") as dangerLength
            from sjzt_md."tb_dyke_investigation"
            where "hazard_rating" = '有危害'
            <if test="params.dykeGuid != null and params.dykeGuid != ''">
                and "dyke_guid" = #{params.dykeGuid}
            </if>
            <if test="params.tbYear != null and params.tbYear != ''">
                and "tb_year" = #{params.tbYear}
            </if>
            <if test="params.tbQuarter != null and params.tbQuarter != ''">
                and "tb_quarter" = #{params.tbQuarter}
            </if>
            group by "dyke_guid","unit"
        ) tdi
            left join sjzt_md."tb_dyke_unit_danger" tdud on (tdi.dykeGuid = tdud."dyke_id" and tdi."unit" = tdud."unit")
            left join sjzt_md."tb_dyke_unit_danger" tdud on (tdi.dykeGuid = tdud."dyke_id" and tdi."unit" = tdud."unit" and tdi."tb_year" = tdud."tb_year" and tdi."tb_quarter" = tdud."tb_quarter")
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml
@@ -48,10 +48,21 @@
    <select id="getList" resultType="cn.gistack.sm.sjztmd.vo.TbProjectVO">
        SELECT
            *
            tb.*,b."actual_fund"
        FROM SJZT_MD."tb_project" tb
        left join (
            SELECT "tb_project_id",sum("actual_fund") as "actual_fund" from SJZT_MD."tb_project_schedule"
            <if test="vo.tbYear != null and vo.tbYear != ''">
                where "year" = #{vo.tbYear}
            </if>
            group by "tb_project_id"
        ) b
        on (tb."guid" = b."tb_project_id")
        where
            tb."is_deleted" = 0
        <if test="vo.tbYear != null and vo.tbYear != ''">
            and tb."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.cityCode != null and vo.cityCode != ''">
            and tb."city_code" = #{vo.cityCode}
        </if>
@@ -96,6 +107,11 @@
        <result property="contractUrl" column="contract_url"/>
        <result property="checkDate" column="check_date"/>
        <result property="planCheckDate" column="plan_check_date"/>
        <result property="planName" column="plan_name"/>
        <result property="planFeedBackName" column="plan_feed_back_name"/>
        <result property="govName" column="gov_name"/>
        <result property="contractName" column="contract_name"/>
        <result property="checkName" column="check_name"/>
        <result property="isCheck" column="is_check"/>
        <result property="checkUrl" column="check_url"/>
@@ -111,6 +127,8 @@
            <result property="year" column="year"/>
            <result property="month" column="month"/>
            <result property="actualFund" column="actual_fund"/>
            <result property="payOrderUrl" column="pay_order_url"/>
            <result property="payOrderName" column="pay_order_name"/>
        </collection>
    </resultMap>
@@ -123,7 +141,7 @@
            TPS."guid" as scheduleId,
            TPS."year",
            TPS."month",
            TPS."actual_fund"
            TPS."actual_fund",TPS."pay_order_name",TPS."pay_order_url"
        from sjzt_md."tb_project" tb
        LEFT JOIN SJZT_MD."tb_project_schedule" TPS ON TPS."tb_project_id" = tb."guid"
        where
@@ -157,7 +175,13 @@
            levelTwoLength,
            levelThreeLength,
            levelFourLength,
            levelFiveLength
            levelFiveLength,
            dykeLengthAll,
            levelOneLengthAll,
            levelTwoLengthAll,
            levelThreeLengthAll,
            levelFourLengthAll,
            levelFiveLengthAll
        FROM YWXT."att_ad_base" aab
        left join (
            SELECT
@@ -175,9 +199,12 @@
             ) arb ON ((arb.townCode = aab."guid")or(arb.countyCode = aab."guid") or (arb.cityCode = aab."guid") or (arb.provinceCode = aab."guid") )
            right join sjzt_md."tb_res_general_investigation_state" trgis on trgis."res_guid" = arb."code"
                    <!--统计待审核和已审核的-->
                and (trgis."check_state" = 2)
                and (trgis."check_state" >= 2)
                <if test="params.tbYear != null and params.tbYear != ''">
                    and trgis."tb_year" = #{params.tbYear}
                </if>
                <if test="params.tbQuarter != null and params.tbQuarter != ''">
                    and trgis."tb_quarter" = #{params.tbQuarter}
                </if>
            group by aab."guid",aab."ad_name"
        )res on res."guid" = aab."guid"
@@ -247,11 +274,14 @@
                             <if test="params.tbYear != null and params.tbYear != ''">
                                 AND  tdi."tb_year" = #{params.tbYear}
                            </if>
                            <if test="params.tbQuarter != null and params.tbQuarter != ''">
                                and tdi."tb_quarter" = #{params.tbQuarter}
                            </if>
                            group by tdi."tb_state_id",tdi."dyke_guid",tdi."unit"
                        )TEMP1
                    ) tdi on tdi."tb_state_id" = tdis."guid"
                    <!--统计待审核和已审核的-->
                    where (tdis."check_state" = 1 or tdis."check_state" = 2)
                    where (tdis."check_state" >= 2)
                ) trd
                LEFT JOIN YWXT."att_ad_base" county ON county."ad_code" = trd."ad_code"
                LEFT JOIN YWXT."att_ad_base" city ON city."ad_code" = county."p_ad_code"
@@ -259,29 +289,62 @@
            )trd on ((trd.countyCode = aab."guid") or (trd.cityCode = aab."guid") or (trd.provinceCode = aab."guid"))
            group by aab."guid",aab."ad_name"
        )dyke on dyke."guid" = aab."guid"
        left join (
            SELECT
                aab."guid",
                aab."ad_name",
                SUM(CASE WHEN tb."actual_fund" then tb."actual_fund" else 0 end) as totalActualFund
                SUM(CASE WHEN trd."guid" is not null then trd."dyke_length" else 0 END) as dykeLengthAll,
                SUM(CASE WHEN trd."dyke_level" = '1级' THEN trd."dyke_length" ELSE 0 END) AS levelOneLengthAll,
                SUM(CASE WHEN trd."dyke_level" = '2级' THEN trd."dyke_length" ELSE 0 END) AS levelTwoLengthAll,
                SUM(CASE WHEN trd."dyke_level" = '3级' THEN trd."dyke_length" ELSE 0 END)AS levelThreeLengthAll,
                SUM(CASE WHEN trd."dyke_level" = '4级' THEN trd."dyke_length" ELSE 0 END) AS levelFourLengthAll,
                SUM(CASE WHEN trd."dyke_level" = '5级' THEN trd."dyke_length" ELSE 0 END) AS levelFiveLengthAll
            FROM YWXT."att_ad_base" aab
            left join (
                select trd."guid",
                trd."dyke_length",
                trd."dyke_level",
                county."guid" as countyCode,
                city."guid" as cityCode,
                province."guid" as provinceCode
                from sjzt_md."tb_res_dyke" trd
                LEFT JOIN YWXT."att_ad_base" county ON county."ad_code" = trd."ad_code"
                LEFT JOIN YWXT."att_ad_base" city ON city."ad_code" = county."p_ad_code"
                LEFT JOIN YWXT."att_ad_base" province ON province."ad_code" = city."p_ad_code"
            ) trd on ((trd.countyCode = aab."guid") or (trd.cityCode = aab."guid") or (trd.provinceCode = aab."guid"))
            group by aab."guid",aab."ad_name"
        ) dykeAll on dykeAll."guid" = aab."guid"
        left join (
            SELECT
                aab."guid",
                aab."ad_name",
                SUM(CASE WHEN tb."center_fund" then tb."center_fund" else 0 end) + SUM(CASE WHEN tb."local_fund" then tb."local_fund" else 0 end) as totalActualFund
            FROM YWXT."att_ad_base" aab
            LEFT JOIN (
                select
                tb."city_code" cityCode,
                tb."county_code" countyCode,
                province."guid" provinceCode,
                tps."actual_fund"
                tb."center_fund",
                tb."local_fund"
                from sjzt_md."tb_project" tb
                LEFT JOIN SJZT_MD."tb_project_schedule" tps on tps."tb_project_id" = tb."guid"
                LEFT JOIN YWXT."att_ad_base" province ON province."ad_code" = tb."city_code"
                <where>
                    <if test="params.tbYear != null and params.tbYear !=''">
                        AND tb."tb_year" = #{params.tbYear}
                    </if>
                </where>
            )tb on ((tb.countyCode = aab."guid") or (tb.cityCode = aab."guid") or (tb.provinceCode = aab."guid"))
            group by aab."guid",aab."ad_name"
        ) project on project."guid" = aab."guid"
        left join (
            SELECT
            aab."guid",
            aab."ad_name",
            tb."actual_fund" curMonthActualFund
                aab."guid",
                aab."ad_name",
                sum(CASE WHEN tb."actual_fund" then tb."actual_fund" else 0 end) curMonthActualFund
            FROM YWXT."att_ad_base" aab
            LEFT JOIN (
                select
@@ -289,18 +352,15 @@
                tb."county_code" countyCode,
                province."guid" provinceCode,
                tps."actual_fund"
                from sjzt_md."tb_project" tb
                LEFT JOIN SJZT_MD."tb_project_schedule" tps on tps."tb_project_id" = tb."guid"
                LEFT JOIN YWXT."att_ad_base" province ON province."ad_code" = tb."city_code"
                where
                    1=1
                    <if test="params.tbYear != null and params.tbYear !=''">
                    AND tps."year" = #{params.tbYear}
                    </if>
                  <if test="params.tbMonth != null and params.tbMonth != ''">
                      and tps."month" = #{params.tbMonth}
                  </if>
            from sjzt_md."tb_project" tb
            LEFT JOIN SJZT_MD."tb_project_schedule" tps on tps."tb_project_id" = tb."guid"
            LEFT JOIN YWXT."att_ad_base" province ON province."ad_code" = tb."city_code"
            where 1=1
            <if test="params.tbYear != null and params.tbYear !=''">
                AND tps."year" = #{params.tbYear}
            </if>
            )tb on ((tb.countyCode = aab."guid") or (tb.cityCode = aab."guid") or (tb.provinceCode = aab."guid"))
            group by aab."guid",aab."ad_name"
        ) tps on tps."guid" = aab."guid"
        left join ywxt."att_ad_base" paab on paab."guid" = aab."p_ad_code"
        where
@@ -325,25 +385,27 @@
        </if>
    </select>
    <select id="getStatisticsPie" resultType="cn.gistack.sm.sjztmd.vo.StatisticsPrice">
        SELECT
    sum(
    NVL ( a."center_fund", 0 )+ NVL ( a."local_fund", 0 )) AS sumPrice,
    sum(
    NVL ( b."actual_fund", 0 )) sumPay,
    sum(
        NVL ( a."center_fund", 0 )+ NVL ( a."local_fund", 0 ))- sum(
    NVL ( b."actual_fund", 0 )) noPay
FROM
    SELECT
        sum(
        NVL ( a."center_fund", 0 )+ NVL ( a."local_fund", 0 )) AS sumPrice,
        sum(
        NVL ( b."actual_fund", 0 )) sumPay,
        sum(
            NVL ( a."center_fund", 0 )+ NVL ( a."local_fund", 0 ))- sum(
        NVL ( b."actual_fund", 0 )) noPay
    FROM
    sjzt_md."tb_project" a
    LEFT JOIN ( SELECT * FROM sjzt_md."tb_project_schedule"
    WHERE 1=1
    <if test="params.tbYear != null and params.tbYear !=''">
      AND  "year" = #{params.tbYear}
    </if>
    <if test="params.tbMonth != null and params.tbMonth !=''">
        AND "month" = #{params.tbMonth}
    </if>
    ) b ON a."guid" = b."tb_project_id" and a."check_state" = 3
    LEFT JOIN (
        SELECT "tb_project_id",sum("actual_fund") "actual_fund" FROM sjzt_md."tb_project_schedule"
        WHERE 1=1
        <if test="params.tbYear != null and params.tbYear !=''">
          AND  "year" = #{params.tbYear}
        </if>
        <if test="params.tbMonth != null and params.tbMonth !=''">
            AND "month" = #{params.tbMonth}
        </if>
        group by "tb_project_id"
    ) b ON a."guid" = b."tb_project_id"
    </select>
    <select id="getStatisticsPies" resultType="cn.gistack.sm.sjztmd.vo.StatisticsPrice">
        SELECT
@@ -356,7 +418,8 @@
    NVL ( b."actual_fund", 0 )) noPay
FROM
    sjzt_md."tb_project" a
    LEFT JOIN ( SELECT * FROM sjzt_md."tb_project_schedule"
    LEFT JOIN (
        SELECT "tb_project_id",sum("actual_fund") "actual_fund" FROM sjzt_md."tb_project_schedule"
        WHERE 1=1
        <if test="params.tbYear != null and params.tbYear !=''">
            AND  "year" = #{params.tbYear}
@@ -364,7 +427,8 @@
        <if test="params.tbMonth != null and params.tbMonth !=''">
            AND "month" = #{params.tbMonth}
        </if>
        ) b ON a."guid" = b."tb_project_id" and a."check_state" = 3
        group by "tb_project_id"
        ) b ON a."guid" = b."tb_project_id"
    LEFT JOIN YWXT."att_ad_base" c ON ( a."city_code" = c."guid" )
    OR ( a."county_code" = c."guid" )
WHERE
@@ -384,15 +448,17 @@
        NVL ( b."actual_fund", 0 )) noPay
    FROM
        sjzt_md."tb_project" a
        LEFT JOIN  ( SELECT * FROM sjzt_md."tb_project_schedule"
        WHERE 1=1
        <if test="params.tbYear != null and params.tbYear !=''">
            AND  "year" = #{params.tbYear}
        </if>
        <if test="params.tbMonth != null and params.tbMonth !=''">
            AND "month" = #{params.tbMonth}
        </if>
        ) b ON a."guid" = b."tb_project_id" and a."check_state" = 3
        LEFT JOIN  (
            SELECT "tb_project_id",sum("actual_fund") "actual_fund" FROM sjzt_md."tb_project_schedule"
            WHERE 1=1
            <if test="params.tbYear != null and params.tbYear !=''">
                AND  "year" = #{params.tbYear}
            </if>
            <if test="params.tbMonth != null and params.tbMonth !=''">
                AND "month" = #{params.tbMonth}
            </if>
            group by "tb_project_id"
        ) b ON a."guid" = b."tb_project_id"
        RIGHT JOIN YWXT."att_ad_base" c on c."ad_code" = a."city_code"
        where c."p_ad_code" = #{params.adCode}
    GROUP BY
@@ -421,15 +487,17 @@
        NVL ( b."actual_fund", 0 )) noPay
    FROM
        sjzt_md."tb_project" a
        LEFT JOIN ( SELECT * FROM sjzt_md."tb_project_schedule"
        WHERE  1=1
        <if test="params.tbYear != null and params.tbYear !=''">
            AND  "year" = #{params.tbYear}
        </if>
        <if test="params.tbMonth != null and params.tbMonth !=''">
            AND "month" = #{params.tbMonth}
        </if>
        ) b ON a."guid" = b."tb_project_id" and a."check_state" = 3
        LEFT JOIN (
            SELECT "tb_project_id",sum("actual_fund") "actual_fund" FROM sjzt_md."tb_project_schedule"
            WHERE  1=1
            <if test="params.tbYear != null and params.tbYear !=''">
                AND  "year" = #{params.tbYear}
            </if>
            <if test="params.tbMonth != null and params.tbMonth !=''">
                AND "month" = #{params.tbMonth}
            </if>
            group by "tb_project_id"
        ) b ON a."guid" = b."tb_project_id"
    GROUP BY
        a."county_code",
        a."county_name",
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResDykeMapper.xml
@@ -61,7 +61,7 @@
    <!--  堤防普查列表  -->
    <select id="findTbResDykePcBy"
            resultType="cn.gistack.sm.sjztmd.vo.TbResDykeVO">
SELECT base.* from (
    SELECT base.* from (
        select
        trd.*,
        tdis."check_state" AS tb_state,
@@ -79,22 +79,74 @@
        ifnull(tmp.totalDangerDw,0) totalDangerDw,
        (
        select sum(tdud."danger_length") from sjzt_md."tb_dyke_unit_danger" tdud
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis on (tdud."dyke_id" = tdis."dyke_guid")
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis
            on (
                tdud."dyke_id" = tdis."dyke_guid"
                <if test="vo.tbYear !=null and vo.tbYear !=''">
                    AND tdis."tb_year" = #{vo.tbYear}
                </if>
                <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
                    AND tdis."tb_quarter" = #{vo.tbQuarter}
                </if>
                )
        where trd."guid" = tdud."dyke_id" and tdud."danger_level" = 1 and tdis."check_state" > 1
        <if test="vo.tbYear !=null and vo.tbYear !=''">
            AND tdud."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
            AND tdud."tb_quarter" = #{vo.tbQuarter}
        </if>
        ) as firstLength,
        (
        select sum(tdud."danger_length") from sjzt_md."tb_dyke_unit_danger" tdud
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis on (tdud."dyke_id" = tdis."dyke_guid")
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis
            on (
                tdud."dyke_id" = tdis."dyke_guid"
                <if test="vo.tbYear !=null and vo.tbYear !=''">
                    AND tdis."tb_year" = #{vo.tbYear}
                </if>
                <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
                    AND tdis."tb_quarter" = #{vo.tbQuarter}
                </if>
                )
        where trd."guid" = tdud."dyke_id" and tdud."danger_level" = 2 and tdis."check_state" > 1
        <if test="vo.tbYear !=null and vo.tbYear !=''">
            AND tdud."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
            AND tdud."tb_quarter" = #{vo.tbQuarter}
        </if>
        ) as secondLength,
        (
        select sum(tdud."danger_length") from sjzt_md."tb_dyke_unit_danger" tdud
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis on (tdud."dyke_id" = tdis."dyke_guid")
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis
            on (
                tdud."dyke_id" = tdis."dyke_guid"
                <if test="vo.tbYear !=null and vo.tbYear !=''">
                    AND tdis."tb_year" = #{vo.tbYear}
                </if>
                <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
                    AND tdis."tb_quarter" = #{vo.tbQuarter}
                </if>
                )
        where trd."guid" = tdud."dyke_id" and tdud."danger_level" = 3 and tdis."check_state" > 1
        <if test="vo.tbYear !=null and vo.tbYear !=''">
            AND tdud."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
            AND tdud."tb_quarter" = #{vo.tbQuarter}
        </if>
        ) as thirdLength
        from sjzt_md."tb_res_dyke" trd
        left join "SJZT_MD"."tb_dyke_investigation_state" tdis on trd."guid" = tdis."dyke_guid"
        <if test="vo.tbYear !=null and vo.tbYear !=''">
            AND tdis."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
            AND tdis."tb_quarter" = #{vo.tbQuarter}
        </if>
        left join YWXT."att_ad_base" aa on aa."guid" = trd."ad_code"
        left join YWXT."att_ad_base" ab on ab."ad_code" = aa."p_ad_code"
        left join YWXT."att_ad_base" ac on ac."ad_code" = ab."p_ad_code"
@@ -132,6 +184,9 @@
        <if test="vo.tbYear !=null and vo.tbYear !=''">
            AND tdi."tb_year" = #{vo.tbYear}
        </if>
        <if test="vo.tbQuarter !=null and vo.tbQuarter !=''">
            AND tdi."tb_quarter" = #{vo.tbQuarter}
        </if>
        group by tdi."tb_state_id",tdi."dyke_guid",tdi."unit"
        )TEMP1
        )temp2 group by
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbResGeneralInvestigationMapper.xml
@@ -95,12 +95,15 @@
        FROM(
                SELECT
                    COUNT(*) totalNum,
                    SUM(CASE WHEN (trgis."check_state" = 3) THEN 1 ELSE 0 END) as finishNum
                    SUM(CASE WHEN (trgis."check_state" >= 2) THEN 1 ELSE 0 END) as finishNum
                from
                    <include refid="resBase"/>
                LEFT JOIN SJZT_MD."tb_res_general_investigation_state" trgis ON trgis."res_guid" = arb."code" AND (trgis."check_state" = 3)
                LEFT JOIN SJZT_MD."tb_res_general_investigation_state" trgis ON trgis."res_guid" = arb."code" AND (trgis."check_state" >= 2)
                    <if test="params.tbYear != null and params.tbYear !=''">
                        AND trgis."tb_year" = #{params.tbYear}
                    </if>
                    <if test="params.tbQuarter != null and params.tbQuarter !=''">
                        AND trgis."tb_quarter" = #{params.tbQuarter}
                    </if>
                WHERE 1=1
                <if test="params.adCode != null and params.adCode !=''">
@@ -136,6 +139,9 @@
                                      <if test="params.tbYear != null and params.tbYear !=''">
                                          AND TRGI."tb_year" = #{params.tbYear}
                                      </if>
                                      <if test="params.tbQuarter != null and params.tbQuarter !=''">
                                          AND TRGI."tb_quarter" = #{params.tbQuarter}
                                      </if>
                                    group by TRGI."tb_state_id",TRGI."res_guid"
                                ) tmp on tmp."tb_state_id" = trgis."guid"
                                LEFT JOIN SJZT_MD."att_res_base" arb on arb."code" = trgis."res_guid"
@@ -145,7 +151,7 @@
                                LEFT JOIN YWXT."att_ad_base" province ON province."ad_code" = city."p_ad_code"
                        where (town."ad_code" = aab."guid" or county."ad_code" = aab."guid" or city."ad_code" = aab."guid" or province."ad_code" = aab."guid")
                          <!--只有已审核数据才显示-->
                        and (trgis."check_state" = 3 and totalDangerNum > 0)
                        and (trgis."check_state" >= 2 and totalDangerNum > 0)
                    )
               ) dangerNum
        FROM YWXT."att_ad_base" aab
@@ -414,6 +420,9 @@
        <if test="params.tbYear != null and params.tbYear !=''">
            and trgis."tb_year" = #{params.tbYear}
        </if>
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND trgis."tb_quarter" = #{params.tbQuarter}
        </if>
        and (trgis."check_state" > 1)
        )investigationResNum,
        (
@@ -429,7 +438,10 @@
        <if test="params.tbYear != null and params.tbYear !=''">
            and trgis."tb_year" = #{params.tbYear}
        </if>
        and trgis."check_state" = 3
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND trgis."tb_quarter" = #{params.tbQuarter}
        </if>
        and trgis."check_state" >= 2
        )checkResNum,
        (
            SELECT COUNT(*) FROM
@@ -453,7 +465,10 @@
            <if test="params.tbYear != null and params.tbYear !=''">
                and trgis."tb_year" = #{params.tbYear}
            </if>
            and trgis."check_state" = 3 and trgis.dangerNum is not null
            <if test="params.tbQuarter != null and params.tbQuarter !=''">
                AND trgis."tb_quarter" = #{params.tbQuarter}
            </if>
            and trgis."check_state" >= 2 and trgis.dangerNum is not null
        )resMayiNum,
        (
        SELECT COUNT(*)
@@ -476,7 +491,10 @@
        <if test="params.tbYear != null and params.tbYear !=''">
            and tdis."tb_year" = #{params.tbYear}
        </if>
        and (tdis."check_state" = 1 or tdis."check_state" = 2 or tdis."check_state" = 3)
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND tdis."tb_quarter" = #{params.tbQuarter}
        </if>
        and (tdis."check_state" >=1)
        )investigationDykeNum,
        (
        SELECT COUNT(*) FROM
@@ -490,7 +508,10 @@
        <if test="params.tbYear != null and params.tbYear !=''">
            and tdis."tb_year" = #{params.tbYear}
        </if>
        and (tdis."check_state" = 2 or tdis."check_state" = 3)
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND tdis."tb_quarter" = #{params.tbQuarter}
        </if>
        and (tdis."check_state" >= 2)
        )checkDykeNum,
        IFNULL(
            (
@@ -500,6 +521,9 @@
                <where>
                    <if test="params.tbYear != null and params.tbYear !=''">
                        and tdis."tb_year" = #{params.tbYear}
                    </if>
                    <if test="params.tbQuarter != null and params.tbQuarter !=''">
                        AND tdis."tb_quarter" = #{params.tbQuarter}
                    </if>
                    and tdis."check_state" >= 2
                </where>
@@ -550,10 +574,13 @@
        <if test="params.tbYear != null and params.tbYear != ''">
            AND    tdi."tb_year" = #{params.tbYear}
        </if>
        <if test="params.tbQuarter != null and params.tbQuarter !=''">
            AND tdi."tb_quarter" = #{params.tbQuarter}
        </if>
        group by tdi."tb_state_id",tdi."dyke_guid",tdi."unit"
        )TEMP1
        ) tdi on tdi."tb_state_id" = tdis."guid"
        where (tdis."check_state" = 3)
        where (tdis."check_state" >= 2)
        ) trd
        LEFT JOIN YWXT."att_ad_base" county ON county."ad_code" = trd."ad_code"
        LEFT JOIN YWXT."att_ad_base" city ON city."ad_code" = county."p_ad_code"
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResBaseService.java
@@ -54,6 +54,10 @@
    AttResAdVO getWaterRegionInfoByResGuid(String guid);
    int getDimResInfoACount();
    int getAttWmstBaseCount();
    int getAttImagestBaseCount();
    int getAttCdBaseCount();
    int getAttWyCdBaseCount();
    Boolean updateIsShowStatus(String ids, Integer status);
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResBaseServiceImpl.java
@@ -325,6 +325,26 @@
    }
    @Override
    public int getAttWmstBaseCount() {
        return baseMapper.getAttWmstBaseCount();
    }
    @Override
    public int getAttImagestBaseCount() {
        return baseMapper.getAttImagestBaseCount();
    }
    @Override
    public int getAttCdBaseCount() {
        return baseMapper.getAttCdBaseCount();
    }
    @Override
    public int getAttWyCdBaseCount() {
        return baseMapper.getAttWyCdBaseCount();
    }
    @Override
    public Boolean updateIsShowStatus(String ids, Integer status) {
        return baseMapper.updateIsShowStatus(ids,status);
    }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbDykeInvestigationServiceImpl.java
@@ -32,6 +32,7 @@
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -68,18 +69,18 @@
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("\"dyke_guid\"",entity.getDykeGuid());
        queryWrapper.eq("\"tb_year\"",entity.getTbYear());
//        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        TbDykeInvestigationState state = tbDykeInvestigationStateService.getOne(queryWrapper);
        if (null == state) {
            state = new TbDykeInvestigationState();
            state.setDykeGuid(entity.getDykeGuid());
            state.setTbQuarter(entity.getTbQuarter());
            state.setTbYear(entity.getTbYear());
            state.setCreateTime(entity.getCreateTime());
            state.setCreateUser(entity.getCreateUser());
            state.setCreateTime(new Date());
            state.setCreateUser(AuthUtil.getUserAccount());
        } else {
            if (state.getCheckState() == 1 || state.getCheckState() == 2) {
                return R.fail(entity.getDykeName() + "本年度已经普查完成,不能在提交了。");
            if (state.getCheckState() > 1) {
                return R.fail(entity.getDykeName() + "本年度已经普查完成,不能再提交了。");
            }
        }
@@ -100,6 +101,7 @@
            QueryWrapper qw = new QueryWrapper();
            qw.eq("\"dyke_guid\"",entity.getDykeGuid());
            qw.eq("\"unit\"",entity.getUnit());
            qw.eq("\"tb_quarter\"",entity.getTbQuarter());
            long count = count(qw);
            if (count > 0) {
                entity.setDangerLength(0D);
@@ -120,6 +122,7 @@
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("\"dyke_guid\"",entity.getDykeGuid());
        queryWrapper.eq("\"tb_year\"",entity.getTbYear());
        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        TbDykeInvestigationState state = tbDykeInvestigationStateService.getOne(queryWrapper);
        if (null == state) {
            //无填报状态记录则新建
@@ -127,12 +130,12 @@
            state.setDykeGuid(entity.getDykeGuid());
            state.setTbQuarter(entity.getTbQuarter());
            state.setTbYear(entity.getTbYear());
            state.setCreateTime(entity.getCreateTime());
            state.setCreateUser(entity.getCreateUser());
            state.setCreateTime(new Date());
            state.setCreateUser(AuthUtil.getUserAccount());
        } else {
            //查看填报状态,只有0填报中才可以一直填报
            if (state.getCheckState() == 1 || state.getCheckState() == 2) {
                return R.fail(entity.getDykeName() + "本年度已经普查完成,不能在提交了。");
            if (state.getCheckState() > 1) {
                return R.fail(entity.getDykeName() + "本年度已经普查完成,不能再提交了。");
            }
        }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/TbResGeneralInvestigationServiceImpl.java
@@ -36,6 +36,7 @@
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -68,18 +69,18 @@
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("\"res_guid\"", entity.getResGuid());
        queryWrapper.eq("\"tb_year\"", entity.getTbYear());
//        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        TbResGeneralInvestigationState state = tbResGeneralInvestigationStateService.getOne(queryWrapper);
        if (null == state) {
            state = new TbResGeneralInvestigationState();
            state.setResGuid(entity.getResGuid());
            state.setTbQuarter(entity.getTbQuarter());
            state.setTbYear(entity.getTbYear());
            state.setCreateTime(entity.getCreateTime());
            state.setCreateUser(entity.getCreateUser());
            state.setCreateTime(new Date());
            state.setCreateUser(AuthUtil.getUserAccount());
        } else {
            if (state.getCheckState() == 1 || state.getCheckState() == 2) {
                return R.fail(entity.getResName() + "本年度已经普查完成,不能在提交了。");
            if (state.getCheckState() > 1) {
                return R.fail(entity.getResName() + "本年度已经普查完成,不能再提交了。");
            }
        }
@@ -108,6 +109,7 @@
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("\"res_guid\"", entity.getResGuid());
        queryWrapper.eq("\"tb_year\"", entity.getTbYear());
        queryWrapper.eq("\"tb_quarter\"",entity.getTbQuarter());
        TbResGeneralInvestigationState state = tbResGeneralInvestigationStateService.getOne(queryWrapper);
        if (null == state) {
            //无填报状态记录则新建
@@ -115,12 +117,12 @@
            state.setResGuid(entity.getResGuid());
            state.setTbQuarter(entity.getTbQuarter());
            state.setTbYear(entity.getTbYear());
            state.setCreateTime(entity.getCreateTime());
            state.setCreateUser(entity.getCreateUser());
            state.setCreateTime(new Date());
            state.setCreateUser(AuthUtil.getUserAccount());
        } else {
            //查看填报状态,只有0填报中才可以一直填报
            if (state.getCheckState() == 1 || state.getCheckState() == 2) {
                return R.fail(entity.getResName() + "本年度已经普查完成,不能在提交了。");
            if (state.getCheckState() > 1) {
                return R.fail(entity.getResName() + "本年度已经普查完成,不能再提交了。");
            }
        }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/statisticsVO/StatisticsParams.java
@@ -17,6 +17,8 @@
    //填报年份
    private Integer tbYear;
    private String tbQuarter;//季度
    private String isCounty;
    private String tbMonth;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/statisticsVO/StatisticsTableProject.java
@@ -43,12 +43,18 @@
    private int smallTwoNumAll;
    private double dykeLength;
    private double dykeLength;//危害长度
    private double levelOneLength;//一级危害长度
    private double levelTwoLength;//二级危害长度
    private double levelThreeLength;//三级危害长度
    private double levelFourLength;//四级危害长度
    private double levelFiveLength;//五级危害长度
    private double levelOneLength;
    private double levelTwoLength;
    private double levelThreeLength;
    private double levelFourLength;
    private double levelFiveLength;
    private double dykeLengthAll;//提防总长度
    private double levelOneLengthAll;//一级提防长度
    private double levelTwoLengthAll;//二级提防长度
    private double levelThreeLengthAll;//三级提防长度
    private double levelFourLengthAll;//四级提防长度
    private double levelFiveLengthAll;//五级提防长度
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbDykeUnitDangerVO.java
@@ -11,6 +11,8 @@
public class TbDykeUnitDangerVO {
    private String dykeGuid;//提防id
    private Integer tbYear;//提防id
    private String tbQuarter;//提防id
    private String unit;//提防单元
    private String dangerNum;//危害处数
    private String hdjxs;//活动迹象
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbProjectVO.java
@@ -13,4 +13,6 @@
    private String startTime;
    private String endTime;
    private String actualFund;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbResDykeVO.java
@@ -15,6 +15,7 @@
    private String tbState;//填报状态
    private Integer tbYear;//填报年度
    private String tbQuarter;//填报年度
    //危害长度
    private double totalDangerLength;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java
@@ -91,7 +91,15 @@
            count = attResRsbNorspiService.count();
        } else if (tableName.equals("att_res_flse_lim")) {
            count = attResFlseLimService.count();
        }
        } else if (tableName.equals("att_wmst_base"))
            count = resBaseService.getAttWmstBaseCount();
        else if (tableName.equals("att_imagest_base"))
            count = resBaseService.getAttImagestBaseCount();
        else if (tableName.equals("att_cd_base"))
            count = resBaseService.getAttCdBaseCount();
        else if (tableName.equals("att_wy_cd_base"))
            count = resBaseService.getAttWyCdBaseCount();
        log.info("预警数量count:" +  count);
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
@@ -48,6 +48,8 @@
import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -204,5 +206,23 @@
        return R.data(number);
    }
    @GetMapping("/getDwByParentId")
    @ApiOperationSupport(order = 10)
    @ApiOperation(value = "获取单位树形结构", notes = "获取单位树形结构")
    public R<Map<String,List<DeptVO>>> getDwByParentId(String precinct) {
        Map<String,List<DeptVO>> map=new HashMap<>();
        if(precinct==null||precinct.equals("")){
            map.put("one",new ArrayList<>());
            map.put("two",new ArrayList<>());
            map.put("three",new ArrayList<>());
        }else {
            List<DeptVO> tree1 = deptService.treeByParentIdNew("1821370772215062530", precinct);
            List<DeptVO> tree2 = deptService.treeByParentIdNew("1821370871330660353", precinct);
            List<DeptVO> tree3 = deptService.treeByParentIdNew("1806175841028685826", precinct);
            map.put("one", tree1);
            map.put("two", tree2);
            map.put("three", tree3);
        }
        return R.data(map);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
@@ -96,4 +96,6 @@
    Map<String, DeptUserTreeNode> getUserMap(@Param("treeNode") DeptUserTreeNode treeNode);
    String getResDept(@Param("deptIds") String deptIds);
    List<DeptVO> treeByParentIdNew(@Param("parentIds") List<String> parentIds,@Param("precinct")String precinct);
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
@@ -91,7 +91,22 @@
        </if>
        ORDER BY sort
    </select>
    <select id="treeByParentIdNew" resultMap="treeNodeResultMap">
        select id, parent_id, dept_name as title, id as "value", id as "key" from blade_dept where is_deleted = 0 and precinct=#{precinct}
        <if test="parentIds!=null and parentIds!=''">
            and
            <foreach item="id" collection="parentIds" open="(" separator="or" close=")">
                id = #{id} or parent_id = #{id} or parent_id in (
                select b.id from blade_dept b where b.is_deleted = 0 and b.PARENT_ID = #{id}
                )
            </foreach>
        </if>
        ORDER BY sort
    </select>
    <select id="lazyTree" resultMap="treeNodeResultMap" >
        SELECT
            dept.id,
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
@@ -136,4 +136,6 @@
     * @return
     */
    String getResDept(String deptIds);
    List<DeptVO> treeByParentIdNew(String number,String precinct);
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
@@ -248,4 +248,17 @@
    public String getResDept(String deptIds) {
        return baseMapper.getResDept(deptIds);
    }
    @Override
    public List<DeptVO> treeByParentIdNew(String parentId,String precinct) {
//        if (AuthUtil.isAdministrator() || AuthUtil.isAdmin()) {
//            return ForestNodeMerger.merge(baseMapper.tree(StringPool.EMPTY));
//        }
        String [] parentIds = parentId.split(",");
        List<String> parentIdList = new ArrayList<>();
        for (String str:parentIds) {
            parentIdList.add(str);
        }
        return ForestNodeMerger.merge(baseMapper.treeByParentIdNew(parentIdList,precinct));
    }
}