kimi42345
2020-03-22 d0451fdd55195901e65e5c4b3b64028a86f9e669
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,50 @@
    @Autowired
    ISysMenuService menuService;
    @Autowired
    IMaintainService maintainService;
    @Autowired
    IMenuMappingService menuMappingService;
    @Autowired
    IMaintainFieldService maintainFieldService;
    @Autowired
    SysFieldMapper fieldMapper;
    @Autowired
    IFlowsService flowsService;
    @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){
        String maintainId = request.getParameter("maintainId");
        if (StringUtils.isEmpty(maintainId)) {
            List<SysField> fieldList = fieldService.getFieldByTable(tableName);
            return Result.success(fieldList);
        }else {
        return Result.success(fieldList);
            List<SysField> fieldList = fieldService.getFieldByMaintain(maintainId);
            return Result.success(fieldList);
        }
    }
    @RequestMapping(value = "total/{tableName}/{pageNo}", method = RequestMethod.GET)
    public Result getTotalFields(@PathVariable String tableName,@PathVariable Integer pageNo, HttpServletRequest request){
        String pageSize = request.getParameter("pageSize");
        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 +96,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 +113,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, "当前字段版本正在审批,请待审批通过后再修改"));
                }
            }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, "当前字段版本正在审批,请待审批通过后再修改"));
                    }
                }
            }else {
                nowMaintain = maintainFieldService.selectById(maintainId);
            }
        }
        if (nowMaintain == null) {
            return Result.error(CodeMsg.OPERATR_ERROR);
        }
        //更新当前实体为新版本对应的id
        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);
    }
}