From c007f0ca1785db093d48f4846cda82fe8e955765 Mon Sep 17 00:00:00 2001 From: kimi <kimi42345@gmail.com> Date: 星期三, 27 五月 2020 09:59:29 +0800 Subject: [PATCH] merage --- src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java | 493 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 490 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java index dca5055..1002586 100644 --- a/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java +++ b/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java @@ -1,10 +1,29 @@ package com.highdatas.mdm.service.impl; -import com.highdatas.mdm.entity.SysField; -import com.highdatas.mdm.mapper.SysFieldMapper; -import com.highdatas.mdm.service.ISysFieldService; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; 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.highdatas.mdm.util.Constant; +import com.highdatas.mdm.util.DbUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -16,5 +35,473 @@ */ @Service public class SysFieldServiceImpl extends ServiceImpl<SysFieldMapper, SysField> implements ISysFieldService { + @Autowired + IMaintainService maintainService; + @Autowired + SysFieldMapper fieldMapper; + @Autowired + IMaintainFieldService maintainFieldService; + @Autowired + MaintainFieldMapper maintainFieldMapper; + @Autowired + IFlowsService flowsService; + @Autowired + TableInfoMapper tableInfoMapper; + + + public MaintainField getMaintainFieldByMaintainId(String maintainId) { + MaintainField maintainField; + List<SysField> fieldList = null; + + if (StringUtils.isEmpty(maintainId)) { + return null; + } + Maintain maintain = maintainService.selectById(maintainId); + if (maintain == null) { + return null; + } + + maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("maintain_id", maintainId).orderBy("order_no desc")); + if (maintainField == null) { + //瀵瑰簲鐗堟湰鎵句笉鍒� 寰�鍓嶆壘 + 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); + } + 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(); + 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")); + if (fieldList.size() != 0) { + return fieldList; + } + } + + // 褰撳墠鐗堟湰姝e湪瀹℃壒 鎵惧墠涓�鐗堟湰 + Integer maintainFieldOrderNo = maintainField.getOrderNo(); + if (maintainFieldOrderNo < 1) { + fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no")); + return fieldList; + }else { + 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", 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); + } + + // 褰撳墠鐗堟湰姝e湪瀹℃壒 鎵惧墠涓�鐗堟湰 + 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(); + + MaintainField maxVersion = maintainFieldService.getMaxVersion(tableName); + MaintainField nowVersion = maintainFieldService.getNowVersion(tableName); + if (nowVersion == null && maxVersion == null) { + result.fluentPut("list", getFieldByTable(tableName)); + result.fluentPut("aduit", false); + result.fluentPut("flowStatus", null); + result.fluentPut("maintainFieldId", null); + return Result.success(result); + }else if (nowVersion == null){ + List<SysField> maxFieldList = getFieldByMaintainField(maxVersion.getId()); + List<SysField> createdFieldList = getFieldByTable(tableName); + result.fluentPut("list", packageFieldList(createdFieldList, maxFieldList)); + result.fluentPut("aduit", true); + result.fluentPut("flowStatus", null); + result.fluentPut("maintainFieldId", maxVersion.getId()); + String flowId = maxVersion.getFlowId(); + Flows flows = flowsService.selectById(flowId); + if (flows != null) { + ActivitiStatus status = flows.getStatus(); + if (!status.equals(ActivitiStatus.open) || !status.equals(ActivitiStatus.close)) { + result.fluentPut("aduit", false); + } + result.fluentPut("flowStatus", status); + } + return Result.success(result); + } + + if (maxVersion.getOrderNo().equals(nowVersion.getOrderNo())) { + // 鏈瓨鍦� + + result.fluentPut("list", getFieldByMaintainField(nowVersion.getId())); + result.fluentPut("aduit", false); + result.fluentPut("flowStatus", null); + result.fluentPut("maintainFieldId", nowVersion.getId()); + return Result.success(result); + } + List<SysField> nowFields = getFieldByMaintainField(nowVersion.getId()); + List<SysField> maxFields = getFieldByMaintainField(maxVersion.getId()); + nowFields = packageFieldList(nowFields, maxFields); + result.fluentPut("list", nowFields); + result.fluentPut("aduit", true); + result.fluentPut("flowStatus", null); + result.fluentPut("maintainFieldId", maxVersion.getId()); + String flowId = maxVersion.getFlowId(); + Flows flows = flowsService.selectById(flowId); + if (flows != null) { + ActivitiStatus status = flows.getStatus(); + if (!status.equals(ActivitiStatus.open) || !status.equals(ActivitiStatus.close)) { + result.fluentPut("aduit", false); + } + result.fluentPut("flowStatus", status); + } + + 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) { + //鍘熷鐨勬竻闄perate鐢ㄤ簬鍓嶇鏄剧ず + nowFields = nowFields.stream().map(sysField -> sysField.setOperate(null)).collect(Collectors.toList()); + for (SysField maxField : maxFields) { + String field = maxField.getField(); + Operate operate = maxField.getOperate(); + if (operate == null) { + continue; + } + if (operate.equals(Operate.update) || operate.equals(Operate.delete)) { + nowFields = nowFields.stream().filter(sysField -> !sysField.getField().equalsIgnoreCase(field)).collect(Collectors.toList()); + nowFields.add(maxField); + } + else if (operate.equals(Operate.create)) { + nowFields.add(maxField); + } + + } + Collections.sort(nowFields, new Comparator<SysField>() { + @Override + public int compare(SysField o1, SysField o2) { + 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.setDesp(updateField.getDesp()); + preField.setAlign(updateField.getAlign()); + String maintainId = preField.getMaintainFieldId(); + String maintainParams; + if (StringUtils.isEmpty(maintainId)) { + //鍒濆鐘舵�� + String tableName = preField.getTableName(); + maintainParams = "maintain_field_id is null and table_name = " + DbUtils.quotedStr(tableName); + }else { + maintainParams = "maintain_field_id = " + DbUtils.quotedStr(maintainId); + } + Integer updateSize = null; + Integer preOrderNo = preField.getOrderNo(); + Integer orderNo = updateField.getOrderNo(); + if (orderNo == preOrderNo) { + return preField.updateById(); + } +// else if (preOrderNo > orderNo) { +// //寰�鍓嶈皟 +// updateSize = fieldMapper.updateOrderNoFront(maintainParams,orderNo, preOrderNo); +// }else { +// updateSize = fieldMapper.updateOrderNoBack(maintainParams,orderNo, preOrderNo); +// } + if (preField.getOperate() != null) { + preField.setOperate(updateField.getOperate()); + } + 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); + List<SysField> collect = fieldByMaintain.stream().filter(sysField -> sysField.getField().equalsIgnoreCase(field)).collect(Collectors.toList()); + if (collect.isEmpty()) { + return null; + } + 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 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()) { + //娌℃湁涓枃鍚嶇О鐨� 搴旇灞炰簬绯荤粺鑷暀瀛楁 濡俰d + 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; + } } -- Gitblit v1.8.0