package com.sercurityControl.proteam.service.impl; import com.alibaba.fastjson2.JSONObject; import com.securityControl.common.core.exception.ServiceException; import com.securityControl.common.core.utils.DateUtils; import com.securityControl.common.core.utils.StringUtils; import com.sercurityControl.proteam.domain.TRiskPressDropRate; import com.sercurityControl.proteam.domain.dto.RiskDelParamDto; import com.sercurityControl.proteam.domain.vo.BaseVo; import com.sercurityControl.proteam.mapper.TRiskPressDropRateMapper; import com.sercurityControl.proteam.service.TRiskPressDropRateService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.NumberFormat; import java.util.*; /** * 风险压降率表(TRiskPressDropRate)表服务实现类 * * @author makejava * @since 2022-12-06 11:05:42 */ @Slf4j @Service public class TRiskPressDropRateServiceImpl implements TRiskPressDropRateService { @Autowired private TRiskPressDropRateMapper tRiskPressDropRateMapper; /** * 通过ID查询单条数据 * * @param proName 主键 * @return 实例对象 */ @Override public TRiskPressDropRate queryById(String proName) { return this.tRiskPressDropRateMapper.queryById(proName); } /** * 通过主键删除数据 * * @param proName 主键 * @return 是否成功 */ @Override public void deleteById(String proName) { tRiskPressDropRateMapper.deleteById(proName); } @Override public String importData(List objectList, String cityName, String downloadPath) { StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); int successNum = 0; int failureNum = 0; for (JSONObject obj : objectList) { if (StringUtils.isBlank(obj.getString("proName"))) { failureNum++; failureMsg.append("第").append(obj.getString("rowNo")).append("行无工程名称;").append("
"); continue; } if (StringUtils.isBlank(obj.getString("tower"))) { failureNum++; failureMsg.append("第").append(obj.getString("rowNo")).append("行无塔号;").append("
"); continue; } try { TRiskPressDropRate pressDropRate = buildObj(obj, cityName); pressDropRate.setCreateTime(DateUtils.getNowDate()); pressDropRate.setUpdateTime(DateUtils.getNowDate()); tRiskPressDropRateMapper.addOrUpdateRisk(pressDropRate); successNum++; } catch (Exception e) { failureNum++; String msg = "第" + obj.getString("rowNo") + "行导入失败!" + "工程名称为: " + obj.getString("proName") + "
"; failureMsg.append(msg).append(e.getMessage()); //log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据导入成功!共 " + objectList.size() + " 条,导入成功" + successNum + "条"); } return successMsg.toString(); } @Override public List getProNameList(String cityName) { List cityNameList = null; if (StringUtils.isNotEmpty(cityName)) { String[] cityNameArr = cityName.split(","); cityNameList = Arrays.asList(cityNameArr); } return tRiskPressDropRateMapper.getProNameList(cityNameList); } @Override public void delProList(RiskDelParamDto paramDto) { tRiskPressDropRateMapper.delProList(paramDto.getType(), paramDto.getName()); } @Override public List getRiskBloodList(TRiskPressDropRate pressDropRate) { List cityNameList = null, proNameList = null; String cityName = pressDropRate.getCityName(); if (StringUtils.isNotEmpty(cityName)) { String[] cityNameArr = cityName.split(","); cityNameList = Arrays.asList(cityNameArr); } String proName = pressDropRate.getProName(); if (StringUtils.isNotEmpty(proName)) { String[] proNameArr = proName.split(","); proNameList = Arrays.asList(proNameArr); } return tRiskPressDropRateMapper.getRiskBloodList(pressDropRate, cityNameList, proNameList); } @Override public List> getRiskDropRate(TRiskPressDropRate o) { List> list = new ArrayList<>(); Map provinceMap = new HashMap<>(16); Map currentQueryMap = new HashMap<>(16); Map currentQueryComplexMap = new HashMap<>(16); // 全省压降率 int totalNum = 0, num = 0; List> provinceList = tRiskPressDropRateMapper.getProvinceRiskDropRate(); for (Map map : provinceList) { for (Map.Entry entry : map.entrySet()) { if (Objects.equals("TOTALNUM", entry.getKey())) { totalNum += Integer.parseInt(String.valueOf(entry.getValue())); } if (Objects.equals("NUM", entry.getKey())) { num += Integer.parseInt(String.valueOf(entry.getValue())); } } } String calculate = calculate(num, totalNum); provinceMap.put("totalNum", totalNum); provinceMap.put("num", num); provinceMap.put("calculate", calculate); list.add(provinceMap); // 当前查询压降率计算结果 int currentTotalNum = 0, basicNum = 0, towNum = 0, wireNum = 0; List cityNameList = null, proNameList = null; String cityName = o.getCityName(); if (StringUtils.isNotEmpty(cityName)) { String[] cityNameArr = cityName.split(","); cityNameList = Arrays.asList(cityNameArr); } String proName = o.getProName(); if (StringUtils.isNotEmpty(proName)) { String[] proNameArr = proName.split(","); proNameList = Arrays.asList(proNameArr); } List> currentQueryList = tRiskPressDropRateMapper.getCurrentQueryData(o, cityNameList, proNameList); for (Map map : currentQueryList) { for (Map.Entry entry : map.entrySet()) { if (Objects.equals("TOTALNUM", entry.getKey())) { currentTotalNum += Integer.parseInt(String.valueOf(entry.getValue())); } if (Objects.equals("BASICNUM", entry.getKey())) { basicNum += Integer.parseInt(String.valueOf(entry.getValue())); } if (Objects.equals("TOWNUM", entry.getKey())) { towNum += Integer.parseInt(String.valueOf(entry.getValue())); } if (Objects.equals("WIRENUM", entry.getKey())) { wireNum += Integer.parseInt(String.valueOf(entry.getValue())); } } } currentQueryMap.put("currentTotalNum", currentTotalNum); currentQueryMap.put("currentTotalRate", calculate((basicNum + towNum + wireNum), currentTotalNum * 3)); currentQueryMap.put("currentBasicRate", calculate(basicNum, currentTotalNum)); currentQueryMap.put("currentTowerRate", calculate(towNum, currentTotalNum)); currentQueryMap.put("currentWireRate", calculate(wireNum, currentTotalNum)); list.add(currentQueryMap); // 当前查询压降率综合计算结果 String workType = o.getWorkType(); if (StringUtils.isNotEmpty(workType)) { List workTypeList = Arrays.asList(workType.split(",")); if (workTypeList.contains("基础")) { currentQueryComplexMap.put("currentBasic", basicNum); currentQueryComplexMap.put("currentTower", 0); currentQueryComplexMap.put("currentWire", 0); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate(basicNum, currentTotalNum)); currentQueryComplexMap.put("workType", "基础"); } if (workTypeList.contains("组塔")) { currentQueryComplexMap.put("currentBasic", 0); currentQueryComplexMap.put("currentTower", towNum); currentQueryComplexMap.put("currentWire", 0); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate(towNum, currentTotalNum)); currentQueryComplexMap.put("workType", "组塔"); } if (workTypeList.contains("架线")) { currentQueryComplexMap.put("currentBasic", 0); currentQueryComplexMap.put("currentTower", 0); currentQueryComplexMap.put("currentWire", wireNum); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate(wireNum, currentTotalNum)); currentQueryComplexMap.put("workType", "架线"); } if (workTypeList.contains("基础") && workTypeList.contains("组塔")) { currentQueryComplexMap.put("currentBasic", basicNum); currentQueryComplexMap.put("currentTower", towNum); currentQueryComplexMap.put("currentWire", 0); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate((basicNum + towNum), currentTotalNum * 2)); currentQueryComplexMap.put("workType", "基础,组塔"); } if (workTypeList.contains("基础") && workTypeList.contains("架线")) { currentQueryComplexMap.put("currentBasic", basicNum); currentQueryComplexMap.put("currentTower", 0); currentQueryComplexMap.put("currentWire", wireNum); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate((basicNum + wireNum), currentTotalNum * 2)); currentQueryComplexMap.put("workType", "基础,架线"); } if (workTypeList.contains("组塔") && workTypeList.contains("架线")) { currentQueryComplexMap.put("currentBasic", 0); currentQueryComplexMap.put("currentTower", towNum); currentQueryComplexMap.put("currentWire", wireNum); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate((towNum + wireNum), currentTotalNum * 2)); currentQueryComplexMap.put("workType", "组塔,架线"); } if (workTypeList.contains("基础") && workTypeList.contains("组塔") && workTypeList.contains("架线")) { currentQueryComplexMap.put("currentBasic", basicNum); currentQueryComplexMap.put("currentTower", towNum); currentQueryComplexMap.put("currentWire", wireNum); currentQueryComplexMap.put("currentTotal", currentTotalNum); currentQueryComplexMap.put("currentTotalRate", calculate((towNum + wireNum + basicNum), currentTotalNum * 3)); currentQueryComplexMap.put("workType", "基础,组塔,架线"); } } else { currentQueryComplexMap.put("currentBasic", 0); currentQueryComplexMap.put("currentTower", 0); currentQueryComplexMap.put("currentWire", 0); currentQueryComplexMap.put("currentTotal", 0); currentQueryComplexMap.put("currentTotalRate", "0%"); currentQueryComplexMap.put("workType", ""); } list.add(currentQueryComplexMap); return list; } /** * @return java.lang.String * @Author roof * @Description 计算百分比 * @Date 14:47 2022/4/28 * @Param [num, count] */ public static String calculate(Integer num, Integer count) { NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMaximumFractionDigits(2); //保留几位小数填写几 //注意需要将Integer转换为float进行计算 String percent = ""; if (count != 0) { percent = numberFormat.format((float) num / (float) count * 100); } else { percent = "0"; } return percent + "%"; } private TRiskPressDropRate buildObj(JSONObject obj, String cityName) { TRiskPressDropRate o = new TRiskPressDropRate(); o.setCityName(cityName); o.setProName(obj.getString("proName")); o.setTower(obj.getString("tower")); o.setLon(obj.getString("lon")); o.setLat(obj.getString("lat")); o.setBasicBaseType(obj.getString("basicBaseType")); o.setBasicWorkStyle(obj.getString("basicWorkStyle")); o.setBasicRiskLevel(obj.getString("basicRiskLevel")); o.setBasicOperProcedure(obj.getString("basicOperProcedure")); o.setBasicAppMethod(obj.getString("basicAppMethod")); o.setGroupTowerFullHeight(replaceStr(obj.getString("groupTowerFullHeight"))); o.setGroupTowerStyle(obj.getString("groupTowerStyle")); o.setGroupTowerRiskLevel(obj.getString("groupTowerRiskLevel")); o.setGroupTowerOperProcedure(obj.getString("groupTowerOperProcedure")); o.setGroupTowerAppMethod(obj.getString("groupTowerAppMethod")); o.setWireSpan(obj.getString("wireSpan")); o.setWireStyle(obj.getString("wireStyle")); o.setWireRiskLevel(obj.getString("wireRiskLevel")); o.setWireOperProcedure(obj.getString("wireOperProcedure")); o.setWireAppMethod(obj.getString("wireAppMethod")); o.setRiskType(obj.getString("riskType")); o.setRiskDetails(obj.getString("riskDetails")); o.setRiskType2(obj.getString("riskType2")); o.setRiskDetails2(obj.getString("riskDetails2")); o.setRiskType3(obj.getString("riskType3")); o.setRiskDetails3(obj.getString("riskDetails3")); o.setRiskType4(obj.getString("riskType4")); o.setRiskDetails4(obj.getString("riskDetails4")); o.setRiskType5(obj.getString("riskType5")); o.setRiskDetails5(obj.getString("riskDetails5")); o.setLandFormPath(obj.getString("landFormPath")); o.setSurroundingsPath(obj.getString("surroundingsPath")); return o; } /** * @return java.lang.String * @Author roof * @Description 替换字符串 * @Date 8:54 2022/5/21 * @Param [] */ public static String replaceStr(String value) { if(StringUtils.isBlank(value)){ return ""; } if (value.contains("m")) { return value.replaceAll("m", ""); } else if (value.contains("米")) { return value.replaceAll("米", ""); } else { return value; } } }