kkk-ops 1 week ago
commit 5a27d83074

@ -27,6 +27,9 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -34,6 +37,7 @@ import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE;
@Tag(name = "管理后台 - 物联设备")
@RestController
@ -106,7 +110,6 @@ public class DeviceController {
@ApiAccessLog(operateType = EXPORT)
public void exportDeviceExcel(@Valid DevicePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeviceRespVO> list = deviceService.getDevicePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "物联设备.xls", "数据", DeviceRespVO.class,list);
@ -150,6 +153,25 @@ public class DeviceController {
return success(pageResult);
}
@GetMapping("/export-line-device")
@Operation(summary = "导出产线设备分页 Excel")
@PreAuthorize("@ss.hasPermission('iot:device:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportLineDevice(@Valid LineDeviceRequestVO pageReqVO,
HttpServletResponse response) throws IOException {
List<LineDeviceRespVO> lineDeviceList = deviceService.lineDeviceList(pageReqVO);
// 设置响应头
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")));
// 导出 Excel
ExcelUtils.write(response, fileName, "数据", LineDeviceRespVO.class,lineDeviceList);
}
@GetMapping("/singleDevice")
@Operation(summary = "单设备查看")

@ -41,7 +41,7 @@ public class DeviceRespVO {
private String deviceType;
@Schema(description = "状态", example = "1")
@ExcelProperty(value = "状态", converter = DictConvert.class)
@ExcelProperty(value = "连接状态", converter = DictConvert.class)
@DictFormat("iot_gateway_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String status;
@ -114,6 +114,7 @@ public class DeviceRespVO {
@Schema(description = "采集时间")
@ExcelProperty("采集时间")
@ColumnWidth(20)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)

@ -1,6 +1,8 @@
package cn.iocoder.yudao.module.iot.controller.admin.device.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -37,4 +39,7 @@ public class LineDeviceRequestVO extends PageParam {
@Schema(description = "结束采集时间")
private String collectionEndTime;
@Schema(description = "id集合导出用")
private String ids;
}

@ -1,6 +1,10 @@
package cn.iocoder.yudao.module.iot.controller.admin.device.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -9,6 +13,7 @@ import java.time.LocalDateTime;
@Schema(description = "管理后台 - 产线设备分页返回 Resq VO")
@Data
@ExcelIgnoreUnannotated
public class LineDeviceRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26404")
@ -18,21 +23,31 @@ public class LineDeviceRespVO {
private Long deviceId;
@Schema(description = "产线编码")
@ExcelProperty("产线编码")
private String lineNode;
@Schema(description = "产线名称")
@ExcelProperty("产线名称")
private String lineName;
@Schema(description = "设备编码")
@ExcelProperty("设备编码")
private String deviceCode;
@Schema(description = "设备名称")
@ExcelProperty("设备名称")
private String deviceName;
@Schema(description = "状态 1-在线 2-离线")
@ExcelProperty(value = "连接状态", converter = DictConvert.class)
@DictFormat("iot_gateway_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String status;
// @Schema(description = "状态名称")
// private String statusName;
@Schema(description = "采集时间")
@ExcelProperty("采集时间")
private String collectionTime;
}

@ -97,5 +97,8 @@ public interface DeviceMapper extends BaseMapperX<DeviceDO> {
IPage<LineDeviceRespVO> lineDevicePage(Page<LineDeviceRespVO> page, @Param("pageReqVO") LineDeviceRequestVO pageReqVO);
List<LineDeviceRespVO> lineDeviceList(@Param("pageReqVO") LineDeviceRequestVO pageReqVO);
DeviceOperationStatusRespVO getDeviceOperationalStatus();
}

@ -119,6 +119,8 @@ public interface DeviceService {
PageResult<LineDeviceRespVO> lineDevicePage(LineDeviceRequestVO pageReqVO);
List<LineDeviceRespVO> lineDeviceList(LineDeviceRequestVO pageReqVO);
Map<String, List<Map<String, Object>>> singleDevice(Long deviceId) throws JsonProcessingException;
List<Map<String, Object>> historyRecord(Long deviceId,String collectionStartTime, String collectionEndTime);

@ -275,6 +275,9 @@ public class DeviceServiceImpl implements DeviceService {
if(deviceOperationRecordDO !=null){
deviceRespVO.setOperatingStatus(DeviceStatusEnum.getByCode(deviceOperationRecordDO.getRule()).getName());
deviceRespVO.setCollectionTime(deviceOperationRecordDO.getCreateTime());
}else {
deviceRespVO.setOperatingStatus(DeviceStatusEnum.OFFLINE.getName());
}
@ -588,6 +591,22 @@ public class DeviceServiceImpl implements DeviceService {
}
@Override
public List<LineDeviceRespVO> lineDeviceList(LineDeviceRequestVO pageReqVO) {
List<LineDeviceRespVO> records = deviceMapper.lineDeviceList(pageReqVO);
for (LineDeviceRespVO record : records) {
Map<String, Object> latestDeviceData = tdengineService.getLatestDeviceData(record.getDeviceId());
if(latestDeviceData != null) {
record.setCollectionTime((String) latestDeviceData.get("timestamp"));
}
}
return records;
}
@Override
public Map<String, List<Map<String, Object>>> singleDevice(Long deviceId) throws JsonProcessingException {
@ -654,7 +673,7 @@ public class DeviceServiceImpl implements DeviceService {
try {
// 1. 获取设备数据列表
List<Map<String, Object>> deviceDataList = tdengineService.getstDeviceDataOrderByTimeDesc(deviceId,collectionStartTime,collectionEndTime);
List<Map<String, Object>> deviceDataList = tdengineService.getstDeviceDataOrderByTimeDesc(deviceId,collectionStartTime,collectionEndTime,null);
// 2. 获取属性类型映射
Map<Long, String> idToNameMap = deviceAttributeTypeMapper.selectList()

@ -310,7 +310,7 @@ public class TDengineService {
* @return
*/
@DS("tdengine")
public List<Map<String, Object>> getstDeviceDataOrderByTimeDesc(Long id,String StartTime, String EndTime) {
public List<Map<String, Object>> getstDeviceDataOrderByTimeDesc(Long id,String StartTime, String EndTime,Integer limit) {
String tableName = "d_" + id;
StringBuilder sqlBuilder = new StringBuilder();
List<Object> params = new ArrayList<>();
@ -328,6 +328,11 @@ public class TDengineService {
sqlBuilder.append(" ORDER BY ts DESC");
// 添加LIMIT限制
if (limit != null && limit > 0) {
sqlBuilder.append(" LIMIT ").append(limit);
}
try {
return jdbcTemplate.query(sqlBuilder.toString(), new RowMapper<Map<String, Object>>() {
@Override

@ -127,8 +127,8 @@ public class DeviceModelAttributeServiceImpl implements DeviceModelAttributeServ
List<Map<String, Object>> resultList = new ArrayList<>();
try {
// 1. 获取设备数据列表
List<Map<String, Object>> deviceDataList = tdengineService.getstDeviceDataOrderByTimeDesc(deviceId,collectionStartTime,collectionEndTime);
// 1. 获取最新10条设备数据列表
List<Map<String, Object>> deviceDataList = tdengineService.getstDeviceDataOrderByTimeDesc(deviceId,collectionStartTime,collectionEndTime,10);
// 2. 获取属性类型映射
Map<Long, String> idToNameMap = deviceAttributeTypeMapper.selectList()

@ -20,7 +20,12 @@
mo.name as lineName,
iod.device_code as deviceCode,
iod.device_name as deviceName,
iod.status
iod.status,
CASE iod.status
WHEN '1' THEN '在线'
WHEN '2' THEN '离线'
ELSE iod.status
END as statusName
from mes_organization mo
left join iot_device iod on mo.machine_id = iod.id
where mo.deleted = 0
@ -31,6 +36,10 @@
<if test="pageReqVO.lineName != null and pageReqVO.lineName != ''">
and mo.name like concat(concat('%', #{pageReqVO.lineName}), '%')
</if>
<!-- 新增ids过滤条件 -->
<if test="pageReqVO.ids != null and pageReqVO.ids != ''">
and FIND_IN_SET(mo.id, #{pageReqVO.ids})
</if>
<if test="pageReqVO.deviceCode != null and pageReqVO.deviceCode != ''">
and iod.device_code like concat(concat('%', #{pageReqVO.deviceCode}), '%')
</if>
@ -43,7 +52,7 @@
and iod.status like concat(concat('%', #{pageReqVO.status}), '%')
</if>
order by mo.create_time desc
order by mo.id desc
</select>
<select id="getDeviceOperationalStatus"
@ -72,4 +81,42 @@
WHERE ide.deleted = 0
</select>
<select id="lineDeviceList"
resultType="cn.iocoder.yudao.module.iot.controller.admin.device.vo.LineDeviceRespVO">
select
mo.id,
iod.id as deviceId,
mo.code as lineNode,
mo.name as lineName,
iod.device_code as deviceCode,
iod.device_name as deviceName,
iod.status
from mes_organization mo
left join iot_device iod on mo.machine_id = iod.id
where mo.deleted = 0
and mo.machine_id is not null
<if test="pageReqVO.lineNode != null and pageReqVO.lineNode != ''">
and mo.code like concat(concat('%', #{pageReqVO.lineNode}), '%')
</if>
<if test="pageReqVO.lineName != null and pageReqVO.lineName != ''">
and mo.name like concat(concat('%', #{pageReqVO.lineName}), '%')
</if>
<!-- 新增ids过滤条件 -->
<if test="pageReqVO.ids != null and pageReqVO.ids != ''">
and FIND_IN_SET(mo.id, #{pageReqVO.ids})
</if>
<if test="pageReqVO.deviceCode != null and pageReqVO.deviceCode != ''">
and iod.device_code like concat(concat('%', #{pageReqVO.deviceCode}), '%')
</if>
<if test="pageReqVO.deviceName != null and pageReqVO.deviceName != ''">
and iod.device_name like concat(concat('%', #{pageReqVO.deviceName}), '%')
</if>
<if test="pageReqVO.status != null and pageReqVO.status != ''">
and iod.status like concat(concat('%', #{pageReqVO.status}), '%')
</if>
order by mo.id desc
</select>
</mapper>

@ -179,11 +179,11 @@ public class DeviceServiceImplTest extends BaseDbUnitTest {
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<DeviceDO> pageResult = deviceService.getDevicePage(reqVO);
// PageResult<DeviceDO> pageResult = deviceService.getDevicePage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbDevice, pageResult.getList().get(0));
// assertEquals(1, pageResult.getTotal());
// assertEquals(1, pageResult.getList().size());
// assertPojoEquals(dbDevice, pageResult.getList().get(0));
}
}

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.controller.admin.criticalcomponent.vo;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -13,7 +14,7 @@ import com.alibaba.excel.annotation.*;
public class CriticalComponentRespVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14503")
@ExcelProperty("主键ID")
// @ExcelProperty("主键ID")
private Long id;
@Schema(description = "编码(唯一标识)", requiredMode = Schema.RequiredMode.REQUIRED)
@ -34,6 +35,7 @@ public class CriticalComponentRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
}

@ -107,8 +107,6 @@ public class DeviceLedgerController {
return success(respVO);
}
@GetMapping("/page")
@Operation(summary = "获得设备台账分页")
@PreAuthorize("@ss.hasPermission('mes:device-ledger:query')")
@ -117,7 +115,6 @@ public class DeviceLedgerController {
return success(ResumeNameUtils.buildPageCreatorName(BeanUtils.toBean(pageResult, DeviceLedgerRespVO.class)));
}
@GetMapping("/list")
@Operation(summary = "获得设备台账列表")
@PreAuthorize("@ss.hasPermission('mes:device-ledger:query')")

@ -24,7 +24,7 @@ public class DeviceLedgerPageReqVO extends PageParam {
private String deviceName;
@Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2")
private Integer deviceStatus;
private String deviceStatus;
@Schema(description = "设备品牌")
private String deviceBrand;

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO;
@ -36,37 +38,35 @@ public class DeviceLedgerRespVO extends BaseDO {
@ExcelProperty("设备名称")
private String deviceName;
@Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2")
@ExcelProperty(value = "设备状态", converter = DeviceStatusConverter.class)
private Integer deviceStatus;
@Schema(description = "设备类型")
private String deviceType;
@Schema(description = "设备品牌")
@ExcelProperty("设备品牌")
private String deviceBrand;
@Schema(description = "设备类型名称", example = "1")
@ExcelProperty("类型")
private String typeName;
@Schema(description = "设备型号")
@ExcelProperty("设备型号")
private String deviceModel;
@Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2")
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("mes_tz_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String deviceStatus;
@Schema(description = "设备规格")
@ExcelProperty("设备规格")
private String deviceSpec;
@Schema(description = "设备类型", example = "1")
@ExcelProperty("设备类型")
private String deviceType;
@Schema(description = "供应商")
@ExcelProperty("供应商")
private String supplier;
@Schema(description = "设备型号")
@ExcelProperty("设备型号")
private String deviceModel;
@Schema(description = "所属车间")
@ExcelProperty("所属车间")
private String workshop;
@Schema(description = "设备生产日期")
@ExcelProperty("设备生产日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate productionDate;
@Schema(description = "所属系统组织")
@ExcelProperty("所属系统组织")
private String systemOrg;
@Schema(description = "设备入厂日期")
@ExcelProperty("设备入厂日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate factoryEntryDate;
@Schema(description = "设备位置")
@ExcelProperty("设备位置")
@ -79,38 +79,42 @@ public class DeviceLedgerRespVO extends BaseDO {
@ExcelProperty("设备负责人名字")
private String deviceManagerName;
@Schema(description = "设备生产日期")
@ExcelProperty("设备生产日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate productionDate;
@Schema(description = "设备入厂日期")
@ExcelProperty("设备入厂日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate factoryEntryDate;
@Schema(description = "设备备注", example = "随便")
@ExcelProperty("设备备注")
private String deviceRemark;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;
@Schema(description = "排序")
// @ExcelProperty("排序")
private Integer sort;
@Schema(description = "创建人名字", example = "随便")
@ExcelProperty("创建人名字")
private String creatorName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "设备品牌")
// @ExcelProperty("设备品牌")
private String deviceBrand;
@Schema(description = "创建人名字", example = "随便")
@ExcelProperty("创建人名字")
private String creatorName;
@Schema(description = "供应商")
// @ExcelProperty("供应商")
private String supplier;
@Schema(description = "所属车间")
// @ExcelProperty("所属车间")
private String workshop;
@Schema(description = "所属系统组织")
@ExcelProperty("所属系统组织")
private String systemOrg;
@Schema(description = "设备备注", example = "随便")
@ExcelProperty("设备备注")
private String deviceRemark;
@Schema(description = "排序")
// @ExcelProperty("排序")
private Integer sort;
@Schema(description = "点检结果列表")
private List<TicketResultsDO> inspectionList;
@ -130,7 +134,7 @@ public class DeviceLedgerRespVO extends BaseDO {
private List<MesMoldDO> moldList;
@Schema(description = "附件地址")
@ExcelProperty("附件地址")
// @ExcelProperty("附件地址")
private String fileUrl;
@Schema(description = "关键件id")

@ -12,8 +12,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;
@ -126,12 +130,38 @@ public class DeviceTypeController {
@Operation(summary = "导出设备类型 Excel")
@PreAuthorize("@ss.hasPermission('mes:device-type:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDeviceTypeExcel(@Valid DeviceTypePageReqVO pageReqVO,
public void exportDeviceTypeExcel(@Valid DeviceTypeListReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeviceTypeDO> list = deviceTypeService.getDeviceTypePage(pageReqVO).getList();
List<DeviceTypeDO> deviceTypeList = deviceTypeService.getDeviceTypeList(pageReqVO);
List<DeviceTypeRespVO> deviceTypeRespVOList = BeanUtils.toBean(deviceTypeList, DeviceTypeRespVO.class);
// 创建ID到名称的映射
Map<Long, String> idToNameMap = deviceTypeList.stream()
.collect(Collectors.toMap(
DeviceTypeDO::getId,
DeviceTypeDO::getName,
(v1, v2) -> v1
));
// 设置父类名称
for (DeviceTypeRespVO deviceTypeRespVO : deviceTypeRespVOList) {
if (deviceTypeRespVO.getParentId() != null && deviceTypeRespVO.getParentId() > 0) {
// 从映射中获取父类名称
deviceTypeRespVO.setParentName(idToNameMap.getOrDefault(deviceTypeRespVO.getParentId(), ""));
} else {
deviceTypeRespVO.setParentName("顶级分类");
}
}
// 设置响应头
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")));
// 导出 Excel
ExcelUtils.write(response, "设备类型.xls", "数据", DeviceTypeRespVO.class,
BeanUtils.toBean(list, DeviceTypeRespVO.class));
ExcelUtils.write(response, fileName, "数据", DeviceTypeRespVO.class,deviceTypeRespVOList);
}
}

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@ -14,7 +15,7 @@ import com.alibaba.excel.annotation.*;
public class DeviceTypeRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3230")
@ExcelProperty("id")
// @ExcelProperty("id")
private Long id;
@Schema(description = "编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ -35,8 +36,13 @@ public class DeviceTypeRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "父设备类型名称", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("父设备类型名称")
private String parentName;
private Long parentId;
/** */

@ -6,6 +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.enums.RepairEnum;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums.StatusEnum;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketInspectionExportVO;
import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO;
@ -115,15 +117,22 @@ public class DvRepairController {
dvSubjectRespVO.setConfirmBy("(" + user.getUsername() + ")" + user.getNickname());
}
if (dvSubjectRespVO.getStatus() !=null) {
dvSubjectRespVO.setStatusName(dvSubjectRespVO.getStatus() != null ?
(dvSubjectRespVO.getStatus() == 0 ? "待完成" : "已完成") : null);
String statusName = StatusEnum.getDescriptionByCode(dvSubjectRespVO.getStatus());
dvSubjectRespVO.setStatusName(statusName);
}
if (dvSubjectRespVO.getRepairStatus() !=null) {
dvSubjectRespVO.setRepairStatusName(dvSubjectRespVO.getRepairStatus() != null ?
(dvSubjectRespVO.getRepairStatus() == 1 ? "通过" : "不通过") : null);
String repairStatusName = RepairEnum.getDescriptionByCode(dvSubjectRespVO.getRepairStatus());
dvSubjectRespVO.setRepairStatusName(repairStatusName);
}
}
// 设置响应头
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");
String fileName = String.format("设备维修记录_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
// 导出 Excel
ExcelUtils.write(response, "设备维修记录.xls", "数据", DvRepairRespVO.class,dvRepairRespVOList);
}

@ -0,0 +1,88 @@
package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 0- 1- 2-
*/
@Getter
public enum RepairEnum {
PENDING(0, "待维修"),
PASSED(1, "通过"),
FAILED(2, "不通过");
private final Integer code;
private final String description;
RepairEnum(Integer code, String description) {
this.code = code;
this.description = description;
}
/**
* code
*/
public static RepairEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (RepairEnum status : values()) {
if (status.getCode().equals(code)) {
return status;
}
}
return null;
}
/**
* code
*/
public static String getDescriptionByCode(Integer code) {
RepairEnum status = getByCode(code);
return status != null ? status.getDescription() : "未知";
}
/**
* code
*/
public static boolean isValidCode(Integer code) {
return getByCode(code) != null;
}
/**
* code
*/
public static List<Integer> getAllCodes() {
return Arrays.stream(values())
.map(RepairEnum::getCode)
.collect(Collectors.toList());
}
/**
*
*/
public static List<String> getAllDescriptions() {
return Arrays.stream(values())
.map(RepairEnum::getDescription)
.collect(Collectors.toList());
}
/**
* code
*/
public static Map<Integer, String> getCodeDescriptionMap() {
Map<Integer, String> map = new LinkedHashMap<>();
for (RepairEnum status : values()) {
map.put(status.getCode(), status.getDescription());
}
return map;
}
}

@ -0,0 +1,87 @@
package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 0- 1-
*/
@Getter
public enum StatusEnum {
PENDING(0, "待完成"),
COMPLETED(1, "已完成");
private final Integer code;
private final String description;
StatusEnum(Integer code, String description) {
this.code = code;
this.description = description;
}
/**
* code
*/
public static StatusEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (StatusEnum status : values()) {
if (status.getCode().equals(code)) {
return status;
}
}
return null;
}
/**
* code
*/
public static String getDescriptionByCode(Integer code) {
StatusEnum status = getByCode(code);
return status != null ? status.getDescription() : "未知";
}
/**
* code
*/
public static boolean isValidCode(Integer code) {
return getByCode(code) != null;
}
/**
* code
*/
public static List<Integer> getAllCodes() {
return Arrays.stream(values())
.map(StatusEnum::getCode)
.collect(Collectors.toList());
}
/**
*
*/
public static List<String> getAllDescriptions() {
return Arrays.stream(values())
.map(StatusEnum::getDescription)
.collect(Collectors.toList());
}
/**
* code
*/
public static Map<Integer, String> getCodeDescriptionMap() {
Map<Integer, String> map = new LinkedHashMap<>();
for (StatusEnum status : values()) {
map.put(status.getCode(), status.getDescription());
}
return map;
}
}

@ -2,6 +2,11 @@ package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo;
import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums.MoldRecordStatusEnum;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
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 io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -33,39 +38,52 @@ public class DvRepairRespVO {
// @ExcelProperty("设备ID")
private Long machineryId;
@Schema(description = "设备编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("设备编码")
private String machineryCode;
@Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("设备名称")
private String machineryName;
@Schema(description = "品牌")
@ExcelProperty("品牌")
private String machineryBrand;
@Schema(description = "设备编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("设备编码")
private String machineryCode;
// @Schema(description = "品牌")
// @ExcelProperty("品牌")
// private String machineryBrand;
@Schema(description = "规格型号")
@ExcelProperty("规格型号")
private String machinerySpec;
@Schema(description = "设备类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1622")
// @ExcelProperty(value = "设备类型", converter = DictConvert.class)
@ExcelProperty(value = "设备类型", converter = DictConvert.class)
@DictFormat("mes_machine_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Long machineryTypeId;
@Schema(description = "报修日期")
@ExcelProperty("报修日期")
@DateTimeFormat(fallbackPatterns = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@ColumnWidth(20)
private LocalDateTime requireDate;
@Schema(description = "完成日期")
@ExcelProperty("完成日期")
@DateTimeFormat(fallbackPatterns = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@ColumnWidth(20)
private LocalDateTime finishDate;
@Schema(description = "验收日期")
@ExcelProperty("验收日期")
@DateTimeFormat(fallbackPatterns = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@ColumnWidth(20)
private LocalDateTime confirmDate;
@ -81,18 +99,15 @@ public class DvRepairRespVO {
@ExcelProperty("验收人员")
private String confirmBy;
@Schema(description = "单据状态", example = "1")
@ExcelProperty(value = "单据状态 0-待完成 1-已完成")
@DictFormat("mes_mold_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
@Schema(description = "单据状态 0-待完成 1-已完成", example = "1")
private Integer status;
@Schema(description = "单据状态", example = "1")
@ExcelProperty(value = "单据状态 0-待完成 1-已完成")
@DictFormat("mes_mold_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
@ExcelProperty(value = "单据状态")
private String statusName;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
// @ExcelProperty("备注")
private String remark;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)

@ -121,31 +121,31 @@ public class DvSubjectController {
List<DvSubjectDO> list = dvSubjectService.getDvSubjectPage(pageReqVO).getList();
List<DvSubjectRespVO> dvSubjectRespVOList = BeanUtils.toBean(list, DvSubjectRespVO.class);
// 1. 获取字典数据
Map<String, Map<String, String>> dictData = getDictData();
// 1. 获取字典数据
// Map<String, Map<String, String>> dictData = getDictData();
for (DvSubjectRespVO dvSubjectRespVO : dvSubjectRespVOList) {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(dvSubjectRespVO.getCreator()));
dvSubjectRespVO.setCreatorName("(" + user.getUsername()+ ")" + user.getNickname());
// 转换检验方式字典值
if (StringUtils.isNotBlank(dvSubjectRespVO.getInspectionMethod())) {
String inspectionMethodLabel = dictData.get("Inspection_method")
.get(dvSubjectRespVO.getInspectionMethod());
if (StringUtils.isNotBlank(inspectionMethodLabel)) {
// 可以创建一个临时字段存储,或者直接替换原字段
dvSubjectRespVO.setInspectionMethod(inspectionMethodLabel);
}
}
// 转换值类型字典值
if (StringUtils.isNotBlank(dvSubjectRespVO.getValueType())) {
String valueTypeLabel = dictData.get("value_types")
.get(dvSubjectRespVO.getValueType());
if (StringUtils.isNotBlank(valueTypeLabel)) {
dvSubjectRespVO.setValueType(valueTypeLabel);
}
}
// // 转换检验方式字典值
// if (StringUtils.isNotBlank(dvSubjectRespVO.getInspectionMethod())) {
// String inspectionMethodLabel = dictData.get("Inspection_method")
// .get(dvSubjectRespVO.getInspectionMethod());
// if (StringUtils.isNotBlank(inspectionMethodLabel)) {
// // 可以创建一个临时字段存储,或者直接替换原字段
// dvSubjectRespVO.setInspectionMethod(inspectionMethodLabel);
// }
// }
//
// // 转换值类型字典值
// if (StringUtils.isNotBlank(dvSubjectRespVO.getValueType())) {
// String valueTypeLabel = dictData.get("value_types")
// .get(dvSubjectRespVO.getValueType());
// if (StringUtils.isNotBlank(valueTypeLabel)) {
// dvSubjectRespVO.setValueType(valueTypeLabel);
// }
// }
}
// 导出 Excel

@ -52,11 +52,13 @@ public class DvSubjectRespVO{
private LocalDateTime createTime;
@Schema(description = "检验方式")
@ExcelProperty("检验方式")
@ExcelProperty(value = "检验方式", converter = DictConvert.class)
@DictFormat("Inspection_method") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String inspectionMethod;
@Schema(description = "值类型")
@ExcelProperty("值类型")
@ExcelProperty(value = "值类型", converter = DictConvert.class)
@DictFormat("value_types") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String valueType;
@Schema(description = "判定基准")

@ -21,7 +21,10 @@ import javax.annotation.Resource;
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.List;
import java.util.Map;
@ -104,8 +107,6 @@ public class EnergyDeviceController {
return success(energyDeviceService.queryDataRecords(deviceConsumptionReqVO));
}
@GetMapping("/record-export-excel")
@Operation(summary = "导出数据记录 Excel")
@PreAuthorize("@ss.hasPermission('mes:energy-device:export')")

@ -29,12 +29,12 @@ public class EnergyDeviceRecordRespVO {
private String energyConsumption;
@Schema(description = "最新数据时间")
@ExcelProperty("开始时间")
@ExcelProperty("最新数据时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private String latestDataTime;
@Schema(description = "最早数据时间")
@ExcelProperty("结束时间")
@ExcelProperty("最早数据时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private String earliestDataTime;

@ -64,7 +64,8 @@ public class EnergyDeviceRespVO {
private String deviceTypeName;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否启用")
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean isEnable;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)

@ -12,6 +12,9 @@ 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;
@ -88,8 +91,16 @@ public class EnergyTypeController {
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<EnergyTypeDO> list = energyTypeService.getEnergyTypePage(pageReqVO).getList();
// 设置响应头
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")));
// 导出 Excel
ExcelUtils.write(response, "能耗类型.xls", "数据", EnergyTypeRespVO.class,
ExcelUtils.write(response, fileName, "数据", EnergyTypeRespVO.class,
BeanUtils.toBean(list, EnergyTypeRespVO.class));
}

@ -34,6 +34,7 @@ public class EnergyTypePageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "id集合导出用")
private String ids;
}

@ -1,5 +1,8 @@
package cn.iocoder.yudao.module.mes.controller.admin.energytype.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -13,7 +16,7 @@ import com.alibaba.excel.annotation.*;
public class EnergyTypeRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19123")
@ExcelProperty("ID")
// @ExcelProperty("ID")
private Long id;
@Schema(description = "能耗类型编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ -29,7 +32,8 @@ public class EnergyTypeRespVO {
private String unit;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否启用")
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean isEnable;
@Schema(description = "备注", example = "随便")
@ -38,6 +42,7 @@ public class EnergyTypeRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
}

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.PlanTypeEnum;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.vo.TicketManagementRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO;
@ -118,8 +119,14 @@ public class PlanMaintenanceController {
List<PlanMaintenanceRespVO> planMaintenanceRespVOS = BeanUtils.toBean(list, PlanMaintenanceRespVO.class);
for (PlanMaintenanceRespVO planMaintenanceRespVO : planMaintenanceRespVOS) {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
if(planMaintenanceRespVO.getCreator()!=null){
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
}
if (planMaintenanceRespVO.getPlanType()!=null){
String planName = PlanTypeEnum.getDescriptionByCode(planMaintenanceRespVO.getPlanType());
planMaintenanceRespVO.setPlanName(planName);
}
}
// 导出 Excel

@ -18,7 +18,7 @@ public class PlanMaintenancePageReqVO extends PageParam {
@Schema(description = "名称", example = "王五")
private String planName;
@Schema(description = "名称", example = "1")
@Schema(description = "类型", example = "1")
private Integer planType;
@Schema(description = "描述", example = "你猜")

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -14,16 +15,19 @@ import com.alibaba.excel.annotation.*;
public class PlanMaintenanceRespVO extends BaseDO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19033")
@ExcelProperty("id")
// @ExcelProperty("id")
private Long id;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@ExcelProperty("名称")
private String planName;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("名称")
private int planType;
@Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer planType;
@Schema(description = "类型名称", example = "你猜")
@ExcelProperty("类型名称")
private String planTypeName;
@Schema(description = "描述", example = "你猜")
@ExcelProperty("描述")
@ -31,6 +35,7 @@ public class PlanMaintenanceRespVO extends BaseDO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "项目集合ids")

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.mes.controller.admin.repairtems.vo;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -17,19 +18,19 @@ public class RepairTemsRespVO {
// @ExcelProperty("ID")
private Long id;
@Schema(description = "项目编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("项目编码")
@Schema(description = "维修编码", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("维修编码")
private String subjectCode;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("项目名称")
@Schema(description = "维修名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("维修名称")
private String subjectName;
@Schema(description = "设备类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer deviceType;
@Schema(description = "设备类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("项目名称")
@ExcelProperty("设备类型")
private String deviceTypeName;
@Schema(description = "设备id", example = "11632")
@ -58,6 +59,7 @@ public class RepairTemsRespVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "设备名称")
@ -72,8 +74,8 @@ public class RepairTemsRespVO {
@ExcelProperty("创建人名称")
private String creatorName;
@Schema(description = "项目内容")
@ExcelProperty("项目内容")
@Schema(description = "维修内容")
@ExcelProperty("维修内容")
private String projectContent;
}

@ -1,8 +1,13 @@
package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement;
import cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo.PlanMaintenanceRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.PlanTypeEnum;
import cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance.PlanMaintenanceDO;
import cn.iocoder.yudao.module.mes.service.planmaintenance.PlanMaintenanceService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jodd.util.StringUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -42,6 +47,8 @@ public class TaskManagementController {
@Resource
private TaskManagementService taskManagementService;
@Resource
private PlanMaintenanceService planMaintenanceService;
@Resource
private AdminUserApi adminUserApi;
@ -105,8 +112,51 @@ public class TaskManagementController {
List<TaskManagementRespVO> taskManagementRespVOList = BeanUtils.toBean(list, TaskManagementRespVO.class);
for (TaskManagementRespVO planMaintenanceRespVO : taskManagementRespVOList) {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
if (planMaintenanceRespVO.getCreator()!=null){
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
}
if (planMaintenanceRespVO.getProjectForm()!=null){
PlanMaintenanceDO planMaintenance = planMaintenanceService.getPlanMaintenance(planMaintenanceRespVO.getProjectForm());
planMaintenanceRespVO.setProjectFormName(planMaintenance.getPlanName());
}
if (planMaintenanceRespVO.getTaskType()!=null){
String planName = PlanTypeEnum.getDescriptionByCode(planMaintenanceRespVO.getTaskType());
planMaintenanceRespVO.setTypeName(planName);
}
//操作人
// if (StringUtils.isNotBlank(planMaintenanceRespVO.getOperableUsers())){
// List<Long> idList = Arrays.stream(planMaintenanceRespVO.getOperableUsers().split(","))
// .map(String::trim)
// .map(Long::valueOf)
// .collect(Collectors.toList());
//
// StringBuilder userInfoBuilder = new StringBuilder();
// for (int i = 0; i < idList.size(); i++) {
// Long id = idList.get(i);
// AdminUserRespDTO user = adminUserApi.getUser(id);
// if (user != null) {
// // 格式:(用户名)昵称
// userInfoBuilder.append("(")
// .append(user.getUsername())
// .append(")")
// .append(user.getNickname());
//
// // 如果不是最后一个,添加分隔符
// if (i < idList.size() - 1) {
// userInfoBuilder.append(", ");
// }
// }
// }
//
// if (userInfoBuilder.length() > 0) {
// planMaintenanceRespVO.setCreatorName(userInfoBuilder.toString());
// }
// }
}
// 导出 Excel
ExcelUtils.write(response, "设备类型.xls", "数据", TaskManagementRespVO.class,taskManagementRespVOList);
@ -133,9 +183,11 @@ public class TaskManagementController {
private PageResult<TaskManagementRespVO> buildPageCreatorName(PageResult<TaskManagementRespVO> planMaintenanceRespVOPageResult) {
for (TaskManagementRespVO planMaintenanceRespVO : planMaintenanceRespVOPageResult.getList()) {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
if (user!=null){
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
if (planMaintenanceRespVO.getCreator()!=null){
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(planMaintenanceRespVO.getCreator()));
if (user!=null){
planMaintenanceRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
}
}
}
return planMaintenanceRespVOPageResult;

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -29,17 +32,24 @@ public class TaskManagementRespVO extends BaseDO {
private String name;
@Schema(description = "类型(1-点检 2-保养)", example = "2")
@ExcelProperty("类型(1-点检 2-保养)")
private Integer taskType;
@Schema(description = "类型名称")
@ExcelProperty("类型名称")
private String TypeName;
@Schema(description = "设备列表")
@ExcelProperty("设备列表")
// @ExcelProperty("设备列表")
private String deviceList;
@Schema(description = "项目表单")
@ExcelProperty("项目表单")
private Long projectForm;
@Schema(description = "项目表单名称")
@ExcelProperty("项目表单名称")
private String projectFormName;
@Schema(description = "起止开始日期")
@ExcelProperty("起止开始日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@ -55,23 +65,23 @@ public class TaskManagementRespVO extends BaseDO {
private String cronExpression;
@Schema(description = "可操作人")
@ExcelProperty("可操作人")
// @ExcelProperty("可操作人")
private String operableUsers;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否启用")
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean enabled;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "创建人名字")
@ExcelProperty("创建人名字")
private String creatorName;
@Schema(description = "项目表单名称")
@ExcelProperty("项目表单名称")
private String projectFormName;
}

@ -3,6 +3,8 @@ 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.ticketmanagement.enums.JobResultEnum;
import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.PlanTypeEnum;
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;
@ -112,8 +114,19 @@ public class TicketManagementController {
List<TicketManagementDO> list = ticketManagementService.getTicketManagementPage(pageReqVO).getList();
List<TicketManagementRespVO> ticketManagementRespVOList = BeanUtils.toBean(list, TicketManagementRespVO.class);
for (TicketManagementRespVO ticketManagementRespVO : ticketManagementRespVOList) {
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(ticketManagementRespVO.getCreator()));
ticketManagementRespVO.setCreatorName( "(" + user.getUsername()+ ")" + user.getNickname());
if(ticketManagementRespVO.getOperator() != null){
AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(ticketManagementRespVO.getOperator()));
ticketManagementRespVO.setOperatorName( "(" + user.getUsername()+ ")" + user.getNickname());
}
if (ticketManagementRespVO.getPlanType()!=null){
String planName = PlanTypeEnum.getDescriptionByCode(ticketManagementRespVO.getPlanType());
ticketManagementRespVO.setPlanTypeName(planName);
}
if (ticketManagementRespVO.getJobResult()!=null){
String jobResultName = JobResultEnum.getDescriptionByCode(ticketManagementRespVO.getJobResult());
ticketManagementRespVO.setJobResultName(jobResultName); }
}
// 导出 Excel

@ -0,0 +1,88 @@
package cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 0- 1- 2-
*/
@Getter
public enum JobResultEnum {
PENDING(0, "待完成"),
PASSED(1, "通过"),
FAILED(2, "不通过");
private final Integer code;
private final String description;
JobResultEnum(Integer code, String description) {
this.code = code;
this.description = description;
}
/**
* code
*/
public static JobResultEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (JobResultEnum result : values()) {
if (result.getCode().equals(code)) {
return result;
}
}
return null;
}
/**
* code
*/
public static String getDescriptionByCode(Integer code) {
JobResultEnum result = getByCode(code);
return result != null ? result.getDescription() : "未知";
}
/**
* code
*/
public static boolean isValidCode(Integer code) {
return getByCode(code) != null;
}
/**
* code
*/
public static List<Integer> getAllCodes() {
return Arrays.stream(values())
.map(JobResultEnum::getCode)
.collect(Collectors.toList());
}
/**
*
*/
public static List<String> getAllDescriptions() {
return Arrays.stream(values())
.map(JobResultEnum::getDescription)
.collect(Collectors.toList());
}
/**
* code
*/
public static Map<Integer, String> getCodeDescriptionMap() {
Map<Integer, String> map = new LinkedHashMap<>();
for (JobResultEnum result : values()) {
map.put(result.getCode(), result.getDescription());
}
return map;
}
}

@ -39,7 +39,7 @@ public class TicketManagementPageReqVO extends PageParam {
private String configName;
@Schema(description = "作业状态", example = "1")
private Integer jobStatus;
private String jobStatus;
@Schema(description = "作业结果")
private String jobResult;

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -20,7 +23,7 @@ import com.alibaba.excel.annotation.*;
public class TicketManagementRespVO extends BaseDO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6566")
@ExcelProperty("id")
// @ExcelProperty("id")
private Long id;
@Schema(description = "任务Id", example = "21368")
@ -35,31 +38,34 @@ public class TicketManagementRespVO extends BaseDO {
@ExcelProperty("单号")
private String planNo;
@Schema(description = "类型类型(1-点检 2-保养)", example = "2")
// @ExcelProperty("类型")
private Integer planType;
@Schema(description = "类型名称", example = "2")
@ExcelProperty("类型名称")
private String planTypeName;
@Schema(description = "设备名称", example = "张三")
@ExcelProperty("设备名称")
private String deviceName;
@Schema(description = "类型", example = "2")
@ExcelProperty("类型")
private String planType;
@Schema(description = "计划配置名称", example = "赵六")
@ExcelProperty("计划配置名称")
private String configName;
@Schema(description = "作业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("作业状态")
private Integer jobStatus;
@Schema(description = "作业结果")
@ExcelProperty("作业结果")
private Integer jobResult;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@ExcelProperty(value = "作业状态", converter = DictConvert.class)
@DictFormat("job_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String jobStatus;
@Schema(description = "作业人")
private String operator;
@Schema(description = "作业人名称")
@ExcelProperty("作业人名称")
private String operatorName;
/**
*
@ -67,6 +73,8 @@ public class TicketManagementRespVO extends BaseDO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@ExcelProperty("作业时间")
@ColumnWidth(20)
private LocalDateTime taskTime;
/**
@ -75,18 +83,33 @@ public class TicketManagementRespVO extends BaseDO {
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@ExcelProperty("计划结束作业时间")
@ColumnWidth(20)
private LocalDateTime taskEndTime;
@Schema(description = "作业结果")
// @ExcelProperty("作业结果")
private Integer jobResult;
@Schema(description = "作业结果名称")
@ExcelProperty("作业结果名称")
private String jobResultName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
@ColumnWidth(20)
private LocalDateTime createTime;
@Schema(description = "创建人名字")
@ExcelProperty("创建人名字")
// @ExcelProperty("创建人名字")
private String creatorName;
@Schema(description = "作业人")
private String operator;
@Schema(description = "作业人名称")
@ExcelProperty("作业人名称")
private String operatorName;
}

@ -45,7 +45,7 @@ public class DeviceLedgerDO extends BaseDO {
/**
* (0-, 1-, 2-, 3-)
*/
private Integer deviceStatus;
private String deviceStatus;
/**
*
*/
@ -113,6 +113,12 @@ public class DeviceLedgerDO extends BaseDO {
*/
private String componentId;
/**
*
*/
@TableField(exist = false)
private String typeName;
/**
*
*/

@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair;
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.*;
import java.util.*;
import java.time.LocalDateTime;
@ -9,6 +14,7 @@ import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import org.springframework.format.annotation.DateTimeFormat;
/**
* DO
@ -67,14 +73,17 @@ public class DvRepairDO extends BaseDO {
/**
*
*/
private LocalDateTime requireDate;
/**
*
*/
private LocalDateTime finishDate;
/**
*
*/
private LocalDateTime confirmDate;
/**
*

@ -34,7 +34,7 @@ public class PlanMaintenanceDO extends BaseDO {
/**
* 1- 2-
*/
private int planType;
private Integer planType;
/**
*
*/

@ -61,7 +61,7 @@ public class TicketManagementDO extends BaseDO {
/**
* 0- 1- 2-
*/
private Integer jobStatus;
private String jobStatus;
/**
* 0- 1- 2-
*/

@ -1,12 +1,14 @@
package cn.iocoder.yudao.module.mes.dal.mysql.energytype;
import java.util.*;
import java.util.stream.Collectors;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.energytype.EnergyTypeDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.energytype.vo.*;
@ -19,14 +21,28 @@ import cn.iocoder.yudao.module.mes.controller.admin.energytype.vo.*;
public interface EnergyTypeMapper extends BaseMapperX<EnergyTypeDO> {
default PageResult<EnergyTypeDO> selectPage(EnergyTypePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<EnergyTypeDO>()
LambdaQueryWrapperX<EnergyTypeDO> wrapper = new LambdaQueryWrapperX<EnergyTypeDO>()
.eqIfPresent(EnergyTypeDO::getCode, reqVO.getCode())
.likeIfPresent(EnergyTypeDO::getName, reqVO.getName())
.eqIfPresent(EnergyTypeDO::getUnit, reqVO.getUnit())
.eqIfPresent(EnergyTypeDO::getIsEnable, reqVO.getIsEnable())
.eqIfPresent(EnergyTypeDO::getRemark, reqVO.getRemark())
.betweenIfPresent(EnergyTypeDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(EnergyTypeDO::getId));
.betweenIfPresent(EnergyTypeDO::getCreateTime, reqVO.getCreateTime());
// 只有在ids不为空时才加入过滤条件
if (StringUtils.isNotBlank(reqVO.getIds())) {
List<Long> idList = Arrays.stream(reqVO.getIds().split(","))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.map(Long::valueOf)
.collect(Collectors.toList());
if (!idList.isEmpty()) {
wrapper.in(EnergyTypeDO::getId, idList);
}
}
return selectPage(reqVO, wrapper.orderByDesc(EnergyTypeDO::getId));
}
default List<EnergyTypeDO> select() {

@ -6,10 +6,12 @@ import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO;
import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldMapper;
import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mold.MesMoldBrandDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mold.MesMoldDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.mes.dal.mysql.devicetype.DeviceTypeMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.mold.MesMoldMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper;
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
@ -79,6 +81,9 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
@Resource
private ErpProductUnitService productUnitService;
@Resource
private DeviceTypeMapper deviceTypeMapper;
@Override
public Long createDeviceLedger(DeviceLedgerSaveReqVO createReqVO) {
@ -234,6 +239,12 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
@Override
public PageResult<DeviceLedgerDO> getDeviceLedgerPage(DeviceLedgerPageReqVO pageReqVO) {
PageResult<DeviceLedgerDO> deviceLedgerDOPageResult = deviceLedgerMapper.selectPage(pageReqVO);
for (DeviceLedgerDO deviceLedgerDO : deviceLedgerDOPageResult.getList()) {
if (deviceLedgerDO.getDeviceType()!=null){
DeviceTypeDO deviceTypeDO = deviceTypeMapper.selectById(deviceLedgerDO.getDeviceType());
deviceLedgerDO.setTypeName(deviceTypeDO.getName());
}
}
return deviceLedgerDOPageResult;
}

@ -229,6 +229,14 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
Map<Long, List<DeviceTypeDO>> childrenMap = CollectionUtils.convertMultiMap(
allDeviceTypes, DeviceTypeDO::getParentId);
// 创建ID到名称的映射
Map<Long, String> parentNameMap = allDeviceTypes.stream()
.collect(Collectors.toMap(
DeviceTypeDO::getId,
DeviceTypeDO::getName,
(v1, v2) -> v1
));
// 获取根节点parentId为空或0
List<DeviceTypeDO> rootDeviceTypes = childrenMap.getOrDefault(0L, Collections.emptyList());
rootDeviceTypes.addAll(childrenMap.getOrDefault(null, Collections.emptyList()));
@ -239,7 +247,7 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
// 递归构建树
return rootDeviceTypes.stream()
.map(deviceType -> convertToTree(deviceType, childrenMap))
.map(deviceType -> convertToTree(deviceType, childrenMap,parentNameMap))
.collect(Collectors.toList());
}
@ -247,9 +255,18 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
*
*/
private DeviceTypeTreeRespVO convertToTree(DeviceTypeDO deviceType,
Map<Long, List<DeviceTypeDO>> childrenMap) {
Map<Long, List<DeviceTypeDO>> childrenMap,Map<Long, String> parentNameMap) {
DeviceTypeTreeRespVO treeNode = BeanUtils.toBean(deviceType, DeviceTypeTreeRespVO.class);
// 设置父类名称
if (deviceType.getParentId() != null && deviceType.getParentId() > 0) {
treeNode.setParentName(parentNameMap.getOrDefault(deviceType.getParentId(), ""));
} else {
treeNode.setParentName("顶级分类");
}
// 获取子节点
List<DeviceTypeDO> children = childrenMap.getOrDefault(deviceType.getId(), Collections.emptyList());
@ -260,7 +277,7 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
// 递归转换子节点
List<DeviceTypeTreeRespVO> childNodes = children.stream()
.map(child -> convertToTree(child, childrenMap))
.map(child -> convertToTree(child, childrenMap,parentNameMap))
.collect(Collectors.toList());
treeNode.setChildren(childNodes);

@ -697,7 +697,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService {
List<Map<String, Object>> maps = null;
try {
maps = tDengineService.getstDeviceDataOrderByTimeDesc(
rule.getDeviceId(), startTime, endTime);
rule.getDeviceId(), startTime, endTime,null);
} catch (Exception e) {
log.error("查询设备数据失败, deviceId: {}", rule.getDeviceId(), e);
continue;

@ -161,7 +161,7 @@ public class TicketResultsServiceImpl implements TicketResultsService {
}
ticketManagementDO.setTaskTime(LocalDateTime.now());
//设置为已完成
ticketManagementDO.setJobStatus(1);
ticketManagementDO.setJobStatus("1");
// 检查是否有不通过的
boolean hasFail = updateReqVOList.stream()
.anyMatch(vo -> vo.getInspectionResult() != null && vo.getInspectionResult().equals(JobResultEnum.FAIL.getCode()));

Loading…
Cancel
Save