提交 aa2933e2 authored 作者: 李炎's avatar 李炎

新增服务镜像模块,lic生成添加服务镜像选项

上级 193e06b0
package com.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.entity.DockerImage;
import com.system.entity.DockerImageVersion;
import com.system.serivce.IDockerImageService;
import com.system.serivce.IDockerImageVersionService;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Api(tags = "服务镜像")
@RestController
@RequestMapping("/api/service")
public class DockerImageController {
@Autowired
private IDockerImageService imageService;
@Autowired
private IDockerImageVersionService versionService;
@ApiOperation("服务镜像列表")
@GetMapping("/image")
public RestResponse list(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<DockerImage> page = new Page<DockerImage>(pageNo, pageSize);
try {
LambdaQueryWrapper<DockerImage> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(DockerImage::getId);
IPage<DockerImage> pageList = imageService.page(page, queryWrapper);
return RestResponse.success(pageList);
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像添加")
@PostMapping("/image")
public RestResponse add(@RequestBody DockerImage entity) {
try {
boolean save = imageService.save(entity);
if (save) {
return RestResponse.success("ok");
}
return RestResponse.fail("保存失败");
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像更新")
@PutMapping("/image")
public RestResponse update(@RequestBody DockerImage entity) {
try {
boolean save = imageService.updateById(entity);
if (save) {
return RestResponse.success("ok");
}
return RestResponse.fail("更新失败");
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像删除")
@DeleteMapping("/image/{id}")
public RestResponse delete(@PathVariable("id") Integer id) {
try {
if (imageService.deleteById(id)) {
return RestResponse.success("ok");
}
return RestResponse.fail("删除失败");
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像版本列表")
@GetMapping("/image/version")
public RestResponse versionList(@RequestParam(name = "imageId") Integer imageId) {
try {
List<DockerImageVersion> dockerImageVersions = versionService.listByImageId(imageId);
return RestResponse.success(dockerImageVersions);
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像版本添加")
@PostMapping("/image/version")
public RestResponse versionAdd(@RequestBody DockerImageVersion entity) {
try {
boolean save = versionService.save(entity);
if (save) {
return RestResponse.success("ok");
}
return RestResponse.fail("添加失败");
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
@ApiOperation("服务镜像版本删除")
@DeleteMapping("/image/version/{id}")
public RestResponse versionDelete(@PathVariable("id") Integer id) {
try {
if (versionService.removeById(id)) {
return RestResponse.success("ok");
}
return RestResponse.fail("删除失败");
} catch (Exception up) {
up.printStackTrace();
return RestResponse.fail(up.getMessage());
}
}
}
package com.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.system.entity.DockerImage;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DockerImageMapper extends BaseMapper<DockerImage> {
}
package com.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.system.entity.DockerImageVersion;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DockerImageVersionMapper extends BaseMapper<DockerImageVersion> {
}
<?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.system.dao.DockerImageMapper">
</mapper>
<?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.system.dao.DockerImageVersionMapper">
</mapper>
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
<resultMap id="BaseResultMap" type="com.system.transfer.lic.LicInfoListOutVoRecords"> <resultMap id="BaseResultMap" type="com.system.transfer.lic.LicInfoListOutVoRecords">
<result column="module_verification" property="moduleVerification" jdbcType="VARCHAR" <result column="module_verification" property="moduleVerification" jdbcType="VARCHAR"
typeHandler="com.system.handler.JacksonTypeHandler"/> typeHandler="com.system.handler.JacksonTypeHandler"/>
<result column="docker_services" property="dockerServices" jdbcType="LONGVARCHAR"
typeHandler="com.system.handler.DockerServiceDtoTypeHandler"/>
</resultMap> </resultMap>
<select id="licInfoList" parameterType="com.system.transfer.lic.LicInfoListInVo" <select id="licInfoList" parameterType="com.system.transfer.lic.LicInfoListInVo"
...@@ -27,10 +29,11 @@ ...@@ -27,10 +29,11 @@
<insert id="licInfoCreate" parameterType="com.system.transfer.lic.LicInfoCreateInVo"> <insert id="licInfoCreate" parameterType="com.system.transfer.lic.LicInfoCreateInVo">
INSERT INTO tb_lic_info ( INSERT INTO tb_lic_info (
lq_lic_name, mac_address, effective_time, file_effective_time, verification_interval, module_verification, remark lq_lic_name, mac_address, effective_time, file_effective_time, verification_interval, module_verification,docker_services, remark
) VALUES ( ) VALUES (
#{lqLicName}, #{macAddress}, #{effectiveTime}, #{fileEffectiveTime}, #{verificationInterval}, #{lqLicName}, #{macAddress}, #{effectiveTime}, #{fileEffectiveTime}, #{verificationInterval},
#{moduleVerification,jdbcType=VARCHAR,typeHandler=com.system.handler.JacksonTypeHandler}, #{moduleVerification,jdbcType=VARCHAR,typeHandler=com.system.handler.JacksonTypeHandler},
#{dockerServices,jdbcType=LONGVARCHAR,typeHandler=com.system.handler.DockerServiceDtoTypeHandler},
#{remark} #{remark}
) )
...@@ -43,6 +46,7 @@ ...@@ -43,6 +46,7 @@
lq_lic_name = #{lqLicName}, mac_address = #{macAddress}, effective_time = #{effectiveTime}, file_effective_time = #{fileEffectiveTime}, lq_lic_name = #{lqLicName}, mac_address = #{macAddress}, effective_time = #{effectiveTime}, file_effective_time = #{fileEffectiveTime},
verification_interval = #{verificationInterval}, verification_interval = #{verificationInterval},
module_verification = #{moduleVerification,jdbcType=VARCHAR,typeHandler=com.system.handler.JacksonTypeHandler}, module_verification = #{moduleVerification,jdbcType=VARCHAR,typeHandler=com.system.handler.JacksonTypeHandler},
docker_services = #{dockerServices,jdbcType=LONGVARCHAR,typeHandler=com.system.handler.DockerServiceDtoTypeHandler},
remark = #{remark} remark = #{remark}
WHERE id = #{id} WHERE id = #{id}
......
package com.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "docker镜像表", description = "私有镜像")
public class DockerServiceDto implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "镜像id")
private Integer id;
@ApiModelProperty(value = "镜像名")
private String name;
@ApiModelProperty(value = "服务路径")
private String contextPath;
@ApiModelProperty(value = "版本")
private String version;
}
package com.system.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@TableName("t_docker_image")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "docker镜像表", description = "私有镜像")
public class DockerImage implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "镜像名")
private String name;
@ApiModelProperty(value = "服务路径")
private String contextPath;
@ApiModelProperty(value = "描述")
private String describe;
}
package com.system.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@TableName("t_docker_image_version")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "docker镜像版本表", description = "私有镜像版本")
public class DockerImageVersion implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "镜像id")
private Integer imageId;
@ApiModelProperty(value = "版本")
private String version;
}
package com.system.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.system.dto.DockerServiceDto;
import lombok.SneakyThrows;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Component;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author ly
*/
//@MappedTypes({JSONArray.class}) // 因为BaseTypeHandler<JSONArray> 泛型中指定了JSONArray 的话,这个注解也可以省略
@MappedJdbcTypes(value = JdbcType.LONGVARCHAR, includeNullJdbcType = true)
@Component
public class DockerServiceDtoTypeHandler extends BaseTypeHandler<List<DockerServiceDto>> implements InitializingBean {
static DockerServiceDtoTypeHandler j;
@Autowired
ObjectMapper objectMapper;
/**
* 魔法 注入 单例bean objectMapper;
* 在 @Controller 中注入ObjectMapper 不需要这么麻烦,直接 @Autowired 即可 。
* 非Controller 注入原理:spring 启动过程中 实例化JsonNodeTypeHandler 的 bean 时,会自动把 objectMapper 携带过来;
* spring 启动完成后的bean 又会被擦除 。所以,这个要及时赋值一下引用 objectMapper
*/
@Override
public void afterPropertiesSet() {
j = this; // 初始化静态实例
j.objectMapper = this.objectMapper; //及时拷贝引用
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<DockerServiceDto> jsonNode, JdbcType jdbcType) throws SQLException {
ps.setString(i, jsonNode != null ? jsonNode.toString() : null);
}
@SneakyThrows
@Override
public List<DockerServiceDto> getNullableResult(ResultSet rs, String colName) {
return read(rs.getString(colName));
}
@SneakyThrows
@Override
public List<DockerServiceDto> getNullableResult(ResultSet rs, int colIndex) {
return read(rs.getString(colIndex));
}
@SneakyThrows
@Override
public List<DockerServiceDto> getNullableResult(CallableStatement cs, int i) {
return read(cs.getString(i));
}
@SneakyThrows
private List<DockerServiceDto> read(String json) {
return json != null ? Arrays.asList(j.objectMapper.readValue(json, DockerServiceDto[].class)) : new ArrayList<>();
}
}
package com.system.serivce;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.entity.DockerImage;
public interface IDockerImageService extends IService<DockerImage> {
public boolean deleteById(Integer id);
}
\ No newline at end of file
package com.system.serivce;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.entity.DockerImageVersion;
import java.util.List;
public interface IDockerImageVersionService extends IService<DockerImageVersion> {
public boolean deleteByImageId(Integer imagesId);
public List<DockerImageVersion> listByImageId(Integer imagesId);
}
\ No newline at end of file
package com.system.serivce.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.system.dao.DockerImageMapper;
import com.system.entity.DockerImage;
import com.system.serivce.IDockerImageService;
import com.system.serivce.IDockerImageVersionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@Service
public class DockerImageServiceImpl extends ServiceImpl<DockerImageMapper, DockerImage> implements IDockerImageService {
@Autowired
private IDockerImageVersionService versionService;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteById(Integer id) {
boolean r = this.removeById(id);
if (r) {
boolean b = versionService.deleteByImageId(id);
if (!b) {
r = b;
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
return r;
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.system.dao.DockerImageVersionMapper;
import com.system.entity.DockerImageVersion;
import com.system.serivce.IDockerImageVersionService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class DockerImageVersionServiceImpl extends ServiceImpl<DockerImageVersionMapper, DockerImageVersion> implements IDockerImageVersionService {
@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteByImageId(Integer imageId) {
LambdaQueryWrapper<DockerImageVersion> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DockerImageVersion::getImageId,imageId);
return this.remove(wrapper);
}
@Override
public List<DockerImageVersion> listByImageId(Integer imagesId) {
LambdaQueryWrapper<DockerImageVersion> qw = new LambdaQueryWrapper<>();
qw.eq(DockerImageVersion::getImageId,imagesId);
return list(qw);
}
}
package com.system.transfer.lic; package com.system.transfer.lic;
import com.system.dto.DockerServiceDto;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -44,6 +45,7 @@ public class LicInfoCreateInVo { ...@@ -44,6 +45,7 @@ public class LicInfoCreateInVo {
*/ */
private List<String> moduleVerification; private List<String> moduleVerification;
private List<DockerServiceDto> dockerServices;
/** /**
* 备注 * 备注
......
package com.system.transfer.lic; package com.system.transfer.lic;
import com.system.dto.DockerServiceDto;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @author Inori * @author Inori
*/ */
...@@ -25,5 +28,9 @@ public class LicInfoFileCreateInVo { ...@@ -25,5 +28,9 @@ public class LicInfoFileCreateInVo {
*/ */
private Integer verificationInterval; private Integer verificationInterval;
/**
* 服务
*/
private List<DockerServiceDto> dockerServices;
} }
package com.system.transfer.lic; package com.system.transfer.lic;
import com.system.dto.DockerServiceDto;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -48,8 +49,10 @@ public class LicInfoListOutVoRecords { ...@@ -48,8 +49,10 @@ public class LicInfoListOutVoRecords {
* 模块验证 * 模块验证
*/ */
private List<String> moduleVerification; private List<String> moduleVerification;
/**
*
*/
private List<DockerServiceDto> dockerServices;
/** /**
* 备注 * 备注
*/ */
......
package com.system.transfer.lic; package com.system.transfer.lic;
import com.system.dto.DockerServiceDto;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @author Inori * @author Inori
*/ */
...@@ -47,7 +50,10 @@ public class LicInfoUpdateInVo { ...@@ -47,7 +50,10 @@ public class LicInfoUpdateInVo {
*/ */
private String moduleVerification; private String moduleVerification;
/**
* 服务
*/
private List<DockerServiceDto> dockerServices;
/** /**
* 备注 * 备注
*/ */
......
spring: spring:
profiles: profiles:
active: docker active: test
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论