kimi
2020-05-27 c007f0ca1785db093d48f4846cda82fe8e955765
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
145
146
147
148
149
150
151
152
153
package com.highdatas.mdm.controller;
 
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.highdatas.mdm.entity.Maintain;
import com.highdatas.mdm.entity.MaintainField;
import com.highdatas.mdm.entity.MenuMapping;
import com.highdatas.mdm.mapper.TableInfoMapper;
import com.highdatas.mdm.pojo.CodeMsg;
import com.highdatas.mdm.pojo.Result;
import com.highdatas.mdm.service.IMaintainFieldService;
import com.highdatas.mdm.service.IMaintainService;
import com.highdatas.mdm.service.IMenuMappingService;
import com.highdatas.mdm.service.ISysFieldService;
import com.highdatas.mdm.util.Constant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.text.MessageFormat;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
 
/**
 * <p>
 *  前端控制器
 * </p>
 * @description 字段版本接口
 * @author kimi
 * @since 2020-03-06
 */
@RestController
@RequestMapping("/maintainField")
public class MaintainFieldController {
    @Autowired
    IMaintainService maintainService;
    @Autowired
    IMaintainFieldService maintainFieldService;
    @Autowired
    ISysFieldService fieldService;
    @Autowired
    TableInfoMapper tableInfoMapper;
    @Autowired
    IMenuMappingService menuMappingService;
 
    /**
     *
     * @description:  通过主题获取字段版本列表
     * @param menuId 主题id
     * @return: 字段版本列表
     *
     */
    @RequestMapping(value = "/getMaintainListByMenu/{menuId}", method = RequestMethod.GET)
    public Result getMaintainListByTable(@PathVariable String menuId)  {
        //获取menumapping 信息
        MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("menu_id", menuId).orderBy("create_time"));
        if (menuMapping == null){
            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
        }
        //获取表名
        String tableName = menuMapping.getTableName();
 
        //获取字段版本list
        JSONArray array = maintainFieldService.getMaintainListByTable(tableName);
        return Result.success(array);
    }
 
    /**
     *
     * @description:  获取字段版本id某个版本下的记录
     * @param id 字段版本id
     * @return: 某个版本下的记录
     *
     */
    @RequestMapping(value = "/getMaintainListByMaintainField/{id}", method = RequestMethod.GET)
    public Result getMaintainListByMaintainField(@PathVariable String id, @RequestParam String tableName)  {
        //获取字段版本id某个版本下的记录
        List<Maintain> maintainList = maintainFieldService.getMaintainListByMaintainField(id, tableName);
        return Result.success(maintainList);
    }
 
    /**
     *
     * @description:  通过表名获取某个版本下的记录
     * @param tableName 表名
     * @return: 某个版本下的记录
     *
     */
    @RequestMapping(value = "/getMaintainListByTable/{tableName}", method = RequestMethod.GET)
    public Result deleteModel(@PathVariable String tableName)  {
        //通过表名获取字段版本list
        List<MaintainField> maintainFieldList = maintainFieldService.selectList(new EntityWrapper<MaintainField>().eq("table_name", tableName).orderBy("order_no"));
        int preOrderNo = -1;
        HashMap<String, List<Maintain>> resultMap = new HashMap<>();
        if (maintainFieldList.size() == 0) {
            //无记录则为有新的字段版本, 仅为默认版本
            List<Maintain> maintainList = maintainService.selectList(new EntityWrapper<Maintain>().orderBy("order_no"));
            resultMap.put(Constant.Default, maintainList);
            return Result.success(resultMap);
        }
        for (MaintainField maintainField : maintainFieldList) {
            String maintainId = maintainField.getMaintainId();
            //筛选掉数据错误的数据
            if (StringUtils.isEmpty(maintainId)) {
                continue;
            }
            Maintain maintain = maintainService.selectById(maintainId);
            if (maintain == null) {
                continue;
            }
            Integer orderNo = maintain.getOrderNo();
            //获取某个字段版本对应的数据版本
            List<Maintain> maintainList = maintainService.selectList(new EntityWrapper<Maintain>().ge("order_no", preOrderNo).le("order_no", orderNo));
            resultMap.put(maintainField.getId(), maintainList);
            preOrderNo = orderNo;
        }
        Set<String> keySet = resultMap.keySet();
        JSONArray array = new JSONArray();
        for (String s : keySet) {
            List<Maintain> maintainList = resultMap.get(s);
            Maintain max = maintainList.stream().max(new Comparator<Maintain>() {
                @Override
                public int compare(Maintain o1, Maintain o2) {
                    return o1.getOrderNo() - o2.getOrderNo();
                }
            }).get();
            //By 字段版本 获取最小的数据版本
            Maintain min = maintainList.stream().min(new Comparator<Maintain>() {
                @Override
                public int compare(Maintain o1, Maintain o2) {
                    return o1.getOrderNo() - o2.getOrderNo();
                }
            }).get();
            //By 字段版本 获取最小的数据版本
            JSONObject object = new JSONObject();
            object.fluentPut("maintainFieldId", s);
            //则version为此数据版本下支持的数据版本范围
            object.fluentPut("version", MessageFormat.format(Constant.extent, min.getVersion(), max.getVersion()));
 
            array.add(object);
        }
        return Result.success(array);
    }
 
 
 
 
 
}