|
|
|
|
@ -5,10 +5,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
|
|
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
|
|
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
|
|
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairLineSaveReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairPageReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairSaveReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepirUpdateReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums.RepairResultEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.enums.JobResultEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO;
|
|
|
|
|
@ -18,18 +16,21 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.ticketmanagement.TicketManagem
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairLineMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairMapper;
|
|
|
|
|
import com.alibaba.excel.util.StringUtils;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS;
|
|
|
|
|
@ -42,6 +43,7 @@ import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
@Validated
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class DvRepairServiceImpl implements DvRepairService {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
@ -191,6 +193,115 @@ public class DvRepairServiceImpl implements DvRepairService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<DvRepairLineRespVO> getRepairListByDeviceId(Long deviceId, String startTime, String endTime,String ids) {
|
|
|
|
|
|
|
|
|
|
List<DvRepairLineRespVO> dvRepairLineRespVOS = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<DvRepairDO> wrapper = Wrappers.<DvRepairDO>lambdaQuery()
|
|
|
|
|
.eq(DvRepairDO::getDeviceId, deviceId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理开始时间
|
|
|
|
|
if (StringUtils.isNotBlank(startTime)) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDateTime parseToLocalDateTime = parseToLocalDateTime(startTime);
|
|
|
|
|
wrapper.ge(DvRepairDO::getFinishDate, parseToLocalDateTime);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("开始时间格式错误: {}, 异常: {}", startTime, e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理结束时间
|
|
|
|
|
if (StringUtils.isNotBlank(endTime)) {
|
|
|
|
|
try {
|
|
|
|
|
LocalDateTime parseToLocalDateTime = parseToLocalDateTime(endTime);
|
|
|
|
|
wrapper.le(DvRepairDO::getFinishDate, parseToLocalDateTime);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("结束时间格式错误: {}, 异常: {}", startTime, e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<DvRepairDO> dvRepairDOS = dvRepairMapper.selectList(wrapper);
|
|
|
|
|
|
|
|
|
|
for (DvRepairDO dvRepairDO : dvRepairDOS) {
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<DvRepairLineDO> dvRepairLineDOLambdaQueryWrapper = Wrappers.<DvRepairLineDO>lambdaQuery()
|
|
|
|
|
.eq(DvRepairLineDO::getRepairId, dvRepairDO.getId())
|
|
|
|
|
.orderByDesc(DvRepairLineDO::getCreateTime);
|
|
|
|
|
|
|
|
|
|
List<DvRepairLineDO> dvRepairLineDOS = dvRepairLineMapper.selectList(dvRepairLineDOLambdaQueryWrapper);
|
|
|
|
|
|
|
|
|
|
if (!dvRepairLineDOS.isEmpty()) {
|
|
|
|
|
List<DvRepairLineRespVO> dvRepairLineRespVOList = dvRepairLineDOS.stream()
|
|
|
|
|
.map(doItem -> {
|
|
|
|
|
DvRepairLineRespVO vo = new DvRepairLineRespVO();
|
|
|
|
|
BeanUtils.copyProperties(doItem, vo);
|
|
|
|
|
vo.setRepairCode(dvRepairDO.getRepairCode());
|
|
|
|
|
vo.setRepairName(dvRepairDO.getRepairName());
|
|
|
|
|
vo.setFinishDate(dvRepairDO.getFinishDate());
|
|
|
|
|
// 设置维修结果描述
|
|
|
|
|
vo.setRepairResult(RepairResultEnum.getDescByCode(doItem.getResult()));
|
|
|
|
|
return vo;
|
|
|
|
|
})
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
dvRepairLineRespVOS.addAll(dvRepairLineRespVOList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 在最终结果上过滤ids
|
|
|
|
|
if (StringUtils.isNotBlank(ids)) {
|
|
|
|
|
List<Long> idList = Arrays.stream(ids.split(","))
|
|
|
|
|
.map(String::trim)
|
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
|
.map(Long::valueOf)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if (!idList.isEmpty()) {
|
|
|
|
|
dvRepairLineRespVOS = dvRepairLineRespVOS.stream()
|
|
|
|
|
.filter(vo -> idList.contains(vo.getId())) // 假设vo有getId()方法
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return dvRepairLineRespVOS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private LocalDateTime parseToLocalDateTime(String timeStr) {
|
|
|
|
|
if (StringUtils.isBlank(timeStr)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timeStr = timeStr.trim();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 尝试解析 yyyy-MM-dd HH:mm:ss
|
|
|
|
|
if (timeStr.length() == 19) {
|
|
|
|
|
return LocalDateTime.parse(timeStr,
|
|
|
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
}
|
|
|
|
|
// 尝试解析 yyyy-MM-dd
|
|
|
|
|
else if (timeStr.length() == 10) {
|
|
|
|
|
return LocalDate.parse(timeStr,
|
|
|
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd"))
|
|
|
|
|
.atStartOfDay();
|
|
|
|
|
}
|
|
|
|
|
// 尝试解析 yyyy/MM/dd HH:mm:ss
|
|
|
|
|
else if (timeStr.contains("/")) {
|
|
|
|
|
return LocalDateTime.parse(timeStr.replace("/", "-"),
|
|
|
|
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
}
|
|
|
|
|
// 尝试ISO格式
|
|
|
|
|
else {
|
|
|
|
|
return LocalDateTime.parse(timeStr,
|
|
|
|
|
DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new IllegalArgumentException("时间格式不支持: " + timeStr, e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void handleInspectionResult(List<DvRepairLineSaveReqVO> updateReqVOList) {
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(updateReqVOList)) {
|
|
|
|
|
|