修改超时机制

This commit is contained in:
lujiang 2024-08-16 18:08:40 +08:00
parent ee852fa346
commit 465f392f12
6 changed files with 82 additions and 24 deletions

View File

@ -166,12 +166,11 @@ public class Repair extends BaseEntity<Repair> {
//--超时
/**
* 设置超时时间
* 超时告警 0 无状态 默认 1 绿色 未达告警状态值 3橙色告警 5红色告警;根据 预计完成时间 判断
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date timeout;
private Integer timeout = 0;
/** 预警状态, 默认0 没有预警;设置时间后 1 绿色 3橙色 5红色 */
/** 预警状态, 0 没有预警; 默认 1 绿色 3橙色 5红色;根据 预计完成时间 判断*/
private Integer warn = 0;
//工单状态流程相关

View File

@ -77,19 +77,33 @@ public interface RepairMapper {
*/
int deleteRepairByIds(String[] ids);
/**
* 红色告警
*
* @param day 超时大于day天红色预警
*/
int repairTimeoutRed(Integer day);
/**
* 橙色预警
*
* @param day 超时大于day天橙色预警
*/
int repairTimeoutOrange(Integer day);
/**
* 红色预警
*
* @param day 小于day天红色预警
*/
int repairTimeOutRed(Integer day);
int repairForewarnRed(Integer day);
/**
* 橙色预警
*
* @param day 小于day天橙色预警
*/
int repairTimeOutOrange(Integer day);
int repairForewarnOrange(Integer day);
/**
* 工单结束后解除预警

View File

@ -77,10 +77,16 @@ public interface IRepairService {
*/
int deleteRepairById(Long id);
/**
* 工单超时告警
*/
int repairTimeOut();
/**
* 工单超时预警
*/
int repairTimeOutWarn();
int repairForewarnWarn();
/**
* 工单结束后解除预警

View File

@ -90,7 +90,7 @@ public class RepairServiceImpl implements IRepairService {
Integer from = -1, to = -1;
Repair newRepair = repair.getId() == null || repair.getId() == 0L ? repair : repairMapper.selectRepairById(repair.getId());//使用数据库中的表单
from = repair.getId() == null || repair.getId() == 0L ? 0 : newRepair.getStatus();
//
//
if (from == 0) {
//没有设置维修人员则到派单环节否则到修理工是否接收环节
to = repair.getRepairUserId() == null ? 1 : 5;
@ -101,7 +101,8 @@ public class RepairServiceImpl implements IRepairService {
if (nextUser == null) return "没有找到派单员账号";
repair.setSn(snService.generate(Sn.Type.REPAIR));//编单号
repair.setPerUserId(nextUser.getId());//设置派单员
repair.setWarn(0);
repair.setTimeout(1);//告警默认绿色
repair.setWarn(1);//预警默认绿色
repair.setDeleteFlag(0);
repair.setCreateBy(currentUserId.toString());
repair.setCreateTime(new Date());
@ -328,18 +329,32 @@ public class RepairServiceImpl implements IRepairService {
}
@Override
public int repairTimeOutWarn() {
public int repairTimeOut() {
List<DictData> list = dictDataService.selectDictDataByType("repair_timeout");
if (list.size() == 2) {
Integer orange = Integer.valueOf(list.get(0).getDictValue());
Integer red = Integer.valueOf(list.get(1).getDictValue());
int r = repairMapper.repairTimeOutRed(red);
int o = repairMapper.repairTimeOutOrange(orange);
if (list.size() == 4) {
Integer orange = Integer.valueOf(list.get(2).getDictValue());
Integer red = Integer.valueOf(list.get(3).getDictValue());
int r = repairMapper.repairTimeoutRed(red);
int o = repairMapper.repairTimeoutOrange(orange);
return r + o;
}
return 0;
}
@Override
public int repairForewarnWarn() {
List<DictData> list = dictDataService.selectDictDataByType("repair_timeout");
if (list.size() == 4) {
Integer orange = Integer.valueOf(list.get(0).getDictValue());
Integer red = Integer.valueOf(list.get(1).getDictValue());
int r = repairMapper.repairForewarnRed(red);
int o = repairMapper.repairForewarnOrange(orange);
return r + o;
}
return 0;
}
@Override
public int removeWarn() {
return repairMapper.removeWarn();

View File

@ -267,25 +267,39 @@
#{id}
</foreach>
</delete>
<update id="repairTimeOutRed" parameterType="Integer">
update ics_repair set warn=5 where delete_flag=0 and status <![CDATA[ < ]]> 9 and timeout is not null and warn <![CDATA[ <> ]]> 5 and TIMESTAMPDIFF(DAY,NOW(),timeout) <![CDATA[ <= ]]> #{day}
<!-- 预警 -->
<update id="repairForewarnRed" parameterType="Integer">
update ics_repair set warn=5 where delete_flag=0 and status <![CDATA[ < ]]> 9 and preDate is not null and warn <![CDATA[ <> ]]> 5 and TIMESTAMPDIFF(DAY,NOW(),preDate) <![CDATA[ <= ]]> #{day}
</update>
<update id="repairTimeOutOrange" parameterType="Integer">
update ics_repair set warn=3 where delete_flag=0 and status <![CDATA[ < ]]> 9 and timeout is not null and warn <![CDATA[ <= ]]> 1 and TIMESTAMPDIFF(DAY,NOW(),timeout) <![CDATA[ <= ]]> #{day}
<update id="repairForewarnOrange" parameterType="Integer">
update ics_repair set warn=3 where delete_flag=0 and status <![CDATA[ < ]]> 9 and preDate is not null and warn <![CDATA[ <= ]]> 1 and TIMESTAMPDIFF(DAY,NOW(),preDate) <![CDATA[ <= ]]> #{day}
</update>
<update id="removeWarn">
update ics_repair set warn=0 where delete_flag=0 and status <![CDATA[ >= ]]> 9 and warn <![CDATA[ > ]]> 0
</update>
<!-- 自动好评 -->
<update id="repairGoodEval">
update ics_repair set eval_service=5,eval_time=NOW(),eval_user_id=-1,status=13
where delete_flag=0 and status=9 and end_date is not null and TIMESTAMPDIFF(DAY,end_date,NOW()) <![CDATA[ >= ]]> 7
</update>
<!-- 防止刷单 -->
<select id="submitCheck" parameterType="String" resultType="Integer">
select count(id) from ics_repair where delete_flag=0 and create_by= #{userId} and TIMESTAMPDIFF(MINUTE,create_time,NOW()) <![CDATA[ <= ]]> 3
</select>
<!-- 超时告警,按顺序执行 -->
<update id="repairTimeoutRed" parameterType="Integer">
update ics_repair set timeout=5 where delete_flag=0 and status <![CDATA[ < ]]> 9 and preDate is not null and timeout <![CDATA[ <> ]]> 5 and TIMESTAMPDIFF(DAY,preDate,now()) <![CDATA[ >= ]]> #{day}
</update>
<update id="repairTimeoutOrange" parameterType="Integer">
update ics_repair set timeout=3 where delete_flag=0 and status <![CDATA[ < ]]> 9 and preDate is not null and timeout <![CDATA[ <= ]]> 1 and TIMESTAMPDIFF(DAY,preDate,now()) <![CDATA[ >= ]]> #{day}
</update>
</mapper>

View File

@ -17,16 +17,26 @@ import org.springframework.stereotype.Service;
public class RepairTask {
/**
* 工单超时预警
* 工单超时预警还未超时
*/
public void repairTimeOut() {
public void repairForewarn() {
IRepairService repairService = SpringUtils.getBean(IRepairService.class);
int num = repairService.repairTimeOutWarn();
int num = repairService.repairForewarnWarn();
log.info("已对" + num + "个工单超时预警");
num = repairService.removeWarn();
log.info("已对" + num + "个工单解除预警");
}
/**
* 工单超时告警已经超时
*/
public void repairTimeOut() {
IRepairService repairService = SpringUtils.getBean(IRepairService.class);
int num = repairService.repairTimeOut();
log.info("已对" + num + "个工单超时告警");
}
/**
* 工单完成7天后未评价 自动好评
*/