Merge branch 'jtdev' of https://hbsl-code.gistack.cn/hbwri/manager into jtdev
30 files modified
2 files added
| | |
| | | private String templateId; |
| | | |
| | | /** |
| | | * 模板表ID (合并内容发送模板) |
| | | */ |
| | | private String mergeTemplateId; |
| | | |
| | | /** |
| | | * 备注 |
| | | */ |
| | | private String alarmRemark; |
| | |
| | | */ |
| | | @TableField(exist = false) |
| | | private String resubmitId; |
| | | |
| | | |
| | | |
| | | @TableField(exist = false) |
| | | private List<String> userIDs; |
| | | } |
| | |
| | | |
| | | private Integer status; |
| | | |
| | | @TableField(exist = false) |
| | | private String projectProgress; |
| | | |
| | | @TableField(exist = false) |
| | |
| | | */ |
| | | 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; |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | private Long userId; |
| | | |
| | | /** |
| | | |
| | | /** |
| | | * 角色ID |
| | | */ |
| | | private Long roleId; |
| | | |
| | | |
| | | /** |
| | | * 审批状态 0未审批 1通过,2驳回 |
| | | */ |
| | | private Integer approvalStatus; |
| | |
| | | @NoArgsConstructor |
| | | @Builder |
| | | public class ProjectSearchDTO { |
| | | /** |
| | | * 项目名称 |
| | | */ |
| | | private String projectName; |
| | | /** |
| | | * 区域编码 |
| | | */ |
| | | private String adCode; |
| | | /** |
| | | * 设备名 |
| | | */ |
| | | private String deviceName; |
| | | /** |
| | | * 水库名 |
| | | */ |
| | | private String skName; |
| | | /** |
| | | * 工序类型 |
| | | */ |
| | | private String gxType; |
| | | /** |
| | | * 工序名 |
| | | */ |
| | | private String gxName; |
| | | /** |
| | | * 创建人 |
| | | */ |
| | | private String createUser; |
| | | /** |
| | | * 用户名 |
| | | */ |
| | | private Long userId; |
| | | /** |
| | | * |
| | | */ |
| | | 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; |
| | | /** |
| | | * 工程规模 |
| | |
| | | */ |
| | | private String reportTime; |
| | | |
| | | /** |
| | | * 标段 |
| | | */ |
| | | private String lot; |
| | | |
| | | |
| | | /** |
| | | * 项目排序 0状态 , 1进度 ,2注册码 |
| | |
| | | private Boolean isPage; |
| | | private List<String> sgCodeS; |
| | | |
| | | /** |
| | | * 建设期次 |
| | | */ |
| | | private String buildStage; |
| | | |
| | | /** |
| | | * 子类型 |
| | | */ |
| | | private List<String> childTypeList; |
| | | |
| | | } |
| New file |
| | |
| | | package cn.gistack.sm.sg.VO; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 设备类型开工率VO |
| | | */ |
| | | @Data |
| | | public class SgOperatingRateVO { |
| | | /** |
| | | * 表面变形 |
| | | */ |
| | | private int surfaceNum; |
| | | private String surfaceProgress; |
| | | |
| | | /** |
| | | * 视频 |
| | | */ |
| | | private int videoNum; |
| | | private String videoProgress; |
| | | |
| | | /** |
| | | * 渗流压力 |
| | | */ |
| | | private int transNum; |
| | | private String transProgress; |
| | | |
| | | /** |
| | | * 渗流量 |
| | | */ |
| | | private int seepageNum; |
| | | private String seepageProgress; |
| | | private String proIds; |
| | | } |
| | |
| | | private Integer approvalStatus; |
| | | |
| | | private String stepRemark; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | } |
| | |
| | | private String seepageProgress; |
| | | |
| | | private String proIds; |
| | | /** |
| | | * 建设期次 |
| | | */ |
| | | private String buildStage; |
| | | |
| | | } |
| | | |
| | |
| | | @ApiModelProperty(value = "工程区划") |
| | | private String sgCode; |
| | | |
| | | /** |
| | | * 片区 所属标段 |
| | | */ |
| | | @ApiModelProperty(value = "片区 所属标段") |
| | | private String precinct; |
| | | |
| | | private String adGrad; |
| | | |
| | | private String resGuid; |
| | |
| | | private String deptCategoryName; |
| | | |
| | | private String sgCode; |
| | | /** |
| | | * 片区 所属标段 |
| | | */ |
| | | private String precinct; |
| | | |
| | | } |
| | |
| | | }}; |
| | | |
| | | /** |
| | | * 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>() |
| | |
| | | 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"); |
| | | }}; |
| | | |
| | | /** |
| | |
| | | }}; |
| | | |
| | | /** |
| | | * 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>() |
| | |
| | | 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"); |
| | | }}; |
| | | |
| | | /** |
| | |
| | | }}; |
| | | |
| | | /** |
| | | * 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>() |
| | |
| | | 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"); |
| | | }}; |
| | | |
| | | /** |
| | |
| | | }}; |
| | | |
| | | /** |
| | | * 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>() |
| | |
| | | }}; |
| | | |
| | | /** |
| | | * 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>() |
| | |
| | | add("rz"); |
| | | }}; |
| | | |
| | | |
| | | /** |
| | | * 18.1 6小时降雨告警-合并 |
| | | */ |
| | | public static List<String> sixHourRainMergeList = new ArrayList<String>() |
| | | {{ |
| | | add("county_nm,town_nm,res_nm,1"); |
| | | }}; |
| | | |
| | | /** |
| | | * 19.坝安全监测告警-数据缺失 |
| | | */ |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话) |
| | | // 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()); |
| | | } |
| | |
| | | * |
| | | * @param alarmRule 告警规则 |
| | | * @param alarmRuleDetail 告警规则详情 |
| | | * @param ztData 中台数据 |
| | | * @param data 中台数据 |
| | | * @param columnList 需要展示的数据字段 |
| | | * @param flag 是否显示日期 |
| | | * @param adCode 行政区划 |
| | |
| | | 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; |
| | |
| | | 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); |
| | | // 设置告警信息 |
| | |
| | | // 解析模板并设置 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; |
| | | } |
| | |
| | | */ |
| | | private void getColumnData(JSONArray jsonArray, |
| | | List<String> columnsList, |
| | | List<String> mergeColumnsList, |
| | | SmsRequestTemplate smsRequestTemplate, |
| | | AlarmRuleDetail alarmRuleDetail, |
| | | Boolean flag, |
| | |
| | | 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) { |
| | |
| | | * @return |
| | | */ |
| | | private String addAlarmContent(JSONArray jsonArray, int i, String[] split, String format) { |
| | | // 无需合并数据 |
| | | for (String s : split) { |
| | | // 超汛限水位 |
| | | if (s.equals("over_z")) { |
| | |
| | | } else { |
| | | format = format + jsonArray.getJSONObject(i).getString(s); |
| | | } |
| | | format = format.replaceAll("null",""); |
| | | } |
| | | // 返回 |
| | | return format; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 告警内容拼接处理 |
| | |
| | | // 遍历 |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 遍历 |
| | | 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); |
| | |
| | | // 遍历 |
| | | 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); |
| | |
| | | // 遍历 |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 遍历 |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 遍历 |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 遍历 |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 遍历 |
| | | 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); |
| | |
| | | //左右岸方向 |
| | | Double dnVal = jsonObject.getDouble("dn_val"); |
| | | //垂直 |
| | | Double duValue = jsonObject.getDouble("垂直位移"); |
| | | Double duValue = jsonObject.getDouble("du_value"); |
| | | |
| | | String direction = ""; |
| | | String val = ""; |
| | |
| | | @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; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | private List<List<String>> templateContent; |
| | | |
| | | |
| | | /** |
| | | * 合并内容(短信内容)--临时 |
| | | */ |
| | | private List<List<String>> templateMergeContent; |
| | | |
| | | /** |
| | | * 类型 1:遍历发送 2:批量发送(一次发多个) |
| | | */ |
| | |
| | | private SmsTemplate smsTemplate; |
| | | |
| | | /** |
| | | * 短信模板对象信息(合并的模板) |
| | | */ |
| | | private SmsTemplate smsTemplateMerge; |
| | | |
| | | /** |
| | | * 是否发送站内信 |
| | | */ |
| | | private Boolean isSendStation; |
| | |
| | | |
| | | 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; |
| | |
| | | @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); |
| | | } |
| | | } |
| | |
| | | SgGxDO selectByGxType(@Param("gxType") String gxType); |
| | | |
| | | SgGxVO getById(@Param("id") Long id); |
| | | |
| | | List<String> childType(@Param("gxType") String gxType); |
| | | } |
| | |
| | | <if test="dto.gxName != null and dto.gxName != ''"> |
| | | and gx.gx_name LIKE CONCAT('%', #{dto.gxName}, '%') |
| | | </if> |
| | | <if test="dto.childTypeList>0 and dto.childTypeList != null"> |
| | | and gx.gx_type in |
| | | <foreach collection="dto.childTypeList" open="(" close=")" separator="," item="id"> |
| | | #{id} |
| | | </foreach> |
| | | </if> |
| | | </select> |
| | | <select id="queryStepByIds" resultType="cn.gistack.sm.sg.DO.SgGxStepDO"> |
| | | select * from YWXT.SG_GX_STEP step where 1=1 |
| | |
| | | <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 id from "YWXT"."BLADE_DICT_BIZ" where parent_id = (select id from "YWXT"."BLADE_DICT_BIZ" where dict_key = #{gxType}); |
| | | </select> |
| | | </mapper> |
| | |
| | | <if test="dto.endTime != null and dto.endTime !='' "> |
| | | and report.report_time <= #{dto.endTime} |
| | | </if> |
| | | order by report_time desc |
| | | </select> |
| | | |
| | | <select id="queryPageListAll" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO"> |
| | |
| | | <if test="dto.endTime != null and dto.endTime != ''"> |
| | | and report.create_time <= #{dto.endTime} |
| | | </if> |
| | | order by report.report_time desc |
| | | </select> |
| | | |
| | | <select id="queryById" resultType="cn.gistack.sm.sg.VO.SgProgressReportVO"> |
| | |
| | | <if test="dto.endTime != null and dto.endTime !='' "> |
| | | and report.report_time <= #{dto.endTime} |
| | | </if> |
| | | 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) |
| | |
| | | |
| | | List<SgAllDeptOrUser> queryUser(); |
| | | |
| | | List<SgProjectTreeVO> projectTree(@Param("dto") ProjectSearchDTO dto); |
| | | |
| | | //List<String> getProjectIds(String code,@Param("grad") String grad ); |
| | | List<String> getUserS(String controlUnit); |
| | | |
| | | |
| | | //List<String> getProjectIds(String code,@Param("grad") String grad ); |
| | | } |
| | |
| | | <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}), '%') |
| | | </if> |
| | |
| | | </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 |
| | |
| | | #{id} |
| | | </foreach>) |
| | | </if> |
| | | <if test="dto.projectSort == null or dto.projectSort ==0"> |
| | | ORDER BY info.status desc ,info.project_progress desc |
| | | <if test="dto.projectSort == null"> |
| | | ORDER BY info.status desc ,info.project_progress desc NULLS LAST |
| | | </if> |
| | | <if test="dto.projectSort ==1"> |
| | | ORDER BY info.project_progress desc |
| | | <!-- |
| | | <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 info.surface_progress desc NULLS LAST |
| | | </if> |
| | | <if test="dto.projectSort != null and dto.projectSort ==2"> |
| | | ORDER BY info.sk_id asc |
| | | <if test="dto.projectSort != null and dto.projectSort ==4"> |
| | | ORDER BY info.video_progress desc NULLS LAST |
| | | </if> |
| | | <if test="dto.projectSort != null and dto.projectSort ==5"> |
| | | ORDER BY info.trans_progress desc NULLS LAST |
| | | </if> |
| | | <if test="dto.projectSort != null and dto.projectSort ==6"> |
| | | ORDER BY info.seepage_progress desc NULLS LAST |
| | | </if> |
| | | </select> |
| | | |
| | |
| | | #{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.status desc ,pro.project_progress desc |
| | | |
| | | </select> |
| | |
| | | <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> |
| | | ORDER BY pro.project_progress desc NULLS LAST |
| | | </select> |
| | | <select id="getSgstatiss" resultType="cn.gistack.sm.sg.VO.SgStatisticsVO"> |
| | | SELECT |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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"> |
| | |
| | | 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 |
| | |
| | | <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 |
| | |
| | | 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 |
| | |
| | | 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 |
| | | FROM |
| | | ywxt.sg_project_info pro |
| | | LEFT JOIN SJZT_DW."dim_res_info_a" dria ON dria."res_cd" = pro.sk_id |
| | |
| | | <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> |
| | | order by pro.project_progress desc NULLS LAST |
| | | </select> |
| | | <select id="queryStepByProject1" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO"> |
| | | select |
| | |
| | | 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 |
| | |
| | | <foreach collection="dto.projectIds" item="id" separator="," open="(" close=")"> |
| | | #{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> |
| | |
| | | <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.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> |
| | | </select> |
| | | <select id="getUserS" resultType="java.lang.String"> |
| | | |
| | | SELECT |
| | | user_id |
| | | FROM |
| | | "YWXT"."BLADE_USER_DEPT" |
| | | WHERE |
| | | dept_id = #{controlUnit} |
| | | |
| | | |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | 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; |
| | |
| | | List<SgStatisProVO> getsgStatisticsList(String code); |
| | | |
| | | List<SgStatistccVO> getsgStatisticscc(String code); |
| | | |
| | | List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | 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; |
| | |
| | | @Autowired |
| | | private SgProjectInfoServiceImpl sgProjectInfoService; |
| | | |
| | | |
| | | |
| | | 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 ->{ |
| | | Long proframId = s.getProframId(); |
| | | SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(proframId); |
| | | String controlUnit = sgProjectInfoDO.getControlUnit(); |
| | | List<String> users=sgProjectInfoMapper.getUserS(controlUnit); |
| | | s.setUserIDs(users); |
| | | }); |
| | | |
| | | } |
| | | return page.setRecords(list); |
| | | } |
| | | @Override |
| | | public IPage<SgProgressReportVO> queryPageListAll(IPage<SgProgressReportVO> page, ProjectSearchDTO searchDTO) { |
| | | List<SgProgressReportVO> list = sgProgressReportMapper.queryPageListAll(page,searchDTO); |
| | | if(list != null){ |
| | | list.forEach(s ->{ |
| | | Long proframId = s.getProframId(); |
| | | SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(proframId); |
| | | String controlUnit = sgProjectInfoDO.getControlUnit(); |
| | | List<String> users=sgProjectInfoMapper.getUserS(controlUnit); |
| | | s.setUserIDs(users); |
| | | }); |
| | | |
| | | } |
| | | return page.setRecords(list); |
| | | } |
| | | @Override |
| | |
| | | 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(Long.parseLong(AuthUtil.getUser().getRoleId())).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); |
| | | } |
| | | } |
| | |
| | | Integer isReject = approvalDTO.getIsReject(); |
| | | Long userId = approvalDTO.getUserId(); |
| | | Long id = approvalDTO.getId(); |
| | | String roleId = AuthUtil.getUser().getRoleId(); |
| | | QueryWrapper<SgProgressReportDO> wrappers = new QueryWrapper<>(); |
| | | wrappers.eq("id", id); |
| | | SgProgressReportDO sgProgressReportDOS1 = sgProgressReportMapper.selectOne(wrappers); |
| | | |
| | | //判断当前用户的角色是不是 工序配置的审核的角色 |
| | | |
| | | 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)){ |
| | | if (isReject==1){ |
| | | sgReportUserDO = sgReportUserDOS.get(0); |
| | | }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); |
| | |
| | | .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(){ |
| | | 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){ |
| | | if (isReject==1){ |
| | | userUpdate.set(SgReportUserDO::getUserId,userId); |
| | | }*/ |
| | | } |
| | | userUpdate.update(); |
| | | /*for (SgReportUserDO reportUserDO : sgReportUserDOS) { |
| | | if (reportUserDO.getApprovalOrder()<=sgReportUserDO.getApprovalOrder()&&reportUserDO.getApprovalOrder()!=0){ |
| | |
| | | * @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) { |
| | |
| | | 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.setVideoProgress(vo.getVideoProgress()); |
| | | project.setTransProgress(vo.getTransProgress()); |
| | | project.setSeepageProgress(vo.getSeepageProgress()); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | |
| | | 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->{ |
| | |
| | | return sgProjectInfoDOS; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 设置百分号 |
| | | * @param s |
| | | */ |
| | | private void setPercentage(SgProjectInfoDO s) { |
| | | s.setSurfaceProgress(s.getSurfaceProgress()==null?null:s.getSurfaceProgress()+"%"); |
| | | s.setVideoProgress(s.getVideoProgress()==null?null:s.getVideoProgress()+"%"); |
| | | s.setTransProgress(s.getTransProgress()==null?null:s.getTransProgress()+"%"); |
| | | s.setSeepageProgress(s.getSeepageProgress()==null?null:s.getSeepageProgress()+"%"); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public IPage<SgProjectInfoVO> progressPage(IPage<SgProjectInfoVO> page, ProjectSearchDTO 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); |
| | | } |
| | | |
| | |
| | | //片区 |
| | | 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); |
| | | sgStatisProVOS = getSgStatisProVOS(sgStatisProVOS); |
| | | getDeviceTypes(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 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) { |
| | | SgOperatingRateVO sVo = deviceTypes.get(vo.getProIds()); |
| | | if (Objects.nonNull(sVo)){ |
| | | vo.setSurfaceNum(sVo.getSurfaceNum()); |
| | | vo.setSurfaceProgress(sVo.getSurfaceProgress()==null?null:sVo.getSurfaceProgress()+"%"); |
| | | vo.setVideoNum(sVo.getVideoNum()); |
| | | vo.setVideoProgress(sVo.getVideoProgress()==null?null:sVo.getVideoProgress()+"%"); |
| | | vo.setTransNum(sVo.getTransNum()); |
| | | vo.setTransProgress(sVo.getTransProgress()==null?null:sVo.getTransProgress()+"%"); |
| | | vo.setSeepageNum(sVo.getSeepageNum()); |
| | | vo.setSeepageProgress(sVo.getSeepageProgress()==null?null:sVo.getSeepageProgress()+"%"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 统计设备类型开工率 |
| | | * @param sgStatisProVOS |
| | | */ |
| | | private void getDeviceTypes(List<SgStatisProVO> sgStatisProVOS) { |
| | | if (CollectionUtils.isNotEmpty(sgStatisProVOS)){ |
| | | for (SgStatisProVO vo : sgStatisProVOS) { |
| | | String proIds = vo.getProIds(); |
| | | 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)){ |
| | |
| | | if (Objects.nonNull(sg108)){ |
| | | Integer deviceCount = sg108.getDeviceCount(); |
| | | Integer deviceStart = sg108.getDeviceStart(); |
| | | vo.setSurfaceNum(deviceCount); |
| | | sgOperatingRateVO.setSurfaceNum(deviceCount); |
| | | 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"); |
| | | } |
| | | } |
| | | //视频 |
| | |
| | | if (Objects.nonNull(sg104)){ |
| | | Integer deviceCount = sg104.getDeviceCount(); |
| | | Integer deviceStart = sg104.getDeviceStart(); |
| | | vo.setVideoNum(deviceCount); |
| | | sgOperatingRateVO.setVideoNum(deviceCount); |
| | | 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"); |
| | | } |
| | | } |
| | | //渗压 |
| | |
| | | if (Objects.nonNull(sg101)){ |
| | | Integer deviceCount = sg101.getDeviceCount(); |
| | | Integer deviceStart = sg101.getDeviceStart(); |
| | | vo.setTransNum(deviceCount); |
| | | sgOperatingRateVO.setTransNum(deviceCount); |
| | | 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"); |
| | | } |
| | | } |
| | | //渗流 |
| | |
| | | if (Objects.nonNull(sg102)){ |
| | | Integer deviceCount = sg102.getDeviceCount(); |
| | | Integer deviceStart = sg102.getDeviceStart(); |
| | | vo.setSeepageNum(deviceCount); |
| | | sgOperatingRateVO.setSeepageNum(deviceCount); |
| | | 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) { |
| | |
| | | BigDecimal percentage = bigDecimal.multiply(new BigDecimal("100")); |
| | | // 如果不需要保留小数位,可以设置一个scale为0 |
| | | BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP); |
| | | return percentageRounded+"%"; |
| | | return percentageRounded.toString(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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()); |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | dto.setSgCodeS(sgCodeS); |
| | | 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); |
| | | } |
| | | return tree; |
| | | } |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | </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, |
| | |
| | | * @return |
| | | */ |
| | | String getResDept(String deptIds); |
| | | |
| | | List<DeptVO> treeByParentIdNew(String number,String precinct); |
| | | } |
| | |
| | | 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)); |
| | | } |
| | | } |