| | |
| | | List<SysTask> list; |
| | | if(searchTaskCode != null && !searchTaskCode.trim().isEmpty()){ |
| | | // Search across task_code, emergency_info.dispatch_code, and emergency_info.service_code |
| | | list = sysTaskService.selectSysTaskListByMultiCode(queryVO, searchTaskCode); |
| | | list = sysTaskService.selectSysTaskListByMultiCode(queryVO, searchTaskCode.trim()); |
| | | } else { |
| | | queryVO.setTaskCode(null); |
| | | list = sysTaskService.selectSysTaskList(queryVO); |
| New file |
| | |
| | | package com.ruoyi.system.controller; |
| | | |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.system.service.ILegacyTransferSyncService; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | /** |
| | | * 任务同步控制器 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/task") |
| | | public class TaskSyncController { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(TaskSyncController.class); |
| | | |
| | | @Autowired |
| | | private ILegacyTransferSyncService legacyTransferSyncService; |
| | | |
| | | /** |
| | | * 从旧系统同步数据到新系统 |
| | | * |
| | | * @param serviceOrdID 服务单ID |
| | | * @param dispatchOrdID 调度单ID |
| | | * @return 同步结果 |
| | | */ |
| | | @PostMapping("/syncFromLegacySystem") |
| | | public AjaxResult syncFromLegacySystem(@RequestBody SyncRequest request) { |
| | | try { |
| | | Long serviceOrdID = request.getServiceOrdID(); |
| | | Long dispatchOrdID = request.getDispatchOrdID(); |
| | | |
| | | // 参数验证 |
| | | if (serviceOrdID == null || serviceOrdID <= 0) { |
| | | return AjaxResult.error("服务单ID不能为空且必须大于0"); |
| | | } |
| | | |
| | | if (dispatchOrdID == null || dispatchOrdID <= 0) { |
| | | return AjaxResult.error("调度单ID不能为空且必须大于0"); |
| | | } |
| | | |
| | | log.info("开始从旧系统同步数据到新系统: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | |
| | | // 调用同步服务 |
| | | boolean result = legacyTransferSyncService.syncSingleTransferOrder(serviceOrdID, dispatchOrdID); |
| | | |
| | | if (result) { |
| | | log.info("从旧系统同步数据成功: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | return AjaxResult.success("同步成功"); |
| | | } else { |
| | | log.error("从旧系统同步数据失败: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | return AjaxResult.error("同步失败"); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("从旧系统同步数据异常: ServiceOrdID={}, DispatchOrdID={}", |
| | | request.getServiceOrdID(), request.getDispatchOrdID(), e); |
| | | return AjaxResult.error("同步异常: " + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 同步请求参数类 |
| | | */ |
| | | public static class SyncRequest { |
| | | private Long serviceOrdID; |
| | | private Long dispatchOrdID; |
| | | |
| | | public Long getServiceOrdID() { |
| | | return serviceOrdID; |
| | | } |
| | | |
| | | public void setServiceOrdID(Long serviceOrdID) { |
| | | this.serviceOrdID = serviceOrdID; |
| | | } |
| | | |
| | | public Long getDispatchOrdID() { |
| | | return dispatchOrdID; |
| | | } |
| | | |
| | | public void setDispatchOrdID(Long dispatchOrdID) { |
| | | this.dispatchOrdID = dispatchOrdID; |
| | | } |
| | | } |
| | | } |
| | |
| | | public void setShowTaskCode(String showTaskCode) { |
| | | showTaskCode=this.showTaskCode; |
| | | } |
| | | |
| | | // 用于SQL映射的字段(多码查询优化) |
| | | //这些字段接收SQL查询中计算出的dispatchCode和serviceCode值 |
| | | private String dispatchCode; |
| | | private String serviceCode; |
| | | |
| | | public String getDispatchCode() { |
| | | return dispatchCode; |
| | | } |
| | | |
| | | public void setDispatchCode(String dispatchCode) { |
| | | this.dispatchCode = dispatchCode; |
| | | } |
| | | |
| | | public String getServiceCode() { |
| | | return serviceCode; |
| | | } |
| | | |
| | | public void setServiceCode(String serviceCode) { |
| | | this.serviceCode = serviceCode; |
| | | } |
| | | /** |
| | | * 获取显示任务编号,优先返回急救转运的调度单编号,其次是服务单编号,最后是任务编号 |
| | | */ |
| | |
| | | public String getServiceCode(){ |
| | | if(this.legacyServiceOrdClass!=null && this.legacyServiceNsTime!=null && this.legacyServiceOrdNo!=null) { |
| | | String nstime = DateUtils.parseDateToStr(DateUtils.YYYYMMDD, this.legacyServiceNsTime); |
| | | return this.legacyServiceOrdClass + nstime +'-'+ this.legacyServiceOrdNo; |
| | | //serviceOrdNo 这个是数字,固定3位数 ,将32,转成032;将1转成001 |
| | | Integer intServiceNo = Integer.valueOf(this.legacyServiceOrdNo); |
| | | String ordNoStr = String.format("%03d", intServiceNo); |
| | | return this.legacyServiceOrdClass + nstime +'-'+ ordNoStr; |
| | | } |
| | | return null; |
| | | } |
| | |
| | | /** |
| | | * 查询车辆在指定时间范围内的任务列表 |
| | | * |
| | | * @param params 包含vehicleId、startTime、endTime的参数Map |
| | | * @param params包含vehicleId、startTime、endTime的参数Map |
| | | * @return 任务列表 |
| | | */ |
| | | public List<SysTask> selectVehicleTasksInTimeRange(java.util.Map<String, Object> params); |
| | | |
| | | /** |
| | | * 优化的多码查询方法,关联sys_task_emergency表并计算dispatchCode和serviceCode |
| | | * |
| | | * @param queryVO 任务查询对象 |
| | | * @return 任务管理集合 |
| | | */ |
| | | public List<SysTask> selectSysTaskListByMultiCodeOptimized(TaskQueryVO queryVO); |
| | | } |
| | |
| | | } |
| | | if (createVO.getPrice() != null) { |
| | | existingInfo.setTransferPrice(createVO.getPrice()); |
| | | log.info("任务ID:{},serviceOrdId:{} 更新价格:{}",existingInfo.getTaskId(),existingInfo.getLegacyServiceOrdId(), createVO.getPrice()); |
| | | } |
| | | |
| | | // 更新单据类型ID |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据任务编号、调度单编号或服务单编号查询任务列表 |
| | | *根据任务编号、调度单编号或服务单编号查询任务列表(SQL算法下推优化版本) |
| | | * |
| | | * @param queryVO 任务查询对象 |
| | | * @param taskCode 任务编号 |
| | |
| | | */ |
| | | @Override |
| | | public List<SysTask> selectSysTaskListByMultiCode(TaskQueryVO queryVO, String taskCode) { |
| | | // Create a new query object without the taskCode filter |
| | | TaskQueryVO newQuery = new TaskQueryVO(); |
| | | // Copy all properties except taskCode |
| | | try { |
| | | org.springframework.beans.BeanUtils.copyProperties(queryVO, newQuery, "taskCode"); |
| | | } catch (Exception e) { |
| | | // If copy fails, manually copy the important fields |
| | | newQuery.setTaskType(queryVO.getTaskType()); |
| | | newQuery.setTaskStatus(queryVO.getTaskStatus()); |
| | | newQuery.setVehicleNo(queryVO.getVehicleNo()); |
| | | newQuery.setCreatorId(queryVO.getCreatorId()); |
| | | newQuery.setAssigneeId(queryVO.getAssigneeId()); |
| | | newQuery.setDeptId(queryVO.getDeptId()); |
| | | newQuery.setDeptIds(queryVO.getDeptIds()); |
| | | newQuery.setPlannedStartTimeBegin(queryVO.getPlannedStartTimeBegin()); |
| | | newQuery.setPlannedStartTimeEnd(queryVO.getPlannedStartTimeEnd()); |
| | | newQuery.setPlannedEndTimeBegin(queryVO.getPlannedEndTimeBegin()); |
| | | newQuery.setPlannedEndTimeEnd(queryVO.getPlannedEndTimeEnd()); |
| | | newQuery.setOverdue(queryVO.getOverdue()); |
| | | } |
| | | |
| | | // Get all tasks matching the other criteria |
| | | List<SysTask> allTasks = sysTaskMapper.selectSysTaskList(newQuery); |
| | | allTasks.stream().forEach(task -> { |
| | | |
| | | // 设置任务码用于SQL查询 |
| | | queryVO.setTaskCode(taskCode); |
| | | |
| | | // 使用优化的查询方法,直接在SQL中关联sys_task_emergency表并计算匹配的dispatchCode和serviceCode |
| | | List<SysTask> tasks = sysTaskMapper.selectSysTaskListByMultiCodeOptimized(queryVO); |
| | | |
| | | // 处理任务分配信息和急救转运扩展信息 |
| | | tasks.forEach(task -> { |
| | | bindTaskAssign(task); |
| | | |
| | | // 对于急救转运任务,使用SQL查询中已计算并匹配好的dispatchCode和serviceCode |
| | | if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId()); |
| | | task.setEmergencyInfo(emergencyInfo); |
| | | // 创建一个临时的emergencyInfo对象,包含从SQL查询结果中获取的计算后的代码 |
| | | // SysTaskEmergency emergencyInfo = new SysTaskEmergency(); |
| | | // emergencyInfo.setDispatchCode(task.getDispatchCode()); |
| | | // emergencyInfo.setServiceCode(task.getServiceCode()); |
| | | |
| | | // 加载完整的扩展信息 |
| | | SysTaskEmergency fullEmergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(task.getTaskId()); |
| | | if (fullEmergencyInfo != null) { |
| | | // 保留完整信息,但确保dispatchCode和serviceCode是计算后的值 |
| | | task.setEmergencyInfo(fullEmergencyInfo); |
| | | } |
| | | |
| | | } |
| | | }); |
| | | return allTasks.stream().filter(task -> { |
| | | if (task.getTaskCode() != null && task.getTaskCode().contains(taskCode)) { |
| | | return true; |
| | | } |
| | | bindTaskAssign(task); |
| | | |
| | | if ("EMERGENCY_TRANSFER".equals(task.getTaskType()) && task.getEmergencyInfo() != null) { |
| | | String dispatchCode = task.getEmergencyInfo().getDispatchCode(); |
| | | String serviceCode = task.getEmergencyInfo().getServiceCode(); |
| | | return (dispatchCode != null && dispatchCode.contains(taskCode)) || |
| | | (serviceCode != null && serviceCode.contains(taskCode)); |
| | | } |
| | | return false; |
| | | |
| | | }).collect(Collectors.toList()); |
| | | |
| | | |
| | | return tasks; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | // task.setAssigneeId(updateVO.getAssigneeId()); |
| | | task.setUpdateBy(userName); |
| | | task.setUpdateTime(DateUtils.getNowDate()); |
| | |
| | | left join sys_task_vehicle tv on t.task_id = tv.task_id |
| | | left join tb_vehicle_info v on tv.vehicle_id = v.vehicle_id |
| | | </sql> |
| | | |
| | | <sql id="selectSysTaskVoWithEmergency"> |
| | | select t.task_id, t.task_code, t.task_type, t.task_status, t.task_description, |
| | | t.departure_address, t.destination_address, t.departure_longitude, t.departure_latitude, |
| | | t.destination_longitude, t.destination_latitude, t.estimated_distance, |
| | | t.planned_start_time, t.planned_end_time, |
| | | t.actual_start_time, t.actual_end_time, t.creator_id, t.assignee_id, t.dept_id, |
| | | t.create_time, t.update_time, t.create_by, t.update_by, t.remark, t.del_flag, t.legacy_synced, |
| | | u1.nick_name as creator_name, u2.nick_name as assignee_name, d.dept_name, |
| | | ( |
| | | select v2.vehicle_no |
| | | from sys_task_vehicle tv2 |
| | | left join tb_vehicle_info v2 on tv2.vehicle_id = v2.vehicle_id |
| | | where tv2.task_id = t.task_id |
| | | order by tv2.assign_time asc |
| | | limit 1 |
| | | ) as vehicle_no, |
| | | tv.id as tv_id, tv.task_id as tv_task_id, tv.vehicle_id as tv_vehicle_id, |
| | | v.vehicle_no as tv_vehicle_no, v.vehicle_type as tv_vehicle_type, |
| | | v.vehicle_brand as tv_vehicle_brand, v.vehicle_model as tv_vehicle_model, |
| | | tv.assign_time as tv_assign_time, tv.assign_by as tv_assign_by, |
| | | tv.status as tv_status, tv.remark as tv_remark, |
| | | CASE |
| | | WHEN e.legacy_dispatch_ord_class IS NOT NULL |
| | | AND e.legacy_dispatch_ns_time IS NOT NULL |
| | | AND e.legacy_dispatch_ord_no IS NOT NULL |
| | | THEN CONCAT(e.legacy_dispatch_ord_class, |
| | | DATE_FORMAT(e.legacy_dispatch_ns_time, '%Y%m%d'), |
| | | '-', |
| | | LPAD(CAST(e.legacy_dispatch_ord_no AS CHAR), 3, '0')) |
| | | ELSE NULL |
| | | END AS dispatch_code, |
| | | CASE |
| | | WHEN e.legacy_service_ord_class IS NOT NULL |
| | | AND e.legacy_service_ns_time IS NOT NULL |
| | | AND e.legacy_service_ord_no IS NOT NULL |
| | | THEN CONCAT(e.legacy_service_ord_class, |
| | | DATE_FORMAT(e.legacy_service_ns_time, '%Y%m%d'), |
| | | '-', |
| | | LPAD(CAST(e.legacy_service_ord_no AS CHAR), 3, '0')) |
| | | ELSE NULL |
| | | END AS service_code |
| | | from sys_task t |
| | | left join sys_user u1 on t.creator_id = u1.user_id |
| | | left join sys_user u2 on t.assignee_id = u2.user_id |
| | | left join sys_dept d on t.dept_id = d.dept_id |
| | | left join sys_task_vehicle tv on t.task_id = tv.task_id |
| | | left join tb_vehicle_info v on tv.vehicle_id = v.vehicle_id |
| | | left join sys_task_emergency e on t.task_id = e.task_id |
| | | </sql> |
| | | |
| | | <select id="selectSysTaskList" parameterType="TaskQueryVO" resultMap="SysTaskResult"> |
| | | <include refid="selectSysTaskVo"/> |
| | |
| | | ) |
| | | order by t.actual_start_time, t.planned_start_time |
| | | </select> |
| | | |
| | | <!-- 优化的多码查询方法,关联sys_task_emergency表 --> |
| | | <select id="selectSysTaskListByMultiCodeOptimized" parameterType="TaskQueryVO" resultMap="SysTaskResult"> |
| | | <include refid="selectSysTaskVoWithEmergency"/> |
| | | <where> |
| | | t.del_flag = '0' |
| | | <if test="taskCode != null and taskCode != ''"> |
| | | and ( |
| | | t.task_code like concat('%', #{taskCode}, '%') |
| | | or CASE |
| | | WHEN e.legacy_dispatch_ord_class IS NOT NULL |
| | | AND e.legacy_dispatch_ns_time IS NOT NULL |
| | | AND e.legacy_dispatch_ord_no IS NOT NULL |
| | | THEN CONCAT(e.legacy_dispatch_ord_class, |
| | | DATE_FORMAT(e.legacy_dispatch_ns_time, '%Y%m%d'), |
| | | '-', |
| | | LPAD(CAST(e.legacy_dispatch_ord_no AS CHAR), 3, '0')) |
| | | ELSE NULL |
| | | END like concat('%', #{taskCode}, '%') |
| | | or CASE |
| | | WHEN e.legacy_service_ord_class IS NOT NULL |
| | | AND e.legacy_service_ns_time IS NOT NULL |
| | | AND e.legacy_service_ord_no IS NOT NULL |
| | | THEN CONCAT(e.legacy_service_ord_class, |
| | | DATE_FORMAT(e.legacy_service_ns_time, '%Y%m%d'), |
| | | '-', |
| | | LPAD(CAST(e.legacy_service_ord_no AS CHAR), 3, '0')) |
| | | ELSE NULL |
| | | END like concat('%', #{taskCode}, '%') |
| | | ) |
| | | </if> |
| | | <if test="taskType != null and taskType != ''"> and t.task_type = #{taskType}</if> |
| | | <if test="taskStatus != null and taskStatus != ''"> and t.task_status = #{taskStatus}</if> |
| | | <if test="taskStatusList != null and taskStatusList != ''"> and t.task_status in |
| | | <foreach collection="taskStatusList.split(',')" item="status" open="(" separator="," close=")"> |
| | | #{status} |
| | | </foreach> |
| | | </if> |
| | | <if test="vehicleNo != null and vehicleNo != ''"> and v.vehicle_no like concat('%', #{vehicleNo}, '%')</if> |
| | | <!-- 综合查询:当前用户所在机构 OR 当前用户创建 OR 分配给当前用户 --> |
| | | <if test="(creatorId != null and creatorId != 0) or (assigneeId != null and assigneeId != 0) or (deptId != null and deptId != 0) or (deptIds != null and deptIds.size() > 0)"> |
| | | and ( |
| | | <!-- 查询指定分公司及其所有子部门的任务 --> |
| | | <if test="deptId != null and deptId != 0"> |
| | | (t.dept_id = #{deptId} OR t.dept_id IN ( |
| | | SELECT dept_id FROM sys_dept |
| | | WHERE del_flag = '0' AND find_in_set(#{deptId}, ancestors) |
| | | )) |
| | | </if> |
| | | <!-- 查询多个分公司及其所有子部门的任务 --> |
| | | <if test="deptIds != null and deptIds.size() > 0"> |
| | | <if test="deptId != null and deptId != 0"> or </if> |
| | | ( |
| | | <foreach collection="deptIds" item="branchDeptId" separator=" OR "> |
| | | (t.dept_id = #{branchDeptId} OR t.dept_id IN ( |
| | | SELECT dept_id FROM sys_dept |
| | | WHERE del_flag = '0' AND find_in_set(#{branchDeptId}, ancestors) |
| | | )) |
| | | </foreach> |
| | | ) |
| | | </if> |
| | | <if test="creatorId != null and creatorId != 0"> |
| | | <if test="(deptId != null and deptId != 0) or (deptIds != null and deptIds.size() > 0)"> or </if> |
| | | t.creator_id = #{creatorId} |
| | | </if> |
| | | <if test="assigneeId != null and assigneeId != 0"> |
| | | <if test="(deptId != null and deptId != 0) or (deptIds != null and deptIds.size() > 0) or (creatorId != null and creatorId != 0)"> or </if> |
| | | t.task_id IN ( |
| | | SELECT task_id FROM sys_task_assignee WHERE user_id = #{assigneeId} |
| | | ) |
| | | </if> |
| | | ) |
| | | </if> |
| | | <if test="plannedStartTimeBegin != null "> and t.planned_start_time >= #{plannedStartTimeBegin}</if> |
| | | <if test="plannedStartTimeEnd != null "> and t.planned_start_time <= #{plannedStartTimeEnd}</if> |
| | | <if test="plannedEndTimeBegin != null "> and t.planned_end_time >= #{plannedEndTimeBegin}</if> |
| | | <if test="plannedEndTimeEnd != null "> and t.planned_end_time <= #{plannedEndTimeEnd}</if> |
| | | <if test="overdue != null and overdue == true"> and t.planned_end_time < now() and t.task_status != 'COMPLETED'</if> |
| | | </where> |
| | | order by |
| | | CASE t.task_status |
| | | WHEN 'PENDING' THEN 1 |
| | | WHEN 'DEPARTING' THEN 2 |
| | | WHEN 'ARRIVED' THEN 3 |
| | | WHEN 'RETURNING' THEN 4 |
| | | WHEN 'IN_PROGRESS' THEN 5 |
| | | WHEN 'COMPLETED' THEN 6 |
| | | WHEN 'CANCELLED' THEN 7 |
| | | ELSE 8 |
| | | END, |
| | | t.create_time desc |
| | | </select> |
| | | </mapper> |
| | |
| | | url: '/task/syncTaskStatus/' + taskId, |
| | | method: 'post' |
| | | }) |
| | | } |
| | | } |
| | | |
| | | // 从旧系统同步数据到新系统 |
| | | export function syncFromLegacySystem(serviceOrdID, dispatchOrdID) { |
| | | return request({ |
| | | url: '/task/syncFromLegacySystem', |
| | | method: 'post', |
| | | data: { |
| | | serviceOrdID: serviceOrdID, |
| | | dispatchOrdID: dispatchOrdID |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 检查任务是否已申请发票 |
| | | export function checkTaskInvoice(taskId) { |
| | | return request({ |
| | | url: '/system/invoice/checkTaskInvoice/' + taskId, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | @click="syncDispatchOrder" |
| | | style="margin-left: 10px;" |
| | | >同步调度单</el-button> |
| | | <!-- 从旧系统同步数据到新系统按钮 --> |
| | | <el-button |
| | | v-if="taskDetail.emergencyInfo.legacyServiceOrdId && taskDetail.emergencyInfo.legacyDispatchOrdId" |
| | | type="success" |
| | | size="mini" |
| | | icon="el-icon-download" |
| | | :loading="syncingFromLegacy" |
| | | @click="syncFromLegacySystem" |
| | | style="margin-left: 10px;" |
| | | >从旧系统同步</el-button> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="调度单号"> |
| | | <span v-if="taskDetail.emergencyInfo.legacyDispatchOrdId"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getTask, updateTask, assignTask, changeTaskStatus, uploadAttachment, deleteAttachment, getTaskVehicles, getAvailableVehicles, assignVehiclesToTask, unassignVehicleFromTask, getPaymentInfo, syncServiceOrder, syncDispatchOrder, syncTaskStatus } from "@/api/task"; |
| | | import { getTask, updateTask, assignTask, changeTaskStatus, uploadAttachment, deleteAttachment, getTaskVehicles, getAvailableVehicles, assignVehiclesToTask, unassignVehicleFromTask, getPaymentInfo, syncServiceOrder, syncDispatchOrder, syncTaskStatus, syncFromLegacySystem, checkTaskInvoice } from "@/api/task"; |
| | | import { listUser } from "@/api/system/user"; |
| | | import { getToken } from "@/utils/auth"; |
| | | |
| | |
| | | // 同步加载状态 |
| | | syncingServiceOrder: false, |
| | | syncingDispatchOrder: false, |
| | | syncingFromLegacy: false, |
| | | syncingTaskStatus: false, |
| | | // 发票申请状态 |
| | | hasInvoiceApplied: false, |
| | |
| | | this.syncingDispatchOrder = false; |
| | | }); |
| | | }, |
| | | /** 从旧系统同步数据到新系统 */ |
| | | syncFromLegacySystem() { |
| | | // 检查是否同时有serviceOrdID和dispatchOrdID |
| | | if (!this.taskDetail.emergencyInfo.legacyServiceOrdId || !this.taskDetail.emergencyInfo.legacyDispatchOrdId) { |
| | | this.$modal.msgError("缺少必要的旧系统ID信息"); |
| | | return; |
| | | } |
| | | |
| | | this.$modal.confirm('是否确认从旧系统同步数据到新系统?').then(() => { |
| | | this.syncingFromLegacy = true; |
| | | return syncFromLegacySystem( |
| | | this.taskDetail.emergencyInfo.legacyServiceOrdId, |
| | | this.taskDetail.emergencyInfo.legacyDispatchOrdId |
| | | ); |
| | | }).then(() => { |
| | | this.$modal.msgSuccess("从旧系统同步成功"); |
| | | // 重新加载任务详情 |
| | | this.getTaskDetail(); |
| | | }).catch((error) => { |
| | | if (error !== 'cancel') { |
| | | this.$modal.msgError("同步失败: " + (error.message || "未知错误")); |
| | | } |
| | | }).finally(() => { |
| | | this.syncingFromLegacy = false; |
| | | }); |
| | | }, |
| | | /** 手动同步任务状态 */ |
| | | syncTaskStatus() { |
| | | this.$modal.confirm('是否确认同步任务状态到旧系统?').then(() => { |
| | |
| | | /** 检查发票申请状态 */ |
| | | checkInvoiceStatus() { |
| | | // 调用后端接口检查该任务是否已申请发票 |
| | | this.$axios.get(`/system/invoice/checkTaskInvoice/${this.$route.params.taskId}`) |
| | | checkTaskInvoice(this.$route.params.taskId) |
| | | .then(response => { |
| | | if (response.code === 200 && response.data) { |
| | | this.hasInvoiceApplied = true; |