装备类型配置页面,特征值未完成

This commit is contained in:
itcast 2025-10-14 17:36:05 +08:00
parent f7150d486d
commit f55cd76970
16 changed files with 1140 additions and 0 deletions

View File

@ -0,0 +1,103 @@
package com.bonus.material.devConfig.controller;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.devConfig.domain.EquipmentProperty;
import com.bonus.material.devConfig.domain.EquipmentPropertyDTO;
import com.bonus.material.devConfig.service.EquipmentPropertyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 装备特征值管理
*/
@RestController
@RequestMapping("/equipment/type/property")
public class EquipmentPropertyController {
@Autowired
private EquipmentPropertyService equipmentPropertyService;
/**
* 查询特征值列表
*/
@GetMapping("/list")
public AjaxResult list() {
List<EquipmentProperty> list = equipmentPropertyService.list();
return AjaxResult.success(list);
}
/**
* 根据ID查询特征值
*/
@GetMapping("/{id}")
public AjaxResult getById(@PathVariable Long id) {
EquipmentProperty property = equipmentPropertyService.getById(id);
return AjaxResult.success(property);
}
/**
* 根据类型ID查询特征值
*/
@GetMapping("/type/{typeId}")
public AjaxResult getByTypeId(@PathVariable Long typeId) {
List<EquipmentProperty> properties = equipmentPropertyService.getByTypeId(typeId);
return AjaxResult.success(properties);
}
/**
* 根据类型ID查询装备类型及其特征值扁平化结果
*/
@GetMapping("/type-with-properties/{typeId}")
public AjaxResult getTypeWithProperties(@PathVariable Long typeId) {
List<EquipmentPropertyDTO> result = equipmentPropertyService.getTypeWithProperties(typeId);
return AjaxResult.success(result);
}
/**
* 查询所有装备类型及其特征值扁平化结果
*/
@GetMapping("/all-types-with-properties")
public AjaxResult getAllTypesWithProperties() {
List<EquipmentPropertyDTO> result = equipmentPropertyService.getAllTypesWithProperties();
return AjaxResult.success(result);
}
/**
* 查询装备类型详情及其特征值列表嵌套结构
*/
@GetMapping("/type-detail-with-properties/{typeId}")
public AjaxResult getTypeDetailWithProperties(@PathVariable Long typeId) {
EquipmentPropertyDTO result = equipmentPropertyService.getTypeDetailWithProperties(typeId);
return AjaxResult.success(result);
}
/**
* 新增特征值
*/
@PostMapping
public AjaxResult add(@Validated @RequestBody EquipmentProperty equipmentProperty) {
equipmentPropertyService.add(equipmentProperty);
return AjaxResult.success();
}
/**
* 修改特征值
*/
@PutMapping
public AjaxResult update(@Validated @RequestBody EquipmentProperty equipmentProperty) {
equipmentPropertyService.update(equipmentProperty);
return AjaxResult.success();
}
/**
* 删除特征值
*/
@DeleteMapping("/{id}")
public AjaxResult delete(@PathVariable Integer id) {
equipmentPropertyService.delete(id);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,84 @@
package com.bonus.material.devConfig.controller;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/11 23:17
*/
// EquipmentTypeController.java
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.devConfig.domain.PageResult;
import com.bonus.material.devConfig.domain.EquipmentTypeDTO;
import com.bonus.material.devConfig.domain.EquipmentType;
import com.bonus.material.devConfig.domain.EquipmentTypeQuery;
import com.bonus.material.devConfig.service.EquipmentTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 装备分类管理
*/
@RestController
@RequestMapping("/equipment/type")
public class EquipmentTypeController {
@Autowired
private EquipmentTypeService equipmentTypeService;
//获取树
@GetMapping("/tree")
public AjaxResult getEquipmentTree() {
List<EquipmentTypeDTO> tree = equipmentTypeService.getEquipmentTypeTree();
return AjaxResult.success(tree);
}
//获取层级
@GetMapping("/cascader")
public AjaxResult getEquipmentCascader() {
List<EquipmentTypeDTO> cascaderData = equipmentTypeService.getEquipmentCascader();
return AjaxResult.success(cascaderData);
}
//获取列表
@GetMapping("/list")
public AjaxResult getEquipmentTypeList(EquipmentTypeQuery query) {
PageResult<EquipmentType> result = equipmentTypeService.getEquipmentTypeList(query);
return AjaxResult.success(result);
}
//获取详细信息
@GetMapping("/detail/{id}")
public AjaxResult getEquipmentTypeDetail(@PathVariable Long id) {
EquipmentType detail = equipmentTypeService.getEquipmentTypeDetail(id);
return AjaxResult.success(detail);
}
//添加
@PostMapping("/add")
public AjaxResult addEquipmentType(@Validated @RequestBody EquipmentType equipmentType) {
equipmentTypeService.addEquipmentType(equipmentType);
return AjaxResult.success();
}
//更新
@PutMapping("/update")
public AjaxResult updateEquipmentType(@Validated @RequestBody EquipmentType equipmentType) {
equipmentTypeService.updateEquipmentType(equipmentType);
return AjaxResult.success();
}
//删除
@DeleteMapping("/delete/{id}")
public AjaxResult deleteEquipmentType(@PathVariable Long id) {
equipmentTypeService.deleteEquipmentType(id);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,35 @@
package com.bonus.material.devConfig.domain;
import lombok.Data;
import java.util.Date;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/14 16:11
*/
@Data
public class EquipmentProperty {
private Long id;
private Long typeId;
private String mustHave;
private Long inputType;
private String propertyName;
private String propertyValue;
private Date createTime;
@Override
public String toString() {
return "PropertyConfig{" +
"id=" + id +
", typeId=" + typeId +
", mustHave='" + mustHave + '\'' +
", inputType=" + inputType +
", propertyName='" + propertyName + '\'' +
", propertyValue='" + propertyValue + '\'' +
", createTime=" + createTime +
'}';
}
}

View File

@ -0,0 +1,47 @@
package com.bonus.material.devConfig.domain;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/14 16:41
*/
@Data
public class EquipmentPropertyDTO {
/**
* 装备类型和特征值关联查询结果
*/
// 装备类型信息
private Long typeId;
private String typeName;
private Long parentId;
private Integer sortOrder;
private String status;
private Integer level;
private Boolean leaf;
// 特征值信息
private Integer propertyId;
private String mustHave;
private Integer inputType;
private String propertyName;
private String propertyValue;
private Date propertyCreateTime;
// 子级特征值列表
private List<EquipmentProperty> properties;
}

View File

@ -0,0 +1,80 @@
package com.bonus.material.devConfig.domain;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/11 22:44
*/
// EquipmentType.java
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 装备分类实体
*/
@Data
public class EquipmentType {
/**
* 分类ID
*/
private Long typeId;
/**
* 分类名称
*/
private String typeName;
/**
* 父级分类ID
*/
private Long parentId;
/**
* 排序号
*/
private Integer sortOrder;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新人
*/
private String updateBy;
/**
* 子分类列表
*/
private List<EquipmentType> children;
/**
* 层级
*/
private Integer level;
/**
* 是否叶子节点
*/
private Boolean leaf;
}

View File

@ -0,0 +1,27 @@
package com.bonus.material.devConfig.domain;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/11 22:52
*/
// EquipmentTypeDTO.java
import lombok.Data;
import java.util.List;
/**
* 装备分类DTO
*/
@Data
public class EquipmentTypeDTO {
private Long id;
private String name;
private Long parentId;
private List<EquipmentTypeDTO> children;
private Integer level;
private Boolean leaf;
}

View File

@ -0,0 +1,25 @@
package com.bonus.material.devConfig.domain;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/11 22:53
*/
// EquipmentTypeQuery.java
import lombok.Data;
/**
* 装备分类查询参数
*/
@Data
public class EquipmentTypeQuery {
private Long parentId;
private String typeName;
private String status;
private Integer pageNum = 1;
private Integer pageSize = 10;
private Integer offset;
}

View File

@ -0,0 +1,60 @@
package com.bonus.material.devConfig.domain;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/11 22:55
*/
// PageResult.java
import lombok.Data;
import java.util.List;
/**
* 分页结果
*/
@Data
public class PageResult<T> {
/**
* 总记录数
*/
private Long total;
/**
* 数据列表
*/
private List<T> rows;
/**
* 当前页
*/
private Integer pageNum;
/**
* 每页大小
*/
private Integer pageSize;
/**
* 总页数
*/
private Integer pages;
public PageResult() {}
public PageResult(Long total, List<T> rows) {
this.total = total;
this.rows = rows;
}
public PageResult(Long total, List<T> rows, Integer pageNum, Integer pageSize) {
this.total = total;
this.rows = rows;
this.pageNum = pageNum;
this.pageSize = pageSize;
this.pages = (int) Math.ceil((double) total / pageSize);
}
}

View File

@ -0,0 +1,29 @@
package com.bonus.material.devConfig.mapper;
import com.bonus.material.devConfig.domain.EquipmentProperty;
import com.bonus.material.devConfig.domain.EquipmentPropertyDTO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface EquipmentPropertyMapper {
void deleteById(Integer id);
void update(EquipmentProperty equipmentProperty);
void insert(EquipmentProperty equipmentProperty);
List<EquipmentProperty> selectByTypeId(Long typeId);
EquipmentProperty selectById(Long id);
List<EquipmentProperty> selectAll();
// 新增关联查询方法
List<EquipmentPropertyDTO> selectTypeWithProperties(Long typeId);
List<EquipmentPropertyDTO> selectAllTypesWithProperties();
EquipmentPropertyDTO selectTypeDetailWithProperties(Long typeId);
}

View File

@ -0,0 +1,62 @@
package com.bonus.material.devConfig.mapper;
// EquipmentTypeMapper.java
import com.bonus.material.devConfig.domain.EquipmentType;
import com.bonus.material.devConfig.domain.EquipmentTypeQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 装备分类Mapper
*/
@Mapper
public interface EquipmentTypeMapper {
/**
* 查询装备分类列表
*/
List<EquipmentType> selectEquipmentTypeList(EquipmentTypeQuery query);
/**
* 查询装备分类数量
*/
Long countEquipmentTypeList(EquipmentTypeQuery query);
/**
* 根据父ID查询子分类
*/
List<EquipmentType> selectChildrenByParentId(@Param("parentId") Long parentId);
/**
* 查询所有分类构建树形结构用
*/
List<EquipmentType> selectAllEquipmentTypes();
/**
* 根据ID查询分类
*/
EquipmentType selectEquipmentTypeById(@Param("typeId") Long typeId);
/**
* 新增装备分类
*/
int insertEquipmentType(EquipmentType equipmentType);
/**
* 更新装备分类
*/
int updateEquipmentType(EquipmentType equipmentType);
/**
* 删除装备分类
*/
int deleteEquipmentTypeById(@Param("typeId") Long typeId);
/**
* 检查是否存在子分类
*/
Long countChildrenByParentId(@Param("parentId") Long parentId);
}

View File

@ -0,0 +1,26 @@
package com.bonus.material.devConfig.service;
import com.bonus.material.devConfig.domain.EquipmentProperty;
import com.bonus.material.devConfig.domain.EquipmentPropertyDTO;
import java.util.List;
public interface EquipmentPropertyService {
List<EquipmentProperty> list();
EquipmentProperty getById(Long id);
List<EquipmentProperty> getByTypeId(Long typeId);
void add(EquipmentProperty equipmentProperty);
void update(EquipmentProperty equipmentProperty);
void delete(Integer id);
List<EquipmentPropertyDTO> getTypeWithProperties(Long typeId);
List<EquipmentPropertyDTO> getAllTypesWithProperties();
EquipmentPropertyDTO getTypeDetailWithProperties(Long typeId);
}

View File

@ -0,0 +1,31 @@
package com.bonus.material.devConfig.service;
// EquipmentTypeService.java
import com.bonus.material.devConfig.domain.PageResult;
import com.bonus.material.devConfig.domain.EquipmentTypeDTO;
import com.bonus.material.devConfig.domain.EquipmentType;
import com.bonus.material.devConfig.domain.EquipmentTypeQuery;
import java.util.List;
/**
* 装备分类服务
*/
public interface EquipmentTypeService {
List<EquipmentTypeDTO> getEquipmentTypeTree();
List<EquipmentTypeDTO> getEquipmentCascader();
PageResult<EquipmentType> getEquipmentTypeList(EquipmentTypeQuery query);
EquipmentType getEquipmentTypeDetail(Long id);
void addEquipmentType(EquipmentType equipmentType);
void updateEquipmentType(EquipmentType equipmentType);
void deleteEquipmentType(Long id);
}

View File

@ -0,0 +1,75 @@
package com.bonus.material.devConfig.service.impl;
import com.bonus.material.devConfig.domain.EquipmentProperty;
import com.bonus.material.devConfig.domain.EquipmentPropertyDTO;
import com.bonus.material.devConfig.mapper.EquipmentPropertyMapper;
import com.bonus.material.devConfig.service.EquipmentPropertyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @author 30791
* @version 1.0
* Create by 2025/10/14 16:29
*/
@Service
public class EquipmentPropertyServiceImpl implements EquipmentPropertyService {
@Autowired
private EquipmentPropertyMapper equipmentPropertyMapper;
@Override
public List<EquipmentProperty> list() {
return equipmentPropertyMapper.selectAll();
}
@Override
public EquipmentProperty getById(Long id) {
return equipmentPropertyMapper.selectById(id);
}
@Override
public List<EquipmentProperty> getByTypeId(Long typeId) {
return equipmentPropertyMapper.selectByTypeId(typeId);
}
@Override
public void add(EquipmentProperty equipmentProperty) {
equipmentProperty.setCreateTime(new Date());
equipmentPropertyMapper.insert(equipmentProperty);
}
@Override
public void update(EquipmentProperty equipmentProperty) {
equipmentPropertyMapper.update(equipmentProperty);
}
@Override
public void delete(Integer id) {
equipmentPropertyMapper.deleteById(id);
}
@Override
public List<EquipmentPropertyDTO> getTypeWithProperties(Long typeId) {
return equipmentPropertyMapper.selectTypeWithProperties(typeId);
}
@Override
public List<EquipmentPropertyDTO> getAllTypesWithProperties() {
return equipmentPropertyMapper.selectAllTypesWithProperties();
}
@Override
public EquipmentPropertyDTO getTypeDetailWithProperties(Long typeId) {
return equipmentPropertyMapper.selectTypeDetailWithProperties(typeId);
}
}

View File

@ -0,0 +1,160 @@
package com.bonus.material.devConfig.service.impl;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.material.devConfig.domain.PageResult;
import com.bonus.material.devConfig.domain.EquipmentTypeDTO;
import com.bonus.material.devConfig.domain.EquipmentType;
import com.bonus.material.devConfig.mapper.EquipmentTypeMapper;
import com.bonus.material.devConfig.domain.EquipmentTypeQuery;
import com.bonus.material.devConfig.service.EquipmentTypeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 装备分类服务实现
*/
@Service
public class EquipmentTypeServiceImpl implements EquipmentTypeService {
@Autowired
private EquipmentTypeMapper equipmentTypeMapper;
@Override
public List<EquipmentTypeDTO> getEquipmentTypeTree() {
List<EquipmentType> allTypes = equipmentTypeMapper.selectAllEquipmentTypes();
List<EquipmentType> tree = buildTree(allTypes);
return convertToDTOList(tree);
}
@Override
public List<EquipmentTypeDTO> getEquipmentCascader() {
return getEquipmentTypeTree();
}
@Override
public PageResult<EquipmentType> getEquipmentTypeList(EquipmentTypeQuery query) {
// 计算offset修正分页参数
if (query.getPageNum() != null && query.getPageSize() != null) {
query.setOffset((query.getPageNum() - 1) * query.getPageSize());
}
List<EquipmentType> list = equipmentTypeMapper.selectEquipmentTypeList(query);
Long total = equipmentTypeMapper.countEquipmentTypeList(query);
return new PageResult<>(total, list, query.getPageNum(), query.getPageSize());
}
@Override
public EquipmentType getEquipmentTypeDetail(Long id) {
return equipmentTypeMapper.selectEquipmentTypeById(id);
}
@Override
@Transactional
public void addEquipmentType(EquipmentType equipmentType) {
// 设置默认值
// 设置层级如果没有设置则默认为1
if (equipmentType.getLevel() == null) {
equipmentType.setLevel(1);
}
equipmentType.setCreateTime(new Date());
equipmentType.setUpdateTime(new Date());
equipmentTypeMapper.insertEquipmentType(equipmentType);
}
@Override
@Transactional
public void updateEquipmentType(EquipmentType equipmentType) {
// 1. 校验父ID是否与自身ID相同
if (equipmentType.getParentId() != null && equipmentType.getParentId().equals(equipmentType.getTypeId())) {
// 抛出异常阻止更新并回滚事务
throw new IllegalArgumentException("父分类ID不能与自身ID相同更新失败。");
}
// 4. 执行正常的更新逻辑
equipmentType.setUpdateTime(new Date());
equipmentTypeMapper.updateEquipmentType(equipmentType);
}
@Override
@Transactional
public void deleteEquipmentType(Long id) {
// 检查是否存在子分类
Long count = equipmentTypeMapper.countChildrenByParentId(id);
if (count > 0) {
throw new RuntimeException("存在子分类,无法删除");
}
equipmentTypeMapper.deleteEquipmentTypeById(id);
}
/**
* 构建树形结构
*/
private List<EquipmentType> buildTree(List<EquipmentType> list) {
List<EquipmentType> roots = list.stream()
.filter(node -> node.getParentId() == null || node.getParentId() == 0)
.collect(Collectors.toList());
for (EquipmentType root : roots) {
buildChildTree(root, list, 1);
}
return roots;
}
/**
* 递归构建子树
*/
private void buildChildTree(EquipmentType parent, List<EquipmentType> list, int level) {
List<EquipmentType> children = list.stream()
.filter(node -> parent.getTypeId().equals(node.getParentId()))
.collect(Collectors.toList());
parent.setChildren(children);
parent.setLevel(level);
parent.setLeaf(children.isEmpty());
for (EquipmentType child : children) {
buildChildTree(child, list, level + 1);
}
}
/**
* 转换为DTO列表
*/
private List<EquipmentTypeDTO> convertToDTOList(List<EquipmentType> entities) {
return entities.stream()
.map(this::convertToDTO)
.collect(Collectors.toList());
}
/**
* 转换为DTO
*/
private EquipmentTypeDTO convertToDTO(EquipmentType entity) {
EquipmentTypeDTO dto = new EquipmentTypeDTO();
dto.setId(entity.getTypeId());
dto.setName(entity.getTypeName());
dto.setParentId(entity.getParentId());
dto.setLevel(entity.getLevel());
dto.setLeaf(entity.getLeaf());
if (entity.getChildren() != null && !entity.getChildren().isEmpty()) {
List<EquipmentTypeDTO> childDTOs = convertToDTOList(entity.getChildren());
dto.setChildren(childDTOs);
}
return dto;
}
}

View File

@ -0,0 +1,197 @@
<?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.bonus.material.devConfig.mapper.EquipmentPropertyMapper">
<!-- 基础结果映射 -->
<resultMap id="EquipmentPropertyResult" type="com.bonus.material.devConfig.domain.EquipmentProperty">
<id property="id" column="id"/>
<result property="typeId" column="type_id"/>
<result property="mustHave" column="must_have"/>
<result property="inputType" column="input_type"/>
<result property="propertyName" column="property_name"/>
<result property="propertyValue" column="property_value"/>
<result property="createTime" column="create_time"/>
</resultMap>
<!-- 装备类型结果映射 -->
<resultMap id="EquipmentTypeResult" type="com.bonus.material.devConfig.domain.EquipmentType">
<id property="typeId" column="type_id"/>
<result property="typeName" column="type_name"/>
<result property="parentId" column="parent_id"/>
<result property="sortOrder" column="sort_order"/>
<result property="status" column="status"/>
<result property="level" column="level"/>
<result property="leaf" column="leaf"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="createBy" column="create_by"/>
<result property="updateBy" column="update_by"/>
</resultMap>
<!-- 关联查询结果映射 -->
<resultMap id="EquipmentPropertyDTOResult" type="com.bonus.material.devConfig.domain.EquipmentPropertyDTO">
<!-- 装备类型信息 -->
<result property="typeId" column="type_id"/>
<result property="typeName" column="type_name"/>
<result property="parentId" column="parent_id"/>
<result property="sortOrder" column="sort_order"/>
<result property="status" column="status"/>
<result property="level" column="level"/>
<result property="leaf" column="leaf"/>
<!-- 特征值信息 -->
<result property="propertyId" column="property_id"/>
<result property="mustHave" column="must_have"/>
<result property="inputType" column="input_type"/>
<result property="propertyName" column="property_name"/>
<result property="propertyValue" column="property_value"/>
<result property="propertyCreateTime" column="property_create_time"/>
</resultMap>
<!-- 详细的关联查询结果映射(包含特征值列表) -->
<resultMap id="TypeDetailWithPropertiesResult" type="com.bonus.material.devConfig.domain.EquipmentPropertyDTO">
<constructor>
<idArg column="type_id" javaType="java.lang.Long"/>
</constructor>
<result property="typeId" column="type_id"/>
<result property="typeName" column="type_name"/>
<result property="parentId" column="parent_id"/>
<result property="sortOrder" column="sort_order"/>
<result property="status" column="status"/>
<result property="level" column="level"/>
<result property="leaf" column="leaf"/>
<!-- 关联特征值列表 -->
<collection property="properties" ofType="com.bonus.material.devConfig.domain.EquipmentProperty"
resultMap="EquipmentPropertyResult"/>
</resultMap>
<!-- 查询所有特征值 -->
<select id="selectAll" resultMap="EquipmentPropertyResult">
SELECT id, type_id, must_have, input_type, property_name, property_value, create_time
FROM equipment_property
ORDER BY create_time DESC
</select>
<!-- 根据ID查询特征值 -->
<select id="selectById" parameterType="java.lang.Integer" resultMap="EquipmentPropertyResult">
SELECT id, type_id, must_have, input_type, property_name, property_value, create_time
FROM equipment_property
WHERE id = #{id}
</select>
<!-- 根据类型ID查询特征值 -->
<select id="selectByTypeId" parameterType="java.lang.Integer" resultMap="EquipmentPropertyResult">
SELECT id, type_id, must_have, input_type, property_name, property_value, create_time
FROM equipment_property
WHERE type_id = #{typeId}
ORDER BY create_time DESC
</select>
<!-- 根据类型ID查询装备类型及其特征值扁平化结果 -->
<select id="selectTypeWithProperties" parameterType="java.lang.Long" resultMap="EquipmentPropertyResult">
SELECT
et.type_id,
et.type_name,
et.parent_id,
et.sort_order,
et.status,
et.level,
et.leaf,
ep.id as property_id,
ep.must_have,
ep.input_type,
ep.property_name,
ep.property_value,
ep.create_time as property_create_time
FROM equipment_type et
LEFT JOIN equipment_property ep ON et.type_id = ep.type_id
WHERE et.type_id = #{typeId}
ORDER BY ep.create_time DESC
</select>
<!-- 查询所有装备类型及其特征值(扁平化结果) -->
<select id="selectAllTypesWithProperties" resultMap="EquipmentPropertyResult">
SELECT
et.type_id,
et.type_name,
et.parent_id,
et.sort_order,
et.status,
et.level,
et.leaf,
ep.id as property_id,
ep.must_have,
ep.input_type,
ep.property_name,
ep.property_value,
ep.create_time as property_create_time
FROM equipment_type et
LEFT JOIN equipment_property ep ON et.type_id = ep.type_id
WHERE et.status = '0'
ORDER BY et.type_id, ep.create_time DESC
</select>
<!-- 查询装备类型详情及其特征值列表 -->
<select id="selectTypeDetailWithProperties" parameterType="java.lang.Long" resultMap="TypeDetailWithPropertiesResult">
SELECT
et.type_id,
et.type_name,
et.parent_id,
et.sort_order,
et.status,
et.level,
et.leaf,
ep.id,
ep.type_id as ep_type_id,
ep.must_have,
ep.input_type,
ep.property_name,
ep.property_value,
ep.create_time
FROM equipment_type et
LEFT JOIN equipment_property ep ON et.type_id = ep.type_id
WHERE et.type_id = #{typeId}
ORDER BY ep.create_time DESC
</select>
<!-- 新增特征值 -->
<insert id="insert" parameterType="com.bonus.material.devConfig.domain.EquipmentProperty"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO equipment_property (
type_id,
must_have,
input_type,
property_name,
property_value,
create_time
) VALUES (
#{typeId},
#{mustHave},
#{inputType},
#{propertyName},
#{propertyValue},
#{createTime}
)
</insert>
<!-- 更新特征值 -->
<update id="update" parameterType="com.bonus.material.devConfig.domain.EquipmentProperty">
UPDATE equipment_property
<set>
<if test="typeId != null">type_id = #{typeId},</if>
<if test="mustHave != null and mustHave != ''">must_have = #{mustHave},</if>
<if test="inputType != null">input_type = #{inputType},</if>
<if test="propertyName != null and propertyName != ''">property_name = #{propertyName},</if>
<if test="propertyValue != null">property_value = #{propertyValue},</if>
</set>
WHERE id = #{id}
</update>
<!-- 根据ID删除特征值 -->
<delete id="deleteById" parameterType="java.lang.Integer">
DELETE FROM equipment_property
WHERE id = #{id}
</delete>
</mapper>

View File

@ -0,0 +1,99 @@
<?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.bonus.material.devConfig.mapper.EquipmentTypeMapper">
<resultMap id="BaseResultMap" type="com.bonus.material.devConfig.domain.EquipmentType">
<id column="type_id" property="typeId" />
<result column="type_name" property="typeName" />
<result column="parent_id" property="parentId" />
<result column="level" property="level" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="create_by" property="createBy" />
<result column="update_by" property="updateBy" />
</resultMap>
<sql id="Base_Column_List">
type_id, type_name, parent_id, level, create_time, update_time, create_by, update_by
</sql>
<select id="selectEquipmentTypeList" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM ma_type
<where>
<if test="parentId != null">
AND parent_id = #{parentId}
</if>
<if test="typeName != null and typeName != ''">
AND type_name LIKE CONCAT('%', #{typeName}, '%')
</if>
AND level != '7'
</where>
ORDER BY create_time DESC
<if test="pageSize != null and pageSize > 0">
LIMIT #{pageSize} OFFSET #{offset}
</if>
</select>
<select id="countEquipmentTypeList" resultType="java.lang.Long">
SELECT COUNT(*)
FROM ma_type
<where>
<if test="parentId != null">
AND parent_id = #{parentId}
</if>
<if test="typeName != null and typeName != ''">
AND type_name LIKE CONCAT('%', #{typeName}, '%')
</if>
AND level != '7'
</where>
</select>
<select id="selectChildrenByParentId" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM ma_type
WHERE parent_id = #{parentId} and level != '7'
</select>
<select id="selectAllEquipmentTypes" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM ma_type
WHERE level != '7'
</select>
<select id="selectEquipmentTypeById" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List" />
FROM ma_type
WHERE type_id = #{typeId}
</select>
<insert id="insertEquipmentType" parameterType="com.bonus.material.devConfig.domain.EquipmentType"
useGeneratedKeys="true" keyProperty="typeId">
INSERT INTO ma_type (
type_name, parent_id, level, create_time, update_time, create_by, update_by
) VALUES (
#{typeName}, #{parentId}, #{level}, #{createTime}, #{updateTime}, #{createBy}, #{updateBy}
)
</insert>
<update id="updateEquipmentType" parameterType="com.bonus.material.devConfig.domain.EquipmentType">
UPDATE ma_type
<set>
<if test="typeName != null and typeName != ''">type_name = #{typeName},</if>
<if test="parentId != null">parent_id = #{parentId},</if>
<if test="level != null">level = #{level},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy}</if>
</set>
WHERE type_id = #{typeId}
</update>
<delete id="deleteEquipmentTypeById">
DELETE FROM ma_type WHERE type_id = #{typeId}
</delete>
<select id="countChildrenByParentId" resultType="java.lang.Long">
SELECT COUNT(*) FROM ma_type WHERE parent_id = #{parentId} and level != '7'
</select>
</mapper>