ludc
2023-11-30 1b8098b7f79b66a80e5ca49d8765606cb5fa0408
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
package com.vci.ubcs.code.service.impl;
 
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.base.Joiner;
import com.vci.ubcs.code.entity.CodeRuleCharacter;
import com.vci.ubcs.code.mapper.CodeRuleCharacterMapper;
import com.vci.ubcs.code.service.ICodeRuleCharacterService;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleCharacterVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.*;
import java.util.stream.Collectors;
 
/***
 * 编码规则字符集服务
 * @author xj
 * @date 2023-11-30
 */
@Service
public class CodeRuleCharacterServiceImpl extends ServiceImpl<CodeRuleCharacterMapper, CodeRuleCharacter> implements ICodeRuleCharacterService {
 
    @Autowired
    private CodeRuleCharacterMapper codeRuleCharacterMapper;
    /***
     * 使用编码规则oid获取数据
     * @param codeRuleId
     * @param chartType
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<Map<String, String>> getDataByRuleId(String codeRuleId,String chartType) throws VciBaseException {
        List<Map<String,String>> charValueList=new ArrayList<>();
        CodeRuleCharacter codeRuleCharacter=codeRuleCharacterMapper.selectOne(Wrappers.<CodeRuleCharacter>query().lambda().eq(CodeRuleCharacter::getCodeRuleId,codeRuleId).eq(CodeRuleCharacter::getChartType,chartType));
        List<Character> characterList=codeRuleCharacter.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
        for (int i = 0; i < characterList.size(); i += 15) {
            final int startIndex = i;
            final int endIndex = Math.min(i + 15, characterList.size());
            List<Character> subList = characterList.subList(startIndex, endIndex);
            Map<String, String> chartMap=new HashMap<>();
            // 调用插入数据库的方法
            for (int j=1;j<subList.size()+1;j++){
                String characterValue=subList.get(j-1)==null?"":subList.get(j-1).toString();
                chartMap.put(String.valueOf(j),String.valueOf(characterValue));
            }
            charValueList.add(chartMap);
        }
        return charValueList;
    }
    /***
     * 字符集数据保存
     * @param codeRuleCharacterVO
     * @return
     * @throws VciBaseException
     */
    @Override
    public R saveOrUpdate(CodeRuleCharacterVO codeRuleCharacterVO) throws VciBaseException {
        VciBaseUtil.alertNotNull(codeRuleCharacterVO.getCodeRuleId(),"编码规则id",codeRuleCharacterVO.getChartType(),"字符集类型");
        CodeRuleCharacter codeRuleCharacter=codeRuleCharacterMapper.selectOne(Wrappers.<CodeRuleCharacter>query().lambda().eq(CodeRuleCharacter::getCodeRuleId,codeRuleCharacterVO.getCodeRuleId()).eq(CodeRuleCharacter::getChartType,codeRuleCharacterVO.getChartType()));
        if(codeRuleCharacter!=null&& StringUtils.isNotBlank(codeRuleCharacter.getOid())) {
            List<Character> oldCharacterList =  StringUtils.isBlank(codeRuleCharacter.getChartValue())?new ArrayList<>():codeRuleCharacter.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
            List<Character> newCharacterList = StringUtils.isBlank(codeRuleCharacterVO.getChartValue())?new ArrayList<>():codeRuleCharacterVO.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
            List<Character> intersectList = intersect(oldCharacterList, newCharacterList);
            if (intersectList.size() > 0) {
                String ss = Joiner.on(",").join(intersectList);
                throw new VciBaseException("系统中存在相应的字符:【" + ss + "】");
            }
            List<Character> allCharacterList = union(oldCharacterList, newCharacterList);
            String str = allCharacterList.stream().map(integer -> Func.isNotEmpty(integer)?integer.toString():"").collect(Collectors.joining());
            codeRuleCharacter.setChartValue(str);
            codeRuleCharacterMapper.updateById(codeRuleCharacter);
        }else{
            codeRuleCharacter=new CodeRuleCharacter();
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeRuleCharacter,"character");
            codeRuleCharacter.setCodeRuleId(codeRuleCharacterVO.getCodeRuleId());
            codeRuleCharacter.setChartType(codeRuleCharacterVO.getChartType());
            codeRuleCharacter.setChartValue(codeRuleCharacterVO.getChartValue());
            codeRuleCharacterMapper.insert(codeRuleCharacter);
        }
        return R.status(true);
    }
    /**
     * 交集
     * @param list1
     * @param list2
     * @return
     */
    private static List<Character> intersect(List<Character> list1, List<Character> list2) {
        List<Character> intersect = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
        return intersect;
    }
 
    /**
     * 并集(去重)
     * @param list1
     * @param list2
     * @return
     */
    private static List<Character> union(List<Character> list1, List<Character> list2) {
        list1.addAll(list2);
        return list1.stream().distinct().collect(Collectors.toList());
    }
 
}