shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
package com.iplatform.generator.controller;
 
import com.fasterxml.jackson.databind.JsonNode;
import com.iplatform.base.SystemController;
import com.iplatform.generator.GenConstants;
import com.iplatform.generator.JdbcGeneratorEngine;
import com.iplatform.generator.config.JdbcGeneratorProperties;
import com.iplatform.generator.pojo.TableParam;
import com.iplatform.generator.service.CodeGenServiceImpl;
import com.iplatform.generator.util.CodeGenUtils;
import com.iplatform.model.po.S_gen_column;
import com.iplatform.model.po.S_gen_table;
import com.walker.db.TableInfo;
import com.walker.db.page.GenericPager;
import com.walker.db.page.ListPageContext;
import com.walker.db.page.PageSearch;
import com.walker.dbmeta.FieldInfo;
import com.walker.infrastructure.utils.JsonUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.web.ResponseValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 代码生成界面管理接口。
 * @author 时克英
 * @date 2022-11-22
 */
@RestController
@RequestMapping("/tool/gen")
public class CodeGenController extends SystemController {
 
    public static final String PACKAGE_NAME = "com.iplatform.model.po";
 
    private CodeGenServiceImpl codeGenService;
    private JdbcGeneratorEngine jdbcGeneratorEngine;
    private JdbcGeneratorProperties jdbcGeneratorProperties;
 
    @Autowired
    public CodeGenController(CodeGenServiceImpl codeGenService
            , JdbcGeneratorEngine jdbcGeneratorEngine, JdbcGeneratorProperties jdbcGeneratorProperties){
        this.codeGenService = codeGenService;
        this.jdbcGeneratorEngine = jdbcGeneratorEngine;
        this.jdbcGeneratorProperties = jdbcGeneratorProperties;
    }
 
    @RequestMapping("/list")
    public ResponseValue listGenTable(S_gen_table genTable){
//        this.preparePageSearch();
        GenericPager<S_gen_table> pager = this.codeGenService.queryPageGenTable(genTable.getTable_name(), genTable.getTable_comment());
//        return this.acquireTablePage(pager.getDatas(), pager.getTotalRows());
        return ResponseValue.success(pager);
    }
 
    @RequestMapping("/db/list")
    public ResponseValue listDbTable(TableParam tableParam){
//        PageSearch pageSearch = this.preparePageSearch();
        PageSearch pageSearch = ListPageContext.getPageSearch();
        ListPageContext.setCurrentPageIndex(pageSearch.getPageIndex());
        ListPageContext.setCurrentPageSize(pageSearch.getPageSize());
        GenericPager<TableInfo> pager = this.jdbcGeneratorEngine.queryPageTableNamesByLike(tableParam.getTableName());
        logger.debug("tableInfo list = " + pager);
//        return this.acquireTablePage(pager.getDatas(), pager.getTotalRows());
        return ResponseValue.success(pager);
    }
 
    @RequestMapping("/import")
    public ResponseValue saveImportTable(String tables){
        if(StringUtils.isEmpty(tables)){
            return ResponseValue.error("请提供表名称");
        }
        String[] tableArray = StringUtils.toArray(tables);
        if(tableArray.length > 1){
            return ResponseValue.error("暂不支持多表同时导出,请选择一个");
        }
        logger.info("当前保存导入(生成)表 = " + tableArray[0]);
        TableInfo tableInfo = this.jdbcGeneratorEngine.queryOneTableInfo(tableArray[0]);
        if(tableInfo == null){
            return ResponseValue.error("选择的表不存在:" + tables);
        }
 
        String userName = this.getCurrentUser().getUser_name();
        List<FieldInfo> fieldList = this.jdbcGeneratorEngine.getFieldsObject(tableInfo.getName());
        logger.debug("fieldList = " + fieldList);
 
        String packageName = this.jdbcGeneratorProperties.getPackageName();
        if(StringUtils.isEmpty(packageName)){
            packageName = PACKAGE_NAME;
            logger.error("packageName 未找到配置项,使用默认值: " + PACKAGE_NAME);
        }
        S_gen_table s_gen_table = CodeGenUtils.createGenTable(tableInfo, userName, packageName);
        List<S_gen_column> columnList = new ArrayList<>();
        if(fieldList != null){
            for(FieldInfo fieldInfo : fieldList){
                S_gen_column s_gen_column = CodeGenUtils.createGenColumn(fieldInfo, userName, s_gen_table.getTable_id());
                columnList.add(s_gen_column);
            }
        }
        this.codeGenService.execInsertOneTableAndColumnList(s_gen_table, columnList);
        return ResponseValue.success();
    }
 
    /**
     * 重用 /tool/gen/db/** 的权限点,删除已生成的表记录。
     * @param tableIds
     * @return
     * @date 2022-11-26
     */
    @RequestMapping("/db/remove/{tableIds}")
    public ResponseValue removeGenTable(@PathVariable Long[] tableIds){
        if(tableIds == null || tableIds.length == 0){
            return ResponseValue.error("请提供表ID");
        }
        if(tableIds.length > 1){
            return ResponseValue.error("暂不支持多表删除,请选择一个");
        }
        this.codeGenService.execDeleteTableAndColumnList(tableIds[0]);
        return ResponseValue.success();
    }
 
    /**
     * 显示一个表结构信息,修改界面使用。
     * @param tableId
     * @return
     */
    @GetMapping(value = "/db/{tableId}")
    public ResponseValue showTableInfo(@PathVariable Long tableId){
        if(tableId == null | tableId.longValue() <= 0){
            return ResponseValue.error("缺少表参数");
        }
        S_gen_table s_gen_table = this.codeGenService.get(new S_gen_table(tableId));
        this.setTableFromOptions(s_gen_table);
        List<S_gen_column> columnList = this.codeGenService.queryGenColumnList(tableId);
        Map<String, Object> map = new HashMap<String, Object>(4);
        map.put("info", s_gen_table);
        map.put("rows", columnList);
        return ResponseValue.success(map);
    }
 
    @GetMapping("/db/gen_po/{tableName}")
    public void downloadGenPoZip(@PathVariable("tableName") String tableName){
        logger.debug(".......... tableName = " + tableName);
        if(StringUtils.isEmpty(tableName)){
            throw new IllegalArgumentException("未提供表明,无法下载生成PO");
        }
        byte[] data = this.jdbcGeneratorEngine.generateOnePoZipFile(tableName);
        try {
            this.downloadSimpleFile(data, tableName + ".zip");
        } catch (IOException e) {
            throw new RuntimeException("下载PO生成异常: " + tableName,e);
        }
    }
 
    private void setTableFromOptions(S_gen_table genTable){
        String options = genTable.getOptions();
        if(StringUtils.isNotEmpty(options)){
            try {
                JsonNode json = JsonUtils.jsonStringToObject(options, JsonNode.class);
                String treeCode = json.get(GenConstants.TREE_CODE).asText();
                String treeParentCode = json.get(GenConstants.TREE_PARENT_CODE).asText();
                String treeName = json.get(GenConstants.TREE_NAME).asText();
                String parentMenuId = json.get(GenConstants.PARENT_MENU_ID).asText();
                String parentMenuName = json.get(GenConstants.PARENT_MENU_NAME).asText();
 
                genTable.setTreeCode(treeCode);
                genTable.setTreeParentCode(treeParentCode);
                genTable.setTreeName(treeName);
                genTable.setParentMenuId(parentMenuId);
                genTable.setParentMenuName(parentMenuName);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}