diff --git a/src/main/java/com/gunshi/project/hsz/controller/MentenceInfoCountController.java b/src/main/java/com/gunshi/project/hsz/controller/MentenceInfoCountController.java index cff5f56..022f7a2 100644 --- a/src/main/java/com/gunshi/project/hsz/controller/MentenceInfoCountController.java +++ b/src/main/java/com/gunshi/project/hsz/controller/MentenceInfoCountController.java @@ -41,14 +41,14 @@ public class MentenceInfoCountController extends AbstractCommonFileController { return R.ok(byPage); } - @Operation(summary = "根据时间统计隐患数目") + @Operation(summary = "根据时间统计 隐患 数目") @PostMapping("/count12") public R> count12(@RequestBody MonthRangeSo monthRangeSo){ List list = mentenceFarmerRecordService.count12(monthRangeSo); return R.ok(list); } - @Operation(summary = "根据时间统计隐患类型数目") + @Operation(summary = "根据时间统计 隐患类型 数目") @PostMapping("/countType") public R> countType(@RequestBody MonthRangeSo monthRangeSo){ Map map = mentenceFarmerRecordService.countType(monthRangeSo); diff --git a/src/main/java/com/gunshi/project/hsz/controller/WaterDispatchController.java b/src/main/java/com/gunshi/project/hsz/controller/WaterDispatchController.java index 4610e78..122ee0e 100644 --- a/src/main/java/com/gunshi/project/hsz/controller/WaterDispatchController.java +++ b/src/main/java/com/gunshi/project/hsz/controller/WaterDispatchController.java @@ -3,6 +3,7 @@ package com.gunshi.project.hsz.controller; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gunshi.core.result.R; +import com.gunshi.core.session.entity.SessionUser; import com.gunshi.project.hsz.entity.so.WaterDispatchPageSo; import com.gunshi.project.hsz.entity.so.XlPlanPageSo; import com.gunshi.project.hsz.entity.vo.WdCountVo; @@ -16,6 +17,7 @@ import com.gunshi.project.hsz.validate.markers.Update; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -61,10 +63,15 @@ public class WaterDispatchController extends AbstractCommonFileController { @Operation(summary = "反馈") @PostMapping("/feedback") - public R feedback(@RequestBody WaterDispatch dto) { + public R feedback(@RequestBody WaterDispatch dto, HttpServletRequest request) { + SessionUser sessionUser = checkLogin(request); + if(sessionUser != null){ + dto.setResPerson(sessionUser.getUserId().toString()); + dto.setResPersonName(sessionUser.getUserName()); + } boolean flag = waterDispatchService.feedBack(dto); if(flag){ - fileService.saveFile(dto.getFiles(),getGroupId(),dto.getId().toString()); + fileService.saveFile(dto.getResFiles(),getResGroupId(),dto.getId().toString()); } return R.ok(dto); } @@ -89,6 +96,7 @@ public class WaterDispatchController extends AbstractCommonFileController { boolean flag = waterDispatchService.removeById(id); if(flag){ fileService.deleteFile(getGroupId(),byId.getId().toString()); + fileService.deleteFile(getResGroupId(),byId.getId().toString()); } return R.ok(true); } @@ -98,9 +106,10 @@ public class WaterDispatchController extends AbstractCommonFileController { public R> page(@RequestBody WaterDispatchPageSo pageSo) { Page res = waterDispatchService.pageQuery(pageSo); if(!CollectionUtils.isEmpty(res.getRecords())){ - res.getRecords().forEach(o -> o.setFiles( - fileService.getFiles(getGroupId(),o.getId().toString()) - )); + res.getRecords().stream().forEach(o ->{ + o.setFiles(fileService.getFiles(getGroupId(),o.getId().toString())); + o.setResFiles(fileService.getFiles2(getResGroupId(),o.getId().toString())); + }); } return R.ok(res); } @@ -116,4 +125,8 @@ public class WaterDispatchController extends AbstractCommonFileController { public String getGroupId() { return "waterDispatch"; } + + public String getResGroupId(){ + return "waterDispatchRes"; + } } diff --git a/src/main/java/com/gunshi/project/hsz/entity/vo/StZqrlBVo.java b/src/main/java/com/gunshi/project/hsz/entity/vo/StZqrlBVo.java index 5ee6efd..b153741 100644 --- a/src/main/java/com/gunshi/project/hsz/entity/vo/StZqrlBVo.java +++ b/src/main/java/com/gunshi/project/hsz/entity/vo/StZqrlBVo.java @@ -24,14 +24,17 @@ public class StZqrlBVo { @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") private Date tm; + //水位 private BigDecimal waterLevel; + //溢洪量 private BigDecimal flowNum; + //库容 private BigDecimal boxNum; - @Schema(description="流量和") + @Schema(description="累计溢洪量") @TableField(exist = false) private BigDecimal qtotal; diff --git a/src/main/java/com/gunshi/project/hsz/mapper/FileAssociationsMapper.java b/src/main/java/com/gunshi/project/hsz/mapper/FileAssociationsMapper.java index 0e8851e..1016ddb 100644 --- a/src/main/java/com/gunshi/project/hsz/mapper/FileAssociationsMapper.java +++ b/src/main/java/com/gunshi/project/hsz/mapper/FileAssociationsMapper.java @@ -30,11 +30,34 @@ public interface FileAssociationsMapper extends BaseMapper { fa.del = '1' AND fa.business_id = #{businessId} AND fa."table_name" = #{tableName} - AND fd.group_id = #{tableName} + AND fd.group_id = #{tableName} ORDER BY fa.tm desc """) List getFiles(@Param("tableName") String tableName,@Param("businessId") String businessId); + + @Select(""" + + """) + List getFiles2(@Param("tableName") String tableName,@Param("businessId") String businessId); + + + + @Select(""" """) List getFilesByIds(@Param("ids") List ids); + + + } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/hsz/model/MentenceTemplate.java b/src/main/java/com/gunshi/project/hsz/model/MentenceTemplate.java index d4d13cb..539f958 100644 --- a/src/main/java/com/gunshi/project/hsz/model/MentenceTemplate.java +++ b/src/main/java/com/gunshi/project/hsz/model/MentenceTemplate.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.gunshi.project.hsz.validate.markers.Insert; import com.gunshi.project.hsz.validate.markers.Update; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,6 +21,7 @@ import java.util.List; @TableName("mentence_template") public class MentenceTemplate { @TableId + @JsonSerialize(using = ToStringSerializer.class) private Long id; @TableField("name") @@ -27,7 +30,7 @@ public class MentenceTemplate { private String name; @TableField("type") - @Schema(description = "模板类型") + @Schema(description = "模板类型 0 养护记录 1 验收记录") @NotNull(message = "模板类型不能为空",groups = {Insert.class, Update.class}) private Integer type; diff --git a/src/main/java/com/gunshi/project/hsz/model/ResMangUnit.java b/src/main/java/com/gunshi/project/hsz/model/ResMangUnit.java index 9f7df9b..41cf266 100644 --- a/src/main/java/com/gunshi/project/hsz/model/ResMangUnit.java +++ b/src/main/java/com/gunshi/project/hsz/model/ResMangUnit.java @@ -76,7 +76,7 @@ public class ResMangUnit implements Serializable { @TableField(value="person_funds_source") @Schema(description="人员经费来源") // @Size(max = 0,message = "人员经费来源最大长度要小于 0") - private Integer personFundsSource; + private String personFundsSource; /** * 维修养护经费来源 @@ -84,7 +84,7 @@ public class ResMangUnit implements Serializable { @TableField(value="repair_funds_source") @Schema(description="维修养护经费来源") // @Size(max = 0,message = "维修养护经费来源最大长度要小于 0") - private Integer repairFundsSource; + private String repairFundsSource; /** * 行政主管单位 diff --git a/src/main/java/com/gunshi/project/hsz/model/WaterDispatch.java b/src/main/java/com/gunshi/project/hsz/model/WaterDispatch.java index 2c76558..4b8bfd1 100644 --- a/src/main/java/com/gunshi/project/hsz/model/WaterDispatch.java +++ b/src/main/java/com/gunshi/project/hsz/model/WaterDispatch.java @@ -32,7 +32,7 @@ public class WaterDispatch { private Long id; - @TableField(exist = false) + @TableField("is_distribute") @Schema(description = "是否下发 0 是 1 否") private Integer isDistribute; @@ -109,6 +109,19 @@ public class WaterDispatch { @Schema(description = "执行结果反馈") private String resFb; + @TableField("res_person") + @Schema(description = "反馈人员id") + private String resPerson; + + @TableField("res_person_name") + @Schema(description = "反馈人员名称") + private String resPersonName; + + @TableField("res_tm") + @Schema(description = "反馈时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date resTm; + /** * 是否完成 0是 1否 */ @@ -122,4 +135,9 @@ public class WaterDispatch { @TableField(exist = false) @Schema(description = "文件列表") private List files; + + + @TableField(exist = false) + @Schema(description = "反馈文件列表") + private List resFiles; } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/hsz/service/FileAssociationsService.java b/src/main/java/com/gunshi/project/hsz/service/FileAssociationsService.java index 778635f..786c164 100644 --- a/src/main/java/com/gunshi/project/hsz/service/FileAssociationsService.java +++ b/src/main/java/com/gunshi/project/hsz/service/FileAssociationsService.java @@ -210,6 +210,11 @@ public class FileAssociationsService extends ServiceImpl getFiles2(String tName, String bId) { + return this.baseMapper.getFiles2(tName,bId); + } + + @Cacheable(value = THIS_REDIS_KEY, key = "#p0 +':'+ #p1 +':'+ #p2", unless = "false") public List getFiles(String tName, String bId,String num) { return this.baseMapper.getFiles1(tName,bId,num); diff --git a/src/main/java/com/gunshi/project/hsz/service/RiverWaterService.java b/src/main/java/com/gunshi/project/hsz/service/RiverWaterService.java index b4da7a9..7cad59c 100644 --- a/src/main/java/com/gunshi/project/hsz/service/RiverWaterService.java +++ b/src/main/java/com/gunshi/project/hsz/service/RiverWaterService.java @@ -182,7 +182,7 @@ public class RiverWaterService { //查询该站点实时水位 StRiverRReal stRiverRReal = stRiverRRealService.getBaseMapper().queryQByStcd(stcd); if(stRiverRReal == null){ - throw new IllegalArgumentException("未查询到该站点实时水位信息,请检查"); + return vo; } BigDecimal z = stRiverRReal.getZ() == null ? BigDecimal.ZERO : stRiverRReal.getZ(); vo.setWaterVal(z); diff --git a/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java b/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java index 6f68c87..5f979c1 100644 --- a/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java +++ b/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java @@ -2,6 +2,7 @@ package com.gunshi.project.hsz.service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.hsz.mapper.StZvarlBMapper; +import com.gunshi.project.hsz.model.StZqrlB; import com.gunshi.project.hsz.model.StZvarlB; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -72,6 +73,90 @@ public class StZvarlBService extends ServiceImpl { .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } + /** + * 分段线性计算水位->库容 + * 首先需要保证 水位->库容的数据要按水位从小到大进行排列 + * @param zvarlBS + * @param rz + * @return + */ + public BigDecimal getWByZvarl(List zvarlBS, BigDecimal rz) { + // 1. 参数校验 + if (zvarlBS == null || zvarlBS.isEmpty()) { + throw new IllegalArgumentException("水位-库容关系列表不能为空"); + } + if (rz == null) { + throw new IllegalArgumentException("水位值不能为空"); + } + // 2. 检查边界情况:如果目标水位低于最低水位或高于最高水位 + BigDecimal minRz = zvarlBS.get(0).getRz(); + BigDecimal maxRz = zvarlBS.get(zvarlBS.size() - 1).getRz(); + if (rz.compareTo(minRz) < 0) { + // 低于最低水位,可以选择抛出异常或进行外推(这里选择抛出异常) + return BigDecimal.ZERO; + } + if (rz.compareTo(maxRz) > 0) { + // 高于最高水位,可以选择抛出异常或进行外推(这里选择抛出异常) + return BigDecimal.ZERO; + } + int l = 0; + int r = zvarlBS.size() -1; + //二分查找 由线性On时间复杂度降为Ologn + while (l <= r) { + int mid = l + (r-l) / 2; + BigDecimal midRz = zvarlBS.get(mid).getRz(); + int compareResult = midRz.compareTo(rz); + if(compareResult == 0 ){ + return zvarlBS.get(mid).getW(); + }else if(compareResult < 0){ + l = mid + 1; + }else{ + r = mid - 1; + } + } + + /** + * 此时 l 指向第一个大于rz的位置 + * r 指向最后一个小于rz的位置 + * 既 r为 x1 y1 + * l为 x2 y2 + */ + if(l < 0 || r >= zvarlBS.size()){ + return BigDecimal.ZERO; + } + //获取前后差值的点 + StZvarlB lowerPoint = zvarlBS.get(r); + StZvarlB upperPoint = zvarlBS.get(l); + return linearInterpolation(lowerPoint.getRz(),lowerPoint.getW(),upperPoint.getRz(),upperPoint.getW(),rz).setScale(3); + } + + + /** + * 线性插值辅助方法 + * @param x1 已知点1的水位 + * @param y1 已知点1的库容 + * @param x2 已知点2的水位 + * @param y2 已知点2的库容 + * @param x 目标水位 + * @return 目标水位对应的库容 + */ + private BigDecimal linearInterpolation(BigDecimal x1, BigDecimal y1, + BigDecimal x2, BigDecimal y2, + BigDecimal x) { + // 使用公式: y = y1 + ( (y2 - y1) / (x2 - x1) ) * (x - x1) + + // 计算斜率: (y2 - y1) / (x2 - x1) + BigDecimal slope = y2.subtract(y1) + .divide(x2.subtract(x1), 10, RoundingMode.HALF_UP); + + // 计算: slope * (x - x1) + BigDecimal xDiff = x.subtract(x1); + BigDecimal product = slope.multiply(xDiff); + + // 计算最终结果: y1 + product + return y1.add(product); + } + } diff --git a/src/main/java/com/gunshi/project/hsz/service/WaterDispatchService.java b/src/main/java/com/gunshi/project/hsz/service/WaterDispatchService.java index 39220c4..282d9c0 100644 --- a/src/main/java/com/gunshi/project/hsz/service/WaterDispatchService.java +++ b/src/main/java/com/gunshi/project/hsz/service/WaterDispatchService.java @@ -41,11 +41,13 @@ public class WaterDispatchService extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(StWaterRReorganize::getTm)