dangsn
2023-08-24 452d10d439e356d6bd618f0d09092af5c783f8f6
新增设置最大流水号
已修改5个文件
236 ■■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
@@ -40,6 +40,12 @@
     */
    private List<CodeOrderSecDTO> secDTOList;
    /**
     * 最大流水号
     */
    private int maxSecNum;
    public String getCodeClassifyOid() {
        return codeClassifyOid;
    }
@@ -80,14 +86,23 @@
        this.editInProcess = editInProcess;
    }
    @Override
    public String toString() {
        return "CodeOrderDTO{" +
                "codeClassifyOid='" + codeClassifyOid + '\'' +
                ", templateOid='" + templateOid + '\'' +
                ", codeRuleOid='" + codeRuleOid + '\'' +
                ", editInProcess=" + editInProcess +
                ", secDTOList=" + secDTOList +
                "} " + super.toString();
    }
    public int getMaxSecNum() {
        return maxSecNum;
    }
    public void setMaxSecNum(int maxSecNum) {
        this.maxSecNum = maxSecNum;
    }
    @Override
    public String toString() {
        return "CodeOrderDTO{" +
            "codeClassifyOid='" + codeClassifyOid + '\'' +
            ", templateOid='" + templateOid + '\'' +
            ", codeRuleOid='" + codeRuleOid + '\'' +
            ", editInProcess=" + editInProcess +
            ", secDTOList=" + secDTOList +
            ", maxSecNum=" + maxSecNum +
            '}';
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -3,9 +3,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeRuleDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.service.ICodeBasicSecService;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject;
@@ -205,4 +208,28 @@
        return R.status(codeBasicSecService.downOrderNum(oid));
    }
    /**
     * 查询编码规则的所有流水依赖的码段
     * @param ruleOid 编码规则主键
     * @return
     */
    @GetMapping("/getCodeRuleAndBasicSecByRuleOid")
    @ApiOperationSupport(order = 13)
    @ApiOperation(value = "查询编码规则的所有流水依赖的码段", notes = "传入oid")
    public R<CodeRuleVO> getCodeRuleAndBasicSecByRuleOid(String ruleOid){
        return R.data(codeBasicSecService.getSerialNumberDepend(ruleOid));
    }
    /**
     * 设置最大流水号
     * @param codeOrderDTO 编码申请传输对象
     * @return
     */
    @PostMapping("/setMaxSerialNumberForCodeRule")
    @ApiOperationSupport(order = 14)
    @ApiOperation(value = "设置最大流水号", notes = "codeOrderDTO")
    public R setMaxSerialNumberForCodeRule(@RequestBody CodeOrderDTO codeOrderDTO){
        return R.success(codeBasicSecService.setMaxSerialNumberForCodeRule(codeOrderDTO));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -4,9 +4,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeRuleDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.vo.CodeReferConfigVO;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.*;
import org.springblade.core.mp.support.Query;
@@ -179,4 +182,20 @@
     * @throws VciBaseException 拷贝属性出错的时候会抛出异常
     */
    CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSec codeBasicSecDO) throws VciBaseException;
    /**
     * 根据编码规则主键获取编码下的流水依赖码段
     * @param oid 编码规则主键
     * @return
     * @throws VciBaseException
     */
    CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException;
    /**
     * 设置最大流水号
     * @param codeOrderDTO 编码申请传输对象
     * @return
     * @throws VciBaseException
     */
    String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -3,18 +3,22 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.lifecycle.CodeRuleLC;
import com.vci.ubcs.code.mapper.CodeBasicSecMapper;
import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
import com.vci.ubcs.code.mapper.CodeSerialValueMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.vo.CodeReferConfigVO;
import com.vci.ubcs.code.vo.pagemodel.*;
@@ -23,6 +27,7 @@
import com.vci.ubcs.omd.enums.EnumEnum;
import com.vci.ubcs.starter.enumpack.CodeTableNameEnum;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
@@ -32,6 +37,7 @@
import com.vci.ubcs.starter.web.pagemodel.*;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.entity.DictBiz;
import com.vci.ubcs.system.feign.IDictBizClient;
@@ -50,6 +56,8 @@
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
import static com.vci.ubcs.code.constant.MdmEngineConstant.EMPTY_SERIAL_UNIT;
import static com.vci.ubcs.code.constant.MdmEngineConstant.SERIAL_UNIT_SPACE;
/**
 * 码段基础信息服务接口
@@ -96,6 +104,12 @@
     */
    @Resource
    private ICodeFixedValueService fixedValueService;
    /**
     * 流水号的相关的信息
     */
    @Resource
    private CodeSerialValueMapper serialValueMapper;
    /**
     * 上层分类码段的属性名称
@@ -351,6 +365,7 @@
        DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO);
        boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
        boolean resBoolean;
        CodeReferConfigVO codeReferConfigVO = null;
        if (!status){
            //返回错误信息
            throw new VciBaseException("编码规则不允许编辑或删除!");
@@ -361,7 +376,6 @@
                && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
                throw new VciBaseException("当补位方式为左补位或者右补位的时候,补位字符不能为空");
            }
            CodeReferConfigVO codeReferConfigVO = null;
            //引用码段的时候,需要判断参照的信息是否正确
            if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
                if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
@@ -379,7 +393,16 @@
                    codeReferConfigService.insert(codeReferConfigVO);
                }
            }
            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
//            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//此处的拷贝会把referValueInfo的值给覆盖掉,需要重新赋值
            BaseModel tempModel = new BaseModel();
            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel);
            BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo");
            BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, codeBasicSecDO);
            codeBasicSecDO.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", codeBasicSecDTO)));
            codeBasicSecDO.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", codeBasicSecDTO)));
            codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO)));
            resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
            //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
            if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
@@ -869,4 +892,129 @@
        return codeBasicSecVO;
    }
    /**
     * 根据编码规则主键获取编码下的流水依赖码段
     *
     * @param oid 编码规则主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException {
        VciBaseUtil.alertNotNull(oid,"编码规则主键");
        CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
        if (codeRuleVO != null) {
            //如果有lcstatus的类的话
            codeRuleVO.setLcStatusText(CodeRuleLC.getTextByValue(codeRuleVO.getLcStatus()));
            LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
                .eq(CodeBasicSec::getPkCodeRule, codeRuleVO.getOid())
                .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue());
            CodeBasicSec codeBasicSec = this.getOne(wrapper);
            if(codeBasicSec != null && VciBaseUtil.isNotNull(codeBasicSec.getOid())){
                wrapper = Wrappers.<CodeBasicSec>query().lambda()
                    .eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid())
                    .eq(CodeBasicSec::getSerialDependFlag,"true")
                    .orderByAsc(CodeBasicSec::getSerialDependOrder);
                List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
                if(!CollectionUtils.isEmpty(codeBasicSecList)){
                    List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList);
                    //查询固定码的码值
                    Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(codeBasicSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toList()));
                    codeBasicSecVOS.stream().forEach(vo->{
                        vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
                    });
                    codeRuleVO.setSecVOList(codeBasicSecVOS);
                }
            }else{
                throw new VciBaseException(codeRuleVO.getName()+"编码规则下无流水码段,无法设置最大流水号!");
            }
        }
        return codeRuleVO;
    }
    /**
     * 设置最大流水号
     *
     * @param codeOrderDTO 编码申请传输对象
     * @return
     * @throws VciBaseException
     */
    @Override
    public String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException {
        VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"编码规则主键",codeOrderDTO.getMaxSecNum(),"最大流水号");
        List<CodeOrderSecDTO> codeOrderSecDTOList = codeOrderDTO.getSecDTOList();
        if(CollectionUtils.isEmpty(codeOrderSecDTOList)){
            throw new VciBaseException("最大流水号的流水依赖不能为空!");
        }
        String codeRuleOid = codeOrderDTO.getCodeRuleOid();
        int maxSecNum = codeOrderDTO.getMaxSecNum();
        Map<String/**码段主键*/,CodeOrderSecDTO/**码段相关信息*/> codeOrderSecDTOMap = codeOrderSecDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t));
        List<String> codeBasicSecOidList = codeOrderSecDTOList.stream().map(s->s.getSecOid()).collect(Collectors.toList());//流水依赖码段的主键集合
        //获取流水依赖码段
        LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
            .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
            .in(CodeBasicSec::getOid,codeBasicSecOidList)
            .eq(CodeBasicSec::getSerialDependFlag,"true")
            .orderByAsc(CodeBasicSec::getSerialDependOrder);
        List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
        //按流水依赖顺序,处理流水依赖码段的值
        List<String> serialDependValueList = new ArrayList<>();
        codeBasicSecList.stream().forEach(s->{
            CodeOrderSecDTO codeOrderSecDTO = codeOrderSecDTOMap.get(s.getOid());
            String serialDependValue = codeOrderSecDTO.getSecValue();
            if(s.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())){
                try {
                    Date date = VciDateUtil.str2Date(codeOrderSecDTO.getSecValue(),s.getCodeDateFormatStr());
                    serialDependValue = VciDateUtil.date2Str(date,s.getCodeDateFormatStr());
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            serialDependValueList.add(serialDependValue);
        });
        //获取流水码段
        wrapper = Wrappers.<CodeBasicSec>query().lambda()
            .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
            .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())
            .orderByAsc(CodeBasicSec::getSerialDependOrder);
        CodeBasicSec codeBasicSec = this.getOne(wrapper);
        //根据编码规则和流水依赖,获取最大流水号
        String serialUnitString = serialDependValueList.size() == 0 ? EMPTY_SERIAL_UNIT : serialDependValueList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
        LambdaQueryWrapper<CodeSerialValue> codeSerialWrapper = new LambdaQueryWrapper<>();
        codeSerialWrapper.eq(CodeSerialValue::getCodeRuleOid, codeRuleOid);
        codeSerialWrapper.eq(CodeSerialValue::getSerialUnit, serialUnitString);
        codeSerialWrapper.eq(CodeSerialValue::getCodeSecOid,codeBasicSec.getOid());
        codeSerialWrapper.orderByDesc(CodeSerialValue::getCreateTime);
        List<CodeSerialValue> codeSerialValueList = serialValueMapper.selectList(codeSerialWrapper);
        //如果最大流水号不为空,说明已有最好流水号,更新最大流水号
        if(!CollectionUtils.isEmpty(codeSerialValueList)){
            CodeSerialValue codeSerialValue = codeSerialValueList.get(0);
            int maxSerial = Double.valueOf(codeSerialValue.getMaxSerial()).intValue();
            //已有的最大流水号,小于设置的最大流水号,更新最大流水号
            if(maxSerial < maxSecNum){
                codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
                serialValueMapper.updateById(codeSerialValue);
            }else{
                maxSecNum = maxSerial;
            }
        }else{
            //如果最大流水号不为空,说明无最好流水号,新增最大流水号
            CodeSerialValue codeSerialValue = new CodeSerialValue();
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeSerialValue, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
            codeSerialValue.setCodeRuleOid(codeRuleOid);
            codeSerialValue.setSerialUnit(serialUnitString);
            codeSerialValue.setCodeSecOid(codeBasicSec.getOid());
            codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
            serialValueMapper.insert(codeSerialValue);
        }
        return String.valueOf(maxSecNum);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -184,6 +184,7 @@
                    }else{
                        //没有
                        CodeSerialValue serialValueDO = new CodeSerialValue();
                        DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
                        serialValueDO.setCodeRuleOid(ruleVO.getOid());
                        serialValueDO.setSerialUnit(serialUnit);
                        serialValueDO.setCodeSecOid(secOid);
@@ -627,6 +628,7 @@
                                BaseModel cbo, CodeClassifyTemplateVO templateVO,
                                List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString){
        CodeAllCode allCodeDO = new CodeAllCode();
        DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE);
        allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
        allCodeDO.setCodeRuleOid(ruleVO.getOid());
        allCodeDO.setId(cbo.getId());
@@ -664,6 +666,7 @@
                    editSerialValueDOList.add(serialValueDO);
                }else{
                    serialValueDO = new CodeSerialValue();
                    DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
                    serialValueDO.setCodeRuleOid(ruleVO.getOid());
                    serialValueDO.setSerialUnit(unit);
                    serialValueDO.setCodeSecOid(secOid);