Pārlūkot izejas kodu

单表维护模板

lizw 3 gadi atpakaļ
revīzija
70152a1872

+ 86 - 0
.gitignore

@@ -0,0 +1,86 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# STS
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+# IntelliJ IDEA
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+!**/bundle/src/**/out/
+
+# NetBeans
+/nbproject/private/
+/nbbuild/
+/dist/
+/dist_pda/
+/nbdist/
+/.nb-gradle/
+
+# VS Code
+.vscode/
+
+# gradle
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+# 设置不需要提交的文件
+.flattened-pom.xml
+*.eml
+*.lock
+*.log.*
+.gradle
+.vscode
+.DS_Store
+target
+pom.xml.versionsBackup
+build/
+node_modules
+
+/yvan-ext
+/yvan-ext-src
+/yvan-studio
+/wms-core
+/wms8-test
+/wms-document
+/yvan-framework
+/upload
+/mobile-client
+/yvan-ext-mobile
+/yvan-studio-web

+ 55 - 0
single_table/controller.hbs

@@ -0,0 +1,55 @@
+import {invokeServer, msg, Scope} from 'yvan-ext'
+import vjson from "./LzwTest.view"
+import model from "./LzwTest.model"
+
+export default class LzwTest extends Scope {
+    path = '/bas/area/LzwTest/LzwTest'
+
+    constructor() {
+        super({model, vjson});
+    }
+
+    onLoad() {
+    }
+
+    refresh() {
+        this.refs.grid1.reload()
+    }
+
+    add() {
+        this.refs.grid1.appendEditRow({}, 1)
+    }
+
+    remove() {
+        const grid1 = this.refs.grid1
+        const selected = grid1?.selModel?.selected?.items?.map(row => row.data)[0]
+        if (selected && grid1?.getStore().getNewRecords().map(row => row.data).indexOf(selected) < 0) {
+            system.confirm(`真的要删除?`)
+                .then(() => {
+                    this.setLoading(true)
+                    invokeServer('/bas/area/LzwTest/LzwTest@deleteItem', selected)
+                        .then(res => {
+                            grid1?.removeEditRow()
+                            system.msg(res.msg)
+                        }).finally(() => this.setLoading(false))
+                })
+        } else {
+            grid1?.removeEditRow()
+        }
+    }
+
+    save() {
+        let {newRows, modifyRows, removeRecords, err} = system.getGridEditRows(this.refs.grid1)
+        if (err) return
+        this.setLoading(true)
+        invokeServer('/bas/area/LzwTest/LzwTest@saveItems', {newRows, modifyRows, removeRecords,})
+            .then(res => {
+                system.msg(res.msg)
+                this.refs.grid1.reload()
+            }).finally(() => this.setLoading(false))
+    }
+
+    grid1Select(sender, selected) {
+        this.viewModel.set('selectedRow', selected[0]?.data)
+    }
+}

+ 118 - 0
single_table/data_struct.d.ts

@@ -0,0 +1,118 @@
+interface origin {
+    // 1:单表crud
+    moduleType: number,
+    // 当前模块包路径 "com/galaxis/wms/bas/area"
+    packagePath: string;
+    // 当前模块文件保存路径 "D:/SourceCode/jztd/wms8-bench/wms-biz/bundle/src/com/galaxis/wms/bas/area"
+    fileSavePath: string;
+    // 模块名称 "Dict"
+    moduleName: string;
+    // 页面标题 "字典维护"
+    pageTitle: string;
+    // 查询使用的 sql语句
+    sql: string;
+    // 字段列
+    columnList: Array<{
+        schema_name: string;
+        table_name: string;
+        column_name: string;
+        column_comment: string;
+        is_primary_key: true;
+        column_dict: string;
+        column_ui: string;
+        data_type: string;
+        column_type: number;
+    }>,
+    // 新增或者删除所用的表
+    tableName: string;
+    // 查询使用的字段
+    queryColumns: Array<string>;
+    // 编辑使用的字段
+    editColumns: Array<string>;
+    // 是否分页查询
+    pagination: boolean;
+    // 是否需要删除
+    delete: boolean;
+    // 删除条件字段
+    deleteWhereColumn: string;
+    // 删除提示语
+    deleteTips: string;
+    // 编辑类型: 1 不要新增和编辑; 2 表格内新增/编辑; 3对话框新增/编辑;
+    editType: number;
+}
+
+interface queryDsl {
+
+}
+
+interface data {
+    // 是否分页查询
+    pagination: boolean;
+    // package com.galaxis.wms.bas.area.LzwTest
+    package: string;
+    // TestDemo
+    groovyClass: string;
+    // QBasDict
+    qClass: string;
+    // basDict
+    qClassTable: string;
+    // 需要insert的列
+    insertColumns: Array<{
+        // dictCode (QueryDSL中的Q类字段)
+        qClassField: string;
+        // dict_code (请求参数的字段名)
+        paramField: string;
+    }>;
+    // 需要update的列
+    updateColumns: Array<{
+        // dictCode (QueryDSL中的Q类字段)
+        qClassField: string;
+        // dict_code (请求参数的字段名)
+        paramField: string;
+    }>;
+    // update的where条件
+    updateWheres: Array<{
+        // dictCode (QueryDSL中的Q类字段)
+        qClassField: string;
+        // asInteger asString asLong asDecimal asTimestamp
+        dbConvMethod: string;
+        // dict_code (请求参数的字段名)
+        paramField: string;
+    }>;
+    // delete的where条件
+    deleteWheres: Array<{
+        // dictCode (QueryDSL中的Q类字段)
+        qClassField: string;
+        // asInteger asString asLong asDecimal asTimestamp
+        dbConvMethod: string;
+        // dict_code (请求参数的字段名)
+        paramField: string;
+    }>;
+    // select * from asn_in_details (查询使用的 sql语句)
+    sql: string;
+    // 字典维护
+    pageTitle: string;
+    // true (新增按钮)
+    addButton: boolean;
+    // true (保存按钮)
+    saveButton: boolean;
+    // /bas/area/TestDemo
+    invokeUrlPrefix: string;
+    // grid表格列
+    gridColumns: Array<{
+        dataIndex: string;
+        header: string;
+        fix: {
+            // AREA_CLASSIFY
+            dictName: string;
+        },
+        editor: {
+            // textfield combo
+            xtype: string;
+            fix: {
+                // AREA_CLASSIFY
+                dictName: string;
+            },
+        },
+    }>;
+}

+ 93 - 0
single_table/groovy.hbs

@@ -0,0 +1,93 @@
+package {{{ package }}}
+
+import com.yvan.core.DbConv
+import com.yvan.data.jdbc.DaoFactory
+import com.yvan.model.YvanExt
+import com.yvan.model.response.Model
+import com.yvan.model.response.ModelOps
+import groovy.util.logging.Slf4j
+
+import static com.yvan.studio.model.query.{{{ qClass }}}.{{{ qClassTable }}}
+
+@Slf4j
+class {{{ groovyClass }}} {
+    static def queryDsl = DaoFactory.getQueryDSL()
+    static def mybatis = DaoFactory.getMyBatis({{{ groovyClass }}}.class)
+
+{{#if pagination}}
+    static def queryByPage(Map params) {
+        def list = mybatis.queryByPage("queryByPage", YvanExt.getQueryByPage(), params)
+        return Model.newSuccess(list)
+    }
+{{else}}
+    static def query(Map params) {
+        def list = mybatis.queryByPage("query", YvanExt.getQueryByPage(), params)
+        return Model.newSuccess(list)
+    }
+{{/if}}
+
+    static def deleteItem(params) {
+        queryDsl.delete(basDict)
+                {{#each deleteWheres}}.where({{{ qClassTable }}}.{{{ qClassField }}}.eq(DbConv.{{{ dbConvMethod }}}(row._origin.{{{ paramField }}}))){{/each}}
+                .execute()
+        return ModelOps.newSuccess()
+    }
+
+    static def saveItems(params) {
+        // 获取 queryDsl 针对数据库表的 insert/update/delete 的操作对象
+        def insert = queryDsl.insert({{{ qClassTable }}})
+        def update = queryDsl.update({{{ qClassTable }}})
+        def delete = queryDsl.delete({{{ qClassTable }}})
+        for (def row : params.newRows) {
+            // 提取 newRows 全部新加的数据,构建insert的queryDsl语句,并添加到 "批量执行(addBatch)" 的缓存中
+            insert
+                    {{#each insertColumns}}.setx({{{ qClassTable }}}.{{{ qClassField }}}, row.{{{ paramField }}}){{/each}}
+                    .addBatch()
+        }
+        for (def row : params.modifyRows) {
+            // 提取 modifyRows 全部修改的数据,构建update的queryDsl语句,并添加到 "批量执行(addBatch)" 的缓存中
+            if (row._origin.asn_in_id != null) {
+                update
+                        {{#each updateColumns}}.setx({{{ qClassTable }}}.{{{ qClassField }}}, row.{{{ paramField }}}){{/each}}
+                        {{#each updateWheres}}.where({{{ qClassTable }}}.{{{ qClassField }}}.eq(DbConv.{{{ dbConvMethod }}}(row._origin.{{{ paramField }}}))){{/each}}
+                        .addBatch()
+            }
+        }
+        for (def row : params.removeRecords) {
+            // 提取 removeRecords 全部删除的数据,构建删除条件,添加到 "批量执行(addBatch)" 的缓存中
+            if (row._origin.asn_in_id != null) {
+                delete
+                        {{#each deleteWheres}}.where({{{ qClassTable }}}.{{{ qClassField }}}.eq(DbConv.{{{ dbConvMethod }}}(row._origin.{{{ paramField }}}))){{/each}}
+                        .addBatch()
+            }
+        }
+        def i = 0 // 插入行计数
+        def u = 0 // 更新行计数
+        def d = 0 // 删除行计数
+        def msg = ""
+        // 构建提示语句
+        if (insert.getBatchCount() > 0) {
+            i = insert.execute()
+            msg += ",插入${i}行"
+        }
+        if (update.getBatchCount() > 0) {
+            u += update.execute()
+            msg += ",更新${u}行"
+        }
+        if (delete.getBatchCount() > 0) {
+            d += delete.execute()
+            msg += ",删除${d}行"
+        }
+        def rowEffect = i + u + d
+        if (rowEffect <= 0) {
+            return ModelOps.newSuccess().setMsg("没有要更新的内容")
+        }
+        // 返回前端
+        return Model.newSuccess([
+                update   : u,
+                insert   : i,
+                delete   : d,
+                rowEffect: rowEffect
+        ]).setMsg("保存成功" + msg)
+    }
+}

+ 9 - 0
single_table/model.hbs

@@ -0,0 +1,9 @@
+export default {
+    data: {
+        // 当前选中行
+        selectedRow: undefined,
+        // queryForm: {},
+        // queryGrid1: {},
+    },
+    formulas: {},
+}

+ 13 - 0
single_table/mybatis.hbs

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="">
+{{#if pagination}}
+    <select id="queryByPage">
+        {{{sql}}}
+    </select>
+{{else}}
+    <select id="query">
+        {{{sql}}}
+    </select>
+{{/if}}
+</mapper>

+ 97 - 0
single_table/view.hbs

@@ -0,0 +1,97 @@
+export default {
+    title: '{{ pageTitle }}',
+    layout: 'fit',
+    referenceHolder: true,
+    tbar: {
+        xtype: 'toolbar',
+        items: [
+            {
+                xtype: 'button',
+                text: '刷新',
+                iconCls: 'fa fa-refresh',
+                listeners: {
+                    click: 'scope.refresh',
+                },
+            },
+{{#if addButton}}
+            {
+                xtype: 'button',
+                text: '添加',
+                iconCls: 'x-fa fa-plus',
+                listeners: {
+                    click: 'scope.add',
+                },
+            },
+{{/if}}
+            {
+                xtype: 'button',
+                text: '删除',
+                iconCls: 'x-fa fa-remove',
+                bind: {
+                    disabled: '{grid1.selection === null}',
+                },
+                listeners: {
+                    click: 'scope.remove',
+                },
+            },
+{{#if saveButton}}
+            {
+                xtype: 'button',
+                text: '保存',
+                iconCls: 'x-fa fa-save',
+                bind: {
+                    disabled: '{!grid1.ischanged}',
+                },
+                listeners: {
+                    click: 'scope.save',
+                },
+            },
+{{/if}}
+        ]
+    },
+    items: [
+        {
+            layout: 'border',
+            items: [
+                {
+                    region: 'center',
+                    xtype: 'yvgrid',
+                    layout: 'fit',
+                    reference: 'grid1',
+                    pagination: {{ pagination }},
+                    selModel: {
+                        selType: 'rowmodel',
+                        mode: 'SINGLE',
+                    },
+                    dataSource: {
+                        method: 'invoke',
+                        url: '{{{ invokeUrlPrefix }}}@{{#if pagination }}queryByPage{{else}}query{{/if}}',
+                        params: {},
+                    },
+                    listeners: {
+                        selectionchange: 'scope.grid1Select',
+                    },
+                    columns: [
+                        {
+                            xtype: "rownumberer",
+                            header: "序号",
+                        },
+{{#each gridColumns}}
+                        {
+                            dataIndex: "{{ dataIndex }}",
+                            header: "{{ header }}",
+                            {{#with fix}}{{#if dictName}}fix: ['system.getDict("{{dictName}}")'],{{/if}}{{/with}}
+{{#with editor}}
+                            editor: {
+                                {{#if xtype}}xtype: '{{xtype}}',{{/if}}
+                                {{#with fix}}{{#if dictName}}fix: ['system.getDict("{{dictName}}")'],{{/if}}{{/with}}
+                            },
+{{/with}}
+                        },
+{{/each}}
+                    ],
+                },
+            ],
+        },
+    ],
+}