1、自定义板编号规则入参校验;2、新增自定义板编号序号实体、mapper;3、部分systemconfig包名修正;

This commit is contained in:
gaoqr
2024-11-11 19:02:53 +08:00
parent 467918300f
commit c552b8b47e
15 changed files with 390 additions and 32 deletions
@@ -342,4 +342,5 @@ public class ErrorCodeConstants {
//=========== 系统配置 1-002-040-000 ============
public static final ErrorCode SYSTEM_CONFIG_NOT_EXISTS = new ErrorCode(1_002_040_001, "系统配置不存在");
public static final ErrorCode SYSTEM_CONFIG_TYPE_NOT_SUPPORT = new ErrorCode(1_002_040_002, "不支持的系统配置类型");
public static final ErrorCode SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR = new ErrorCode(1_002_040_003, "系统配置:自定义板编号保存解析失败,请检查配置规则或联系客服");
}
@@ -1,13 +1,13 @@
package com.cf.imes.module.system.controller.admin.baseconfig;
package com.cf.imes.module.system.controller.admin.systemconfig;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigRespVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.baseconfig.SystemConfigDO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigRespVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
import com.cf.imes.module.system.service.config.SystemConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -1,4 +1,4 @@
package com.cf.imes.module.system.controller.admin.baseconfig.vo;
package com.cf.imes.module.system.controller.admin.systemconfig.vo;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.module.system.validation.common.CommonStatus;
@@ -1,4 +1,4 @@
package com.cf.imes.module.system.controller.admin.baseconfig.vo;
package com.cf.imes.module.system.controller.admin.systemconfig.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -1,4 +1,4 @@
package com.cf.imes.module.system.controller.admin.baseconfig.vo;
package com.cf.imes.module.system.controller.admin.systemconfig.vo;
import com.cf.imes.module.system.validation.config.SystemConfigTypeEnumValid;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -1,4 +1,4 @@
package com.cf.imes.module.system.controller.admin.baseconfig.vo;
package com.cf.imes.module.system.controller.admin.systemconfig.vo;
import com.cf.imes.module.system.validation.common.CommonStatus;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -0,0 +1,105 @@
package com.cf.imes.module.system.dal.dataobject.customblockno;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serial;
import java.io.Serializable;
/**
* 自定义板编号序号实体
*
* @author Gqr
* @since 2024/11/11 18:31
*/
@TableName(value = "custom_blockno_seq", autoResultMap = true)
@KeySequence("custom_blockno_seq_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CustomBlockNoSeqDO implements Serializable {
private static final long serialVersionUID = -4362641672146584682L;
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 组织ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long organId;
/**
* 规则ID
*/
private Long configId;
/**
* 上次生产单号
*/
private Long lastOrderNo;
/**
* 生产单序号前值
*/
private Integer orderNoSeq;
/**
* 上次房间
*/
private String lastRoom;
/**
* 房间序号前值
*/
private Integer roomSeq;
/**
* 上次柜体
*/
private String lastCabinet;
/**
* 柜体序号前值
*/
private Integer cabinetSeq;
/**
* 上次加工组
*/
private String lastProcessingGroup;
/**
* 加工组序号前值
*/
private Integer processingGroupSeq;
/**
* 上次年
*/
private Short lastYear;
/**
* 上次月
*/
private Short lastMonth;
/**
* 上次天
*/
private Short lastDay;
}
@@ -1,4 +1,4 @@
package com.cf.imes.module.system.dal.dataobject.baseconfig;
package com.cf.imes.module.system.dal.dataobject.systemconfig;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.KeySequence;
@@ -0,0 +1,15 @@
package com.cf.imes.module.system.dal.mysql.customblockno;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.system.dal.dataobject.customblockno.CustomBlockNoSeqDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 自定义板编号序号 mapper
*
* @author Gqr
* @since 2024/11/11 18:38
*/
@Mapper
public interface CustomBlockNoSeqMapper extends BaseMapperX<CustomBlockNoSeqDO> {
}
@@ -1,11 +1,11 @@
package com.cf.imes.module.system.dal.mysql.config;
package com.cf.imes.module.system.dal.mysql.systemconfig;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.dal.dataobject.baseconfig.SystemConfigDO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -0,0 +1,63 @@
package com.cf.imes.module.system.enums.config;
import lombok.AllArgsConstructor;
/**
* 自定义板编号规则编码枚举
*
* @author Gqr
* @since 2024/11/11 15:20
*/
@AllArgsConstructor
public enum CustBoardRuleCodeEnum {
/**
* 自定义
*/
CUSTOM("custom"),
/**
* 日期
*/
DATE("date"),
/**
* 生产单序号
*/
ORDERNO("orderNo"),
/**
* 板件序号
*/
PLATENO("plateNo"),
/**
* 房间号序号
*/
ROOMNO("roomNo"),
/**
* 柜体序号
*/
BODYNO("bodyNo"),
/**
* 加工组序号
*/
PROCESSGROUP("processGroupNo");
private String ruleCode;
/**
* 是否匹配
* @param ruleCode
* @return
*/
public static CustBoardRuleCodeEnum match(String ruleCode) {
for (CustBoardRuleCodeEnum codeEnum : CustBoardRuleCodeEnum.values()) {
if (codeEnum.ruleCode.equals(ruleCode)) {
return codeEnum;
}
}
return null;
}
}
@@ -1,10 +1,10 @@
package com.cf.imes.module.system.service.config;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.baseconfig.SystemConfigDO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
/**
* 系统配置接口
@@ -6,17 +6,18 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.baseconfig.SystemConfigDO;
import com.cf.imes.module.system.dal.mysql.config.SystemConfigMapper;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigPageReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigUpdateStatusReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
import com.cf.imes.module.system.dal.mysql.systemconfig.SystemConfigMapper;
import com.cf.imes.module.system.enums.config.SystemConfigTypeEnum;
import com.cf.imes.module.system.service.config.factory.SystemConfigServiceFactory;
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigGenerateService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -63,6 +64,7 @@ public class SystemConfigServiceImpl implements SystemConfigService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void modifyBaseConfig(ConfigSaveReqVO reqVO) {
Long id = reqVO.getId();
// 根据配置类型选择对应的service
@@ -71,18 +73,20 @@ public class SystemConfigServiceImpl implements SystemConfigService {
configService.checkValid(reqVO.getSetting());
// 系统配置保存前操作
configService.beforeSaveConfig(reqVO);
SystemConfigDO baseConfigDO;
if (ObjectUtil.isNotNull(id)) {
SystemConfigDO baseConfigDO = validateBaseConfigExists(id);
baseConfigDO = validateBaseConfigExists(id);
// 覆盖配置
baseConfigDO.setSetting(reqVO.getSetting());
// 更新
baseConfigMapper.updateById(baseConfigDO);
} else {
baseConfigDO = BeanUtils.toBean(reqVO, SystemConfigDO.class);
// 新增
baseConfigMapper.insert(BeanUtils.toBean(reqVO, SystemConfigDO.class));
baseConfigMapper.insert(baseConfigDO);
}
// 系统配置保存后操作
configService.afterSaveConfig(reqVO);
configService.afterSaveConfig(baseConfigDO, reqVO);
}
@Override
@@ -1,6 +1,7 @@
package com.cf.imes.module.system.service.config.factory.service;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
/**
* 系统配置生成服务抽象类
@@ -30,5 +31,5 @@ public abstract class AbstractSystemConfigGenerateService {
*
* @param reqVO
*/
public abstract void afterSaveConfig(ConfigSaveReqVO reqVO);
public abstract void afterSaveConfig(SystemConfigDO systemConfigDO, ConfigSaveReqVO reqVO);
}
@@ -1,9 +1,31 @@
package com.cf.imes.module.system.service.config.factory.service.impl;
import com.cf.imes.module.system.controller.admin.baseconfig.vo.ConfigSaveReqVO;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.common.exception.ErrorCode;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ConfigSaveReqVO;
import com.cf.imes.module.system.dal.dataobject.systemconfig.SystemConfigDO;
import com.cf.imes.module.system.dal.dataobject.dict.DictDataDO;
import com.cf.imes.module.system.dal.mysql.customblockno.CustomBlockNoSeqMapper;
import com.cf.imes.module.system.enums.config.CustBoardRuleCodeEnum;
import com.cf.imes.module.system.service.config.factory.service.AbstractSystemConfigGenerateService;
import com.cf.imes.module.system.service.dict.DictDataService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR;
/**
* 自定义板编号生成服务
*
@@ -11,20 +33,167 @@ import org.springframework.stereotype.Service;
* @since 2024/11/8 16:48
*/
@Service("customBoardNoGenerateService")
@Slf4j
public class CustomBoardNoGenerateService extends AbstractSystemConfigGenerateService {
// 自定义板编号校验错误全部统一编号:1_002_040_003
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_EMPTY_ERROR = new ErrorCode(1_002_040_003, "规则编码不能为空");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR = new ErrorCode(1_002_040_003, "规则编码【{}】不合法,请检查配置规则");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR = new ErrorCode(1_002_040_003, "时间格式【{}】不合法,请检查配置规则");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_RESETMODE_ERROR = new ErrorCode(1_002_040_003, "复位/清零模式【{}】不合法,请检查配置规则");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY = new ErrorCode(1_002_040_003, "数字类型【{}】不能为空,请检查配置规则");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_ERROR = new ErrorCode(1_002_040_003, "数值类型参数{}:【{}】转换异常,请检查配置规则");
public static final ErrorCode CUSTOM_BOARD_NO_RULE_CHECK_BOL_TYPE_ERROR = new ErrorCode(1_002_040_003, "布尔类型参数{}:【{}】转换异常,请检查配置规则");
@Resource
private DictDataService dictDataService;
@Resource
private CustomBlockNoSeqMapper customBlockNoSeqMapper;
@Override
public void checkValid(String setting) {
// todo checkValid
// 字典中的时间格式
List<DictDataDO> dateTypeFormatDictList = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), "system_setting_date_type");
// 字典中的复位模式
List<DictDataDO> resetModeDictList = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), "system_setting_rest_type");
try {
JSONArray jsonArray = JSON.parseArray(setting);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String ruleCode = jsonObject.getString("ruleCode");
// 1.校验code
CustBoardRuleCodeEnum custBoardRuleCodeEnum = checkRoleCode(ruleCode);
// 2.时间格式校验
checkDateFormat(custBoardRuleCodeEnum, jsonObject.getString("value"), dateTypeFormatDictList);
// 3.序号类型校验数字和布尔类型
checkNoType(custBoardRuleCodeEnum, jsonObject);
// 4.复位类型校验
checkResetMode(custBoardRuleCodeEnum, jsonObject.getInteger("resetMode"), resetModeDictList);
}
} catch (ServiceException e) {
throw e;
} catch (Exception e) {
ErrorCode systemConfigCustomBoardNoRuleSaveCheckError = SYSTEM_CONFIG_CUSTOM_BOARD_NO_RULE_SAVE_CHECK_ERROR;
log.error(systemConfigCustomBoardNoRuleSaveCheckError.getMsg(), e);
throw new ServiceException(systemConfigCustomBoardNoRuleSaveCheckError);
}
throw new ServiceException();
}
/**
* 校验ruleCode
*
* @param ruleCode 规则编码
*/
private CustBoardRuleCodeEnum checkRoleCode(String ruleCode) {
if (StringUtils.isEmpty(ruleCode)) {
throw new ServiceException(CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_EMPTY_ERROR);
}
CustBoardRuleCodeEnum custBoardRuleCodeEnum = CustBoardRuleCodeEnum.match(ruleCode);
if (ObjectUtil.isNull(custBoardRuleCodeEnum)) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_RULECODE_NOT_MATCH_ERROR, ruleCode);
}
return custBoardRuleCodeEnum;
}
/**
* 校验时间格式
*
* @param custBoardRuleCodeEnum 规则编码枚举
* @param format 格式
*/
private void checkDateFormat(CustBoardRuleCodeEnum custBoardRuleCodeEnum, String format, List<DictDataDO> dateTypeFormatDictList) {
if (ObjectUtil.equal(CustBoardRuleCodeEnum.DATE, custBoardRuleCodeEnum) && StringUtils.isNotEmpty(format)) {
Optional<DictDataDO> dateFormatDictDataOptional = dateTypeFormatDictList.stream().filter(d -> format.equals(d.getValue())).findAny();
if (dateFormatDictDataOptional.isEmpty()) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_DATE_TYPE_FORMAT_ERROR, format);
}
}
}
/**
* 校验序号类型中数值和布尔类型的属性
*
* @param custBoardRuleCodeEnum
* @param object
*/
private void checkNoType(CustBoardRuleCodeEnum custBoardRuleCodeEnum, JSONObject object) {
// 序号类型才校验
if (ObjectUtil.equal(CustBoardRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PROCESSGROUP, custBoardRuleCodeEnum)) {
String[] intTypeFieldArr = new String[]{"initValue", "length", "resetMode", "increment_step"};
String[] bolTypeFieldArr = new String[]{"left_fill_zero"};
for (String field : intTypeFieldArr) {
checkInt(field, object.get(field));
}
for (String field : bolTypeFieldArr) {
checkBol(field, object.get(field));
}
}
}
/**
* 校验整型
*/
private void checkInt(String field, Object intObj) {
if (ObjectUtil.isNull(intObj)) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, field);
}
if (!NumberUtil.isInteger(intObj.toString())) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_ERROR, field, intObj);
}
}
/**
* 校验布尔型
*
* @param field
* @param bolObj
*/
private void checkBol(String field, Object bolObj) {
if (ObjectUtil.isNull(bolObj)) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_INT_TYPE_NO_EMPTY, field);
}
if (!(bolObj instanceof Boolean)) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_BOL_TYPE_ERROR, field, bolObj);
}
}
/**
* 校验复位类型
*
* @param resetMode
*/
private void checkResetMode(CustBoardRuleCodeEnum custBoardRuleCodeEnum, Integer resetMode, List<DictDataDO> resetModeDictList) {
if (ObjectUtil.equal(CustBoardRuleCodeEnum.ORDERNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PLATENO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.ROOMNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.BODYNO, custBoardRuleCodeEnum)
|| ObjectUtil.equal(CustBoardRuleCodeEnum.PROCESSGROUP, custBoardRuleCodeEnum)) {
Optional<DictDataDO> resetModeDictDataOptional = resetModeDictList.stream().filter(d -> resetMode.toString().equals(d.getValue())).findAny();
if (resetModeDictDataOptional.isEmpty()) {
throw ServiceExceptionUtil.exception(CUSTOM_BOARD_NO_RULE_CHECK_RESETMODE_ERROR, resetMode);
}
}
}
@Override
public void beforeSaveConfig(ConfigSaveReqVO reqVO) {
// todo beforeSaveConfig
}
@Override
public void afterSaveConfig(ConfigSaveReqVO reqVO) {
// todo afterSaveConfig
public void afterSaveConfig(SystemConfigDO systemConfigDO, ConfigSaveReqVO reqVO) {
}
}