ludc
2023-07-28 6ddaebea3b9afa4a34500068a21203ea05ba5ad7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.vci.ubcs.omd.service.impl;
 
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.ILinkTypeAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * Description: 链接类型包含属性的服务
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Service
public class LinkTypeAttributeServiceImpl extends ServiceImpl<LinkTypeAttributeMapper, LinkTypeAttribute> implements ILinkTypeAttributeService {
 
    /**
     * 属性服务
     */
    @Autowired
    private IAttributeService attributeService;
    /**
     * 批量删除
     *
     * @param oids 主键集合
     */
    @Override
    public void batchDeleteByOids(List<String> oids) {
        baseMapper.delete(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getOid,oids));
    }
 
    @Override
    public void checkAttribute(LinkTypeAttributeVO attributeVO) {
        VciBaseUtil.alertNotNull(attributeVO.getId(),"属性的英文名称",attributeVO.getName(),"属性的中文名称",
            attributeVO.getAttrDataType(),"属性的数据类型");
        attributeService.checkAttributePass(attributeVO.getId(),attributeVO.getAttrDataType(),attributeVO.getAttributeLength(),attributeVO.getDefaultValue());
    }
 
    /**
     * 主键查询
     *
     * @param oid 主键
     * @return 查询结果
     */
    @Override
    public LinkTypeAttribute selectByPrimaryKey(String oid) {
        VciBaseUtil.alertNotNull(oid);
        return baseMapper.selectOne(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getOid,oid));
    }
 
    /**
     * 根据链接类型获取默认字段
     *
     * @param linkTypeVO 链接类型
     * @return 执行结果
     */
    @Override
    public List<LinkTypeAttributeVO> getDefaultAttributes(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        List<LinkTypeAttributeVO> list = new ArrayList<>();
        // 业务类型的基本字段
        BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.forEach((id, name) -> {
            LinkTypeAttributeVO vo = new LinkTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setPkLinkType(linkTypeVO.getOid());
            if (StringUtils.equals(id,"oid")){
                vo.setNullableFlag(false);
            }else {
                vo.setNullableFlag(true);
            }
            if (Arrays.asList("createtime","lastmodifytime","owner").contains(id)){
                vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
                vo.setAttributeLength(6);
            }else {
                vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
                vo.setAttributeLength(150);
            }
            list.add(vo);
        });
        return list;
    }
 
    /**
     * 根据链接类型获取所有的字段
     *
     * @param linkTypeVO 链接类型
     * @return 执行结果
     */
    @Override
    public List<LinkTypeAttributeVO> getAllAttributes(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        List<LinkTypeAttributeVO> attributes = getAttributesNoDefault(linkTypeVO);
        attributes.addAll(getDefaultAttributes(linkTypeVO));
        return attributes;
    }
 
    /**
     * 获取非默认字段的链接类型属性
     *
     * @param linkTypeVO 链接类型
     * @return
     */
    @Override
    public List<LinkTypeAttributeVO> getAttributesNoDefault(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        return LinkTypeAttributeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getPkLinkType, linkTypeVO.getOid())));
    }
 
    /**
     * 批量获取非默认字段的链接类型属性
     *
     * @param linkTypeDOList 链接类型
     * @return 执行结果
     */
    @Override
    public Map<String, List<LinkTypeAttributeVO>> batchGetAttributesNoDefault(List<LinkType> linkTypeDOList) {
        VciBaseUtil.alertNotNull(linkTypeDOList,"链接类型集合");
        Set<String> oidSet = linkTypeDOList.stream().map(LinkType::getOid).collect(Collectors.toSet());
        if (CollectionUtils.isEmpty(oidSet)){
            return new HashMap<>();
        }
        List<LinkTypeAttribute> attributes = baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType, oidSet));
        return LinkTypeAttributeWrapper.build().listEntityVO(Optional.ofNullable(attributes).orElseGet(ArrayList::new)).stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
    }
}