DeviceCreateIdsServiceImpl.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.xy.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.xy.annotation.Lock;
  7. import com.xy.collections.list.JArrayList;
  8. import com.xy.collections.list.JList;
  9. import com.xy.collections.map.JMap;
  10. import com.xy.config.ThreadPoolConfig;
  11. import com.xy.dto.DeviceCreateIdsDto;
  12. import com.xy.dto.SysWorkUser.ListDto;
  13. import com.xy.dto.SysWorkUser.SysWorkVo;
  14. import com.xy.entity.DeviceCreateIds;
  15. import com.xy.mapper.DeviceCreateIdsMapper;
  16. import com.xy.service.DeviceCreateIdsService;
  17. import com.xy.service.SysWorkUserService;
  18. import com.xy.utils.*;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiOperation;
  21. import lombok.RequiredArgsConstructor;
  22. import lombok.SneakyThrows;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.validation.annotation.Validated;
  27. import org.springframework.web.bind.annotation.PostMapping;
  28. import org.springframework.web.bind.annotation.RequestBody;
  29. import javax.annotation.Resource;
  30. import java.time.LocalDate;
  31. import java.time.LocalDateTime;
  32. import java.util.List;
  33. import java.util.concurrent.CountDownLatch;
  34. import static com.xy.utils.Beans.copy;
  35. import static com.xy.utils.PlusBeans.toIPage;
  36. import static com.xy.utils.PlusBeans.toPageBean;
  37. /**
  38. * <p>
  39. * 设备-机器ID号生成 服务实现类
  40. * </p>
  41. *
  42. * @author lijin
  43. * @since 2022-12-29
  44. */
  45. @Slf4j
  46. @Service
  47. @RequiredArgsConstructor
  48. @Api(tags = "设备-机器ID号生成")
  49. public class DeviceCreateIdsServiceImpl extends ServiceImpl<DeviceCreateIdsMapper, DeviceCreateIds> implements DeviceCreateIdsService {
  50. @Resource(name = ThreadPoolConfig.DEVICE_CREATE_IDS_SAVE)
  51. private ThreadPoolTaskExecutor executor;
  52. private final SysWorkUserService sysWorkUserService;
  53. @SneakyThrows
  54. @PostMapping("save")
  55. @ApiOperation("添加")
  56. @Lock("device-create-ids-save")
  57. public R save(@RequestBody @Validated DeviceCreateIdsDto.Save save) {
  58. LocalDate localDate = LocalDate.now();
  59. String year = String.valueOf(localDate.getYear());
  60. String month = String.valueOf(localDate.getMonthValue());
  61. String yearMonth = year.substring(2) + (month.length() == 1 ? "0" + month : month);
  62. String property = LambdaUtils.getProperty(DeviceCreateIds::getDeviceId);
  63. QueryWrapper<DeviceCreateIds> queryWrapper = new QueryWrapper<DeviceCreateIds>().select(String.format("max(%s) as %s", StringTools.humpToLine(property), property));
  64. DeviceCreateIds deviceCreateIds = getOne(queryWrapper);
  65. JList<DeviceCreateIds> deviceCreateIdss = new JArrayList<>(save.getNum());
  66. Long loginId = AuthorizeUtils.getLoginId(Long.class);
  67. for (int i = 0; i < save.getNum(); i++) {
  68. String tail = null;
  69. if (deviceCreateIds != null) {
  70. String substring = String.valueOf(deviceCreateIds.getDeviceId()).substring(0, 4);
  71. if (substring.equals(yearMonth)) {
  72. tail = String.valueOf(deviceCreateIds.getDeviceId() + (i + 1)).substring(4);
  73. }
  74. }
  75. if (tail == null) {
  76. tail = String.valueOf((i + 1));
  77. int i0 = 6 - tail.length();
  78. for (int i1 = 0; i1 < i0; i1++) {
  79. tail = 0 + tail;
  80. }
  81. }
  82. Long deviceId = Long.valueOf(yearMonth + tail);
  83. DeviceCreateIds deviceCreateIdsInfo = copy(DeviceCreateIds.class, save)
  84. .setDeviceId(deviceId)
  85. .setCreateUserId(loginId)
  86. .setCreateTime(LocalDateTime.now());
  87. deviceCreateIdss.add(deviceCreateIdsInfo);
  88. }
  89. JList<JList<DeviceCreateIds>> partition = deviceCreateIdss.partition(20);
  90. CountDownLatch latch = new CountDownLatch(partition.size());
  91. for (JList<DeviceCreateIds> createIds : partition) {
  92. executor.execute(() -> {
  93. try {
  94. saveBatch(createIds);
  95. } catch (Exception e) {
  96. log.error("", e);
  97. } finally {
  98. latch.countDown();
  99. }
  100. });
  101. }
  102. latch.await();
  103. return R.ok();
  104. }
  105. @PostMapping("page")
  106. @ApiOperation("分页查询")
  107. public R<PageBean<DeviceCreateIdsDto.Vo>> page(@RequestBody DeviceCreateIdsDto.Page page) {
  108. PageBean pageBean = page.getPage();
  109. LambdaQueryWrapper<DeviceCreateIds> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceCreateIds.class)
  110. .ge(DeviceCreateIds::getCreateTime, page.getBeginCreateTime())
  111. .le(DeviceCreateIds::getCreateTime, page.getEndCreateTime())
  112. .ge(DeviceCreateIds::getBindTime, page.getBeginBindTime())
  113. .le(DeviceCreateIds::getBindTime, page.getEndBindTime())
  114. .build()
  115. .orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceCreateIds::getCreateTime);
  116. IPage<DeviceCreateIds> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
  117. IPage<DeviceCreateIdsDto.Vo> voIPage = PlusBeans.copy(DeviceCreateIdsDto.Vo.class, iPage);
  118. PageBean<DeviceCreateIdsDto.Vo> voPageBean = toPageBean(voIPage);
  119. List<DeviceCreateIdsDto.Vo> records = voPageBean.getRecords();
  120. JList<Long> createUserIds = new JArrayList<>(records).getProperty(DeviceCreateIdsDto.Vo::getCreateUserId);
  121. List<SysWorkVo> sysWorkVos = sysWorkUserService.list(new ListDto().setId(createUserIds)).getData();
  122. JMap<Long, SysWorkVo> sysWorkVoJMap = new JArrayList<>(sysWorkVos).toMap(SysWorkVo::getId).cover();
  123. records.forEach(vo -> {
  124. SysWorkVo sysWorkVo = sysWorkVoJMap.get(vo.getCreateUserId());
  125. if (sysWorkVo == null) {
  126. return;
  127. }
  128. vo.setCreateUserName(sysWorkVo.getAccount());
  129. });
  130. return R.ok(voPageBean);
  131. }
  132. }