From d0451fdd55195901e65e5c4b3b64028a86f9e669 Mon Sep 17 00:00:00 2001 From: kimi42345 <kimi42345@outlook.com> Date: 星期日, 22 三月 2020 22:10:54 +0800 Subject: [PATCH] no message --- src/main/java/com/highdatas/mdm/service/impl/MasterModifiedServiceImpl.java | 184 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 172 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/highdatas/mdm/service/impl/MasterModifiedServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/MasterModifiedServiceImpl.java index 0769405..2abd336 100644 --- a/src/main/java/com/highdatas/mdm/service/impl/MasterModifiedServiceImpl.java +++ b/src/main/java/com/highdatas/mdm/service/impl/MasterModifiedServiceImpl.java @@ -1,18 +1,26 @@ package com.highdatas.mdm.service.impl; import com.alibaba.fastjson.JSONObject; +import com.google.gson.JsonObject; import com.highdatas.mdm.entity.Maintain; import com.highdatas.mdm.entity.SysField; +import com.highdatas.mdm.entity.TUser; +import com.highdatas.mdm.entity.TableSchemaResult; +import com.highdatas.mdm.mapper.MaintainFieldMapper; import com.highdatas.mdm.mapper.MasterModifiedMapper; -import com.highdatas.mdm.service.IMaintainService; -import com.highdatas.mdm.service.IMasterModifiedService; -import com.highdatas.mdm.service.ISysFieldService; +import com.highdatas.mdm.mapper.TableInfoMapper; +import com.highdatas.mdm.pojo.ActivitiStatus; +import com.highdatas.mdm.pojo.Segment; +import com.highdatas.mdm.service.*; +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.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -30,9 +38,22 @@ ISysFieldService fieldService; @Autowired MasterModifiedMapper masterModifiedMapper; + @Autowired + TableInfoMapper tableInfoMapper; + @Autowired + IMaintainFieldService maintainFieldService; + @Autowired + ITUserService userService; + @Autowired + MaintainFieldMapper maintainFieldMapper; + @Autowired + MasterDataService masterDataService; + public static final String master_id = "master_id"; public static final String pre_record = "pre_record"; public static final String table_name = "table_name"; + public static final String master_modified = "master_modified"; + @Override public Map<String, String> getModifiedUserById(String maintainId, String masterId) { return null; @@ -44,17 +65,156 @@ } @Override - public boolean updateModifiedUserById(String maintainId, String masterId, List<String> modifiedFieldList) { + public boolean updateModifiedUserById(String maintainId, String masterId, String userId, List<String> modifiedFieldList) { if (StringUtils.isEmpty(maintainId)) { return false; } - Maintain nowMaintain = maintainService.selectById(maintainId); - List<SysField> fieldByMaintain = fieldService.getFieldByMaintain(maintainId); - Map<String, String> masterModifiedMap = masterModifiedMapper.selectByTableMasterId(nowMaintain.getTableName(), masterId); - String preRecordStr = masterModifiedMap.get(pre_record); - JSONObject preRecordJSON = JSONObject.parseObject(preRecordStr); + try { + Maintain nowMaintain = maintainService.selectById(maintainId); + List<SysField> fieldByMaintain = fieldService.getFieldByMaintain(maintainId); + if (nowMaintain == null) { + return false; + } + Map<String, String> masterModifiedMap = masterModifiedMapper.selectByTableMasterId(DbUtils.quotedStr(nowMaintain.getTableName()), DbUtils.quotedStr(masterId)); + if (masterModifiedMap == null) { + masterModifiedMap = new HashMap<>(); + masterModifiedMap.put(table_name, nowMaintain.getTableName()); + masterModifiedMap.put(master_id, masterId); + } + String preRecordStr = masterModifiedMap.get(pre_record); + JSONObject preRecordJSON = null; + if (!StringUtils.isEmpty(preRecordStr)) { + preRecordJSON = JSONObject.parseObject(preRecordStr); + }else { + preRecordJSON = new JSONObject(); + } + for (String field : modifiedFieldList) { + preRecordJSON.fluentPut(field, userId); + } + masterModifiedMap.put(pre_record, preRecordJSON.toJSONString()); + String id = masterModifiedMap.get(Constant.ID); + if (StringUtils.isEmpty(id)) { + masterModifiedMap.put(Constant.ID, DbUtils.getUUID()); + insert(masterModifiedMap); + }else { + updateById(masterModifiedMap); + } + return true; + } + catch (Exception e){ + e.printStackTrace(); + return false; + } + } - return false; + private void insert(Map<String, String> masterModifiedMap) { + String fields = masterModifiedMap.keySet().stream().collect(Collectors.joining(Constant.COMMA)); + String values = masterModifiedMap.values().stream().map(s -> DbUtils.quotedStr(s)).collect(Collectors.joining(Constant.COMMA)); + tableInfoMapper.insert(master_modified, fields, DbUtils.bracketStr(values)); + } + + private void updateById(Map<String, String> masterModifiedMap) { + String id = masterModifiedMap.get(Constant.ID); + Segment whereSegment = new Segment(Constant.ID, id); + List<Segment> updateSgement = DbUtils.map2Segment(masterModifiedMap); + String updateStr = updateSgement.stream().map(segment -> segment.toString()).collect(Collectors.joining(Constant.COMMA)); + tableInfoMapper.update(master_modified, updateStr, whereSegment.toString()); + } + + @Override + @Async + public void dealFlow(String maintainId, ActivitiStatus status) { + Maintain maintain = maintainService.selectById(maintainId); + String tableName = maintain.getTableName(); + String recordTableName = tableName + Constant.RECORD; + List<Map<String,String>> modifiedList = masterModifiedMapper.selectByMaintainId(recordTableName, DbUtils.quotedStr(maintainId)); + switch (status) { + case open: + for (Map<String, String> masterModifiedMap : modifiedList) { + String preJson = masterModifiedMap.get(pre_record); + JSONObject jsonObject = JSONObject.parseObject(preJson); + if (jsonObject == null){ + continue; + } + Set<String> keySet = jsonObject.keySet(); + HashMap<String, String> userMap = new HashMap<>(); + for (String field : keySet) { + String userId = jsonObject.getString(field); + if (userMap.containsKey(userId)) { + String preFieldStr = userMap.get(userId); + field = preFieldStr + Constant.SEMICOLON + field; + } + userMap.put(userId, field); + } + List<TableSchemaResult> tableField = tableInfoMapper.getTableField(master_modified); + List<String> existsFieldList = tableField.stream().map(TableSchemaResult::getFieldName).collect(Collectors.toList()); + Set<String> userIdList = userMap.keySet(); + + if (!existsFieldList.containsAll(userIdList)) { + //鏂板涔嬪墠涓嶅瓨鍦ㄧ殑鐢ㄦ埛 + List<String> unExistsUserList = userIdList.stream().filter(s -> !existsFieldList.contains(s)).collect(Collectors.toList()); + for (String s : unExistsUserList) { + //鏂板瀛楁 + maintainFieldMapper.addCloumn(master_modified, s, Constant.Text); + } + } + masterModifiedMap.putAll(userMap); + updateById(masterModifiedMap); + } + break; + case close: + List<String> unUserIdList = new ArrayList<>(); + unUserIdList.add(Constant.ID); + unUserIdList.add(master_id); + unUserIdList.add(table_name); + unUserIdList.add(pre_record); + for (Map<String, String> masterModifiedMap : modifiedList) { + //todo 鍙嶆洿鏂� perjson 鑾峰彇褰撳墠琛ㄦ墍鏈夊彲鏇存敼鐨勭敤鎴� 涔嬪悗寰呬慨鏀� 鍏堜粠鏈湴user琛ㄤ腑鎷� + Set<String> keySet = masterModifiedMap.keySet(); + List<String> userIdList = keySet.stream().filter(s -> !unUserIdList.contains(s)).collect(Collectors.toList()); + JSONObject jsonObject = new JSONObject(); + for (String s : userIdList) { + String fields = masterModifiedMap.get(s); + if (StringUtils.isEmpty(fields)) { + continue; + } + String[] split = fields.split(Constant.SEMICOLON); + for (String field : split) { + jsonObject.fluentPut(field, s); + } + } + masterModifiedMap.put(pre_record, jsonObject.toJSONString()); + updateById(masterModifiedMap); + } + break; + } + } + + @Override + public void dealAssemble(String maintainId, String userId, boolean audit) { + List<SysField> fieldByMaintain = fieldService.getFieldByMaintain(maintainId); + String fieldStr = fieldByMaintain.stream().map(SysField::getField).collect(Collectors.joining(Constant.SEMICOLON)); + List<TableSchemaResult> tableField = tableInfoMapper.getTableField(master_modified); + long count = tableField.stream().map(tableSchemaResult -> tableSchemaResult.getFieldName()).filter(s -> s.equalsIgnoreCase(userId)).count(); + if (count == 0) { + maintainFieldMapper.addCloumn(master_modified, userId, Constant.Text); + } + + Maintain maintain = maintainService.selectById(maintainId); + String tableName = maintain.getTableName(); + String recordTableName = tableName + Constant.RECORD; + if (!audit) { + masterModifiedMapper.insertUserByTableNameUserId(DbUtils.quotedStr(maintainId), DbUtils.quotedStr(tableName), recordTableName, userId, DbUtils.quotedStr(fieldStr)); + } + else { + JSONObject jsonObject = new JSONObject(); + for (SysField field : fieldByMaintain) { + String oneField = field.getField(); + jsonObject.fluentPut(oneField, userId); + } + + masterModifiedMapper.insertJsonByTableNameUserId(DbUtils.quotedStr(maintainId), DbUtils.quotedStr(tableName), recordTableName, DbUtils.quotedStr(jsonObject.toJSONString())); + } } } -- Gitblit v1.8.0