ludc
2023-05-14 b46cf401da847d7cca6269c6b2ffb04f6f72691a
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
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;
@@ -10,29 +11,34 @@
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.entity.CodeClassifyValue;
import com.vci.ubcs.code.entity.CodeFixedValue;
import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
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.service.ICodeBasicSecService;
import com.vci.ubcs.code.service.ICodeClassifyValueService;
import com.vci.ubcs.code.service.ICodeFixedValueService;
import com.vci.ubcs.code.service.ICodeRuleService;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
import com.vci.ubcs.com.vci.starter.exception.VciBaseException;
import com.vci.ubcs.com.vci.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.com.vci.starter.web.enumpck.OsCodeFillTypeEnum;
import com.vci.ubcs.com.vci.starter.web.pagemodel.KeyValue;
import com.vci.ubcs.com.vci.starter.web.pagemodel.UIFormReferVO;
import com.vci.ubcs.com.vci.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.com.vci.starter.web.util.VciBaseUtil;
import com.vci.ubcs.com.vci.starter.web.util.WebUtil;
import com.vci.ubcs.omd.entity.DictBizM;
import com.vci.ubcs.omd.feign.IDictBizClient;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.entity.DictBiz;
import com.vci.ubcs.system.feign.IDictBizClient;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -42,7 +48,7 @@
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
/**
 * 码段基础信息服务接口
@@ -80,6 +86,12 @@
   @Resource
   private IDictBizClient iDictBizClient;
   /**
    * 固定码段的码值的服务
    */
   @Resource
   private ICodeFixedValueService fixedValueService;
   /**
    * 上层分类码段的属性名称
@@ -159,8 +171,8 @@
    */
   @Override
   public KeyValue checkAttrNullableBySecType(CodeBasicSecDTO codeBasicSecDTO) {
      VciBaseUtil.alertNotNull(codeBasicSecDTO.getSectype(), "码段分类");
      String secType = codeBasicSecDTO.getSectype();
      VciBaseUtil.alertNotNull(codeBasicSecDTO.getSecType(), "码段分类");
      String secType = codeBasicSecDTO.getSecType();
      HashMap<String, String> attrMap = JSONObject.parseObject(JSONObject.toJSONString(codeBasicSecDTO), HashMap.class);
      Map<String, String> notNullableAttr = getNotNullableAttr(secType);
      if (notNullableAttr == null) {
@@ -199,10 +211,17 @@
      if (! "success".equals(attrKv.getKey())){
         throw new VciBaseException(attrKv.getValue() + "不能为空");
      }
      //将DTO转换为DO
      CodeBasicSec codeBasicSecDO = new CodeBasicSec();
      BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
      //text转换
      codeBasicSecDO.setSecTypeText(CodeSecTypeEnum.getTextByValue(codeBasicSecDTO.getSecType()));
      codeBasicSecDO.setCodeLevelTypeText(CodeLevelTypeEnum.getTextByValue(codeBasicSecDTO.getCodeLevelType()));
      codeBasicSecDO.setCodeSecLengthTypeText(CodeSecLengthTypeEnum.getTextByValue(codeBasicSecDTO.getCodeSecLengthType()));
      codeBasicSecDO.setValueCutTypeText(CodeCutTypeEnum.getValueByText(codeBasicSecDTO.getValueCutType()));
      codeBasicSecDO.setCodeGetValueTypeText(CodeGetValueTypeEnum.getValueByText(codeBasicSecDTO.getCodeGetValueType()));
      //填充一些默认值
      DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeBasicSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
      //排序号,默认等于当前已有的数量加1
      Long total = codeBasicSecMapper.selectCount(Wrappers.<CodeBasicSec>query()
         .lambda()
@@ -232,7 +251,7 @@
      boolean resBoolean = codeBasicSecMapper.insert(codeBasicSecDO) > 0;
      //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
      if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
         DictBizM dictBiz = new DictBizM();
         DictBiz dictBiz = new DictBiz();
         dictBiz.setCode(MdmBtmTypeConstant.CODE_BASIC_SEC);
         dictBiz.setDictKey("codefileseparator");
         dictBiz.setDictValue(codeBasicSecDO.getCodeFillSeparator());
@@ -260,6 +279,7 @@
      }
      //将DTO转换为DO
      CodeBasicSec codeBasicSecDO = selectByOid(codeBasicSecDTO.getOid());
      DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO);
      boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
      boolean resBoolean;
      if (!status){
@@ -287,7 +307,8 @@
         resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
         //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
         if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
            DictBizM dictBiz = new DictBizM();
            //这儿目前需要改 2023/4/24
            DictBiz dictBiz = new DictBiz();
            dictBiz.setCode(MdmBtmTypeConstant.CODE_BASIC_SEC);
            dictBiz.setDictKey("codefileseparator");
            dictBiz.setDictValue(codeBasicSecDO.getCodeFillSeparator());
@@ -350,9 +371,46 @@
    * @throws VciBaseException 参数为空,被引用时抛出异常
    */
   @Override
   public boolean deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
   public R deleteCodeBasicSec(CodeBasicSecDTO codeBasicSecDTO) throws VciBaseException {
      VciBaseUtil.alertNotNull(codeBasicSecDTO, "码段基础信息数据对象", codeBasicSecDTO.getOid(), "码段基础信息的主键");
      return this.codeBasicSecMapper.deleteById(codeBasicSecDTO.getOid())>0;
      return this.deleteCodeBasicSecByPrimaryKey(codeBasicSecDTO.getOid());
   }
   /**
    * 主键删除码段基础信息
    *
    * @param oid 码段基础信息主键
    * @return 删除结果反馈::success:成功,fail:失败
    * @throws VciBaseException 参数为空,被引用时抛出异常
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public R deleteCodeBasicSecByPrimaryKey(String oid) throws VciBaseException {
      CodeBasicSec codeBasicSecDO = selectByOid(oid);
      boolean isLinked = checkIsLinked(codeBasicSecDO.getPkCodeRule(), oid);
      if (isLinked) {
         return R.fail("编码规则已被引用,不允许编辑或删除");
      }
      //执行删除操作
      boolean eftDeleteBasic = codeBasicSecMapper.deleteById(oid) > 0;
      if (CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(codeBasicSecDO.getSecType())){
         List<CodeFixedValue> fixedValueDOS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query()
            .lambda().eq(CodeFixedValue::getCodeFixedSecOid,codeBasicSecDO.getOid())
         );
         if(!CollectionUtils.isEmpty(fixedValueDOS)){
            fixedValueMapper.deleteBatchIds(fixedValueDOS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()));
         }
      }
      if (CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue().equals(codeBasicSecDO.getSecType())){
         List<CodeClassifyValue> classifyValueDOS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query()
            .lambda().eq(CodeClassifyValue::getCodeClassifySecOid,codeBasicSecDO.getOid())
         );
         if(!CollectionUtils.isEmpty(classifyValueDOS)) {
            codeClassifyValueMapper.deleteBatchIds(classifyValueDOS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()));
         }
      }
      return eftDeleteBasic ? R.success(DELETE_SUCCESS) : R.fail(DELETE_FAIL);
   }
   /**
@@ -405,7 +463,7 @@
      if(Func.isEmpty(codeBasicSecVO.getPkCodeRule()) || Func.isBlank(codeBasicSecVO.getPkCodeRule())){
         return null;
      }
      codeBasicSecVO.setSectype(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue());
      codeBasicSecVO.setSecType(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue());
      return refDataGridCodeBasicSec(page,codeBasicSecVO);
   }
@@ -484,9 +542,7 @@
   @Transactional(rollbackFor = Exception.class)
   public boolean upOrderNum(String oid) {
      CodeBasicSec secDO = selectByOid(oid);
      boolean resUpBoolean = false;
      boolean   resDownBoolean = false;
      if(secDO.getOrderNum() >1){
      if(secDO.getOrderNum() > 1){
         //等于1的时候不能上移了
         //找比自己小的
         List<CodeBasicSec> lastSecDOs = codeBasicSecMapper.selectList(Wrappers.<CodeBasicSec>query()
@@ -495,18 +551,17 @@
         );
         if(!CollectionUtils.isEmpty(lastSecDOs)){
            CodeBasicSec lastSec = lastSecDOs.get(0);
            resDownBoolean = codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
            codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
               .lambda().set(CodeBasicSec::getOrderNum, lastSec.getOrderNum() + 1)
               .eq(CodeBasicSec::getOid, lastSec.getOid())
            ) > 0;
            );
         }
         secDO.setOrderNum(secDO.getOrderNum()-1);
         resUpBoolean = codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
         codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
            .lambda().set(CodeBasicSec::getOrderNum, secDO.getOrderNum() - 1)
            .eq(CodeBasicSec::getOid, secDO.getOid())
         ) > 0;
         );
      }
      return resDownBoolean && resUpBoolean;
      return true;
   }
   /**
@@ -518,29 +573,28 @@
   @Transactional(rollbackFor = Exception.class)
   public boolean downOrderNum(String oid) {
      CodeBasicSec secDO = selectByOid(oid);
      boolean resUpBoolean = false;
      boolean   resDownBoolean = false;
      Long total = codeBasicSecMapper.selectCount(Wrappers.<CodeBasicSec>query()
         .lambda().eq(CodeBasicSec::getPkCodeRule,secDO.getPkCodeRule())
      );
      if(secDO.getOrderNum()  < total){
      if(secDO.getOrderNum() < total){
         //小于总数的时候才下移
         List<CodeBasicSec> lastSecDOs = codeBasicSecMapper.selectList(Wrappers.<CodeBasicSec>query()
            .lambda().eq(CodeBasicSec::getOrderNum,String.valueOf(secDO.getOrderNum()+1))
            .lambda().eq(CodeBasicSec::getOrderNum,secDO.getOrderNum()+1)
            .eq(CodeBasicSec::getPkCodeRule,secDO.getPkCodeRule())
         );
         if(!CollectionUtils.isEmpty(lastSecDOs)){
            CodeBasicSec lastSec = lastSecDOs.get(0);
            resUpBoolean = codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
            codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
               .lambda().set(CodeBasicSec::getOrderNum, lastSec.getOrderNum() - 1)
               .eq(CodeBasicSec::getOid, lastSec.getOid())
            ) > 0;
            );
         }
         resDownBoolean = codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
         codeBasicSecMapper.update(null, Wrappers.<CodeBasicSec>update()
            .lambda().set(CodeBasicSec::getOrderNum, secDO.getOrderNum() + 1)
            .eq(CodeBasicSec::getOid, secDO.getOid())
         ) > 0;
         );
      }
      return resDownBoolean && resUpBoolean;
      return true;
   }
   /**
@@ -621,4 +675,77 @@
      return codeBasicSecDO;
   }
   /**
    * 使用规则的主键获取对应的码段内容
    *
    * @param ruleOid 规则的内容
    * @return 码段的内容
    */
   @Override
   public List<CodeBasicSecVO> listCodeBasicSecByRuleOid(String ruleOid) {
      if(StringUtils.isBlank(ruleOid)){
         return new ArrayList<>();
      }
      Map<String,String> conditionMap = new HashMap<>();
      conditionMap.put("pkCodeRule",ruleOid);
//      PageHelper pageHelper = new PageHelper(-1);
//      pageHelper.addDefaultAsc("ordernum");
      QueryWrapper<CodeBasicSec> wrapper = new QueryWrapper<>();
      wrapper.orderByAsc("ordernum");
      List<CodeBasicSec> secDOList = codeBasicSecMapper.selectList(wrapper);//.selectByCondition(conditionMap, pageHelper);
      return codeBasicSecDO2VOs(secDOList,true);
   }
   /**
    * 批量数据对象转换为显示对象
    *
    * @param codeBasicSecDOs 数据对象列表
    * @param hasFixedValue 是否有固定值
    * @return 显示对象
    * @throws VciBaseException 参数为空或者不存在的时候会抛出异常
    */
   @Override
   public List<CodeBasicSecVO> codeBasicSecDO2VOs(Collection<CodeBasicSec> codeBasicSecDOs, boolean hasFixedValue) throws VciBaseException {
      List<CodeBasicSecVO> voList = new ArrayList<CodeBasicSecVO>();
      if (!CollectionUtils.isEmpty(codeBasicSecDOs)) {
         for (CodeBasicSec s : codeBasicSecDOs) {
            CodeBasicSecVO vo = codeBasicSecDO2VO(s);
            if (vo != null) {
               voList.add(vo);
            }
         }
      }
      if(hasFixedValue && !CollectionUtils.isEmpty(voList)){
         List<CodeBasicSecVO> fixedSecVOList = voList.stream().filter(s -> CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equalsIgnoreCase(s.getSecType())).collect(Collectors.toList());
         if(!CollectionUtils.isEmpty(fixedSecVOList)){
            //查询固定码的码值
            Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(fixedSecVOList.stream().map(CodeBasicSecVO::getOid).collect(Collectors.toList()));
            voList.stream().forEach(vo->{
               vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
            });
         }
      }
      return voList;
   }
   /**
    * 数据对象转换为显示对象
    *
    * @param codeBasicSecDO 数据对象
    * @return 显示对象
    * @throws VciBaseException 拷贝属性出错的时候会抛出异常
    */
   @Override
   public CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSec codeBasicSecDO) throws VciBaseException {
      CodeBasicSecVO vo = new CodeBasicSecVO();
      if (codeBasicSecDO != null) {
         BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, vo);
         //如果有lcstatus的类的话
         if (true) {
            //vo.setLcStatusText({lcStatusFullClassName}.getTextByValue(vo.getLcStatus()));
         }
      }
      return vo;
   }
}