装备类型配置页面,特征值未完成
This commit is contained in:
parent
f7150d486d
commit
f55cd76970
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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 +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue