package com.xiaopeng.maintenance.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.alibaba.fastjson2.JSONObject; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.maintenance.XpErrorType; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.api.model.operation.XpWhitelistOperlog; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.account.LoginOperationUser; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.WebUtils; import com.xiaopeng.common.core.utils.ip.IpUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.evi.oss.service.AliOssService; import com.xiaopeng.maintenance.dto.HandleVehicleAccidentDto; import com.xiaopeng.maintenance.dto.SaveErrorTaskDto; import com.xiaopeng.maintenance.dto.SaveRoutineDetailDto; import com.xiaopeng.maintenance.dto.SaveVehicleAccidentDto; import com.xiaopeng.maintenance.exportExcel.XpTaskExportExcel; import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery; import com.xiaopeng.maintenance.model.query.TaskPageListQuery; import com.xiaopeng.maintenance.model.query.XpTaskRecordPageQuery; import com.xiaopeng.maintenance.model.vo.*; import com.xiaopeng.maintenance.service.IXpErrorTypeService; import com.xiaopeng.maintenance.service.XpTaskService; import com.xiaopeng.maintenance.vo.VehicleListVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** *

* 管理后台 任务工单 *

* * @author mitao * @since 2026-02-03 */ @RestController @Slf4j @Api(tags = "管理后台-任务工单") @RequestMapping("/api/v1/taskManagement") public class XpTaskManagementController { @Resource private XpTaskService xpTaskService; @Resource private TokenService tokenService; @Resource private IXpErrorTypeService xpErrorTypeService; @Resource private XpOperationUserClient operationUserClient; @Resource private AliOssService aliOssService; @Resource private XpVehicleClient xpVehicleClient; @ApiOperation(value = "事故类型列表", response = XpErrorType.class) @GetMapping("/errorTypeList") public R> errorTypeList() { return xpErrorTypeService.errorTypeList(); } @ApiOperation(value = "任务中心列表", response = TaskManagementPageListVO.class) @PostMapping("/pageList") public R> pageListManagement(@RequestBody TaskManagementPageListQuery query) { PageInfo pageList = xpTaskService.pageListManagement(query); return R.ok(pageList); } @ApiOperation(value = "任务工单导出") @PostMapping(value = "/exportExcel") public void exportExcel(@RequestBody TaskManagementPageListQuery query) { List exportList = xpTaskService.exportList(query); List taskExportExcels = new ArrayList<>(); Integer num = 1; for (TaskManagementPageListVO task : exportList) { XpTaskExportExcel xpTaskExportExcel = new XpTaskExportExcel(); xpTaskExportExcel.setPlateNumber(task.getPlateNumber()); xpTaskExportExcel.setTaskCategory(task.getTaskCategory()); xpTaskExportExcel.setTaskTypeName(task.getTaskTypeName()); xpTaskExportExcel.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); xpTaskExportExcel.setTaskDescription(task.getTaskDescription()); if (StringUtils.hasLength(task.getHandleUserId())) { String[] split = task.getHandleUserId().split(","); List users = operationUserClient.listByIds(Arrays.stream(split).map(Long::parseLong).collect(Collectors.toList())).getData(); if (users != null) { StringBuilder handleUserName = new StringBuilder(); for (XpOperationsUser user : users) { handleUserName.append(user.getNickName()).append(";"); } xpTaskExportExcel.setHandleUserName(handleUserName.toString()); } } xpTaskExportExcel.setNumber(num); xpTaskExportExcel.setStatus(task.getStatus()); LocalDateTime createTime = task.getCreateTime(); // 将LocalDateTime转化为yyyy-MM-dd HH:mm:ss格式字符串 xpTaskExportExcel.setCreateTime(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); taskExportExcels.add(xpTaskExportExcel); num++; } //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpTaskExportExcel.class, taskExportExcels); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("任务工单列表.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 管理后台-车辆管理-运营车辆管理-删除任务/事故 * * @param id * @return */ @ApiOperation(value = "删除任务/事故") @DeleteMapping("/deleteTaskById") public R deleteTaskById(@ApiParam(name = "id", value = "任务ID") Long id) { xpTaskService.deleteTaskById(id); return R.ok(); } @ApiOperation(value = "任务分配") @GetMapping("/assigneeTask") public R assigneeTask(@ApiParam(name = "id", value = "任务ID") Long id, @ApiParam(name = "handlerUserId", value = "处理人id") Long handlerUserId) { Long assigneeUserId = tokenService.getLoginUser().getSysUser().getId(); return xpTaskService.assigneeTask(id, handlerUserId, assigneeUserId); } @ApiOperation(value = "创建任务事故") @PostMapping("/saveTask") public R saveTask(@RequestBody SaveErrorTaskDto dto) { Long reportUserId = tokenService.getLoginUser().getSysUser().getId(); xpTaskService.saveTask(dto, reportUserId); return R.ok(); } /** * 内部调用-添加车辆异常任务 * @param vehicleId * @return */ @PostMapping("/saveVehicleAccidentError") public R saveVehicleAccidentError(@RequestParam Long vehicleId) { xpTaskService.saveVehicleAccidentError(vehicleId); return R.ok(); } @ApiOperation(value = "任务详情") @GetMapping("/taskDetail") public R taskDetail(Long id) throws UnsupportedEncodingException { return xpTaskService.taskDetail(id); } @ApiOperation(value = "查询车辆不分页列表") @PostMapping("/listVehicle") public R> listVehicle() throws UnsupportedEncodingException { List vehicles = xpVehicleClient.listVehicle().getData(); if (vehicles == null) { return R.ok(new ArrayList<>()); } for (XpVehicle vehicle : vehicles) { String vehiclePictures = vehicle.getVehiclePictures(); if (org.apache.commons.lang3.StringUtils.isNotBlank(vehiclePictures)) { JSONObject jsonObject = JSONObject.parseObject(vehiclePictures); //1 String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); jsonObject.put("url", downloadUrl); vehicle.setVehiclePictures(jsonObject.toJSONString()); } } return R.ok(vehicles); } /** * 通过车辆id查询任务事故分页列表 * * @return */ @ApiOperation(value = "通过车辆id查询任务事故分页列表", tags = {"管理后台-车辆管理-运营车辆管理"}) @PostMapping("/api/v1/vehicle/queryTaskByVehicleId") public R> queryTaskByVehicleId(@Valid @RequestBody XpTaskRecordPageQuery query) { return R.ok(xpTaskService.queryTaskByVehicleId(query)); } @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "管理后台-车辆管理-运营车辆管理") @GetMapping("/errorTypeTreeList") public R> errorTypeTreeList() { return xpErrorTypeService.errorTypeList(); } }