package com.xiaopeng.maintenance.service.impl; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.feignClient.account.SysUserClient; import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.maintenance.XpWorkOrder; import com.xiaopeng.api.model.maintenance.XpWorkOrderLog; import com.xiaopeng.api.model.operation.XpFeedbackType; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.evi.oss.service.AliOssService; import com.xiaopeng.maintenance.mapper.XpWorkOrderLogMapper; import com.xiaopeng.maintenance.mapper.XpWorkOrderMapper; import com.xiaopeng.maintenance.model.query.WorkOrderPageListQuery; import com.xiaopeng.maintenance.model.vo.TaskManagementPageListVO; import com.xiaopeng.maintenance.service.IXpWorkOrderService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.UnsupportedEncodingException; import java.util.*; import java.util.stream.Collectors; /** *

* 工单管理 服务实现类 *

* * @author mitao * @since 2026-02-03 */ @Service public class XpWorkOrderServiceImpl extends ServiceImpl implements IXpWorkOrderService { @Autowired private SysUserClient sysUserClient; @Autowired private XpSystemSettingClient systemSettingClient; @Autowired private XpWorkOrderLogMapper workOrderLogMapper; @Resource private AliOssService aliOssService; @Override public PageInfo pageList(WorkOrderPageListQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.pageList(pageInfo, query); if (list.isEmpty()) { return new PageInfo<>(); } List handleUserIds = list.stream().map(XpWorkOrder::getHandleUserId).collect(Collectors.toList()); List sysUsers = sysUserClient.listByIds(handleUserIds).getData(); Map userMap = new HashMap<>(); if (sysUsers != null) { userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, SysUser::getNickName)); } for (XpWorkOrder xpWorkOrder : list) { if (xpWorkOrder.getHandleUserId() != null) { String handleUserName = userMap.get(xpWorkOrder.getHandleUserId()); xpWorkOrder.setHandleUserName(handleUserName); if (xpWorkOrder.getHandleUserId().equals(query.getUserId())){ xpWorkOrder.setIsHandle(1); }else{ xpWorkOrder.setIsHandle(0); } } XpFeedbackType feedbackType = systemSettingClient.getFeedbackTypeById(xpWorkOrder.getFeedbackTypeId()).getData(); if (feedbackType != null) { xpWorkOrder.setFeedbackTypeName(feedbackType.getFeedbackType()); } //图片回显 String problemImage = xpWorkOrder.getProblemImage(); if (StringUtils.isNotBlank(problemImage)) { JSONArray jsonArray = JSONArray.parseArray(problemImage); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); if (Objects.isNull(jsonObject)) { continue; } String downloadUrl = jsonObject.getString("url");; try { downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); } catch (UnsupportedEncodingException e) { log.error("获取图片下载地址失败", e); } jsonObject.put("url", downloadUrl); } xpWorkOrder.setProblemImage(JSONArray.toJSONString(jsonArray)); } } pageInfo.setRecords(list); return pageInfo; } @Override public XpWorkOrder workOrderDetail(Long id) { XpWorkOrder workOrder = this.getById(id); // 图片回显 String problemImage = workOrder.getProblemImage(); if (StringUtils.isNotBlank(problemImage)) { JSONArray jsonArray = JSONArray.parseArray(problemImage); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); if (Objects.isNull(jsonObject)) { continue; } String downloadUrl = jsonObject.getString("url"); ; try { downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); } catch (UnsupportedEncodingException e) { log.error("获取图片下载地址失败", e); } jsonObject.put("url", downloadUrl); } workOrder.setProblemImage(JSONArray.toJSONString(jsonArray)); } List workOrderLogs = workOrderLogMapper.selectList(new LambdaQueryWrapper() .eq(XpWorkOrderLog::getWorkOrderId, id)); XpFeedbackType feedbackType = systemSettingClient.getFeedbackTypeById(workOrder.getFeedbackTypeId()).getData(); if (feedbackType != null) { workOrder.setFeedbackTypeName(feedbackType.getFeedbackType()); } if (workOrderLogs.isEmpty()) { return workOrder; } List handleUserIds = workOrderLogs.stream().map(XpWorkOrderLog::getHandleUserId).collect(Collectors.toList()); List sysUsers = sysUserClient.listByIds(handleUserIds).getData(); if (workOrder.getCreateById()!=null){ List createUserId = new ArrayList<>(); createUserId.add(workOrder.getCreateById()); List sysUser = sysUserClient.listByIds(createUserId).getData(); if (sysUser != null && !sysUser.isEmpty()){ workOrder.setCreateByAvatar(sysUser.get(0).getAvatar()); } } Map userMap = new HashMap<>(); if (sysUsers != null) { userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, e->e)); } for (XpWorkOrderLog workOrderLog : workOrderLogs) { if (workOrderLog.getHandleUserId() != null) { String handleUserName = userMap.get(workOrderLog.getHandleUserId()).getNickName(); workOrderLog.setHandleUserName(handleUserName); String avatar = userMap.get(workOrderLog.getHandleUserId()).getAvatar(); workOrderLog.setHandleUserAvatar(avatar); } } workOrder.setWorkOrderLogs(workOrderLogs); return workOrder; } @Override public void handleWorkOrder(XpWorkOrderLog workOrderLog) { XpWorkOrder workOrder = this.getById(workOrderLog.getWorkOrderId()); if (workOrderLog.getHandleType() == 2) { // 办结 工单状态流转为已完成 workOrder.setHandleStatus(3); workOrder.setFeedbackUserPhone(null); workOrder.setHandleUserId(workOrderLog.getHandleUserId()); this.updateById(workOrder); }else{ // 移交 workOrder.setHandleStatus(2); workOrder.setFeedbackUserPhone(null); workOrder.setHandleUserId(workOrderLog.getHandleUserId()); this.updateById(workOrder); } workOrderLogMapper.insert(workOrderLog); } }