新增tr069

master
李小林 10 months ago
parent 709b6c2a7b
commit 6f965d2094
  1. 4
      src/main/java/com/bellmann/common/enums/DevTypeVerStatusEnum.java
  2. 2
      src/main/java/com/bellmann/common/enums/FileUrlEnum.java
  3. 19
      src/main/java/com/bellmann/common/model/Tr069Xml.java
  4. 4
      src/main/java/com/bellmann/common/result/ResultCode.java
  5. 39
      src/main/java/com/bellmann/common/util/FTPUtils.java
  6. 54
      src/main/java/com/bellmann/common/util/Tr069XmlUtils.java
  7. 38
      src/main/java/com/bellmann/config/ThreadPoolConfig.java
  8. 37
      src/main/java/com/bellmann/controller/DeviceTypeController.java
  9. 20
      src/main/java/com/bellmann/controller/DeviceTypeVerController.java
  10. 5
      src/main/java/com/bellmann/controller/FileOptionController.java
  11. 9
      src/main/java/com/bellmann/controller/FileRecordController.java
  12. 66
      src/main/java/com/bellmann/controller/Tr069VerController.java
  13. 3
      src/main/java/com/bellmann/converter/FileRecordConverter.java
  14. 14
      src/main/java/com/bellmann/converter/ServiceConverter.java
  15. 22
      src/main/java/com/bellmann/converter/Tr069VerConverter.java
  16. 2
      src/main/java/com/bellmann/manger/DeviceTypeVerDetailManager.java
  17. 2
      src/main/java/com/bellmann/manger/FileRecordManager.java
  18. 9
      src/main/java/com/bellmann/manger/ServiceManager.java
  19. 25
      src/main/java/com/bellmann/manger/impl/DeviceTypeVerDetailManagerImpl.java
  20. 7
      src/main/java/com/bellmann/manger/impl/FileRecordManagerImpl.java
  21. 30
      src/main/java/com/bellmann/manger/impl/ServiceManagerImpl.java
  22. 10
      src/main/java/com/bellmann/mapper/DeviceTypeMapper.java
  23. 15
      src/main/java/com/bellmann/mapper/ServiceMapper.java
  24. 14
      src/main/java/com/bellmann/mapper/Tr069VerMapper.java
  25. 2
      src/main/java/com/bellmann/model/entity/DeviceTypeVer.java
  26. 26
      src/main/java/com/bellmann/model/entity/Service.java
  27. 26
      src/main/java/com/bellmann/model/entity/Tr069Ver.java
  28. 60
      src/main/java/com/bellmann/model/form/FileRecordForm.java
  29. 25
      src/main/java/com/bellmann/model/form/Tr069VerForm.java
  30. 25
      src/main/java/com/bellmann/model/vo/DeviceServiceVO.java
  31. 28
      src/main/java/com/bellmann/model/vo/Tr069VerVO.java
  32. 15
      src/main/java/com/bellmann/service/DeviceTypeService.java
  33. 7
      src/main/java/com/bellmann/service/DeviceTypeVerService.java
  34. 3
      src/main/java/com/bellmann/service/FileOptionService.java
  35. 3
      src/main/java/com/bellmann/service/FileRecordService.java
  36. 4
      src/main/java/com/bellmann/service/ServiceService.java
  37. 21
      src/main/java/com/bellmann/service/Tr069VerService.java
  38. 78
      src/main/java/com/bellmann/service/impl/DeviceTypeServiceImpl.java
  39. 120
      src/main/java/com/bellmann/service/impl/DeviceTypeVerServiceImpl.java
  40. 16
      src/main/java/com/bellmann/service/impl/FileOptionServiceImpl.java
  41. 13
      src/main/java/com/bellmann/service/impl/FileRecordServiceImpl.java
  42. 10
      src/main/java/com/bellmann/service/impl/ServiceServiceImpl.java
  43. 75
      src/main/java/com/bellmann/service/impl/Tr069VerServiceImpl.java
  44. 52
      src/main/resources/mapper/DeviceTypeMapper.xml
  45. 5
      src/main/resources/mapper/DeviceTypeVerMapper.xml
  46. 21
      src/main/resources/mapper/ServiceMapper.xml
  47. 18
      src/main/resources/mapper/Tr069VerMapper.xml

@ -7,8 +7,10 @@ import lombok.Getter;
@Schema(enumAsRef = true)
public enum DevTypeVerStatusEnum implements IBaseEnum<String> {
UNAUDITED("0","未审核"),
AUDITED("1","已审核");
AUDITED("1","已审核"),
EMPTY("-999","");
;
@Getter
private String value;

@ -6,6 +6,8 @@ import lombok.Getter;
public enum FileUrlEnum implements IBaseEnum<String> {
SOFT_VER_FILE_URL("0","devtypever/firmware/%s/"),
CORP_CONF_FILE_URL("1","devtypever/conf/%s/"),
TR069_FILE_URL("3","tr069/%s"),
;
@Getter
private String value;

@ -0,0 +1,19 @@
package com.bellmann.common.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class Tr069Xml {
private String tagName;
private String read;
private String write;
private String type;
private List<Tr069Xml> children = new ArrayList<>();
public void addChild(Tr069Xml tr069Xml) {
this.children.add(tr069Xml);
}
}

@ -93,8 +93,10 @@ public enum ResultCode implements IResultCode, Serializable {
DEVICE_TYPE_VER_EXIST_OR_BINDING("F0004","存在该设备类型软件版本的设备或者绑定!"),
FILE_NOT_OF_TYPE_VER("F0005","文件不属于该设备类型软件版本"),
DATA_NOT_FOUND("F0006", "查不到数据"),
;
IDS_IS_NULL("F0007", "ids为空"),
DEVICE_TYPE_VER("F008","存在该设备类型的软件版本或设备"),
;
@Override
public String getCode() {
return code;

@ -182,12 +182,13 @@ public class FTPUtils {
String path = changeEncoding(dirPath);
changeAndMakeWorkingDir(path);
String[] fileNames = ftpClient.listNames();
log.info(Arrays.toString(fileNames));
if (fileNames == null || fileNames.length == 0) {
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
}
if(!Arrays.stream(fileNames).allMatch(element -> element.equals(filename))){
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
};
// if(!Arrays.stream(fileNames).allMatch(element -> element.equals(filename))){
// throw new BusinessException(ResultCode.FILE_NOT_EXIST);
// };
for (String fileName : fileNames) {
String ftpName = new String(fileName.getBytes(SERVER_CHARSET), LOCAL_CHARSET);
if (StringUtils.equals(ftpName,filename)) {
@ -202,6 +203,32 @@ public class FTPUtils {
}
}
}
public static InputStream download (FileServer oaFtp, String filename, String dirPath) {
// 登录
login(oaFtp);
if (ftpClient != null) {
try {
String path = changeEncoding(dirPath);
changeAndMakeWorkingDir(path);
String[] fileNames = ftpClient.listNames();
log.info(Arrays.toString(fileNames));
if (fileNames == null || fileNames.length == 0) {
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
}
for (String fileName : fileNames) {
String ftpName = new String(fileName.getBytes(SERVER_CHARSET), LOCAL_CHARSET);
if (StringUtils.equals(ftpName,filename)) {
return ftpClient.retrieveFileStream(fileName);
}
}
} catch (IOException e) {
log.error("",e);
} finally {
closeConnect();
}
}
return null;
}
private static void print(HttpServletResponse response,InputStream in,String fileName){
byte[] buffer = new byte[1024*10];
@ -255,9 +282,9 @@ public class FTPUtils {
if (fileNames == null || fileNames.length == 0) {
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
}
if(!Arrays.stream(fileNames).allMatch(element -> element.equals(sourceRemoteFileName))){
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
};
// if(!Arrays.stream(fileNames).allMatch(element -> element.equals(sourceRemoteFileName))){
// throw new BusinessException(ResultCode.FILE_NOT_EXIST);
// };
for (String fileName : fileNames) {
String ftpName = new String(fileName.getBytes(SERVER_CHARSET), LOCAL_CHARSET);
if (StringUtils.equals(ftpName,sourceRemoteFileName)) {

@ -0,0 +1,54 @@
package com.bellmann.common.util;
import com.bellmann.common.model.Tr069Xml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class Tr069XmlUtils {
public static Tr069Xml parseXML(InputStream xmlFile) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
Element rootElement = doc.getDocumentElement();
return parseElement(rootElement);
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
if (xmlFile!=null){
try {
xmlFile.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
private static Tr069Xml parseElement(Element element) {
Tr069Xml tr069Xml = new Tr069Xml();
tr069Xml.setTagName(element.getTagName());
tr069Xml.setRead(element.getAttribute("READ"));
tr069Xml.setWrite(element.getAttribute("WRITE"));
tr069Xml.setType(element.getAttribute("TYPE"));
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i) instanceof Element) {
Element childElement = (Element) children.item(i);
tr069Xml.addChild(parseElement(childElement));
}
}
return tr069Xml;
}
}

@ -0,0 +1,38 @@
package com.bellmann.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class ThreadPoolConfig {
@Bean("threadPoolTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//设置核心线程数,线程池维护线程的最小数量,即使没有任务需要执行,也会一直存活
executor.setCorePoolSize(8);
//如果设置allowCoreThreadTimeOut = true(默认是false)时,核心线程会超时关闭。
// executor.setAllowCoreThreadTimeOut(true);
//设置阻塞队列,当核心线程数达到最大时,新任务会放在该队列中排队等待执行
executor.setQueueCapacity(2000);
//设置最大线程池数量,当线程数>corePoolSize(核心线程数),且阻塞队列满的时候。线程池会创建新线程池来处理业务
//阻塞队列已满时且当前线程数=maxPoolSize,线程池会拒绝处理任务二抛出异常
executor.setMaxPoolSize(64);
//当线程空闲时间达到keepAliveSeconds时,线程会退出,直到线程数量=corePoolSize;
//允许线程空闲时间30s
executor.setKeepAliveSeconds(30);
//Spring提供的ThreadPoolTaskExecutor提供setThreadNamePrefix()方法
//JDK提供的ThreadPoolExecutor不提供该方法
executor.setThreadNamePrefix("bellmann");
//拒绝策略,当pool达到最大时,如何处理新任务
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
return executor;
}
}

@ -1,6 +1,7 @@
package com.bellmann.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.model.Option;
import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result;
import com.bellmann.model.query.DeviceTypeQuery;
@ -12,6 +13,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@Tag(name = "11.设备类型接口")
@RestController
@RequiredArgsConstructor
@ -34,4 +38,37 @@ public class DeviceTypeController {
return Result.success(deviceTypeVO);
}
@GetMapping("vendor-name-option")
@Operation(summary = "查找设备供应商选择框")
public Result<List<Option<String>>> vendorNameOption(){
List<Option<String>> list = deviceTypeService.vendorNameOption();
return Result.success(list);
}
@GetMapping("vendor-oui-option/")
@Operation(summary = "查找设备OUI选择框")
public Result<List<Option<String>>> vendorOuiOption(@RequestParam String vendorName){
List<Option<String>> list = deviceTypeService.vendorOuiOption(vendorName);
return Result.success(list);
}
@GetMapping("type-name-option/")
@Operation(summary = "查找设备型号选择框")
public Result<List<Option<String>>> typeNameOption(@RequestParam String vendorOui){
List<Option<String>> list = deviceTypeService.typeNameOption(vendorOui);
return Result.success(list);
}
@GetMapping("hard-ver-option/")
@Operation(summary = "查找设备硬件版本选择框")
public Result<List<Option<String>>> hardVerOption(@RequestParam String typeName){
List<Option<String>> list = deviceTypeService.hardVerOption(typeName);
return Result.success(list);
}
@PostMapping("deletes")
@Operation(summary = "删除设备类型")
public Result<String> deleteByIds(@RequestBody ArrayList<Long> ids){
return deviceTypeService.deleteByIds(ids);
}
}

@ -7,6 +7,7 @@ import com.bellmann.common.result.Result;
import com.bellmann.model.form.DeviceTypeVerForm;
import com.bellmann.model.form.VendorProfileForm;
import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.DomainOption;
import com.bellmann.model.vo.FileRecordVO;
@ -21,6 +22,8 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@Tag(name = "12.设备类型软件接口")
@RestController
@ -94,8 +97,7 @@ public class DeviceTypeVerController {
@Operation(summary = "查看厂商配置文件信息")
@GetMapping("/list-vendor-profile/{typeAndVerId}")
public Result<List<FileRecordVO>> listVendorProfile(@PathVariable Long typeAndVerId){
public Result<List<FileRecordVO>> listVendorProfile(@PathVariable Long typeAndVerId) throws Exception {
List<FileRecordVO> list = deviceTypeVerService.listVendorProfile(typeAndVerId);
return Result.success(list);
}
@ -125,4 +127,18 @@ public class DeviceTypeVerController {
int rows = deviceTypeVerService.editVerDomain(typeAndVerId,list);
return Result.success(rows);
}
@Operation(summary = "获取设备类型及设备软件版本支持的业务信息列表分页数据")
@GetMapping("/page-service/{typeAndVerId}")
public PageResult<DeviceServiceVO> pageService(@PathVariable Long typeAndVerId, BasePageQuery pageQuery){
Page<DeviceServiceVO> page = deviceTypeVerService.pageService(typeAndVerId,pageQuery);
return PageResult.success(page);
}
@Operation(summary = "新增设备类型软件版本信息")
@PostMapping("/add-type-ver/{devTypeId}")
public Result<Integer> addTypeVer(@RequestBody DeviceTypeVerForm form, @PathVariable Long devTypeId){
int rows = deviceTypeVerService.addTypeVer(form,devTypeId);
return Result.success(rows);
}
}

@ -1,6 +1,8 @@
package com.bellmann.controller;
import com.bellmann.common.model.Tr069Xml;
import com.bellmann.common.result.Result;
import com.bellmann.common.util.Tr069XmlUtils;
import com.bellmann.plugin.dupsubmit.annotation.PreventDuplicateSubmit;
import com.bellmann.service.FileOptionService;
import io.swagger.v3.oas.annotations.Operation;
@ -14,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.io.InputStream;
@Tag(name = "09.文件操作接口")
@RestController
@ -50,4 +53,6 @@ public class FileOptionController {
@RequestParam String fileUrl){
return Result.success(fileOptionService.removeFile(fileUrl,fileName));
}
}

@ -3,6 +3,8 @@ package com.bellmann.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result;
import com.bellmann.model.form.FileRecordForm;
import com.bellmann.model.query.FileRecordQuery;
import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.service.FileRecordService;
@ -40,5 +42,12 @@ public class FileRecordController {
Page<FileRecordVO> result = fileRecordService.page(query);
return PageResult.success(result);
}
@PostMapping("add")
@Operation(summary = "文件记录增加")
public Result<String> addFileRecord(@RequestBody FileRecordForm form){
Integer result = fileRecordService.addFileRecord(form);
return Result.success();
}
}

@ -0,0 +1,66 @@
package com.bellmann.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.base.BasePageQuery;
import com.bellmann.common.model.Option;
import com.bellmann.common.model.Tr069Xml;
import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result;
import com.bellmann.common.util.Tr069XmlUtils;
import com.bellmann.model.form.Tr069VerForm;
import com.bellmann.model.vo.Tr069VerVO;
import com.bellmann.service.FileOptionService;
import com.bellmann.service.Tr069VerService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.io.InputStream;
import java.util.List;
@Tag(name = "14.TR069数据模型")
@RestController
@RequestMapping("/api/tr069/v1")
@RequiredArgsConstructor
public class Tr069VerController {
private final Tr069VerService tr069VerService;
private final FileOptionService fileOptionService;
@PostMapping("/page")
@Operation(summary = "tr069分页")
public PageResult<Tr069VerVO> page(BasePageQuery query){
Page<Tr069VerVO> voPage = tr069VerService.page(query);
return PageResult.success(voPage);
}
@GetMapping("/tree/{fileId}")
@Operation(summary = "tr069XML文件树")
public Result<Tr069Xml> test(@PathVariable Long fileId){
InputStream download = fileOptionService.download(fileId);
Tr069Xml tr069Xml = Tr069XmlUtils.parseXML(download);
return Result.success(tr069Xml);
}
@GetMapping("/tr069-model/option")
@Operation(summary = "tr069文件选项")
public Result<List<Option<Long>>> tr069ModelOption(){
return Result.success(tr069VerService.tr069ModelOption());
}
@GetMapping("/{tr069Id}")
@Operation(summary = "tr069表单")
public Result<Tr069VerForm> tr069Form(@PathVariable Long tr069Id){
return Result.success(tr069VerService.tr069Form(tr069Id));
}
@PostMapping("/edit")
@Operation(summary = "修改tr069记录")
public Result<Integer> editTr069Form(@RequestBody Tr069VerForm editTr069Form){
return Result.success(tr069VerService.editTr069Form(editTr069Form));
}
@PostMapping("/add")
@Operation(summary = "新增tr069记录")
public Result<Integer> addTr069Form(@RequestBody Tr069VerForm editTr069Form){
return Result.success(tr069VerService.addTr069Form(editTr069Form));
}
}

@ -2,6 +2,7 @@ package com.bellmann.converter;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.entity.FileRecord;
import com.bellmann.model.form.FileRecordForm;
import com.bellmann.model.vo.FileRecordVO;
import org.mapstruct.Mapper;
@ -25,4 +26,6 @@ public interface FileRecordConverter {
Page<FileRecordVO> entityPage2VOPage(Page<FileRecord> pageData);
List<FileRecordVO> entityList2VOList(List<FileRecord> fileRecords);
FileRecord form2Entity(FileRecordForm form);
}

@ -0,0 +1,14 @@
package com.bellmann.converter;
import com.bellmann.model.entity.Service;
import com.bellmann.model.vo.DeviceServiceVO;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring")
public interface ServiceConverter {
}

@ -0,0 +1,22 @@
package com.bellmann.converter;
import com.bellmann.model.entity.Tr069Ver;
import com.bellmann.model.form.Tr069VerForm;
import org.mapstruct.Mapper;
/**
* 文件对象转换器
*
*
* @since 2022/7/29
*/
@Mapper(componentModel = "spring")
public interface Tr069VerConverter {
Tr069VerForm entity2Form(Tr069Ver tr069Ver);
Tr069Ver form2Entity(Tr069VerForm editTr069Form);
}

@ -8,4 +8,6 @@ public interface DeviceTypeVerDetailManager {
int auditNewSoft(Long typeAndVerId);
int updateByVerForm(DeviceTypeVerDetail deviceTypeVerDetail);
void insertDetailByTypeAndVerId(Long typeAndVerId, Long devTypeId);
}

@ -16,4 +16,6 @@ public interface FileRecordManager {
void addVendorProfile(FileRecord fileRecord);
List<FileRecord> listVendorProfile(Long typeAndVerId);
List<FileRecord> findFileByType(String fileType);
}

@ -0,0 +1,9 @@
package com.bellmann.manger;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.base.BasePageQuery;
import com.bellmann.model.vo.DeviceServiceVO;
public interface ServiceManager {
Page<DeviceServiceVO> pageDevVerService(Long typeAndVerId, BasePageQuery pageQuery);
}

@ -2,8 +2,11 @@ package com.bellmann.manger.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bellmann.common.enums.DevTypeNameNewEnum;
import com.bellmann.manger.DeviceTypeManager;
import com.bellmann.manger.DeviceTypeVerDetailManager;
import com.bellmann.mapper.DeviceTypeVerDetailMapper;
import com.bellmann.model.entity.DeviceType;
import com.bellmann.model.entity.DeviceTypeVerDetail;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@ -14,6 +17,8 @@ public class DeviceTypeVerDetailManagerImpl implements DeviceTypeVerDetailManage
private final DeviceTypeVerDetailMapper deviceTypeVerDetailMapper;
private final DeviceTypeManager deviceTypeManager;
@Override
public int updateDeviceNewSoft(Long typeAndVerId) {
return deviceTypeVerDetailMapper.update(null,
@ -40,4 +45,24 @@ public class DeviceTypeVerDetailManagerImpl implements DeviceTypeVerDetailManage
.eq(DeviceTypeVerDetail::getTypeAndVerId,deviceTypeVerDetail.getTypeAndVerId())
);
}
@Override
public void insertDetailByTypeAndVerId(Long typeAndVerId, Long devTypeId) {
DeviceType deviceType = deviceTypeManager.findDeviceTypeById(devTypeId);
DeviceTypeVerDetail deviceTypeVerDetail = new DeviceTypeVerDetail();
deviceTypeVerDetail.setTypeAndVerId(typeAndVerId);
switch (deviceType.getDevType()){
case "0":
deviceTypeVerDetail.setDevTypeNameNew(DevTypeNameNewEnum.ITMS.getValue());
break;
case "1":
deviceTypeVerDetail.setDevTypeNameNew(DevTypeNameNewEnum.BBMS.getValue());
break;
case "3":
deviceTypeVerDetail.setDevTypeNameNew(DevTypeNameNewEnum.IPTV.getValue());
break;
}
deviceTypeVerDetailMapper.insert(deviceTypeVerDetail);
}
}

@ -57,4 +57,11 @@ public class FileRecordManagerImpl implements FileRecordManager {
public List<FileRecord> listVendorProfile(Long typeAndVerId) {
return fileRecordMapper.listVendorProfile(typeAndVerId);
}
@Override
public List<FileRecord> findFileByType(String fileType) {
return fileRecordMapper.selectList(new LambdaQueryWrapper<FileRecord>()
.eq(FileRecord::getFileType,fileType)
);
}
}

@ -0,0 +1,30 @@
package com.bellmann.manger.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.base.BasePageQuery;
import com.bellmann.converter.ServiceConverter;
import com.bellmann.manger.ServiceManager;
import com.bellmann.mapper.ServiceMapper;
import com.bellmann.model.entity.Service;
import com.bellmann.model.vo.DeviceServiceVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@RequiredArgsConstructor
public class ServiceManagerImpl implements ServiceManager {
private final ServiceMapper serviceMapper;
private final ServiceConverter serviceConverter;
@Override
public Page<DeviceServiceVO> pageDevVerService(Long typeAndVerId, BasePageQuery pageQuery) {
int pageNum = pageQuery.getPageNum();
int pageSize = pageQuery.getPageSize();
Page<DeviceServiceVO> page = new Page<>(pageNum,pageSize);
List<DeviceServiceVO> list = serviceMapper.pageDevVerService(page,typeAndVerId);
return page.setRecords(list);
}
}

@ -22,4 +22,14 @@ public interface DeviceTypeMapper extends BaseMapper<DeviceType> {
* @return
*/
List<DeviceTypePageBO> findDeviceTypePage(Page<DeviceTypePageBO> page, @Param("query") DeviceTypeQuery query, @Param("domainId") Long domainId);
List<DeviceType> vendorNameOption();
List<DeviceType> hardVerOption(@Param("typeName") String typeName);
List<DeviceType> typeNameOption(@Param("vendorOui") String vendorOui);
List<DeviceType> vendorOuiOption(@Param("vendorName") String vendorName);
Long countJoinStaticJoinVer(@Param("id") Long id);
}

@ -0,0 +1,15 @@
package com.bellmann.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.entity.Service;
import com.bellmann.model.vo.DeviceServiceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ServiceMapper extends BaseMapper<Service> {
List<DeviceServiceVO> pageDevVerService(Page<DeviceServiceVO> page, @Param("typeAndVerId") Long typeAndVerId);
}

@ -0,0 +1,14 @@
package com.bellmann.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.entity.Tr069Ver;
import com.bellmann.model.vo.Tr069VerVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface Tr069VerMapper extends BaseMapper<Tr069Ver> {
List<Tr069VerVO> tr069Page(Page<Tr069VerVO> page);
}

@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("itms_device_type_ver")
@ToString
public class DeviceTypeVer implements Serializable {
private static final long serialVersionUID = 6517671696462113712L;

@ -0,0 +1,26 @@
package com.bellmann.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("itms_service")
public class Service implements Serializable {
private static final long serialVersionUID = 3425958771027987055L;
private Long servId;
private String servName;
private String servVerName;
private String servDisplayName;
private String servDesc;
private Long pluginFileId;
}

@ -0,0 +1,26 @@
package com.bellmann.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("itms_tr069_ver")
public class Tr069Ver implements Serializable {
private static final long serialVersionUID = -1874730817920107148L;
private Long tr069VerId;
private String tr069VerName;
private Date tr069VerCreateTime;
private Date tr069VerModifyTime;
private String tr069VerDesc;
private Long fileId;
}

@ -0,0 +1,60 @@
package com.bellmann.model.form;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author 李小林
* @since 2024-04-20
*/
@Data
@Schema(description = "文件记录表单")
public class FileRecordForm {
/**
* 文件ID
*/
@Schema(description = "文件ID")
private Long fileId;
/**
* 文件类型
*/
@Schema(description = "文件类型")
private String fileType;
/**
* 文件名称
*/
@Schema(description = "文件名称")
private String fileName;
/**
* 文件描述
*/
@Schema(description = "文件描述")
private String fileDesc;
/**
* 文件服务器ID
*/
@Schema(description = "文件服务器ID")
private Long fileServId;
/**
* 文件ftp保存地址
*/
@Schema(description = "文件ftp保存地址")
private String fileUrl;
}

@ -0,0 +1,25 @@
package com.bellmann.model.form;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@Schema(description = "TR069模型表单")
public class Tr069VerForm {
@Schema(description = "id")
private Long tr069VerId;
@Schema(description = "名称")
private String tr069VerName;
@Schema(description = "描述信息")
private String tr069VerDesc;
@Schema(description = "文件ID")
private Long fileId;
}

@ -0,0 +1,25 @@
package com.bellmann.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "设备类型及设备软件版本支持的业务信息视图")
public class DeviceServiceVO {
@Schema(description = "id")
private Long servId;
@Schema(description = "业务名称")
private String servName;
@Schema(description = "业务版本")
private String servVerName;
@Schema(description = "业务显示名称")
private String servDisplayName;
@Schema(description = "业务描述")
private String servDesc;
}

@ -0,0 +1,28 @@
package com.bellmann.model.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@Schema(description = "tr069数据模型列表视图")
public class Tr069VerVO {
@Schema(description = "id")
private Long tr069VerId;
@Schema(description = "模型名称")
private String tr069VerName;
@Schema(description = "描述信息")
private String tr069VerDesc;
@Schema(description = "文件名称")
private String fileName;
@Schema(description = "文件Id")
private Long fileId;
}

@ -1,12 +1,27 @@
package com.bellmann.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.model.Option;
import com.bellmann.common.result.Result;
import com.bellmann.model.query.DeviceTypeQuery;
import com.bellmann.model.vo.DeviceTypePageVO;
import com.bellmann.model.vo.DeviceTypeVO;
import java.util.ArrayList;
import java.util.List;
public interface DeviceTypeService {
Page<DeviceTypePageVO> page(DeviceTypeQuery query);
DeviceTypeVO findDevTypeById(Long devTypeId);
List<Option<String>> vendorNameOption();
List<Option<String>> vendorOuiOption(String vendorName);
List<Option<String>> typeNameOption(String vendorOui);
List<Option<String>> hardVerOption(String typeName);
Result<String> deleteByIds(ArrayList<Long> ids);
}

@ -6,11 +6,12 @@ import com.bellmann.common.result.Result;
import com.bellmann.model.form.DeviceTypeVerForm;
import com.bellmann.model.form.VendorProfileForm;
import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.DomainOption;
import com.bellmann.model.vo.FileRecordVO;
import java.util.List;
import java.util.concurrent.Future;
public interface DeviceTypeVerService {
Page<DeviceTypeToVerVO> deviceTypeToVerPage(DeviceTypeToVerQuery query);
@ -40,4 +41,8 @@ public interface DeviceTypeVerService {
List<Long> listVerDomain(Long typeAndVerId);
int editVerDomain(Long typeAndVerId, List<Long> list);
Page<DeviceServiceVO> pageService(Long typeAndVerId, BasePageQuery pageQuery);
int addTypeVer(DeviceTypeVerForm form, Long devTypeId);
}

@ -3,6 +3,7 @@ package com.bellmann.service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
public interface FileOptionService {
/**
@ -21,6 +22,8 @@ public interface FileOptionService {
*/
void download(HttpServletResponse response, Long fileId);
public InputStream download(Long fileId);
void copyFile(String sourceFileUrl, String fileName, String targetFileUrl1);
boolean removeFile(String fileUrl, String fileName);

@ -3,6 +3,7 @@ package com.bellmann.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.entity.FileRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bellmann.model.form.FileRecordForm;
import com.bellmann.model.query.FileRecordQuery;
import com.bellmann.model.vo.FileRecordVO;
@ -19,4 +20,6 @@ public interface FileRecordService{
Page<FileRecordVO> page(FileRecordQuery query);
FileRecord findFileRecordById(Long fileId);
Integer addFileRecord(FileRecordForm form);
}

@ -0,0 +1,4 @@
package com.bellmann.service;
public interface ServiceService {
}

@ -0,0 +1,21 @@
package com.bellmann.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.base.BasePageQuery;
import com.bellmann.common.model.Option;
import com.bellmann.model.form.Tr069VerForm;
import com.bellmann.model.vo.Tr069VerVO;
import java.util.List;
public interface Tr069VerService {
Page<Tr069VerVO> page(BasePageQuery query);
List<Option<Long>> tr069ModelOption();
Tr069VerForm tr069Form(Long tr069Id);
Integer editTr069Form(Tr069VerForm editTr069Form);
Integer addTr069Form(Tr069VerForm editTr069Form);
}

@ -2,10 +2,16 @@ package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.model.Option;
import com.bellmann.common.result.IResultCode;
import com.bellmann.common.result.Result;
import com.bellmann.common.result.ResultCode;
import com.bellmann.converter.DeviceTypeConverter;
import com.bellmann.mapper.DeviceTypeMapper;
import com.bellmann.mapper.DeviceTypeVerMapper;
import com.bellmann.model.bo.DeviceTypePageBO;
import com.bellmann.model.entity.DeviceType;
import com.bellmann.model.entity.DeviceTypeVer;
import com.bellmann.model.query.DeviceTypeQuery;
import com.bellmann.model.vo.DeviceTypePageVO;
import com.bellmann.model.vo.DeviceTypeVO;
@ -15,7 +21,9 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@ -25,6 +33,8 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
private final DeviceTypeMapper deviceTypeMapper;
private final DeviceTypeConverter deviceTypeConverter;
private final DeviceTypeVerMapper deviceTypeVerMapper;
@Override
public Page<DeviceTypePageVO> page(DeviceTypeQuery query) {
Long domainId = SecurityUtils.getGroupId();
@ -43,4 +53,72 @@ public class DeviceTypeServiceImpl implements DeviceTypeService {
.eq(DeviceType::getDevTypeId, devTypeId));
return deviceTypeConverter.entity2VO(deviceType);
}
@Override
public List<Option<String>> vendorNameOption() {
List<DeviceType> deviceTypes = deviceTypeMapper.vendorNameOption();
return deviceTypes.stream().distinct().map(deviceType -> {
Option<String> option = new Option<>();
option.setLabel(deviceType.getDevVendorName());
option.setValue(deviceType.getDevVendorName());
return option;
}).collect(Collectors.toList());
}
@Override
public List<Option<String>> vendorOuiOption(String vendorName) {
List<DeviceType> deviceTypes = deviceTypeMapper.vendorOuiOption(vendorName);
return deviceTypes.stream().map(deviceType -> {
Option<String> option = new Option<>();
option.setLabel(deviceType.getDevVendorOui());
option.setValue(deviceType.getDevVendorOui());
return option;
}).collect(Collectors.toList());
}
@Override
public List<Option<String>> typeNameOption(String vendorOui) {
List<DeviceType> deviceTypes = deviceTypeMapper.typeNameOption(vendorOui);
return deviceTypes.stream().map(deviceType -> {
Option<String> option = new Option<>();
option.setLabel(deviceType.getDevTypeName());
option.setValue(deviceType.getDevTypeName());
return option;
}).collect(Collectors.toList());
}
@Override
public List<Option<String>> hardVerOption(String typeName) {
List<DeviceType> deviceTypes = deviceTypeMapper.hardVerOption(typeName);
return deviceTypes.stream().map(deviceType -> {
Option<String> option = new Option<>();
option.setLabel(deviceType.getDevHardVer());
option.setValue(deviceType.getDevHardVer());
return option;
}).collect(Collectors.toList());
}
@Override
public Result<String> deleteByIds(ArrayList<Long> ids) {
if (ids.isEmpty()){
return Result.failed(ResultCode.IDS_IS_NULL);
}
for (Long id :ids){
Long count = deviceTypeVerMapper.selectCount(new LambdaQueryWrapper<DeviceTypeVer>()
.eq(DeviceTypeVer::getDevTypeId, id)
);
if (count>0L){
return Result.failed(ResultCode.DEVICE_TYPE_VER);
}
Long count1 = deviceTypeMapper.countJoinStaticJoinVer(id);
if (count1>0L){
return Result.failed(ResultCode.DEVICE_TYPE_VER);
}
deviceTypeMapper.delete(new LambdaQueryWrapper<DeviceType>()
.eq(DeviceType::getDevTypeId,id)
);
}
return Result.success();
}
}

@ -24,8 +24,8 @@ import com.bellmann.model.entity.FileRecord;
import com.bellmann.model.form.DeviceTypeVerForm;
import com.bellmann.model.form.VendorProfileForm;
import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.DomainOption;
import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.security.util.SecurityUtils;
import com.bellmann.service.DeviceTypeVerService;
@ -33,12 +33,15 @@ import com.bellmann.service.FileOptionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
@Service
@ -67,13 +70,16 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
private final FileRecordConverter fileRecordConverter;
private final DomainManager domainManager;
private final ServiceManager serviceManager;
@Override
public Page<DeviceTypeToVerVO> deviceTypeToVerPage(DeviceTypeToVerQuery query) {
int pageNum = query.getPageNum();
int pageSize = query.getPageSize();
Long devTypeId = query.getDevTypeId();
Page<DeviceTypeToVerBO> page = new Page<>(pageNum,pageSize);
Page<DeviceTypeToVerBO> boPage = deviceTypeVerMapper.deviceTypeToVerPage(page,devTypeId);
Page<DeviceTypeToVerBO> page = new Page<>(pageNum, pageSize);
Page<DeviceTypeToVerBO> boPage = deviceTypeVerMapper.deviceTypeToVerPage(page, devTypeId);
return deviceTypeVerConverter.bo2PageVo(boPage);
}
@ -81,14 +87,14 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
public Result<String> updateTypeAndVersionState(Long typeAndVerId) {
DeviceTypeVer deviceTypeVer = deviceTypeVerMapper.findByTypeAndDevID(typeAndVerId);
if (deviceTypeVer==null){
if (deviceTypeVer == null) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_BINDING_DEVICE_TYPE_IS_NULL);
}
//判断状态,如果如果是UN_AUDIT就改为AUDIT
if(deviceTypeVer.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.UNAUDITED.getValue())){
if (deviceTypeVer.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.UNAUDITED.getValue())) {
deviceTypeVer.setDevTypeVerStatus(DevTypeVerStatusEnum.AUDITED.getValue());
deviceTypeVer.setAuditTime(LocalDateTime.now());
}else {
} else {
deviceTypeVer.setDevTypeVerStatus(DevTypeVerStatusEnum.UNAUDITED.getValue());
deviceTypeVer.setAuditTime(null);
}
@ -106,7 +112,7 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
@Override
public Result<String> updateTypeNewSoftState(Long typeAndVerId) {
DeviceTypeVer deviceTypeVer = deviceTypeVerMapper.findByTypeAndDevID(typeAndVerId);
if (deviceTypeVer==null){
if (deviceTypeVer == null) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_BINDING_DEVICE_TYPE_IS_NULL);
}
//根据软件版本id查询该软件版本对应硬件的全部软件版本id
@ -128,31 +134,31 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
//根据devTypeVerId获取源软件版本信息
DeviceTypeVer deviceTypeVer = deviceTypeVerMapper.findByTypeAndDevID(typeAndVerId);
if (deviceTypeVer==null){
if (deviceTypeVer == null) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_BINDING_DEVICE_TYPE_IS_NULL);
}
DevTypeVerFileBO devTypeVerFileBO = deviceTypeVerMapper.findSoftVersionFileInfo(
deviceTypeVer.getSoftVer(),
deviceTypeVer.getTypeAndVerId()
);
if(deviceTypeVer.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.UNAUDITED.getValue())){
if (deviceTypeVer.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.UNAUDITED.getValue())) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_UNAUDITED);
}
if(StringUtils.isBlank(devTypeVerFileBO.getFileName())|| StringUtils.isBlank(devTypeVerFileBO.getFileUrl())){
if (StringUtils.isBlank(devTypeVerFileBO.getFileName()) || StringUtils.isBlank(devTypeVerFileBO.getFileUrl())) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_FILE_NOT_EXIST);
}
DeviceType deviceType = deviceTypeManager.findDeviceTypeById(devTypeId);
//根据typeId查询所有需要复制的目标设备类型
List<DeviceTypeVer> list = deviceTypeVerMapper.findTargetDeviceType(deviceType,deviceTypeVer.getSoftVer());
List<DeviceTypeVer> list = deviceTypeVerMapper.findTargetDeviceType(deviceType, deviceTypeVer.getSoftVer());
//根据查询出来的目标设备类型集合,循环复制源软件版本
for ( DeviceTypeVer obj: list){
if (StringUtils.isBlank(obj.getSoftVer())){
for (DeviceTypeVer obj : list) {
if (StringUtils.isBlank(obj.getSoftVer())) {
//不存在该软件版本,则复制软件版本信息,以及软件版本文件。
Long cloneDevTypeAndVerId = cloneDeviceTypeVer(deviceTypeVer);
devTypeVerFileBO.setTypeAndVerId(cloneDevTypeAndVerId);
copyFtpVerFile(devTypeVerFileBO);
}else {
if (StringUtils.isNotBlank(obj.getDevTypeVerStatus())&&obj.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.AUDITED.getValue())){
} else {
if (StringUtils.isNotBlank(obj.getDevTypeVerStatus()) && obj.getDevTypeVerStatus().equals(DevTypeVerStatusEnum.AUDITED.getValue())) {
//软件版本状态为已审核,则不复制版本文件。
continue;
}
@ -163,26 +169,26 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
private void copyFtpVerFile(DevTypeVerFileBO devTypeVerFileBO) {
FileRecord fileRecord = fileRecordManager.insetDevTypeVerFile(devTypeVerFileBO);
fileDevTypeMapManager.insertFileDevTypeVerMap(fileRecord.getFileId(),devTypeVerFileBO.getTypeAndVerId());
fileOptionService.copyFile(devTypeVerFileBO.getFileUrl(),devTypeVerFileBO.getFileName(),fileRecord.getFileUrl());
fileDevTypeMapManager.insertFileDevTypeVerMap(fileRecord.getFileId(), devTypeVerFileBO.getTypeAndVerId());
fileOptionService.copyFile(devTypeVerFileBO.getFileUrl(), devTypeVerFileBO.getFileName(), fileRecord.getFileUrl());
}
private Long cloneDeviceTypeVer(DeviceTypeVer resource){
private Long cloneDeviceTypeVer(DeviceTypeVer resource) {
DeviceTypeVer deviceTypeVer = new DeviceTypeVer();
deviceTypeVer.setDevTypeId(resource.getDevTypeId());
deviceTypeVer.setDevTypeVerStatus(DevTypeVerStatusEnum.UNAUDITED.getValue());
if (StringUtils.isEmpty(resource.getSpecVer())){
if (StringUtils.isEmpty(resource.getSpecVer())) {
deviceTypeVer.setSpecVer("null");
}else {
} else {
deviceTypeVer.setSpecVer(resource.getSpecVer());
}
deviceTypeVer.setSoftVer(resource.getSoftVer());
deviceTypeVer.setConnectReqPassword(StringUtilsConstants.STRING_BLANK);
deviceTypeVer.setConnectReqUsername(StringUtilsConstants.STRING_BLANK);
deviceTypeVer.setDevTypeVerDesc(resource.getDevTypeVerDesc());
if(resource.getProvisionFlag().equals("0")){
if (resource.getProvisionFlag().equals("0")) {
deviceTypeVer.setProvisionFlag(ProvisionFlagEnum.PPPOE.getValue());
}else {
} else {
deviceTypeVer.setProvisionFlag(ProvisionFlagEnum.UN_PROVISION.getValue());
}
deviceTypeVer.setAcsUrlPassword(StringUtilsConstants.STRING_BLANK);
@ -198,19 +204,19 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
@Transactional
public Result<String> deleteDeviceTypeVersionById(Long typeAndVerId) {
DeviceTypeVer deviceTypeVer = deviceTypeVerMapper.findByTypeAndDevID(typeAndVerId);
if (deviceTypeVer==null){
if (deviceTypeVer == null) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_BINDING_DEVICE_TYPE_IS_NULL);
}
if(deviceTypeVer.getTr069VerId()>0){
if (deviceTypeVer.getTr069VerId()!=null&& deviceTypeVer.getTr069VerId() > 0) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_EXIST_OR_BINDING);
}
Long count = deviceTypeVerMapper.countDevTypeStatic(typeAndVerId);
if (count>0){
Long count = deviceTypeVerMapper.countDevTypeStatic(typeAndVerId);
if (count > 0) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_EXIST_OR_BINDING);
}
int deleteRows = deviceTypeVerDomainManager.deleteByTypeAndVerId(typeAndVerId);
deviceTypeVerMapper.delete(
new LambdaQueryWrapper<DeviceTypeVer>().eq(DeviceTypeVer::getTypeAndVerId,typeAndVerId)
new LambdaQueryWrapper<DeviceTypeVer>().eq(DeviceTypeVer::getTypeAndVerId, typeAndVerId)
);
return Result.success();
@ -220,20 +226,20 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
@Transactional
public Result<String> deleteDeviceTypeVersionFile(Long typeAndVerId, Long fileId) {
FileRecord fileRecord = fileRecordManager.findFileRecordById(fileId);
if(fileRecord==null){
if (fileRecord == null) {
return Result.failed(ResultCode.FILE_NOT_EXIST);
}
Long count = fileDevTypeMapManager.countByTypeAndVerId(typeAndVerId,fileId);
if (count!=1L){
Long count = fileDevTypeMapManager.countByTypeAndVerId(typeAndVerId, fileId);
if (count != 1L) {
return Result.failed(ResultCode.FILE_NOT_OF_TYPE_VER);
}
int rows = fileDevTypeMapManager.deleteByTypeAndVerId(typeAndVerId,fileId);
int rows = fileDevTypeMapManager.deleteByTypeAndVerId(typeAndVerId, fileId);
int deleteRows = fileRecordManager.deleteByFileId(fileId);
if(rows==0&&deleteRows==0){
if (rows == 0 && deleteRows == 0) {
return Result.failed(ResultCode.FILE_DELETE_FAIL);
}
boolean isSuccess = fileOptionService.removeFile(fileRecord.getFileUrl(),fileRecord.getFileName());
if (!isSuccess){
boolean isSuccess = fileOptionService.removeFile(fileRecord.getFileUrl(), fileRecord.getFileName());
if (!isSuccess) {
return Result.failed(ResultCode.FILE_DELETE_FAIL);
}
return Result.success();
@ -241,8 +247,8 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
@Override
public Result<DeviceTypeVerForm> findDevTypeVerEditForm(Long typeAndVerId) {
DeviceTypeVerForm deviceTypeVerForm = deviceTypeVerMapper.findDevTypeVerEditForm(typeAndVerId);
if (deviceTypeVerForm==null){
DeviceTypeVerForm deviceTypeVerForm = deviceTypeVerMapper.findDevTypeVerEditForm(typeAndVerId);
if (deviceTypeVerForm == null) {
return Result.failed(ResultCode.DATA_NOT_FOUND);
}
return Result.success(deviceTypeVerForm);
@ -255,16 +261,16 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
DeviceTypeVerDetail deviceTypeVerDetail = deviceTypeVerDetailConverter.form2Entity(deviceTypeVerForm);
int row1 = deviceTypeVerMapper.update(deviceTypeVer,
new LambdaQueryWrapper<DeviceTypeVer>()
.eq(DeviceTypeVer::getTypeAndVerId,deviceTypeVer.getTypeAndVerId())
.eq(DeviceTypeVer::getTypeAndVerId, deviceTypeVer.getTypeAndVerId())
);
int row2 = deviceTypeVerDetailManager.updateByVerForm(deviceTypeVerDetail);
return row1+row2;
return row1 + row2;
}
@Override
public Result<String> addVendorProfile(VendorProfileForm form) {
DeviceTypeVer deviceTypeVer = deviceTypeVerMapper.findByTypeAndDevID(form.getTypeAndVerId());
if (deviceTypeVer==null){
if (deviceTypeVer == null) {
return Result.failed(ResultCode.DEVICE_TYPE_VER_BINDING_DEVICE_TYPE_IS_NULL);
}
FileRecord fileRecord = new FileRecord();
@ -291,17 +297,17 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
public int deleteVendorProfile(Long fileId, Long typeAndVerId) {
FileRecord fileRecord = fileRecordManager.findFileRecordById(fileId);
boolean removed = fileOptionService.removeFile(fileRecord.getFileUrl(), fileRecord.getFileName());
if (!removed){
if (!removed) {
throw new BusinessException(ResultCode.FILE_DELETE_FAIL);
}
int i = fileRecordManager.deleteByFileId(fileId);
int i1 = fileDevTypeMapManager.deleteByTypeAndVerId(typeAndVerId, fileId);
return i+i1;
return i + i1;
}
@Override
public Page<String> pageSysDomain(Long typeAndVerId, BasePageQuery pageQuery) {
return domainManager.pageJoinTypeVerByTypeAndVerId(typeAndVerId,pageQuery);
return domainManager.pageJoinTypeVerByTypeAndVerId(typeAndVerId, pageQuery);
}
@Override
@ -311,7 +317,35 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
@Override
public int editVerDomain(Long typeAndVerId, List<Long> list) {
return deviceTypeVerDomainManager.editVerDomain(typeAndVerId,list);
return deviceTypeVerDomainManager.editVerDomain(typeAndVerId, list);
}
@Override
public Page<DeviceServiceVO> pageService(Long typeAndVerId, BasePageQuery pageQuery) {
return serviceManager.pageDevVerService(typeAndVerId, pageQuery);
}
@Override
@Transactional
public int addTypeVer(DeviceTypeVerForm form, Long devTypeId) {
DeviceTypeVer deviceTypeVer = deviceTypeVerConverter.form2Entity(form);
deviceTypeVer.setDevTypeId(devTypeId);
deviceTypeVer.setDevTypeVerStatus(DevTypeVerStatusEnum.UNAUDITED.getValue());
deviceTypeVer.setAcsUrlPassword(StringUtilsConstants.STRING_BLANK);
deviceTypeVer.setConnectReqUsername(StringUtilsConstants.STRING_BLANK);
deviceTypeVer.setConnectReqPassword(StringUtilsConstants.STRING_BLANK);
String provisionFlag = form.getProvisionFlag();
if (ProvisionFlagEnum.TR069.getValue().equals(provisionFlag)){
deviceTypeVer.setProvisionFlag(ProvisionFlagEnum.PPPOE.getValue());
}else {
deviceTypeVer.setProvisionFlag(ProvisionFlagEnum.UN_PROVISION.getValue());
}
deviceTypeVer.setAuditUserName(StringUtilsConstants.STRING_BLANK);
deviceTypeVerMapper.insert(deviceTypeVer);
deviceTypeVerDomainManager.insertDevTypeVerSysDomainMap(deviceTypeVer.getTypeAndVerId());
deviceTypeVerDetailManager.insertDetailByTypeAndVerId(deviceTypeVer.getTypeAndVerId(),devTypeId);
return 1;
}
}

@ -71,6 +71,22 @@ public class FileOptionServiceImpl implements FileOptionService {
FTPUtils.download(fileServer,fileName,dirPath,response);
}
@Override
public InputStream download(Long fileId) {
//获取FTP用户名、密码、端口...
FileServer fileServer = fileServerService.getFileServer();
if (fileServer == null) {
throw new BusinessException(ResultCode.FILE_SERVER_IS_NULL);
}
FileRecord fileRecord = fileRecordService.findFileRecordById(fileId);
if(fileRecord == null){
throw new BusinessException(ResultCode.FILE_NOT_EXIST);
}
String fileName = fileRecord.getFileName();
String dirPath = fileRecord.getFileUrl();
return FTPUtils.download(fileServer,fileName,dirPath);
}
@Override
public void copyFile(String sourceFileUrl, String fileName, String targetFileUrl1) {
//获取FTP用户名、密码、端口...

@ -5,14 +5,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.converter.FileRecordConverter;
import com.bellmann.model.entity.FileRecord;
import com.bellmann.mapper.FileRecordMapper;
import com.bellmann.model.form.FileRecordForm;
import com.bellmann.model.query.FileRecordQuery;
import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.security.util.SecurityUtils;
import com.bellmann.service.FileRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* <p>
* 服务实现类
@ -47,4 +51,13 @@ public class FileRecordServiceImpl implements FileRecordService {
public FileRecord findFileRecordById(Long fileId) {
return fileRecordMapper.selectOne(new LambdaQueryWrapper<FileRecord>().eq(FileRecord::getFileId,fileId));
}
@Override
public Integer addFileRecord(FileRecordForm form) {
FileRecord fileRecord = fileRecordConverter.form2Entity(form);
fileRecord.setUserName(SecurityUtils.getUsername());
fileRecord.setFileCreateTime(new Date());
fileRecord.setFileServId(1L);
return fileRecordMapper.insert(fileRecord);
}
}

@ -0,0 +1,10 @@
package com.bellmann.service.impl;
import com.bellmann.service.ServiceService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ServiceServiceImpl implements ServiceService {
}

@ -0,0 +1,75 @@
package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.base.BasePageQuery;
import com.bellmann.common.enums.FileTypeEnum;
import com.bellmann.common.model.Option;
import com.bellmann.converter.Tr069VerConverter;
import com.bellmann.manger.FileRecordManager;
import com.bellmann.mapper.Tr069VerMapper;
import com.bellmann.model.entity.FileRecord;
import com.bellmann.model.entity.Tr069Ver;
import com.bellmann.model.form.Tr069VerForm;
import com.bellmann.model.vo.Tr069VerVO;
import com.bellmann.service.Tr069VerService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class Tr069VerServiceImpl implements Tr069VerService {
private final Tr069VerMapper tr069VerMapper;
private final FileRecordManager fileRecordManager;
private final Tr069VerConverter tr069VerConverter;
@Override
public Page<Tr069VerVO> page(BasePageQuery query) {
int pageNum = query.getPageNum();
int pageSize = query.getPageSize();
Page<Tr069VerVO> page = new Page<>(pageNum,pageSize);
List<Tr069VerVO> list = tr069VerMapper.tr069Page(page);
return page.setRecords(list);
}
@Override
public List<Option<Long>> tr069ModelOption() {
List<FileRecord> list = fileRecordManager.findFileByType(FileTypeEnum.TR069_MODEL_FILE.getValue());
return list.stream().map(fileRecord -> {
Option<Long> option = new Option<>();
option.setValue(fileRecord.getFileId());
option.setLabel(fileRecord.getFileName());
return option;
}).collect(Collectors.toList());
}
@Override
public Tr069VerForm tr069Form(Long tr069Id) {
Tr069Ver tr069Ver = tr069VerMapper.selectOne(new LambdaQueryWrapper<Tr069Ver>()
.eq(Tr069Ver::getTr069VerId, tr069Id)
);
return tr069VerConverter.entity2Form(tr069Ver);
}
@Override
public Integer editTr069Form(Tr069VerForm editTr069Form) {
Tr069Ver tr069Ver = tr069VerConverter.form2Entity(editTr069Form);
tr069Ver.setTr069VerModifyTime(new Date());
return tr069VerMapper.update(tr069Ver,new LambdaQueryWrapper<Tr069Ver>()
.eq(Tr069Ver::getTr069VerId,tr069Ver.getTr069VerId())
);
}
@Override
public Integer addTr069Form(Tr069VerForm form) {
Tr069Ver tr069Ver = tr069VerConverter.form2Entity(form);
tr069Ver.setTr069VerCreateTime(new Date());
return tr069VerMapper.insert(tr069Ver) ;
}
}

@ -26,7 +26,7 @@
AND itms_device_type.dev_vendor_name = #{query.devVendorName}
</if>
<if test="query.devVendorOui!=null and query.devVendorOui!=''">
AND itms_device_type.dev_vendor_oui = #{query.devVendorName}
AND itms_device_type.dev_vendor_oui = #{query.devVendorOui}
</if>
<if test="query.devTypeName!=null and query.devTypeName!=''">
AND itms_device_type.dev_type_name = #{query.devTypeName}
@ -37,4 +37,54 @@
</select>
<select id="vendorNameOption" resultType="com.bellmann.model.entity.DeviceType">
SELECT DISTINCT(dev_vendor_name) FROM itms_device_type
</select>
<select id="hardVerOption">
SELECT DISTINCT
( dev_hard_ver )
FROM
itms_device_type
WHERE
dev_hard_ver IS NOT NULL
<if test="typeName!=null and typeName!=''">
and dev_type_name = #{typeName}
</if>
</select>
<select id="typeNameOption" resultType="com.bellmann.model.entity.DeviceType">
SELECT DISTINCT
( dev_type_name )
FROM
itms_device_type
WHERE
dev_type_name IS NOT NULL
<if test="vendorOui!=null and vendorOui!=''">
and dev_vendor_oui = #{vendorOui}
</if>
</select>
<select id="vendorOuiOption" resultType="com.bellmann.model.entity.DeviceType">
SELECT DISTINCT
( dev_vendor_oui )
FROM
itms_device_type
WHERE
dev_vendor_oui IS NOT NULL
<if test="vendorName!=null and vendorName!=''">
and dev_vendor_name = #{vendorName}
</if>
</select>
<select id="countJoinStaticJoinVer" resultType="java.lang.Long">
SELECT COUNT
( * )
FROM
ITMS_DEVICE_STATIC,
ITMS_DEVICE_TYPE_VER
WHERE
ITMS_DEVICE_STATIC.TYPE_AND_VER_ID = ITMS_DEVICE_TYPE_VER.TYPE_AND_VER_ID
AND ITMS_DEVICE_TYPE_VER.DEV_TYPE_ID = #{id};
</select>
</mapper>

@ -12,7 +12,7 @@
idtv.audit_time,
idtv.audit_user_name,
idtv.dev_type_ver_status,
idtvd.isnewsoft AS new_soft_status
COALESCE(idtvd.isnewsoft,'-999') AS new_soft_status
FROM
itms_device_type_ver idtv
LEFT JOIN itms_device_type_ver_detail idtvd ON idtv.type_and_ver_id = idtvd.type_and_ver_id
@ -20,7 +20,6 @@
LEFT JOIN itms_file ON itms_file.file_id = ifdtvm.file_id
WHERE
idtv.dev_type_id = #{devTypeId}
AND itms_file.file_type = '0'
</select>
<select id="findByTypeAndDevID" resultType="com.bellmann.model.entity.DeviceTypeVer">
@ -110,7 +109,7 @@
idtv.spec_ver
FROM
itms_device_type_ver idtv
INNER JOIN itms_device_type_ver_detail idtvd ON idtv.type_and_ver_id = idtvd.type_and_ver_id
left JOIN itms_device_type_ver_detail idtvd ON idtv.type_and_ver_id = idtvd.type_and_ver_id
WHERE
idtv.type_and_ver_id = #{typeAndVerId}
</select>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bellmann.mapper.ServiceMapper">
<select id="pageDevVerService" resultType="com.bellmann.model.vo.DeviceServiceVO">
SELECT
itms_service.serv_id,
itms_service.serv_name,
itms_service.serv_ver_name,
itms_service.serv_display_name,
itms_service.serv_desc
FROM
itms_service
INNER JOIN itms_tr069_service_map ON itms_service.serv_id = itms_tr069_service_map.serv_id
INNER JOIN itms_device_type_ver ON itms_tr069_service_map.tr069_ver_id = itms_device_type_ver.tr069_ver_id
WHERE
itms_device_type_ver.type_and_ver_id = #{typeAndVerId}
</select>
</mapper>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bellmann.mapper.Tr069VerMapper">
<select id="tr069Page" resultType="com.bellmann.model.vo.Tr069VerVO">
SELECT
itms_tr069_ver.file_id,
itms_tr069_ver.tr069_ver_desc,
itms_tr069_ver.tr069_ver_id,
itms_tr069_ver.tr069_ver_name,
itms_file.file_name
FROM
itms_tr069_ver
INNER JOIN itms_file ON itms_tr069_ver.file_id = itms_file.file_id;
</select>
</mapper>
Loading…
Cancel
Save