0803问题解决

master
Zangzhipeng 1 year ago
parent fc91f1c3c0
commit 1a2caf9857
  1. 335
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java
  2. 2
      hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/HighDangerMapper.java
  3. 163
      hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml
  4. 6
      hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/HighDangerBase.java

@ -27,7 +27,10 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Duration;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@RestController
@ -129,6 +132,7 @@ public class HighDangerController {
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(defaultValue = "") String search,
@RequestParam(defaultValue = "") String reportDept,
HttpServletRequest request
) {
log.info("/getHigDangerDealt(查询首页各个状态的数据列表)接口被调用,调用ip: {}, 入参:{},{},{},{}", request.getRemoteAddr(), highDangerBaseVO, pageNum, pageSize, search);
@ -146,7 +150,7 @@ public class HighDangerController {
//Page<HighDangerBase> page = new Page<>(pageNum, pageSize);
PageHelper.startPage(pageNum, pageSize);
// 将要查询的状态和部门id查询数据库,获得隐患排查表
List<HighDangerBase> statusCounts = highDangerMapper.getHigDangerDealt(highDangerBaseVO.getStatus(), cdepartmentid, search);
List<HighDangerBase> statusCounts = highDangerMapper.getHigDangerDealt(highDangerBaseVO.getStatus(), cdepartmentid, search,reportDept);
// 待办
/*if("20".equals(highDangerBaseVO.getStatus())){
@ -154,131 +158,218 @@ public class HighDangerController {
statusCounts.addAll(statusCount);
}*/
for (HighDangerBase base : statusCounts) {
Date nowDate = new Date();
Date pcEndTime = base.getPcEndTime();
Date pcStartTime = base.getPcStartTime();
if (pcEndTime != null) {
long diff = nowDate.getTime() - pcEndTime.getTime();
// 时间差,天数
long diffDays = diff / (24 * 60 * 60 * 1000);
diffDays = Math.abs(diffDays);
// 小时
long remainingHours = (diff % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
remainingHours = Math.abs(remainingHours);
// 判断不足一小时
long diffHours = diff / (60 * 60 * 1000);
diffHours = Math.abs(diffHours);
int comparison = nowDate.compareTo(pcEndTime);
if (comparison > 0) { // 超期逻辑
if (diffHours < 1) {
base.setDeadlineStatus("超期不足一小时");
base.setDeadlineType("1");
continue;
}
if(diffDays == 0){
base.setDeadlineStatus("超期" + remainingHours + "小时");
base.setDeadlineType("1");
continue;
}else if(remainingHours == 0){
base.setDeadlineStatus("超期" + diffDays + "天");
base.setDeadlineType("1");
continue;
}
base.setDeadline(diffDays);
base.setDeadlineStatus("超期" + diffDays + "天" + remainingHours + "小时");
base.setDeadlineType("1");
} else if (comparison < 0 && diffDays <= 3) { // 临期逻辑
if (diffHours < 1) {
base.setDeadlineStatus("临期不足一小时");
base.setDeadlineType("2");
continue;
}
base.setDeadline(diffDays);
if(diffDays == 0){
base.setDeadlineStatus("临期" + remainingHours + "小时");
base.setDeadlineType("2");
continue;
}else if(remainingHours == 0){
base.setDeadlineStatus("临期" + diffDays + "天");
base.setDeadlineType("2");
continue;
}
base.setDeadlineStatus("临期" + diffDays + "天" + remainingHours + "小时");
base.setDeadlineType("2");
} else { // 正常
base.setDeadline(diffDays);
base.setDeadlineStatus("正常");
base.setDeadlineType("3");
for (HighDangerBase base : statusCounts) {
if(base.getTimeStatus() == null || base.getTimeStatus().equals("9")){
base.setDeadlineStatus("正常");
base.setDeadlineType("3");
}
// 超期
if(Objects.equals(base.getTimeStatus(), "1")){
double timeDiffSeconds = Double.parseDouble(base.getTimeDiffEnd());
// 计算天数
int days = (int) (timeDiffSeconds / (24 * 3600));
// 计算剩余的秒数
int remainingSeconds = (int) (timeDiffSeconds % (24 * 3600));
// 计算小时数
int hours = remainingSeconds / 3600;
if(days == 0){
base.setDeadlineStatus("超期" + hours + "小时");
}else if(hours == 0){
base.setDeadlineStatus("超期" + days + "天");
}else if(days == 0 && hours == 0){
base.setDeadlineStatus("超期不足一小时");
}else{
base.setDeadlineStatus("超期" + days + "天" + hours + "小时");
}
// 排查开始时间判断
} else if(pcStartTime != null){
// 无排查结束时间,根据开始时间判断
long diff = nowDate.getTime() - pcStartTime.getTime();
// 时间差,天数
long diffDays = diff / (24 * 60 * 60 * 1000);
diffDays = Math.abs(diffDays);
// 小时
long remainingHours = (diff % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
remainingHours = Math.abs(remainingHours);
// 判断不足一小时
long diffHours = diff / (60 * 60 * 1000);
diffHours = Math.abs(diffHours);
int comparison = nowDate.compareTo(pcStartTime);
if (comparison > 0) { // 超期
if (diffHours < 1) {
base.setDeadlineStatus("超期不足一小时");
base.setDeadlineType("1");
continue;
}
if(diffDays == 0){
base.setDeadlineStatus("超期" + remainingHours + "小时");
base.setDeadlineType("1");
continue;
}else if(remainingHours == 0){
base.setDeadlineStatus("超期" + diffDays + "天");
base.setDeadlineType("1");
continue;
}
base.setDeadline(diffDays);
base.setDeadlineStatus("超期" + diffDays + "天" + remainingHours + "小时");
base.setDeadlineType("1");
} else if (comparison < 0 && diffDays <= termTime) { // 临期
if (diffHours < 1) {
base.setDeadlineStatus("临期不足一小时");
base.setDeadlineType("2");
continue;
}
base.setDeadline(diffDays);
if (diffDays == 0) {
base.setDeadlineStatus("临期" + remainingHours + "小时");
base.setDeadlineType("2");
continue;
} else if (remainingHours == 0) {
base.setDeadlineStatus("临期" + diffDays + "天");
base.setDeadlineType("2");
continue;
}
base.setDeadlineStatus("临期" + diffDays + "天" + remainingHours + "小时");
base.setDeadlineType("2");
base.setDeadlineType("1");
// System.out.println("时间差为 " + days + " 天 " + hours + " 小时");
// String[] split = base.getTimeDiffEnd().split(" ");
// if(split.length > 1){
// base.setDeadlineStatus("正常");
// base.setDeadlineType("3");
// }
//
// // 使用正则表达式匹配天数和小时数
// Pattern pattern = Pattern.compile("(\\d+) days (\\d+):(\\d+):(\\d+\\.\\d+)");
// Matcher matcher = pattern.matcher(base.getTimeDiffEnd());
//
// if (matcher.find()) {
// int days = Integer.parseInt(matcher.group(1));
// int hours = Integer.parseInt(matcher.group(2));
// int minutes = Integer.parseInt(matcher.group(3));
// int seconds = Integer.parseInt(matcher.group(4));
// base.setDeadlineStatus("超期" + days + " 天 " + hours + " 小时");
// base.setDeadlineType("1");
// System.out.println("时间差为: " + days + " 天 " + hours + " 小时 " + minutes + " 分钟 " + seconds + " 秒");
// } else {
// System.out.println("无法匹配时间差格式");
// }
// Duration timeDiffEnd = Duration.parse(base.getTimeDiffEnd());
// // 获取总的秒数
// long totalSeconds = timeDiffEnd.getSeconds();
//
// // 计算天数
// long days = totalSeconds / (24 * 3600);
// // 计算剩余小时数
// long hours = (totalSeconds % (24 * 3600)) / 3600;
//
// base.setDeadlineStatus("超期" + days + " 天 " + hours + " 小时");
//
//// System.out.println("时间差为: " + days + " 天 " + hours + " 小时");
// base.setDeadlineType("1");
// continue;
}
if(Objects.equals(base.getTimeStatus(), "2")){
double timeDiffSeconds = Math.abs(Double.parseDouble(base.getTimeDiffStart()));
// 计算天数
int days = (int) (timeDiffSeconds / (24 * 3600));
// 计算剩余的秒数
int remainingSeconds = (int) (timeDiffSeconds % (24 * 3600));
// 计算小时数
int hours = remainingSeconds / 3600;
if(days == 0){
base.setDeadlineStatus("临期" + hours + "小时");
}else if(hours == 0){
base.setDeadlineStatus("临期" + days + "天");
}else if(days == 0 && hours == 0){
base.setDeadlineStatus("临期不足一小时");
}else{
base.setDeadlineStatus("正常");
base.setDeadlineType("3");
base.setDeadlineStatus("临期" + days + "天" + hours + "小时");
}
// base.setDeadlineStatus("无排查结束时间");
// base.setDeadlineType("3");
}else{
base.setDeadlineStatus("无排查结束和开始时间");
base.setDeadlineType("3");
base.setDeadlineType("2");
}
//
// Date pcEndTime = base.getPcEndTime();
// Date pcStartTime = base.getPcStartTime();
//
// if (pcEndTime != null) {
// long diff = nowDate.getTime() - pcEndTime.getTime();
// // 时间差,天数
// long diffDays = diff / (24 * 60 * 60 * 1000);
// diffDays = Math.abs(diffDays);
//
// // 小时
// long remainingHours = (diff % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
// remainingHours = Math.abs(remainingHours);
//
// // 判断不足一小时
// long diffHours = diff / (60 * 60 * 1000);
// diffHours = Math.abs(diffHours);
//
// int comparison = nowDate.compareTo(pcEndTime);
// if (comparison > 0) { // 超期逻辑
// if (diffHours < 1) {
// base.setDeadlineStatus("超期不足一小时");
// base.setDeadlineType("1");
// continue;
// }
// if(diffDays == 0){
// base.setDeadlineStatus("超期" + remainingHours + "小时");
// base.setDeadlineType("1");
// continue;
// }else if(remainingHours == 0){
// base.setDeadlineStatus("超期" + diffDays + "天");
// base.setDeadlineType("1");
// continue;
// }
// base.setDeadline(diffDays);
// base.setDeadlineStatus("超期" + diffDays + "天" + remainingHours + "小时");
// base.setDeadlineType("1");
// } else if (comparison < 0 && diffDays <= 3) { // 临期逻辑
// if (diffHours < 1) {
// base.setDeadlineStatus("临期不足一小时");
// base.setDeadlineType("2");
// continue;
// }
// base.setDeadline(diffDays);
// if(diffDays == 0){
// base.setDeadlineStatus("临期" + remainingHours + "小时");
// base.setDeadlineType("2");
// continue;
// }else if(remainingHours == 0){
// base.setDeadlineStatus("临期" + diffDays + "天");
// base.setDeadlineType("2");
// continue;
// }
// base.setDeadlineStatus("临期" + diffDays + "天" + remainingHours + "小时");
// base.setDeadlineType("2");
// } else { // 正常
// base.setDeadline(diffDays);
// base.setDeadlineStatus("正常");
// base.setDeadlineType("3");
// }
// // 排查开始时间判断
// } else if(pcStartTime != null){
// // 无排查结束时间,根据开始时间判断
// long diff = nowDate.getTime() - pcStartTime.getTime();
//
// // 时间差,天数
// long diffDays = diff / (24 * 60 * 60 * 1000);
// diffDays = Math.abs(diffDays);
//
// // 小时
// long remainingHours = (diff % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000);
// remainingHours = Math.abs(remainingHours);
//
// // 判断不足一小时
// long diffHours = diff / (60 * 60 * 1000);
// diffHours = Math.abs(diffHours);
//
// int comparison = nowDate.compareTo(pcStartTime);
// if (comparison > 0) { // 超期
// if (diffHours < 1) {
// base.setDeadlineStatus("超期不足一小时");
// base.setDeadlineType("1");
// continue;
// }
// if(diffDays == 0){
// base.setDeadlineStatus("超期" + remainingHours + "小时");
// base.setDeadlineType("1");
// continue;
// }else if(remainingHours == 0){
// base.setDeadlineStatus("超期" + diffDays + "天");
// base.setDeadlineType("1");
// continue;
// }
// base.setDeadline(diffDays);
// base.setDeadlineStatus("超期" + diffDays + "天" + remainingHours + "小时");
// base.setDeadlineType("1");
// } else if (comparison < 0 && diffDays <= termTime) { // 临期
// if (diffHours < 1) {
// base.setDeadlineStatus("临期不足一小时");
// base.setDeadlineType("2");
// continue;
// }
// base.setDeadline(diffDays);
// if (diffDays == 0) {
// base.setDeadlineStatus("临期" + remainingHours + "小时");
// base.setDeadlineType("2");
// continue;
// } else if (remainingHours == 0) {
// base.setDeadlineStatus("临期" + diffDays + "天");
// base.setDeadlineType("2");
// continue;
// }
// base.setDeadlineStatus("临期" + diffDays + "天" + remainingHours + "小时");
// base.setDeadlineType("2");
// }else{
// base.setDeadlineStatus("正常");
// base.setDeadlineType("3");
// }
//// base.setDeadlineStatus("无排查结束时间");
//// base.setDeadlineType("3");
// }else{
// base.setDeadlineStatus("无排查结束和开始时间");
// base.setDeadlineType("3");
// }
}
PageInfo<HighDangerBase> pageInfo = new PageInfo<>(statusCounts);

@ -21,7 +21,7 @@ public interface HighDangerMapper{
List<HighDangerBaseNum> getStatusCounts(String cdepartmentid);
//
List<HighDangerBase> getHigDangerDealt(String status, String cdepartmentid, String search);
List<HighDangerBase> getHigDangerDealt(String status, String cdepartmentid, String search,String reportDept);
List<HighDangerBase> getHigDangerDying(String status, String cdepartmentid);

@ -22,25 +22,22 @@
delay_count,
delay_day,
pc_count)
values
(
#{nid},
#{businessId},
#{name},
#{type},
#{operator},
#{source},
#{findWay},
#{area},
#{status},
#{findTime},
#{pcStartTime},
#{reportDept},
#{handleDept},
#{delayCount},
#{delayDay},
#{pcCount}
)
values (#{nid},
#{businessId},
#{name},
#{type},
#{operator},
#{source},
#{findWay},
#{area},
#{status},
#{findTime},
#{pcStartTime},
#{reportDept},
#{handleDept},
#{delayCount},
#{delayDay},
#{pcCount})
</insert>
<insert id="insertDangerRoad">
@ -49,13 +46,10 @@
business_id,
section_code,
pc_count)
values
(
#{nid},
values (#{nid},
#{businessId},
#{sectionCode},
#{pcCount}
)
#{pcCount})
</insert>
<select id="getStatusCounts" resultType="com.hisense.hiatmp.model.common.HighDangerBaseNum">
@ -166,32 +160,82 @@
WHERE hdb.handle_dept = #{cdepartmentid} and hdb.status = '10'
</select>
<!-- <select id="getHigDangerDealt" resultType="com.hisense.hiatmp.model.common.HighDangerBase">-->
<!-- SELECT hdb.*,hdr.pc_type,hdr.pc_end_time as-->
<!-- road_pc_end_time,hdr.belong_xq,hdr.xzjd,bs.section_name,bs.section_code-->
<!-- FROM tht_hidden_danger_base hdb-->
<!-- LEFT JOIN tht_hidden_danger_road hdr ON hdb.business_id = hdr.business_id-->
<!-- AND hdb.pc_count = hdr.pc_count-->
<!-- LEFT JOIN department dp ON hdb.handle_dept = dp.cdepartmentid-->
<!-- LEFT JOIN enum_type et ON et.ENUMTYPEID = '6601'-->
<!-- AND et.enumvalue = hdb.status-->
<!-- LEFT JOIN bis_section bs ON hdr.section_code = bs.section_code-->
<!-- WHERE hdb.handle_dept = #{cdepartmentid}-->
<!-- &lt;!&ndash;<if test="status != null and status == 0">-->
<!-- AND hdb.status in ('0','99')-->
<!-- </if>&ndash;&gt;-->
<!-- <if test="status != null">-->
<!-- AND hdb.status = #{status}-->
<!-- </if>-->
<!-- <if test="search != null and search != ''">-->
<!-- AND hdb.name like concat(concat('%',#{search}),'%')-->
<!-- </if>-->
<!-- &#45;&#45; ORDER BY hdb.PC_END_TIME::timestamp DESC-->
<!-- ORDER BY-->
<!-- CASE-->
<!-- WHEN hdb.PC_END_TIME IS NULL THEN 1-->
<!-- ELSE 0-->
<!-- END, hdb.PC_END_TIME DESC-->
<!-- </select>-->
<select id="getHigDangerDealt" resultType="com.hisense.hiatmp.model.common.HighDangerBase">
SELECT hdb.*,hdr.pc_type,hdr.pc_end_time as
road_pc_end_time,hdr.belong_xq,hdr.xzjd,bs.section_name,bs.section_code
FROM tht_hidden_danger_base hdb
LEFT JOIN tht_hidden_danger_road hdr ON hdb.business_id = hdr.business_id
AND hdb.pc_count = hdr.pc_count
LEFT JOIN department dp ON hdb.handle_dept = dp.cdepartmentid
LEFT JOIN enum_type et ON et.ENUMTYPEID = '6601'
AND et.enumvalue = hdb.status
LEFT JOIN bis_section bs ON hdr.section_code = bs.section_code
WHERE hdb.handle_dept = #{cdepartmentid}
<!--<if test="status != null and status == 0">
AND hdb.status in ('0','99')
</if>-->
<if test="status != null">
AND hdb.status = #{status}
</if>
<if test="search != null and search != ''">
AND hdb.name like concat(concat('%',#{search}),'%')
</if>
-- ORDER BY hdb.PC_END_TIME::timestamp DESC
ORDER BY
CASE
WHEN hdb.PC_END_TIME IS NULL THEN 1
ELSE 0
END, hdb.PC_END_TIME DESC
<![CDATA[
SELECT CASE
WHEN now() < t1.nearEndTime THEN 9 --
WHEN now() >= t1.nearEndTime AND now() <= t1.planEndTime THEN 2 --临期
WHEN now() >= t1.planEndTime THEN 1 --超期
END AS time_status
, t1.*
, EXTRACT(EPOCH FROM NOW() - t1.planEndTime) AS timeDiffEnd
, EXTRACT(EPOCH FROM NOW() - t1.nearEndTime) AS timeDiffStart
-- , now() - t1.planEndTime as timeDiffEnd
-- , now() - t1.nearEndTime as timeDiffStart
]]>
FROM (SELECT hdb.name
, hdb.pc_start_time
, hdb.pc_end_time
, hdb.business_id
, hdb."type"
, hdb."report_dept"
, hdb."operator"
, hdb.pc_count
, hdb."status"
, hdr.belong_xq
, hdr.xzjd
, COALESCE(hdb.pc_end_time, hdb.pc_start_time + INTERVAL '1 day' * tpc.param_value
::INTEGER) AS planEndTime
, COALESCE(hdb.pc_end_time, hdb.pc_start_time + INTERVAL '1 day' * tpc.param_value
::INTEGER) -
INTERVAL '3 day' AS nearEndTime
, bs.section_name
, bs.section_code
FROM tht_hidden_danger_base hdb
LEFT JOIN tht_hidden_danger_road hdr
ON hdb.business_id = hdr.business_id
AND hdb.pc_count = hdr.pc_count
LEFT JOIN department dp ON hdb.handle_dept = dp.cdepartmentid
LEFT JOIN enum_type et ON et.ENUMTYPEID = '6601'
AND et.enumvalue = hdb.status
LEFT JOIN bis_section bs ON hdr.section_code = bs.section_code
LEFT JOIN tht_param_config tpc ON tpc.param_code = 'THT_PC_ROAD_XT'
WHERE hdb.handle_dept = #{cdepartmentid}
AND hdb.status = #{status}
<if test="reportDept != ''">
AND hdb.handle_dept != hdb.report_dept
</if>
) t1
ORDER BY time_status, planEndTime DESC
</select>
<select id="getHigDangerDying" resultType="com.hisense.hiatmp.model.common.HighDangerBase">
@ -344,19 +388,16 @@
</select>
<select id="getSectionInfo" resultType="com.hisense.hiatmp.model.common.ThtSectionInfoDTO">
SELECT
tsi.*
FROM
tht_section_info tsi
LEFT JOIN tht_hidden_danger_road thdr ON tsi."BUSINESS_ID" = thdr.business_id
WHERE
tsi."BUSINESS_ID" = #{businessId}
SELECT tsi.*
FROM tht_section_info tsi
LEFT JOIN tht_hidden_danger_road thdr ON tsi."BUSINESS_ID" = thdr.business_id
WHERE tsi."BUSINESS_ID" = #{businessId}
</select>
<select id="getCommunityByRoad" resultType="com.hisense.hiatmp.server_api.model.StreetCommunity">
Select tsc.*
from tlv_street_community tsc
left join tht_hidden_danger_road thdr on thdr.belong_xq = tsc.xqcode and thdr.xzjd = tsc.jdcode
left join tht_hidden_danger_road thdr on thdr.belong_xq = tsc.xqcode and thdr.xzjd = tsc.jdcode
where business_id = #{businessId}
</select>
@ -544,10 +585,14 @@
</update>
<select id="getRoadTypes" resultType="com.hisense.hiatmp.model.common.EnumRoadType">
select * from bis_enum_type where enumtype_id = '303'
select *
from bis_enum_type
where enumtype_id = '303'
</select>
<select id="getSectionByCode" resultType="com.hisense.hiatmp.model.common.SectionVO">
select * from bis_section where section_code = #{sectionCode}
select *
from bis_section
where section_code = #{sectionCode}
</select>
</mapper>

@ -200,4 +200,10 @@ public class HighDangerBase implements Serializable {
// 道路名称
private String sectionName;
private String timeStatus;
private String timeDiffEnd;
private String timeDiffStart;
}

Loading…
Cancel
Save