| | |
| | | package com.highdatas.mdm.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.highdatas.mdm.entity.Flows; |
| | | import com.highdatas.mdm.entity.Maintain; |
| | | import com.highdatas.mdm.entity.MaintainField; |
| | | import com.highdatas.mdm.entity.SysField; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.highdatas.mdm.entity.*; |
| | | import com.highdatas.mdm.mapper.MaintainFieldMapper; |
| | | import com.highdatas.mdm.mapper.SysFieldMapper; |
| | | import com.highdatas.mdm.mapper.TableInfoMapper; |
| | | import com.highdatas.mdm.pojo.ActivitiStatus; |
| | | import com.highdatas.mdm.pojo.Operate; |
| | | import com.highdatas.mdm.pojo.Page; |
| | | import com.highdatas.mdm.pojo.Result; |
| | | import com.highdatas.mdm.service.IFlowsService; |
| | | import com.highdatas.mdm.service.IMaintainFieldService; |
| | | import com.highdatas.mdm.service.IMaintainService; |
| | | import com.highdatas.mdm.service.ISysFieldService; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.highdatas.mdm.util.Constant; |
| | | import com.highdatas.mdm.util.DbUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.NoUniqueBeanDefinitionException; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | MaintainFieldMapper maintainFieldMapper; |
| | | @Autowired |
| | | IFlowsService flowsService; |
| | | @Autowired |
| | | TableInfoMapper tableInfoMapper; |
| | | |
| | | |
| | | @Override |
| | | public List<SysField> getFieldByMaintain(String maintainId) { |
| | | public MaintainField getMaintainFieldByMaintainId(String maintainId) { |
| | | MaintainField maintainField; |
| | | List<SysField> fieldList = null; |
| | | |
| | | if (StringUtils.isEmpty(maintainId)) { |
| | | return null; |
| | | return null; |
| | | } |
| | | Maintain maintain = maintainService.selectById(maintainId); |
| | | if (maintain == null) { |
| | |
| | | maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("maintain_id", maintainId).orderBy("order_no desc")); |
| | | if (maintainField == null) { |
| | | //对应版本找不到 往前找 |
| | | String maintainFieldId = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo()); |
| | | if (StringUtils.isEmpty(maintainFieldId)) { |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no")); |
| | | return fieldList; |
| | | Map<String, String> maintainFieldMap = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo()); |
| | | if (maintainFieldMap == null) { |
| | | return null; |
| | | } |
| | | String maintainFieldId = maintainFieldMap.get(Constant.ID); |
| | | maintainField = maintainFieldService.selectById(maintainFieldId); |
| | | if (maintainField == null){ |
| | | //无对应版本 |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no")); |
| | | return fieldList; |
| | | } |
| | | } |
| | | return maintainField; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过版本获取字段列表 |
| | | * @param maintainId 版本id |
| | | * @return: 字段列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public List<SysField> getFieldByMaintain(String maintainId) { |
| | | List<SysField> fieldList; |
| | | Maintain maintain = maintainService.selectById(maintainId); |
| | | if (maintain == null) { |
| | | return null; |
| | | } |
| | | |
| | | MaintainField maintainField = getMaintainFieldByMaintain(maintainId); |
| | | if (maintainField == null || Constant.Default.equalsIgnoreCase(maintainField.getId())) { |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no")); |
| | | return fieldList; |
| | | } |
| | | String maintainFieldId = maintainField.getId(); |
| | | String tableName = maintainField.getTableName(); |
| | | //TODO 判断版本 |
| | | ActivitiStatus status = flowsService.getStatusByBusinessId(maintainFieldId); |
| | | if (status != null && status.equals(ActivitiStatus.open)) { |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId).eq("table_name", tableName).orderBy("order_no")); |
| | |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no")); |
| | | return fieldList; |
| | | }else { |
| | | Integer preNo = maintainFieldOrderNo--; |
| | | Integer preNo = maintainFieldOrderNo - 1; |
| | | maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("table_name", maintain.getTableName()).eq("order_no", preNo)); |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId).eq("table_name", tableName).orderBy("order_no")); |
| | | fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainField.getId()).eq("table_name", tableName).orderBy("order_no")); |
| | | return fieldList; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过版本获取字段版本 |
| | | * @param maintainId 版本id |
| | | * @return: 字段版本 |
| | | * |
| | | */ |
| | | @Override |
| | | public MaintainField getMaintainFieldByMaintain(String maintainId) { |
| | | MaintainField maintainField = null; |
| | | List<SysField> fieldList = null; |
| | | |
| | | if (StringUtils.isEmpty(maintainId)) { |
| | | return null; |
| | | } |
| | | Maintain maintain = maintainService.selectById(maintainId); |
| | | if (maintain == null) { |
| | | return null; |
| | | } |
| | | List<MaintainField> subList = maintainFieldService.selectList(new EntityWrapper<MaintainField>().eq("maintain_id", maintainId).orderBy("order_no desc, create_time desc")); |
| | | subList.sort(new Comparator<MaintainField>() { |
| | | @Override |
| | | public int compare(MaintainField o1, MaintainField o2) { |
| | | |
| | | return o2.getOrderNo().compareTo(o1.getOrderNo()); |
| | | } |
| | | }); |
| | | if (!subList.isEmpty()) { |
| | | maintainField = subList.get(0); |
| | | } |
| | | |
| | | if (maintainField == null) { |
| | | //对应版本找不到 往前找 |
| | | Map<String, String> maintainFieldMap = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo()); |
| | | |
| | | if (maintainFieldMap == null) { |
| | | return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName()); |
| | | } |
| | | String maintainFieldId = maintainFieldMap.get(Constant.ID); |
| | | maintainField = maintainFieldService.selectById(maintainFieldId); |
| | | if (maintainField == null){ |
| | | return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName()); |
| | | } |
| | | } |
| | | |
| | | String maintainFieldId = maintainField.getId(); |
| | | String tableName = maintainField.getTableName(); |
| | | |
| | | ActivitiStatus status = flowsService.getStatusByBusinessId(maintainFieldId); |
| | | if (status != null && status.equals(ActivitiStatus.open)) { |
| | | return maintainFieldService.selectById(maintainField); |
| | | } |
| | | |
| | | // 当前版本正在审批 找前一版本 |
| | | Integer maintainFieldOrderNo = maintainField.getOrderNo(); |
| | | if (maintainFieldOrderNo < 1) { |
| | | return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName()); |
| | | }else { |
| | | Integer preNo = maintainFieldOrderNo - 1; |
| | | maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("table_name", maintain.getTableName()).eq("order_no", preNo)); |
| | | return maintainField; |
| | | } |
| | | |
| | | |
| | | } |
| | | /** |
| | | * |
| | | * @description: 通过表名获取当前字段列表 |
| | | * @param tableName 表名 |
| | | * @return: 当前字段列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public List<SysField> getFieldByTable(String tableName) { |
| | | Maintain nowVersion = maintainService.getNowVersion(tableName); |
| | | if (nowVersion == null) { |
| | | List<SysField> fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", tableName).isNull("maintain_field_id").orderBy("order_no")); |
| | | if (fieldList.size() ==0) { |
| | | List<TableSchemaResult> tableField = tableInfoMapper.getTableField(tableName); |
| | | for (TableSchemaResult tableSchemaResult : tableField) { |
| | | String fieldName = tableSchemaResult.getFieldName(); |
| | | SysField field = new SysField().setField(fieldName); |
| | | fieldList.add(field); |
| | | } |
| | | } |
| | | return fieldList; |
| | | } |
| | | return getFieldByMaintain(nowVersion.getId()); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过版本获取数据库字段列表 |
| | | * @param tableName 表名 |
| | | * @return: 字段列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public Result getTotalFields(String tableName) { |
| | | JSONObject result = new JSONObject(); |
| | |
| | | |
| | | return Result.success(result); |
| | | } |
| | | /** |
| | | * |
| | | * @description: list 通过分页对象筛选 |
| | | * @param list 数据列表 |
| | | * @param pageNo 页数 |
| | | * @param pageSize 每页数量 |
| | | * @return: 分页筛选后的数据列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public Result getPagedDataByList(List list, Integer pageNo, Integer pageSize) { |
| | | JSONObject result = new JSONObject(); |
| | | int total = list.size(); |
| | | Page page = new Page(total); |
| | | page.setPageSize(pageSize); |
| | | page.setPageNo(pageNo); |
| | | List subList = (List) list.stream().skip(page.getBeginRecordNo_1()).limit(page.getPageSize()).collect(Collectors.toList()); |
| | | result.fluentPut("pages", page.getPageCount()); |
| | | result.fluentPut("current", pageNo); |
| | | result.fluentPut("size", pageSize); |
| | | result.fluentPut("total", page.getRecordCount()); |
| | | result.fluentPut("list", subList); |
| | | |
| | | return Result.success(result); |
| | | |
| | | |
| | | } |
| | | /** |
| | | * |
| | | * @description: 获取分页后的字段列表 |
| | | * @param tableName 表名 |
| | | * @param pageNo 页数 |
| | | * @param pageSize 每页数据 |
| | | * @return: 字段列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public Result getTotalFields(String tableName, Integer pageNo, Integer pageSize) { |
| | | Result totalFields = getTotalFields(tableName); |
| | | JSONObject result = (JSONObject) totalFields.getData(); |
| | | JSONArray list = result.getJSONArray("list"); |
| | | int total = list.size(); |
| | | Page page = new Page(total); |
| | | page.setPageSize(pageSize); |
| | | page.setPageNo(pageNo); |
| | | List<Object> subList = list.stream().skip(page.getBeginRecordNo_1()).limit(page.getPageSize()).collect(Collectors.toList()); |
| | | result.fluentPut("pages", page.getPageCount()); |
| | | result.fluentPut("current", pageNo); |
| | | result.fluentPut("size", pageSize); |
| | | result.fluentPut("total", page.getRecordCount()); |
| | | result.fluentPut("list", subList); |
| | | |
| | | return Result.success(result); |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 分类后给前端展示 |
| | | * @param nowFields 当前版本字段列表 |
| | | * @param maxFields 全部字段列表 |
| | | * @return: 分类后的字段列表 |
| | | * |
| | | */ |
| | | private List<SysField> packageFieldList(List<SysField> nowFields, List<SysField> maxFields) { |
| | | //原始的清除operate用于前端显示 |
| | | nowFields = nowFields.stream().map(sysField -> sysField.setOperate(null)).collect(Collectors.toList()); |
| | |
| | | Collections.sort(nowFields, new Comparator<SysField>() { |
| | | @Override |
| | | public int compare(SysField o1, SysField o2) { |
| | | return o1.getOrderNo() - o2.getOrderNo() ; |
| | | Integer o1OrderNo = o1.getOrderNo(); |
| | | Integer orderNo = o2.getOrderNo(); |
| | | if (o1OrderNo == null && orderNo == null) { |
| | | return 0; |
| | | }else if (o1OrderNo == null) { |
| | | return -1; |
| | | }else if (orderNo == null) { |
| | | return 1; |
| | | } |
| | | return o1OrderNo - orderNo; |
| | | } |
| | | }); |
| | | return nowFields; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 更新基础字段对象信息 |
| | | * @param preField 更新前的字段对象 |
| | | * @param updateField 更新参数 |
| | | * @return: 是否更新成功 |
| | | * |
| | | */ |
| | | @Override |
| | | public boolean updateCommon(SysField preField, SysField updateField) { |
| | | preField.setWidth(updateField.getWidth()); |
| | |
| | | preField.setOrderNo(updateField.getOrderNo()); |
| | | return preField.updateById(); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @description: 通过字段版本获取某个字段的对象 |
| | | * @param maintainFieldId 字段版本 |
| | | * @param field 字段名称 |
| | | * @return: 字段对象 |
| | | * |
| | | */ |
| | | @Override |
| | | public SysField getOneFieldByMaintainField(String maintainFieldId, String field) { |
| | | List<SysField> fieldByMaintain = getFieldByMaintainField(maintainFieldId); |
| | |
| | | } |
| | | return collect.get(0); |
| | | } |
| | | /** |
| | | * |
| | | * @description: 通过数据版本获取某个字段的对象 |
| | | * @param maintainId 数据版本 |
| | | * @param field 字段名称 |
| | | * @return: 字段对象 |
| | | * |
| | | */ |
| | | @Override |
| | | public SysField getOneFieldByMaintain(String maintainId, String field) { |
| | | List<SysField> fieldByMaintain = getFieldByMaintain(maintainId); |
| | | if (fieldByMaintain == null || fieldByMaintain.isEmpty()) { |
| | | return null; |
| | | } |
| | | for (SysField sysField : fieldByMaintain) { |
| | | if (sysField.getField().equalsIgnoreCase(field)) { |
| | | return sysField; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | * |
| | | * @description: 通过字段版本获取对象列表 |
| | | * @param maintainId 字段版本 |
| | | * @return: 字段对象列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public List<SysField> getFieldByMaintainField(String maintainId) { |
| | | if (StringUtils.isEmpty(maintainId)) { |
| | | return selectList(new EntityWrapper<SysField>().isNull("maintain_field_id").orderBy("order_no")); |
| | | return null; |
| | | } |
| | | return selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainId).orderBy("order_no")); |
| | | } |
| | | /** |
| | | * |
| | | * @description: 通过表名获取默认字段列表 |
| | | * @param tableName 表名 |
| | | * @return: 字段对象列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public List<SysField> getDefaultTableField(String tableName) { |
| | | return selectList(new EntityWrapper<SysField>().eq("table_name", tableName).isNull("maintain_field_id").orderBy("order_no")); |
| | | } |
| | | /** |
| | | * |
| | | * @description: 通过表名获取全部字段列表 |
| | | * @param tableName 表名 |
| | | * @return: 字段对象列表 |
| | | * |
| | | */ |
| | | @Override |
| | | public List<SysField> getTotalTableField(String tableName) { |
| | | List<TableSchemaResult> tableField = tableInfoMapper.getTableField(tableName); |
| | | List<SysField> result = new ArrayList<>(); |
| | | for (TableSchemaResult tableSchemaResult : tableField) { |
| | | String fieldName = tableSchemaResult.getFieldName(); |
| | | List<SysField> fieldList = selectList(new EntityWrapper<SysField>().eq("table_name", tableName).eq(Constant.FIELD, fieldName).orderBy("create_time")); |
| | | if (fieldList.isEmpty()) { |
| | | //没有中文名称的 应该属于系统自留字段 如id |
| | | continue; |
| | | } |
| | | HashSet<SysField> strings = new HashSet<SysField>(fieldList); |
| | | String alias = strings.stream().map(SysField::getAlias).collect(Collectors.joining(Constant.SEMICOLON)); |
| | | SysField sysField = new SysField().setField(fieldName).setAlias(alias); |
| | | result.add(sysField); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | } |