Merge branch 'hhk' into main

plp
HuangHuiKang 2 weeks ago
commit 204f1e29f6

@ -103,6 +103,9 @@ public interface ErrorCodeConstants {
ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(5_0087, "设备维修记录不存在");
ErrorCode DV_REPAIR_CODE_EXISTS = new ErrorCode(5_0087, "设备维修记录编码已存在");
ErrorCode DV_REPAIR_LINE_NOT_EXISTS = new ErrorCode(5_0088, "设备维修子表记录不存在");
ErrorCode DV_REPAIR_LINE_ID_NOT_EXISTS = new ErrorCode(5_0088, "设备维修子表记录Id为空");
ErrorCode ZJ_TYPE_NOT_EXISTS = new ErrorCode(5_009, "检验类型不存在");
ErrorCode ZJ_ITEM_NOT_EXISTS = new ErrorCode(5_0091, "检验项目不存在");
@ -130,6 +133,7 @@ public interface ErrorCodeConstants {
ErrorCode DEVICE_LEDGER_EXISTS = new ErrorCode(1002000010, "设备台账编码已存在");
ErrorCode SUBJECT_EXISTS = new ErrorCode(1002000010, "项目编码已存在");
ErrorCode TASK_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002000011, "设备类型不存在");
ErrorCode TASK_CORN_NOT_EXISTS = new ErrorCode(1002000011, "设备corn表达式为空");
ErrorCode TICKET_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002000012, "工单管理不存在");
ErrorCode TICKET_RESULTS_NOT_EXISTS = new ErrorCode(1002000013, "工单检验结果不存在");
ErrorCode TICKET_RESULTS_ID_NOT_NULL = new ErrorCode(1002000014, "工单检验结果Id不存在");

@ -123,4 +123,20 @@ public class DeviceLedgerController {
@GetMapping("/exportInspectionHistory")
@Operation(summary = "根据设备Id导出点检履历")
@PreAuthorize("@ss.hasPermission('mes:device-ledger:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportInspectionHistory(@Valid DeviceLedgerPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
List<DeviceLedgerDO> list = deviceLedgerService.getDeviceLedgerPage(pageReqVO).getList();
List<DeviceLedgerRespVO> deviceLedgerRespVOS = BeanUtils.toBean(list, DeviceLedgerRespVO.class);
ResumeNameUtils.fillUserInfoForExport(deviceLedgerRespVOS);
// 导出 Excel
ExcelUtils.write(response, "设备台账.xls", "数据", DeviceLedgerRespVO.class,deviceLedgerRespVOS);
}
}

@ -6,9 +6,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO;
import cn.iocoder.yudao.module.mes.service.dvrepair.DvRepairService;
@ -114,6 +113,10 @@ public class DvRepairController {
dvSubjectRespVO.setStatusName(dvSubjectRespVO.getStatus() != null ?
(dvSubjectRespVO.getStatus() == 0 ? "待完成" : "已完成") : null);
}
if (dvSubjectRespVO.getRepairStatus() !=null) {
dvSubjectRespVO.setRepairStatusName(dvSubjectRespVO.getRepairStatus() != null ?
(dvSubjectRespVO.getRepairStatus() == 1 ? "通过" : "不通过") : null);
}
}
// 导出 Excel
@ -131,6 +134,32 @@ public class DvRepairController {
}
@PostMapping("/updateRepairLine")
@Operation(summary = "更新设备维修子表")
@PreAuthorize("@ss.hasPermission('mes:dv-repair:update')")
public CommonResult<Boolean> updateRepairLine(@Valid @RequestBody DvRepairLineSaveReqVO updateReqVO) {
dvRepairService.updateRepairLine(updateReqVO);
return success(true);
}
@PutMapping("/updateDvRepairStatus")
@Operation(summary = "更新设备维修子记录状态")
@PreAuthorize("@ss.hasPermission('mes:dv-repair:update')")
public CommonResult<Boolean> updateDvRepairStatus(@Valid @RequestBody DvRepirUpdateReqVO updateReqVO) {
dvRepairService.updateDvRepairStatus(updateReqVO);
return success(true);
}
@PutMapping("/batchUpdate")
@Operation(summary = "批量更新维修检验结果")
@PreAuthorize("@ss.hasPermission('mes:ticket-results:update')")
public CommonResult<Boolean> batchUpdateTicketResults(
@Valid @RequestBody List<DvRepairLineSaveReqVO> updateReqVOList) {
dvRepairService.batchUpdateTicketResults(updateReqVOList);
return success(true);
}
private PageResult<DvRepairRespVO> buildCreatorName(PageResult<DvRepairRespVO> dvSubjectRespVOPageResult) {
for (DvRepairRespVO dvSubjectRespVO : dvSubjectRespVOPageResult.getList()) {
if (dvSubjectRespVO.getAcceptedBy() !=null) {

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 设备维修记录子表/修改 Request VO")
@Data
public class DvRepairLineSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27809")
private Long id;
@Schema(description = "维修单ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long repairId;
@Schema(description = "项目ID")
private Long subjectId;
@Schema(description = "项目编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "6979")
private String subjectCode;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String subjectName;
@Schema(description = "项目类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
private String subjectType;
@Schema(description = "项目内容")
private String subjectContent;
@Schema(description = "标准")
private String subjectStandard;
@Schema(description = "故障描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "1622")
private String malfunction;
@Schema(description = "故障描述资源")
private String malfunctionUrl;
@Schema(description = "维修情况")
private String repairDes;
@Schema(description = "备注")
private String remark;
@Schema(description = "维修结果 0-待维修 1-通过 2-不通过")
private Integer result;
}

@ -109,5 +109,10 @@ public class DvRepairRespVO {
@Schema(description = "关键件Id", example = "你猜")
private Long componentId;
@Schema(description = "维修状态 0-待完成 1-通过 2-不通过")
private Integer repairStatus;
@Schema(description = "维修状态")
@ExcelProperty("维修状态")
private String repairStatusName;
}

@ -81,4 +81,6 @@ public class DvRepairSaveReqVO {
@Schema(description = "关键件Id")
private Long componentId;
}

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 设备维修更新子记录 Req VO")
@Data
public class DvRepirUpdateReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27809")
@NotNull
private Long id;
@Schema(description = "报修日期")
@NotNull(message = "报修日期不能为空")
private LocalDateTime requireDate;
@Schema(description = "完成日期")
@NotNull(message = "完成日期不能为空")
private LocalDateTime finishDate;
@Schema(description = "验收日期")
@NotNull(message = "验收日期不能为空")
private LocalDateTime confirmDate;
@Schema(description = "维修结果")
@NotBlank(message = "维修结果不能为空")
private String repairResult;
@Schema(description = "备注")
private String remark;
@Schema(description = "子列表")
@NotNull(message = "子列表不能为空")
private List<DvRepairLineSaveReqVO> updateReqVOList;
}

@ -1,8 +1,18 @@
package cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement;
import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.DeviceLedgerRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.moldsubject.vo.MoldSubjectRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.InspectionResultEnum;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketInspectionExportVO;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO;
import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.alibaba.excel.util.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -14,8 +24,12 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.io.IOException;
import java.util.stream.Collectors;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@ -43,6 +57,9 @@ public class TicketManagementController {
@Resource
private AdminUserApi adminUserApi;
@Resource
private DictDataApi dictDataApi;
@PostMapping("/create")
@Operation(summary = "创建工单管理")
@ -126,4 +143,147 @@ public class TicketManagementController {
}
return ticketManagementRespVOPageResult;
}
@GetMapping("/getInspectionByDeviceId")
@Operation(summary = "根据设备Id获得点检历史记录")
@Parameter(name = "deviceId", description = "设备Id", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:ticket-management:query')")
public CommonResult< List<TicketResultsDO>> getInspectionByDeviceId(@RequestParam("deviceId") Long deviceId,
@RequestParam(name = "startTime",required = false) String startTime,
@RequestParam(name = "endTime",required = false) String endTime) {
List<TicketResultsDO> ticketResultsDOList = ticketManagementService.getInspectionByDeviceId(deviceId,startTime,endTime,"");
return success(ticketResultsDOList);
}
@GetMapping("/exportExcelInspection")
@Operation(summary = "导出点检历史记录 Excel")
@PreAuthorize("@ss.hasPermission('mes:ticket-results:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportTicketResultsExcel(@RequestParam("deviceId") Long deviceId,
@RequestParam(name = "ids",required = false) String ids,
@RequestParam(name = "startTime",required = false) String startTime,
@RequestParam(name = "endTime",required = false) String endTime,
HttpServletResponse response) throws IOException {
// 查询数据
List<TicketResultsDO> results = ticketManagementService.getInspectionByDeviceId(deviceId, startTime, endTime, ids);
// 转换为VO并处理数据
List<TicketInspectionExportVO> exportVos = results.stream()
.map(this::convertToExportVO)
.collect(Collectors.toList());
// 设置响应头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode("点检记录.xls", "UTF-8"));
response.setHeader("Content-Encoding", "identity");
// 导出Excel
String fileName = String.format("点检记录_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
ExcelUtils.write(response, fileName, "点检记录", TicketInspectionExportVO.class, exportVos);
}
@GetMapping("/getMaintenanceByDeviceId")
@Operation(summary = "根据设备Id获得保养历史记录")
@Parameter(name = "deviceId", description = "设备Id", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:ticket-management:query')")
public CommonResult<List<TicketResultsDO>> getMaintenanceByDeviceId(@RequestParam("deviceId") Long deviceId,
@RequestParam(name = "startTime",required = false) String startTime,
@RequestParam(name = "endTime",required = false) String endTime) {
List<TicketResultsDO> ticketResultsDOList = ticketManagementService.getMaintenanceByDeviceId(deviceId,startTime,endTime,"");
return success(ticketResultsDOList);
}
@GetMapping("/exportExcelMaintenance")
@Operation(summary = "导出保养历史记录 Excel")
@PreAuthorize("@ss.hasPermission('mes:ticket-results:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportExcelMaintenance(@RequestParam("deviceId") Long deviceId,
@RequestParam(name = "ids",required = false) String ids,
@RequestParam(name = "startTime",required = false) String startTime,
@RequestParam(name = "endTime",required = false) String endTime,
HttpServletResponse response) throws IOException {
// 查询数据
List<TicketResultsDO> results = ticketManagementService.getMaintenanceByDeviceId(deviceId, startTime, endTime, ids);
// 转换为VO并处理数据
List<TicketInspectionExportVO> exportVos = results.stream()
.map(this::convertToExportVO)
.collect(Collectors.toList());
// 设置响应头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode("保养记录.xls", "UTF-8"));
response.setHeader("Content-Encoding", "identity");
// 导出Excel
String fileName = String.format("保养记录_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
ExcelUtils.write(response, fileName, "保养记录", TicketInspectionExportVO.class, exportVos);
}
/**
*
*/
private Map<String, Map<String, String>> getDictData() {
Map<String, Map<String, String>> dictData = new HashMap<>();
try {
// 获取检验方式字典
Map<String, String> inspectionMethodDict = new HashMap<>();
List<DictDataRespDTO> inspectionMethods = dictDataApi.getDictDataList("Inspection_method");
for (DictDataRespDTO dict : inspectionMethods) {
inspectionMethodDict.put(dict.getValue(), dict.getLabel());
}
dictData.put("Inspection_method", inspectionMethodDict);
} catch (Exception e) {
throw new RuntimeException("获取字典数据异常:" + e);
}
return dictData;
}
/**
*
*/
private TicketInspectionExportVO convertToExportVO(TicketResultsDO record) {
TicketInspectionExportVO vo = BeanUtils.toBean(record, TicketInspectionExportVO.class);
// 转换检验结果
if (record.getInspectionResult() != null) {
vo.setResult(record.getInspectionResult().equals(InspectionResultEnum.OK.getCode()) ? InspectionResultEnum.OK.getLabel() :
record.getInspectionResult().equals(InspectionResultEnum.NG.getCode()) ? InspectionResultEnum.NG.getLabel() : String.valueOf(record.getInspectionResult()));
}
// 处理操作人信息
if (StringUtils.isNotBlank(record.getOperator())) {
try {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(record.getOperator()));
if (user != null) {
vo.setOperator("(" + user.getUsername() + ")" + user.getNickname());
}
} catch (Exception e) {
// 转换失败保持原值
}
}
// 处理检验方式字典
if (StringUtils.isNotBlank(record.getInspectionMethod())) {
Map<String, Map<String, String>> dictData = getDictData();
String methodLabel = dictData.getOrDefault("Inspection_method", Collections.emptyMap())
.get(record.getInspectionMethod());
if (StringUtils.isNotBlank(methodLabel)) {
vo.setInspectionMethod(methodLabel);
}
}
return vo;
}
}

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums;
import lombok.Getter;
@Getter
public enum InspectionResultEnum {
OK(1, "OK"),
NG(2, "NG");
private final Integer code;
private final String label;
InspectionResultEnum(Integer code, String label) {
this.code = code;
this.label = label;
}
public static String getLabelByCode(Integer code) {
for (InspectionResultEnum value : values()) {
if (value.code.equals(code)) {
return value.getLabel();
}
}
return String.valueOf(code);
}
}

@ -48,19 +48,13 @@ public class TicketManagementPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "id集合导出用")
private String ids;
/**
*
*/
@Schema(description = "作业开始时间")
private String taskTime;
/**
*
*/
@Schema(description = "作业结束时间")
private String taskEndTime;
}

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@ExcelIgnoreUnannotated
public class TicketInspectionExportVO {
// @ExcelProperty("设备编号")
// private String deviceCode;
//
// @ExcelProperty("设备名称")
// private String deviceName;
@ExcelProperty("检验项名称")
private String inspectionItemName;
@ExcelProperty("检验方式")
private String inspectionMethod;
@ExcelProperty("判定基准")
private String judgmentCriteria;
@ExcelProperty("点检时间")
@ColumnWidth(20)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime taskTime;
@ExcelProperty("作业结果")
private String result;
@ExcelProperty("备注")
private String remark;
private Integer inspectionResult;
@ExcelProperty("作业人")
private String operator;
@ExcelProperty("创建时间")
@ColumnWidth(20)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime createTime;
}

@ -114,4 +114,10 @@ public class DvRepairDO extends BaseDO {
*/
private Long componentId;
/**
* 0- 1- 2-
*/
private Integer repairStatus;
}

@ -72,4 +72,9 @@ public class DvRepairLineDO extends BaseDO {
*/
private String remark;
/**
*
*/
private Integer result;
}

@ -65,4 +65,14 @@ public class TicketResultsDO extends BaseDO {
*/
private Long deviceId;
/**
*
*/
@TableField(exist = false)
private LocalDateTime taskTime;
@TableField(exist = false)
private String operator;
}

@ -32,5 +32,7 @@ public interface TicketResultsMapper extends BaseMapperX<TicketResultsDO> {
.orderByDesc(TicketResultsDO::getId));
}
List<TicketResultsDO> findByDeviceIdAndPlanType(@Param("deviceId") Long deviceId,@Param("planType") Integer planType);
List<TicketResultsDO> findByDeviceIdAndPlanType(@Param("deviceId") Long deviceId,@Param("planType") Integer planType,
@Param("startTime") String startTime,@Param("endTime") String endTime,
@Param("ids") String ids);
}

@ -138,13 +138,13 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
//点检列表
List<TicketResultsDO> inspectionList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.INSPECTION.getCode());
List<TicketResultsDO> inspectionList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.INSPECTION.getCode(),"","","");
if(CollectionUtils.isNotEmpty(inspectionList)){
deviceLedgerDO.setInspectionList(inspectionList);
}
//保养列表
List<TicketResultsDO> maintainList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.MAINTENANCE.getCode());
List<TicketResultsDO> maintainList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.MAINTENANCE.getCode(),"","","");
if(CollectionUtils.isNotEmpty(maintainList)){
deviceLedgerDO.setMaintainList(maintainList);
}

@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.mes.service.dvrepair;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.dal.dataobject.dvrepair.DvRepairDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO;
@ -64,4 +66,9 @@ public interface DvRepairService {
*/
List<DvRepairLineDO> getDvRepairLineListByRepairId(Long repairId);
void updateRepairLine(@Valid DvRepairLineSaveReqVO updateReqVO);
void batchUpdateTicketResults(@Valid List<DvRepairLineSaveReqVO> updateReqVOList);
void updateDvRepairStatus(@Valid DvRepirUpdateReqVO updateReqVO);
}

@ -2,21 +2,34 @@ package cn.iocoder.yudao.module.mes.service.dvrepair;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.ticketresults.enums.JobResultEnum;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketmanagement.TicketManagementDO;
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS;
@ -81,6 +94,8 @@ public class DvRepairServiceImpl implements DvRepairService {
// 更新子表
updateDvRepairLineList(updateReqVO.getId(), updateReqVO.getDvRepairLines());
}
@Override
@ -120,6 +135,124 @@ public class DvRepairServiceImpl implements DvRepairService {
return dvRepairLineMapper.selectListByRepairId(repairId);
}
@Override
public void updateRepairLine(DvRepairLineSaveReqVO updateReqVO) {
// 校验存在
validateDvRepairLineExists(updateReqVO.getId());
// 更新
DvRepairLineDO updateObj = BeanUtils.toBean(updateReqVO, DvRepairLineDO.class);
dvRepairLineMapper.updateById(updateObj);
}
@Override
public void batchUpdateTicketResults(List<DvRepairLineSaveReqVO> updateReqVOList) {
if (CollectionUtils.isEmpty(updateReqVOList)) {
return;
}
// 1. 数据验证
validateBatchUpdateData(updateReqVOList);
// 2. 批量更新
List<DvRepairLineDO> updateList = new ArrayList<>();
LocalDateTime now = LocalDateTime.now();
for (DvRepairLineSaveReqVO vo : updateReqVOList) {
// 转换为DO
DvRepairLineDO updateDO = BeanUtils.toBean(vo, DvRepairLineDO.class);
updateDO.setUpdateTime(now);
updateList.add(updateDO);
}
// 3. 执行批量更新
dvRepairLineMapper.updateBatch(updateList);
//4. 判断是否全部已检验
handleInspectionResult(updateReqVOList);
}
@Override
public void updateDvRepairStatus(DvRepirUpdateReqVO updateReqVO) {
DvRepairDO dvRepairDO = dvRepairMapper.selectById(updateReqVO.getId());
if ( dvRepairDO == null) {
throw exception(DV_REPAIR_NOT_EXISTS);
}
dvRepairDO.setRequireDate(updateReqVO.getRequireDate());
dvRepairDO.setFinishDate(updateReqVO.getFinishDate());
dvRepairDO.setConfirmDate(updateReqVO.getConfirmDate());
dvRepairDO.setRepairResult(updateReqVO.getRepairResult());
dvRepairMapper.updateById(dvRepairDO);
batchUpdateTicketResults(updateReqVO.getUpdateReqVOList());
}
private void handleInspectionResult(List<DvRepairLineSaveReqVO> updateReqVOList) {
if (CollectionUtils.isEmpty(updateReqVOList)) {
return;
}
// 检查是否有未填写的
boolean hasPending = updateReqVOList.stream()
.anyMatch(vo -> vo.getResult() == null || vo.getResult().equals(JobResultEnum.PENDING.getCode()));
if (hasPending) {
return;
}
DvRepairDO dvRepairDO = dvRepairMapper.selectById(updateReqVOList.get(0).getRepairId());
if (dvRepairDO == null ){
throw exception(DV_REPAIR_NOT_EXISTS);
}
//设置为已完成
dvRepairDO.setStatus(JobResultEnum.PASS.getCode());
// 检查是否有不通过的
boolean hasFail = updateReqVOList.stream()
.anyMatch(vo -> vo.getResult() != null && vo.getResult().equals(JobResultEnum.FAIL.getCode()));
if (hasFail) {
dvRepairDO.setRepairStatus(JobResultEnum.FAIL.getCode());
} else {
dvRepairDO.setRepairStatus(JobResultEnum.PASS.getCode());
}
dvRepairMapper.updateById(dvRepairDO);
}
private void validateBatchUpdateData(List<DvRepairLineSaveReqVO> updateReqVOList) {
if (CollectionUtils.isEmpty(updateReqVOList)) {
return;
}
Set<Long> idSet = new HashSet<>();
for (int i = 0; i < updateReqVOList.size(); i++) {
DvRepairLineSaveReqVO vo = updateReqVOList.get(i);
// 验证ID不能为空
if (vo.getId() == null) {
throw exception(DV_REPAIR_LINE_ID_NOT_EXISTS);
}
idSet.add(vo.getId());
// 调用单个验证逻辑
validateDvRepairLineExists(vo.getId());
}
}
private void validateDvRepairLineExists(Long id) {
if (dvRepairLineMapper.selectById(id) == null) {
throw exception(DV_REPAIR_LINE_NOT_EXISTS);
}
}
private void createDvRepairLineList(Long repairId, List<DvRepairLineDO> list) {
list.forEach(o -> o.setRepairId(repairId));
dvRepairLineMapper.insertBatch(list);

@ -177,6 +177,9 @@ public class TaskManagementServiceImpl implements TaskManagementService {
if (task == null) {
throw exception(TASK_MANAGEMENT_NOT_EXISTS);
}
if (StringUtils.isBlank(task.getCronExpression())) {
throw exception(TASK_CORN_NOT_EXISTS);
}
// 2. 如果状态没有变化,直接返回
if (Objects.equals(task.getEnabled(), updateEnabledReqVO.getEnabled())) {

@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketmanagement.TicketManagementDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO;
import org.springframework.web.bind.annotation.RequestParam;
/**
* Service
@ -53,4 +55,8 @@ public interface TicketManagementService {
PageResult<TicketManagementDO> getTicketManagementPage(TicketManagementPageReqVO pageReqVO);
void batchUpdateJobStatus(@Valid TicketManagementBatchUpdateReqVO reqVO);
List<TicketResultsDO> getInspectionByDeviceId(Long id,String startTime,String endTime,String ids);
List<TicketResultsDO> getMaintenanceByDeviceId(Long id,String startTime,String endTime,String ids);
}

@ -1,6 +1,14 @@
package cn.iocoder.yudao.module.mes.service.ticketmanagement;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.PlanTypeEnum;
import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO;
import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.ticketresults.TicketResultsMapper;
import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -31,6 +39,12 @@ public class TicketManagementServiceImpl implements TicketManagementService {
@Resource
private TicketManagementMapper ticketManagementMapper;
@Resource
@Lazy
private DeviceLedgerMapper deviceLedgerMapper;
@Resource
@Lazy
private TicketResultsMapper ticketResultsMapper;
@Override
public Long createTicketManagement(TicketManagementSaveReqVO createReqVO) {
@ -87,6 +101,31 @@ public class TicketManagementServiceImpl implements TicketManagementService {
ticketManagementMapper.batchUpdateJobStatus(idList, reqVO.getJobStatus());
}
@Override
public List<TicketResultsDO> getInspectionByDeviceId(Long id,String startTime,String endTime,String ids) {
DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(id);
//点检列表
List<TicketResultsDO> inspectionList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.INSPECTION.getCode(),startTime,endTime,ids);
if(CollectionUtils.isNotEmpty(inspectionList)){
deviceLedgerDO.setInspectionList(inspectionList);
}
return inspectionList;
}
@Override
public List<TicketResultsDO> getMaintenanceByDeviceId(Long id,String startTime,String endTime,String ids) {
DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(id);
//点检列表
List<TicketResultsDO> inspectionList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.MAINTENANCE.getCode(),startTime,endTime,ids);
if(CollectionUtils.isNotEmpty(inspectionList)){
deviceLedgerDO.setInspectionList(inspectionList);
}
return inspectionList;
}
/**
* ID
*/

@ -12,19 +12,32 @@
<select id="findByDeviceIdAndPlanType"
resultType="cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO">
SELECT
mtr.*
mtr.*,
mtm.task_time,
mtm.operator
from
besure.mes_ticket_results mtr
left join besure.mes_ticket_management mtm on mtm.id = mtr.management_id
WHERE 1=1
<!-- 必填条件 -->
<!-- ID集合过滤 -->
<if test="ids != null and ids != ''">
and mtr.id in
<foreach item="id" collection="ids.split(',')" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="deviceId != null and deviceId != ''">
and mtr.device_id = #{deviceId}
</if>
<if test="planType != null and planType != ''">
and mtm.plan_type= #{planType}
</if>
order by mtr.create_time desc
<!-- 点检时间范围过滤 -->
<if test="startTime != null">
and mtm.task_time &gt;= #{startTime}
</if>
<if test="endTime != null">
and mtm.task_time &lt;= #{endTime}
</if>
</select>
</mapper>
Loading…
Cancel
Save