From 5bac93baf5659ce013163f884c9dce41990a860e Mon Sep 17 00:00:00 2001 From: kimi42345 <kimi42345@outlook.com> Date: 星期一, 23 三月 2020 08:49:41 +0800 Subject: [PATCH] no message --- src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java | 280 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 277 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..c0c45ae 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,30 @@ 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.DbUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -16,5 +36,259 @@ */ @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; + + + @Override + public List<SysField> getFieldByMaintain(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) { + //瀵瑰簲鐗堟湰鎵句笉鍒� 寰�鍓嶆壘 + 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; + } + 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; + } + } + + 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")); + 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; + } + + + } + + @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()); + } + + @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); + } + + @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); + + + } + + + 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; + } + + @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(); + } + + @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); + } + @Override + public List<SysField> getFieldByMaintainField(String maintainId) { + if (StringUtils.isEmpty(maintainId)) { + return selectList(new EntityWrapper<SysField>().isNull("maintain_field_id").orderBy("order_no")); + } + return selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainId).orderBy("order_no")); + } } -- Gitblit v1.8.0