package com.unisinsight.project.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.unisinsight.project.entity.dao.DeviceImageMapping; import com.unisinsight.project.entity.req.DeviceImageMappingReq; import com.unisinsight.project.entity.res.DeviceImageMappingRes; import com.unisinsight.project.entity.res.ListReq; import com.unisinsight.project.exception.BaseErrorCode; import com.unisinsight.project.exception.Result; import com.unisinsight.project.service.DeviceImageMappingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; /** * @description: * @author: rdpnr_puzhi * @create: 2025/08/07 */ @Slf4j @RestController @RequestMapping("/api/nex/v1/device/image/mapping") @Api(tags = "终端镜像映射关系类") public class DeviceImageMappingController { @Resource private DeviceImageMappingService deviceImageMappingService; @ApiOperation(value = "终端镜像映射新增") @PostMapping("/add") public Result insert(@RequestBody ListReq deviceImageMappingReq) { if (Objects.isNull(deviceImageMappingReq.getData())) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } log.info("终端镜像映射新增请求参数为:{}", JSONUtil.toJsonStr(deviceImageMappingReq)); QueryWrapper wrapper = new QueryWrapper<>(); if (CollectionUtil.isEmpty(deviceImageMappingReq.getData()) && ObjectUtils.isNotEmpty(deviceImageMappingReq.getDeviceId())) { wrapper.lambda().eq(DeviceImageMapping::getDeviceId, deviceImageMappingReq.getDeviceId()); List list = deviceImageMappingService.list(wrapper); List collect = list.stream().map(DeviceImageMapping::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(collect)) { boolean removedByIds = deviceImageMappingService.removeByIds(collect); log.info("终端镜像映射新增接口删除了 {} 条旧数据,ID列表: {}", removedByIds, collect); } return Result.successResult(); } List reqData = deviceImageMappingReq.getData(); List addList = reqData.stream().distinct().filter(e -> Objects.isNull(e.getId())).collect(Collectors.toList()); wrapper.lambda().eq(DeviceImageMapping::getDeviceId, reqData.get(0).getDeviceId()); List list = deviceImageMappingService.list(wrapper); if (CollectionUtil.isNotEmpty(list)) { Set requestIds = reqData.stream() .map(DeviceImageMappingReq::getId) .filter(Objects::nonNull) .collect(Collectors.toSet()); List idsToDelete = list.stream() .map(DeviceImageMapping::getId) .filter(Objects::nonNull) .filter(id -> !requestIds.contains(id)) .collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(idsToDelete)) { deviceImageMappingService.removeByIds(idsToDelete); log.info("删除了 {} 条不匹配的旧数据,ID列表: {}", idsToDelete.size(), idsToDelete); } } if (CollectionUtil.isNotEmpty(addList)) { List deviceImageMappings = BeanUtil.copyToList(addList, DeviceImageMapping.class); List deviceImageMappingList = deviceImageMappings.stream().peek(e -> { e.setCreateUser("admin"); }).collect(Collectors.toList()); boolean insert = deviceImageMappingService.saveBatch(deviceImageMappingList); log.info("终端镜像映射新增insert:{}", insert); if (!insert) { return Result.errorResult(BaseErrorCode.HTTP_ERROR_CODE_500); } } return Result.successResult(); } @ApiOperation(value = "终端镜像映射查询") @PostMapping("/select") public Result> select(@RequestBody DeviceImageMappingReq deviceImageMappingReq) { if (Objects.isNull(deviceImageMappingReq)) { return Result.errorResult(BaseErrorCode.PARAMS_CHK_ERROR); } log.info("终端镜像映射查询请求参数为:{}", JSONUtil.toJsonStr(deviceImageMappingReq)); return deviceImageMappingService.select(deviceImageMappingReq); } }