🆕 类型
All checks were successful
Release / Release (push) Successful in 43s

This commit is contained in:
my_ong 2025-03-02 14:23:58 +08:00
parent 9f0ac9b075
commit 79d6ec9a5d
6 changed files with 255 additions and 0 deletions

View File

@ -0,0 +1,82 @@
package tech.riemann.ims.controller.platform.material;
import club.zhcs.lina.starter.exception.BizException;
import club.zhcs.lina.utils.enums.Codebook;
import club.zhcs.lina.utils.enums.ICodeBook;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nutz.lang.Strings;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import tech.riemann.ims.dto.response.TypeTree;
import tech.riemann.ims.entity.material.Type;
import tech.riemann.ims.service.material.ITypeService;
import java.util.Arrays;
import java.util.List;
/**
* @author mayong
* @since 2025/3/2 14:14
*/
@RestController
@Slf4j
@Tag(name = "Type", description = "物料类型管理")
@RequiredArgsConstructor
public class TypeController {
private final ITypeService typeService;
@GetMapping("areas")
@Operation(summary = "查询类型")
public List<Type> areas(
@Parameter(description = "搜索关键词") @RequestParam(required = false, defaultValue = "") String key) {
boolean hasLike = Strings.isNotBlank(key);
key = String.format("%%%s%%", key);
return typeService.list(
Wrappers.<Type>lambdaQuery()
.like(hasLike, Type::getName, key));
}
@PostMapping("area")
@Operation(summary = "增加/更新地区")
public Type addAndModify(@Validated @Parameter(description = "类型") @RequestBody Type area) {
if (area.getId() == null) {
typeService.save(area);
} else {
typeService.updateById(area);
}
return area;
}
@DeleteMapping("area/{id}")
@Operation(summary = "删除类型")
public void deleteArea(@Parameter(description = "id", required = true) @PathVariable long id) {
if (!typeService.removeById(id)) {
throw BizException.create("删除失败!");
}
}
@GetMapping("area/levels")
@Operation(summary = "级别")
public List<Codebook> levels() {
return Arrays.stream(Type.Level.values()).map(ICodeBook::build).toList();
}
@GetMapping("area/trees")
@Operation(summary = "类型树")
public List<TypeTree> trees() {
List<Type> all = typeService.list();
List<TypeTree> data = all.stream().map(area -> TypeTree.builder()
.value(area.getNo())
.label(area.getName())
.parentNo(area.getParentNo())
.build())
.toList();
return TypeTree.buildTree(data, null);
}
}

View File

@ -0,0 +1,36 @@
package tech.riemann.ims.dto.response;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author mayong
* @since 2025/1/18 19:20
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TypeTree {
@Schema(description = "类型编码", requiredMode = Schema.RequiredMode.REQUIRED)
private String value;
@Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String label;
private String parentNo;
private List<TypeTree> children;
public static List<TypeTree> buildTree(List<TypeTree> data, String root) {
return data.stream()
.filter(t -> Objects.equals(t.getParentNo(), root))
.peek(t -> t.setChildren(buildTree(data, t.getValue()))).
collect(Collectors.toList());
}
}

View File

@ -0,0 +1,90 @@
package tech.riemann.ims.entity.material;
import club.zhcs.lina.utils.enums.Codebook;
import club.zhcs.lina.utils.enums.ICodeBook;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonGetter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.nutz.dao.entity.annotation.ColDefine;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Comment;
import org.nutz.dao.entity.annotation.Table;
import org.nutz.json.JsonField;
import tech.riemann.ims.entity.IdBaseEntity;
import java.io.Serial;
/**
* @author mayong
* @since 2025/3/2 14:07
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("t_material")
@Table("t_material")
@Comment("物料")
@Schema(name = "Material", description = "物料")
public class Type extends IdBaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "类型编码", requiredMode = Schema.RequiredMode.REQUIRED)
@TableField("a_no")
@Column("a_no")
@Comment("类型编码")
@ColDefine(notNull = true, width = 10, precision = 0)
private String no;
@Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED)
@TableField("a_name")
@Column("a_name")
@Comment("类型名称")
@ColDefine(notNull = true, width = 255, precision = 0)
private String name;
@Schema(description = "类型级别", requiredMode = Schema.RequiredMode.REQUIRED)
@TableField("a_level")
@Column("a_level")
@Comment("类型级别")
@ColDefine(notNull = true, width = 10, precision = 0)
private Level level;
@Schema(description = "上级类型编码", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
@TableField("a_parent_no")
@Column("a_parent_no")
@Comment("上级类型编码")
@ColDefine(notNull = false, width = 10, precision = 0)
private String parentNo;
@Getter
@AllArgsConstructor
public enum Level implements ICodeBook {
ONE("town", "一级"),
TWO("village", "二级"),
;
@EnumValue
final String code;
final String description;
}
@JsonGetter
@JsonField
public Codebook getLevelInfo() {
return level == null ? null : level.build();
}
public void setLevelInfo(Codebook areaLevel) {
}
}

View File

@ -0,0 +1,11 @@
package tech.riemann.ims.mapper.material;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import tech.riemann.ims.entity.material.Type;
/**
* @author mayong
* @since 2024/11/27 15:42
*/
public interface TypeMapper extends BaseMapper<Type> {
}

View File

@ -0,0 +1,12 @@
package tech.riemann.ims.service.material;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nutz.spring.boot.service.interfaces.IdNameEntityService;
import tech.riemann.ims.entity.material.Type;
/**
* @author mayong
* @since 2024/11/27 15:40
*/
public interface ITypeService extends IService<Type>, IdNameEntityService<Type> {
}

View File

@ -0,0 +1,24 @@
package tech.riemann.ims.service.material.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.nutz.dao.Dao;
import org.springframework.stereotype.Service;
import tech.riemann.ims.entity.material.Type;
import tech.riemann.ims.mapper.material.TypeMapper;
import tech.riemann.ims.service.material.ITypeService;
/**
* @author mayong
* @since 2024/11/27 15:41
*/
@Service
@RequiredArgsConstructor
public class TypeServiceImpl extends ServiceImpl<TypeMapper, Type> implements ITypeService {
private final Dao dao;
@Override
public Dao dao() {
return dao;
}
}