修改超时机制

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 Integer timeout = 0;
private Date timeout;
/** 预警状态, 默认0 没有预警;设置时间后 1 绿色 3橙色 5红色 */ /** 预警状态, 0 没有预警; 默认 1 绿色 3橙色 5红色;根据 预计完成时间 判断*/
private Integer warn = 0; private Integer warn = 0;
//工单状态流程相关 //工单状态流程相关

View File

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

View File

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

View File

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