Commit 9599cbae6f52ebf5c2a20bf4b60663a0140c90e0

Authored by 胡翰林
1 parent d005ccf7

设备管理

故障原因管理接口
设备报修维修接口
Showing 24 changed files with 1105 additions and 0 deletions
  1 +CREATE TABLE "public"."qg_malfunction_reason" (
  2 + "id" varchar(36) NOT NULL,
  3 + "code" varchar(50),
  4 + "reason" varchar(200),
  5 + "tenant_id" varchar(36),
  6 + "create_time" timestamp(6),
  7 + "creator" varchar(36),
  8 + "updater" varchar(36),
  9 + "update_time" timestamp(6),
  10 + "remark" varchar(255),
  11 + CONSTRAINT "qg_malfunction_reason_pkey" PRIMARY KEY ("id")
  12 +);
  13 +
  14 +ALTER TABLE "public"."qg_malfunction_reason" OWNER TO "postgres";
  15 +
  16 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."id" IS '主键ID';
  17 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."code" IS '故障编码';
  18 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."reason" IS '故障原因';
  19 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."tenant_id" IS '租户ID';
  20 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."create_time" IS '创建时间';
  21 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."updater" IS '更新用户';
  22 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."update_time" IS '更新时间';
  23 +COMMENT ON COLUMN "public"."qg_malfunction_reason"."creator" IS '创建用户';
  24 +
  25 +
  26 +ALTER TABLE device
  27 + ADD COLUMN IF NOT EXISTS director_id varchar(36);
  28 +
  29 +COMMENT ON COLUMN "public"."device"."director_id" IS '负责人id';
  30 +
  31 +
  32 +CREATE TABLE "public"."qg_repair_order" (
  33 + "id" varchar(36) NOT NULL,
  34 + "device_id" varchar(36),
  35 + "report_date" timestamp(6),
  36 + "report_by" varchar(36),
  37 + "status" varchar(50),
  38 + "emergency" bool,
  39 + "situation_img" varchar(200),
  40 + "description" varchar(500),
  41 + "tenant_id" varchar(36),
  42 + "create_time" timestamp(6),
  43 + "creator" varchar(36),
  44 + "updater" varchar(36),
  45 + "update_time" timestamp(6),
  46 + "remark" varchar(255),
  47 + CONSTRAINT "qg_repair_order_pkey" PRIMARY KEY ("id")
  48 +);
  49 +
  50 +ALTER TABLE "public"."qg_repair_order" OWNER TO "postgres";
  51 +
  52 +COMMENT ON COLUMN "public"."qg_repair_order"."id" IS '主键ID';
  53 +COMMENT ON COLUMN "public"."qg_repair_order"."device_id" IS '设备id';
  54 +COMMENT ON COLUMN "public"."qg_repair_order"."report_date" IS '报修时间';
  55 +COMMENT ON COLUMN "public"."qg_repair_order"."report_by" IS '报修人';
  56 +COMMENT ON COLUMN "public"."qg_repair_order"."report_by" IS '报修人';
  57 +COMMENT ON COLUMN "public"."qg_repair_order"."status" IS '工单状态';
  58 +COMMENT ON COLUMN "public"."qg_repair_order"."emergency" IS '是否紧急';
  59 +COMMENT ON COLUMN "public"."qg_repair_order"."situation_img" IS 'situation_img';
  60 +COMMENT ON COLUMN "public"."qg_repair_order"."tenant_id" IS '租户ID';
  61 +COMMENT ON COLUMN "public"."qg_repair_order"."create_time" IS '创建时间';
  62 +COMMENT ON COLUMN "public"."qg_repair_order"."updater" IS '更新用户';
  63 +COMMENT ON COLUMN "public"."qg_repair_order"."update_time" IS '更新时间';
  64 +COMMENT ON COLUMN "public"."qg_repair_order"."creator" IS '创建用户';
  65 +
  66 +
  67 +CREATE TABLE "public"."qg_repair_record" (
  68 + "id" varchar(36) NOT NULL,
  69 + "order_id" varchar(36),
  70 + "repair_date" timestamp(6),
  71 + "repair_by" varchar(36),
  72 + "description" varchar(500),
  73 + "tenant_id" varchar(36),
  74 + "create_time" timestamp(6),
  75 + "creator" varchar(36),
  76 + "updater" varchar(36),
  77 + "update_time" timestamp(6),
  78 + "remark" varchar(255),
  79 + CONSTRAINT "qg_repair_record_pkey" PRIMARY KEY ("id")
  80 +);
  81 +
  82 +ALTER TABLE "public"."qg_repair_record" OWNER TO "postgres";
  83 +
  84 +COMMENT ON COLUMN "public"."qg_repair_record"."id" IS '主键ID';
  85 +COMMENT ON COLUMN "public"."qg_repair_record"."order_id" IS '维修工单id';
  86 +COMMENT ON COLUMN "public"."qg_repair_record"."repair_date" IS '维修时间';
  87 +COMMENT ON COLUMN "public"."qg_repair_record"."repair_by" IS '维修人';
  88 +COMMENT ON COLUMN "public"."qg_repair_record"."description" IS '维修情况说明';
  89 +COMMENT ON COLUMN "public"."qg_repair_record"."tenant_id" IS '租户ID';
  90 +COMMENT ON COLUMN "public"."qg_repair_record"."create_time" IS '创建时间';
  91 +COMMENT ON COLUMN "public"."qg_repair_record"."updater" IS '更新用户';
  92 +COMMENT ON COLUMN "public"."qg_repair_record"."update_time" IS '更新时间';
  93 +COMMENT ON COLUMN "public"."qg_repair_record"."creator" IS '创建用户';
\ No newline at end of file
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.springframework.http.ResponseEntity;
  8 +import org.springframework.security.access.prepost.PreAuthorize;
  9 +import org.springframework.web.bind.annotation.*;
  10 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  11 +import org.thingsboard.server.common.data.yunteng.dto.TkMalfunctionReasonDTO;
  12 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  13 +import org.thingsboard.server.controller.BaseController;
  14 +import org.thingsboard.server.dao.yunteng.service.TkMalfunctionReasonService;
  15 +import org.thingsboard.server.queue.util.TbCoreComponent;
  16 +
  17 +import java.util.List;
  18 +import java.util.Map;
  19 +
  20 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  21 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  22 +
  23 +@RestController
  24 +@TbCoreComponent
  25 +@RequiredArgsConstructor
  26 +@RequestMapping("api/yt/mr")
  27 +@Api(tags = {"故障原因管理"})
  28 +@Slf4j
  29 +public class TkMalfunctionReasonController extends BaseController {
  30 + private final TkMalfunctionReasonService tkMalfunctionReasonService;
  31 +
  32 + @PostMapping("/pageData")
  33 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  34 + @ApiOperation("获取满足条件的所有设备")
  35 + public TkPageData<TkMalfunctionReasonDTO> pageMalfunctionReason(
  36 + @RequestParam(PAGE_SIZE) int pageSize,
  37 + @RequestParam(PAGE) int page,
  38 + @RequestBody Map<String, Object> queryMap)
  39 + throws ThingsboardException {
  40 + queryMap.put(PAGE, page);
  41 + queryMap.put(PAGE_SIZE, pageSize);
  42 + return tkMalfunctionReasonService.page(getCurrentUser().getCurrentTenantId(), queryMap);
  43 + }
  44 +
  45 + @PostMapping("/list")
  46 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  47 + @ApiOperation("获取满足条件的所有设备")
  48 + public List<TkMalfunctionReasonDTO> list(
  49 + @RequestBody Map<String, Object> queryMap) throws ThingsboardException {
  50 +
  51 + return tkMalfunctionReasonService.list(getCurrentUser().getCurrentTenantId(), queryMap);
  52 + }
  53 +
  54 + @PostMapping("/save")
  55 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  56 + public ResponseEntity<TkMalfunctionReasonDTO> save(@RequestBody TkMalfunctionReasonDTO tkMalfunctionReasonDTO) throws ThingsboardException {
  57 + tkMalfunctionReasonDTO.setTenantId(getCurrentUser().getCurrentTenantId());
  58 + TkMalfunctionReasonDTO deviceDTO = tkMalfunctionReasonService.save(tkMalfunctionReasonDTO);
  59 + return ResponseEntity.ok(deviceDTO);
  60 + }
  61 +
  62 + @GetMapping("/delete")
  63 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  64 + public ResponseEntity<Boolean> delete(@RequestParam("id") String id) throws ThingsboardException {
  65 + return ResponseEntity.ok(tkMalfunctionReasonService.delete(id));
  66 + }
  67 +
  68 +
  69 +}
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.http.ResponseEntity;
  9 +import org.springframework.security.access.prepost.PreAuthorize;
  10 +import org.springframework.web.bind.annotation.*;
  11 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  12 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  13 +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  15 +import org.thingsboard.server.common.data.yunteng.enums.RepairOrderStatusEnum;
  16 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.yunteng.service.TkDeviceService;
  19 +import org.thingsboard.server.dao.yunteng.service.TkRepairOrderService;
  20 +import org.thingsboard.server.queue.util.TbCoreComponent;
  21 +
  22 +import java.util.UUID;
  23 +
  24 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  25 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  26 +
  27 +@RestController
  28 +@TbCoreComponent
  29 +@RequiredArgsConstructor
  30 +@RequestMapping("api/yt/repairOrder")
  31 +@Api(tags = {"维修工单管理"})
  32 +@Slf4j
  33 +public class TkRepairOrderController extends BaseController {
  34 +
  35 + private final TkRepairOrderService tkRepairOrderService;
  36 +
  37 + private final TkDeviceService tkdeviceService;
  38 +
  39 + @PostMapping("/save")
  40 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  41 + @ApiOperation("维修工单保存")
  42 + public ResponseEntity<TkRepairOrderDTO> save(@RequestBody TkRepairOrderDTO dto) throws ThingsboardException {
  43 + String currentTenantId = getCurrentUser().getCurrentTenantId();
  44 + dto.setTenantId(currentTenantId);
  45 + if (StringUtils.isNotBlank(dto.getDeviceId())) {
  46 + DeviceDTO deviceInfo = tkdeviceService.checkDeviceByTenantIdAndDeviceId
  47 + (UUID.fromString(currentTenantId), UUID.fromString(dto.getDeviceId()));
  48 + if (deviceInfo == null) {
  49 + throw new TkDataValidationException("设备不存在!");
  50 + }
  51 + }
  52 +
  53 + if (StringUtils.isBlank(dto.getId())) {
  54 + TkRepairOrderDTO roInfo = tkRepairOrderService.loadByDeviceId(dto.getDeviceId());
  55 + if (roInfo != null && RepairOrderStatusEnum.valueOf(roInfo.getStatus()) == RepairOrderStatusEnum.SCHEDULING) {
  56 + throw new TkDataValidationException("该设备已报修!");
  57 + }
  58 + }
  59 +
  60 + if (StringUtils.isBlank(dto.getStatus())) {
  61 + dto.setStatus(RepairOrderStatusEnum.SCHEDULING.name());
  62 + }
  63 +
  64 + TkRepairOrderDTO deviceDTO = tkRepairOrderService.save(dto);
  65 + return ResponseEntity.ok(deviceDTO);
  66 + }
  67 +
  68 + @GetMapping("/delete")
  69 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  70 + @ApiOperation("维修工单删除")
  71 + public ResponseEntity<Boolean> delete(@RequestParam("id") String id) throws ThingsboardException {
  72 + return ResponseEntity.ok(tkRepairOrderService.delete(id));
  73 + }
  74 +
  75 + @GetMapping("/detail")
  76 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  77 + @ApiOperation("维修工单详情")
  78 + public ResponseEntity<TkRepairOrderDTO> detail(@RequestParam("id") String id) throws ThingsboardException {
  79 + TkRepairOrderDTO deviceDTO = tkRepairOrderService.detail(id);
  80 + return ResponseEntity.ok(deviceDTO);
  81 + }
  82 +
  83 + @PostMapping("/pageData")
  84 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  85 + @ApiOperation("维修工单列表")
  86 + public TkPageData<TkRepairOrderDTO> pageMalfunctionReason(
  87 + @RequestParam(PAGE_SIZE) int pageSize,
  88 + @RequestParam(PAGE) int page,
  89 + @RequestBody TkRepairOrderDTO params)
  90 + throws ThingsboardException {
  91 + params.setPage(page);
  92 + params.setPageSize(pageSize);
  93 + return tkRepairOrderService.page(getCurrentUser().getCurrentTenantId(), params);
  94 + }
  95 +}
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.http.ResponseEntity;
  9 +import org.springframework.security.access.prepost.PreAuthorize;
  10 +import org.springframework.web.bind.annotation.*;
  11 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  12 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  13 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairRecordDTO;
  15 +import org.thingsboard.server.common.data.yunteng.enums.RepairOrderStatusEnum;
  16 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  17 +import org.thingsboard.server.controller.BaseController;
  18 +import org.thingsboard.server.dao.yunteng.service.TkRepairOrderService;
  19 +import org.thingsboard.server.dao.yunteng.service.TkRepairRecordService;
  20 +import org.thingsboard.server.queue.util.TbCoreComponent;
  21 +
  22 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  23 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  24 +
  25 +@RestController
  26 +@TbCoreComponent
  27 +@RequiredArgsConstructor
  28 +@RequestMapping("api/yt/repairRecord")
  29 +@Api(tags = {"维修记录"})
  30 +@Slf4j
  31 +public class TkRepairRecordController extends BaseController {
  32 + private final TkRepairRecordService tkRepairRecordService;
  33 +
  34 + private final TkRepairOrderService tkRepairOrderService;
  35 +
  36 + @PostMapping("/save")
  37 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  38 + @ApiOperation("维修记录保存")
  39 + public ResponseEntity<TkRepairRecordDTO> save(@RequestBody TkRepairRecordDTO dto) throws ThingsboardException {
  40 + String currentTenantId = getCurrentUser().getCurrentTenantId();
  41 + dto.setTenantId(currentTenantId);
  42 + if (StringUtils.isNotBlank(dto.getOrderId())) {
  43 + TkRepairOrderDTO repairOrderDTO = tkRepairOrderService.load(dto.getOrderId());
  44 + if (repairOrderDTO == null) {
  45 + throw new TkDataValidationException("维修工单不存在!");
  46 + }
  47 + }
  48 +
  49 +
  50 + TkRepairRecordDTO deviceDTO = tkRepairRecordService.save(dto);
  51 +
  52 + tkRepairOrderService.updateStatus(dto.getOrderId(),RepairOrderStatusEnum.REPAIRFINISH.name());
  53 + return ResponseEntity.ok(deviceDTO);
  54 + }
  55 +
  56 + @GetMapping("/delete")
  57 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  58 + @ApiOperation("维修记录删除")
  59 + public ResponseEntity<Boolean> delete(@RequestParam("id") String id) throws ThingsboardException {
  60 + return ResponseEntity.ok(tkRepairRecordService.delete(id));
  61 + }
  62 +
  63 + @GetMapping("/detail")
  64 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  65 + @ApiOperation("维修记录详情")
  66 + public ResponseEntity<TkRepairRecordDTO> detail(@RequestParam("id") String id) throws ThingsboardException {
  67 + TkRepairRecordDTO dto = tkRepairRecordService.detail(id);
  68 + return ResponseEntity.ok(dto);
  69 + }
  70 +
  71 + @PostMapping("/pageData")
  72 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN','CUSTOMER_USER')")
  73 + @ApiOperation("维修工单列表")
  74 + public TkPageData<TkRepairRecordDTO> page(
  75 + @RequestParam(PAGE_SIZE) int pageSize,
  76 + @RequestParam(PAGE) int page,
  77 + @RequestBody TkRepairRecordDTO params)
  78 + throws ThingsboardException {
  79 + params.setPage(page);
  80 + params.setPageSize(pageSize);
  81 + return tkRepairRecordService.page(getCurrentUser().getCurrentTenantId(), params);
  82 + }
  83 +}
... ...
... ... @@ -141,4 +141,6 @@ public class DeviceDTO extends TenantDTO {
141 141 private String organizationName;
142 142 @ApiModelProperty(value = "是否来自边端")
143 143 private Integer isEdge;
  144 + @ApiModelProperty(value = "设备负责人id")
  145 + private String directorId;
144 146 }
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +
  7 +@EqualsAndHashCode(callSuper = true)
  8 +@Data
  9 +public class TkMalfunctionReasonDTO extends TenantDTO {
  10 +
  11 + @ApiModelProperty(value = "故障编码")
  12 + private String code;
  13 +
  14 + @ApiModelProperty(value = "原因")
  15 + private String reason;
  16 +}
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  5 +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
  6 +import io.swagger.annotations.ApiModelProperty;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@Data
  14 +public class TkRepairOrderDTO extends TenantDTO {
  15 +
  16 + @ApiModelProperty(value = "设备id")
  17 + private String deviceId;
  18 +
  19 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  20 + @ApiModelProperty(value = "报修时间")
  21 + @JsonSerialize(using = LocalDateTimeSerializer.class)
  22 + private LocalDateTime reportDate;
  23 +
  24 + @ApiModelProperty(value = "报修人")
  25 + private String reportBy;
  26 +
  27 + @ApiModelProperty(value = "状态(RepairOrderStatusEnum) SCHEDULING排期中 REPAIRFINISH维修完成 ACCEPTANCEPASSED验收通过")
  28 + private String status;
  29 +
  30 + @ApiModelProperty(value = "是否紧急")
  31 + private Boolean emergency;
  32 +
  33 + @ApiModelProperty(value = "故障情况拍照")
  34 + private String situationImg;
  35 +
  36 + @ApiModelProperty(value = "故障描述")
  37 + private String description;
  38 +
  39 + @ApiModelProperty(value = "关联设备")
  40 + private DeviceDTO deviceInfo;
  41 +
  42 + @ApiModelProperty(value = "查询开始时间")
  43 + private LocalDateTime startDate;
  44 +
  45 + @ApiModelProperty(value = "查询开始结束")
  46 + private LocalDateTime endDate;
  47 +
  48 + @ApiModelProperty(value = "页号")
  49 + private Integer page;
  50 +
  51 + @ApiModelProperty(value = "页码")
  52 + private Integer pageSize;
  53 +
  54 +}
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  5 +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
  6 +import io.swagger.annotations.ApiModelProperty;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@Data
  14 +public class TkRepairRecordDTO extends TenantDTO {
  15 +
  16 + @ApiModelProperty(value = "维修工单id")
  17 + private String orderId;
  18 +
  19 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  20 + @ApiModelProperty(value = "维修时间")
  21 + @JsonSerialize(using = LocalDateTimeSerializer.class)
  22 + private LocalDateTime repairDate;
  23 +
  24 + @ApiModelProperty(value = "维修人id")
  25 + private String repairBy;
  26 +
  27 + @ApiModelProperty(value = "维修人姓名")
  28 + private String repairName;
  29 +
  30 + @ApiModelProperty(value = "维修情况说明")
  31 + private String description;
  32 +
  33 + @ApiModelProperty(value = "维修工单")
  34 + private TkRepairOrderDTO tkRepairOrderDTO;
  35 +
  36 + @ApiModelProperty(value = "查询开始时间")
  37 + private LocalDateTime startDate;
  38 +
  39 + @ApiModelProperty(value = "查询开始结束")
  40 + private LocalDateTime endDate;
  41 +
  42 + @ApiModelProperty(value = "页号")
  43 + private Integer page;
  44 +
  45 + @ApiModelProperty(value = "页码")
  46 + private Integer pageSize;
  47 +
  48 +}
... ...
  1 +package org.thingsboard.server.common.data.yunteng.enums;
  2 +
  3 +public enum RepairOrderStatusEnum {
  4 + //排期中
  5 + SCHEDULING,
  6 + //维修完成
  7 + REPAIRFINISH,
  8 + //验收通过
  9 + ACCEPTANCEPASSED
  10 +}
... ...
... ... @@ -666,6 +666,21 @@ public class ModelConstants {
666 666 public static final String NOTIFICATION_TEMPLATE_NOTIFICATION_TYPE_PROPERTY = "notification_type";
667 667 public static final String NOTIFICATION_TEMPLATE_CONFIGURATION_PROPERTY = "configuration";
668 668
  669 + /**
  670 + * 故障原因.
  671 + */
  672 + public static final String MALFUNCTIONREASON_TABLE_NAME = "qg_malfunction_reason";
  673 +
  674 + /**
  675 + * 维修工单
  676 + */
  677 + public static final String TKREPAIRORDER_TABLE_NAME = "qg_repair_order";
  678 +
  679 + /**
  680 + * 维修记录
  681 + */
  682 + public static final String TKREPAIRRECORD_TABLE_NAME = "qg_repair_record";
  683 +
669 684 protected static final String[] NONE_AGGREGATION_COLUMNS = new String[]{LONG_VALUE_COLUMN, DOUBLE_VALUE_COLUMN, BOOLEAN_VALUE_COLUMN, STRING_VALUE_COLUMN, JSON_VALUE_COLUMN, KEY_COLUMN, TS_COLUMN};
670 685
671 686 protected static final String[] COUNT_AGGREGATION_COLUMNS = new String[]{count(LONG_VALUE_COLUMN), count(DOUBLE_VALUE_COLUMN), count(BOOLEAN_VALUE_COLUMN), count(STRING_VALUE_COLUMN), count(JSON_VALUE_COLUMN), max(TS_COLUMN)};
... ...
... ... @@ -88,5 +88,6 @@ public class TkDeviceEntity extends TbTenantBaseEntity {
88 88 @TableField(exist = false)
89 89 private Integer isEdge;
90 90
  91 + private String directorId;
91 92
92 93 }
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.dao.model.ModelConstants;
  7 +
  8 +/**
  9 + * 故障原因
  10 + */
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@TableName(value = ModelConstants.MALFUNCTIONREASON_TABLE_NAME, autoResultMap = true)
  14 +public class TkMalfunctionReasonEntity extends TenantBaseEntity {
  15 + private String code;
  16 + private String reason;
  17 +
  18 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.dao.model.ModelConstants;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +/**
  11 + * 维修工单
  12 + */
  13 +@Data
  14 +@EqualsAndHashCode(callSuper = true)
  15 +@TableName(value = ModelConstants.TKREPAIRORDER_TABLE_NAME, autoResultMap = true)
  16 +public class TkRepairOrderEntity extends TenantBaseEntity {
  17 +
  18 + private String deviceId;
  19 +
  20 + private LocalDateTime reportDate;
  21 +
  22 + private String reportBy;
  23 +
  24 + private String status;
  25 +
  26 + private Boolean emergency;
  27 +
  28 + private String situationImg;
  29 +
  30 + private String description;
  31 +
  32 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.dao.model.ModelConstants;
  7 +
  8 +import java.time.LocalDateTime;
  9 +
  10 +/**
  11 + * 维修记录
  12 + */
  13 +@Data
  14 +@EqualsAndHashCode(callSuper = true)
  15 +@TableName(value = ModelConstants.TKREPAIRRECORD_TABLE_NAME, autoResultMap = true)
  16 +public class TkRepairRecordEntity extends TenantBaseEntity {
  17 +
  18 + private String orderId;
  19 +
  20 + private LocalDateTime repairDate;
  21 +
  22 + private String repairBy;
  23 +
  24 + private String description;
  25 +
  26 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import lombok.RequiredArgsConstructor;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.springframework.stereotype.Service;
  10 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  11 +import org.thingsboard.server.common.data.yunteng.dto.TkMalfunctionReasonDTO;
  12 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  13 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  14 +import org.thingsboard.server.dao.yunteng.entities.TkMalfunctionReasonEntity;
  15 +import org.thingsboard.server.dao.yunteng.mapper.TkMalfunctionReasonMapper;
  16 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  17 +import org.thingsboard.server.dao.yunteng.service.TkMalfunctionReasonService;
  18 +
  19 +import java.util.List;
  20 +import java.util.Map;
  21 +import java.util.Optional;
  22 +import java.util.stream.Collectors;
  23 +
  24 +@Service
  25 +@RequiredArgsConstructor
  26 +@Slf4j
  27 +public class TkMalfunctionReasonServiceImpl extends AbstractBaseService<TkMalfunctionReasonMapper, TkMalfunctionReasonEntity>
  28 + implements TkMalfunctionReasonService {
  29 + @Override
  30 + public TkPageData<TkMalfunctionReasonDTO> page(String tenantId, Map<String, Object> queryMap) {
  31 +
  32 + QueryWrapper<TkMalfunctionReasonEntity> wrapper = new QueryWrapper<>();
  33 + LambdaQueryWrapper<TkMalfunctionReasonEntity> lambda = wrapper.lambda();
  34 + lambda.eq(TkMalfunctionReasonEntity::getTenantId, tenantId);
  35 + if (queryMap != null && queryMap.get("code") != null) {
  36 + lambda.eq(TkMalfunctionReasonEntity::getCode, queryMap.get("code").toString());
  37 + }
  38 + if (queryMap != null && queryMap.get("reason") != null) {
  39 + lambda.eq(TkMalfunctionReasonEntity::getReason, queryMap.get("reason").toString());
  40 + }
  41 +
  42 + IPage<TkMalfunctionReasonEntity> page = baseMapper.selectPage(
  43 + getPage(queryMap, "create_time", false), wrapper);
  44 +
  45 + return getPageData(page, TkMalfunctionReasonDTO.class);
  46 + }
  47 +
  48 + @Override
  49 + public List<TkMalfunctionReasonDTO> list(String tenantId, Map<String, Object> queryMap) {
  50 + QueryWrapper<TkMalfunctionReasonEntity> wrapper = new QueryWrapper<>();
  51 + LambdaQueryWrapper<TkMalfunctionReasonEntity> lambda = wrapper.lambda();
  52 + lambda.eq(TkMalfunctionReasonEntity::getTenantId, tenantId);
  53 + if (queryMap != null && queryMap.get("code") != null) {
  54 + lambda.eq(TkMalfunctionReasonEntity::getCode, queryMap.get("code").toString());
  55 + }
  56 + if (queryMap != null && queryMap.get("reason") != null) {
  57 + lambda.eq(TkMalfunctionReasonEntity::getReason, queryMap.get("reason").toString());
  58 + }
  59 + List<TkMalfunctionReasonEntity> entitys = baseMapper.selectList(wrapper);
  60 + return Optional.ofNullable(entitys).map(all -> all.stream().map(item -> item.getDTO(TkMalfunctionReasonDTO.class))
  61 + .collect(Collectors.toList())).orElse(null);
  62 +
  63 + }
  64 +
  65 + @Override
  66 + public TkMalfunctionReasonDTO save(TkMalfunctionReasonDTO tkMalfunctionReasonDTO) {
  67 + checkDto(tkMalfunctionReasonDTO);
  68 + TkMalfunctionReasonEntity entity = new TkMalfunctionReasonEntity();
  69 + if (StringUtils.isBlank(tkMalfunctionReasonDTO.getId())) {
  70 + tkMalfunctionReasonDTO.copyToEntity(entity);
  71 + baseMapper.insert(entity);
  72 + } else {
  73 + LambdaQueryWrapper<TkMalfunctionReasonEntity> filter = new QueryWrapper<TkMalfunctionReasonEntity>().lambda()
  74 + .eq(TkMalfunctionReasonEntity::getId, tkMalfunctionReasonDTO.getId());
  75 + entity = tkMalfunctionReasonDTO.getEntity(TkMalfunctionReasonEntity.class);
  76 + baseMapper.update(entity, filter);
  77 + }
  78 +
  79 +
  80 + entity.copyToDTO(tkMalfunctionReasonDTO);
  81 + return tkMalfunctionReasonDTO;
  82 + }
  83 +
  84 + private void checkDto(TkMalfunctionReasonDTO dto) {
  85 + if (StringUtils.isBlank(dto.getTenantId())) {
  86 + throw new TkDataValidationException("租户id为空!");
  87 + }
  88 + }
  89 +
  90 + @Override
  91 + public boolean delete(String id) {
  92 + int count = baseMapper.deleteById(id);
  93 + return count > 0;
  94 + }
  95 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import lombok.RequiredArgsConstructor;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.apache.commons.collections4.CollectionUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.springframework.stereotype.Service;
  11 +import org.thingsboard.server.common.data.User;
  12 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  13 +import org.thingsboard.server.common.data.id.TenantId;
  14 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  15 +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
  16 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  17 +import org.thingsboard.server.common.data.yunteng.enums.RepairOrderStatusEnum;
  18 +import org.thingsboard.server.common.data.yunteng.utils.CopyUtils;
  19 +import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
  20 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  21 +import org.thingsboard.server.dao.yunteng.entities.TenantBaseEntity;
  22 +import org.thingsboard.server.dao.yunteng.entities.TkRepairOrderEntity;
  23 +import org.thingsboard.server.dao.yunteng.mapper.TkRepairOrderMapper;
  24 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  25 +import org.thingsboard.server.dao.yunteng.service.TkDeviceService;
  26 +import org.thingsboard.server.dao.yunteng.service.TkRepairOrderService;
  27 +
  28 +import java.time.LocalDateTime;
  29 +import java.util.HashMap;
  30 +import java.util.List;
  31 +import java.util.Map;
  32 +import java.util.UUID;
  33 +import java.util.stream.Collectors;
  34 +
  35 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  36 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  37 +
  38 +@Service
  39 +@RequiredArgsConstructor
  40 +@Slf4j
  41 +public class TkRepairOrderServiceImpl extends AbstractBaseService<TkRepairOrderMapper, TkRepairOrderEntity>
  42 + implements TkRepairOrderService {
  43 +
  44 + private final TkDeviceService tkdeviceService;
  45 +
  46 + @Override
  47 + public TkPageData<TkRepairOrderDTO> page(String tenantId, TkRepairOrderDTO params) {
  48 + QueryWrapper<TkRepairOrderEntity> queryWrapper = getCondition(tenantId, params);
  49 + getCondition(tenantId, params);
  50 + Map<String, Object> queryMap = new HashMap<>();
  51 + queryMap.put(PAGE, params.getPage());
  52 + queryMap.put(PAGE_SIZE, params.getPageSize());
  53 + IPage<TkRepairOrderEntity> page = baseMapper.selectPage(
  54 + getPage(queryMap, "create_time", false), queryWrapper);
  55 +
  56 + TkPageData<TkRepairOrderDTO> pageData = getPageData(page, TkRepairOrderDTO.class);
  57 + if (pageData != null && CollectionUtils.isNotEmpty(pageData.getItems())) {
  58 + pageData.getItems().forEach(item -> {
  59 + String deviceId = item.getDeviceId();
  60 + if (StringUtils.isNotBlank(deviceId)) {
  61 + DeviceDTO deviceDTO = tkdeviceService.checkDeviceByTenantIdAndDeviceId(UUID.fromString(tenantId), UUID.fromString(deviceId));
  62 + item.setDeviceInfo(deviceDTO);
  63 + }
  64 + });
  65 + }
  66 + return pageData;
  67 + }
  68 +
  69 + private QueryWrapper<TkRepairOrderEntity> getCondition(String tenantId, TkRepairOrderDTO params) {
  70 + QueryWrapper<TkRepairOrderEntity> queryWrapper = new QueryWrapper<>();
  71 + LambdaQueryWrapper<TkRepairOrderEntity> lambda = queryWrapper.lambda();
  72 + lambda.eq(TenantBaseEntity::getTenantId, tenantId);
  73 + if (StringUtils.isNotBlank(params.getDeviceId())) {
  74 + lambda.eq(TkRepairOrderEntity::getDeviceId, params.getDeviceId());
  75 + }
  76 + if (params.getStartDate() != null) {
  77 + lambda.ge(TkRepairOrderEntity::getReportDate, params.getStartDate());
  78 + }
  79 + if (params.getEndDate() != null) {
  80 + lambda.le(TkRepairOrderEntity::getReportDate, params.getEndDate());
  81 + }
  82 +
  83 + if (StringUtils.isNotBlank(params.getReportBy())) {
  84 + lambda.eq(TkRepairOrderEntity::getReportBy, params.getReportBy());
  85 + }
  86 +
  87 + if (StringUtils.isNotBlank(params.getStatus())) {
  88 + lambda.eq(TkRepairOrderEntity::getStatus, params.getStatus());
  89 + }
  90 +
  91 + if (params.getEmergency() != null) {
  92 + lambda.eq(TkRepairOrderEntity::getEmergency, params.getEmergency());
  93 + }
  94 + return queryWrapper;
  95 + }
  96 +
  97 +
  98 + @Override
  99 + public TkRepairOrderDTO save(TkRepairOrderDTO dto) {
  100 + checkDto(dto);
  101 + if (dto.getReportDate() == null) {
  102 + dto.setReportDate(LocalDateTime.now());
  103 + }
  104 +
  105 + TkRepairOrderEntity entity = new TkRepairOrderEntity();
  106 + if (StringUtils.isBlank(dto.getId())) {
  107 + dto.copyToEntity(entity);
  108 + baseMapper.insert(entity);
  109 + } else {
  110 + LambdaQueryWrapper<TkRepairOrderEntity> filter = new QueryWrapper<TkRepairOrderEntity>().lambda()
  111 + .eq(TkRepairOrderEntity::getId, dto.getId());
  112 + entity = dto.getEntity(TkRepairOrderEntity.class);
  113 + baseMapper.update(entity, filter);
  114 + }
  115 + entity.copyToDTO(dto);
  116 + return dto;
  117 + }
  118 +
  119 + @Override
  120 + public TkRepairOrderDTO detail(String id) throws ThingsboardException {
  121 + TkRepairOrderDTO detail = new TkRepairOrderDTO();
  122 + TkRepairOrderEntity entity = baseMapper.selectById(id);
  123 + if (entity == null) {
  124 + throw new TkDataValidationException("数据不存在!");
  125 + }
  126 + entity.copyToDTO(detail);
  127 + String deviceId = entity.getDeviceId();
  128 + if (StringUtils.isNotBlank(deviceId)) {
  129 + TenantId tenantInfo = SpringBeanUtils.getTenantId();
  130 + DeviceDTO deviceDTO = tkdeviceService.checkDeviceByTenantIdAndDeviceId(tenantInfo.getId(), UUID.fromString(deviceId));
  131 + detail.setDeviceInfo(deviceDTO);
  132 + }
  133 +
  134 + return detail;
  135 + }
  136 +
  137 + @Override
  138 + public TkRepairOrderDTO load(String id) throws ThingsboardException {
  139 + TkRepairOrderDTO result = new TkRepairOrderDTO();
  140 + TkRepairOrderEntity entity = baseMapper.selectById(id);
  141 + entity.copyToDTO(result);
  142 + return result;
  143 + }
  144 +
  145 + @Override
  146 + public TkRepairOrderDTO loadByDeviceId(String deviceId) throws ThingsboardException {
  147 + TkRepairOrderDTO result = new TkRepairOrderDTO();
  148 + QueryWrapper<TkRepairOrderEntity> queryWrapper = new QueryWrapper<>();
  149 + LambdaQueryWrapper<TkRepairOrderEntity> lambda = queryWrapper.lambda();
  150 + lambda.eq(TenantBaseEntity::getTenantId, SpringBeanUtils.getTenantId().toString());
  151 + lambda.eq(TkRepairOrderEntity::getDeviceId, deviceId);
  152 + TkRepairOrderEntity entity = baseMapper.selectOne(queryWrapper);
  153 + entity.copyToDTO(result);
  154 + return result;
  155 + }
  156 +
  157 + @Override
  158 + public void updateStatus(String id, String status) throws ThingsboardException {
  159 + TkRepairOrderDTO orderDTO = load(id);
  160 + if (orderDTO == null) {
  161 + throw new TkDataValidationException("工单不存在!");
  162 + }
  163 + RepairOrderStatusEnum statusEnum = RepairOrderStatusEnum.valueOf(status);
  164 + if (statusEnum == null) {
  165 + throw new TkDataValidationException("工单状态不存在!");
  166 + }
  167 + TkRepairOrderEntity entity = new TkRepairOrderEntity();
  168 + orderDTO.copyToEntity(entity);
  169 + entity.setStatus(statusEnum.name());
  170 + LambdaQueryWrapper<TkRepairOrderEntity> filter = new QueryWrapper<TkRepairOrderEntity>().lambda()
  171 + .eq(TkRepairOrderEntity::getId, entity.getId());
  172 + baseMapper.update(entity, filter);
  173 + }
  174 +
  175 + private void checkDto(TkRepairOrderDTO dto) {
  176 + if (StringUtils.isBlank(dto.getDeviceId())) {
  177 + throw new TkDataValidationException("设备不能为空!");
  178 + }
  179 +
  180 + if (StringUtils.isBlank(dto.getReportBy())) {
  181 + throw new TkDataValidationException("报修人不能为空!");
  182 + }
  183 +
  184 + if (StringUtils.isBlank(dto.getTenantId())) {
  185 + throw new TkDataValidationException("租户id为空!");
  186 + }
  187 + }
  188 +
  189 + @Override
  190 + public boolean delete(String id) {
  191 + int count = baseMapper.deleteById(id);
  192 + return count > 0;
  193 + }
  194 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.metadata.IPage;
  6 +import lombok.RequiredArgsConstructor;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.apache.commons.collections4.CollectionUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.springframework.stereotype.Service;
  11 +import org.thingsboard.server.common.data.User;
  12 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  13 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  14 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  15 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairRecordDTO;
  16 +import org.thingsboard.server.common.data.yunteng.dto.UserDTO;
  17 +import org.thingsboard.server.common.data.yunteng.utils.CopyUtils;
  18 +import org.thingsboard.server.common.data.yunteng.utils.SpringBeanUtils;
  19 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  20 +import org.thingsboard.server.dao.yunteng.entities.TkDeviceEntity;
  21 +import org.thingsboard.server.dao.yunteng.entities.TkRepairRecordEntity;
  22 +import org.thingsboard.server.dao.yunteng.mapper.TkRepairRecordMapper;
  23 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  24 +import org.thingsboard.server.dao.yunteng.service.TkRepairOrderService;
  25 +import org.thingsboard.server.dao.yunteng.service.TkRepairRecordService;
  26 +import org.thingsboard.server.dao.yunteng.service.TkUserService;
  27 +
  28 +import java.time.LocalDateTime;
  29 +import java.util.HashMap;
  30 +import java.util.List;
  31 +import java.util.Map;
  32 +import java.util.stream.Collectors;
  33 +
  34 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE;
  35 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.PAGE_SIZE;
  36 +
  37 +@Service
  38 +@RequiredArgsConstructor
  39 +@Slf4j
  40 +public class TkRepairRecordServiceImpl extends AbstractBaseService<TkRepairRecordMapper, TkRepairRecordEntity>
  41 + implements TkRepairRecordService {
  42 +
  43 + private final TkRepairOrderService tkRepairOrderService;
  44 +
  45 +
  46 + private final TkUserService tkUserService;
  47 +
  48 + @Override
  49 + public TkPageData<TkRepairRecordDTO> page(String tenantId, TkRepairRecordDTO params) {
  50 + TkPageData<TkRepairRecordDTO> result = new TkPageData<>();
  51 + Map<String, Object> queryMap = new HashMap<>();
  52 + queryMap.put(PAGE, params.getPage());
  53 + queryMap.put(PAGE_SIZE, params.getPageSize());
  54 + IPage<TkRepairRecordEntity> page =
  55 + getPage(queryMap, "rr.create_time", false);
  56 + IPage<TkRepairRecordDTO> pageData = baseMapper.getRepairRecordPage(page, queryMap);
  57 + if (pageData != null && CollectionUtils.isNotEmpty(pageData.getRecords())) {
  58 + List<TkRepairRecordDTO> dataList = pageData.getRecords().stream().map(item -> {
  59 + TkRepairRecordDTO dto = new TkRepairRecordDTO();
  60 + CopyUtils.copyProperties(item, dto);
  61 + return dto;
  62 +
  63 + }).collect(Collectors.toList());
  64 + result.setItems(dataList);
  65 + }
  66 + result.setTotal(Long.valueOf(pageData.getTotal()).intValue());
  67 +
  68 + return result;
  69 + }
  70 +
  71 + @Override
  72 + public TkRepairRecordDTO save(TkRepairRecordDTO dto) {
  73 + checkDto(dto);
  74 + if (dto.getRepairDate() == null) {
  75 + dto.setRepairDate(LocalDateTime.now());
  76 + }
  77 +
  78 + TkRepairRecordEntity entity = new TkRepairRecordEntity();
  79 + if (StringUtils.isBlank(dto.getId())) {
  80 + dto.copyToEntity(entity);
  81 + baseMapper.insert(entity);
  82 + } else {
  83 + LambdaQueryWrapper<TkRepairRecordEntity> filter = new QueryWrapper<TkRepairRecordEntity>().lambda()
  84 + .eq(TkRepairRecordEntity::getId, dto.getId());
  85 + entity = dto.getEntity(TkRepairRecordEntity.class);
  86 + baseMapper.update(entity, filter);
  87 + }
  88 + entity.copyToDTO(dto);
  89 + return dto;
  90 + }
  91 +
  92 + private void checkDto(TkRepairRecordDTO dto) {
  93 + if (StringUtils.isBlank(dto.getOrderId())) {
  94 + throw new TkDataValidationException("维修工单不能为空!");
  95 + }
  96 +
  97 + if (StringUtils.isBlank(dto.getRepairBy())) {
  98 + throw new TkDataValidationException("维修人不能为空!");
  99 + }
  100 +
  101 + if (StringUtils.isBlank(dto.getTenantId())) {
  102 + throw new TkDataValidationException("租户id为空!");
  103 + }
  104 + }
  105 +
  106 +
  107 + @Override
  108 + public TkRepairRecordDTO detail(String id) throws ThingsboardException {
  109 + TkRepairRecordDTO detail = new TkRepairRecordDTO();
  110 + TkRepairRecordEntity entity = baseMapper.selectById(id);
  111 + if (entity == null) {
  112 + throw new TkDataValidationException("数据不存在!");
  113 + }
  114 + entity.copyToDTO(detail);
  115 + String orderId = entity.getOrderId();
  116 + if (StringUtils.isNotBlank(orderId)) {
  117 + TkRepairOrderDTO repairOrderDTO = tkRepairOrderService.load(orderId);
  118 + detail.setTkRepairOrderDTO(repairOrderDTO);
  119 + }
  120 + UserDTO userInfo = tkUserService.findUserInfoById(detail.getRepairBy());
  121 + detail.setRepairName(userInfo.getRealName());
  122 +
  123 + return detail;
  124 + }
  125 +
  126 + @Override
  127 + public boolean delete(String id) {
  128 + int count = baseMapper.deleteById(id);
  129 + return count > 0;
  130 + }
  131 +}
  132 +
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.thingsboard.server.dao.yunteng.entities.TkMalfunctionReasonEntity;
  6 +
  7 +@Mapper
  8 +public interface TkMalfunctionReasonMapper extends BaseMapper<TkMalfunctionReasonEntity> {
  9 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.thingsboard.server.dao.yunteng.entities.TkRepairOrderEntity;
  6 +
  7 +@Mapper
  8 +public interface TkRepairOrderMapper extends BaseMapper<TkRepairOrderEntity> {
  9 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairRecordDTO;
  8 +import org.thingsboard.server.dao.yunteng.entities.TkRepairRecordEntity;
  9 +
  10 +import java.util.Map;
  11 +
  12 +@Mapper
  13 +public interface TkRepairRecordMapper extends BaseMapper<TkRepairRecordEntity> {
  14 +
  15 + IPage<TkRepairRecordDTO> getRepairRecordPage(IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
  16 +
  17 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.yunteng.dto.TkMalfunctionReasonDTO;
  5 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  6 +import org.thingsboard.server.dao.yunteng.entities.TkMalfunctionReasonEntity;
  7 +
  8 +import java.util.List;
  9 +import java.util.Map;
  10 +
  11 +public interface TkMalfunctionReasonService extends BaseService<TkMalfunctionReasonEntity> {
  12 +
  13 + TkPageData<TkMalfunctionReasonDTO> page(String tenantId, Map<String, Object> queryMap);
  14 +
  15 + List<TkMalfunctionReasonDTO> list(String tenantId, Map<String, Object> queryMap);
  16 +
  17 + TkMalfunctionReasonDTO save(TkMalfunctionReasonDTO tkMalfunctionReasonDTO);
  18 +
  19 + boolean delete(String id);
  20 +
  21 +
  22 +
  23 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +
  4 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  5 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairOrderDTO;
  6 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  7 +import org.thingsboard.server.dao.yunteng.entities.TkRepairOrderEntity;
  8 +
  9 +import java.util.Map;
  10 +
  11 +public interface TkRepairOrderService extends BaseService<TkRepairOrderEntity> {
  12 +
  13 + TkPageData<TkRepairOrderDTO> page(String tenantId, TkRepairOrderDTO params);
  14 +
  15 + TkRepairOrderDTO save(TkRepairOrderDTO dto);
  16 +
  17 + TkRepairOrderDTO detail(String id) throws ThingsboardException;
  18 +
  19 + TkRepairOrderDTO load(String id) throws ThingsboardException;
  20 +
  21 + TkRepairOrderDTO loadByDeviceId(String deviceId) throws ThingsboardException;
  22 +
  23 + void updateStatus(String id, String status) throws ThingsboardException;
  24 +
  25 + boolean delete(String id);
  26 +
  27 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  4 +import org.thingsboard.server.common.data.yunteng.dto.TkRepairRecordDTO;
  5 +import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  6 +import org.thingsboard.server.dao.yunteng.entities.TkRepairRecordEntity;
  7 +
  8 +public interface TkRepairRecordService extends BaseService<TkRepairRecordEntity>{
  9 +
  10 + TkPageData<TkRepairRecordDTO> page(String tenantId, TkRepairRecordDTO params);
  11 +
  12 + TkRepairRecordDTO save(TkRepairRecordDTO dto);
  13 +
  14 + TkRepairRecordDTO detail(String id) throws ThingsboardException;
  15 +
  16 + boolean delete(String id);
  17 +
  18 +}
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.TkRepairRecordMapper">
  5 + <resultMap type="org.thingsboard.server.common.data.yunteng.dto.TkRepairRecordDTO" id="repairRecordMap">
  6 + <result property="id" column="id" />
  7 + <result property="repairDate" column="repair_date" />
  8 + <result property="orderId" column="order_id" />
  9 + <result property="repairBy" column="repair_by" />
  10 + <result property="description" column="description" />
  11 + <result property="repairName" column="repairName" />
  12 + </resultMap>
  13 + <select id="getRepairRecordPage" resultMap="repairRecordMap">
  14 + SELECT rr.id,rr.order_id,rr.repair_date,rr.repair_by,rr.description
  15 + ,rr.tenant_id,rr.create_time,rr.updater,rr.update_time,rr.creator,su.real_name as repairName
  16 + from qg_repair_record rr
  17 + inner join sys_user su on su.id=rr.repair_by
  18 + </select>
  19 +</mapper>
\ No newline at end of file
... ...