结束服务指令、将每天未点击结束的服务工单的结束时间设置为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;
@ -254,7 +255,7 @@ public class DirectiveOrderPadServiceImpl extends ServiceImpl<DirectiveOrderMapp
return map;
} else {
QueryWrapper<DirectiveOrder> qw = new QueryWrapper<>();
qw.eq("nu_id",directiveOrder.getNuId());
qw.eq("nu_id", directiveOrder.getNuId());
qw.eq("serv_start_time", directiveOrder.getServStartTime());
List<DirectiveOrder> list = baseMapper.selectList(qw);
@ -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()));
@ -422,7 +428,7 @@ public class DirectiveOrderPadServiceImpl extends ServiceImpl<DirectiveOrderMapp
return Result.error("当前服务已超时,不可转单");
} else {
QueryWrapper<DirectiveOrder> qw = new QueryWrapper<>();
qw.eq("nu_id",beforeData.getNuId());
qw.eq("nu_id", beforeData.getNuId());
qw.eq("serv_start_time", beforeData.getServStartTime());
List<DirectiveOrder> list = baseMapper.selectList(qw);
@ -478,7 +484,7 @@ public class DirectiveOrderPadServiceImpl extends ServiceImpl<DirectiveOrderMapp
return Result.error("当前服务已超时,不可协助执行");
} else {
QueryWrapper<DirectiveOrder> qw = new QueryWrapper<>();
qw.eq("nu_id",beforeData.getNuId());
qw.eq("nu_id", beforeData.getNuId());
qw.eq("serv_start_time", beforeData.getServStartTime());
List<DirectiveOrder> list = baseMapper.selectList(qw);

View File

@ -112,10 +112,10 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
List<DirectiveOrder> ordersList = baseMapper.queryDataPoolList(null);
for (int i = 0; i < ordersList.size(); i++) {
DirectiveOrder orders = ordersList.get(i);
if(orders.getIzPackage().equals("N")){
if (orders.getIzPackage().equals("N")) {
//获取有效服务指令
DirectiveOrder directiveEntity = baseMapper.getDirectiveById(orders);
if(directiveEntity==null){
if (directiveEntity == null) {
continue;
}
orders.setDirectiveName(directiveEntity.getDirectiveName());
@ -126,10 +126,10 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
orders.setServiceContent(directiveEntity.getServiceContent());
orders.setServiceDuration(directiveEntity.getServiceDuration());
orders.setTimeoutDuration(directiveEntity.getTimeoutDuration());
}else{
} else {
//获取有效服务指令包
DirectiveOrder packageEntity = baseMapper.getPackageById(orders);
if(packageEntity==null){
if (packageEntity == null) {
continue;
}
orders.setDirectiveName(packageEntity.getDirectiveName());
@ -141,17 +141,17 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
//生成结束时间
String duration = orders.getServiceDuration();
Calendar c = Calendar.getInstance();
if(duration.equals("")||duration.equals("0")){
c.set(Calendar.YEAR,3000);
c.set(Calendar.MONTH,Calendar.DECEMBER);
c.set(Calendar.DAY_OF_MONTH,31);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);
}else{
if (duration.equals("") || duration.equals("0")) {
c.set(Calendar.YEAR, 3000);
c.set(Calendar.MONTH, Calendar.DECEMBER);
c.set(Calendar.DAY_OF_MONTH, 31);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
} else {
c.setTime(orders.getStartTime());
c.add(Calendar.MINUTE,Integer.valueOf(duration));
c.add(Calendar.MINUTE, Integer.valueOf(duration));
}
Date endTime = c.getTime();
orders.setEndTime(endTime);
@ -194,11 +194,11 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
// System.out.println("护理单元:" + orders.getNuId() + ",服务时间" + orders.getStartTime());
if (orders.getIzPackage().equals("N")) {
List<DirectiveOrderInfo> ordersInfoList = ordersInfoService.getDirectiveList(orders.getDirectiveId());
if(ordersInfoList!=null&&ordersInfoList.size()>0){
if (ordersInfoList != null && ordersInfoList.size() > 0) {
String directiveIds = ordersInfoList.stream().map(DirectiveOrderInfo::getDirectiveId).collect(Collectors.joining(","));
//获取满足条件的员工
DirectiveOrder employee = employeeScreening(directiveIds, orders.getElderId(), null, orders.getStartTime());
if(employee!=null){
if (employee != null) {
orders.setEmployeeId(employee.getEmployeeId());
orders.setEmployeeName(employee.getEmployeeName());
orders.setOptIds(employee.getEmployeeId());
@ -233,20 +233,20 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
// System.out.println("");
// System.out.println("");
// System.out.println("");
}
}
}
} else {
List<DirectiveOrderInfo> ordersInfoList = ordersInfoService.getSubDirectiveList(orders.getDirectiveId());
if(ordersInfoList!=null&&ordersInfoList.size()>0){
if (ordersInfoList != null && ordersInfoList.size() > 0) {
String directiveIds = ordersInfoList.stream().map(DirectiveOrderInfo::getDirectiveId).collect(Collectors.joining(","));
List<DirectiveOrder> emps = baseMapper.getPermissionEmps(directiveIds);//获取服务标签中的员工和数量
emps.removeIf(data -> data.getOwnCn() < ordersInfoList.size());//删除没有权限的数据
String employeeIds = emps.stream().map(DirectiveOrder::getEmployeeId).collect(Collectors.joining(","));
DirectiveOrder employee = employeeScreening(directiveIds,orders.getElderId(),employeeIds,orders.getStartTime());
if(employee!=null){
DirectiveOrder employee = employeeScreening(directiveIds, orders.getElderId(), employeeIds, orders.getStartTime());
if (employee != null) {
orders.setEmployeeId(employee.getEmployeeId());
orders.setEmployeeName(employee.getEmployeeName());
orders.setOptIds(employee.getEmployeeId());
@ -267,7 +267,7 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
ordersSub.setCycleType(orders.getCycleType());
ordersSub.setCycleValue(orders.getCycleValue());
ordersSub.setIzPackage(orders.getIzPackage());
if(!orders.getIzPackage().equals("N")){
if (!orders.getIzPackage().equals("N")) {
ordersSub.setPackageId(orders.getDirectiveId());
ordersSub.setPackageName(orders.getDirectiveName());
}
@ -643,22 +643,22 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
*
* @return
*/
private String getOrderNo(String orderType){
private String getOrderNo(String orderType) {
JSONObject deptInfo = sysBaseAPI.getDeptInfo();
String deptCode = deptInfo.getString("code");
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
// 构建今天的前缀模式
String todayPrefix = "";
if(orderType.equals("1")){
if (orderType.equals("1")) {
todayPrefix = "HL";
}
if(orderType.equals("2")){
if (orderType.equals("2")) {
todayPrefix = "YL";
}
if(orderType.equals("3")){
if (orderType.equals("3")) {
todayPrefix = "CK";
}
if(orderType.equals("4")){
if (orderType.equals("4")) {
todayPrefix = "HQ";
}
todayPrefix = todayPrefix + deptCode + today;
@ -742,10 +742,10 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
String employeeName = "";
Calendar c = Calendar.getInstance();
Date startTime = c.getTime();
if(orders.getIzPackage().equals("N")){
if (orders.getIzPackage().equals("N")) {
//获取服务指令
DirectiveOrder directiveEntity = baseMapper.getDirectiveById(orders);
if(directiveEntity==null){
if (directiveEntity == null) {
map.put("success", false);
map.put("message", "服务指令无效");
return map;
@ -758,10 +758,10 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
orders.setServiceContent(directiveEntity.getServiceContent());
orders.setServiceDuration(directiveEntity.getServiceDuration());
orders.setTimeoutDuration(directiveEntity.getTimeoutDuration());
}else{
} else {
//获取服务指令包
DirectiveOrder packageEntity = baseMapper.getPackageById(orders);
if(packageEntity==null){
if (packageEntity == null) {
map.put("success", false);
map.put("message", "服务指令包无效");
return map;
@ -774,41 +774,41 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
//生成结束时间
String duration = orders.getServiceDuration();
if(duration.equals("")||duration.equals("0")){
c.set(Calendar.YEAR,3000);
c.set(Calendar.MONTH,Calendar.DECEMBER);
c.set(Calendar.DAY_OF_MONTH,31);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);
}else{
c.add(Calendar.MINUTE,Integer.valueOf(duration));
if (duration.equals("") || duration.equals("0")) {
c.set(Calendar.YEAR, 3000);
c.set(Calendar.MONTH, Calendar.DECEMBER);
c.set(Calendar.DAY_OF_MONTH, 31);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
} else {
c.add(Calendar.MINUTE, Integer.valueOf(duration));
}
Date endTime = c.getTime();
orders.setStartTime(startTime);
orders.setEndTime(endTime);
if(orders.getIzPackage().equals("N")){
if (orders.getIzPackage().equals("N")) {
infoList = ordersInfoService.getDirectiveList(orders.getDirectiveId());
String directiveIds = infoList.stream().map(DirectiveOrderInfo::getDirectiveId).collect(Collectors.joining(","));
if(!directiveOrder.getTriggerMode().equals("1")){
if (!directiveOrder.getTriggerMode().equals("1")) {
getSendOrderRule();
DirectiveOrder employee = employeeScreening(directiveIds,orders.getElderId(),null,orders.getStartTime());
DirectiveOrder employee = employeeScreening(directiveIds, orders.getElderId(), null, orders.getStartTime());
employeeId = employee.getEmployeeId();
employeeName = employee.getEmployeeName();
}
}else{
} else {
infoList = ordersInfoService.getSubDirectiveList(orders.getDirectiveId());
String directiveIds = infoList.stream().map(DirectiveOrderInfo::getDirectiveId).collect(Collectors.joining(","));
if(!directiveOrder.getTriggerMode().equals("1")){
if (!directiveOrder.getTriggerMode().equals("1")) {
getSendOrderRule();
List<DirectiveOrder> emps = baseMapper.getPermissionEmps(directiveIds);//获取服务标签中的员工和数量
if(infoList!=null){
if (infoList != null) {
int size = infoList.size();
emps.removeIf(data -> data.getOwnCn() < size);//删除没有权限的数据
}
String employeeIds = emps.stream().map(DirectiveOrder::getEmployeeId).collect(Collectors.joining(","));
DirectiveOrder employee = employeeScreening(directiveIds,orders.getElderId(),employeeIds,orders.getStartTime());
DirectiveOrder employee = employeeScreening(directiveIds, orders.getElderId(), employeeIds, orders.getStartTime());
employeeId = employee.getEmployeeId();
employeeName = employee.getEmployeeName();
}
@ -834,8 +834,8 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
orders.setOptNames(employeeName);
orders.setDelFlag("0");
this.save(orders);//生成工单主表
if(infoList!=null){
for(int i=0;i<infoList.size();i++){
if (infoList != null) {
for (int i = 0; i < infoList.size(); i++) {
DirectiveOrderInfo ordersInfo = infoList.get(i);
ordersInfo.setOrderNo(getOrderInfoNo(orderNo));
ordersInfo.setOrderType(orderType);
@ -849,7 +849,7 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
ordersInfo.setCycleTypeId(orders.getCycleTypeId());
ordersInfo.setCycleType(orders.getCycleType());
ordersInfo.setIzPackage(orders.getIzPackage());
if(!orders.getIzPackage().equals("N")){
if (!orders.getIzPackage().equals("N")) {
ordersInfo.setPackageId(orders.getDirectiveId());
ordersInfo.setPackageName(orders.getDirectiveName());
}
@ -887,18 +887,24 @@ public class DirectiveOrderServiceImpl extends ServiceImpl<DirectiveOrderMapper,
/**
* 获取员工姓名
*
* @param employeeId
*/
@Override
public String getEmployeeName(String employeeId){
public String getEmployeeName(String employeeId) {
String employeeName = "";
if(employeeId!=null&&!employeeId.equals("")){
if (employeeId != null && !employeeId.equals("")) {
DirectiveOrder employeeInfo = baseMapper.getEmployeeById(employeeId);
if(employeeInfo!=null){
if (employeeInfo != null) {
employeeName = employeeInfo.getEmployeeName();
}
}
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();
}