Commit 66b17714 authored by linpeiqin's avatar linpeiqin

应用接入模块初始化

parent 2d2f3a5a
package com.yice.webadmin.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.yice.common.core.annotation.MyRequestBody;
import com.yice.common.core.constant.ErrorCodeEnum;
import com.yice.common.core.object.*;
import com.yice.common.core.util.MyCommonUtil;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.core.util.MyPageUtil;
import com.yice.common.log.annotation.OperationLog;
import com.yice.common.log.model.constant.SysOperationLogType;
import com.yice.webadmin.app.dto.ApplicationAccessDto;
import com.yice.webadmin.app.model.ApplicationAccess;
import com.yice.webadmin.app.model.KGManage;
import com.yice.webadmin.app.service.ApplicationAccessService;
import com.yice.webadmin.app.vo.ApplicationAccessVo;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 应用接入操作控制器类。
*
* @author linking
* @date 2023-04-13
*/
@Api(tags = "应用接入管理接口")
@Slf4j
@RestController
@RequestMapping("/admin/app/applicationAccess")
public class ApplicationAccessController {
@Autowired
private ApplicationAccessService applicationAccessService;
/**
* 新增应用接入数据。
*
* @param applicationAccessDto 新增对象。
* @return 应答结果对象,包含新增对象主键Id。
*/
@ApiOperationSupport(ignoreParameters = {"applicationAccessDto.accessId"})
@OperationLog(type = SysOperationLogType.ADD)
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody ApplicationAccessDto applicationAccessDto) {
String errorMessage = MyCommonUtil.getModelValidationError(applicationAccessDto, false);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
ApplicationAccess applicationAccess = MyModelUtil.copyTo(applicationAccessDto, ApplicationAccess.class);
applicationAccess = applicationAccessService.saveNew(applicationAccess);
return ResponseResult.success(applicationAccess.getAccessId());
}
/**
* 更新应用接入数据。
*
* @param applicationAccessDto 更新对象。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.UPDATE)
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody ApplicationAccessDto applicationAccessDto) {
String errorMessage = MyCommonUtil.getModelValidationError(applicationAccessDto, true);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
ApplicationAccess applicationAccess = MyModelUtil.copyTo(applicationAccessDto, ApplicationAccess.class);
ApplicationAccess originalApplicationAccess = applicationAccessService.getById(applicationAccess.getAccessId());
if (originalApplicationAccess == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
// 验证关联Id的数据合法性
CallResult callResult = applicationAccessService.verifyRelatedData(applicationAccess, originalApplicationAccess);
if (!callResult.isSuccess()) {
return ResponseResult.errorFrom(callResult);
}
if (!applicationAccessService.update(applicationAccess, originalApplicationAccess)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 删除应用接入数据。
*
* @param accessId 删除对象主键Id。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.DELETE)
@PostMapping("/delete")
public ResponseResult<Void> delete(@MyRequestBody Long accessId) {
if (MyCommonUtil.existBlankArgument(accessId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
return this.doDelete(accessId);
}
/**
* 列出符合过滤条件的应用接入列表。
*
* @param applicationAccessDtoFilter 过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<ApplicationAccessVo>> list(
@MyRequestBody ApplicationAccessDto applicationAccessDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
ApplicationAccess applicationAccessFilter = MyModelUtil.copyTo(applicationAccessDtoFilter, ApplicationAccess.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, ApplicationAccess.class);
List<ApplicationAccess> applicationAccessList =
applicationAccessService.getApplicationAccessListWithRelation(applicationAccessFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(applicationAccessList, ApplicationAccess.INSTANCE));
}
/**
* 查看指定应用接入对象详情。
*
* @param accessId 指定对象主键Id。
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<ApplicationAccessVo> view(@RequestParam Long accessId) {
ApplicationAccess applicationAccess = applicationAccessService.getByIdWithRelation(accessId, MyRelationParam.full());
if (applicationAccess == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
ApplicationAccessVo applicationAccessVo = ApplicationAccess.INSTANCE.fromModel(applicationAccess);
return ResponseResult.success(applicationAccessVo);
}
private ResponseResult<Void> doDelete(Long accessId) {
String errorMessage;
// 验证关联Id的数据合法性
ApplicationAccess originalApplicationAccess = applicationAccessService.getById(accessId);
if (originalApplicationAccess == null) {
// NOTE: 修改下面方括号中的话述
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
if (!applicationAccessService.remove(accessId)) {
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
return ResponseResult.success();
}
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.ApplicationAccess;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 应用接入数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface ApplicationAccessMapper extends BaseDaoMapper<ApplicationAccess> {
/**
* 批量插入对象列表。
*
* @param ApplicationAccessList 新增对象列表。
*/
void insertList(List<ApplicationAccess> ApplicationAccessList);
/**
* 获取过滤后的对象列表。
*
* @param ApplicationAccessFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<ApplicationAccess> getApplicationAccessList(
@Param("ApplicationAccessFilter") ApplicationAccess ApplicationAccessFilter, @Param("orderBy") String orderBy);
}
<?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.yice.webadmin.app.dao.ApplicationAccessMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.app.model.ApplicationAccess">
<id column="access_id" jdbcType="BIGINT" property="accessId"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="application_name" jdbcType="VARCHAR" property="applicationName"/>
<result column="app_id" jdbcType="BIGINT" property="appId"/>
<result column="api_key" jdbcType="VARCHAR" property="apiKey"/>
<result column="secret_key" jdbcType="VARCHAR" property="secretKey"/>
<result column="application_describe" jdbcType="VARCHAR" property="applicationDescribe"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_application_access
(access_id,
create_user_id,
create_time,
update_user_id,
update_time,
application_name,
app_id,
api_key,
secret_key,
application_describe)
VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.accessId},
#{item.createUserId},
#{item.createTime},
#{item.updateUserId},
#{item.updateTime},
#{item.applicationName},
#{item.appId},
#{item.apiKey},
#{item.secretKey},
#{item.applicationDescribe})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.app.dao.ApplicationAccessMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="ApplicationAccessFilter != null">
<if test="ApplicationAccessFilter.accessId != null">
AND lmp_application_access.access_id = #{ApplicationAccessFilter.accessId}
</if>
</if>
</sql>
<select id="getApplicationAccessList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.ApplicationAccess">
SELECT * FROM lmp_application_access
<where>
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
package com.yice.webadmin.app.dto;
import com.yice.common.core.validator.UpdateGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* ApplicationAccessDto对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("ApplicationAccessDto对象")
@Data
public class ApplicationAccessDto {
/**
* 应用接入ID。
*/
@ApiModelProperty(value = "应用接入ID", required = true)
@NotNull(message = "数据验证失败,应用接入ID不能为空!", groups = {UpdateGroup.class})
private Long accessId;
/**
* 应用名称。
*/
@ApiModelProperty(value = "应用名称")
private String applicationName;
/**
* AppID。
*/
@ApiModelProperty(value = "AppID")
private Long appId;
/**
* API Key。
*/
@ApiModelProperty(value = "apiKey")
private String apiKey;
/**
* Secret Key。
*/
@ApiModelProperty(value = "secretKey")
private String secretKey;
/**
* 应用描述。
*/
@ApiModelProperty(value = "applicationDescribe")
private String applicationDescribe;
}
package com.yice.webadmin.app.model;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.ApplicationAccessVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* ApplicationAccess实体对象。
*
* @author linking
* @date 2023-04-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_application_access")
public class ApplicationAccess extends BaseModel {
/**
* 应用接入ID。
*/
@TableId(value = "access_id")
private Long accessId;
/**
* 应用名称。
*/
private String applicationName;
/**
* AppID。
*/
private Long appId;
/**
* API Key。
*/
private String apiKey;
/**
* Secret Key。
*/
private String secretKey;
/**
* 应用描述。
*/
private String applicationDescribe;
@Mapper
public interface ApplicationAccessModelMapper extends BaseModelMapper<ApplicationAccessVo, ApplicationAccess> {
}
public static final ApplicationAccessModelMapper INSTANCE = Mappers.getMapper(ApplicationAccessModelMapper.class);
}
package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.ApplicationAccess;
import java.util.List;
/**
* 模型部署数据操作服务接口。
*
* @author linking
* @date 2023-04-13
*/
public interface ApplicationAccessService extends IBaseService<ApplicationAccess, Long> {
/**
* 保存新增对象。
*
* @param ApplicationAccess 新增对象。
* @return 返回新增对象。
*/
ApplicationAccess saveNew(ApplicationAccess ApplicationAccess);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param ApplicationAccessList 新增对象列表。
*/
void saveNewBatch(List<ApplicationAccess> ApplicationAccessList);
/**
* 更新数据对象。
*
* @param ApplicationAccess 更新的对象。
* @param originalApplicationAccess 原有数据对象。
* @return 成功返回true,否则false。
*/
boolean update(ApplicationAccess ApplicationAccess, ApplicationAccess originalApplicationAccess);
/**
* 删除指定数据。
*
* @param accessId 主键Id。
* @return 成功返回true,否则false。
*/
boolean remove(Long accessId);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getApplicationAccessListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<ApplicationAccess> getApplicationAccessList(ApplicationAccess filter, String orderBy);
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getApplicationAccessList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<ApplicationAccess> getApplicationAccessListWithRelation(ApplicationAccess filter, String orderBy);
}
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.Page;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.common.core.base.service.BaseService;
import com.yice.common.core.object.MyRelationParam;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.yice.webadmin.app.dao.ApplicationAccessMapper;
import com.yice.webadmin.app.model.ApplicationAccess;
import com.yice.webadmin.app.service.ApplicationAccessService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 应用接入数据操作服务类。
*
* @author linking
* @date 2023-04-13
*/
@Slf4j
@Service("ApplicationAccessService")
public class ApplicationAccessServiceImpl extends BaseService<ApplicationAccess, Long> implements ApplicationAccessService {
@Autowired
private ApplicationAccessMapper ApplicationAccessMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
/**
* 返回当前Service的主表Mapper对象。
*
* @return 主表Mapper对象。
*/
@Override
protected BaseDaoMapper<ApplicationAccess> mapper() {
return ApplicationAccessMapper;
}
/**
* 保存新增对象。
*
* @param ApplicationAccess 新增对象。
* @return 返回新增对象。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public ApplicationAccess saveNew(ApplicationAccess ApplicationAccess) {
ApplicationAccessMapper.insert(this.buildDefaultValue(ApplicationAccess));
return ApplicationAccess;
}
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
* @param ApplicationAccessList 新增对象列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveNewBatch(List<ApplicationAccess> ApplicationAccessList) {
if (CollUtil.isNotEmpty(ApplicationAccessList)) {
ApplicationAccessList.forEach(this::buildDefaultValue);
ApplicationAccessMapper.insertList(ApplicationAccessList);
}
}
/**
* 更新数据对象。
*
* @param ApplicationAccess 更新的对象。
* @param originalApplicationAccess 原有数据对象。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean update(ApplicationAccess ApplicationAccess, ApplicationAccess originalApplicationAccess) {
MyModelUtil.fillCommonsForUpdate(ApplicationAccess, originalApplicationAccess);
// 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
UpdateWrapper<ApplicationAccess> uw = this.createUpdateQueryForNullValue(ApplicationAccess, ApplicationAccess.getAccessId());
return ApplicationAccessMapper.update(ApplicationAccess, uw) == 1;
}
/**
* 删除指定数据。
*
* @param accessId 主键Id。
* @return 成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long accessId) {
return ApplicationAccessMapper.deleteById(accessId) == 1;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getApplicationAccessListWithRelation)方法。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<ApplicationAccess> getApplicationAccessList(ApplicationAccess filter, String orderBy) {
return ApplicationAccessMapper.getApplicationAccessList(filter, orderBy);
}
/**
* 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
* 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
* 如果仅仅需要获取主表数据,请移步(getApplicationAccessList),以便获取更好的查询性能。
*
* @param filter 主表过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<ApplicationAccess> getApplicationAccessListWithRelation(ApplicationAccess filter, String orderBy) {
List<ApplicationAccess> resultList = ApplicationAccessMapper.getApplicationAccessList(filter, orderBy);
// 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
}
private ApplicationAccess buildDefaultValue(ApplicationAccess ApplicationAccess) {
if (ApplicationAccess.getAccessId() == null) {
ApplicationAccess.setAccessId(idGenerator.nextLongId());
}
MyModelUtil.fillCommonsForInsert(ApplicationAccess);
return ApplicationAccess;
}
}
package com.yice.webadmin.app.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.yice.common.core.base.vo.BaseVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* ApplicationAccessVO视图对象。
*
* @author linking
* @date 2023-04-13
*/
@ApiModel("ApplicationAccessVO视图对象")
@Data
@EqualsAndHashCode(callSuper = true)
public class ApplicationAccessVo extends BaseVo {
/**
* 应用接入ID。
*/
@ApiModelProperty(value = "应用接入ID")
private Long accessId;
/**
* 应用名称。
*/
@ApiModelProperty(value = "应用名称")
private String applicationName;
/**
* AppID。
*/
@ApiModelProperty(value = "AppID")
private Long appId;
/**
* API Key。
*/
@ApiModelProperty(value = "apiKey")
private String apiKey;
/**
* Secret Key。
*/
@ApiModelProperty(value = "secretKey")
private String secretKey;
/**
* 应用描述。
*/
@ApiModelProperty(value = "applicationDescribe")
private String applicationDescribe;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment