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; /** *

* 前端控制器 *

* @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().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 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 maintainFieldList = maintainFieldService.selectList(new EntityWrapper().eq("table_name", tableName).orderBy("order_no")); int preOrderNo = -1; HashMap> resultMap = new HashMap<>(); if (maintainFieldList.size() == 0) { //无记录则为有新的字段版本, 仅为默认版本 List maintainList = maintainService.selectList(new EntityWrapper().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 maintainList = maintainService.selectList(new EntityWrapper().ge("order_no", preOrderNo).le("order_no", orderNo)); resultMap.put(maintainField.getId(), maintainList); preOrderNo = orderNo; } Set keySet = resultMap.keySet(); JSONArray array = new JSONArray(); for (String s : keySet) { List maintainList = resultMap.get(s); Maintain max = maintainList.stream().max(new Comparator() { @Override public int compare(Maintain o1, Maintain o2) { return o1.getOrderNo() - o2.getOrderNo(); } }).get(); //By 字段版本 获取最小的数据版本 Maintain min = maintainList.stream().min(new Comparator() { @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); } }