dangsn
2023-08-02 54f35ae7866dac5c497372b68d03309c7eae9424
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
@@ -1,24 +1,28 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.mapper.BtmTypeAttributeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.*;
/**
 * Description: 业务类型关联属性的服务实现类
@@ -49,36 +53,74 @@
    * @return 受影响的行数
    */
   @Override
   public int checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
   public List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
      List<String> attributeIdList = new ArrayList<>();
      List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
      if (!CollectionUtils.isEmpty(attributesDTOList)) {
         attributesDTOList.stream().forEachOrdered(s -> {
            attributeService.checkAttribute(s);
            btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
            attributeIdList.add(s.getId().toLowerCase().trim());
            attributeIdList.add(s.getId().trim());
         });
         //检查属性是否都存在
         boolean exists = attributeService.checkAttributeExists(attributeIdList);
         if (!exists){
            return -1;
            return null;
         }
         return batchInsert(btmTypeAttributeDOList);
         saveBatch(btmTypeAttributeDOList);
         return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
//                btmTypeAttributeDOMapper.insert(s);
//            });
      }
      return 0;
      return null;
   }
   /**
    * 批量插入
    * 检查属性存在并删除
    *
    * @param records 数据对象集合
    * @param records 主键集合
    * @return 受影响的行数
    */
   @Override
   public int batchInsert(List<BtmTypeAttribute> records) {
      return baseMapper.insertBatchSomeColumn(records);
   public int checkAndRemove(List<String> records) {
      if (CollectionUtils.isEmpty(records)){
         return 0;
      }
      return baseMapper.batchDelete(records);
   }
   /**
    * 检查属性存在并添加
    *
    * @param btmTypeOid        业务类型主键
    * @param attributesDTOList 页面传输对象集合
    * @param creator           创建人
    * @param now               ts时间戳
    * @return 受影响的行数
    */
   @Override
   public List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
      List<String> attributeIdList = new ArrayList<>();
      List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
      if (!CollectionUtils.isEmpty(attributesDTOList)) {
         attributesDTOList.stream().forEachOrdered(s -> {
            attributeService.checkAttribute(s);
            btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
            attributeIdList.add(s.getId().trim());
         });
         //检查属性是否都存在
         boolean exists = attributeService.checkAttributeExists(attributeIdList);
         if (!exists){
            return null;
         }
         baseMapper.batchUpdate(btmTypeAttributeDOList);
         return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
//                btmTypeAttributeDOMapper.insert(s);
//            });
      }
      return null;
   }
   /**
@@ -95,4 +137,137 @@
         ).orElseGet(ArrayList::new)
      );
   }
   /**
    * 根据业务类型主键获取关联的所有属性对象
    *
    * @param oidCollection 业务类型主键集合
    * @return 所有的属性对象,包括系统内置属性,key是业务类型主键,value是包含的属性
    * @throws VciBaseException 业务类型不存在,参数为空或者查询出错时会抛出异常
    */
   @Override
   public List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection) throws VciBaseException {
      VciBaseUtil.alertNotNull(oidCollection,"业务类型主键");
      List<BtmTypeAttribute> doList = baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection));
      return BtmTypeAttributeWrapper.build().listEntityVO(doList);
   }
   /**
    * 获取业务类型中的指定属性
    *
    * @param id                    业务类型的主键
    * @param attributeIdCollection 属性的id,若为空则获取全部
    * @return 属性的数据对象
    */
   @Override
   public List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection) {
      return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection);
   }
   /**
    * 通过业务类型的英文名称获取关联的属性
    *
    * @param idList 业务类型的英文名称集合
    * @return 包含的属性
    */
   @Override
   public List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList) {
      return baseMapper.selectByBtmTypeIds(idList);
   }
   /**
    * 获取默认字段
    * 默认字段均不可为空
    * @param btmType 业务类型
    * @return 执行结果
    */
   @Override
   public List<BtmTypeAttributeVO> getDefaultAttribute(BtmTypeVO btmType) {
      List<BtmTypeAttributeVO> list = new ArrayList<>();
      // 业务类型的基本字段
      BtmTypeFieldConstant.BASIC_FIELD_MAP.forEach((id,name) -> {
         id = id.toLowerCase(Locale.ROOT);
         BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
         vo.setId(id);
         vo.setName(name);
         vo.setPkBtmType(btmType.getOid());
         if ("oid".equals(id)){
            vo.setNullableFlag(false);
         }
         if (Arrays.asList("createtime","lastmodifytime","ts").contains(id)){
            vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
            vo.setAttributeLength(6);
         }else {
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            vo.setAttributeLength(150);
         }
         list.add(vo);
      });
      // 版本规则字段
      if (StringUtils.isNotBlank(btmType.getRevisionRuleId())){
         BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.forEach((id,name) -> {
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setPkBtmType(btmType.getOid());
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            // 版本规则字段不能为空
//            vo.setNullableFlag(false);
            vo.setAttributeLength(150);
            if (Arrays.asList("lastr","firstr","lastv","firstv","revisionseq","versionseq").contains(id)){
               vo.setAttributeLength(5);
               vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
            }
            if (Arrays.asList("checkintime","checkouttime").contains(id)){
               vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
               vo.setAttributeLength(6);
            }
            list.add(vo);
         });
      }
      // 生命周期字段
      if (StringUtils.isNotBlank(btmType.getLifeCycleId())){
         BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.forEach((id,name) -> {
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setPkBtmType(btmType.getOid());
//            vo.setNullableFlag(false);
            vo.setAttributeLength(50);
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            list.add(vo);
         });
      }
      // 密级字段
      if (btmType.isSecretFlag()){
         BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.forEach((id,name) -> {
            BtmTypeAttributeVO vo = new BtmTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setPkBtmType(btmType.getOid());
//            vo.setNullableFlag(false);
            vo.setAttributeLength(5);
            vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
            list.add(vo);
         });
      }
      return list;
   }
   /**
    * 获取所有字段
    *
    * @param btmType 业务类型
    * @return 执行结果
    */
   @Override
   public List<BtmTypeAttributeVO> getAllAttribute(BtmTypeVO btmType) {
      List<BtmTypeAttributeVO> list = getAttributeByBtmTypeOid(btmType.getOid());
      list.addAll(getDefaultAttribute(btmType));
      return list;
   }
}