Forráskód Böngészése

设备管理API更新

shudonghui 1 éve
szülő
commit
0a2a8d75be

+ 139 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DeviceImportDto.java

@@ -0,0 +1,139 @@
+package com.qmth.sop.business.bean.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.qmth.sop.business.util.excel.BasicExcelRow;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description: 客户导入Dto
+ * @Param:
+ * @return:
+ * @Author: shudonghui
+ * @Date: 2023/7/31
+ */
+@ColumnWidth(value = 30)
+@HeadStyle(fillForegroundColor = 11)
+@HeadFontStyle(color = 1)
+public class DeviceImportDto extends BasicExcelRow implements Serializable {
+
+
+    @ExcelProperty(value = "设备编号")
+    @NotBlank(message = "设备编号不能为空")
+    private String deviceCode;
+
+    @ExcelProperty(value = "序列号")
+    @NotBlank(message = "序列号不能为空")
+    private String serialNo;
+
+    @ExcelProperty(value = "品牌")
+    @NotBlank(message = "品牌不能为空")
+    private String brand;
+
+    @ExcelProperty(value = "型号")
+    @NotBlank(message = "型号不能为空")
+    private String model;
+
+    @ExcelProperty(value = "购买时间")
+    @NotBlank(message = "购买时间不能为空")
+    private String buyTime;
+
+    @ExcelProperty(value = "供应商")
+    private String supplier;
+
+    @ExcelProperty(value = "状态(正常/故障)")
+    private String status;
+
+    @ExcelProperty(value = "当前所在地")
+    private String location;
+
+    @ExcelProperty(value = "总扫描量")
+    private Long scanCount;
+
+    @ExcelProperty(value = "出库/入库")
+    private String bound;
+
+    public String getDeviceCode() {
+        return deviceCode;
+    }
+
+    public void setDeviceCode(String deviceCode) {
+        this.deviceCode = deviceCode;
+    }
+
+    public String getSerialNo() {
+        return serialNo;
+    }
+
+    public void setSerialNo(String serialNo) {
+        this.serialNo = serialNo;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public String getBuyTime() {
+        return buyTime;
+    }
+
+    public void setBuyTime(String buyTime) {
+        this.buyTime = buyTime;
+    }
+
+    public String getSupplier() {
+        return supplier;
+    }
+
+    public void setSupplier(String supplier) {
+        this.supplier = supplier;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public Long getScanCount() {
+        return scanCount;
+    }
+
+    public void setScanCount(Long scanCount) {
+        this.scanCount = scanCount;
+    }
+
+    public String getBound() {
+        return bound;
+    }
+
+    public void setBound(String bound) {
+        this.bound = bound;
+    }
+}

+ 2 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysDeviceService.java

@@ -7,6 +7,7 @@ import com.qmth.sop.business.entity.SysDevice;
 import com.qmth.sop.common.enums.DeviceStatusEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -42,4 +43,5 @@ public interface SysDeviceService extends IService<SysDevice>{
 
     boolean delete(long[] ids);
 
+    void saveSysDevice(List<SysDevice> sysDevices);
 }

+ 6 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysDeviceServiceImpl.java

@@ -103,4 +103,10 @@ public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice
         return this.removeByIds(idList);
     }
 
+    @Override
+    @Transactional
+    public void saveSysDevice(List<SysDevice> sysDevices) {
+        this.saveBatch(sysDevices);
+    }
+
 }

+ 84 - 0
sop-business/src/main/java/com/qmth/sop/business/templete/execute/AsyncSysDeviceImportService.java

@@ -0,0 +1,84 @@
+package com.qmth.sop.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.sop.business.bean.dto.CustomImportDto;
+import com.qmth.sop.business.bean.dto.DeviceImportDto;
+import com.qmth.sop.business.entity.TBTask;
+import com.qmth.sop.business.service.TBTaskService;
+import com.qmth.sop.business.templete.importData.AsyncImportTaskTemplete;
+import com.qmth.sop.business.templete.service.TaskLogicService;
+import com.qmth.sop.business.util.excel.BasicExcelListener;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.TaskResultEnum;
+import com.qmth.sop.common.enums.TaskStatusEnum;
+import com.qmth.sop.common.util.Result;
+import com.qmth.sop.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
+import java.util.StringJoiner;
+
+/** 
+* @Description: 客户表导入
+* @Param:  
+* @return:  
+* @Author: wangliang
+* @Date: 2023/8/1 
+*/ 
+@Service
+public class AsyncSysDeviceImportService extends AsyncImportTaskTemplete {
+    private final static Logger log = LoggerFactory.getLogger(AsyncSysDeviceImportService.class);
+    public static final String OBJ_TITLE = "设备导入";
+
+    @Resource
+    TaskLogicService taskLogicService;
+
+    @Resource
+    TBTaskService tbTaskService;
+
+    @Override
+    public Result importTask(Map<String, Object> map) throws Exception {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+        tbTask.setSummary(stringJoinerSummary.toString());
+        tbTaskService.updateById(tbTask);
+        try {
+            // 执行导入基础用户数据
+            Map<String, Object> result = taskLogicService.executeImportDeviceLogic(map);
+            LinkedMultiValueMap<String, DeviceImportDto> deviceImportDtoLinkedMultiValueMap = (LinkedMultiValueMap<String, DeviceImportDto>) result.get(SystemConstant.EXCEL_DATA);
+            String errorList = (String) result.get(SystemConstant.EXCEL_DATA_ERROR);
+            int successSize = Objects.nonNull(deviceImportDtoLinkedMultiValueMap.get(BasicExcelListener.SUCCESS)) ? deviceImportDtoLinkedMultiValueMap.get(BasicExcelListener.SUCCESS).size() : 0;
+            int errorSize = Objects.nonNull(deviceImportDtoLinkedMultiValueMap.get(BasicExcelListener.ERROR)) ? deviceImportDtoLinkedMultiValueMap.get(BasicExcelListener.ERROR).size() : 0;
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}{4}{5}{6}{7}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, (successSize + errorSize), FINISH_TOTAL_SIZE, successSize, FINISH_SUCCESS_SIZE, errorSize, FINISH_ERROR_SIZE));
+            if (Objects.nonNull(errorList) && !Objects.equals(errorList, "")) {
+                tbTask.setResult(TaskResultEnum.ERROR);
+                stringJoinerSummary.add(MessageFormat.format("{0}{1}", ERROR_DATA, errorList));
+            } else {
+                tbTask.setResult(TaskResultEnum.SUCCESS);
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
+            tbTaskService.updateById(tbTask);
+        }
+        return ResultUtil.ok(map);
+    }
+}

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/templete/service/TaskLogicService.java

@@ -63,4 +63,13 @@ public interface TaskLogicService {
      * @throws Exception 异常
      */
     Map<String, Object> executeExportDingAttendanceLogic(Map<String, Object> map)throws Exception;
+
+    /**
+     * 设备导入
+     *
+     * @param map 数据源
+     * @return 结果
+     * @throws Exception 异常
+     */
+    Map<String, Object> executeImportDeviceLogic(Map<String, Object> map)throws Exception;
 }

+ 66 - 0
sop-business/src/main/java/com/qmth/sop/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.sop.business.bean.dto.CustomImportDto;
+import com.qmth.sop.business.bean.dto.DeviceImportDto;
 import com.qmth.sop.business.bean.dto.SysMessageExportDto;
 import com.qmth.sop.business.bean.dto.UserArchivesImportDto;
 import com.qmth.sop.business.bean.params.UserArchivesParam;
@@ -31,6 +32,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.InputStream;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -76,6 +78,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Resource
     private SequenceService sequenceService;
 
+    @Resource
+    private SysDeviceService sysDeviceService;
+
     /**
      * 处理导入人员档案数据
      *
@@ -353,6 +358,67 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         return map;
     }
 
+    @Override
+    public Map<String, Object> executeImportDeviceLogic(Map<String, Object> map) throws Exception {
+        InputStream inputStream = null;
+        try {
+            TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+            inputStream = importExportUtil.getUploadFileInputStream(tbTask);
+            LinkedMultiValueMap<String, DeviceImportDto> customImportDtoLinkedMultiValueMap = new LinkedMultiValueMap<>();
+            StringJoiner errorData = new StringJoiner("");
+            EasyExcel.read(inputStream, DeviceImportDto.class, new BasicExcelListener<DeviceImportDto>() {
+
+                @Override
+                public void handle(LinkedMultiValueMap<String, DeviceImportDto> dataList, StringJoiner errorDataSj) {
+                    customImportDtoLinkedMultiValueMap.addAll(dataList);
+                    errorData.add(errorDataSj.toString());
+                }
+            }).headRowNumber(2).sheet(0).doRead();
+
+
+            map.computeIfAbsent(SystemConstant.EXCEL_DATA, v -> customImportDtoLinkedMultiValueMap);
+            map.computeIfAbsent(SystemConstant.EXCEL_DATA_ERROR, v -> errorData.toString());
+            int errorSize = Objects.nonNull(customImportDtoLinkedMultiValueMap.get(BasicExcelListener.ERROR)) ? Objects.requireNonNull(customImportDtoLinkedMultiValueMap.get(BasicExcelListener.ERROR)).size() : 0;
+
+            if (errorSize == 0) {
+                List<SysDevice> sysDevices=new ArrayList<>();
+                SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+                List<SysSupplier> supplierList = sysSupplierService.list(new QueryWrapper<SysSupplier>().lambda().eq(SysSupplier::getType,SupplierTypeEnum.DEVICE));
+                Objects.requireNonNull(customImportDtoLinkedMultiValueMap.get(BasicExcelListener.SUCCESS)).forEach(e -> {
+                    SysDevice device=new SysDevice();
+                    device.setDeviceCode(e.getDeviceCode());
+                    InOutTypeEnum bound = InOutTypeEnum.IN.getTitle().equals(e.getBound()) ? InOutTypeEnum.IN : InOutTypeEnum.OUT;
+                    device.setBound(bound);
+                    device.setBrand(e.getBrand());
+                    device.setLocation(e.getLocation());
+                    device.setEnable(true);
+                   //日期字符串转换时间戳
+                    try {
+                        device.setBuyTime(new SimpleDateFormat("yyyy/MM/dd").parse(e.getBuyTime()).getTime());
+                    } catch (ParseException ex) {
+                        throw new RuntimeException(ex);
+                    }
+                    device.setScanCount(e.getScanCount());
+                    device.setSupplierId(supplierList.stream().filter(s -> s.getName().equals(e.getSupplier())).findFirst().get().getId());
+                    device.setSerialNo(e.getSerialNo());
+                    DeviceStatusEnum status = DeviceStatusEnum.NORMAL.getTitle().equals(e.getStatus()) ? DeviceStatusEnum.NORMAL : DeviceStatusEnum.BREAK_DOWN;
+                    device.setStatus(status);
+                    device.setSync(false);
+                    device.insertInfo(sysUser.getId());
+                    sysDevices.add(device);
+                });
+                sysDeviceService.saveSysDevice(sysDevices);
+            }
+
+
+        } finally {
+            if (Objects.nonNull(inputStream)) {
+                inputStream.close();
+            }
+        }
+        return map;
+    }
+
     /**
      * 处理导出人员档案数据
      *

+ 3 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/TaskTypeEnum.java

@@ -21,7 +21,9 @@ public enum TaskTypeEnum {
 
     DING_COUNT_EXPORT("考勤打卡统计导出"),
 
-    DING_ATTENDANCE_EXPORT("考勤明细导出");
+    DING_ATTENDANCE_EXPORT("考勤明细导出"),
+
+    DEVICE_IMPORT("设备导入");
 
     private String title;
 

+ 23 - 2
sop-server/src/main/java/com/qmth/sop/server/api/SysDeviceController.java

@@ -6,20 +6,26 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.bean.result.SysDeviceResult;
 import com.qmth.sop.business.entity.SysDevice;
+import com.qmth.sop.business.entity.TBTask;
 import com.qmth.sop.business.service.SysDeviceService;
+import com.qmth.sop.business.service.TBTaskService;
+import com.qmth.sop.business.templete.execute.AsyncSysDeviceImportService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.DeviceStatusEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
+import com.qmth.sop.common.enums.TaskTypeEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import io.swagger.annotations.*;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.util.Map;
 
 /**
  * 设备配置表 控制器
@@ -32,13 +38,19 @@ import javax.validation.constraints.Min;
  */
 @Api(tags = "设备配置表 Controller")
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX+"/sys/device")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX+SystemConstant.PREFIX_URL_DEVICE)
 public class SysDeviceController {
 
 
     @Resource
     SysDeviceService sysDeviceService;
 
+    @Resource
+    private TBTaskService tbTaskService;
+
+    @Resource
+    AsyncSysDeviceImportService asyncSysDeviceImportService;
+
     
     @ApiOperation(value = "设备配置表查询接口")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
@@ -104,6 +116,15 @@ public class SysDeviceController {
         return ResultUtil.ok(sysDeviceService.delete(ids));
     }
 
-
+    @Aac(auth=false)
+    @ApiOperation(value = "设备导入")
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = Object.class)})
+    public Result importUserArchives(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+        Map<String, Object> map = tbTaskService.saveTask(file, TaskTypeEnum.DEVICE_IMPORT);
+        asyncSysDeviceImportService.importTask(map);
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        return ResultUtil.ok(tbTask.getId());
+    }
 
 }

BIN
sop-server/src/main/resources/static/device.xlsx