Browse Source

设备-机器ID号生成

李进 2 years ago
parent
commit
f9129206e2

+ 4 - 3
device-api-service/pom.xml

@@ -26,17 +26,18 @@
 
         <dependency>
             <groupId>com.xy</groupId>
-            <artifactId>xy-redis</artifactId>
+            <artifactId>authorize-api</artifactId>
             <version>1.0</version>
         </dependency>
+
         <dependency>
             <groupId>com.xy</groupId>
-            <artifactId>xy-mp</artifactId>
+            <artifactId>xy-redis</artifactId>
             <version>1.0</version>
         </dependency>
         <dependency>
             <groupId>com.xy</groupId>
-            <artifactId>xy-satoken</artifactId>
+            <artifactId>xy-mp</artifactId>
             <version>1.0</version>
         </dependency>
         <!-- web页面 -->

+ 31 - 0
device-api-service/src/main/java/com/xy/config/ThreadPoolConfig.java

@@ -0,0 +1,31 @@
+package com.xy.config;
+
+import com.dtp.core.support.DynamicTp;
+import com.xy.utils.ThreadPoolUtils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Component
+public class ThreadPoolConfig {
+
+    public static final String DEVICE_CREATE_IDS_SAVE = "deviceCreateIdsSave";
+
+    /**
+     * 设备-机器ID生成线程池
+     */
+    @DynamicTp
+    @Bean(DEVICE_CREATE_IDS_SAVE)
+    public ThreadPoolTaskExecutor deviceCreateIdsSave() {
+        return ThreadPoolUtils.newPoll()
+                .name(DEVICE_CREATE_IDS_SAVE)
+                .coreSize(10)
+                .maxSize(200)
+                .keepAlive(30)
+                .rejected(new ThreadPoolExecutor.CallerRunsPolicy())
+                .builder();
+    }
+
+}

+ 68 - 0
device-api-service/src/main/java/com/xy/entity/DeviceCreateIds.java

@@ -0,0 +1,68 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备-机器ID号生成
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class DeviceCreateIds implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 设备编号;唯一ID,10数,年2月2序号6
+     */
+    @TableId
+    private Long deviceId;
+
+    /**
+     * 设备类型
+     */
+    private Integer deviceType;
+
+    /**
+     * 门类型
+     */
+    private String doorType;
+
+    /**
+     * 绑定状态
+     */
+    private Integer bindState;
+
+    /**
+     * 生成批次号
+     */
+    private String createPc;
+
+    /**
+     * 创建人
+     */
+    private Long createUserId;
+
+    /**
+     * 绑定时间
+     */
+    private LocalDateTime bindTime;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+
+}

+ 74 - 0
device-api-service/src/main/java/com/xy/entity/DeviceRegister.java

@@ -0,0 +1,74 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 设备-注册登记
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class DeviceRegister implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备ID
+     */
+    private Long deviceId;
+
+    /**
+     * 注册序号
+     */
+    private Integer registerNum;
+
+    /**
+     * 设备sn
+     */
+    private String deviceSn;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * 设备批次号
+     */
+    private String devicePc;
+
+    /**
+     * 资产编号
+     */
+    private LocalDateTime assetNo;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime registerUserId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/DeviceCreateIdsMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.DeviceCreateIds;
+
+/**
+ * <p>
+ * 设备-机器ID号生成 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+public interface DeviceCreateIdsMapper extends BaseMapper<DeviceCreateIds> {
+
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/DeviceRegisterMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.DeviceRegister;
+
+/**
+ * <p>
+ * 设备-注册登记 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+public interface DeviceRegisterMapper extends BaseMapper<DeviceRegister> {
+
+}

+ 140 - 0
device-api-service/src/main/java/com/xy/service/impl/DeviceCreateIdsServiceImpl.java

@@ -0,0 +1,140 @@
+package com.xy.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.annotation.Lock;
+import com.xy.collections.list.JArrayList;
+import com.xy.collections.list.JList;
+import com.xy.collections.map.JMap;
+import com.xy.config.ThreadPoolConfig;
+import com.xy.dto.DeviceCreateIdsDto;
+import com.xy.dto.SysWorkUser.ListDto;
+import com.xy.dto.SysWorkUser.SysWorkVo;
+import com.xy.entity.DeviceCreateIds;
+import com.xy.mapper.DeviceCreateIdsMapper;
+import com.xy.service.DeviceCreateIdsService;
+import com.xy.service.SysWorkUserService;
+import com.xy.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+/**
+ * <p>
+ * 设备-机器ID号生成 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Api(tags = "设备-机器ID号生成")
+public class DeviceCreateIdsServiceImpl extends ServiceImpl<DeviceCreateIdsMapper, DeviceCreateIds> implements DeviceCreateIdsService {
+
+    @Resource(name = ThreadPoolConfig.DEVICE_CREATE_IDS_SAVE)
+    private ThreadPoolTaskExecutor executor;
+
+    private final SysWorkUserService sysWorkUserService;
+
+    @SneakyThrows
+    @PostMapping("save")
+    @ApiOperation("添加")
+    @Lock("device-create-ids-save")
+    public R save(@RequestBody @Validated DeviceCreateIdsDto.Save save) {
+        LocalDate localDate = LocalDate.now();
+        String year = String.valueOf(localDate.getYear());
+        String month = String.valueOf(localDate.getMonthValue());
+        String yearMonth = year.substring(2) + (month.length() == 1 ? "0" + month : month);
+        String property = LambdaUtils.getProperty(DeviceCreateIds::getDeviceId);
+        QueryWrapper<DeviceCreateIds> queryWrapper = new QueryWrapper<DeviceCreateIds>().select(String.format("max(%s) as %s", StringTools.humpToLine(property), property));
+        DeviceCreateIds deviceCreateIds = getOne(queryWrapper);
+        JList<DeviceCreateIds> deviceCreateIdss = new JArrayList<>(save.getNum());
+        for (int i = 0; i < save.getNum(); i++) {
+            String tail = null;
+            if (deviceCreateIds != null) {
+                String substring = String.valueOf(deviceCreateIds.getDeviceId()).substring(0, 4);
+                if (substring.equals(yearMonth)) {
+                    tail = String.valueOf(deviceCreateIds.getDeviceId() + (i + 1)).substring(4);
+                }
+            }
+            if (tail == null) {
+                tail = String.valueOf((i + 1));
+                int i0 = 6 - tail.length();
+                for (int i1 = 0; i1 < i0; i1++) {
+                    tail = 0 + tail;
+                }
+            }
+            Long deviceId = Long.valueOf(yearMonth + tail);
+            DeviceCreateIds deviceCreateIdsInfo = copy(DeviceCreateIds.class, save)
+                    .setDeviceId(deviceId)
+                    //.setCreateUserId(AuthorizeUtils.getLoginId(Long.class))
+                    .setCreateTime(LocalDateTime.now());
+            deviceCreateIdss.add(deviceCreateIdsInfo);
+        }
+        JList<JList<DeviceCreateIds>> partition = deviceCreateIdss.partition(20);
+        CountDownLatch latch = new CountDownLatch(partition.size());
+        for (JList<DeviceCreateIds> createIds : partition) {
+            executor.execute(() -> {
+                try {
+                    saveBatch(createIds);
+                } catch (Exception e) {
+                    log.error("", e);
+                } finally {
+                    latch.countDown();
+                }
+            });
+        }
+        latch.await();
+        return R.ok();
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<DeviceCreateIdsDto.Vo>> page(@RequestBody DeviceCreateIdsDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<DeviceCreateIds> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceCreateIds.class)
+                .ge(DeviceCreateIds::getCreateTime, page.getBeginCreateTime())
+                .le(DeviceCreateIds::getCreateTime, page.getEndCreateTime())
+                .ge(DeviceCreateIds::getBindTime, page.getBeginBindTime())
+                .le(DeviceCreateIds::getBindTime, page.getEndBindTime())
+                .build()
+                .orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceCreateIds::getCreateTime);
+        IPage<DeviceCreateIds> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        IPage<DeviceCreateIdsDto.Vo> voIPage = PlusBeans.copy(DeviceCreateIdsDto.Vo.class, iPage);
+        PageBean<DeviceCreateIdsDto.Vo> voPageBean = toPageBean(voIPage);
+        List<DeviceCreateIdsDto.Vo> records = voPageBean.getRecords();
+
+        JList<Long> createUserIds = new JArrayList<>(records).getProperty(DeviceCreateIdsDto.Vo::getCreateUserId);
+        List<SysWorkVo> sysWorkVos = sysWorkUserService.list(new ListDto().setId(createUserIds)).getData();
+        JMap<Long, SysWorkVo> sysWorkVoJMap = new JArrayList<>(sysWorkVos).toMap(SysWorkVo::getId).cover();
+        records.forEach(vo -> {
+            SysWorkVo sysWorkVo = sysWorkVoJMap.get(vo.getCreateUserId());
+            if (sysWorkVo == null) {
+                return;
+            }
+            vo.setCreateUserName(sysWorkVo.getAccount());
+        });
+        return R.ok(voPageBean);
+    }
+}

+ 20 - 0
device-api-service/src/main/java/com/xy/service/impl/DeviceRegisterServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xy.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.entity.DeviceRegister;
+import com.xy.mapper.DeviceRegisterMapper;
+import com.xy.service.DeviceRegisterService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 设备-注册登记 服务实现类
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@Service
+public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper, DeviceRegister> implements DeviceRegisterService {
+
+}

+ 0 - 37
device-api-service/src/main/java/com/xy/utils/DeviceUtils.java

@@ -1,37 +0,0 @@
-package com.xy.utils;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.xy.entity.DeviceInfo;
-import com.xy.mapper.DeviceInfoMapper;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDate;
-
-@Component
-public class DeviceUtils {
-
-    /**
-     * 创建设备id
-     *
-     * @return
-     */
-    public static Long createDeviceId() {
-        LocalDate localDate = LocalDate.now();
-        String year = String.valueOf(localDate.getYear());
-        String month = String.valueOf(localDate.getMonthValue());
-        String yearMonth = year.substring(2) + (month.length() == 1 ? "0" + month : month);
-        DeviceInfoMapper deviceInfoMapper = SpringBeanUtils.getBean(DeviceInfoMapper.class);
-        String property = LambdaUtils.getProperty(DeviceInfo::getDeviceId);
-        QueryWrapper<DeviceInfo> queryWrapper = new QueryWrapper<DeviceInfo>().select(String.format("max(%s) as %s", property, property));
-        DeviceInfo deviceInfo = deviceInfoMapper.selectOne(queryWrapper);
-        String tail = "000001";
-        if (deviceInfo != null) {
-            String substring = String.valueOf(deviceInfo.getDeviceId()).substring(0, 4);
-            if (substring.equals(yearMonth)) {
-                tail = String.valueOf(deviceInfo.getDeviceId() + 1).substring(4);
-            }
-        }
-        return Long.valueOf(yearMonth + tail);
-    }
-
-}

+ 115 - 0
device-api/src/main/java/com/xy/dto/DeviceCreateIdsDto.java

@@ -0,0 +1,115 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@Accessors(chain = true)
+public class DeviceCreateIdsDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Save {
+
+        @NotNull(message = "deviceType不能为空")
+        @ApiModelProperty("设备类型")
+        private Integer deviceType;
+
+        @NotBlank(message = "doorType不能为空")
+        @ApiModelProperty("门类型")
+        private String doorType;
+
+        @NotBlank(message = "createPc不能为空")
+        @ApiModelProperty("生成批次号")
+        private String createPc;
+
+        @NotNull(message = "num不能为空")
+        @Min(value = 1, message = "num不能小于1")
+        @Max(value = 500, message = "num不能大于500")
+        @ApiModelProperty("生成数量")
+        private Integer num;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page extends Vo {
+
+        @ApiModelProperty("设备类型")
+        private PageBean page;
+
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @ApiModelProperty(value = "创建时间-起")
+        private LocalDate beginCreateTime;
+
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @ApiModelProperty(value = "创建时间-始")
+        private LocalDate endCreateTime;
+
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @ApiModelProperty(value = "绑定时间-起")
+        private LocalDate beginBindTime;
+
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @ApiModelProperty(value = "绑定时间-始")
+        private LocalDate endBindTime;
+
+        public LocalDateTime getBeginCreateTime() {
+            return beginCreateTime == null ? null : beginCreateTime.atTime(0, 0, 0);
+        }
+
+        public LocalDateTime getEndCreateTime() {
+            return endCreateTime == null ? null : endCreateTime.atTime(23, 59, 59);
+        }
+
+        public LocalDateTime getBeginBindTime() {
+            return beginBindTime == null ? null : beginBindTime.atTime(0, 0, 0);
+        }
+
+        public LocalDateTime getEndBindTime() {
+            return endBindTime == null ? null : endBindTime.atTime(23, 59, 59);
+        }
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty("设备编号;唯一ID,10数,年2月2序号6")
+        private Long deviceId;
+
+        @ApiModelProperty("设备类型")
+        private Integer deviceType;
+
+        @ApiModelProperty("门类型")
+        private String doorType;
+
+        @ApiModelProperty("绑定状态")
+        private Integer bindState;
+
+        @ApiModelProperty("生成批次号")
+        private String createPc;
+
+        @ApiModelProperty("创建人")
+        private Long createUserId;
+
+        @ApiModelProperty("创建人名称")
+        private String createUserName;
+
+        @ApiModelProperty("绑定时间")
+        private LocalDateTime bindTime;
+
+        @ApiModelProperty("创建时间")
+        private LocalDateTime createTime;
+    }
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/DeviceCreateIdsService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 设备-机器ID号生成 服务类
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@RestMappingController("device-create-ids")
+public interface DeviceCreateIdsService {
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/DeviceRegisterService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 设备-注册登记 服务类
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-29
+ */
+@RestMappingController("device-register")
+public interface DeviceRegisterService {
+
+}

+ 6 - 0
device-start/pom.xml

@@ -24,6 +24,12 @@
             <version>1.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.xy</groupId>
+            <artifactId>authorize-api-cloud</artifactId>
+            <version>1.0</version>
+        </dependency>
+
         <dependency>
             <groupId>com.xy</groupId>
             <artifactId>xy-logback</artifactId>