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/controller/SysFieldController.java |  518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 512 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/highdatas/mdm/controller/SysFieldController.java b/src/main/java/com/highdatas/mdm/controller/SysFieldController.java
index 174c930..831e32e 100644
--- a/src/main/java/com/highdatas/mdm/controller/SysFieldController.java
+++ b/src/main/java/com/highdatas/mdm/controller/SysFieldController.java
@@ -1,17 +1,29 @@
 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.SysField;
+import com.highdatas.mdm.entity.Character;
+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.ISysFieldService;
+import com.highdatas.mdm.service.*;
+import com.highdatas.mdm.util.AntianaphylaxisClient;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.util.Date;
 import java.util.List;
 
@@ -20,25 +32,148 @@
  *  鍓嶇鎺у埗鍣�
  * </p>
  *
+ * @description 瀛楁鎺ュ彛
  * @author kimi
  * @since 2019-12-16
  */
+@Slf4j
 @RestController
 @RequestMapping("/field")
 public class SysFieldController {
     @Autowired
     ISysFieldService fieldService;
+    @Autowired
+    ISysMenuService menuService;
+    @Autowired
+    IMaintainService maintainService;
+    @Autowired
+    IMenuMappingService menuMappingService;
+    @Autowired
+    IMaintainFieldService maintainFieldService;
+    @Autowired
+    SysFieldMapper fieldMapper;
+    @Autowired
+    IFlowsService flowsService;
+    @Autowired
+    IMasterAuthorService masterAuthorService;
+    @Autowired
+    AntianaphylaxisClient antianaphylaxisClient;
 
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁鍒楄〃
+     *
+     */
     @RequestMapping(value = "/{tableName}", method = RequestMethod.GET)
-    public Result todoTask(@PathVariable String tableName){
+    public Result getFields(@PathVariable String tableName, HttpServletRequest request){
+        //璇锋眰澶磋幏鍙栦娇鐢ㄨ�呭寘瑁呯被
+        Character character = DbUtils.getCharacter(request);
+        String maintainId = request.getParameter("maintainId");
+        if (StringUtils.isEmpty(maintainId)) {
+            //閫氳繃琛ㄥ悕鑾峰彇瀛楁鍒楄〃
+            List<SysField> fieldList = fieldService.getFieldByTable(tableName);
+            String isDataIO = request.getParameter("isDataIO");
+            if (StringUtils.isEmpty(isDataIO) && !Boolean.valueOf(isDataIO)) {
+
+                return Result.success(fieldList);
+            }
+            //缁欎笂浼犱笅杞戒娇鐢� 缁勫悎濂藉緟鑴辨晱鐨勬暟鎹繑鍥�
+            antianaphylaxisClient.getHelpfulFieldBySysField(fieldList, tableName);
+            return Result.success(fieldList);
+        }else {
+            //BY 鐗堟湰鑾峰彇瀛楁
+            List<SysField> field = masterAuthorService.getField(character, maintainId);
+            //List<SysField> fieldList = fieldService.getFieldByMaintain(maintainId);
+
+            return Result.success(field);
+        }
+
+    }
+
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鍒嗛〉鑾峰彇瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @param pageNo 椤垫暟
+     * @return: 瀛楁鍒楄〃
+     *
+     */
+    @RequestMapping(value = "total/{tableName}/{pageNo}", method = RequestMethod.GET)
+    public Result getTotalFields(@PathVariable String tableName,@PathVariable Integer pageNo, HttpServletRequest request){
+        //isTotal 鏄惁璧版潈闄愶紝 pageSize 姣忛〉鏁版嵁鏁�
+        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, 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));
+        }
+    }
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇褰撳墠绯荤粺涓悇绉嶇姸鎬佺殑瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁鍒楄〃
+     *
+     */
+    @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;
+    }
+
+    /**
+     *
+     * @description:  閫氳繃涓婚鑾峰彇瀛楁閲岃緭鍏ヨ〃
+     * @param id 涓婚id
+     * @return: 瀛楁鍒楄〃
+     *
+     */
+    @RequestMapping(value = "/menu/{id}", method = RequestMethod.GET)
+    public Result getFieldByMenu(@PathVariable String id){
+        MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("menu_id", id));
+        if (menuMapping == null) {
+            return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
+        }
+        //閫氳繃涓婚鑾疯幏鍙栬〃鍚�
+        String tableName = menuMapping.getTableName();
         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);
     }
-
+    /**
+     *
+     * @description:  鏇存柊瀛楁鏁版嵁
+     * @return: 鏇存柊鏄惁鎴愬姛
+     *
+     */
     @RequestMapping(value = "/update", method = RequestMethod.GET)
     public Result update(@RequestParam String json)  {
         try {
@@ -52,6 +187,377 @@
             e.printStackTrace();
             return Result.error(CodeMsg.UPDATE_ERROR);
         }
+
+    }
+    /**
+     *
+     * @description:  鏇存柊鍩虹鍙傛暟
+     * @param id sys_field 鏁版嵁id
+     * @return: 鏄惁鏇存柊瀹屾垚
+     *
+     */
+    @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);
+        }
+    }
+
+    /**
+     *
+     * @description:  涓婁紶鍚庣敓鎴愮殑瀛楁淇濆瓨鍏ュ簱
+     * @return: 鏄惁淇濆瓨鎴愬姛
+     *
+     */
+    @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);
+    }
+    /**
+     *
+     * @description:  淇敼瀛楁
+     * @return: 淇敼鍚庣殑瀛楁
+     *
+     */
+    @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