package com.glxp.api.req.dev; import cn.hutool.core.bean.BeanUtil; import com.glxp.api.entity.auth.AuthAdmin; import com.glxp.api.entity.dev.DeviceInfoEntity; import com.glxp.api.entity.dev.DeviceRepairApplyDetailEntity; import com.glxp.api.entity.dev.DeviceRepairApplyEntity; import com.glxp.api.enums.dev.DeviceRepairApplyDetailStatusEnum; import com.glxp.api.enums.dev.DeviceRepairApplyStatusEnum; import com.glxp.api.enums.dev.DeviceStatusEnum; import com.glxp.api.exception.JsonException; import com.glxp.api.service.dev.DeviceInfoService; import com.glxp.api.util.SnowflakeUtil; import com.glxp.api.vo.dev.DeviceInfoVo; import lombok.Data; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @Data public class DeviceRepairApplyAddParam { /** * 报修人联系方式 */ @NotBlank(message = "报修人联系方式不能为空") String applyUserPhone; @Valid @NotEmpty(message = "请选择至少一个设备进行报修") Set details; Long taskId; @Data public static class ApplyDetail { /** * 设备编码 */ @NotBlank(message = "设备编码不能为空") String deviceCode; /** * 问题描述 */ @NotBlank(message = "问题描述不能为空") String description; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ApplyDetail that = (ApplyDetail) o; return Objects.equals(deviceCode, that.deviceCode); } @Override public int hashCode() { return Objects.hash(deviceCode); } } public void valid() { } public DeviceRepairApplyEntity getEntity(AuthAdmin user) { return DeviceRepairApplyEntity .builder() .id(SnowflakeUtil.getId()) .status(DeviceRepairApplyStatusEnum.WAIT_PROCESS) .applyDeptCode(user.getLocDeptCode()) .applyDeptName(user.getDeptName()) .applyUserId(user.getId()) .applyUserName(user.getEmployeeName()) .applyUserPhone(this.applyUserPhone) .applyTime(LocalDateTime.now()) .deviceCount(details.size()) .finishCount(0) .build(); } public List getDetailEntityList(Long applyId, DeviceInfoService deviceInfoService, AuthAdmin user) { List list = deviceInfoService.listVoByCodes(details.stream().map(ApplyDetail::getDeviceCode).collect(Collectors.toList()), user.getLocDeptCode(), DeviceStatusEnum.NORMAL); if (list.size() != details.size()) { throw new JsonException("设备状态异常或信息不符,请确认"); } Map> deviceMap = list.stream().collect(Collectors.groupingBy(DeviceInfoEntity::getDeviceCode)); return details.stream().map(d -> { DeviceInfoEntity info = deviceMap.get(d.getDeviceCode()).get(0); DeviceRepairApplyDetailEntity build = DeviceRepairApplyDetailEntity.builder() .applyId(applyId) .description(d.getDescription()) .status(DeviceRepairApplyDetailStatusEnum.WAIT_DIAGNOSIS) .build(); BeanUtil.copyProperties(info, build,"status"); return build; }).collect(Collectors.toList()); } }