浏览代码

添加自定义机器号

李进 2 年之前
父节点
当前提交
32a944f357

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

@@ -54,6 +54,11 @@ public class DeviceCreateIds implements Serializable {
      */
      */
     private LocalDateTime bindTime;
     private LocalDateTime bindTime;
 
 
+    /**
+     * 是否自定义
+     */
+    private Boolean isCustom;
+
     /**
     /**
      * 创建时间
      * 创建时间
      */
      */

+ 44 - 5
device-api-service/src/main/java/com/xy/service/DeviceCreateIdsServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.annotation.Lock;
 import com.xy.annotation.Lock;
 import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
 import com.xy.collections.list.JList;
+import com.xy.collections.map.JHashMap;
 import com.xy.collections.map.JMap;
 import com.xy.collections.map.JMap;
 import com.xy.config.DeviceThreadPoolConfig;
 import com.xy.config.DeviceThreadPoolConfig;
 import com.xy.device.EnumDeviceQrCode;
 import com.xy.device.EnumDeviceQrCode;
@@ -63,9 +64,11 @@ public class DeviceCreateIdsServiceImpl extends ServiceImpl<DeviceCreateIdsMappe
         String month = String.valueOf(localDate.getMonthValue());
         String month = String.valueOf(localDate.getMonthValue());
         String yearMonth = year.substring(2) + (month.length() == 1 ? "0" + month : month);
         String yearMonth = year.substring(2) + (month.length() == 1 ? "0" + month : month);
         String property = LambdaUtils.getProperty(DeviceCreateIds::getDeviceId);
         String property = LambdaUtils.getProperty(DeviceCreateIds::getDeviceId);
-        QueryWrapper<DeviceCreateIds> queryWrapper = new QueryWrapper<DeviceCreateIds>().select(String.format("max(%s) as %s", StringTools.humpToLine(property), property));
+        QueryWrapper<DeviceCreateIds> queryWrapper = new QueryWrapper<DeviceCreateIds>()
+                .select(String.format("max(%s) as %s", StringTools.humpToLine(property), property))
+                .eq(StringTools.humpToLine(LambdaUtils.getProperty(DeviceCreateIds::getIsCustom)), false);
         DeviceCreateIds deviceCreateIds = getOne(queryWrapper);
         DeviceCreateIds deviceCreateIds = getOne(queryWrapper);
-        JList<DeviceCreateIds> deviceCreateIdss = new JArrayList<>(save.getNum());
+        JMap<Long, DeviceCreateIds> deviceCreateIdss = new JHashMap<>(save.getNum());
         Long loginId = AuthorizeUtils.getLoginId(Long.class);
         Long loginId = AuthorizeUtils.getLoginId(Long.class);
         for (int i = 0; i < save.getNum(); i++) {
         for (int i = 0; i < save.getNum(); i++) {
             String tail = null;
             String tail = null;
@@ -87,13 +90,33 @@ public class DeviceCreateIdsServiceImpl extends ServiceImpl<DeviceCreateIdsMappe
                     .setDeviceId(deviceId)
                     .setDeviceId(deviceId)
                     .setCreateUserId(loginId)
                     .setCreateUserId(loginId)
                     .setCreateTime(LocalDateTime.now());
                     .setCreateTime(LocalDateTime.now());
-            deviceCreateIdss.add(deviceCreateIdsInfo);
+            deviceCreateIdss.put(deviceId, deviceCreateIdsInfo);
         }
         }
-        JList<JList<DeviceCreateIds>> partition = deviceCreateIdss.partition(20);
+        //去重复
+        weight(deviceCreateIdss, save.getNum());
+        //添加
+        JList<DeviceCreateIds> value = deviceCreateIdss.toList().value();
+        JList<JList<DeviceCreateIds>> partition = value.partition(20);
         ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.DEVICE_COMMON_POLL, partition.size());
         ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.DEVICE_COMMON_POLL, partition.size());
         partition.forEach(createIds -> execute.execute(() -> saveBatch(createIds)));
         partition.forEach(createIds -> execute.execute(() -> saveBatch(createIds)));
         execute.end();
         execute.end();
-        return R.ok(deviceCreateIdss);
+        return R.ok(value);
+    }
+
+    @PostMapping("save")
+    @ApiOperation("添加自定义机器号")
+    @Lock("device-create-ids-save")
+    public R saveCustom(@RequestBody @Validated DeviceCreateIdsDto.SaveCustom saveCustom) {
+        DeviceCreateIds deviceCreateIds = getById(saveCustom.getDeviceId());
+        if (deviceCreateIds != null) {
+            return R.fail("机器号已存在");
+        }
+        DeviceCreateIds deviceCreateIdsInfo = copy(DeviceCreateIds.class, saveCustom)
+                .setCreateUserId(AuthorizeUtils.getLoginId(Long.class))
+                .setIsCustom(true)
+                .setCreateTime(LocalDateTime.now());
+        save(deviceCreateIdsInfo);
+        return R.ok();
     }
     }
 
 
     @PostMapping("page")
     @PostMapping("page")
@@ -163,4 +186,20 @@ public class DeviceCreateIdsServiceImpl extends ServiceImpl<DeviceCreateIdsMappe
         }
         }
         QRCodeUtils.create(infos, 400, 400, "back1.png", list).download(list);
         QRCodeUtils.create(infos, 400, 400, "back1.png", list).download(list);
     }
     }
+
+
+    private void weight(JMap<Long, DeviceCreateIds> deviceCreateIdss, int num) {
+        List<DeviceCreateIds> list = list(new LambdaQueryWrapper<DeviceCreateIds>().in(DeviceCreateIds::getDeviceId, deviceCreateIdss.toList().key()));
+        if (Emptys.check(list)) {
+            list.forEach(deviceCreateIdsInfo -> {
+                //添加
+                DeviceCreateIds deviceCreateIdsOld = deviceCreateIdss.get(deviceCreateIdsInfo.getDeviceId());
+                Long deviceId = deviceCreateIdsOld.getDeviceId() + num;
+                deviceCreateIdss.put(deviceId, copy(DeviceCreateIds.class, deviceCreateIdsOld).setDeviceId(deviceId));
+                //删除
+                deviceCreateIdss.remove(deviceCreateIdsInfo.getDeviceId());
+            });
+            weight(deviceCreateIdss, num);
+        }
+    }
 }
 }

+ 19 - 1
device-api-service/src/main/java/com/xy/service/DeviceRegisterServiceImpl.java

@@ -17,12 +17,12 @@ import com.xy.dto.*;
 import com.xy.entity.*;
 import com.xy.entity.*;
 import com.xy.mapper.*;
 import com.xy.mapper.*;
 import com.xy.utils.*;
 import com.xy.utils.*;
-import com.xy.utils.CommConsts;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -32,7 +32,10 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -271,6 +274,21 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
         return R.ok();
         return R.ok();
     }
     }
 
 
+    @SneakyThrows
+    @ApiOperation("下载sn注册设备模板")
+    @PostMapping("downloadSnTemplet")
+    public void downloadSnTemplet(HttpServletResponse response) {
+        InputStream inputStream = IoUtils.inputStream("sn_templet.xlsx").get();
+        response.setHeader("Content-Disposition", "attachment; filename=" + "sn_templet.xlsx");
+        response.setContentType("application/xlsx");
+        byte[] buffer = new byte[1024];
+        int bytesRead;
+        OutputStream outputStream = response.getOutputStream();
+        while ((bytesRead = inputStream.read(buffer)) != -1) {
+            outputStream.write(buffer, 0, bytesRead);
+        }
+    }
+
     @Slf4j
     @Slf4j
     @RequiredArgsConstructor
     @RequiredArgsConstructor
     public static class UploadSaveBySnListener implements ReadListener<UploadSaveBySn> {
     public static class UploadSaveBySnListener implements ReadListener<UploadSaveBySn> {

+ 23 - 1
device-api/src/main/java/com/xy/dto/DeviceCreateIdsDto.java

@@ -6,7 +6,10 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 
 
-import javax.validation.constraints.*;
+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.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
@@ -38,6 +41,22 @@ public class DeviceCreateIdsDto {
         private Integer num;
         private Integer num;
     }
     }
 
 
+    @Data
+    @Accessors(chain = true)
+    public static class SaveCustom {
+
+        @NotNull(message = "deviceId不能为空")
+        private Long deviceId;
+
+        @NotBlank(message = "doorType不能为空")
+        @ApiModelProperty("门类型")
+        private String doorType;
+
+        @NotBlank(message = "createPc不能为空")
+        @ApiModelProperty("生成批次号")
+        private String createPc;
+    }
+
     @Data
     @Data
     @Accessors(chain = true)
     @Accessors(chain = true)
     public static class Update extends Vo {
     public static class Update extends Vo {
@@ -157,6 +176,9 @@ public class DeviceCreateIdsDto {
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         private LocalDateTime bindTime;
         private LocalDateTime bindTime;
 
 
+        @ApiModelProperty("是否自定义")
+        private Boolean isCustom;
+
         @ApiModelProperty("创建时间")
         @ApiModelProperty("创建时间")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         private LocalDateTime createTime;
         private LocalDateTime createTime;

二进制
device-start/src/main/resources/sn_templet.xlsx