kimi
2020-05-27 c007f0ca1785db093d48f4846cda82fe8e955765
src/main/java/com/highdatas/mdm/controller/SysFieldController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.highdatas.mdm.entity.Character;
import com.highdatas.mdm.entity.*;
import com.highdatas.mdm.mapper.SysFieldMapper;
import com.highdatas.mdm.pojo.ActivitiStatus;
@@ -12,9 +13,11 @@
import com.highdatas.mdm.pojo.Operate;
import com.highdatas.mdm.pojo.Result;
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.*;
@@ -29,9 +32,11 @@
 *  前端控制器
 * </p>
 *
 * @description 字段接口
 * @author kimi
 * @since 2019-12-16
 */
@Slf4j
@RestController
@RequestMapping("/field")
public class SysFieldController {
@@ -49,26 +54,91 @@
    SysFieldMapper fieldMapper;
    @Autowired
    IFlowsService flowsService;
    @Autowired
    IMasterAuthorService masterAuthorService;
    @Autowired
    AntianaphylaxisClient antianaphylaxisClient;
    /**
     *
     * @description:  通过表名获取字段列表
     * @param tableName 表名
     * @return: 字段列表
     *
     */
    @RequestMapping(value = "/{tableName}", method = RequestMethod.GET)
    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);
            List<SysField> fieldList = fieldService.getFieldByMaintain(maintainId);
            return Result.success(fieldList);
            return Result.success(field);
        }
    }
    @RequestMapping(value = "total/{tableName}", method = RequestMethod.GET)
    public Result getTotalFields(@PathVariable String tableName, HttpServletRequest request){
        return fieldService.getTotalFields(tableName);
    }
    /**
     *
     * @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);
@@ -77,12 +147,20 @@
        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);
@@ -90,7 +168,12 @@
        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 {
@@ -106,7 +189,13 @@
        }
    }
    /**
     *
     * @description:  更新基础参数
     * @param id sys_field 数据id
     * @return: 是否更新完成
     *
     */
    @RequestMapping(value = "/updateCommon/{id}", method = RequestMethod.GET)
    public Result addOrUpdate(@PathVariable String id, HttpServletRequest request)  {
        //更新基础参数不需要关联版本
@@ -114,6 +203,7 @@
        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");
@@ -159,8 +249,15 @@
        }
    }
    /**
     *
     * @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);
@@ -179,11 +276,13 @@
        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) {
            if (nowMaintain == null && dataMaintainMax != null) {
                return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
            }
@@ -204,17 +303,99 @@
                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()).setOperate(Operate.create).setMaintainFieldId(nowMaintain.getId()).setOrderNo(i).insert();
            sysField.setCreateTime(new Date()).setId(DbUtils.getUUID()).setMaintainFieldId(nowMaintainId).setOrderNo(i).insert();
        }
        nowMaintain.insertOrUpdate();
        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);
@@ -223,7 +404,16 @@
            }
            boolean visiableEqual = field.getVisible().equals(sysField.getVisible());
            boolean aliasEqual = field.getAlias().equals(sysField.getAlias());
            boolean codeEqual = field.getCode().equals(sysField.getCode());
            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;
@@ -246,13 +436,18 @@
            }
        }
        MaintainField maxVersion = maintainFieldService.getMaxVersion(sysField.getTableName());
        String maintainId = maxVersion.getId();
        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) {
@@ -341,6 +536,7 @@
            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);