1、标签设计支持新增自定义类型;2、标签模板支持indict;

This commit is contained in:
gaoqr
2026-08-10 15:06:02 +08:00
parent f44bbf24f0
commit 8c3ab11196
9 changed files with 104 additions and 20 deletions
@@ -224,6 +224,7 @@ public class ErrorCodeConstants {
public static final ErrorCode MACHINE_USE_LABEL = new ErrorCode(1_002_300_003, "machine.use.label");
public static final ErrorCode DEFAULT_NOT_DELETED = new ErrorCode(1_002_300_004, "default.not.deleted");
public static final ErrorCode LABEL_IS_USE_ERROR = new ErrorCode(1_002_300_006, "label.is.use.error");
public static final ErrorCode LABEL_SYSTEM_TYPE_NOT_OPERABLE = new ErrorCode(1_002_300_007, "label.type.not.operable");
// ========== 系统数据源 1_002_301_000 ==========
@@ -1,10 +1,9 @@
package com.cf.imes.module.system.controller.admin.label.vo;
import com.cf.imes.framework.dict.core.validation.InDict;
import com.cf.imes.module.system.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
@@ -16,28 +15,27 @@ public class LabelSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "939")
private Long id;
@Schema(description = "标签类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "标签类型不能为空")
@Size(max = 32, message = "标签类型长度不能超过32个字符")
@InDict(DictTypeConstants.LABEL_TYPE)
@Schema(description = "标签类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "materialLabel")
@NotBlank(message = "label.save.type.notBlank")
@Size(max = 32, message = "label.save.type.size")
private String type;
@Schema(description = "标签名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@NotEmpty(message = "标签名称不能为空")
@Size(max = 50, message = "标签名称长度不能超过50个字符")
@NotEmpty(message = "label.save.name.notEmpty")
@Size(max = 50, message = "label.save.name.size")
private String name;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
@NotEmpty(message = "备注不能为空")
@Size(max = 255, message = "备注长度不能超过255个字符")
@NotEmpty(message = "label.save.remark.notEmpty")
@Size(max = 255, message = "label.save.remark.size")
private String remark;
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "宽度不能为空")
@NotNull(message = "label.save.width.notNull")
private Integer width;
@Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "高度不能为空")
@NotNull(message = "label.save.height.notNull")
private Integer height;
@Schema(description = "配置")
@@ -1,11 +1,12 @@
package com.cf.imes.module.system.controller.admin.labeltemplate;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.dict.core.validation.InDict;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.system.controller.admin.labeltemplate.vo.LabelTemplateRespVO;
import com.cf.imes.module.system.controller.admin.labeltemplate.vo.LabelTemplateSaveReqVO;
import com.cf.imes.module.system.enums.DictTypeConstants;
import com.cf.imes.module.system.service.labeltemplate.LabelTemplateService;
import com.cf.imes.module.system.validation.label.LabelTemplateTypeValid;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -68,7 +69,7 @@ public class LabelTemplateController {
@Parameter(name = "type", description = "标签类型", required = true, example = "1024")
@PreAuthorize("@ss.hasAnyPermissions('system:label-template:query','sysTagDesignManager:query')")
@OperateLog(enable = false)
public CommonResult<LabelTemplateRespVO> getDefaultLabelTemplate(@RequestParam("type") @LabelTemplateTypeValid String type) {
public CommonResult<LabelTemplateRespVO> getDefaultLabelTemplate(@RequestParam("type") @InDict(DictTypeConstants.LABEL_TYPE) String type) {
return success(labelTemplateService.getDefaultLabelTemplate(type));
}
@@ -78,4 +79,4 @@ public class LabelTemplateController {
public CommonResult<Boolean> setDefaultTemplate(@RequestParam Long id) {
return success(labelTemplateService.setDefaultTemplate(id));
}
}
}
@@ -7,6 +7,8 @@ import com.cf.imes.module.system.controller.admin.dict.vo.data.DictDataPageReqVO
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.Arrays;
import java.util.Collection;
@@ -46,4 +48,8 @@ public interface DictDataMapper extends BaseMapperX<DictDataDO> {
.eqIfPresent(DictDataDO::getDictType, dictType));
}
/** 查询字典类型的全部历史值,包含已逻辑删除的数据。 */
@Select("SELECT value FROM system_dict_data WHERE dict_type = #{dictType}")
List<String> selectAllValuesByDictType(@Param("dictType") String dictType);
}
@@ -2,6 +2,7 @@ package com.cf.imes.module.system.service.lable;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.common.enums.DeletedCodeEnum;
import com.cf.imes.framework.common.enums.UserSettingTypeEnum;
import com.cf.imes.framework.common.exception.ServiceException;
@@ -12,14 +13,17 @@ import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.system.controller.admin.label.vo.LabelPageReqVO;
import com.cf.imes.module.system.controller.admin.label.vo.LabelRespVO;
import com.cf.imes.module.system.controller.admin.label.vo.LabelSaveReqVO;
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
import com.cf.imes.module.system.dal.dataobject.labeltemplate.LabelTemplateDO;
import com.cf.imes.module.system.dal.dataobject.lable.LabelDO;
import com.cf.imes.module.system.dal.dataobject.machine.MachineDO;
import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO;
import com.cf.imes.module.system.dal.mysql.label.LabelMapper;
import com.cf.imes.module.system.dal.mysql.dict.DictDataMapper;
import com.cf.imes.module.system.dal.mysql.labeltemplate.LabelTemplateMapper;
import com.cf.imes.module.system.dal.mysql.machine.MachineMapper;
import com.cf.imes.module.system.dal.mysql.setting.PackageConfigMapper;
import com.cf.imes.module.system.enums.DictTypeConstants;
import com.cf.imes.module.system.enums.label.LabelTemplateType;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j;
@@ -29,8 +33,10 @@ import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static com.cf.imes.framework.common.util.json.JsonUtils.parseTree;
@@ -51,6 +57,9 @@ public class LabelServiceImpl implements LabelService {
@Resource
private LabelMapper labelMapper;
@Resource
private DictDataMapper dictDataMapper;
@Resource
private LabelTemplateMapper labelTemplateMapper;
@@ -63,8 +72,12 @@ public class LabelServiceImpl implements LabelService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long createLabel(LabelSaveReqVO createReqVO) {
String type = normalizeType(createReqVO.getType());
validateCustomType(type);
// 插入
LabelDO label = BeanUtils.toBean(createReqVO, LabelDO.class);
label.setType(type);
label.setTemplate(JsonUtils.zipString(label.getTemplate()));
labelMapper.insert(label);
// 返回
@@ -77,8 +90,14 @@ public class LabelServiceImpl implements LabelService {
// 校验存在
LabelDO labelDO = validateLabelExists(updateReqVO.getId());
validateCustomType(labelDO.getType());
String type = normalizeType(updateReqVO.getType());
validateCustomType(type);
// 更新
LabelDO updateObj = BeanUtils.toBean(updateReqVO, LabelDO.class);
updateObj.setType(type);
if(!updateReqVO.getTemplate().isEmpty()){
updateObj.setTemplate(JsonUtils.zipString(updateObj.getTemplate()));
}
@@ -92,6 +111,7 @@ public class LabelServiceImpl implements LabelService {
public void deleteLabel(Long id) {
// 校验存在
LabelDO labelDO = validateLabelExists(id);
validateCustomType(labelDO.getType());
List<MachineDO> machineDOS = machineMapper.selectList(new LambdaQueryWrapperX<MachineDO>()
.select(MachineDO::getId)
@@ -159,14 +179,32 @@ public class LabelServiceImpl implements LabelService {
@Override
public Map<String, List<LabelRespVO>> getGroupList(Long organId) {
Set<String> dictTypes = new HashSet<>(dictDataMapper.selectAllValuesByDictType(DictTypeConstants.LABEL_TYPE));
Set<String> enabledDictTypes = dictDataMapper
.selectListByStatusAndDictType(CommonStatusEnum.ENABLE.getStatus(), DictTypeConstants.LABEL_TYPE)
.stream().map(DictDataDO::getValue).collect(Collectors.toSet());
List<LabelDO> LabelDOS = labelMapper.selectList(new LambdaQueryWrapperX<LabelDO>()
.eqIfPresent(LabelDO::getOrganId, organId)
)
.stream().map(m -> m.setTemplate(unzipString(m.getTemplate()))).toList();
.stream()
.filter(label -> !dictTypes.contains(label.getType()) || enabledDictTypes.contains(label.getType()))
.map(m -> m.setTemplate(unzipString(m.getTemplate()))).toList();
List<LabelRespVO> LabelRespVOS = BeanUtils.toBean(LabelDOS, LabelRespVO.class);
return LabelRespVOS.stream().collect(Collectors.groupingBy(LabelRespVO::getType));
}
private String normalizeType(String type) {
return type == null ? null : type.trim();
}
/** 标签接口只能操作自定义类型,系统默认类型由字段管理维护。 */
private void validateCustomType(String type) {
if (type != null && dictDataMapper.selectByDictTypeAndValue(DictTypeConstants.LABEL_TYPE, type) != null) {
throw new ServiceException(LABEL_SYSTEM_TYPE_NOT_OPERABLE);
}
}
@Override
public List<LabelDO> list(String type) {
@@ -209,4 +247,4 @@ public class LabelServiceImpl implements LabelService {
labelMapper.insertBatch(addList);
}
}
}
@@ -0,0 +1,10 @@
label.system.type.not.operable=系统默认标签类型只能在字段管理中操作
label.type.not.operable=当前标签类型不可操作
label.save.type.notBlank=标签类型不能为空
label.save.type.size=标签类型长度不能超过32个字符
label.save.name.notEmpty=标签名称不能为空
label.save.name.size=标签名称长度不能超过50个字符
label.save.remark.notEmpty=备注不能为空
label.save.remark.size=备注长度不能超过255个字符
label.save.width.notNull=宽度不能为空
label.save.height.notNull=高度不能为空
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long