From 240706c11cd088f58fdd788bf9e770b8fb73ab2f Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 20 Feb 2025 18:37:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E3=80=81=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/controller/pc/DeviceController.java | 8 +++++ .../controller/pc/TemplateController.java | 6 ++++ .../com/ycwl/basic/mapper/DeviceMapper.java | 4 +++ .../com/ycwl/basic/mapper/TaskMapper.java | 2 ++ .../com/ycwl/basic/mapper/TemplateMapper.java | 4 +++ .../model/pc/device/entity/DeviceEntity.java | 1 + .../pc/device/req/DeviceSortRequest.java | 13 +++++++ .../model/pc/task/entity/TaskEntity.java | 1 + .../pc/template/req/TemplateSortRequest.java | 13 +++++++ .../basic/repository/DeviceRepository.java | 7 ++++ .../basic/repository/TemplateRepository.java | 9 +++++ .../service/impl/pc/DeviceServiceImpl.java | 36 +++++++++++++++++++ .../service/impl/pc/TemplateServiceImpl.java | 33 +++++++++++++++++ .../ycwl/basic/service/pc/DeviceService.java | 2 ++ .../basic/service/pc/TemplateService.java | 2 ++ .../com/ycwl/basic/utils/JwtTokenUtil.java | 2 +- src/main/resources/mapper/DeviceMapper.xml | 13 +++++++ src/main/resources/mapper/TaskMapper.xml | 10 ++++++ src/main/resources/mapper/TemplateMapper.xml | 12 +++++++ 19 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ycwl/basic/model/pc/device/req/DeviceSortRequest.java create mode 100644 src/main/java/com/ycwl/basic/model/pc/template/req/TemplateSortRequest.java diff --git a/src/main/java/com/ycwl/basic/controller/pc/DeviceController.java b/src/main/java/com/ycwl/basic/controller/pc/DeviceController.java index fc84dd7..7b632b7 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/DeviceController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/DeviceController.java @@ -4,7 +4,9 @@ import com.github.pagehelper.PageInfo; import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity; import com.ycwl.basic.model.pc.device.req.DeviceAddOrUpdateReq; import com.ycwl.basic.model.pc.device.req.DeviceReqQuery; +import com.ycwl.basic.model.pc.device.req.DeviceSortRequest; import com.ycwl.basic.model.pc.device.resp.DeviceRespVO; +import com.ycwl.basic.model.pc.template.req.TemplateSortRequest; import com.ycwl.basic.service.pc.DeviceService; import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; @@ -54,6 +56,12 @@ public class DeviceController { return deviceService.updateStatus(id); } + @ApiOperation("排序设备") + @PostMapping("/sort") + public ApiResponse sortDevice(@RequestBody DeviceSortRequest request) { + return deviceService.sortDevice(request.getDeviceId(), request.getAfterDeviceId()); + } + @GetMapping("/config/{id}") public ApiResponse getConfig(@PathVariable("id") Long id) { return ApiResponse.success(deviceService.getConfig(id)); diff --git a/src/main/java/com/ycwl/basic/controller/pc/TemplateController.java b/src/main/java/com/ycwl/basic/controller/pc/TemplateController.java index 31ede28..9dd288d 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/TemplateController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/TemplateController.java @@ -5,6 +5,7 @@ import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity; import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity; import com.ycwl.basic.model.pc.template.entity.TemplateEntity; import com.ycwl.basic.model.pc.template.req.TemplateReqQuery; +import com.ycwl.basic.model.pc.template.req.TemplateSortRequest; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.service.pc.TemplateService; import com.ycwl.basic.utils.ApiResponse; @@ -63,6 +64,11 @@ public class TemplateController { return templateService.updateStatus(id); } + @ApiOperation("排序模板") + @PostMapping("/sort") + public ApiResponse sortTemplate(@RequestBody TemplateSortRequest request) { + return templateService.sortTemplate(request.getTemplateId(), request.getAfterTemplateId()); + } @GetMapping("/config/{id}") public ApiResponse getConfig(@PathVariable("id") Long id) { diff --git a/src/main/java/com/ycwl/basic/mapper/DeviceMapper.java b/src/main/java/com/ycwl/basic/mapper/DeviceMapper.java index 4bce14b..b30570d 100644 --- a/src/main/java/com/ycwl/basic/mapper/DeviceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/DeviceMapper.java @@ -45,4 +45,8 @@ public interface DeviceMapper { int updateOnlineStatus(Long id, String ipAddr, int online, Date keepaliveAt); DeviceEntity getByDeviceNo2(String deviceNo); + + List listAllByScenicId(Long scenicId); + + int updateSort(Long id, Integer sort); } diff --git a/src/main/java/com/ycwl/basic/mapper/TaskMapper.java b/src/main/java/com/ycwl/basic/mapper/TaskMapper.java index 12ebb50..0c5a747 100644 --- a/src/main/java/com/ycwl/basic/mapper/TaskMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/TaskMapper.java @@ -36,6 +36,8 @@ public interface TaskMapper { int countByMemberIdStauFinish(String userId); List selectNotRunning(); + List selectAllNotRunning(); + List selectAllRunning(); void assignToWorker(@Param("taskId") Long taskId, @Param("workerId") Long workerId); void deassign(@Param("taskId") Long taskId); diff --git a/src/main/java/com/ycwl/basic/mapper/TemplateMapper.java b/src/main/java/com/ycwl/basic/mapper/TemplateMapper.java index d5cdf72..60f68b1 100644 --- a/src/main/java/com/ycwl/basic/mapper/TemplateMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/TemplateMapper.java @@ -35,5 +35,9 @@ public interface TemplateMapper { List listEnabledByScenicId(Long scenicId); List listEnabled(); List listEnabledTemplateIdByScenicId(Long scenicId); + List listAllTemplateIdByScenicId(Long scenicId); List listFor(@Param("scenicId") Long scenicId); + + int updateSort(Long templateId, Integer sort); + } diff --git a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceEntity.java b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceEntity.java index 684bdd6..88d9bfa 100644 --- a/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/device/entity/DeviceEntity.java @@ -47,6 +47,7 @@ public class DeviceEntity { private Integer online; private String ipAddr; private Date keepaliveAt; + private Integer sort; private Date createAt; private Date updateAt; } diff --git a/src/main/java/com/ycwl/basic/model/pc/device/req/DeviceSortRequest.java b/src/main/java/com/ycwl/basic/model/pc/device/req/DeviceSortRequest.java new file mode 100644 index 0000000..4ac25e7 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/device/req/DeviceSortRequest.java @@ -0,0 +1,13 @@ +package com.ycwl.basic.model.pc.device.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class DeviceSortRequest { + @ApiModelProperty(value = "被操作模板的ID", required = true) + private Long deviceId; + + @ApiModelProperty(value = "排在其后的模板ID", required = false) + private Long afterDeviceId; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/model/pc/task/entity/TaskEntity.java b/src/main/java/com/ycwl/basic/model/pc/task/entity/TaskEntity.java index 9f9d829..c0aadbf 100644 --- a/src/main/java/com/ycwl/basic/model/pc/task/entity/TaskEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/task/entity/TaskEntity.java @@ -55,4 +55,5 @@ public class TaskEntity { private Date createTime; private Date updateTime; private Integer automatic; + private Date startTime; } diff --git a/src/main/java/com/ycwl/basic/model/pc/template/req/TemplateSortRequest.java b/src/main/java/com/ycwl/basic/model/pc/template/req/TemplateSortRequest.java new file mode 100644 index 0000000..f369e89 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/template/req/TemplateSortRequest.java @@ -0,0 +1,13 @@ +package com.ycwl.basic.model.pc.template.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class TemplateSortRequest { + @ApiModelProperty(value = "被操作模板的ID", required = true) + private Long templateId; + + @ApiModelProperty(value = "排在其后的模板ID", required = false) + private Long afterTemplateId; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java index e5baefe..f22ee95 100644 --- a/src/main/java/com/ycwl/basic/repository/DeviceRepository.java +++ b/src/main/java/com/ycwl/basic/repository/DeviceRepository.java @@ -10,7 +10,9 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.Date; +import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; @Component public class DeviceRepository { @@ -126,4 +128,9 @@ public class DeviceRepository { redisTemplate.opsForValue().set(String.format(DEVICE_CACHE_KEY, device.getId()), JSONObject.toJSONString(device)); redisTemplate.opsForValue().set(String.format(DEVICE_CACHE_KEY, device.getNo()), JSONObject.toJSONString(device)); } + + public List getAllDeviceByScenicId(Long scenicId) { + List deviceIdList = deviceMapper.listAllByScenicId(scenicId); + return deviceIdList.stream().map(this::getDevice).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/ycwl/basic/repository/TemplateRepository.java b/src/main/java/com/ycwl/basic/repository/TemplateRepository.java index b92ef0c..2e29992 100644 --- a/src/main/java/com/ycwl/basic/repository/TemplateRepository.java +++ b/src/main/java/com/ycwl/basic/repository/TemplateRepository.java @@ -68,6 +68,15 @@ public class TemplateRepository { return idList.stream().map(this::getTemplate).collect(Collectors.toList()); } + public List getAllTemplateListByScenicId(Long scenicId) { + List idList; + idList = templateMapper.listAllTemplateIdByScenicId(scenicId); + if (idList == null || idList.isEmpty()) { + return Collections.emptyList(); + } + return idList.stream().map(this::getTemplate).collect(Collectors.toList()); + } + public TemplateRespVO getTemplate(Long templateId) { if (redisTemplate.hasKey(String.format(TEMPLATE_CACHE_KEY, templateId))) { return JSONObject.parseObject(redisTemplate.opsForValue().get(String.format(TEMPLATE_CACHE_KEY, templateId)), TemplateRespVO.class); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/DeviceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/DeviceServiceImpl.java index 22e7c19..cf05da2 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/DeviceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/DeviceServiceImpl.java @@ -3,6 +3,7 @@ package com.ycwl.basic.service.impl.pc; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.model.pc.device.entity.DeviceEntity; +import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.wvp.WvpSyncReqVo; import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.mapper.DeviceMapper; @@ -18,6 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; /** * @Author:longbinbin @@ -123,4 +126,37 @@ public class DeviceServiceImpl implements DeviceService { } } } + + @Override + public ApiResponse sortDevice(Long deviceId, Long afterDeviceId) { + DeviceEntity device = deviceRepository.getDevice(deviceId); + if (device == null) { + return ApiResponse.fail("设备不存在"); + } + List scenicDeviceList = deviceRepository.getAllDeviceByScenicId(device.getScenicId()); + AtomicInteger sortNum = new AtomicInteger(0); + for (DeviceEntity item : scenicDeviceList) { + item.setSort(sortNum.addAndGet(1)); + } + Optional templateOptional = scenicDeviceList.stream().filter(item -> item.getId().equals(deviceId)).findAny(); + Optional afterTemplateOptional = scenicDeviceList.stream().filter(item -> item.getId().equals(afterDeviceId)).findAny(); + if (!templateOptional.isPresent()) { + return ApiResponse.fail("设备不存在"); + } + if (afterTemplateOptional.isPresent()) { + DeviceEntity afterTemplate = afterTemplateOptional.get(); + Integer newSort = afterTemplate.getSort(); + DeviceEntity oldTemplate = templateOptional.get(); + Integer oldSort = oldTemplate.getSort(); + afterTemplate.setSort(oldSort); + oldTemplate.setSort(newSort); + } + scenicDeviceList.forEach(item -> { + deviceMapper.updateSort(item.getId(), item.getSort()); + deviceRepository.clearDeviceCache(item.getId()); + deviceRepository.clearDeviceCache(item.getNo()); + deviceRepository.clearDeviceCache(item.getNo2()); + }); + return ApiResponse.success(true); + } } diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/TemplateServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/TemplateServiceImpl.java index e2615e7..9ca8cd1 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/TemplateServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/TemplateServiceImpl.java @@ -16,6 +16,8 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; /** * @Author:longbinbin @@ -123,4 +125,35 @@ public class TemplateServiceImpl implements TemplateService { templateMapper.updateConfigById(config); templateRepository.clearTemplateCache(config.getTemplateId()); } + + @Override + public ApiResponse sortTemplate(Long templateId, Long afterTemplateId) { + TemplateRespVO template = templateRepository.getTemplate(templateId); + if (template == null) { + return ApiResponse.fail("模版不存在"); + } + List scenicTemplateList = templateRepository.getAllTemplateListByScenicId(template.getScenicId()); + AtomicInteger sortNum = new AtomicInteger(0); + for (TemplateRespVO item : scenicTemplateList) { + item.setSort(sortNum.addAndGet(1)); + } + Optional templateOptional = scenicTemplateList.stream().filter(item -> item.getId().equals(templateId)).findAny(); + Optional afterTemplateOptional = scenicTemplateList.stream().filter(item -> item.getId().equals(afterTemplateId)).findAny(); + if (!templateOptional.isPresent()) { + return ApiResponse.fail("模版不存在"); + } + if (afterTemplateOptional.isPresent()) { + TemplateRespVO afterTemplate = afterTemplateOptional.get(); + Integer newSort = afterTemplate.getSort(); + TemplateRespVO oldTemplate = templateOptional.get(); + Integer oldSort = oldTemplate.getSort(); + afterTemplate.setSort(oldSort); + oldTemplate.setSort(newSort); + } + scenicTemplateList.forEach(item -> { + templateMapper.updateSort(item.getId(), item.getSort()); + templateRepository.clearTemplateCache(item.getId()); + }); + return ApiResponse.success(true); + } } diff --git a/src/main/java/com/ycwl/basic/service/pc/DeviceService.java b/src/main/java/com/ycwl/basic/service/pc/DeviceService.java index e87101d..4b1bbaf 100644 --- a/src/main/java/com/ycwl/basic/service/pc/DeviceService.java +++ b/src/main/java/com/ycwl/basic/service/pc/DeviceService.java @@ -27,4 +27,6 @@ public interface DeviceService { void saveConfig(Long configId, DeviceConfigEntity config); void updateDevices(Long scenicId, WvpSyncReqVo reqVo); + + ApiResponse sortDevice(Long deviceId, Long afterDeviceId); } diff --git a/src/main/java/com/ycwl/basic/service/pc/TemplateService.java b/src/main/java/com/ycwl/basic/service/pc/TemplateService.java index f1374a4..de5945f 100644 --- a/src/main/java/com/ycwl/basic/service/pc/TemplateService.java +++ b/src/main/java/com/ycwl/basic/service/pc/TemplateService.java @@ -26,4 +26,6 @@ public interface TemplateService { TemplateConfigEntity getConfig(Long templateId); void saveConfig(Long configId, TemplateConfigEntity config); + + ApiResponse sortTemplate(Long templateId, Long afterTemplateId); } diff --git a/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java b/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java index c025ec6..01fb8c8 100644 --- a/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java +++ b/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java @@ -96,7 +96,7 @@ public class JwtTokenUtil { public static void main(String[] args) throws Exception { JwtInfo jwtInfo = new JwtInfo(); - jwtInfo.setUserId(3954940354104528896L); + jwtInfo.setUserId(3936940597855784960L); jwtInfo.setName("微信用户"); System.out.println(generateToken(jwtInfo, 86400)); } diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml index 1f79f0b..0689429 100644 --- a/src/main/resources/mapper/DeviceMapper.xml +++ b/src/main/resources/mapper/DeviceMapper.xml @@ -58,6 +58,11 @@ update_at = now() where id = #{id} + + update device + set sort = #{sort} + where id = #{id} + delete from device where id = #{id} @@ -85,6 +90,7 @@ and d.create_at <= #{endTime} + order by sort + \ No newline at end of file diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml index 7ffa8da..eacce13 100644 --- a/src/main/resources/mapper/TaskMapper.xml +++ b/src/main/resources/mapper/TaskMapper.xml @@ -85,6 +85,11 @@ where status = 0 and worker_id is null limit 1 + + diff --git a/src/main/resources/mapper/TemplateMapper.xml b/src/main/resources/mapper/TemplateMapper.xml index 407c481..6ca7a9c 100644 --- a/src/main/resources/mapper/TemplateMapper.xml +++ b/src/main/resources/mapper/TemplateMapper.xml @@ -54,6 +54,11 @@ where id = #{id} + + update template + set sort = #{sort} + where id = #{templateId} + delete from template where id = #{id} @@ -84,6 +89,7 @@ and t.create_time >= #{startTime} and t.create_time <= #{endTime} + order by scenic_id, sort +