结束服务指令、将每天未点击结束的服务工单的结束时间设置为23:59:59定时任务:计算并存储工单执行状态(正常执行、超时等)

This commit is contained in:
1378012178@qq.com 2026-04-23 14:29:26 +08:00
parent 57115f0d91
commit c5ef80c63f
7 changed files with 103 additions and 69 deletions

View File

@ -149,6 +149,10 @@ public class DirectiveOrderEndTplinkJob implements Job {
System.out.println("===============================================");
}
directiveOrderService.updateById(directiveOrder);
if (directiveOrderList.indexOf(directiveOrder) < directiveOrderList.size() - 1) {
Thread.sleep(10000);
}
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -69,4 +69,6 @@ public interface DirectiveOrderMapper extends BaseMapper<DirectiveOrder> {
List<DirectiveOrder> findErrorFiles();
int cleanErrorFilePath(@Param("ids") List<String> ids);
int updateEmpEndTimeByJob();
}

View File

@ -273,6 +273,14 @@
#{id}
</foreach>
</update>
<update id="updateEmpEndTimeByJob">
UPDATE nu_biz_directive_order
SET emp_end_time = DATE_FORMAT(emp_start_time, '%Y-%m-%d 23:59:59'),
order_status = '3'
WHERE emp_start_time IS NOT NULL
AND emp_end_time IS NULL
AND DATE(emp_start_time) = CURDATE()
</update>
<select id="getDirectivePrice" resultType="com.nu.modules.biz.order.entity.DirectiveOrder">
select toll_price as tollPrice,

View File

@ -17,4 +17,6 @@ public interface IDirectiveOrderService extends IService<DirectiveOrder> {
Result<?> generateOrdersBatch();
Map<String, Object> generateOrdersInstant(DirectiveOrder directiveOrder);
String getEmployeeName(String employeeId);
void updateEmpEndTimeByJob();
}

View File

@ -1,6 +1,7 @@
package com.nu.modules.biz.order.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.unit.DataUnit;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -300,6 +301,11 @@ public class DirectiveOrderPadServiceImpl extends ServiceImpl<DirectiveOrderMapp
}
directiveOrder.setEmpEndTime(new Date());
{
//判断正常结束还是超时无论定时计时 只要实际结束时间 大于 应该结束时间 就是超时 否则正常
boolean izCs = new Date().after(directiveOrder.getServEndTime());
directiveOrder.setOrderStatus(izCs ? "3" : "2");
}
baseMapper.updateById(directiveOrder);
// List<DirectiveOrderInfo> list = directiveOrderInfoMapper.selectList(new QueryWrapper<DirectiveOrderInfo>().eq("main_id", directiveOrder.getId()));

View File

@ -887,6 +887,7 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
/**
* 获取员工姓名
*
* @param employeeId
*/
@Override
@ -901,4 +902,9 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
return employeeName;
}
@Override
public void updateEmpEndTimeByJob() {
baseMapper.updateEmpEndTimeByJob();
}
}

View File

@ -25,20 +25,26 @@ public class DirectiveEndOrderJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
DirectiveOrder upData = new DirectiveOrder();
//设置为当天23:59:59
Calendar calendar = Calendar.getInstance();
upData.setEmpEndTime(new Date(calendar.get(Calendar.YEAR) - 1900,
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH),
23, 59, 59));
// DirectiveOrder upData = new DirectiveOrder();
// //设置为当天23:59:59
// Calendar calendar = Calendar.getInstance();
// upData.setEmpEndTime(new Date(calendar.get(Calendar.YEAR) - 1900,
// calendar.get(Calendar.MONTH),
// calendar.get(Calendar.DAY_OF_MONTH),
// 23, 59, 59));
//
// //当天任务且已开始的
// UpdateWrapper<DirectiveOrder> uw = new UpdateWrapper<>();
// uw.apply("DATE(serv_start_time) = CURDATE()");
// uw.isNotNull("emp_start_time");
// uw.isNull("emp_end_time");
// directiveOrderService.update(upData,uw);
//当天任务且已开始的
UpdateWrapper<DirectiveOrder> uw = new UpdateWrapper<>();
uw.apply("DATE(serv_start_time) = CURDATE()");
uw.isNotNull("emp_start_time");
uw.isNull("emp_end_time");
directiveOrderService.update(upData,uw);
//条件是工单已开始未结束 员工开始时间是今天 存在问题
// 1任务设置在每天23:59:50 如果当天由于系统原因比如重启后才补发定时任务 则缺少了一天的定时任务
// 2如果员工在23:59:50~23:59:59 点击开始 则结束时间无法被定时任务执行到
// 3解决办法条件只要已开始未结束那以后就不能有让历史工单的结束时间需要保持空的需求了 - 定时会自动赋值 一旦出错这种数据因为没有日志就只能用数据库备份比对解决
directiveOrderService.updateEmpEndTimeByJob();
}