From 74472c9d22dddcb41383794caf0011043b20f817 Mon Sep 17 00:00:00 2001 From: kimi <kimi42345@gmail.com> Date: 星期二, 31 三月 2020 13:25:47 +0800 Subject: [PATCH] fix 数据权限 --- src/main/java/com/highdatas/mdm/controller/SysFieldController.java | 447 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 431 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/highdatas/mdm/controller/SysFieldController.java b/src/main/java/com/highdatas/mdm/controller/SysFieldController.java index b64c71d..b89ebd3 100644 --- a/src/main/java/com/highdatas/mdm/controller/SysFieldController.java +++ b/src/main/java/com/highdatas/mdm/controller/SysFieldController.java @@ -1,22 +1,27 @@ package com.highdatas.mdm.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.highdatas.mdm.entity.MenuMapping; -import com.highdatas.mdm.entity.SysField; -import com.highdatas.mdm.entity.SysMenu; +import com.highdatas.mdm.entity.*; +import com.highdatas.mdm.mapper.SysFieldMapper; +import com.highdatas.mdm.pojo.ActivitiStatus; import com.highdatas.mdm.pojo.CodeMsg; +import com.highdatas.mdm.pojo.Operate; import com.highdatas.mdm.pojo.Result; -import com.highdatas.mdm.service.IMenuMappingService; -import com.highdatas.mdm.service.ISysFieldService; -import com.highdatas.mdm.service.ISysMenuService; +import com.highdatas.mdm.service.*; +import com.highdatas.mdm.util.Constant; +import com.highdatas.mdm.util.DbUtils; +import com.highdatas.mdm.util.WorkflowUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.awt.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.util.Date; import java.util.List; @@ -28,6 +33,7 @@ * @author kimi * @since 2019-12-16 */ +@Slf4j @RestController @RequestMapping("/field") public class SysFieldController { @@ -36,18 +42,75 @@ @Autowired ISysMenuService menuService; @Autowired + IMaintainService maintainService; + @Autowired IMenuMappingService menuMappingService; - + @Autowired + IMaintainFieldService maintainFieldService; + @Autowired + SysFieldMapper fieldMapper; + @Autowired + IFlowsService flowsService; + @Autowired + IMasterAuthorService masterAuthorService; @RequestMapping(value = "/{tableName}", method = RequestMethod.GET) - public Result todoTask(@PathVariable String tableName){ - if (StringUtils.isEmpty(tableName)) { - return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); - } - List<SysField> fieldList = fieldService.selectList(new EntityWrapper<SysField>().eq("table_name", tableName).orderBy("order_no")); + public Result getFields(@PathVariable String tableName, HttpServletRequest request){ + TUser user = DbUtils.getUser(request); + String maintainId = request.getParameter("maintainId"); + if (StringUtils.isEmpty(maintainId)) { + List<SysField> fieldList = fieldService.getFieldByTable(tableName); + return Result.success(fieldList); + }else { + List<SysField> field = masterAuthorService.getField(user.getUserId(), maintainId); + //List<SysField> fieldList = fieldService.getFieldByMaintain(maintainId); - return Result.success(fieldList); + return Result.success(field); + } + } + + @RequestMapping(value = "total/{tableName}/{pageNo}", method = RequestMethod.GET) + public Result getTotalFields(@PathVariable String tableName,@PathVariable Integer pageNo, HttpServletRequest request){ + String totalStr = request.getParameter("isTotal"); + String pageSize = request.getParameter("pageSize"); + + if (StringUtils.isEmpty(totalStr) || !Boolean.valueOf(totalStr)) { + // 璧版潈闄� + String maintainId = request.getParameter("maintainId"); + if (StringUtils.isEmpty(maintainId)){ + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + TUser user = DbUtils.getUser(request); + List<SysField> field = masterAuthorService.getField(user.getUserId(), maintainId); + Integer size; + if(StringUtils.isEmpty(pageSize)){ + size = 15; + }else { + size = Integer.valueOf(pageSize); + } + + return fieldService.getPagedDataByList(field, pageNo, size); + + } + + if(StringUtils.isEmpty(pageSize)){ + return fieldService.getTotalFields(tableName, pageNo, 15); + }else { + return fieldService.getTotalFields(tableName, pageNo, Integer.valueOf(pageSize)); + } + + } + + @RequestMapping(value = "fix/{tableName}", method = RequestMethod.GET) + public Result fix(@PathVariable String tableName, HttpServletRequest request){ + Result totalFields = fieldService.getTotalFields(tableName); + JSONObject data = (JSONObject) totalFields.getData(); + data.fluentPut("aduit", true); + return totalFields; + } + + @RequestMapping(value = "/menu/{id}", method = RequestMethod.GET) public Result getFieldByMenu(@PathVariable String id){ MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("menu_id", id)); @@ -58,8 +121,7 @@ if (StringUtils.isEmpty(tableName)) { return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); } - List<SysField> fieldList = fieldService.selectList(new EntityWrapper<SysField>().eq("table_name", tableName).orderBy("order_no")); - + List<SysField> fieldList = fieldService.getFieldByTable(tableName); return Result.success(fieldList); } @@ -76,6 +138,359 @@ e.printStackTrace(); return Result.error(CodeMsg.UPDATE_ERROR); } + + } + + @RequestMapping(value = "/updateCommon/{id}", method = RequestMethod.GET) + public Result addOrUpdate(@PathVariable String id, HttpServletRequest request) { + //鏇存柊鍩虹鍙傛暟涓嶉渶瑕佸叧鑱旂増鏈� + SysField sysField = fieldService.selectById(id); + if (sysField == null) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + String width = request.getParameter("width"); + String align = request.getParameter("align"); + String orderNoStr = request.getParameter("orderNo"); + String desp = request.getParameter("desp"); + if (!StringUtils.isEmpty(width)) { + sysField.setWidth(Integer.valueOf(width)); + } + if (!StringUtils.isEmpty(desp)) { + sysField.setDesp(desp); + } + if (!StringUtils.isEmpty(align)) { + sysField.setAlign(align); + } + //orderno + if (!StringUtils.isEmpty(orderNoStr)) { + Integer preOrderNo = sysField.getOrderNo(); + Integer orderNo = Integer.valueOf(orderNoStr); + String maintainId = sysField.getMaintainFieldId(); + String maintainParams; + if (StringUtils.isEmpty(maintainId)) { + //鍒濆鐘舵�� + String tableName = sysField.getTableName(); + maintainParams = "maintain_id is null and table_name = " + DbUtils.quotedStr(tableName); + }else { + maintainParams = "maintain_id = " + DbUtils.quotedStr(maintainId); + } + Integer updateSize; + if (preOrderNo > orderNo) { + //寰�鍓嶈皟 + updateSize = fieldMapper.updateOrderNoFront(maintainParams,orderNo, preOrderNo); + }else { + updateSize = fieldMapper.updateOrderNoBack(maintainParams,orderNo, preOrderNo); + } + if (updateSize == null) { + return Result.error(CodeMsg.UPDATE_ERROR); + } + } + boolean update = sysField.updateById(); + if (update) { + return Result.success(sysField); + }else { + return Result.error(CodeMsg.UPDATE_ERROR); + } + } + + @RequestMapping(value = "/loadFields", method = RequestMethod.POST) + public Result loadFields(@RequestBody String fieldListStr, HttpServletRequest request) { + log.info(fieldListStr); + List<SysField> fieldList = JSONObject.parseArray(fieldListStr,SysField.class); + if (fieldList.size() == 0) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + String tableName = fieldList.get(0).getTableName(); + if (StringUtils.isEmpty(tableName)) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + String maintainId = null; + MaintainField maxVersion = maintainFieldService.getMaxVersion(tableName); + if (maxVersion != null) { + maintainId = maxVersion.getId(); + } + + MaintainField nowMaintain = null; + HttpSession session = request.getSession(); + TUser user = (TUser) session.getAttribute("user"); + String userId = user.getUserId(); + Maintain dataMaintainMax = maintainService.getMaxVersion(tableName); + + if (StringUtils.isEmpty(maintainId)) { + //鍒涘缓鏂扮増鏈殑瀛楁 + nowMaintain = flowsService.createNowVerion(tableName, maintainId, userId); + + if (nowMaintain == null && dataMaintainMax != null) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + + }else { + Flows flows = flowsService.selectOne(new EntityWrapper<Flows>().eq("business_id", maintainId)); + if (flows != null){ + //褰撳墠宸插鎵� + ActivitiStatus status = flows.getStatus(); + if (status.equals(ActivitiStatus.open) || status.equals(ActivitiStatus.close)) { + nowMaintain = flowsService.createNowVerion(tableName, maintainId, userId); + }else { + return Result.error(new CodeMsg(7002, "褰撳墠瀛楁鐗堟湰姝e湪瀹℃壒,璇峰緟瀹℃壒閫氳繃鍚庡啀淇敼")); + } + + }else { + //delete + fieldService.delete(new EntityWrapper<SysField>().eq("maintain_field_id",maintainId)); + nowMaintain = maintainFieldService.selectById(maintainId); + } + } + String nowMaintainId; + if (dataMaintainMax == null) { + nowMaintainId = null; + }else { + nowMaintainId = nowMaintain.getId(); + } + + + if (StringUtils.isEmpty(nowMaintainId)) { + //绗竴娆¢粯璁ら兘娓呯┖ + fieldService.delete(new EntityWrapper<SysField>().isNull("maintain_field_id").eq("table_name", tableName)); + } + + for (int i = 0; i < fieldList.size(); i++) { + SysField sysField = fieldList.get(i); + sysField.setCreateTime(new Date()).setId(DbUtils.getUUID()).setMaintainFieldId(nowMaintainId).setOrderNo(i).insert(); + } + + if (nowMaintain != null) { + nowMaintain.insertOrUpdate(); + } + + return Result.success(null); + } + + @RequestMapping(value = "/change", method = RequestMethod.POST) + public Result addOrUpdate(@RequestBody SysField sysField, HttpServletRequest request) { + + String tableName = sysField.getTableName(); + + Maintain dataMaxVersion = maintainService.getMaxVersion(tableName); + boolean isInit = false; + if (dataMaxVersion == null) { + isInit = true; + } + if (!StringUtils.isEmpty(sysField.getId())) { + String id = sysField.getId(); + SysField field = fieldService.selectById(id); + if (field != null){ + Operate operate = field.getOperate(); + if (operate != null) { + isInit = true; + } + } + } + + Operate operate = sysField.getOperate(); + + if (isInit && (operate.equals(Operate.update) || operate.equals(Operate.create))) { + if (isInit) { + if (StringUtils.isEmpty(sysField.getId())) { + sysField.setId(DbUtils.getUUID()); + } + sysField.setOperate(null); + boolean update = sysField.insertOrUpdate(); + if (update) { + return Result.success(CodeMsg.SUCCESS); + }else { + return Result.error(CodeMsg.INSERT_ERROR); + } + + } + } + if (isInit && operate.equals(Operate.delete)) { + String maintainFieldId = sysField.getMaintainFieldId(); + boolean delete = sysField.deleteById(); + if (delete) { + //鍒犻櫎鍚� 鍒ゆ柇鏄惁鏈夋湭鎻愪氦鐨勪簡 + if (StringUtils.isEmpty(maintainFieldId)) { + return Result.success(CodeMsg.SUCCESS); + } + List<SysField> fieldList = fieldService.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId)); + long count = fieldList.stream().filter(field -> field.getOperate() != null).count(); + if (count == 0) { + //璇存槑 褰撳墠鐗堟湰娌℃湁淇敼鐨勫瓧娈典簡 + delete = fieldService.delete(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId)); + delete = maintainFieldService.deleteById(maintainFieldId); + if (delete) { + return Result.success(CodeMsg.SUCCESS); + } + } + return Result.success(CodeMsg.SUCCESS); + + }else { + return Result.error(CodeMsg.DELETE_ERROR); + } + } + + if (operate.equals(Operate.update)) { + String id = sysField.getId(); + SysField field = fieldService.selectById(id); + if (field == null) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + boolean visiableEqual = field.getVisible().equals(sysField.getVisible()); + boolean aliasEqual = field.getAlias().equals(sysField.getAlias()); + String updateCode = field.getCode(); + String preCode = sysField.getCode(); + boolean codeEqual; + if (StringUtils.isEmpty(updateCode) && StringUtils.isEmpty(preCode)) { + codeEqual = true; + }else if(!StringUtils.isEmpty(updateCode) && !StringUtils.isEmpty(preCode) && updateCode.equalsIgnoreCase(preCode)){ + codeEqual = true; + }else { + codeEqual = false; + } + String updateFormat = field.getFormat(); + String preFormat = sysField.getFormat(); + boolean formatterEqual; + if (StringUtils.isEmpty(updateFormat) && StringUtils.isEmpty(preFormat)) { + formatterEqual = true; + }else if(!StringUtils.isEmpty(updateFormat) && !StringUtils.isEmpty(preFormat) && updateFormat.equalsIgnoreCase(preFormat)){ + formatterEqual = true; + }else { + formatterEqual = false; + } + if (visiableEqual && aliasEqual && codeEqual && formatterEqual) { + // 浠呬慨鏀规櫘閫氱姸鎬� + boolean updated = fieldService.updateCommon(field, sysField); + if (!updated){ + return Result.error(CodeMsg.UPDATE_ERROR); + }else { + field = fieldService.selectById(id); + return Result.success(field); + } + } + } + MaintainField maxVersion = maintainFieldService.getMaxVersion(sysField.getTableName()); + String maintainId = null; + if(maxVersion != null) { + maintainId = maxVersion.getId(); + } + + MaintainField nowMaintain = null; + HttpSession session = request.getSession(); + TUser user = (TUser) session.getAttribute("user"); + String userId = user.getUserId(); + + if (operate.equals(Operate.create) || operate.equals(Operate.update)) { + + String alias = sysField.getAlias(); + List<SysField> fieldByMaintainField; + if (nowMaintain == null) { + fieldByMaintainField = fieldService.getFieldByTable(sysField.getTableName()); + } + else { + fieldByMaintainField = fieldService.getFieldByMaintainField(nowMaintain.getId()); + } + long count = fieldByMaintainField.stream() + .filter(sysField1 -> !sysField1.getId().equalsIgnoreCase(sysField.getId())) + .filter(maintainField -> maintainField.getAlias().equals(alias)).count(); + if (count > 0) { + //涓枃鍚嶇浉鍚� + return Result.error(new CodeMsg(8001, "鏄剧ず鍚嶇О鐩稿悓")); + } + } + if (StringUtils.isEmpty(maintainId)) { + //鍒涘缓鏂扮増鏈殑瀛楁 + nowMaintain = flowsService.createNowVerion(sysField.getTableName(), maintainId, userId); + if (nowMaintain == null) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + //璁剧疆鎴愭柊鐨勭増鏈� + sysField.setMaintainFieldId(nowMaintain.getId()); + + }else { + Flows flows = flowsService.selectOne(new EntityWrapper<Flows>().eq("business_id", maintainId)); + if (flows != null){ + //褰撳墠宸插鎵� + ActivitiStatus status = flows.getStatus(); + Boolean refused = sysField.getRefused(); + if (refused != null && refused && status.equals(ActivitiStatus.refuse)){ + nowMaintain = maintainFieldService.selectById(maintainId); + }else { + if (status.equals(ActivitiStatus.open) || status.equals(ActivitiStatus.close)) { + nowMaintain = flowsService.createNowVerion(sysField.getTableName(), maintainId, userId); + sysField.setMaintainFieldId(nowMaintain.getId()); + }else { + return Result.error(new CodeMsg(7002, "褰撳墠瀛楁鐗堟湰姝e湪瀹℃壒,璇峰緟瀹℃壒閫氳繃鍚庡啀淇敼")); + } + } + + }else { + nowMaintain = maintainFieldService.selectById(maintainId); + } + + } + if (nowMaintain == null) { + return Result.error(CodeMsg.OPERATR_ERROR); + } + //鏇存柊褰撳墠瀹炰綋涓烘柊鐗堟湰瀵瑰簲鐨刬d + + + if (operate.equals(Operate.create)) { + // create field + String alias = sysField.getAlias(); + String chineseOrEnglishOrNumber = DbUtils.getChineseOrEnglishOrNumber(alias); + String field = WorkflowUtils.toFirstChar(chineseOrEnglishOrNumber); + SysField oneFieldByMaintainField = fieldService.getOneFieldByMaintainField(nowMaintain.getId(), field); + if (oneFieldByMaintainField != null){ + //field 鏈夌浉鍚岀殑 + field = field + Constant.UnderLine + DbUtils.getUUID(5); + } + + sysField.setField(field); + sysField.setMaintainFieldId(nowMaintain.getId()); + sysField.setId(DbUtils.getUUID()); + sysField.setCreateTime(new Date()); + sysField.insert(); + // 涓昏〃涓渶鏂板瀛楁 + } + else if(operate.equals(Operate.update)) { + SysField relatedField = fieldService.getOneFieldByMaintainField(nowMaintain.getId(), sysField.getField()); + if (relatedField == null) { + return Result.error(CodeMsg.OPERATR_ERROR); + } + Boolean refused = sysField.getRefused(); + SysField field = fieldService.selectById(sysField.getId()); + Operate perOperate = field.getOperate(); + if (Operate.create.equals(perOperate) && refused != null && refused) { + sysField.setOperate(Operate.create); + } + sysField.setId(relatedField.getId()); + sysField.setMaintainFieldId(relatedField.getMaintainFieldId()); + sysField.setUpdateTime(new Date()); + sysField.updateById(); + } + else if(operate.equals(Operate.delete)) { + + SysField relatedField = fieldService.getOneFieldByMaintainField(nowMaintain.getId(), sysField.getField()); + if (relatedField == null) { + return Result.error(CodeMsg.OPERATR_ERROR); + } + + sysField.setId(relatedField.getId()); + sysField.setMaintainFieldId(relatedField.getMaintainFieldId()); + + Boolean refused = sysField.getRefused(); + SysField field = fieldService.selectById(sysField.getId()); + Operate perOperate = field.getOperate(); + + if (refused != null && refused && perOperate != null){ + sysField.deleteById(); + }else { + sysField.updateById(); + } + + } + nowMaintain.insertOrUpdate(); + return Result.success(sysField); } } -- Gitblit v1.8.0