commit 1bb4231eecb1977188a139c75160296970011496
Author: zhangyunjie <1920430866@qq.com>
Date: Tue Mar 24 15:27:01 2026 +0800
feat: 初始化
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..91ef001
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+*.js linguist-language=Java
+*.css linguist-language=Java
+*.html linguist-language=Java
+*.sh text eol=lf
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6fb8862
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+*.class
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+*.iml
+# Package Files #
+*.jar
+*.war
+*.ear
+*.zip
+*.log
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+.idea
+/target
+
+**/*.iml
+
diff --git a/docs/jsh_erp.sql b/docs/jsh_erp.sql
new file mode 100644
index 0000000..c1c04b7
--- /dev/null
+++ b/docs/jsh_erp.sql
@@ -0,0 +1,1001 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : 127.0.0.1
+ Source Server Type : MySQL
+ Source Server Version : 80029
+ Source Host : 127.0.0.1:3306
+ Source Schema : jsh_erp
+
+ Target Server Type : MySQL
+ Target Server Version : 80029
+ File Encoding : 65001
+
+ Date: 05/11/2025 22:26:57
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for jsh_account
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_account`;
+CREATE TABLE `jsh_account` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `serial_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编号',
+ `initial_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '期初金额',
+ `current_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '当前余额',
+ `remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `is_default` bit(1) NULL DEFAULT NULL COMMENT '是否默认',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '账户信息' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_account
+-- ----------------------------
+INSERT INTO `jsh_account` VALUES (17, '账户1', 'zzz111', 100.000000, 829.000000, 'aabb', b'1', NULL, b'1', 63, '0');
+INSERT INTO `jsh_account` VALUES (18, '账户2', '1234131324', 200.000000, -1681.000000, 'bbbb', b'1', NULL, b'0', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_account_head
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_account_head`;
+CREATE TABLE `jsh_account_head` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型(支出/收入/收款/付款/转账)',
+ `organ_id` bigint(0) NULL DEFAULT NULL COMMENT '单位Id(收款/付款单位)',
+ `hands_person_id` bigint(0) NULL DEFAULT NULL COMMENT '经手人id',
+ `creator` bigint(0) NULL DEFAULT NULL COMMENT '操作员',
+ `change_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '变动金额(优惠/收款/付款/实付)',
+ `discount_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '优惠金额',
+ `total_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '合计金额',
+ `account_id` bigint(0) NULL DEFAULT NULL COMMENT '账户(收款/付款)',
+ `bill_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单据编号',
+ `bill_time` datetime(0) NULL DEFAULT NULL COMMENT '单据日期',
+ `remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `file_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件名称',
+ `status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态,0未审核、1已审核、9审核中',
+ `source` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '单据来源,0-pc,1-手机',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK9F4C0D8DB610FC06`(`organ_id`) USING BTREE,
+ INDEX `FK9F4C0D8DAAE50527`(`account_id`) USING BTREE,
+ INDEX `FK9F4C0D8DC4170B37`(`hands_person_id`) USING BTREE,
+ INDEX `bill_no`(`bill_no`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 127 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '财务主表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_account_item
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_account_item`;
+CREATE TABLE `jsh_account_item` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `header_id` bigint(0) NOT NULL COMMENT '表头Id',
+ `account_id` bigint(0) NULL DEFAULT NULL COMMENT '账户Id',
+ `in_out_item_id` bigint(0) NULL DEFAULT NULL COMMENT '收支项目Id',
+ `bill_id` bigint(0) NULL DEFAULT NULL COMMENT '单据id',
+ `need_debt` decimal(24, 6) NULL DEFAULT NULL COMMENT '应收欠款',
+ `finish_debt` decimal(24, 6) NULL DEFAULT NULL COMMENT '已收欠款',
+ `each_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '单项金额',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单据备注',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK9F4CBAC0AAE50527`(`account_id`) USING BTREE,
+ INDEX `FK9F4CBAC0C5FE6007`(`header_id`) USING BTREE,
+ INDEX `FK9F4CBAC0D203EDC5`(`in_out_item_id`) USING BTREE,
+ INDEX `bill_id`(`bill_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '财务子表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_depot
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_depot`;
+CREATE TABLE `jsh_depot` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '仓库名称',
+ `address` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '仓库地址',
+ `warehousing` decimal(24, 6) NULL DEFAULT NULL COMMENT '仓储费',
+ `truckage` decimal(24, 6) NULL DEFAULT NULL COMMENT '搬运费',
+ `type` int(0) NULL DEFAULT NULL COMMENT '类型',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
+ `principal` bigint(0) NULL DEFAULT NULL COMMENT '负责人',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ `is_default` bit(1) NULL DEFAULT NULL COMMENT '是否默认',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '仓库表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_depot
+-- ----------------------------
+INSERT INTO `jsh_depot` VALUES (14, '仓库1', 'dizhi', 12.000000, 12.000000, 0, '1', '描述', 131, b'1', 63, '0', b'1');
+INSERT INTO `jsh_depot` VALUES (15, '仓库2', '地址100', 555.000000, 666.000000, 0, '2', 'dfdf', 131, b'1', 63, '0', b'0');
+INSERT INTO `jsh_depot` VALUES (17, '仓库3', '123123', 123.000000, 123.000000, 0, '3', '123', 131, b'1', 63, '0', b'0');
+
+-- ----------------------------
+-- Table structure for jsh_depot_head
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_depot_head`;
+CREATE TABLE `jsh_depot_head` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型(出库/入库)',
+ `sub_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出入库分类',
+ `default_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '初始票据号',
+ `number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '票据号',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `oper_time` datetime(0) NULL DEFAULT NULL COMMENT '出入库时间',
+ `organ_id` bigint(0) NULL DEFAULT NULL COMMENT '供应商id',
+ `creator` bigint(0) NULL DEFAULT NULL COMMENT '操作员',
+ `account_id` bigint(0) NULL DEFAULT NULL COMMENT '账户id',
+ `change_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '变动金额(收款/付款)',
+ `back_amount` decimal(24, 6) NULL DEFAULT NULL COMMENT '找零金额',
+ `total_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '合计金额',
+ `pay_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '付款类型(现金、记账等)',
+ `bill_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单据类型',
+ `remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `file_name` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件名称',
+ `sales_man` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '销售员(可以多个)',
+ `account_id_list` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多账户ID列表',
+ `account_money_list` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多账户金额列表',
+ `discount` decimal(24, 6) NULL DEFAULT NULL COMMENT '优惠率',
+ `discount_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '优惠金额',
+ `discount_last_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '优惠后金额',
+ `other_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '销售或采购费用合计',
+ `deposit` decimal(24, 6) NULL DEFAULT NULL COMMENT '订金',
+ `status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态,0未审核、1已审核、2完成采购|销售、3部分采购|销售、9审核中',
+ `purchase_status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '采购状态,0未采购、2完成采购、3部分采购',
+ `source` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '单据来源,0-pc,1-手机',
+ `link_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关联订单号',
+ `link_apply` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关联请购单',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK2A80F214B610FC06`(`organ_id`) USING BTREE,
+ INDEX `FK2A80F214AAE50527`(`account_id`) USING BTREE,
+ INDEX `number`(`number`) USING BTREE,
+ INDEX `link_number`(`link_number`) USING BTREE,
+ INDEX `creator`(`creator`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 277 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '单据主表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_depot_item
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_depot_item`;
+CREATE TABLE `jsh_depot_item` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `header_id` bigint(0) NOT NULL COMMENT '表头Id',
+ `material_id` bigint(0) NOT NULL COMMENT '商品Id',
+ `material_extend_id` bigint(0) NULL DEFAULT NULL COMMENT '商品扩展id',
+ `material_unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品单位',
+ `sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性',
+ `oper_number` decimal(24, 6) NULL DEFAULT NULL COMMENT '数量',
+ `basic_number` decimal(24, 6) NULL DEFAULT NULL COMMENT '基础数量,如kg、瓶',
+ `unit_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '单价',
+ `purchase_unit_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '采购单价',
+ `tax_unit_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '含税单价',
+ `all_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '金额',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `depot_id` bigint(0) NULL DEFAULT NULL COMMENT '仓库ID',
+ `another_depot_id` bigint(0) NULL DEFAULT NULL COMMENT '调拨时,对方仓库Id',
+ `tax_rate` decimal(24, 6) NULL DEFAULT NULL COMMENT '税率',
+ `tax_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '税额',
+ `tax_last_money` decimal(24, 6) NULL DEFAULT NULL COMMENT '价税合计',
+ `material_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品类型',
+ `sn_list` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '序列号列表',
+ `batch_number` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '批号',
+ `expiration_date` datetime(0) NULL DEFAULT NULL COMMENT '有效日期',
+ `link_id` bigint(0) NULL DEFAULT NULL COMMENT '关联明细id',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK2A819F475D61CCF7`(`material_id`) USING BTREE,
+ INDEX `FK2A819F474BB6190E`(`header_id`) USING BTREE,
+ INDEX `FK2A819F479485B3F5`(`depot_id`) USING BTREE,
+ INDEX `FK2A819F47729F5392`(`another_depot_id`) USING BTREE,
+ INDEX `material_extend_id`(`material_extend_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 334 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '单据子表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_function
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_function`;
+CREATE TABLE `jsh_function` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编号',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `parent_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上级编号',
+ `url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '链接',
+ `component` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件',
+ `state` bit(1) NULL DEFAULT NULL COMMENT '收缩',
+ `sort` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
+ `push_btn` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '功能按钮',
+ `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `url`(`url`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 262 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '功能模块表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_function
+-- ----------------------------
+INSERT INTO `jsh_function` VALUES (1, '0001', '系统管理', '0', '/system', '/layouts/TabLayout', b'1', '0910', b'1', '电脑版', '', 'setting', '0');
+INSERT INTO `jsh_function` VALUES (13, '000102', '角色管理', '0001', '/system/role', '/system/RoleList', b'0', '0130', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (14, '000103', '用户管理', '0001', '/system/user', '/system/UserList', b'0', '0140', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (15, '000104', '日志管理', '0001', '/system/log', '/system/LogList', b'0', '0160', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (16, '000105', '功能管理', '0001', '/system/function', '/system/FunctionList', b'0', '0166', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (18, '000109', '租户管理', '0001', '/system/tenant', '/system/TenantList', b'0', '0167', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (21, '0101', '商品管理', '0', '/material', '/layouts/TabLayout', b'0', '0620', b'1', '电脑版', NULL, 'shopping', '0');
+INSERT INTO `jsh_function` VALUES (22, '010101', '商品类别', '0101', '/material/material_category', '/material/MaterialCategoryList', b'0', '0230', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (23, '010102', '商品信息', '0101', '/material/material', '/material/MaterialList', b'0', '0240', b'1', '电脑版', '1,3', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (24, '0102', '基础资料', '0', '/systemA', '/layouts/TabLayout', b'0', '0750', b'1', '电脑版', NULL, 'appstore', '0');
+INSERT INTO `jsh_function` VALUES (25, '01020101', '供应商信息', '0102', '/system/vendor', '/system/VendorList', b'0', '0260', b'1', '电脑版', '1,3', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (26, '010202', '仓库信息', '0102', '/system/depot', '/system/DepotList', b'0', '0270', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (31, '010206', '经手人管理', '0102', '/system/person', '/system/PersonList', b'0', '0284', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (32, '0502', '采购管理', '0', '/bill', '/layouts/TabLayout', b'0', '0330', b'1', '电脑版', '', 'retweet', '0');
+INSERT INTO `jsh_function` VALUES (33, '050201', '采购入库', '0502', '/bill/purchase_in', '/bill/PurchaseInList', b'0', '0340', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (38, '0603', '销售管理', '0', '/billB', '/layouts/TabLayout', b'0', '0390', b'1', '电脑版', '', 'shopping-cart', '0');
+INSERT INTO `jsh_function` VALUES (40, '080107', '调拨出库', '0801', '/bill/allocation_out', '/bill/AllocationOutList', b'0', '0807', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (41, '060303', '销售出库', '0603', '/bill/sale_out', '/bill/SaleOutList', b'0', '0394', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (44, '0704', '财务管理', '0', '/financial', '/layouts/TabLayout', b'0', '0450', b'1', '电脑版', '', 'money-collect', '0');
+INSERT INTO `jsh_function` VALUES (59, '030101', '进销存统计', '0301', '/report/in_out_stock_report', '/report/InOutStockReport', b'0', '0658', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (194, '010204', '收支项目', '0102', '/system/in_out_item', '/system/InOutItemList', b'0', '0282', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (195, '010205', '结算账户', '0102', '/system/account', '/system/AccountList', b'0', '0283', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (197, '070402', '收入单', '0704', '/financial/item_in', '/financial/ItemInList', b'0', '0465', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (198, '0301', '报表查询', '0', '/report', '/layouts/TabLayout', b'0', '0570', b'1', '电脑版', NULL, 'pie-chart', '0');
+INSERT INTO `jsh_function` VALUES (199, '050204', '采购退货', '0502', '/bill/purchase_back', '/bill/PurchaseBackList', b'0', '0345', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (200, '060305', '销售退货', '0603', '/bill/sale_back', '/bill/SaleBackList', b'0', '0396', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (201, '080103', '其它入库', '0801', '/bill/other_in', '/bill/OtherInList', b'0', '0803', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (202, '080105', '其它出库', '0801', '/bill/other_out', '/bill/OtherOutList', b'0', '0805', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (203, '070403', '支出单', '0704', '/financial/item_out', '/financial/ItemOutList', b'0', '0470', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (204, '070404', '收款单', '0704', '/financial/money_in', '/financial/MoneyInList', b'0', '0475', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (205, '070405', '付款单', '0704', '/financial/money_out', '/financial/MoneyOutList', b'0', '0480', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (206, '070406', '转账单', '0704', '/financial/giro', '/financial/GiroList', b'0', '0490', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (207, '030102', '账户统计', '0301', '/report/account_report', '/report/AccountReport', b'0', '0610', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (208, '030103', '采购统计', '0301', '/report/buy_in_report', '/report/BuyInReport', b'0', '0620', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (209, '030104', '销售统计', '0301', '/report/sale_out_report', '/report/SaleOutReport', b'0', '0630', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (210, '040102', '零售出库', '0401', '/bill/retail_out', '/bill/RetailOutList', b'0', '0405', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (211, '040104', '零售退货', '0401', '/bill/retail_back', '/bill/RetailBackList', b'0', '0407', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (212, '070407', '收预付款', '0704', '/financial/advance_in', '/financial/AdvanceInList', b'0', '0495', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (217, '01020102', '客户信息', '0102', '/system/customer', '/system/CustomerList', b'0', '0262', b'1', '电脑版', '1,3', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (218, '01020103', '会员信息', '0102', '/system/member', '/system/MemberList', b'0', '0263', b'1', '电脑版', '1,3', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (220, '010103', '多单位', '0101', '/system/unit', '/system/UnitList', b'0', '0245', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (225, '0401', '零售管理', '0', '/billC', '/layouts/TabLayout', b'0', '0101', b'1', '电脑版', '', 'gift', '0');
+INSERT INTO `jsh_function` VALUES (226, '030106', '入库明细', '0301', '/report/in_detail', '/report/InDetail', b'0', '0640', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (227, '030107', '出库明细', '0301', '/report/out_detail', '/report/OutDetail', b'0', '0645', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (228, '030108', '入库汇总', '0301', '/report/in_material_count', '/report/InMaterialCount', b'0', '0650', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (229, '030109', '出库汇总', '0301', '/report/out_material_count', '/report/OutMaterialCount', b'0', '0655', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (232, '080109', '组装单', '0801', '/bill/assemble', '/bill/AssembleList', b'0', '0809', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (233, '080111', '拆卸单', '0801', '/bill/disassemble', '/bill/DisassembleList', b'0', '0811', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (234, '000105', '系统配置', '0001', '/system/system_config', '/system/SystemConfigList', b'0', '0164', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (235, '030110', '客户对账', '0301', '/report/customer_account', '/report/CustomerAccount', b'0', '0660', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (236, '000106', '商品属性', '0001', '/material/material_property', '/material/MaterialPropertyList', b'0', '0163', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (237, '030111', '供应商对账', '0301', '/report/vendor_account', '/report/VendorAccount', b'0', '0665', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (239, '0801', '仓库管理', '0', '/billD', '/layouts/TabLayout', b'0', '0420', b'1', '电脑版', '', 'hdd', '0');
+INSERT INTO `jsh_function` VALUES (241, '050202', '采购订单', '0502', '/bill/purchase_order', '/bill/PurchaseOrderList', b'0', '0335', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (242, '060301', '销售订单', '0603', '/bill/sale_order', '/bill/SaleOrderList', b'0', '0392', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (243, '000108', '机构管理', '0001', '/system/organization', '/system/OrganizationList', b'1', '0150', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (244, '030112', '库存预警', '0301', '/report/stock_warning_report', '/report/StockWarningReport', b'0', '0670', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (245, '000107', '插件管理', '0001', '/system/plugin', '/system/PluginList', b'0', '0170', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (246, '030113', '商品库存', '0301', '/report/material_stock', '/report/MaterialStock', b'0', '0605', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (247, '010105', '多属性', '0101', '/material/material_attribute', '/material/MaterialAttributeList', b'0', '0250', b'1', '电脑版', '1', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (248, '030150', '调拨明细', '0301', '/report/allocation_detail', '/report/AllocationDetail', b'0', '0646', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (258, '000112', '平台配置', '0001', '/system/platform_config', '/system/PlatformConfigList', b'0', '0175', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (259, '030105', '零售统计', '0301', '/report/retail_out_report', '/report/RetailOutReport', b'0', '0615', b'1', '电脑版', '', 'profile', '0');
+INSERT INTO `jsh_function` VALUES (261, '050203', '请购单', '0502', '/bill/purchase_apply', '/bill/PurchaseApplyList', b'0', '0330', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+
+-- ----------------------------
+-- Table structure for jsh_in_out_item
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_in_out_item`;
+CREATE TABLE `jsh_in_out_item` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
+ `remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 28 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '收支项目' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_in_out_item
+-- ----------------------------
+INSERT INTO `jsh_in_out_item` VALUES (21, '快递费', '支出', '', b'1', NULL, 63, '0');
+INSERT INTO `jsh_in_out_item` VALUES (22, '房租收入', '收入', '', b'1', NULL, 63, '0');
+INSERT INTO `jsh_in_out_item` VALUES (23, '利息收入', '收入', '收入', b'1', NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_log
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_log`;
+CREATE TABLE `jsh_log` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `user_id` bigint(0) NULL DEFAULT NULL COMMENT '用户id',
+ `operation` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作模块名称',
+ `client_ip` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '客户端IP',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `status` tinyint(0) NULL DEFAULT NULL COMMENT '操作状态 0==成功,1==失败',
+ `content` varchar(5000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '详情',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FKF2696AA13E226853`(`user_id`) USING BTREE,
+ INDEX `create_time`(`create_time`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 7608 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_material
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material`;
+CREATE TABLE `jsh_material` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `category_id` bigint(0) NULL DEFAULT NULL COMMENT '产品类型id',
+ `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `mfrs` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '制造商',
+ `model` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '型号',
+ `standard` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '规格',
+ `brand` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '品牌',
+ `mnemonic` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '助记码',
+ `color` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '颜色',
+ `unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '单位-单个',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `img_name` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片名称',
+ `unit_id` bigint(0) NULL DEFAULT NULL COMMENT '单位Id',
+ `expiry_num` int(0) NULL DEFAULT NULL COMMENT '保质期天数',
+ `weight` decimal(24, 6) NULL DEFAULT NULL COMMENT '基础重量(kg)',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用 0-禁用 1-启用',
+ `other_field1` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自定义1',
+ `other_field2` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自定义2',
+ `other_field3` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自定义3',
+ `enable_serial_number` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否开启序列号,0否,1是',
+ `enable_batch_number` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否开启批号,0否,1是',
+ `position` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '仓位货架',
+ `attribute` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性信息',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK675951272AB6672C`(`category_id`) USING BTREE,
+ INDEX `UnitId`(`unit_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 620 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_material
+-- ----------------------------
+INSERT INTO `jsh_material` VALUES (568, 17, '商品1', '制1', 'sp1', '', NULL, NULL, '', '个', '', NULL, NULL, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (569, 17, '商品2', '', 'sp2', '', NULL, NULL, '', '只', '', NULL, NULL, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (570, 17, '商品3', '', 'sp3', '', NULL, NULL, '', '个', '', NULL, NULL, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (577, NULL, '商品8', '', 'sp8', '', NULL, NULL, '', '', '', NULL, 15, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (579, 21, '商品17', '', 'sp17', '', NULL, NULL, '', '', '', NULL, 15, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (586, 17, '序列号商品测试', '', 'xlh123', '', NULL, NULL, '', '个', '', NULL, NULL, NULL, NULL, b'1', '', '', '', '1', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (587, 17, '商品test1', '南通中远', '', 'test1', NULL, NULL, '', '个', '', NULL, NULL, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (588, 21, '商品200', 'fafda', 'weqwe', '300ml', NULL, NULL, '红色', '个', 'aaaabbbbb', NULL, NULL, NULL, NULL, b'1', '', '', '', '0', '0', NULL, NULL, 63, '0');
+INSERT INTO `jsh_material` VALUES (619, NULL, '衣服', NULL, NULL, NULL, NULL, NULL, NULL, '件', NULL, '', NULL, NULL, NULL, b'1', NULL, NULL, NULL, '0', '0', NULL, NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_material_attribute
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_attribute`;
+CREATE TABLE `jsh_material_attribute` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT,
+ `attribute_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '属性名',
+ `attribute_value` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '属性值',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品属性表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_material_attribute
+-- ----------------------------
+INSERT INTO `jsh_material_attribute` VALUES (1, '多颜色', '红色|橙色|黄色|绿色|蓝色|紫色', 63, '0');
+INSERT INTO `jsh_material_attribute` VALUES (2, '多尺寸', 'S|M|L|XL|XXL|XXXL', 63, '0');
+INSERT INTO `jsh_material_attribute` VALUES (3, '自定义1', '小米|华为', 63, '0');
+INSERT INTO `jsh_material_attribute` VALUES (4, '自定义2', NULL, 63, '0');
+INSERT INTO `jsh_material_attribute` VALUES (5, '自定义3', NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_material_category
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_category`;
+CREATE TABLE `jsh_material_category` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `category_level` smallint(0) NULL DEFAULT NULL COMMENT '等级',
+ `parent_id` bigint(0) NULL DEFAULT NULL COMMENT '上级id',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '显示顺序',
+ `serial_no` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编号',
+ `remark` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `FK3EE7F725237A77D8`(`parent_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品类型表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_material_category
+-- ----------------------------
+INSERT INTO `jsh_material_category` VALUES (17, '目录1', NULL, NULL, '11', 'wae12', 'eee', '2019-04-10 22:18:12', '2021-02-17 15:11:35', 63, '0');
+INSERT INTO `jsh_material_category` VALUES (21, '目录2', NULL, 17, '22', 'ada112', 'ddd', '2020-07-20 23:08:44', '2020-07-20 23:08:44', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_material_current_stock
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_current_stock`;
+CREATE TABLE `jsh_material_current_stock` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `material_id` bigint(0) NULL DEFAULT NULL COMMENT '产品id',
+ `depot_id` bigint(0) NULL DEFAULT NULL COMMENT '仓库id',
+ `current_number` decimal(24, 6) NULL DEFAULT NULL COMMENT '当前库存数量',
+ `current_unit_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '当前单价',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `material_id`(`material_id`) USING BTREE,
+ INDEX `depot_id`(`depot_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 26 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品当前库存' ROW_FORMAT = Compact;
+
+-- ----------------------------
+-- Records of jsh_material_current_stock
+-- ----------------------------
+INSERT INTO `jsh_material_current_stock` VALUES (19, 588, 14, 7.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (20, 568, 14, 2.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (21, 568, 15, 1.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (22, 570, 14, 8.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (23, 619, 14, 5.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (24, 619, 15, 0.000000, NULL, 63, '0');
+INSERT INTO `jsh_material_current_stock` VALUES (25, 619, 17, 0.000000, NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_material_extend
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_extend`;
+CREATE TABLE `jsh_material_extend` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `material_id` bigint(0) NULL DEFAULT NULL COMMENT '商品id',
+ `bar_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品条码',
+ `commodity_unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品单位',
+ `sku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多属性',
+ `purchase_decimal` decimal(24, 6) NULL DEFAULT NULL COMMENT '采购价格',
+ `commodity_decimal` decimal(24, 6) NULL DEFAULT NULL COMMENT '零售价格',
+ `wholesale_decimal` decimal(24, 6) NULL DEFAULT NULL COMMENT '销售价格',
+ `low_decimal` decimal(24, 6) NULL DEFAULT NULL COMMENT '最低售价',
+ `default_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '是否为默认单位,1是,0否',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期',
+ `create_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人编码',
+ `update_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人编码',
+ `update_time` bigint(0) NULL DEFAULT NULL COMMENT '更新时间戳',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `material_id`(`material_id`) USING BTREE,
+ INDEX `bar_code`(`bar_code`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品价格扩展' ROW_FORMAT = Compact;
+
+-- ----------------------------
+-- Records of jsh_material_extend
+-- ----------------------------
+INSERT INTO `jsh_material_extend` VALUES (1, 587, '1000', '个', NULL, 11.000000, 22.000000, 22.000000, 22.000000, '1', '2020-02-20 23:22:03', 'jsh', 'jsh', 1595263657135, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (2, 568, '1001', '个', NULL, 11.000000, 15.000000, 15.000000, 15.000000, '1', '2020-02-20 23:44:57', 'jsh', 'jsh', 1595265439418, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (3, 569, '1002', '只', NULL, 10.000000, 15.000000, 15.000000, 13.000000, '1', '2020-02-20 23:45:15', 'jsh', 'jsh', 1582213514731, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (4, 570, '1003', '个', NULL, 8.000000, 15.000000, 14.000000, 13.000000, '1', '2020-02-20 23:45:37', 'jsh', 'jsh', 1587657604430, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (5, 577, '1004', '个', NULL, 10.000000, 20.000000, 20.000000, 20.000000, '1', '2020-02-20 23:46:36', 'jsh', 'jsh', 1582213596494, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (6, 577, '1005', '箱', NULL, 120.000000, 240.000000, 240.000000, 240.000000, '0', '2020-02-20 23:46:36', 'jsh', 'jsh', 1582213596497, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (7, 579, '1006', '个', NULL, 20.000000, 30.000000, 30.000000, 30.000000, '1', '2020-02-20 23:47:04', 'jsh', 'jsh', 1595264270458, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (8, 579, '1007', '箱', NULL, 240.000000, 360.000000, 360.000000, 360.000000, '0', '2020-02-20 23:47:04', 'jsh', 'jsh', 1595264270466, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (9, 586, '1008', '个', NULL, 12.000000, 15.000000, 15.000000, 15.000000, '1', '2020-02-20 23:47:23', 'jsh', 'jsh', 1595254981896, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (10, 588, '1009', '个', NULL, 11.000000, 22.000000, 22.000000, 22.000000, '1', '2020-07-21 00:58:15', 'jsh', 'jsh', 1614699799073, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (36, 619, '1014', '件', '橙色,M', 12.000000, 15.000000, 14.000000, NULL, '1', '2021-07-28 01:00:20', 'jsh', 'jsh', 1627405220316, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (37, 619, '1015', '件', '橙色,L', 12.000000, 15.000000, 14.000000, NULL, '0', '2021-07-28 01:00:20', 'jsh', 'jsh', 1627405220327, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (38, 619, '1016', '件', '绿色,M', 12.000000, 15.000000, 14.000000, NULL, '0', '2021-07-28 01:00:20', 'jsh', 'jsh', 1627405220336, 63, '0');
+INSERT INTO `jsh_material_extend` VALUES (39, 619, '1017', '件', '绿色,L', 12.000000, 15.000000, 14.000000, NULL, '0', '2021-07-28 01:00:20', 'jsh', 'jsh', 1627405220346, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_material_initial_stock
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_initial_stock`;
+CREATE TABLE `jsh_material_initial_stock` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `material_id` bigint(0) NULL DEFAULT NULL COMMENT '产品id',
+ `depot_id` bigint(0) NULL DEFAULT NULL COMMENT '仓库id',
+ `number` decimal(24, 6) NULL DEFAULT NULL COMMENT '初始库存数量',
+ `low_safe_stock` decimal(24, 6) NULL DEFAULT NULL COMMENT '最低库存数量',
+ `high_safe_stock` decimal(24, 6) NULL DEFAULT NULL COMMENT '最高库存数量',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `material_id`(`material_id`) USING BTREE,
+ INDEX `depot_id`(`depot_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 205 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品初始库存' ROW_FORMAT = Compact;
+
+-- ----------------------------
+-- Table structure for jsh_material_property
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_material_property`;
+CREATE TABLE `jsh_material_property` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `native_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '原始名称',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '是否启用',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `another_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '别名',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '产品扩展字段表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_msg
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_msg`;
+CREATE TABLE `jsh_msg` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `msg_title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息标题',
+ `msg_content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息内容',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息类型',
+ `user_id` bigint(0) NULL DEFAULT NULL COMMENT '接收人id',
+ `status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态,1未读 2已读',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息表' ROW_FORMAT = Compact;
+
+-- ----------------------------
+-- Records of jsh_msg
+-- ----------------------------
+INSERT INTO `jsh_msg` VALUES (2, '标题1', '内容1', '2019-09-10 00:11:39', '类型1', 63, '2', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_orga_user_rel
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_orga_user_rel`;
+CREATE TABLE `jsh_orga_user_rel` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `orga_id` bigint(0) NOT NULL COMMENT '机构id',
+ `user_id` bigint(0) NOT NULL COMMENT '用户id',
+ `user_blng_orga_dspl_seq` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户在所属机构中显示顺序',
+ `delete_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `updater` bigint(0) NULL DEFAULT NULL COMMENT '更新人',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `orga_id`(`orga_id`) USING BTREE,
+ INDEX `user_id`(`user_id`) USING BTREE,
+ INDEX `creator`(`creator`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '机构用户关系表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_orga_user_rel
+-- ----------------------------
+INSERT INTO `jsh_orga_user_rel` VALUES (10, 13, 131, '2', '0', '2019-12-28 12:13:15', 63, '2021-03-18 22:33:19', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (11, 12, 63, '15', '0', '2020-09-13 18:42:45', 63, '2021-03-19 00:11:40', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (12, 13, 135, '9', '0', '2021-03-18 22:24:25', 63, '2021-03-19 00:09:23', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (13, 13, 134, '1', '0', '2021-03-18 22:31:39', 63, '2021-03-18 23:59:55', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (14, 22, 133, '22', '0', '2021-03-18 22:31:44', 63, '2021-03-18 22:32:04', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (15, 12, 144, NULL, '0', '2021-03-19 00:00:40', 63, '2021-03-19 00:08:07', 63, 63);
+INSERT INTO `jsh_orga_user_rel` VALUES (16, 12, 145, NULL, '0', '2021-03-19 00:03:44', 63, '2021-03-19 00:03:44', 63, 63);
+
+-- ----------------------------
+-- Table structure for jsh_organization
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_organization`;
+CREATE TABLE `jsh_organization` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `org_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构编号',
+ `org_abr` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构简称',
+ `parent_id` bigint(0) NULL DEFAULT NULL COMMENT '父机构id',
+ `sort` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构显示顺序',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '机构表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_organization
+-- ----------------------------
+INSERT INTO `jsh_organization` VALUES (12, '001', '测试机构', NULL, '2', 'aaaa2', '2019-12-28 12:13:01', '2019-12-28 12:13:01', 63, '0');
+INSERT INTO `jsh_organization` VALUES (13, 'jg1', '机构1', 12, '3', '', '2020-07-21 00:09:57', '2020-07-21 00:10:22', 63, '0');
+INSERT INTO `jsh_organization` VALUES (14, '12', '机构2', 13, '4', '', '2020-07-21 22:45:42', '2021-02-15 22:18:30', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_person
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_person`;
+CREATE TABLE `jsh_person` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '经手人表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_person
+-- ----------------------------
+INSERT INTO `jsh_person` VALUES (14, '销售员', '小李', b'1', NULL, 63, '0');
+INSERT INTO `jsh_person` VALUES (15, '仓管员', '小军', b'1', NULL, 63, '0');
+INSERT INTO `jsh_person` VALUES (16, '财务员', '小夏', b'1', NULL, 63, '0');
+INSERT INTO `jsh_person` VALUES (17, '财务员', '小曹', b'1', NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_platform_config
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_platform_config`;
+CREATE TABLE `jsh_platform_config` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT,
+ `platform_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关键词',
+ `platform_key_info` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关键词名称',
+ `platform_value` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '值',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '平台参数' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_platform_config
+-- ----------------------------
+INSERT INTO `jsh_platform_config` VALUES (1, 'platform_name', '平台名称', '管伊佳ERP');
+INSERT INTO `jsh_platform_config` VALUES (2, 'activation_code', '激活码', '');
+INSERT INTO `jsh_platform_config` VALUES (3, 'platform_url', '官方网站', 'http://www.gyjerp.com/');
+INSERT INTO `jsh_platform_config` VALUES (4, 'bill_print_flag', '三联打印启用标记', '0');
+INSERT INTO `jsh_platform_config` VALUES (5, 'bill_print_url', '三联打印地址', '');
+INSERT INTO `jsh_platform_config` VALUES (6, 'pay_fee_url', '租户续费地址', '');
+INSERT INTO `jsh_platform_config` VALUES (7, 'register_flag', '注册启用标记', '1');
+INSERT INTO `jsh_platform_config` VALUES (8, 'app_activation_code', '手机端激活码', '');
+INSERT INTO `jsh_platform_config` VALUES (9, 'send_workflow_url', '发起流程地址', '');
+INSERT INTO `jsh_platform_config` VALUES (10, 'weixinUrl', '微信url', '');
+INSERT INTO `jsh_platform_config` VALUES (11, 'weixinAppid', '微信appid', '');
+INSERT INTO `jsh_platform_config` VALUES (12, 'weixinSecret', '微信secret', '');
+INSERT INTO `jsh_platform_config` VALUES (13, 'aliOss_endpoint', '阿里OSS-endpoint', '');
+INSERT INTO `jsh_platform_config` VALUES (14, 'aliOss_accessKeyId', '阿里OSS-accessKeyId', '');
+INSERT INTO `jsh_platform_config` VALUES (15, 'aliOss_accessKeySecret', '阿里OSS-accessKeySecret', '');
+INSERT INTO `jsh_platform_config` VALUES (16, 'aliOss_bucketName', '阿里OSS-bucketName', '');
+INSERT INTO `jsh_platform_config` VALUES (17, 'aliOss_linkUrl', '阿里OSS-linkUrl', '');
+INSERT INTO `jsh_platform_config` VALUES (18, 'bill_excel_url', '单据Excel地址', '');
+INSERT INTO `jsh_platform_config` VALUES (19, 'email_from', '邮件发送端-发件人', '');
+INSERT INTO `jsh_platform_config` VALUES (20, 'email_auth_code', '邮件发送端-授权码', '');
+INSERT INTO `jsh_platform_config` VALUES (21, 'email_smtp_host', '邮件发送端-SMTP服务器', '');
+INSERT INTO `jsh_platform_config` VALUES (22, 'checkcode_flag', '验证码启用标记', '1');
+
+-- ----------------------------
+-- Table structure for jsh_role
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_role`;
+CREATE TABLE `jsh_role` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
+ `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
+ `price_limit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '价格屏蔽 1-屏蔽采购价 2-屏蔽零售价 3-屏蔽销售价',
+ `value` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '值',
+ `description` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_role
+-- ----------------------------
+INSERT INTO `jsh_role` VALUES (4, '管理员', '全部数据', NULL, NULL, NULL, b'1', NULL, NULL, '0');
+INSERT INTO `jsh_role` VALUES (10, '租户', '全部数据', NULL, NULL, '', b'1', NULL, NULL, '0');
+INSERT INTO `jsh_role` VALUES (16, '销售经理', '全部数据', NULL, NULL, 'ddd', b'1', NULL, 63, '0');
+INSERT INTO `jsh_role` VALUES (17, '销售代表', '个人数据', NULL, NULL, 'rrr', b'1', NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_sequence
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_sequence`;
+CREATE TABLE `jsh_sequence` (
+ `seq_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '序列名称',
+ `min_value` bigint(0) NOT NULL COMMENT '最小值',
+ `max_value` bigint(0) NOT NULL COMMENT '最大值',
+ `current_val` bigint(0) NOT NULL COMMENT '当前值',
+ `increment_val` int(0) NOT NULL DEFAULT 1 COMMENT '增长步数',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ PRIMARY KEY (`seq_name`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '单据编号表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_sequence
+-- ----------------------------
+INSERT INTO `jsh_sequence` VALUES ('depot_number_seq', 1, 999999999999999999, 672, 1, '单据编号sequence');
+
+-- ----------------------------
+-- Table structure for jsh_serial_number
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_serial_number`;
+CREATE TABLE `jsh_serial_number` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `material_id` bigint(0) NULL DEFAULT NULL COMMENT '产品表id',
+ `depot_id` bigint(0) NULL DEFAULT NULL COMMENT '仓库id',
+ `serial_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '序列号',
+ `is_sell` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出',
+ `in_price` decimal(24, 6) NULL DEFAULT NULL COMMENT '入库单价',
+ `remark` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `creator` bigint(0) NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `updater` bigint(0) NULL DEFAULT NULL COMMENT '更新人',
+ `in_bill_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '入库单号',
+ `out_bill_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出库单号',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `material_id`(`material_id`) USING BTREE,
+ INDEX `depot_id`(`depot_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 110 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '序列号表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for jsh_supplier
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_supplier`;
+CREATE TABLE `jsh_supplier` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `supplier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '供应商名称',
+ `contacts` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人',
+ `phone_num` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系电话',
+ `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮箱',
+ `description` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `isystem` tinyint(0) NULL DEFAULT NULL COMMENT '是否系统自带 0==系统 1==非系统',
+ `type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `advance_in` decimal(24, 6) NULL DEFAULT 0.000000 COMMENT '预收款',
+ `begin_need_get` decimal(24, 6) NULL DEFAULT NULL COMMENT '期初应收',
+ `begin_need_pay` decimal(24, 6) NULL DEFAULT NULL COMMENT '期初应付',
+ `all_need_get` decimal(24, 6) NULL DEFAULT NULL COMMENT '累计应收',
+ `all_need_pay` decimal(24, 6) NULL DEFAULT NULL COMMENT '累计应付',
+ `fax` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '传真',
+ `telephone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机',
+ `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
+ `tax_num` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '纳税人识别号',
+ `bank_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开户行',
+ `account_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '账号',
+ `tax_rate` decimal(24, 6) NULL DEFAULT NULL COMMENT '税率',
+ `sort` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序',
+ `creator` bigint(0) NULL DEFAULT NULL COMMENT '操作员',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `type`(`type`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 90 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '供应商/客户信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_supplier
+-- ----------------------------
+INSERT INTO `jsh_supplier` VALUES (57, '供应商1', '小军', '12345678', '', '', NULL, '供应商', b'1', 0.000000, 0.000000, 0.000000, 0.000000, 4.000000, '', '15000000000', '地址1', '', '', '', 12.000000, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (58, '客户1', '小李', '12345678', '', '', NULL, '客户', b'1', 0.000000, 0.000000, 0.000000, -100.000000, NULL, '', '', '', '', '', '', 12.000000, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (59, '客户2', '小陈', '', '', '', NULL, '客户', b'1', 0.000000, 0.000000, 0.000000, 0.000000, NULL, '', '', '', '', '', '', NULL, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (60, '12312666', '小曹', '', '', '', NULL, '会员', b'1', 970.000000, 0.000000, 0.000000, NULL, NULL, '', '13000000000', '', '', '', '', NULL, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (68, '供应商3', '晓丽', '12345678', '', 'fasdfadf', NULL, '供应商', b'1', 0.000000, 0.000000, 0.000000, 0.000000, -35.000000, '', '13000000000', 'aaaa', '1341324', '', '', 13.000000, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (71, '客户3', '小周', '', '', '', NULL, '客户', b'1', 0.000000, 0.000000, 0.000000, 0.000000, NULL, '', '', '', '', '', '', NULL, NULL, 63, 63, '0');
+INSERT INTO `jsh_supplier` VALUES (74, '供应商5', '小季', '77779999', '', '', NULL, '供应商', b'1', 0.000000, 0.000000, 5.000000, 0.000000, 5.000000, '', '15806283912', '', '', '', '', 3.000000, NULL, 63, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_system_config
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_system_config`;
+CREATE TABLE `jsh_system_config` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `company_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司名称',
+ `company_contacts` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司联系人',
+ `company_address` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司地址',
+ `company_tel` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司电话',
+ `company_fax` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司传真',
+ `company_post_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司邮编',
+ `sale_agreement` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '销售协议',
+ `depot_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '仓库启用标记,0未启用,1启用',
+ `customer_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '客户启用标记,0未启用,1启用',
+ `minus_stock_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '负库存启用标记,0未启用,1启用',
+ `purchase_by_sale_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '以销定购启用标记,0未启用,1启用',
+ `multi_level_approval_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '多级审核启用标记,0未启用,1启用',
+ `multi_bill_type` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '流程类型,可多选',
+ `force_approval_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '强审核启用标记,0未启用,1启用',
+ `update_unit_price_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '更新单价启用标记,0未启用,1启用',
+ `over_link_bill_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '超出关联单据启用标记,0未启用,1启用',
+ `in_out_manage_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '出入库管理启用标记,0未启用,1启用',
+ `multi_account_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '多账户启用标记,0未启用,1启用',
+ `move_avg_price_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '移动平均价启用标记,0未启用,1启用',
+ `audit_print_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '先审核后打印启用标记,0未启用,1启用',
+ `zero_change_amount_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '零收付款启用标记,0未启用,1启用',
+ `customer_static_price_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '客户静态单价启用标记,0未启用,1启用',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统参数' ROW_FORMAT = Compact;
+
+-- ----------------------------
+-- Records of jsh_system_config
+-- ----------------------------
+INSERT INTO `jsh_system_config` VALUES (11, '公司test', '小李', '地址1', '12345678', NULL, NULL, '注:本单为我公司与客户约定账期内结款的依据,由客户或其单位员工签字生效,并承担法律责任。', '0', '0', '1', '0', '0', '', '0', '1', '0', '0', '0', '0', '0', '0', '0', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_tenant
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_tenant`;
+CREATE TABLE `jsh_tenant` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '用户id',
+ `login_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录名',
+ `user_num_limit` int(0) NULL DEFAULT NULL COMMENT '用户数量限制',
+ `type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '租户类型,0免费租户,1付费租户',
+ `enabled` bit(1) NULL DEFAULT b'1' COMMENT '启用 0-禁用 1-启用',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `expire_time` datetime(0) NULL DEFAULT NULL COMMENT '到期时间',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `create_time`(`create_time`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '租户' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_tenant
+-- ----------------------------
+INSERT INTO `jsh_tenant` VALUES (13, 63, 'jsh', 2000, '1', b'1', '2021-02-17 23:19:17', '2099-02-17 23:19:17', NULL, '0');
+
+-- ----------------------------
+-- Table structure for jsh_unit
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_unit`;
+CREATE TABLE `jsh_unit` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称,支持多单位',
+ `basic_unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '基础单位',
+ `other_unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '副单位',
+ `other_unit_two` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '副单位2',
+ `other_unit_three` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '副单位3',
+ `ratio` decimal(24, 3) NULL DEFAULT NULL COMMENT '比例',
+ `ratio_two` decimal(24, 3) NULL DEFAULT NULL COMMENT '比例2',
+ `ratio_three` decimal(24, 3) NULL DEFAULT NULL COMMENT '比例3',
+ `enabled` bit(1) NULL DEFAULT NULL COMMENT '启用',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '多单位表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_unit
+-- ----------------------------
+INSERT INTO `jsh_unit` VALUES (15, '个/(箱=12个)', '个', '箱', NULL, NULL, 12.000, NULL, NULL, b'1', 63, '0');
+INSERT INTO `jsh_unit` VALUES (19, '个/(盒=15个)', '个', '盒', NULL, NULL, 15.000, NULL, NULL, b'1', 63, '0');
+INSERT INTO `jsh_unit` VALUES (20, '盒/(箱=8盒)', '盒', '箱', NULL, NULL, 8.000, NULL, NULL, b'1', 63, '0');
+INSERT INTO `jsh_unit` VALUES (21, '瓶/(箱=12瓶)', '瓶', '箱', NULL, NULL, 12.000, NULL, NULL, b'1', 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_user
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_user`;
+CREATE TABLE `jsh_user` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户姓名--例如张三',
+ `login_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录用户名',
+ `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登陆密码',
+ `leader_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否经理,0否,1是',
+ `position` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '职位',
+ `department` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门',
+ `email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮箱',
+ `phonenum` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号码',
+ `ismanager` tinyint(0) NOT NULL DEFAULT 1 COMMENT '是否为管理者 0==管理者 1==员工',
+ `isystem` tinyint(0) NOT NULL DEFAULT 0 COMMENT '是否系统自带数据 ',
+ `status` tinyint(0) NULL DEFAULT 0 COMMENT '状态,0正常,2封禁',
+ `description` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户描述信息',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `weixin_open_id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '微信绑定',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 146 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_user
+-- ----------------------------
+INSERT INTO `jsh_user` VALUES (63, '测试用户', 'jsh', 'e10adc3949ba59abbe56e057f20f883e', '0', '主管', NULL, '666666@qq.com', '1123123123132', 1, 1, 0, '', NULL, NULL, 63, '0');
+INSERT INTO `jsh_user` VALUES (120, '管理员', 'admin', 'e10adc3949ba59abbe56e057f20f883e', '0', NULL, NULL, NULL, NULL, 1, 0, 0, NULL, NULL, NULL, 0, '0');
+INSERT INTO `jsh_user` VALUES (131, 'test123', 'test123', 'e10adc3949ba59abbe56e057f20f883e', '0', '总监', NULL, '7777777@qq.com', '', 1, 0, 0, '', NULL, NULL, 63, '0');
+
+-- ----------------------------
+-- Table structure for jsh_user_business
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_user_business`;
+CREATE TABLE `jsh_user_business` (
+ `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类别',
+ `key_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主id',
+ `value` varchar(10000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '值',
+ `btn_str` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '按钮权限',
+ `tenant_id` bigint(0) NULL DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `type`(`type`) USING BTREE,
+ INDEX `key_id`(`key_id`) USING BTREE,
+ INDEX `tenant_id`(`tenant_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 83 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户/角色/模块关系表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of jsh_user_business
+-- ----------------------------
+INSERT INTO `jsh_user_business` VALUES (5, 'RoleFunctions', '4', '[210][225][211][241][33][199][242][38][41][200][201][239][202][40][232][233][197][44][203][204][205][206][212][246][198][207][259][208][209][226][227][248][228][229][59][235][237][244][22][21][23][220][247][25][24][217][218][26][194][195][31][13][1][14][243][15][234][16][18][236][245][258][261][32]', '[{\"funId\":13,\"btnStr\":\"1\"},{\"funId\":14,\"btnStr\":\"1\"},{\"funId\":243,\"btnStr\":\"1\"},{\"funId\":234,\"btnStr\":\"1\"},{\"funId\":16,\"btnStr\":\"1\"},{\"funId\":18,\"btnStr\":\"1\"},{\"funId\":236,\"btnStr\":\"1\"},{\"funId\":245,\"btnStr\":\"1\"},{\"funId\":22,\"btnStr\":\"1\"},{\"funId\":23,\"btnStr\":\"1,3\"},{\"funId\":220,\"btnStr\":\"1\"},{\"funId\":247,\"btnStr\":\"1\"},{\"funId\":25,\"btnStr\":\"1,3\"},{\"funId\":217,\"btnStr\":\"1,3\"},{\"funId\":218,\"btnStr\":\"1,3\"},{\"funId\":26,\"btnStr\":\"1\"},{\"funId\":194,\"btnStr\":\"1\"},{\"funId\":195,\"btnStr\":\"1\"},{\"funId\":31,\"btnStr\":\"1\"},{\"funId\":261,\"btnStr\":\"1,2,7,3\"},{\"funId\":241,\"btnStr\":\"1,2,7,3\"},{\"funId\":33,\"btnStr\":\"1,2,7,3\"},{\"funId\":199,\"btnStr\":\"1,2,7,3\"},{\"funId\":242,\"btnStr\":\"1,2,7,3\"},{\"funId\":41,\"btnStr\":\"1,2,7,3\"},{\"funId\":200,\"btnStr\":\"1,2,7,3\"},{\"funId\":210,\"btnStr\":\"1,2,7,3\"},{\"funId\":211,\"btnStr\":\"1,2,7,3\"},{\"funId\":197,\"btnStr\":\"1,7,2,3\"},{\"funId\":203,\"btnStr\":\"1,7,2,3\"},{\"funId\":204,\"btnStr\":\"1,7,2,3\"},{\"funId\":205,\"btnStr\":\"1,7,2,3\"},{\"funId\":206,\"btnStr\":\"1,2,7,3\"},{\"funId\":212,\"btnStr\":\"1,7,2,3\"},{\"funId\":201,\"btnStr\":\"1,2,7,3\"},{\"funId\":202,\"btnStr\":\"1,2,7,3\"},{\"funId\":40,\"btnStr\":\"1,2,7,3\"},{\"funId\":232,\"btnStr\":\"1,2,7,3\"},{\"funId\":233,\"btnStr\":\"1,2,7,3\"}]', NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (6, 'RoleFunctions', '5', '[22][23][25][26][194][195][31][33][200][201][41][199][202]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (7, 'RoleFunctions', '6', '[22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]', '[{\"funId\":\"33\",\"btnStr\":\"4\"}]', NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (9, 'RoleFunctions', '7', '[168][13][12][16][14][15][189][18][19][132]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (10, 'RoleFunctions', '8', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187][247]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (11, 'RoleFunctions', '9', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187][188]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (12, 'UserRole', '1', '[5]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (13, 'UserRole', '2', '[6][7]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (14, 'UserDepot', '2', '[1][2][6][7]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (15, 'UserDepot', '1', '[1][2][5][6][7][10][12][14][15][17]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (16, 'UserRole', '63', '[10]', NULL, 63, '0');
+INSERT INTO `jsh_user_business` VALUES (18, 'UserDepot', '63', '[14][15]', NULL, 63, '0');
+INSERT INTO `jsh_user_business` VALUES (19, 'UserDepot', '5', '[6][45][46][50]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (20, 'UserRole', '5', '[5]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (21, 'UserRole', '64', '[13]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (22, 'UserDepot', '64', '[1]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (23, 'UserRole', '65', '[5]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (24, 'UserDepot', '65', '[1]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (25, 'UserCustomer', '64', '[5][2]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (26, 'UserCustomer', '65', '[6]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (27, 'UserCustomer', '63', '[58]', NULL, 63, '0');
+INSERT INTO `jsh_user_business` VALUES (28, 'UserDepot', '96', '[7]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (29, 'UserRole', '96', '[6]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (30, 'UserRole', '113', '[10]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (32, 'RoleFunctions', '10', '[210][225][211][261][32][241][33][199][242][38][41][200][201][239][202][40][232][233][197][44][203][204][205][206][212][246][198][207][259][208][209][226][227][248][228][229][59][235][237][244][22][21][23][220][247][25][24][217][218][26][194][195][31][13][14][243][15][234][236]', '[{\"funId\":13,\"btnStr\":\"1\"},{\"funId\":14,\"btnStr\":\"1\"},{\"funId\":243,\"btnStr\":\"1\"},{\"funId\":234,\"btnStr\":\"1\"},{\"funId\":236,\"btnStr\":\"1\"},{\"funId\":22,\"btnStr\":\"1\"},{\"funId\":23,\"btnStr\":\"1,3\"},{\"funId\":220,\"btnStr\":\"1\"},{\"funId\":247,\"btnStr\":\"1\"},{\"funId\":25,\"btnStr\":\"1,3\"},{\"funId\":217,\"btnStr\":\"1,3\"},{\"funId\":218,\"btnStr\":\"1,3\"},{\"funId\":26,\"btnStr\":\"1\"},{\"funId\":194,\"btnStr\":\"1\"},{\"funId\":195,\"btnStr\":\"1\"},{\"funId\":31,\"btnStr\":\"1\"},{\"funId\":261,\"btnStr\":\"1,2,7,3\"},{\"funId\":241,\"btnStr\":\"1,2,7,3\"},{\"funId\":33,\"btnStr\":\"1,2,7,3\"},{\"funId\":199,\"btnStr\":\"1,7,2,3\"},{\"funId\":242,\"btnStr\":\"1,2,7,3\"},{\"funId\":41,\"btnStr\":\"1,2,7,3\"},{\"funId\":200,\"btnStr\":\"1,2,7,3\"},{\"funId\":210,\"btnStr\":\"1,2,7,3\"},{\"funId\":211,\"btnStr\":\"1,2,7,3\"},{\"funId\":197,\"btnStr\":\"1,2,7,3\"},{\"funId\":203,\"btnStr\":\"1,7,2,3\"},{\"funId\":204,\"btnStr\":\"1,7,2,3\"},{\"funId\":205,\"btnStr\":\"1,2,7,3\"},{\"funId\":206,\"btnStr\":\"1,7,2,3\"},{\"funId\":212,\"btnStr\":\"1,2,7,3\"},{\"funId\":201,\"btnStr\":\"1,2,7,3\"},{\"funId\":202,\"btnStr\":\"1,2,7,3\"},{\"funId\":40,\"btnStr\":\"1,2,7,3\"},{\"funId\":232,\"btnStr\":\"1,2,7,3\"},{\"funId\":233,\"btnStr\":\"1,2,7,3\"}]', NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (34, 'UserRole', '115', '[10]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (35, 'UserRole', '117', '[10]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (36, 'UserDepot', '117', '[8][9]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (37, 'UserCustomer', '117', '[52]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (38, 'UserRole', '120', '[4]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (41, 'RoleFunctions', '12', '', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (48, 'RoleFunctions', '13', '[59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (51, 'UserRole', '74', '[10]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (52, 'UserDepot', '121', '[13]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (54, 'UserDepot', '115', '[13]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (56, 'UserCustomer', '115', '[56]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (57, 'UserCustomer', '121', '[56]', NULL, NULL, '0');
+INSERT INTO `jsh_user_business` VALUES (67, 'UserRole', '131', '[17]', NULL, 63, '0');
+INSERT INTO `jsh_user_business` VALUES (68, 'RoleFunctions', '16', '[210]', NULL, 63, '0');
+INSERT INTO `jsh_user_business` VALUES (69, 'RoleFunctions', '17', '[210][225][211][241][32][33][199][242][38][41][200][201][239][202][40][232][233][197][44][203][204][205][206][212]', '[{\"funId\":\"241\",\"btnStr\":\"1,2\"},{\"funId\":\"33\",\"btnStr\":\"1,2\"},{\"funId\":\"199\",\"btnStr\":\"1,2\"},{\"funId\":\"242\",\"btnStr\":\"1,2\"},{\"funId\":\"41\",\"btnStr\":\"1,2\"},{\"funId\":\"200\",\"btnStr\":\"1,2\"},{\"funId\":\"210\",\"btnStr\":\"1,2\"},{\"funId\":\"211\",\"btnStr\":\"1,2\"},{\"funId\":\"197\",\"btnStr\":\"1\"},{\"funId\":\"203\",\"btnStr\":\"1\"},{\"funId\":\"204\",\"btnStr\":\"1\"},{\"funId\":\"205\",\"btnStr\":\"1\"},{\"funId\":\"206\",\"btnStr\":\"1\"},{\"funId\":\"212\",\"btnStr\":\"1\"},{\"funId\":\"201\",\"btnStr\":\"1,2\"},{\"funId\":\"202\",\"btnStr\":\"1,2\"},{\"funId\":\"40\",\"btnStr\":\"1,2\"},{\"funId\":\"232\",\"btnStr\":\"1,2\"},{\"funId\":\"233\",\"btnStr\":\"1,2\"}]', 63, '0');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/docs/数据库更新记录-zyj.txt b/docs/数据库更新记录-zyj.txt
new file mode 100644
index 0000000..893bbd4
--- /dev/null
+++ b/docs/数据库更新记录-zyj.txt
@@ -0,0 +1,9 @@
+-- ----------------------------
+-- 时间:2026年1月27日
+-- 此次更新添加新字段
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+alter table jsh_depot_head add billing_status tinyint(2) DEFAULT '0' COMMENT '是否开票. 0-否, 1-是';
+alter table jsh_depot_head add total_price_tax decimal(24,6) DEFAULT NULL COMMENT '价税合计';
+alter table jsh_depot_head add invoice_tax_point varchar(20) DEFAULT NULL COMMENT '开票税点. 不包含%的纯数字, 13%就存入13;
+alter table jsh_depot_head add invoice_type tinyint(2) DEFAULT '0' COMMENT '发票类型. 0-专票, 1-普票';
\ No newline at end of file
diff --git a/docs/数据库更新记录-首次安装请勿使用.txt b/docs/数据库更新记录-首次安装请勿使用.txt
new file mode 100644
index 0000000..0d3fe7e
--- /dev/null
+++ b/docs/数据库更新记录-首次安装请勿使用.txt
@@ -0,0 +1,1747 @@
+---------------------------------------------------------------------------------------------------
+****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库****
+****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库****
+****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库****
+---------------------------------------------------------------------------------------------------
+
+
+-- ----------------------------
+-- 时间:2019年1月21日
+-- version:1.0.0
+-- 此次更新添加序列号功能
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+
+-- ----------------------------
+-- 添加序列号表
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_serial_number`;
+CREATE TABLE `jsh_serial_number` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `material_Id` bigint(20) DEFAULT NULL COMMENT '产品表id',
+ `serial_Number` varchar(64) DEFAULT NULL COMMENT '序列号',
+ `is_Sell` bit(1) DEFAULT 0 COMMENT '是否卖出,0未卖出,1卖出',
+ `remark` varchar(1024) DEFAULT NULL COMMENT '备注',
+ `delete_Flag` bit(1) DEFAULT 0 COMMENT '删除标记,0未删除,1删除',
+ `create_Time` datetime DEFAULT NULL COMMENT '创建时间',
+ `creator` bigint(20) DEFAULT NULL COMMENT '创建人',
+ `update_Time` datetime DEFAULT NULL COMMENT '更新时间',
+ `updater` bigint(20) DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`Id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='序列号表';
+
+-- ----------------------------
+-- 产品表新增字段是否启用序列号
+-- ----------------------------
+alter table jsh_material add enableSerialNumber bit(1) DEFAULT 0 COMMENT '是否开启序列号,0否,1是';
+-- ----------------------------
+-- 时间:2019年1月24日
+-- version:1.0.1
+-- 此次更新添加序列号菜单
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- ----------------------------
+-- 添加序列号菜单
+-- ----------------------------
+delete from `jsh_functions` where Name='序列号';
+INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) VALUES ('010104', '序列号', '0101', '../manage/serialNumber.html', b'0', '0246', b'1', '电脑版', '');
+-- ----------------------------
+-- 删除单据主表供应商id字段对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_3;
+-- ----------------------------
+-- 序列号表添加单据主表id字段,用于跟踪序列号流向
+-- ----------------------------
+alter table jsh_serial_number add depothead_Id bigint(20) DEFAULT null COMMENT '单据主表id,用于跟踪序列号流向';
+-- ----------------------------
+-- 修改商品表enableSerialNumber字段类型为varchar(1)
+-- ----------------------------
+alter table jsh_material change enableSerialNumber enableSerialNumber varchar(1) DEFAULT '0' COMMENT '是否开启序列号,0否,1是';
+-- ----------------------------
+-- 修改序列号表is_Sell字段类型为varchar(1)
+-- 修改序列号表delete_Flag字段类型为varchar(1)
+-- ----------------------------
+alter table jsh_serial_number change is_Sell is_Sell varchar(1) DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出';
+alter table jsh_serial_number change delete_Flag delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- ----------------------------
+-- 删除单据子表单据主表id字段对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_depot_item DROP FOREIGN KEY jsh_depot_item_ibfk_1;
+-- ----------------------------
+-- 时间:2019年2月1日
+-- version:1.0.2
+-- 此次更新添加sequence表,用于获取一个唯一的数值
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- ----------------------------
+-- 添加表tbl_sequence
+-- ----------------------------
+DROP TABLE IF EXISTS `tbl_sequence`;
+CREATE TABLE tbl_sequence (
+ seq_name VARCHAR(50) NOT NULL COMMENT '序列名称',
+ min_value bigint(20) NOT NULL COMMENT '最小值',
+ max_value bigint(20) NOT NULL COMMENT '最大值',
+ current_val bigint(20) NOT NULL COMMENT '当前值',
+ increment_val INT DEFAULT '1' NOT NULL COMMENT '增长步数',
+ remark VARCHAR(500) DEFAULT null COMMENT '备注',
+ PRIMARY KEY (seq_name)
+ )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sequence表';
+
+-- ----------------------------
+-- 添加表单据编号sequence
+-- 插入数据前判断,防止数据重复插入
+-- ----------------------------
+insert into tbl_sequence (seq_name, min_value, max_value, current_val, increment_val,remark)
+select 'depot_number_seq', 1, 999999999999999999, 1, 1,'单据编号sequence' from dual where not exists
+(select * from tbl_sequence where seq_name='depot_number_seq');
+-- ----------------------------
+-- 创建function _nextval() 用于获取当前序列号
+-- ----------------------------
+DROP FUNCTION IF EXISTS `_nextval`;
+DELIMITER ;;
+CREATE FUNCTION `_nextval`(name varchar(50)) RETURNS mediumtext CHARSET utf8
+begin
+declare _cur bigint;
+declare _maxvalue bigint; -- 接收最大值
+declare _increment int; -- 接收增长步数
+set _increment = (select increment_val from tbl_sequence where seq_name = name);
+set _maxvalue = (select max_value from tbl_sequence where seq_name = name);
+set _cur = (select current_val from tbl_sequence where seq_name = name for update);
+update tbl_sequence -- 更新当前值
+ set current_val = _cur + increment_val
+ where seq_name = name ;
+if(_cur + _increment >= _maxvalue) then -- 判断是都达到最大值
+ update tbl_sequence
+ set current_val = minvalue
+ where seq_name = name ;
+end if;
+return _cur;
+end
+;;
+DELIMITER ;
+
+-- ----------------------------
+-- 时间:2019年2月18日
+-- version:1.0.3
+-- 此次更新修改产品类型表jsh_materialcategory,添加一些字段
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- ----------------------------
+-- 产品类型表添加字段sort,显示顺序
+-- ----------------------------
+alter table jsh_materialcategory add sort varchar(10) DEFAULT null COMMENT '显示顺序';
+-- ----------------------------
+-- 产品类型表添加字段status,状态,0系统默认,1启用,2删除
+-- ----------------------------
+alter table jsh_materialcategory add status varchar(1) DEFAULT '0' COMMENT '状态,0系统默认,1启用,2删除';
+-- ----------------------------
+-- 产品类型表添加字段serial_no,编号
+-- ----------------------------
+alter table jsh_materialcategory add serial_no varchar(100) DEFAULT null COMMENT '编号';
+-- ----------------------------
+-- 产品类型表添加字段remark,备注
+-- ----------------------------
+alter table jsh_materialcategory add remark varchar(1024) DEFAULT null COMMENT '备注';
+-- ----------------------------
+-- 产品类型表添加字段create_time,创建时间
+-- ----------------------------
+alter table jsh_materialcategory add create_time datetime DEFAULT null COMMENT '创建时间';
+-- ----------------------------
+-- 产品类型表添加字段creator,创建人
+-- ----------------------------
+alter table jsh_materialcategory add creator bigint(20) DEFAULT null COMMENT '创建人';
+-- ----------------------------
+-- 产品类型表添加字段update_time,更新时间
+-- ----------------------------
+alter table jsh_materialcategory add update_time datetime DEFAULT null COMMENT '更新时间';
+-- ----------------------------
+-- 产品类型表添加字段updater,更新人
+-- ----------------------------
+alter table jsh_materialcategory add updater bigint(20) DEFAULT null COMMENT '更新人';
+
+-- ----------------------------
+-- 去掉jsh_materialcategory外键
+-- ----------------------------
+ALTER TABLE jsh_materialcategory DROP FOREIGN KEY FK3EE7F725237A77D8;
+
+-- ----------------------------
+-- 修改根目录父节点id为-1
+-- 设置根目录编号为1
+-- ----------------------------
+update jsh_materialcategory set ParentId='-1' where id='1';
+
+-- ----------------------------
+-- 删除礼品卡管理、礼品充值、礼品销售、礼品卡统计的功能数据
+-- ----------------------------
+delete from jsh_functions where id in (213,214,215,216);
+
+-- ----------------------------
+-- 新增采购订单、销售订单的功能数据
+-- 主键自增长,直接指定主键插入数据的方式可能会和本地数据冲突
+-- 插入数据前判断,防止数据重复插入
+-- ----------------------------
+insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`)
+select '050202', '采购订单', '0502', '../materials/purchase_orders_list.html', b'0', '0335',b'1', '电脑版', '' from dual where not exists
+(select * from jsh_functions where Number='050202' and PNumber='0502');
+insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`)
+select '060301', '销售订单', '0603', '../materials/sale_orders_list.html', b'0', '0392', b'1', '电脑版', '' from dual where not exists
+(select * from jsh_functions where Number='060301' and PNumber='0603');
+
+-- ----------------------------
+-- 改管理员的功能权限
+-- ----------------------------
+update jsh_userbusiness SET Type = 'RoleFunctions', KeyId = '4',
+Value = '[13][12][16][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][242][33][199][243][41][200][201][202][40][232][233][197][203][204][205][206][212]'
+where Id = 5;
+
+-- ----------------------------
+-- 时间:2019年2月25日
+-- version:1.0.4
+-- 此次更新仓库添加负责人信息,负责人信息从用户表获取
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- ----------------------------
+-- 仓库表添加字段principal,负责人
+-- ----------------------------
+alter table jsh_depot add principal bigint(20) DEFAULT null COMMENT '负责人';
+
+-- ----------------------------
+-- 时间:2019年3月6日
+-- version:1.0.5
+-- 此次更新
+-- 1、添加机构表
+-- 2、添加机构用户关系表
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- ----------------------------
+-- 添加机构表
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_organization`;
+CREATE TABLE `jsh_organization` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `org_no` varchar(20) DEFAULT NULL COMMENT '机构编号',
+ `org_full_name` varchar(500) DEFAULT NULL COMMENT '机构全称',
+ `org_abr` varchar(20) DEFAULT NULL COMMENT '机构简称',
+ `org_tpcd` varchar(9) DEFAULT NULL COMMENT '机构类型',
+ `org_stcd` char(1) DEFAULT NULL COMMENT '机构状态,1未营业、2正常营业、3暂停营业、4终止营业、5已除名',
+ `org_parent_no` varchar(20) DEFAULT NULL COMMENT '机构父节点编号',
+ `sort` varchar(20) DEFAULT NULL COMMENT '机构显示顺序',
+ remark VARCHAR(500) DEFAULT null COMMENT '备注',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `creator` bigint(20) DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `updater` bigint(20) DEFAULT NULL COMMENT '更新人',
+ `org_create_time` datetime DEFAULT NULL COMMENT '机构创建时间',
+ `org_stop_time` datetime DEFAULT NULL COMMENT '机构停运时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='机构表';
+-- ----------------------------
+-- 添加机构用户关系表
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_orga_user_rel`;
+CREATE TABLE `jsh_orga_user_rel` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `orga_id` bigint(20) NOT NULL COMMENT '机构id',
+ `user_id` bigint(20) NOT NULL COMMENT '用户id',
+ `user_blng_orga_dspl_seq` varchar(20) DEFAULT NULL COMMENT '用户在所属机构中显示顺序',
+ `delete_flag` char(1) DEFAULT 0 COMMENT '删除标记,0未删除,1删除',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `creator` bigint(20) DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `updater` bigint(20) DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='机构用户关系表';
+-- ----------------------------
+-- 添加机构管理菜单
+-- 插入数据前判断,防止数据重复插入
+-- ----------------------------
+INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`)
+select '000108', '机构管理', '0001', '../manage/organization.html', b'1', '0139', b'1', '电脑版', '' from dual where not exists
+(select * from jsh_functions where Number='000108' and PNumber='0001');
+-- ----------------------------
+-- 添加根机构
+-- 插入时判断对应数据是否存在,防止多次执行产生重复数据
+-- ----------------------------
+INSERT INTO jsh_organization (org_no, org_full_name, org_abr, org_tpcd, org_stcd, org_parent_no, sort, remark, create_time, creator, update_time, updater, org_create_time, org_stop_time)
+select '01', '根机构', '根机构', NULL, '2', '-1', '1', '根机构,初始化存在', NULL, NULL, NULL, NULL, NULL, NULL from dual where not exists
+(select * from jsh_organization where org_no='01' and org_abr='根机构' and org_parent_no='-1' );
+-- ----------------------------
+-- 时间:2019年3月9日
+-- version:1.0.6
+-- 此次更新
+-- 整改jsh_systemconfig表的字段
+-- ----------------------------
+alter table jsh_systemconfig drop type;
+alter table jsh_systemconfig drop name;
+alter table jsh_systemconfig drop value;
+alter table jsh_systemconfig drop description;
+alter table jsh_systemconfig add company_name varchar(50) DEFAULT null COMMENT '公司名称';
+alter table jsh_systemconfig add company_contacts varchar(20) DEFAULT null COMMENT '公司联系人';
+alter table jsh_systemconfig add company_address varchar(50) DEFAULT null COMMENT '公司地址';
+alter table jsh_systemconfig add company_tel varchar(20) DEFAULT null COMMENT '公司电话';
+alter table jsh_systemconfig add company_fax varchar(20) DEFAULT null COMMENT '公司传真';
+alter table jsh_systemconfig add company_post_code varchar(20) DEFAULT null COMMENT '公司邮编';
+delete from jsh_systemconfig;
+insert into jsh_systemconfig (`company_name`, `company_contacts`, `company_address`, `company_tel`, `company_fax`, `company_post_code`) values("南通jshERP公司","张三","南通市通州区某某路","0513-10101010","0513-18181818","226300");
+
+-- ----------------------------
+-- 时间:2019年3月9日
+-- version:1.0.7
+-- 改管理员的功能权限
+-- ----------------------------
+update jsh_userbusiness SET
+Value = '[13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]'
+where Id = 5;
+-- ----------------------------
+-- 给订单功能加审核和反审核的功能按钮权限
+-- ----------------------------
+update jsh_functions SET PushBtn = '3' where Number = '050202' and PNumber = '0502';
+update jsh_functions SET PushBtn = '3' where Number = '060301' and PNumber = '0603';
+-- ----------------------------
+-- 改管理员的按钮权限
+-- ----------------------------
+update jsh_userbusiness SET
+BtnStr = '[{"funId":"25","btnStr":"1"},{"funId":"217","btnStr":"1"},{"funId":"218","btnStr":"1"},{"funId":"241","btnStr":"3"},{"funId":"242","btnStr":"3"}]'
+where Id = 5;
+
+-- ----------------------------
+-- 时间:2019年3月10日
+-- version:1.0.8
+-- 改状态字段的类型,增加关联单据字段
+-- ----------------------------
+alter table jsh_depot_head change Status Status varchar(1) DEFAULT '0' COMMENT '状态,0未审核、1已审核、2已转采购|销售';
+alter table jsh_depot_head add `LinkNumber` varchar(50) DEFAULT null COMMENT '关联订单号';
+-- ----------------------------
+-- 时间:2019年3月12日
+-- version:1.0.9
+-- 此次更新
+-- 1、根据本地用户表中现有部门生成机构表数据,同时重建机构和用户的关联关系
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+DROP FUNCTION IF EXISTS `_buildOrgAndOrgUserRel`;
+DELIMITER ;;
+CREATE FUNCTION `_buildOrgAndOrgUserRel` (name varchar(50)) RETURNS mediumtext CHARSET utf8
+begin
+
+declare _org_full_name varchar(500); -- 机构全称
+declare _org_abr varchar(20); -- 机构简称
+declare _sort int default 0;
+declare _success_msg varchar(50) default '重建机构及机构用户关系成功'; -- 机构全称
+ -- 遍历数据结束标志
+declare done int DEFAULT 0;
+-- 获取用户表中唯一的部门信息列表
+declare orgCur cursor for select distinct department from jsh_user where department!='' and department is not null;
+
+ -- 将结束标志绑定到游标
+declare continue handler for not found set done = 1;
+ -- 循环部门信息列表在机构表插入数据
+ -- 打开游标
+ open orgCur;
+ -- 开始循环
+ read_loop: loop
+ -- 提取游标里的数据,这里只有一个,多个的话也一样;
+ fetch orgCur into _org_full_name;
+ -- 声明结束的时候
+ if done=1 then
+ leave read_loop;
+ end if;
+ -- 这里做你想做的循环的事件
+ if length(_org_full_name)<=20 then
+ set _org_abr=_org_full_name;
+ else
+ set _org_abr=left(_org_full_name,20);
+ end if;
+ set _sort=_sort+1;
+ insert into jsh_organization (org_full_name, org_abr, org_stcd, org_parent_no, sort, remark)
+ values (_org_full_name,_org_abr, '1', '01', _sort, '机构表初始化');
+ begin
+ declare _userId bigint;
+ declare _orgId bigint;
+ -- 遍历数据结束标志
+ declare ogrUserRelDone int DEFAULT 0;
+ -- 根据用户表和机构表部门关联关系,重建用户和机构关联关系
+ declare ogrUserRelCur cursor for select user.id as userId,org.id as orgId from jsh_user user,jsh_organization org
+ where 1=1 and user.department=org.org_full_name and user.department =_org_full_name;
+ -- 将结束标志绑定到游标
+ declare continue handler for not found set ogrUserRelDone = 1;
+ -- 打开游标
+ open ogrUserRelCur;
+ -- 开始循环
+ rel_read_loop: loop
+ -- 提取游标里的数据,这里只有一个,多个的话也一样;
+ fetch ogrUserRelCur into _userId,_orgId;
+ -- 声明结束的时候
+ if ogrUserRelDone=1 then
+ leave rel_read_loop;
+ end if;
+ insert into `jsh_orga_user_rel`(`orga_id`, `user_id`, `delete_flag`) VALUES (_orgId,_userId,'0');
+
+ end loop rel_read_loop;
+ -- 关闭游标
+ close ogrUserRelCur;
+ end;
+
+ end loop read_loop;
+ -- 关闭游标
+ close orgCur;
+
+-- 清空用户表中的部门信息
+update jsh_user set department=null;
+
+return _success_msg;
+end
+;;
+DELIMITER ;
+-- ----------------------------
+-- 初始化机构数据,重建机构用户关系
+-- ----------------------------
+select _buildOrgAndOrgUserRel('初始化机构数据,重建机构用户关系') from dual;
+-- ----------------------------
+-- 删除一次性函数
+-- ----------------------------
+DROP FUNCTION _buildOrgAndOrgUserRel;
+
+-- ----------------------------
+-- 时间:2019年3月13日
+-- version:1.0.10
+-- 此次更新
+-- 1、设置用户表的用户状态status默认值为0
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+
+alter table jsh_user change Status Status tinyint(4) DEFAULT '0' COMMENT '状态,0:正常,1:删除,2封禁';
+update jsh_user set status='0' where status is null;
+-- ----------------------------
+-- 设置根目录编号为1
+-- ----------------------------
+update jsh_materialcategory set serial_no='1' where id='1';
+
+-- ----------------------------
+-- 时间:2019年3月18日
+-- version:1.0.11
+-- 此次更新
+-- 1、批量增加大部分表的tenant_id租户字段
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+alter table jsh_account add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_accounthead add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_accountitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_asset add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_assetcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_assetname add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_depot add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_depot_head add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_depot_item add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_inoutitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_log add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_material add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_materialcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_orga_user_rel add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_organization add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_person add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_role add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_serial_number add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_supplier add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_systemconfig add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_unit add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+alter table jsh_user add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
+
+-- ----------------------------
+-- 时间:2019年3月27日
+-- version:1.0.12
+-- 此次更新
+-- 添加删除标记,将物理删除修改为逻辑删除
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+-- 角色表 jsh_role
+alter table jsh_role add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 用户 角色 模块关系表 jsh_userbusiness
+alter table jsh_userbusiness add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 功能模块表 jsh_functions
+alter table jsh_functions add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 应用表 jsh_app
+alter table jsh_app add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 产品表 jsh_material
+alter table jsh_material add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 产品扩展字段表 jsh_materialproperty
+alter table jsh_materialproperty add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 经手人表 jsh_person
+alter table jsh_person add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 供应商 客户信息表 jsh_supplier
+alter table jsh_supplier add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 系统参数表 jsh_systemconfig
+alter table jsh_systemconfig add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 多单位表 jsh_unit
+alter table jsh_unit add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 仓库表 jsh_depot
+alter table jsh_depot add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 账户信息表 jsh_account
+alter table jsh_account add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 财务主表 jsh_accounthead
+alter table jsh_accounthead add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 财务子表 jsh_accountitem
+alter table jsh_accountitem add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 资产记录表 jsh_asset
+alter table jsh_asset add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 资产类型表 jsh_assetcategory
+alter table jsh_assetcategory add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 资产信息表 jsh_assetname
+alter table jsh_assetname add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 单据主表 jsh_depot_head
+alter table jsh_depot_head add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 单据子表 jsh_depot_item
+alter table jsh_depot_item add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+-- 收支项目表 jsh_inoutitem
+alter table jsh_inoutitem add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+-- ----------------------------
+-- 时间:2019年4月11日
+-- version:1.0.13
+-- 此次更新
+-- 删除所有外键
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+
+-- ----------------------------
+-- 删除财务主表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DAAE50527;
+ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DB610FC06;
+ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DC4170B37;
+-- ----------------------------
+-- 删除财务子表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0AAE50527;
+ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0C5FE6007;
+ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0D203EDC5;
+-- ----------------------------
+-- 删除资产记录表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED27D23FE4;
+ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED3E226853;
+ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED61FE182C;
+ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED9B6CB285;
+ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690EDAD45B659;
+-- ----------------------------
+-- 删除资产信息表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_assetname DROP FOREIGN KEY FKA4ADCCF866BC8AD3;
+-- ----------------------------
+-- 删除单据主表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_depot_head DROP FOREIGN KEY FK2A80F214AAE50527;
+ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_1;
+ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_4;
+ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_5;
+-- ----------------------------
+-- 删除单据子表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_depot_item DROP FOREIGN KEY FK2A819F47729F5392;
+ALTER TABLE jsh_depot_item DROP FOREIGN KEY FK2A819F479485B3F5;
+ALTER TABLE jsh_depot_item DROP FOREIGN KEY jsh_depot_item_ibfk_2;
+-- ----------------------------
+-- 删除操作日志表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_log DROP FOREIGN KEY FKF2696AA13E226853;
+-- ----------------------------
+-- 删除产品表对应外键约束
+-- ----------------------------
+ALTER TABLE jsh_material DROP FOREIGN KEY FK675951272AB6672C;
+ALTER TABLE jsh_material DROP FOREIGN KEY jsh_material_ibfk_1;
+
+-- ----------------------------
+-- 时间:2019年4月30日
+-- version:1.0.14
+-- 此次更新
+-- 增加仓库默认功能 增加库存预警功能
+-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
+-- ----------------------------
+alter table jsh_depot add is_default bit(1) DEFAULT NULL COMMENT '是否默认';
+insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`)
+select '030112', '库存预警', '0301', '../reports/stock_warning_report.html', b'0', '0670', b'1', '电脑版', '' from dual where not exists
+(select * from jsh_functions where Number='030112' and PNumber='0301');
+
+-- ----------------------------
+-- 改管理员的功能权限
+-- ----------------------------
+update jsh_userbusiness SET Type = 'RoleFunctions', KeyId = '4',
+Value = '[13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]'
+where Id = 5;
+
+-- ----------------------------
+-- 给app的功能增加代号 在功能表增加个人信息
+-- ----------------------------
+update jsh_app SET Number = '02' where name='个人信息';
+insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`)
+select '02', '个人信息', '0', '', b'1', '0005', b'1', '电脑版', '' from dual where not exists
+(select * from jsh_functions where Number='02' and PNumber='0');
+
+-- ----------------------------
+-- 时间:2019年6月23日
+-- 增加新手引导模块
+-- ----------------------------
+INSERT INTO `jsh_app` VALUES ('28', '09', '新手引导', 'app', 'userHelp.png', '../user/userHelp.html', '1000', '500', '\0', '\0', '\0', 'dock', '210', '', '', '0');
+INSERT INTO `jsh_functions` VALUES ('246', '09', '新手引导', '0', '', '', '0115', '', '电脑版', '', '0');
+update jsh_userbusiness SET Value = '[3][6][7][22][23][24][25][26][27][28]'
+where Type = 'RoleAPP' and (KeyId = '4' or KeyId = '10');
+update jsh_userbusiness SET
+Value = '[245][13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]'
+where Type = 'RoleFunctions' and KeyId = '4';
+update jsh_userbusiness SET
+Value = '[245][13][243][14][15][234][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]'
+where Type = 'RoleFunctions' and KeyId = '10';
+
+
+-- ----------------------------
+-- 时间:2019年6月26日
+-- 删除多余的资产相关表
+-- ----------------------------
+drop table jsh_asset;
+drop table jsh_assetcategory;
+drop table jsh_assetname;
+
+
+-- ----------------------------
+-- 时间:2019年6月27日
+-- 增加租户表
+-- ----------------------------
+DROP TABLE IF EXISTS `jsh_tenant`;
+CREATE TABLE `jsh_tenant` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `tenant_id` bigint(20) DEFAULT NULL COMMENT '用户id',
+ `login_name` varchar(255) DEFAULT NULL COMMENT '登录名',
+ `user_num_limit` int(11) DEFAULT NULL COMMENT '用户数量限制',
+ `bills_num_limit` int(11) DEFAULT NULL COMMENT '单据数量限制',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8 COMMENT='租户';
+
+-- ----------------------------
+-- 时间:2019年6月27日
+-- 给租户表增加数据
+-- ----------------------------
+INSERT INTO `jsh_tenant` VALUES ('13', '63', 'jsh', '20', '2000', null);
+
+-- ----------------------------
+-- 时间:2019年7月10日
+-- 删除函数
+-- ----------------------------
+DROP FUNCTION IF EXISTS `_nextval`;
+
+-- ----------------------------
+-- 时间:2019年8月1日
+-- 增加仓库和客户的启用标记
+-- ----------------------------
+alter table jsh_systemconfig add customer_flag varchar(1) DEFAULT '0' COMMENT '客户启用标记,0未启用,1启用' after company_post_code;
+alter table jsh_systemconfig add depot_flag varchar(1) DEFAULT '0' COMMENT '仓库启用标记,0未启用,1启用' after company_post_code;
+
+-- ----------------------------
+-- 时间:2019年9月13日
+-- 给功能表增加icon字段
+-- ----------------------------
+alter table jsh_functions add icon varchar(50) DEFAULT NULL COMMENT '图标' after PushBtn;
+
+-- ----------------------------
+-- 时间:2019年9月13日
+-- 创建消息表
+-- ----------------------------
+CREATE TABLE `jsh_msg` (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+`msg_title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息标题' ,
+`msg_content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息内容' ,
+`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间' ,
+`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息类型' ,
+`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态,1未读 2已读' ,
+`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' ,
+`delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' ,
+PRIMARY KEY (`id`)
+)
+ENGINE=InnoDB
+DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
+COMMENT='消息表'
+AUTO_INCREMENT=2
+ROW_FORMAT=COMPACT
+;
+
+-- ----------------------------
+-- 时间:2019年9月13日
+-- 删除表 jsh_app databasechangelog databasechangeloglock
+-- ----------------------------
+drop table databasechangelog;
+drop table databasechangeloglock;
+drop table jsh_app;
+
+-- ----------------------------
+-- 时间:2019年11月28日
+-- 单据编号表-改表名
+-- ----------------------------
+ALTER TABLE tbl_sequence RENAME TO jsh_sequence;
+
+-- ----------------------------
+-- 增加产品初始库存表
+-- 时间 2019-11-28
+-- by jishenghua
+-- ----------------------------
+CREATE TABLE `jsh_material_stock` (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+`material_id` bigint(20) NULL DEFAULT NULL COMMENT '产品id' ,
+`depot_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id' ,
+`number` decimal(24,6) NULL DEFAULT NULL COMMENT '初始库存数量' ,
+`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' ,
+`delete_fag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' ,
+PRIMARY KEY (`id`)
+)
+ENGINE=InnoDB
+DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
+COMMENT='产品初始库存'
+AUTO_INCREMENT=48
+ROW_FORMAT=COMPACT
+;
+
+-- ----------------------------
+-- 增加商品扩展信息表
+-- 时间 2020-02-15
+-- by jishenghua
+-- ----------------------------
+CREATE TABLE `jsh_material_extend` (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+`material_id` bigint(20) NULL DEFAULT NULL COMMENT '商品id' ,
+`bar_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品条码' ,
+`commodity_unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品单位' ,
+`purchase_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '采购价格' ,
+`commodity_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '零售价格' ,
+`wholesale_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '销售价格' ,
+`low_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '最低售价' ,
+`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期' ,
+`create_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人编码' ,
+`update_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人编码' ,
+`update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间戳' ,
+`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' ,
+`delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' ,
+PRIMARY KEY (`id`)
+)
+ENGINE=InnoDB
+DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
+COMMENT='产品价格扩展'
+AUTO_INCREMENT=1
+ROW_FORMAT=COMPACT
+;
+
+-- ----------------------------
+-- 给单据明细表增加商品扩展id
+-- 时间 2020-02-16
+-- by jishenghua
+-- ----------------------------
+alter table jsh_depot_item add material_extend_id bigint(20) DEFAULT NULL COMMENT '商品扩展id' after MaterialId;
+
+-- ----------------------------
+-- 给单据主表删除字段ProjectId 和 AllocationProjectId
+-- 时间 2020-02-18
+-- by jishenghua
+-- ----------------------------
+alter table jsh_depot_head drop column ProjectId;
+alter table jsh_depot_head drop column AllocationProjectId;
+
+-- ----------------------------
+-- 给计量单位表增加基础单位、副单位、比例三个字段
+-- 时间 2020-03-24
+-- by jishenghua
+-- ----------------------------
+alter table jsh_unit add basic_unit varchar(50) DEFAULT NULL COMMENT '基础单位' after UName;
+alter table jsh_unit add other_unit varchar(50) DEFAULT NULL COMMENT '副单位' after basic_unit;
+alter table jsh_unit add ratio INT DEFAULT NULL COMMENT '比例' after other_unit;
+
+-- ----------------------------
+-- 时间:2020年03月31日
+-- by jishenghua
+-- 给用户表增加 登录用户名 字段
+-- ----------------------------
+alter table jsh_user change loginame login_name varchar(255) NOT NULL COMMENT '登录用户名';
+
+-- ----------------------------
+-- 时间:2020年04月12日
+-- by jishenghua
+-- 给功能表增加插件管理
+-- ----------------------------
+INSERT INTO `jsh_functions` VALUES (245,'000107', '插件管理', '0001', '/pages/manage/plugin.html', '\0', '0170', '', '电脑版', '', 'icon-notebook', '0');
+
+-- ----------------------------
+-- 时间:2020年04月25日
+-- by jishenghua
+-- 给商品扩展表增加 是否默认基础单位 字段
+-- ----------------------------
+alter table jsh_material_extend add default_flag VARCHAR(1) DEFAULT 1 COMMENT '是否为默认单位,1是,0否' after low_decimal;
+
+-- ----------------------------
+-- 时间:2020年05月04日
+-- by jishenghua
+-- 删除商品表的多价格相关的字段
+-- ----------------------------
+alter table jsh_material drop Packing;
+alter table jsh_material drop RetailPrice;
+alter table jsh_material drop LowPrice;
+alter table jsh_material drop PresetPriceOne;
+alter table jsh_material drop PresetPriceTwo;
+alter table jsh_material drop FirstOutUnit;
+alter table jsh_material drop FirstInUnit;
+alter table jsh_material drop PriceStrategy;
+
+-- ----------------------------
+-- 时间:2020年6月18日
+-- 增加负库存的启用标记
+-- ----------------------------
+alter table jsh_systemconfig add minus_stock_flag varchar(1) DEFAULT '0' COMMENT '负库存启用标记,0未启用,1启用' after customer_flag;
+
+-- ----------------------------
+-- 时间 2020年07月13日
+-- by jishenghua
+-- 增加产品当前库存表
+-- ----------------------------
+CREATE TABLE `jsh_material_current_stock` (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+`material_id` bigint(20) NULL DEFAULT NULL COMMENT '产品id' ,
+`depot_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id' ,
+`current_number` decimal(24,6) NULL DEFAULT NULL COMMENT '当前库存数量' ,
+`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' ,
+`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' ,
+PRIMARY KEY (`id`)
+)
+ENGINE=InnoDB
+DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
+COMMENT='产品当前库存'
+AUTO_INCREMENT=1
+ROW_FORMAT=COMPACT
+;
+
+-- --------------------------------------------------------
+-- 时间 2020年07月13日
+-- by jishenghua
+-- 修改jsh_material_stock的表名为jsh_material_initial_stock
+-- 修改jsh_material_initial_stock表的删除字段
+-- --------------------------------------------------------
+alter table jsh_material_stock rename to jsh_material_initial_stock;
+alter table jsh_material_initial_stock change delete_fag delete_flag varchar(1) NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+-- --------------------------------------------------------
+-- 时间 2020年07月20日
+-- by jishenghua
+-- 优化表和字段的格式
+-- --------------------------------------------------------
+alter table jsh_log change userID user_id bigint(20) DEFAULT NULL COMMENT '用户id';
+alter table jsh_log change clientIP client_ip varchar(50) DEFAULT NULL COMMENT '客户端IP';
+alter table jsh_log change createtime create_time datetime DEFAULT NULL COMMENT '创建时间';
+alter table jsh_log change contentdetails content varchar(1000) DEFAULT NULL COMMENT '详情';
+alter table jsh_log drop column remark;
+
+alter table jsh_materialcategory rename to jsh_material_category;
+alter table jsh_material_category change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_material_category change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_material_category change CategoryLevel category_level smallint(6) DEFAULT NULL COMMENT '等级';
+alter table jsh_material_category change ParentId parent_id bigint(20) DEFAULT NULL COMMENT '上级id';
+
+alter table jsh_materialproperty rename to jsh_material_property;
+alter table jsh_material_property change nativeName native_name varchar(50) DEFAULT NULL COMMENT '原始名称';
+alter table jsh_material_property change anotherName another_name varchar(50) DEFAULT NULL COMMENT '别名';
+alter table jsh_material_property change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_role change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_role change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_role change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_person change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_person change Type type varchar(20) DEFAULT NULL COMMENT '类型';
+alter table jsh_person change Name name varchar(50) DEFAULT NULL COMMENT '姓名';
+alter table jsh_person change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_systemconfig rename to jsh_system_config;
+alter table jsh_system_config change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_account change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_account change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_account change SerialNo serial_no varchar(50) DEFAULT NULL COMMENT '编号';
+alter table jsh_account change InitialAmount initial_amount decimal(24,6) DEFAULT NULL COMMENT '期初金额';
+alter table jsh_account change CurrentAmount current_amount decimal(24,6) DEFAULT NULL COMMENT '当前余额';
+alter table jsh_account change Remark remark varchar(100) DEFAULT NULL COMMENT '备注';
+alter table jsh_account change IsDefault is_default bit(1) DEFAULT NULL COMMENT '是否默认';
+alter table jsh_account change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_functions rename to jsh_function;
+alter table jsh_function change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_function change Number number varchar(50) DEFAULT NULL COMMENT '编号';
+alter table jsh_function change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_function change PNumber parent_number varchar(50) DEFAULT NULL COMMENT '上级编号';
+alter table jsh_function change URL url varchar(100) DEFAULT NULL COMMENT '链接';
+alter table jsh_function change State state bit(1) DEFAULT NULL COMMENT '收缩';
+alter table jsh_function change Sort sort varchar(50) DEFAULT NULL COMMENT '排序';
+alter table jsh_function change Enabled enabled bit(1) DEFAULT NULL COMMENT '启用';
+alter table jsh_function change Type type varchar(50) DEFAULT NULL COMMENT '类型';
+alter table jsh_function change PushBtn push_btn varchar(50) DEFAULT NULL COMMENT '功能按钮';
+alter table jsh_function change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_userbusiness rename to jsh_user_business;
+alter table jsh_user_business change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_user_business change Type type varchar(50) DEFAULT NULL COMMENT '类别';
+alter table jsh_user_business change KeyId key_id varchar(50) DEFAULT NULL COMMENT '主id';
+alter table jsh_user_business change Value value varchar(10000) DEFAULT NULL COMMENT '值';
+alter table jsh_user_business change BtnStr btn_str varchar(2000) DEFAULT NULL COMMENT '按钮权限';
+alter table jsh_user_business change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_unit change UName name varchar(50) DEFAULT NULL COMMENT '名称,支持多单位';
+alter table jsh_unit change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_inoutitem rename to jsh_in_out_item;
+alter table jsh_in_out_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_in_out_item change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_in_out_item change Type type varchar(20) DEFAULT NULL COMMENT '类型';
+alter table jsh_in_out_item change Remark remark varchar(100) DEFAULT NULL COMMENT '备注';
+alter table jsh_in_out_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_serial_number change material_Id material_id bigint(20) DEFAULT NULL COMMENT '产品表id';
+alter table jsh_serial_number change serial_Number serial_number varchar(64) DEFAULT NULL COMMENT '序列号';
+alter table jsh_serial_number change is_Sell is_sell varchar(1) DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出';
+alter table jsh_serial_number change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+alter table jsh_serial_number change create_Time create_time datetime DEFAULT NULL COMMENT '创建时间';
+alter table jsh_serial_number change update_Time update_time datetime DEFAULT NULL COMMENT '更新时间';
+alter table jsh_serial_number change depothead_Id depot_head_id bigint(20) DEFAULT NULL COMMENT '单据主表id,用于跟踪序列号流向';
+
+alter table jsh_supplier change phonenum phone_num varchar(30) DEFAULT NULL COMMENT '联系电话';
+alter table jsh_supplier change AdvanceIn advance_in decimal(24,6) DEFAULT '0.000000' COMMENT '预收款';
+alter table jsh_supplier change BeginNeedGet begin_need_get decimal(24,6) DEFAULT NULL COMMENT '期初应收';
+alter table jsh_supplier change BeginNeedPay begin_need_pay decimal(24,6) DEFAULT NULL COMMENT '期初应付';
+alter table jsh_supplier change AllNeedGet all_need_get decimal(24,6) DEFAULT NULL COMMENT '累计应收';
+alter table jsh_supplier change AllNeedPay all_need_pay decimal(24,6) DEFAULT NULL COMMENT '累计应付';
+alter table jsh_supplier change taxNum tax_num varchar(50) DEFAULT NULL COMMENT '纳税人识别号';
+alter table jsh_supplier change bankName bank_name varchar(50) DEFAULT NULL COMMENT '开户行';
+alter table jsh_supplier change accountNumber account_number varchar(50) DEFAULT NULL COMMENT '账号';
+alter table jsh_supplier change taxRate tax_rate decimal(24,6) DEFAULT NULL COMMENT '税率';
+alter table jsh_supplier change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_accounthead rename to jsh_account_head;
+alter table jsh_account_head change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_account_head change Type type varchar(50) DEFAULT NULL COMMENT '类型(支出/收入/收款/付款/转账)';
+alter table jsh_account_head change OrganId organ_id bigint(20) DEFAULT NULL COMMENT '单位Id(收款/付款单位)';
+alter table jsh_account_head change HandsPersonId hands_person_id bigint(20) DEFAULT NULL COMMENT '经手人id';
+alter table jsh_account_head change ChangeAmount change_amount decimal(24,6) DEFAULT NULL COMMENT '变动金额(优惠/收款/付款/实付)';
+alter table jsh_account_head change TotalPrice total_price decimal(24,6) DEFAULT NULL COMMENT '合计金额';
+alter table jsh_account_head change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户(收款/付款)';
+alter table jsh_account_head change BillNo bill_no varchar(50) DEFAULT NULL COMMENT '单据编号';
+alter table jsh_account_head change BillTime bill_time datetime DEFAULT NULL COMMENT '单据日期';
+alter table jsh_account_head change Remark remark varchar(100) DEFAULT NULL COMMENT '备注';
+alter table jsh_account_head change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_accountitem rename to jsh_account_item;
+alter table jsh_account_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_account_item change HeaderId header_id bigint(20) NOT NULL COMMENT '表头Id';
+alter table jsh_account_item change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户Id';
+alter table jsh_account_item change InOutItemId in_out_item_id bigint(20) DEFAULT NULL COMMENT '收支项目Id';
+alter table jsh_account_item change EachAmount each_amount decimal(24,6) DEFAULT NULL COMMENT '单项金额';
+alter table jsh_account_item change Remark remark varchar(100) DEFAULT NULL COMMENT '单据备注';
+alter table jsh_account_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_material change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_material change CategoryId category_id bigint(20) DEFAULT NULL COMMENT '产品类型id';
+alter table jsh_material change Name name varchar(50) DEFAULT NULL COMMENT '名称';
+alter table jsh_material change Mfrs mfrs varchar(50) DEFAULT NULL COMMENT '制造商';
+alter table jsh_material change SafetyStock safety_stock decimal(24,6) DEFAULT NULL COMMENT '安全存量(KG)';
+alter table jsh_material change Model model varchar(50) DEFAULT NULL COMMENT '型号';
+alter table jsh_material change Standard standard varchar(50) DEFAULT NULL COMMENT '规格';
+alter table jsh_material change Color color varchar(50) DEFAULT NULL COMMENT '颜色';
+alter table jsh_material change Unit unit varchar(50) DEFAULT NULL COMMENT '单位-单个';
+alter table jsh_material change Remark remark varchar(100) DEFAULT NULL COMMENT '备注';
+alter table jsh_material change UnitId unit_id bigint(20) DEFAULT NULL COMMENT '计量单位Id';
+alter table jsh_material change Enabled enabled bit(1) DEFAULT NULL COMMENT '启用 0-禁用 1-启用';
+alter table jsh_material change OtherField1 other_field1 varchar(50) DEFAULT NULL COMMENT '自定义1';
+alter table jsh_material change OtherField2 other_field2 varchar(50) DEFAULT NULL COMMENT '自定义2';
+alter table jsh_material change OtherField3 other_field3 varchar(50) DEFAULT NULL COMMENT '自定义3';
+alter table jsh_material change enableSerialNumber enable_serial_number varchar(1) DEFAULT '0' COMMENT '是否开启序列号,0否,1是';
+alter table jsh_material change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_depothead rename to jsh_depot_head;
+alter table jsh_depot_head change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_depot_head change Type type varchar(50) DEFAULT NULL COMMENT '类型(出库/入库)';
+alter table jsh_depot_head change SubType sub_type varchar(50) DEFAULT NULL COMMENT '出入库分类';
+alter table jsh_depot_head change DefaultNumber default_number varchar(50) DEFAULT NULL COMMENT '初始票据号';
+alter table jsh_depot_head change Number number varchar(50) DEFAULT NULL COMMENT '票据号';
+alter table jsh_depot_head change OperPersonName oper_person_name varchar(50) DEFAULT NULL COMMENT '操作员名字';
+alter table jsh_depot_head change CreateTime create_time datetime DEFAULT NULL COMMENT '创建时间';
+alter table jsh_depot_head change OperTime oper_time datetime DEFAULT NULL COMMENT '出入库时间';
+alter table jsh_depot_head change OrganId organ_id bigint(20) DEFAULT NULL COMMENT '供应商id';
+alter table jsh_depot_head change HandsPersonId hands_person_id bigint(20) DEFAULT NULL COMMENT '采购/领料-经手人id';
+alter table jsh_depot_head change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户id';
+alter table jsh_depot_head change ChangeAmount change_amount decimal(24,6) DEFAULT NULL COMMENT '变动金额(收款/付款)';
+alter table jsh_depot_head change TotalPrice total_price decimal(24,6) DEFAULT NULL COMMENT '合计金额';
+alter table jsh_depot_head change PayType pay_type varchar(50) DEFAULT NULL COMMENT '付款类型(现金、记账等)';
+alter table jsh_depot_head change Remark remark varchar(1000) DEFAULT NULL COMMENT '备注';
+alter table jsh_depot_head change Salesman sales_man varchar(50) DEFAULT NULL COMMENT '销售员(可以多个)';
+alter table jsh_depot_head change AccountIdList account_id_list varchar(50) DEFAULT NULL COMMENT '多账户ID列表';
+alter table jsh_depot_head change AccountMoneyList account_money_list varchar(200) DEFAULT NULL COMMENT '多账户金额列表';
+alter table jsh_depot_head change Discount discount decimal(24,6) DEFAULT NULL COMMENT '优惠率';
+alter table jsh_depot_head change DiscountMoney discount_money decimal(24,6) DEFAULT NULL COMMENT '优惠金额';
+alter table jsh_depot_head change DiscountLastMoney discount_last_money decimal(24,6) DEFAULT NULL COMMENT '优惠后金额';
+alter table jsh_depot_head change OtherMoney other_money decimal(24,6) DEFAULT NULL COMMENT '销售或采购费用合计';
+alter table jsh_depot_head change OtherMoneyList other_money_list varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目Id数组(包括快递、招待等)';
+alter table jsh_depot_head change OtherMoneyItem other_money_item varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目(包括快递、招待等)';
+alter table jsh_depot_head change AccountDay account_day int(10) DEFAULT NULL COMMENT '结算天数';
+alter table jsh_depot_head change Status status varchar(1) DEFAULT NULL COMMENT '状态,0未审核、1已审核、2已转采购|销售';
+alter table jsh_depot_head change LinkNumber link_number varchar(50) DEFAULT NULL COMMENT '关联订单号';
+alter table jsh_depot_head change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+alter table jsh_depotitem rename to jsh_depot_item;
+alter table jsh_depot_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键';
+alter table jsh_depot_item change HeaderId header_id bigint(20) NOT NULL COMMENT '表头Id';
+alter table jsh_depot_item change MaterialId material_id bigint(20) NOT NULL COMMENT '商品Id';
+alter table jsh_depot_item change MUnit material_unit varchar(20) DEFAULT NULL COMMENT '商品计量单位';
+alter table jsh_depot_item change OperNumber oper_number decimal(24,6) DEFAULT NULL COMMENT '数量';
+alter table jsh_depot_item change BasicNumber basic_number decimal(24,6) DEFAULT NULL COMMENT '基础数量,如kg、瓶';
+alter table jsh_depot_item change UnitPrice unit_price decimal(24,6) DEFAULT NULL COMMENT '单价';
+alter table jsh_depot_item change TaxUnitPrice tax_unit_price decimal(24,6) DEFAULT NULL COMMENT '含税单价';
+alter table jsh_depot_item change AllPrice all_price decimal(24,6) DEFAULT NULL COMMENT '金额';
+alter table jsh_depot_item change Remark remark varchar(200) DEFAULT NULL COMMENT '备注';
+alter table jsh_depot_item change Img img varchar(50) DEFAULT NULL COMMENT '图片';
+alter table jsh_depot_item change Incidentals incidentals decimal(24,6) DEFAULT NULL COMMENT '运杂费';
+alter table jsh_depot_item change DepotId depot_id bigint(20) DEFAULT NULL COMMENT '仓库ID';
+alter table jsh_depot_item change AnotherDepotId another_depot_id bigint(20) DEFAULT NULL COMMENT '调拨时,对方仓库Id';
+alter table jsh_depot_item change TaxRate tax_rate decimal(24,6) DEFAULT NULL COMMENT '税率';
+alter table jsh_depot_item change TaxMoney tax_money decimal(24,6) DEFAULT NULL COMMENT '税额';
+alter table jsh_depot_item change TaxLastMoney tax_last_money decimal(24,6) DEFAULT NULL COMMENT '价税合计';
+alter table jsh_depot_item change OtherField1 other_field1 varchar(50) DEFAULT NULL COMMENT '自定义字段1-名称';
+alter table jsh_depot_item change OtherField2 other_field2 varchar(50) DEFAULT NULL COMMENT '自定义字段2-型号';
+alter table jsh_depot_item change OtherField3 other_field3 varchar(50) DEFAULT NULL COMMENT '自定义字段3-制造商';
+alter table jsh_depot_item change OtherField4 other_field4 varchar(50) DEFAULT NULL COMMENT '自定义字段4-名称';
+alter table jsh_depot_item change OtherField5 other_field5 varchar(50) DEFAULT NULL COMMENT '自定义字段5-名称';
+alter table jsh_depot_item change MType material_type varchar(20) DEFAULT NULL COMMENT '商品类型';
+alter table jsh_depot_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+
+-- --------------------------------------------------------
+-- 时间 2020年09月13日
+-- by jishenghua
+-- 给单据表增加操作员字段,去掉经手头姓名字段
+-- --------------------------------------------------------
+alter table jsh_depot_head add creator bigint(20) DEFAULT NULL COMMENT '操作员' after hands_person_id;
+alter table jsh_account_head add creator bigint(20) DEFAULT NULL COMMENT '操作员' after hands_person_id;
+alter table jsh_depot_head drop column oper_person_name;
+update jsh_depot_head set creator=hands_person_id;
+
+
+-- --------------------------------------------------------
+-- 时间 2020年10月17日
+-- by jishenghua
+-- 增加平台表
+-- --------------------------------------------------------
+DROP TABLE IF EXISTS `jsh_platform_config`;
+CREATE TABLE `jsh_platform_config` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `platform_key` varchar(100) DEFAULT NULL COMMENT '关键词',
+ `platform_key_info` varchar(100) DEFAULT NULL COMMENT '关键词名称',
+ `platform_value` varchar(200) DEFAULT NULL COMMENT '值',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='平台参数';
+
+INSERT INTO `jsh_platform_config` VALUES ('1', 'platform_name', '平台名称', '管伊佳ERP');
+INSERT INTO `jsh_platform_config` VALUES ('2', 'activation_code', '激活码', null);
+
+-- --------------------------------------------------------
+-- 时间 2020年11月24日
+-- by jishenghua
+-- 给单据主表增加单据类型字段bill_type
+-- --------------------------------------------------------
+alter table jsh_depot_head add bill_type varchar(50) DEFAULT NULL COMMENT '单据类型' after pay_type;
+
+-- --------------------------------------------------------
+-- 时间 2021年1月19日
+-- by jishenghua
+-- 给功能表增加组件字段component
+-- --------------------------------------------------------
+alter table jsh_function add component varchar(100) DEFAULT NULL COMMENT '组件' after url;
+
+-- --------------------------------------------------------
+-- 时间 2021年2月13日
+-- by jishenghua
+-- 优化机构和商品类型表的字段
+-- --------------------------------------------------------
+alter table jsh_organization change org_parent_no parent_id bigint(20) DEFAULT NULL COMMENT '父机构id';
+alter table jsh_organization change org_stcd delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+alter table jsh_organization drop column org_tpcd;
+alter table jsh_organization drop column org_create_time;
+alter table jsh_organization drop column org_stop_time;
+alter table jsh_organization drop column creator;
+alter table jsh_organization drop column updater;
+alter table jsh_material_category drop column creator;
+alter table jsh_material_category drop column updater;
+alter table jsh_material_category change status delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除';
+update jsh_material_category set delete_flag='0';
+
+-- --------------------------------------------------------
+-- 时间 2021年6月1日
+-- by jishenghua
+-- 增加租户管理菜单
+-- --------------------------------------------------------
+INSERT INTO `jsh_function` (`id`, `number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('18', '000109', '租户管理', '0001', '/system/tenant', '/system/TenantList', b'0', '0167', b'1', '电脑版', '1', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2021年6月19日
+-- by jishenghua
+-- 更新jsh_platform_config数据
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` (`id`, `platform_key`, `platform_key_info`, `platform_value`) VALUES ('3', 'platform_url', '官方网站', 'http://www.huaxiaerp.com/');
+
+-- --------------------------------------------------------
+-- 时间 2021年6月20日
+-- by jishenghua
+-- 将库存状态报表改为进销存统计报表
+-- --------------------------------------------------------
+update jsh_function set name='进销存统计', sort='0658' where id=59;
+
+-- --------------------------------------------------------
+-- 时间 2021年6月20日
+-- by jishenghua
+-- 增加商品库存报表
+-- --------------------------------------------------------
+INSERT INTO `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('030113', '商品库存', '0301', '/report/material_stock', '/report/MaterialStock', b'0', '0605', b'1', '电脑版', '', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2021年6月29日
+-- by jishenghua
+-- 给jsh_account_item增加字段进销存单据id 应收欠款 已收欠款
+-- 给jsh_depot_head增加附件字段附件名称
+-- 给jsh_account_head增加附件字段附件名称 优惠金额
+-- --------------------------------------------------------
+alter table jsh_account_item add bill_id bigint(20) DEFAULT NULL COMMENT '进销存单据id' after in_out_item_id;
+alter table jsh_account_item add need_debt decimal(24,6) DEFAULT NULL COMMENT '应收欠款' after bill_id;
+alter table jsh_account_item add finish_debt decimal(24,6) DEFAULT NULL COMMENT '已收欠款' after need_debt;
+alter table jsh_depot_head add file_name varchar(1000) DEFAULT NULL COMMENT '附件名称' after remark;
+alter table jsh_account_head add file_name varchar(500) DEFAULT NULL COMMENT '附件名称' after remark;
+alter table jsh_account_head add discount_money decimal(24,6) DEFAULT NULL COMMENT '优惠金额' after change_amount;
+
+-- --------------------------------------------------------
+-- 时间 2021年7月1日
+-- by jishenghua
+-- 给商品表增加附件名称字段
+-- --------------------------------------------------------
+alter table jsh_material add img_name varchar(1000) DEFAULT NULL COMMENT '图片名称' after remark;
+
+-- --------------------------------------------------------
+-- 时间 2021年7月6日
+-- by jishenghua
+-- 给租户表增加字段enabled
+-- --------------------------------------------------------
+alter table jsh_tenant add enabled bit(1) DEFAULT 1 COMMENT '启用 0-禁用 1-启用' after bills_num_limit;
+
+-- --------------------------------------------------------
+-- 时间 2021年7月21日
+-- by jishenghua
+-- 增加商品属性表
+-- --------------------------------------------------------
+DROP TABLE IF EXISTS `jsh_material_attribute`;
+CREATE TABLE `jsh_material_attribute` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `attribute_field` varchar(50) DEFAULT NULL COMMENT '属性字段',
+ `attribute_name` varchar(50) DEFAULT NULL COMMENT '属性名',
+ `attribute_value` varchar(500) DEFAULT NULL COMMENT '属性值',
+ `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id',
+ `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='产品属性表';
+
+INSERT INTO `jsh_material_attribute` VALUES ('1', 'manyColor', '多颜色', '红色|橙色|黄色|绿色|蓝色|紫色', '63', '0');
+INSERT INTO `jsh_material_attribute` VALUES ('2', 'manySize', '多尺寸', 'S|M|L|XL|XXL|XXXL', '63', '0');
+INSERT INTO `jsh_material_attribute` VALUES ('3', 'other1', '自定义1', '小米|华为', '63', '0');
+INSERT INTO `jsh_material_attribute` VALUES ('4', 'other2', '自定义2', null, '63', '0');
+INSERT INTO `jsh_material_attribute` VALUES ('5', 'other3', '自定义3', null, '63', '0');
+
+-- --------------------------------------------------------
+-- 时间 2021年7月22日
+-- by jishenghua
+-- 增加多属性设置菜单
+-- --------------------------------------------------------
+INSERT INTO `jsh_function` (`id`, `number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('247', '010105', '多属性', '0101', '/material/material_attribute', '/material/MaterialAttributeList', '\0', '0250', '', '电脑版', '1', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2021年7月22日
+-- by jishenghua
+-- 移除机构表的全名字段
+-- 给商品扩展表加sku字段
+-- 给单据主表移除多余字段
+-- 给单据子表移除多余字段
+-- --------------------------------------------------------
+alter table jsh_organization drop column org_full_name;
+alter table jsh_material_extend add sku varchar(50) DEFAULT NULL COMMENT '多属性' after commodity_unit;
+alter table jsh_depot_head drop column hands_person_id;
+alter table jsh_depot_head drop column other_money_list;
+alter table jsh_depot_head drop column other_money_item;
+alter table jsh_depot_head drop column account_day;
+alter table jsh_depot_item drop column img;
+alter table jsh_depot_item drop column incidentals;
+alter table jsh_depot_item drop column other_field1;
+alter table jsh_depot_item drop column other_field2;
+alter table jsh_depot_item drop column other_field3;
+alter table jsh_depot_item drop column other_field4;
+alter table jsh_depot_item drop column other_field5;
+
+-- --------------------------------------------------------
+-- 时间 2021年7月27日
+-- by jishenghua
+-- 给单据子表加sku字段
+-- --------------------------------------------------------
+alter table jsh_depot_item add sku varchar(50) DEFAULT NULL COMMENT '多属性' after material_unit;
+
+-- --------------------------------------------------------
+-- 时间 2021年7月29日
+-- by jishenghua
+-- 增加调拨明细菜单
+-- --------------------------------------------------------
+INSERT INTO `jsh_function` VALUES ('248', '030150', '调拨明细', '0301', '/report/allocation_detail', '/report/AllocationDetail', '\0', '0646', '', '电脑版', '', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2021年8月24日
+-- by jishenghua
+-- 给租户表加sku字段
+-- 给租户表移除单据数量限制字段
+-- --------------------------------------------------------
+alter table jsh_tenant add type varchar(1) DEFAULT '0' COMMENT '租户类型,0免费租户,1付费租户' after bills_num_limit;
+alter table jsh_tenant drop column bills_num_limit;
+alter table jsh_tenant add expire_time datetime DEFAULT NULL COMMENT '到期时间' after create_time;
+
+-- --------------------------------------------------------
+-- 时间 2021年8月29日
+-- by jishenghua
+-- 给日志表的ip字段改长度
+-- --------------------------------------------------------
+alter table jsh_log change client_ip client_ip varchar(200) DEFAULT NULL COMMENT '客户端IP';
+
+-- --------------------------------------------------------
+-- 时间 2021年9月5日
+-- by jishenghua
+-- 给财务表增加状态字段,给历史数据赋值为0
+-- --------------------------------------------------------
+alter table jsh_account_head add status varchar(1) DEFAULT NULL COMMENT '状态,0未审核、1已审核' after file_name;
+update jsh_account_head set status=0;
+
+-- --------------------------------------------------------
+-- 时间 2021年9月12日
+-- by jishenghua
+-- 插入jsh_platform_config数据,控制是否显示三联打印
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` (`id`, `platform_key`, `platform_key_info`, `platform_value`) VALUES ('4', 'bill_print_flag', '三联打印启用标记', '0');
+INSERT INTO `jsh_platform_config` (`id`, `platform_key`, `platform_key_info`, `platform_value`) VALUES ('5', 'bill_print_url', '三联打印地址', '');
+
+-- --------------------------------------------------------
+-- 时间 2021年9月24日
+-- by jishenghua
+-- 修改单据主表的状态字段描述
+-- --------------------------------------------------------
+alter table jsh_depot_head change status status varchar(1) DEFAULT NULL COMMENT '状态,0未审核、1已审核、2完成采购|销售、3部分采购|销售';
+
+-- --------------------------------------------------------
+-- 时间 2021年9月27日
+-- by jishenghua
+-- 给商品表和单据字表增加字段
+-- --------------------------------------------------------
+alter table jsh_material add enable_batch_number varchar(1) DEFAULT 0 COMMENT '是否开启批号,0否,1是' after enable_serial_number;
+alter table jsh_material add expiry_num int(10) DEFAULT NULL COMMENT '保质期天数' after unit_id;
+alter table jsh_depot_item add sn_list varchar(2000) DEFAULT NULL COMMENT '序列号列表' after material_type;
+alter table jsh_depot_item add batch_number varchar(100) DEFAULT NULL COMMENT '批号' after sn_list;
+alter table jsh_depot_item add expiration_date datetime DEFAULT NULL COMMENT '有效日期' after batch_number;
+
+-- --------------------------------------------------------
+-- 时间 2021年9月27日
+-- by jishenghua
+-- 插入jsh_platform_config数据,配置租户续费地址
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('pay_fee_url', '租户续费地址', '');
+
+-- --------------------------------------------------------
+-- 时间 2021年9月28日
+-- by jishenghua
+-- 给序列号表增加仓库id
+-- --------------------------------------------------------
+alter table jsh_serial_number add depot_id bigint(20) DEFAULT NULL COMMENT '仓库id' after material_Id;
+
+-- --------------------------------------------------------
+-- 时间 2021年10月4日
+-- by jishenghua
+-- 给序列号表增加入库单号和出库单号字段,另外去掉单据id字段
+-- 移除序列号菜单
+-- --------------------------------------------------------
+alter table jsh_serial_number add in_bill_no varchar(50) DEFAULT NULL COMMENT '入库单号' after updater;
+alter table jsh_serial_number add out_bill_no varchar(50) DEFAULT NULL COMMENT '出库单号' after in_bill_no;
+alter table jsh_serial_number drop column depot_head_id;
+delete from jsh_function where number='010104';
+
+-- --------------------------------------------------------
+-- 时间 2021年10月12日
+-- by jishenghua
+-- 给租户表增加备注字段
+-- --------------------------------------------------------
+alter table jsh_tenant add remark varchar(500) DEFAULT NULL COMMENT '备注' after expire_time;
+
+-- --------------------------------------------------------
+-- 时间 2021年10月29日
+-- by jishenghua
+-- 给商品初始库存表增加最低库存数量、最高库存数量字段
+-- 给商品表增加基础重量字段
+-- 给商品表移除安全库存字段
+-- --------------------------------------------------------
+alter table jsh_material_initial_stock add low_safe_stock decimal(24,6) DEFAULT NULL COMMENT '最低库存数量' after number;
+alter table jsh_material_initial_stock add high_safe_stock decimal(24,6) DEFAULT NULL COMMENT '最高库存数量' after low_safe_stock;
+alter table jsh_material add weight decimal(24,6) DEFAULT NULL COMMENT '基础重量(kg)' after expiry_num;
+alter table jsh_material drop column safety_stock;
+
+-- --------------------------------------------------------
+-- 时间 2021年11月5日
+-- by jishenghua
+-- 给用户/角色/模块关系表增加租户字段
+-- 给用户/角色/模块关系表的租户字段赋值
+-- --------------------------------------------------------
+alter table jsh_user_business add tenant_id bigint(20) DEFAULT null COMMENT '租户id' after btn_str;
+update jsh_user_business ub left join jsh_user u on ub.key_id=u.id set ub.tenant_id=u.tenant_id
+where (ub.type='UserRole' or ub.type='UserDepot' or ub.type='UserCustomer') and u.tenant_id!=0;
+update jsh_user_business ub left join jsh_role r on ub.key_id=r.id set ub.tenant_id=r.tenant_id
+where (ub.type='RoleFunctions') and r.tenant_id is not null;
+
+-- --------------------------------------------------------
+-- 时间 2021年11月30日
+-- by jishenghua
+-- 给计量单位表增加副单位2、副单位3、比例2、比例3 四个字段
+-- --------------------------------------------------------
+alter table jsh_unit add other_unit_two varchar(50) DEFAULT NULL COMMENT '副单位2' after other_unit;
+alter table jsh_unit add other_unit_three varchar(50) DEFAULT NULL COMMENT '副单位3' after other_unit_two;
+alter table jsh_unit add ratio_two int(11) DEFAULT NULL COMMENT '比例2' after ratio;
+alter table jsh_unit add ratio_three int(11) DEFAULT NULL COMMENT '比例3' after ratio_two;
+
+-- --------------------------------------------------------
+-- 时间 2021年12月07日
+-- by jishenghua
+-- 更新菜单名称-进货统计改为采购统计
+-- 增加平台配置菜单
+-- 给平台配置增加注册启用标记
+-- 更新消息表中已有信息的状态
+-- --------------------------------------------------------
+update jsh_function set name='采购统计' where name='进货统计';
+insert into `jsh_function`(`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`)
+ values ('000112', '平台配置', '0001', '/system/platform_config', '/system/PlatformConfigList', '\0', '0175', '', '电脑版', '', 'profile', '0');
+insert into `jsh_platform_config`(`platform_key`, `platform_key_info`, `platform_value`)
+ values ('register_flag', '注册启用标记', '1');
+update jsh_msg set status='2' where id=2;
+
+-- --------------------------------------------------------
+-- 时间 2021年12月12日
+-- by jishenghua
+-- 给单据表增加找零字段backAmount
+-- --------------------------------------------------------
+alter table jsh_depot_head add back_amount decimal(24,6) DEFAULT NULL COMMENT '找零金额' after change_amount;
+
+-- --------------------------------------------------------
+-- 时间 2022年04月21日
+-- by jishenghua
+-- 修改商品表的名称字段的长度
+-- --------------------------------------------------------
+alter table jsh_material change name name varchar(100) DEFAULT NULL COMMENT '名称';
+
+-- --------------------------------------------------------
+-- 时间 2022年05月03日
+-- by jishenghua
+-- 给系统参数表增加销售协议字段
+-- --------------------------------------------------------
+alter table jsh_system_config add sale_agreement varchar(500) DEFAULT NULL COMMENT '销售协议' after company_post_code;
+
+-- --------------------------------------------------------
+-- 时间 2022年05月17日
+-- by jishenghua
+-- 给单据主表增加采购状态字段
+-- 给系统参数表增加以销定购开关字段
+-- --------------------------------------------------------
+alter table jsh_depot_head add purchase_status varchar(1) DEFAULT NULL COMMENT '采购状态,0未采购、2完成采购、3部分采购' after status;
+alter table jsh_system_config add purchase_by_sale_flag varchar(1) DEFAULT '0' COMMENT '以销定购启用标记,0未启用,1启用' after minus_stock_flag;
+update jsh_depot_head set purchase_status='0';
+
+-- --------------------------------------------------------
+-- 时间 2022年05月28日
+-- by jishenghua
+-- 给单据子表增加关联明细id
+-- 给单据主表增加订金字段
+-- --------------------------------------------------------
+alter table jsh_depot_item add link_id bigint(20) DEFAULT NULL COMMENT '关联明细id' after expiration_date;
+alter table jsh_depot_head add deposit decimal(24,6) DEFAULT NULL COMMENT '订金' after other_money;
+
+-- --------------------------------------------------------
+-- 时间 2022年07月25日
+-- by jishenghua
+-- 给平台参数表添加手机端激活码
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` VALUES ('8', 'app_activation_code', '手机端激活码', '');
+
+-- --------------------------------------------------------
+-- 时间 2022年08月25日
+-- by jishenghua
+-- 给部分表增加启用状态和排序字段
+-- --------------------------------------------------------
+alter table jsh_unit add enabled bit(1) DEFAULT NULL COMMENT '启用' after ratio_three;
+update jsh_unit set enabled=1;
+alter table jsh_supplier add sort varchar(10) DEFAULT NULL COMMENT '排序' after tax_rate;
+alter table jsh_depot add enabled bit(1) DEFAULT NULL COMMENT '启用' after principal;
+update jsh_depot set enabled=1;
+alter table jsh_in_out_item add enabled bit(1) DEFAULT NULL COMMENT '启用' after remark;
+alter table jsh_in_out_item add sort varchar(10) DEFAULT NULL COMMENT '排序' after enabled;
+update jsh_in_out_item set enabled=1;
+alter table jsh_account add enabled bit(1) DEFAULT NULL COMMENT '启用' after remark;
+alter table jsh_account add sort varchar(10) DEFAULT NULL COMMENT '排序' after enabled;
+update jsh_account set enabled=1;
+alter table jsh_person add enabled bit(1) DEFAULT NULL COMMENT '启用' after name;
+alter table jsh_person add sort varchar(10) DEFAULT NULL COMMENT '排序' after enabled;
+update jsh_person set enabled=1;
+alter table jsh_role add enabled bit(1) DEFAULT NULL COMMENT '启用' after description;
+alter table jsh_role add sort varchar(10) DEFAULT NULL COMMENT '排序' after enabled;
+update jsh_role set enabled=1;
+
+-- --------------------------------------------------------
+-- 时间 2022年08月30日
+-- by jishenghua
+-- 给产品属性表移除属性字段
+-- --------------------------------------------------------
+alter table jsh_material_attribute drop column attribute_field;
+
+-- --------------------------------------------------------
+-- 时间 2022年09月13日
+-- by jishenghua
+-- 给商品和财务单据的备注修改字段长度
+-- --------------------------------------------------------
+alter table jsh_material change remark remark varchar(500) DEFAULT NULL COMMENT '备注';
+alter table jsh_account_head change remark remark varchar(1000) DEFAULT NULL COMMENT '备注';
+
+-- --------------------------------------------------------
+-- 时间 2022年10月2日
+-- by jishenghua
+-- 给单据明细增加采购单价字段
+-- --------------------------------------------------------
+alter table jsh_depot_item add purchase_unit_price decimal(24,6) DEFAULT NULL COMMENT '采购单价' after unit_price;
+
+-- --------------------------------------------------------
+-- 时间 2022年10月23日
+-- by jishenghua
+-- 给角色表增加价格屏蔽字段
+-- --------------------------------------------------------
+alter table jsh_role add price_limit varchar(50) DEFAULT NULL COMMENT '价格屏蔽 1-屏蔽采购价 2-屏蔽零售价 3-屏蔽销售价' after type;
+
+-- --------------------------------------------------------
+-- 时间 2023年02月19日
+-- by jishenghua
+-- 给系统参数表增加多级审核开关字段
+-- 给用户表增加是否经理字段,默认为否
+-- 给平台配置表增加发起流程地址
+-- --------------------------------------------------------
+alter table jsh_system_config add multi_level_approval_flag varchar(1) DEFAULT '0' COMMENT '多级审核启用标记,0未启用,1启用' after purchase_by_sale_flag;
+alter table jsh_user add leader_flag varchar(1) DEFAULT '0' COMMENT '是否经理,0否,1是' after password;
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('send_workflow_url', '发起流程地址', '');
+
+-- --------------------------------------------------------
+-- 时间 2023年02月25日
+-- by jishenghua
+-- 给消息表增加接收人字段
+-- 更新接收人id字段的值
+-- 给系统参数表增加流程类型
+-- --------------------------------------------------------
+alter table jsh_msg add user_id bigint(20) DEFAULT NULL COMMENT '接收人id' after type;
+update jsh_msg set user_id=tenant_id where user_id is null;
+alter table jsh_system_config add multi_bill_type varchar(200) DEFAULT NULL COMMENT '流程类型,可多选' after multi_level_approval_flag;
+
+-- --------------------------------------------------------
+-- 时间 2023年03月08日
+-- by jishenghua
+-- 给计量单位表修改比例的字段类型
+-- 给系统参数表增加金额审核启用标记
+-- 给单据增加来源字段
+-- --------------------------------------------------------
+alter table jsh_unit change ratio ratio decimal(24,3) DEFAULT NULL COMMENT '比例';
+alter table jsh_unit change ratio_two ratio_two decimal(24,3) DEFAULT NULL COMMENT '比例2';
+alter table jsh_unit change ratio_three ratio_three decimal(24,3) DEFAULT NULL COMMENT '比例3';
+alter table jsh_system_config add amount_approval_flag varchar(1) DEFAULT '0' COMMENT '金额审核启用标记,0未启用,1启用' after multi_bill_type;
+alter table jsh_depot_head add source varchar(1) DEFAULT '0' COMMENT '单据来源,0-pc,1-手机' after purchase_status;
+alter table jsh_account_head add source varchar(1) DEFAULT '0' COMMENT '单据来源,0-pc,1-手机' after status;
+
+-- --------------------------------------------------------
+-- 时间 2023年03月16日
+-- by jishenghua
+-- 将系统参数表的金额审核启用标记改为强审核标记
+-- 增加零售统计菜单
+-- --------------------------------------------------------
+alter table jsh_system_config change amount_approval_flag force_approval_flag varchar(1) DEFAULT '0' COMMENT '强审核启用标记,0未启用,1启用';
+insert into `jsh_function` (`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`) VALUES ('030105', '零售统计', '0301', '/report/retail_out_report', '/report/RetailOutReport', b'0', '0615', b'1', '电脑版', '', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2023年03月08日
+-- by jishenghua
+-- 给系统参数表增加更新单价启用标记
+-- --------------------------------------------------------
+alter table jsh_system_config add update_unit_price_flag varchar(1) DEFAULT '1' COMMENT '更新单价启用标记,0未启用,1启用' after force_approval_flag;
+
+-- --------------------------------------------------------
+-- 时间 2023年05月10日
+-- by jishenghua
+-- 给系统参数表增加超出关联单据启用标记
+-- --------------------------------------------------------
+alter table jsh_system_config add over_link_bill_flag varchar(1) DEFAULT '0' COMMENT '超出关联单据启用标记,0未启用,1启用' after update_unit_price_flag;
+
+-- --------------------------------------------------------
+-- 时间 2023年05月19日
+-- by jishenghua
+-- 给商品主表增加仓位货架
+-- --------------------------------------------------------
+alter table jsh_material add position varchar(100) DEFAULT NULL COMMENT '仓位货架' after enable_batch_number;
+
+-- --------------------------------------------------------
+-- 时间 2023年05月28日
+-- by jishenghua
+-- 给用户表增加微信绑定字段
+-- 给平台表增加微信登录的相关信息
+-- --------------------------------------------------------
+alter table jsh_user add weixin_open_id varchar(100) DEFAULT NULL COMMENT '微信绑定' after remark;
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('weixinUrl', '微信url', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('weixinAppid', '微信appid', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('weixinSecret', '微信secret', '');
+
+-- --------------------------------------------------------
+-- 时间 2023年06月05日
+-- by jishenghua
+-- 给平台表增加阿里云OSS的相关信息
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('aliOss_endpoint', '阿里OSS-endpoint', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('aliOss_accessKeyId', '阿里OSS-accessKeyId', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('aliOss_accessKeySecret', '阿里OSS-accessKeySecret', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('aliOss_bucketName', '阿里OSS-bucketName', '');
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('aliOss_linkUrl', '阿里OSS-linkUrl', '');
+
+-- --------------------------------------------------------
+-- 时间 2023年06月21日
+-- by jishenghua
+-- 给商家表增加操作员字段,并给该字段赋默认值
+-- --------------------------------------------------------
+alter table jsh_supplier add creator bigint(20) DEFAULT NULL COMMENT '操作员' after sort;
+update jsh_supplier set creator=tenant_id;
+
+-- --------------------------------------------------------
+-- 时间 2023年08月15日
+-- by jishenghua
+-- 给平台配置表增加单据Excel地址
+-- --------------------------------------------------------
+INSERT INTO `jsh_platform_config` (`platform_key`, `platform_key_info`, `platform_value`) VALUES ('bill_excel_url', '单据Excel地址', '');
+
+-- --------------------------------------------------------
+-- 时间 2023年10月10日
+-- by jishenghua
+-- 更新功能菜单里面的按钮参数(执行完之后记得要给'租户'角色重新勾选按钮)
+-- --------------------------------------------------------
+update jsh_function set push_btn='1,2,3,7' where push_btn='1,2,7';
+update jsh_function set push_btn='1,3' where number in ('01020101','01020102','01020103','010102');
+
+-- --------------------------------------------------------
+-- 时间 2023年11月1日
+-- by jishenghua
+-- 将经手人里面的业务员改为销售员
+-- --------------------------------------------------------
+update jsh_person set type='销售员' where type='业务员';
+
+-- --------------------------------------------------------
+-- 时间 2023年12月01日
+-- by jishenghua
+-- 给系统参数表增加出入库管理启用标记,开启后,采购入库、采购退货、销售出库、销售退货单据都会经过出入库流程,适合有独立仓库的场景。
+-- --------------------------------------------------------
+alter table jsh_system_config add in_out_manage_flag varchar(1) DEFAULT '0' COMMENT '出入库管理启用标记,0未启用,1启用' after over_link_bill_flag;
+
+-- --------------------------------------------------------
+-- 时间 2024年4月8日
+-- by jishenghua
+-- 给序列号表里面增加入库单价字段
+-- --------------------------------------------------------
+alter table jsh_serial_number add in_price decimal(24,6) DEFAULT NULL COMMENT '入库单价' after is_sell;
+
+-- --------------------------------------------------------
+-- 时间 2024年4月19日
+-- by jishenghua
+-- 给功能表增加请购单的菜单
+-- 给角色勾选请购单的菜单
+-- --------------------------------------------------------
+INSERT INTO jsh_function
+(`number`, `name`, `parent_number`, `url`, `component`, `state`, `sort`, `enabled`, `type`, `push_btn`, `icon`, `delete_flag`)
+VALUES ('050203', '请购单', '0502', '/bill/purchase_apply', '/bill/PurchaseApplyList', b'0', '0330', b'1', '电脑版', '1,2,3,7', 'profile', '0');
+
+-- --------------------------------------------------------
+-- 时间 2024年4月22日
+-- by jishenghua
+-- 给单据主表里面增加关联请购单字段
+-- --------------------------------------------------------
+alter table jsh_depot_head add link_apply varchar(50) DEFAULT NULL COMMENT '关联请购单' after link_number;
+
+-- --------------------------------------------------------
+-- 时间 2024年5月4日
+-- by jishenghua
+-- 给明细表的备注修改长度
+-- --------------------------------------------------------
+alter table jsh_depot_item change remark remark varchar(500) DEFAULT NULL COMMENT '备注';
+alter table jsh_account_item change remark remark varchar(500) DEFAULT NULL COMMENT '备注';
+
+-- --------------------------------------------------------
+-- 时间 2024年5月5日
+-- by jishenghua
+-- 给系统参数表增加多账户启用标记,开启后,采购订单、采购入库等单据可以进行多账户选择,升级的时候最好给老的租户进行批量设置为启用
+-- --------------------------------------------------------
+alter table jsh_system_config add multi_account_flag varchar(1) DEFAULT '0' COMMENT '多账户启用标记,0未启用,1启用' after in_out_manage_flag;
+update jsh_system_config set multi_account_flag='1' where multi_account_flag='0';
+
+-- --------------------------------------------------------
+-- 时间 2024年5月21日
+-- by jishenghua
+-- 给系统参数表增加移动平均价标记,默认关闭,开启之后将通过移动平均来计算成本价
+-- 给实时库存表增加当前单价字段
+-- --------------------------------------------------------
+alter table jsh_system_config add move_avg_price_flag varchar(1) DEFAULT '0' COMMENT '移动平均价启用标记,0未启用,1启用' after multi_account_flag;
+alter table jsh_material_current_stock add current_unit_price decimal(24,6) DEFAULT NULL COMMENT '当前单价' after current_number;
+
+-- --------------------------------------------------------
+-- 时间 2024年8月21日
+-- by jishenghua
+-- 给系统参数表增加先审核后打印启用标记,启用后,零售、采购、销售等单据,都需要先审核之后才能进行打印
+-- --------------------------------------------------------
+alter table jsh_system_config add audit_print_flag varchar(1) DEFAULT '0' COMMENT '先审核后打印启用标记,0未启用,1启用' after move_avg_price_flag;
+
+-- --------------------------------------------------------
+-- 时间 2024年9月27日
+-- by jishenghua
+-- 给商品表增加品牌、助记码字段
+-- --------------------------------------------------------
+alter table jsh_material add brand varchar(100) DEFAULT NULL COMMENT '品牌' after standard;
+alter table jsh_material add mnemonic varchar(100) DEFAULT NULL COMMENT '助记码' after brand;
+
+-- --------------------------------------------------------
+-- 时间 2024年12月08日
+-- by jishenghua
+-- 给用户表增加删除字段、修改状态表的备注
+-- 给租户表增加删除字段
+-- --------------------------------------------------------
+alter table jsh_user add delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除' after tenant_id;
+alter table jsh_user change Status status tinyint(4) DEFAULT '0' COMMENT '状态,0正常,2封禁';
+update jsh_user set delete_flag='1' where status=1;
+alter table jsh_tenant add delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除' after remark;
+
+-- --------------------------------------------------------
+-- 时间 2024年12月17日
+-- by jishenghua
+-- 更新菜单:把计量单位更新为多单位
+-- --------------------------------------------------------
+update jsh_function set name='多单位' where number='010103';
+
+-- --------------------------------------------------------
+-- 时间 2025年2月25日
+-- by jishenghua
+-- 给地址字段调整长度
+-- --------------------------------------------------------
+alter table jsh_supplier change address address varchar(100) DEFAULT NULL COMMENT '地址';
+
+-- --------------------------------------------------------
+-- 时间 2025年3月25日
+-- by jishenghua
+-- 给产品扩展字段表增加租户id字段
+-- 另外注意:需要手动把商品属性菜单分配给租户角色
+-- --------------------------------------------------------
+alter table jsh_material_property add tenant_id bigint(20) DEFAULT NULL COMMENT '租户id' after another_name;
+
+-- --------------------------------------------------------
+-- 时间 2025年3月30日
+-- by jishenghua
+-- 给jsh_account_head表的文件字段增加长度
+-- --------------------------------------------------------
+alter table jsh_account_head change file_name file_name varchar(1000) DEFAULT NULL COMMENT '附件名称';
+
+-- --------------------------------------------------------
+-- 时间 2025年4月9日
+-- by jishenghua
+-- 给商品表增加多属性字段,里面存多属性的数组
+-- --------------------------------------------------------
+alter table jsh_material add attribute varchar(1000) DEFAULT NULL COMMENT '多属性信息' after position;
+
+-- --------------------------------------------------------
+-- 时间 2025年4月28日
+-- by jishenghua
+-- 把菜单基本资料改成基础资料
+-- --------------------------------------------------------
+update jsh_function set name='基础资料' where number='0102';
+
+-- --------------------------------------------------------
+-- 时间 2025年5月18日
+-- by jishenghua
+-- 给系统参数表增加零收付款启用标记,启用后,销售出库单据新建时默认本次收款为0,采购入库单据同理
+-- --------------------------------------------------------
+alter table jsh_system_config add zero_change_amount_flag varchar(1) DEFAULT '0' COMMENT '零收付款启用标记,0未启用,1启用' after audit_print_flag;
+
+-- --------------------------------------------------------
+-- 时间 2025年5月20日
+-- by jishenghua
+-- 给系统参数表增加客户静态单价启用标记,启用后,客户的销售出库的单价不会从该客户历史单据的单价获取,而是只从商品信息获取
+-- --------------------------------------------------------
+alter table jsh_system_config add customer_static_price_flag varchar(1) DEFAULT '0' COMMENT '客户静态单价启用标记,0未启用,1启用' after zero_change_amount_flag;
+
+-- --------------------------------------------------------
+-- 时间 2025年7月3日
+-- by jishenghua
+-- 给jsh_material表的扩展字段增加长度
+-- --------------------------------------------------------
+alter table jsh_material change other_field1 other_field1 varchar(500) DEFAULT NULL COMMENT '自定义1';
+alter table jsh_material change other_field2 other_field2 varchar(500) DEFAULT NULL COMMENT '自定义2';
+alter table jsh_material change other_field3 other_field3 varchar(500) DEFAULT NULL COMMENT '自定义3';
+
+-- --------------------------------------------------------
+-- 时间 2025年9月3日
+-- by jishenghua
+-- 给平台表增加邮件发送端-发件人
+-- 给平台表增加邮件发送端-授权码
+-- 给平台表增加邮件发送端-SMTP服务器
+-- --------------------------------------------------------
+insert into jsh_platform_config (platform_key, platform_key_info, platform_value) VALUES ('email_from', '邮件发送端-发件人', '');
+insert into jsh_platform_config (platform_key, platform_key_info, platform_value) VALUES ('email_auth_code', '邮件发送端-授权码', '');
+insert into jsh_platform_config (platform_key, platform_key_info, platform_value) VALUES ('email_smtp_host', '邮件发送端-SMTP服务器', '');
+
+-- --------------------------------------------------------
+-- 时间 2025年9月21日
+-- by jishenghua
+-- 给平台表增加验证码启用标记
+-- --------------------------------------------------------
+insert into jsh_platform_config(platform_key, platform_key_info, platform_value) values ('checkcode_flag', '验证码启用标记', '1');
+
+-- --------------------------------------------------------
+-- 时间 2025年11月5日
+-- by jishenghua
+-- 给部分表加索引,提升查询速度
+-- --------------------------------------------------------
+create index number on jsh_depot_head(number) using btree;
+create index link_number on jsh_depot_head(link_number) using btree;
+create index creator on jsh_depot_head(creator) using btree;
+create index tenant_id on jsh_depot_head(tenant_id) using btree;
+create index material_extend_id on jsh_depot_item(material_extend_id) using btree;
+create index tenant_id on jsh_depot_item(tenant_id) using btree;
+create index material_id on jsh_material_extend(material_id) using btree;
+create index bar_code on jsh_material_extend(bar_code) using btree;
+create index tenant_id on jsh_material_extend(tenant_id) using btree;
+create index tenant_id on jsh_material(tenant_id) using btree;
+create index bill_no on jsh_account_head(bill_no) using btree;
+create index tenant_id on jsh_account_head(tenant_id) using btree;
+create index bill_id on jsh_account_item(bill_id) using btree;
+create index tenant_id on jsh_account_item(tenant_id) using btree;
+create index material_id on jsh_material_current_stock(material_id) using btree;
+create index depot_id on jsh_material_current_stock(depot_id) using btree;
+create index tenant_id on jsh_material_current_stock(tenant_id) using btree;
+create index material_id on jsh_material_initial_stock(material_id) using btree;
+create index depot_id on jsh_material_initial_stock(depot_id) using btree;
+create index tenant_id on jsh_material_initial_stock(tenant_id) using btree;
+create index create_time on jsh_log(create_time) using btree;
+create index tenant_id on jsh_log(tenant_id) using btree;
+create index orga_id on jsh_orga_user_rel(orga_id) using btree;
+create index user_id on jsh_orga_user_rel(user_id) using btree;
+create index creator on jsh_orga_user_rel(creator) using btree;
+create index tenant_id on jsh_orga_user_rel(tenant_id) using btree;
+create index create_time on jsh_tenant(create_time) using btree;
+create index tenant_id on jsh_tenant(tenant_id) using btree;
+create index material_id on jsh_serial_number(material_id) using btree;
+create index depot_id on jsh_serial_number(depot_id) using btree;
+create index type on jsh_user_business(type) using btree;
+create index key_id on jsh_user_business(key_id) using btree;
+create index tenant_id on jsh_user_business(tenant_id) using btree;
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..655c328
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,233 @@
+
+
+ 4.0.0
+ com.jsh
+ jshERP-boot
+ 3.6-SNAPSHOT
+ jar
+
+ jshERP-boot
+ 管伊佳ERP
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.0.RELEASE
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ com.gitee.starblues
+ springboot-plugin-framework
+ 2.2.1-RELEASE
+
+
+ com.gitee.starblues
+ springboot-plugin-framework-extension-mybatis
+ 2.2.1-RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.2
+
+
+ net.sourceforge.jexcelapi
+ jxl
+ 2.6.12
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.12
+
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+ 2.15.0
+ compile
+
+
+ org.slf4j
+ jul-to-slf4j
+ 1.7.25
+ compile
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.0.7.1
+
+
+ org.springframework.boot
+ spring-boot-starter-redis
+ 1.4.1.RELEASE
+
+
+ io.springfox
+ springfox-swagger2
+ 2.7.0
+ compile
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.6
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.10.1
+
+
+ com.itextpdf
+ itextpdf
+ 5.5.13.1
+
+
+
+ org.apache.pdfbox
+ pdfbox
+ 3.0.1
+
+
+
+ org.apache.pdfbox
+ pdfbox-tools
+ 3.0.1
+
+
+
+ org.apache.pdfbox
+ fontbox
+ 3.0.1
+
+
+
+ cn.hutool
+ hutool-all
+ 5.6.4
+
+
+
+ org.apache.commons
+ commons-io
+ 1.3.2
+
+
+ com.belerweb
+ pinyin4j
+ 2.5.1
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.2.13
+
+
+ com.sun.mail
+ javax.mail
+ 1.6.2
+
+
+
+
+ jshERP
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.0.3.RELEASE
+
+
+ build-info
+ generate-sources
+
+ build-info
+
+
+
+ repackage
+ package
+
+ repackage
+
+
+ com.jsh.erp.ErpApplication
+ JAR
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 2.5.1
+
+
+ make-zip
+ package
+
+ single
+
+
+
+ src/main/assembly/assembly.xml
+
+ ./dist
+
+
+
+
+
+ org.mybatis.generator
+ mybatis-generator-maven-plugin
+ 1.4.0
+
+ ${basedir}/src/test/resources/generatorConfig.xml
+ true
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.7.0
+
+ 1.8
+ 1.8
+ true
+
+
+
+
+
diff --git a/src/main/assembly/assembly.xml b/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..ea40299
--- /dev/null
+++ b/src/main/assembly/assembly.xml
@@ -0,0 +1,66 @@
+
+
+
+ bin
+
+
+ zip
+
+
+ true
+
+
+
+ ${project.basedir}/target
+
+ *.jar
+
+ /lib
+
+
+ ${project.basedir}/src/main/resources
+
+ *.properties
+ *.yml
+ *.yaml
+ *.xml
+
+ /config
+
+
+ ${project.basedir}/src/main/bin
+ /bin
+
+ run-manage.sh
+
+ lf
+
+
+ ${project.basedir}/src/main/bin/
+ /
+
+ start.bat
+ restart.sh
+ start.sh
+ stop.sh
+ status.sh
+
+
+
+ docs
+ /docs
+
+
+ ${project.basedir}
+
+ *.md
+ *.txt
+
+ /
+
+
+
\ No newline at end of file
diff --git a/src/main/bin/restart.sh b/src/main/bin/restart.sh
new file mode 100644
index 0000000..70c0be1
--- /dev/null
+++ b/src/main/bin/restart.sh
@@ -0,0 +1 @@
+./bin/run-manage.sh restart
\ No newline at end of file
diff --git a/src/main/bin/run-manage.sh b/src/main/bin/run-manage.sh
new file mode 100644
index 0000000..a349a38
--- /dev/null
+++ b/src/main/bin/run-manage.sh
@@ -0,0 +1,133 @@
+#!/bin/bash
+
+SERVER_NAME=jshERP
+readonly APP_HOME=${FILE_PATH:-$(dirname $(cd `dirname $0`; pwd))}
+#readonly JAVA_HOME=""
+readonly CONFIG_HOME="$APP_HOME/config/"
+readonly LIB_HOME="$APP_HOME/lib"
+readonly LOGS_HOME="$APP_HOME/logs"
+readonly PID_FILE="$LOGS_HOME/application.pid"
+readonly APP_MAIN_CLASS="jshERP.jar"
+readonly LOG_CONFIG="$CONFIG_HOME/logback-spring.xml"
+readonly JAVA_RUN="-Dlogs.home=$LOGS_HOME -Dlogging.config=$LOG_CONFIG -Dspring.config.location=file:$CONFIG_HOME -Dspring.pid.file=$PID_FILE -Dspring.pid.fail-on-write-error=true"
+readonly JAVA_OPTS="-server -Xms128m -Xmx320m -XX:PermSize=128M -XX:MaxPermSize=256M $JAVA_RUN"
+readonly JAVA="java"
+PID=0
+if [ ! -x "$LOGS_HOME" ]
+then
+ mkdir $LOGS_HOME
+fi
+chmod +x -R "$JAVA_HOME/bin/"
+functions="/etc/functions.sh"
+if test -f $functions ; then
+ . $functions
+else
+ success()
+ {
+ echo " SUCCESS! $@"
+ }
+ failure()
+ {
+ echo " ERROR! $@"
+ }
+ warning()
+ {
+ echo "WARNING! $@"
+ }
+fi
+function checkpid() {
+ PID=$(ps -ef | grep $APP_MAIN_CLASS | grep -v 'grep' | awk '{print int($2)}')
+ if [[ -n "$PID" ]]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+function start() {
+ checkpid
+ if [[ $? -eq 0 ]]
+ then
+ warning "[$APP_MAIN_CLASS]: already started! (PID=$PID)"
+ else
+ echo -n "[$APP_MAIN_CLASS]: Starting ..."
+ JAVA_CMD="nohup $JAVA $JAVA_OPTS -jar $LIB_HOME/$APP_MAIN_CLASS > /dev/null 2>&1 &"
+ # echo "Exec cmmand : $JAVA_CMD"
+ sh -c "$JAVA_CMD"
+ sleep 3
+ checkpid
+ if [[ $? -eq 0 ]]
+ then
+ success "(PID=$PID) "
+ else
+ failure " "
+ fi
+ fi
+}
+function stop() {
+ checkpid
+ if [[ $? -eq 0 ]];
+ then
+ echo -n "[$APP_MAIN_CLASS]: Shutting down ...(PID=$PID) "
+ kill -9 $PID
+ if [[ $? -eq 0 ]];
+ then
+ echo 0 > $PID_FILE
+ success " "
+ else
+ failure " "
+ fi
+ else
+ warning "[$APP_MAIN_CLASS]: is not running ..."
+ fi
+}
+function status() {
+ checkpid
+ if [[ $? -eq 0 ]]
+ then
+ success "[$APP_MAIN_CLASS]: is running! (PID=$PID)"
+ return 0
+ else
+ failure "[$APP_MAIN_CLASS]: is not running"
+ return 1
+ fi
+}
+function info() {
+ echo "System Information:"
+ echo
+ echo "****************************"
+ echo `head -n 1 /etc/issue`
+ echo `uname -a`
+ echo
+ echo "JAVA_HOME=$JAVA_HOME"
+ echo
+ echo "JAVA Environment Information:"
+ echo `$JAVA -version`
+ echo
+ echo "APP_HOME=$APP_HOME"
+ echo "APP_MAIN_CLASS=$APP_MAIN_CLASS"
+ echo
+ echo "****************************"
+}
+case "$1" in
+ 'start')
+ start
+ ;;
+ 'stop')
+ stop
+ ;;
+ 'restart')
+ stop
+ start
+ ;;
+ 'status')
+ status
+ ;;
+ 'info')
+ info
+ ;;
+ *)
+ echo "Usage: $0 {help|start|stop|restart|status|info}"
+ ;;
+esac
+exit 0
\ No newline at end of file
diff --git a/src/main/bin/start.bat b/src/main/bin/start.bat
new file mode 100644
index 0000000..37b8bb5
--- /dev/null
+++ b/src/main/bin/start.bat
@@ -0,0 +1,6 @@
+@echo off
+
+title jshERP
+
+java -Xms1000m -Xmx2000m -jar .\lib\jshERP.jar
+pause over
\ No newline at end of file
diff --git a/src/main/bin/start.sh b/src/main/bin/start.sh
new file mode 100644
index 0000000..d0bf067
--- /dev/null
+++ b/src/main/bin/start.sh
@@ -0,0 +1 @@
+./bin/run-manage.sh start
\ No newline at end of file
diff --git a/src/main/bin/status.sh b/src/main/bin/status.sh
new file mode 100644
index 0000000..46d6537
--- /dev/null
+++ b/src/main/bin/status.sh
@@ -0,0 +1 @@
+./bin/run-manage.sh status
\ No newline at end of file
diff --git a/src/main/bin/stop.sh b/src/main/bin/stop.sh
new file mode 100644
index 0000000..8f3414e
--- /dev/null
+++ b/src/main/bin/stop.sh
@@ -0,0 +1 @@
+./bin/run-manage.sh stop
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/ErpApplication.java b/src/main/java/com/jsh/erp/ErpApplication.java
new file mode 100644
index 0000000..f803c9c
--- /dev/null
+++ b/src/main/java/com/jsh/erp/ErpApplication.java
@@ -0,0 +1,28 @@
+package com.jsh.erp;
+
+import com.jsh.erp.utils.ComputerInfo;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+import java.io.IOException;
+
+@SpringBootApplication
+@MapperScan("com.jsh.erp.datasource.mappers")
+@ServletComponentScan
+@EnableScheduling
+@EnableAsync
+public class ErpApplication{
+ public static void main(String[] args) throws IOException {
+ ConfigurableApplicationContext context = SpringApplication.run(ErpApplication.class, args);
+ Environment environment = context.getBean(Environment.class);
+ System.out.println("启动成功,后端服务API地址:http://" + ComputerInfo.getIpAddr() + ":"
+ + environment.getProperty("server.port") + "/jshERP-boot/doc.html");
+ System.out.println("您还需启动前端服务,启动命令:yarn run serve 或 npm run serve,测试用户:jsh,密码:123456");
+ }
+}
diff --git a/src/main/java/com/jsh/erp/base/AjaxResult.java b/src/main/java/com/jsh/erp/base/AjaxResult.java
new file mode 100644
index 0000000..491ad94
--- /dev/null
+++ b/src/main/java/com/jsh/erp/base/AjaxResult.java
@@ -0,0 +1,228 @@
+package com.jsh.erp.base;
+
+import com.jsh.erp.utils.StringUtil;
+
+import java.util.HashMap;
+import java.util.Objects;
+
+/**
+ * 操作消息提醒
+ *
+ * @author ji-sheng-hua
+ */
+public class AjaxResult extends HashMap
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 状态码 */
+ public static final String CODE_TAG = "code";
+
+ /** 返回内容 */
+ public static final String MSG_TAG = "msg";
+
+ /** 数据对象 */
+ public static final String DATA_TAG = "data";
+
+ /**
+ * 状态类型
+ */
+ public enum Type
+ {
+ /** 成功 */
+ SUCCESS(0),
+ /** 警告 */
+ WARN(301),
+ /** 错误 */
+ ERROR(500);
+ private final int value;
+
+ Type(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+ */
+ public AjaxResult()
+ {
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param type 状态类型
+ * @param msg 返回内容
+ */
+ public AjaxResult(Type type, String msg)
+ {
+ super.put(CODE_TAG, type.value);
+ super.put(MSG_TAG, msg);
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param type 状态类型
+ * @param msg 返回内容
+ * @param data 数据对象
+ */
+ public AjaxResult(Type type, String msg, Object data)
+ {
+ super.put(CODE_TAG, type.value);
+ super.put(MSG_TAG, msg);
+ if (StringUtil.isNotNull(data))
+ {
+ super.put(DATA_TAG, data);
+ }
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success()
+ {
+ return AjaxResult.success("操作成功");
+ }
+
+ /**
+ * 返回成功数据
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success(Object data)
+ {
+ return AjaxResult.success("操作成功", data);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg)
+ {
+ return AjaxResult.success(msg, null);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg, Object data)
+ {
+ return new AjaxResult(Type.SUCCESS, msg, data);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult warn(String msg)
+ {
+ return AjaxResult.warn(msg, null);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult warn(String msg, Object data)
+ {
+ return new AjaxResult(Type.WARN, msg, data);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @return
+ */
+ public static AjaxResult error()
+ {
+ return AjaxResult.error("操作失败");
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg)
+ {
+ return AjaxResult.error(msg, null);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg, Object data)
+ {
+ return new AjaxResult(Type.ERROR, msg, data);
+ }
+
+ /**
+ * 是否为成功消息
+ *
+ * @return 结果
+ */
+ public boolean isSuccess()
+ {
+ return Objects.equals(Type.SUCCESS.value, this.get(CODE_TAG));
+ }
+
+ /**
+ * 是否为警告消息
+ *
+ * @return 结果
+ */
+ public boolean isWarn()
+ {
+ return Objects.equals(Type.WARN.value, this.get(CODE_TAG));
+ }
+
+ /**
+ * 是否为错误消息
+ *
+ * @return 结果
+ */
+ public boolean isError()
+ {
+ return Objects.equals(Type.ERROR.value, this.get(CODE_TAG));
+ }
+
+ /**
+ * 方便链式调用
+ *
+ * @param key 键
+ * @param value 值
+ * @return 数据对象
+ */
+ @Override
+ public AjaxResult put(String key, Object value)
+ {
+ super.put(key, value);
+ return this;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/base/BaseController.java b/src/main/java/com/jsh/erp/base/BaseController.java
new file mode 100644
index 0000000..bf9f01c
--- /dev/null
+++ b/src/main/java/com/jsh/erp/base/BaseController.java
@@ -0,0 +1,158 @@
+package com.jsh.erp.base;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.jsh.erp.utils.PageUtils;
+import com.jsh.erp.utils.ServletUtils;
+import com.jsh.erp.utils.SqlUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * web层通用数据处理
+ *
+ * @author ji-sheng-hua
+ */
+public class BaseController
+{
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ /**
+ * 设置请求分页数据
+ */
+ protected void startPage()
+ {
+ PageUtils.startPage();
+ }
+
+ /**
+ * 设置请求排序数据
+ */
+ protected void startOrderBy()
+ {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ if (StringUtils.isNotEmpty(pageDomain.getOrderBy()))
+ {
+ String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+ PageHelper.orderBy(orderBy);
+ }
+ }
+
+ /**
+ * 清理分页的线程变量
+ */
+ protected void clearPage()
+ {
+ PageUtils.clearPage();
+ }
+
+ /**
+ * 获取request
+ */
+ public HttpServletRequest getRequest()
+ {
+ return ServletUtils.getRequest();
+ }
+
+ /**
+ * 获取response
+ */
+ public HttpServletResponse getResponse()
+ {
+ return ServletUtils.getResponse();
+ }
+
+ /**
+ * 获取session
+ */
+ public HttpSession getSession()
+ {
+ return getRequest().getSession();
+ }
+
+ /**
+ * 响应请求分页数据
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ protected TableDataInfo getDataTable(List> list)
+ {
+ Map data = new HashMap<>();
+ TableDataInfo rspData = new TableDataInfo();
+ rspData.setCode(200);
+ data.put("rows", list);
+ data.put("total", new PageInfo(list).getTotal());
+ rspData.setData(data);
+ return rspData;
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param rows 影响行数
+ * @return 操作结果
+ */
+ protected AjaxResult toAjax(int rows)
+ {
+ return rows > 0 ? success() : error();
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param result 结果
+ * @return 操作结果
+ */
+ protected AjaxResult toAjax(boolean result)
+ {
+ return result ? success() : error();
+ }
+
+ /**
+ * 返回成功
+ */
+ public AjaxResult success()
+ {
+ return AjaxResult.success();
+ }
+
+ /**
+ * 返回失败消息
+ */
+ public AjaxResult error()
+ {
+ return AjaxResult.error();
+ }
+
+ /**
+ * 返回成功消息
+ */
+ public AjaxResult success(String message)
+ {
+ return AjaxResult.success(message);
+ }
+
+ /**
+ * 返回成功数据
+ */
+ public static AjaxResult success(Object data)
+ {
+ return AjaxResult.success("操作成功", data);
+ }
+
+ /**
+ * 返回失败消息
+ */
+ public AjaxResult error(String message)
+ {
+ return AjaxResult.error(message);
+ }
+
+}
diff --git a/src/main/java/com/jsh/erp/base/PageDomain.java b/src/main/java/com/jsh/erp/base/PageDomain.java
new file mode 100644
index 0000000..5c8de68
--- /dev/null
+++ b/src/main/java/com/jsh/erp/base/PageDomain.java
@@ -0,0 +1,87 @@
+package com.jsh.erp.base;
+
+import com.jsh.erp.utils.StringUtil;
+
+/**
+ * 分页数据
+ *
+ * @author ji-sheng-hua
+ */
+public class PageDomain
+{
+ /** 当前记录起始索引 */
+ private Integer currentPage;
+
+ /** 每页显示记录数 */
+ private Integer pageSize;
+
+ /** 排序列 */
+ private String orderByColumn;
+
+ /** 排序的方向desc或者asc */
+ private String isAsc = "asc";
+
+ /** 分页参数合理化 */
+ private Boolean reasonable = true;
+
+ public String getOrderBy()
+ {
+ if (StringUtil.isEmpty(orderByColumn))
+ {
+ return "";
+ }
+ return StringUtil.toUnderScoreCase(orderByColumn) + " " + isAsc;
+ }
+
+ public Integer getCurrentPage() {
+ return currentPage;
+ }
+
+ public void setCurrentPage(Integer currentPage) {
+ this.currentPage = currentPage;
+ }
+
+ public Integer getPageSize()
+ {
+ return pageSize;
+ }
+
+ public void setPageSize(Integer pageSize)
+ {
+ this.pageSize = pageSize;
+ }
+
+ public String getOrderByColumn()
+ {
+ return orderByColumn;
+ }
+
+ public void setOrderByColumn(String orderByColumn)
+ {
+ this.orderByColumn = orderByColumn;
+ }
+
+ public String getIsAsc()
+ {
+ return isAsc;
+ }
+
+ public void setIsAsc(String isAsc)
+ {
+ this.isAsc = isAsc;
+ }
+
+ public Boolean getReasonable()
+ {
+ if (StringUtil.isNull(reasonable))
+ {
+ return Boolean.TRUE;
+ }
+ return reasonable;
+ }
+
+ public void setReasonable(Boolean reasonable)
+ {
+ this.reasonable = reasonable;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/base/TableDataInfo.java b/src/main/java/com/jsh/erp/base/TableDataInfo.java
new file mode 100644
index 0000000..728d3ee
--- /dev/null
+++ b/src/main/java/com/jsh/erp/base/TableDataInfo.java
@@ -0,0 +1,44 @@
+package com.jsh.erp.base;
+
+import java.io.Serializable;
+
+/**
+ * 表格分页数据对象
+ *
+ * @author ji-sheng-hua
+ */
+public class TableDataInfo implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 消息状态码 */
+ private int code;
+
+ /** 消息状态码 */
+ private Object data;
+
+ /**
+ * 表格数据对象
+ */
+ public TableDataInfo()
+ {
+ }
+
+ public int getCode()
+ {
+ return code;
+ }
+
+ public void setCode(int code)
+ {
+ this.code = code;
+ }
+
+ public Object getData() {
+ return data;
+ }
+
+ public void setData(Object data) {
+ this.data = data;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/base/TableSupport.java b/src/main/java/com/jsh/erp/base/TableSupport.java
new file mode 100644
index 0000000..03c986a
--- /dev/null
+++ b/src/main/java/com/jsh/erp/base/TableSupport.java
@@ -0,0 +1,56 @@
+package com.jsh.erp.base;
+
+import com.jsh.erp.utils.Convert;
+import com.jsh.erp.utils.ServletUtils;
+
+/**
+ * 表格数据处理
+ *
+ * @author ji-sheng-hua
+ */
+public class TableSupport
+{
+ /**
+ * 当前记录起始索引
+ */
+ public static final String CURRENT_PAGE = "currentPage";
+
+ /**
+ * 每页显示记录数
+ */
+ public static final String PAGE_SIZE = "pageSize";
+
+ /**
+ * 排序列
+ */
+ public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+ /**
+ * 排序的方向 "desc" 或者 "asc".
+ */
+ public static final String IS_ASC = "isAsc";
+
+ /**
+ * 分页参数合理化
+ */
+ public static final String REASONABLE = "reasonable";
+
+ /**
+ * 封装分页对象
+ */
+ public static PageDomain getPageDomain()
+ {
+ PageDomain pageDomain = new PageDomain();
+ pageDomain.setCurrentPage(Convert.toInt(ServletUtils.getParameter(CURRENT_PAGE), 1));
+ pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
+ pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
+ pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
+ pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
+ return pageDomain;
+ }
+
+ public static PageDomain buildPageRequest()
+ {
+ return getPageDomain();
+ }
+}
diff --git a/src/main/java/com/jsh/erp/config/PluginBeanConfig.java b/src/main/java/com/jsh/erp/config/PluginBeanConfig.java
new file mode 100644
index 0000000..301b1bf
--- /dev/null
+++ b/src/main/java/com/jsh/erp/config/PluginBeanConfig.java
@@ -0,0 +1,24 @@
+package com.jsh.erp.config;
+
+import com.gitee.starblues.extension.mybatis.SpringBootMybatisExtension;
+import com.gitee.starblues.integration.application.AutoPluginApplication;
+import com.gitee.starblues.integration.application.PluginApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Author: jishenghua
+ * @Version: 1.0
+ * @Create Date Time: 2019-05-30 15:53
+ * @Update Date Time:
+ * @see
+ */
+@Configuration
+public class PluginBeanConfig {
+ @Bean
+ public PluginApplication pluginApplication(){
+ PluginApplication pluginApplication = new AutoPluginApplication();
+ pluginApplication.addExtension(new SpringBootMybatisExtension());
+ return pluginApplication;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/config/PluginConfiguration.java b/src/main/java/com/jsh/erp/config/PluginConfiguration.java
new file mode 100644
index 0000000..4c3bf46
--- /dev/null
+++ b/src/main/java/com/jsh/erp/config/PluginConfiguration.java
@@ -0,0 +1,104 @@
+package com.jsh.erp.config;
+
+import com.gitee.starblues.integration.DefaultIntegrationConfiguration;
+import org.pf4j.RuntimeMode;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @Description:
+ * @Author: jishenghua
+ * @Version: 1.0
+ * @Create Date Time: 2019-05-25 12:36
+ * @Update Date Time:
+ * @see
+ */
+@Component
+@ConfigurationProperties(prefix = "plugin")
+public class PluginConfiguration extends DefaultIntegrationConfiguration {
+
+ /**
+ * 运行模式
+ * 开发环境: development、dev
+ * 生产/部署 环境: deployment、prod
+ */
+ @Value("${runMode:dev}")
+ private String runMode;
+
+ @Value("${pluginPath:plugins}")
+ private String pluginPath;
+
+ @Value("${pluginConfigFilePath:pluginConfigs}")
+ private String pluginConfigFilePath;
+
+ @Override
+ public RuntimeMode environment() {
+ return RuntimeMode.byName(runMode);
+ }
+
+ @Override
+ public String pluginPath() {
+ return pluginPath;
+ }
+
+ @Override
+ public String pluginConfigFilePath() {
+ return pluginConfigFilePath;
+ }
+
+ @Override
+ public String uploadTempPath() {
+ return "temp";
+ }
+
+ @Override
+ public String backupPath() {
+ return "backupPlugin";
+ }
+
+ @Override
+ public String pluginRestControllerPathPrefix() {
+ return "/api/plugin";
+ }
+
+ @Override
+ public boolean enablePluginIdRestControllerPathPrefix() {
+ return true;
+ }
+
+ public String getRunMode() {
+ return runMode;
+ }
+
+ public void setRunMode(String runMode) {
+ this.runMode = runMode;
+ }
+
+
+ public String getPluginPath() {
+ return pluginPath;
+ }
+
+ public void setPluginPath(String pluginPath) {
+ this.pluginPath = pluginPath;
+ }
+
+ public String getPluginConfigFilePath() {
+ return pluginConfigFilePath;
+ }
+
+ public void setPluginConfigFilePath(String pluginConfigFilePath) {
+ this.pluginConfigFilePath = pluginConfigFilePath;
+ }
+
+ @Override
+ public String toString() {
+ return "PluginArgConfiguration{" +
+ "runMode='" + runMode + '\'' +
+ ", pluginPath='" + pluginPath + '\'' +
+ ", pluginConfigFilePath='" + pluginConfigFilePath + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/jsh/erp/config/Swagger2Config.java b/src/main/java/com/jsh/erp/config/Swagger2Config.java
new file mode 100644
index 0000000..c42bf95
--- /dev/null
+++ b/src/main/java/com/jsh/erp/config/Swagger2Config.java
@@ -0,0 +1,44 @@
+package com.jsh.erp.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * 插件集成配置
+ *
+ * @author jishenghua
+ * @version 1.0
+ */
+@Configuration
+@EnableSwagger2
+public class Swagger2Config {
+
+ @Bean
+ public Docket createRestApi() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(this.apiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("管伊佳ERP Restful Api")
+ .description("管伊佳ERP接口描述")
+ .termsOfServiceUrl("http://127.0.0.1")
+ .contact(new Contact("jishenghua", "", ""))
+ .version("3.0")
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/jsh/erp/config/TenantConfig.java b/src/main/java/com/jsh/erp/config/TenantConfig.java
new file mode 100644
index 0000000..4383929
--- /dev/null
+++ b/src/main/java/com/jsh/erp/config/TenantConfig.java
@@ -0,0 +1,117 @@
+package com.jsh.erp.config;
+
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
+import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
+import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
+import com.jsh.erp.utils.Tools;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.reflection.MetaObject;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class TenantConfig {
+
+ @Bean
+ public PaginationInterceptor paginationInterceptor(HttpServletRequest request) {
+ PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+ List sqlParserList = new ArrayList<>();
+ TenantSqlParser tenantSqlParser = new TenantSqlParser();
+ tenantSqlParser.setTenantHandler(new TenantHandler() {
+ @Override
+ public Expression getTenantId() {
+ String token = request.getHeader("X-Access-Token");
+ Long tenantId = Tools.getTenantIdByToken(token);
+ if (tenantId!=0L) {
+ return new LongValue(tenantId);
+ } else {
+ //超管
+ return null;
+ }
+ }
+
+ @Override
+ public String getTenantIdColumn() {
+ return "tenant_id";
+ }
+
+ @Override
+ public boolean doTableFilter(String tableName) {
+ //获取开启状态
+ Boolean res = true;
+ String token = request.getHeader("X-Access-Token");
+ Long tenantId = Tools.getTenantIdByToken(token);
+ if (tenantId!=0L) {
+ // 这里可以判断是否过滤表
+ if ("jsh_sequence".equals(tableName) || "jsh_function".equals(tableName)
+ || "jsh_platform_config".equals(tableName) || "jsh_tenant".equals(tableName)) {
+ res = true;
+ } else {
+ res = false;
+ }
+ }
+ return res;
+ }
+ });
+
+ sqlParserList.add(tenantSqlParser);
+ paginationInterceptor.setSqlParserList(sqlParserList);
+ paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
+ @Override
+ public boolean doFilter(MetaObject metaObject) {
+ MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
+ // 过滤自定义查询此时无租户信息约束出现
+ if ("com.jsh.erp.datasource.mappers.UserMapperEx.getUserByWeixinOpenId".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.UserMapperEx.updateUserWithWeixinOpenId".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.UserMapperEx.getUserListByUserNameOrLoginName".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.UserMapperEx.disableUserByLimit".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.RoleMapperEx.getRoleWithoutTenant".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.LogMapperEx.insertLogWithUserId".equals(ms.getId())) {
+ return true;
+ } else if ("com.jsh.erp.datasource.mappers.UserBusinessMapperEx.getBasicDataByKeyIdAndType".equals(ms.getId())) {
+ return true;
+ }
+ return false;
+ }
+ });
+ return paginationInterceptor;
+ }
+
+ /**
+ * 相当于顶部的:
+ * {@code @MapperScan("com.jsh.erp.datasource.mappers*")}
+ * 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径
+ */
+ @Bean
+ public MapperScannerConfigurer mapperScannerConfigurer() {
+ MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
+ scannerConfigurer.setBasePackage("com.jsh.erp.datasource.mappers*");
+ return scannerConfigurer;
+ }
+
+ /**
+ * 性能分析拦截器,不建议生产使用
+ */
+// @Bean
+// public PerformanceInterceptor performanceInterceptor(){
+// return new PerformanceInterceptor();
+// }
+
+
+}
diff --git a/src/main/java/com/jsh/erp/constants/BusinessConstants.java b/src/main/java/com/jsh/erp/constants/BusinessConstants.java
new file mode 100644
index 0000000..0fb01da
--- /dev/null
+++ b/src/main/java/com/jsh/erp/constants/BusinessConstants.java
@@ -0,0 +1,245 @@
+package com.jsh.erp.constants;
+
+/**
+ * @ClassName:BusinessConstants
+ * @Description 业务字典类
+ * @Author qiankunpingtai
+ * @Date 2019-3-6 17:58
+ * @Version 1.0
+ **/
+public class BusinessConstants {
+
+ /**
+ * 默认的日期格式
+ */
+ public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * 一天的初始时间
+ */
+ public static final String DAY_FIRST_TIME = " 00:00:00";
+ /**
+ * 一天的结束时间
+ */
+ public static final String DAY_LAST_TIME = " 23:59:59";
+ /**
+ * 默认的分页起始页页码
+ */
+ public static final Integer DEFAULT_PAGINATION_PAGE_NUMBER = 1;
+ /**
+ * 无数据时列表返回的默认数据条数
+ */
+ public static final Long DEFAULT_LIST_NULL_NUMBER = 0L;
+ /**
+ * 默认的分页条数
+ */
+ public static final Integer DEFAULT_PAGINATION_PAGE_SIZE = 10;
+ /**
+ * 单据主表出入库类型 type 入库 出库 其它
+ * depothead
+ * */
+ public static final String DEPOTHEAD_TYPE_IN = "入库";
+ public static final String DEPOTHEAD_TYPE_OUT = "出库";
+ public static final String DEPOTHEAD_TYPE_OTHER = "其它";
+ /**
+ * 付款类型 payType //现付/预付款
+ * */
+ public static final String PAY_TYPE_PREPAID = "预付款";
+ public static final String PAY_TYPE_BY_CASH = "现付";
+ /**
+ * 删除标记 deleteFlag '0'未删除 '1'已删除
+ * */
+ public static final String DELETE_FLAG_DELETED = "1";
+ public static final String DELETE_FLAG_EXISTS = "0";
+ /**
+ * 是否卖出 isSell '0'未卖出 '1'已卖出
+ * */
+ public static final String IS_SELL_SELLED = "1";
+ public static final String IS_SELL_HOLD = "0";
+ /**
+ * 商品是否开启序列号标识enableSerialNumber '0'未启用 '1'启用
+ * */
+ public static final String ENABLE_SERIAL_NUMBER_ENABLED = "1";
+ public static final String ENABLE_SERIAL_NUMBER_NOT_ENABLED = "0";
+ /**
+ * 商品是否开启批号标识enableBatchNumber '0'未启用 '1'启用
+ * */
+ public static final String ENABLE_BATCH_NUMBER_ENABLED = "1";
+ public static final String ENABLE_BATCH_NUMBER_NOT_ENABLED = "0";
+ /**
+ * 单据状态 billsStatus '0'未审核 '1'审核 '2'完成采购|销售 '3'部分采购|销售
+ * */
+ public static final String BILLS_STATUS_UN_AUDIT = "0";
+ public static final String BILLS_STATUS_AUDIT = "1";
+ public static final String BILLS_STATUS_SKIPED = "2";
+ public static final String BILLS_STATUS_SKIPING = "3";
+ /**
+ * 单据-采购状态 purchaseStatus '0'未采购、'2'完成采购、'3'部分采购
+ * */
+ public static final String PURCHASE_STATUS_UN_AUDIT = "0";
+ public static final String PURCHASE_STATUS_SKIPED = "2";
+ public static final String PURCHASE_STATUS_SKIPING = "3";
+ /**
+ * 出入库分类
+ * 请购单、采购、采购退货、其它、零售、销售、调拨、盘点复盘等
+ * */
+ public static final String SUB_TYPE_PURCHASE_APPLY = "请购单";
+ public static final String SUB_TYPE_PURCHASE_ORDER = "采购订单";
+ public static final String SUB_TYPE_PURCHASE = "采购";
+ public static final String SUB_TYPE_PURCHASE_RETURN = "采购退货";
+ public static final String SUB_TYPE_OTHER = "其它";
+ public static final String SUB_TYPE_RETAIL = "零售";
+ public static final String SUB_TYPE_RETAIL_RETURN = "零售退货";
+ public static final String SUB_TYPE_SALES_ORDER = "销售订单";
+ public static final String SUB_TYPE_SALES = "销售";
+ public static final String SUB_TYPE_SALES_RETURN = "销售退货";
+ public static final String SUB_TYPE_TRANSFER = "调拨";
+ public static final String SUB_TYPE_CHECK_ENTER = "盘点录入";
+ public static final String SUB_TYPE_REPLAY = "盘点复盘";
+ public static final String SUB_TYPE_ASSEMBLE = "组装单";
+ public static final String SUB_TYPE_DISASSEMBLE = "拆卸单";
+ /**
+ * 生产类型分类
+ * 生产入库
+ * */
+ public static final String BILL_TYPE_PRODUCE_IN = "生产入库";
+ /**
+ * 财务单据分类
+ * 收款、付款、转账
+ * */
+ public static final String TYPE_MONEY_IN = "收款";
+ public static final String TYPE_MONEY_OUT = "付款";
+ public static final String TYPE_GIRO = "转账";
+ /**
+ * 批量插入sql时最大的数据条数
+ * */
+ public static final int BATCH_INSERT_MAX_NUMBER = 500;
+ /**
+ * sequence名称
+ * */
+ //sequence返回字符串的最小长度
+ public static final Long SEQ_TO_STRING_MIN_LENGTH = 10000000000L;
+ //sequence长度小于基准长度时前追加基础值
+ public static final String SEQ_TO_STRING_LESS_INSERT = "0";
+ //单据编号
+ public static final String DEPOT_NUMBER_SEQ = "depot_number_seq";
+ /**
+ * 商品类别根目录id
+ * */
+ /**
+ * create by: qiankunpingtai
+ * create time: 2019/3/14 11:41
+ * description:
+ * 为了使用户可以自己建初始目录,设定根目录的父级目录id为-1
+ *
+ */
+ public static final Long MATERIAL_CATEGORY_ROOT_PARENT_ID = -1L;
+ /**
+ * 商品类别状态
+ * 0系统默认,1启用,2删除
+ * */
+ public static final String MATERIAL_CATEGORY_STATUS_DEFAULT = "0";
+ public static final String MATERIAL_CATEGORY_STATUS_ENABLE = "1";
+ public static final String MATERIAL_CATEGORY_STATUS_DELETE = "2";
+ /**
+ * 机构状态
+ * 1未营业、2正常营业、3暂停营业、4终止营业,5已除名
+ * */
+ public static final String ORGANIZATION_STCD_NOT_OPEN = "1";
+ public static final String ORGANIZATION_STCD_OPEN = "2";
+ public static final String ORGANIZATION_STCD_BUSINESS_SUSPENDED = "3";
+ public static final String ORGANIZATION_STCD_BUSINESS_TERMINATED = "4";
+ public static final String ORGANIZATION_STCD_REMOVED = "5";
+ /**
+ * 根机构父级编号
+ * 根机父级构编号默认为-1
+ * */
+ public static final String ORGANIZATION_ROOT_PARENT_NO = "-1";
+ /**
+ * 新增用户默认密码
+ * */
+ public static final String USER_DEFAULT_PASSWORD = "123456";
+ /**
+ * 用户是否系统自带
+ * 0、非系统自带,1系统自带
+ * */
+ public static final byte USER_NOT_SYSTEM = 0;
+ public static final byte USER_IS_SYSTEM = 1;
+ /**
+ * 用户是否为管理者
+ * 0、管理者,1员工
+ * */
+ public static final byte USER_IS_MANAGER = 0;
+ public static final byte USER_NOT_MANAGER = 1;
+ /**
+ * 用户状态
+ * 0:正常,2封禁
+ * */
+ public static final byte USER_STATUS_NORMAL = 0;
+ public static final byte USER_STATUS_BANNED = 2;
+ /**
+ * 日志操作
+ * 新增、修改、删除、登录、导入
+ * */
+ public static final String LOG_OPERATION_TYPE_ADD = "新增";
+ public static final String LOG_OPERATION_TYPE_BATCH_ADD = "批量新增";
+ public static final String LOG_OPERATION_TYPE_EDIT = "修改";
+ public static final String LOG_OPERATION_TYPE_DELETE = "删除";
+ public static final String LOG_OPERATION_TYPE_LOGIN = "登录";
+ public static final String LOG_OPERATION_TYPE_IMPORT = "导入";
+ public static final String LOG_OPERATION_TYPE_ENABLED = "更新状态";
+
+ /**
+ * 数据数量单位
+ * 条
+ * */
+ public static final String LOG_DATA_UNIT = "条";
+
+ /**
+ * 删除类型
+ * 1正常删除
+ * 2强制删除
+ * */
+ public static final String DELETE_TYPE_NORMAL = "1";
+ public static final String DELETE_TYPE_FORCE = "2";
+
+ /**
+ * 默认管理员账号
+ */
+ public static final String DEFAULT_MANAGER = "admin";
+
+ public static final String ROLE_TYPE_PRIVATE = "个人数据";
+
+ public static final String ROLE_TYPE_THIS_ORG = "本机构数据";
+
+ public static final String ROLE_TYPE_PUBLIC = "全部数据";
+
+ /**
+ * redis相关
+ * */
+ //session的生命周期,秒
+ public static final Long MAX_SESSION_IN_SECONDS=60*60*24*3L;
+
+ /**
+ * 验证码 redis key
+ */
+ public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
+ /**
+ * 验证码有效期(分钟)
+ */
+ public static final Integer CAPTCHA_EXPIRATION = 2;
+
+ /**
+ * 微信登录接口
+ */
+ public static final String WEIXIN_LOGIN = "/sns/jscode2session";
+
+ /**
+ * 微信获取token接口
+ */
+ public static final String WEIXIN_TOKEN = "/cgi-bin/token";
+
+ /**
+ * 微信发送订阅消息接口
+ */
+ public static final String WEIXIN_MESSAGE_SEND = "/cgi-bin/message/subscribe/send";
+}
diff --git a/src/main/java/com/jsh/erp/constants/ExceptionConstants.java b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java
new file mode 100644
index 0000000..0d0be4b
--- /dev/null
+++ b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java
@@ -0,0 +1,603 @@
+package com.jsh.erp.constants;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class ExceptionConstants {
+ /**
+ * code 格式 type+五位数字,例如3500000
+ * ResourceInfo(value = "inOutItem", type = 35)
+ *
+ * */
+
+ public static final String GLOBAL_RETURNS_CODE = "code";
+ public static final String GLOBAL_RETURNS_MESSAGE = "msg";
+ public static final String GLOBAL_RETURNS_DATA = "data";
+
+ /**
+ * 正常返回/操作成功
+ **/
+ public static final int SERVICE_SUCCESS_CODE = 200;
+ public static final String SERVICE_SUCCESS_MSG = "操作成功";
+ /**
+ * 数据查询异常
+ */
+ public static final int DATA_READ_FAIL_CODE = 300;
+ public static final String DATA_READ_FAIL_MSG = "数据查询异常";
+ /**
+ * 数据写入异常
+ */
+ public static final int DATA_WRITE_FAIL_CODE = 301;
+ public static final String DATA_WRITE_FAIL_MSG = "数据写入异常";
+
+ /**
+ * 系统运行时未知错误
+ **/
+ public static final int SERVICE_SYSTEM_ERROR_CODE = 500;
+ public static final String SERVICE_SYSTEM_ERROR_MSG = "未知异常";
+ /**
+ * 检测到存在依赖数据,是否强制删除?
+ **/
+ public static final int DELETE_FORCE_CONFIRM_CODE = 601;
+ public static final String DELETE_FORCE_CONFIRM_MSG = "检测到存在依赖数据,不能删除!";
+
+ /**
+ * 文件扩展名必须为xls
+ **/
+ public static final int FILE_EXTENSION_ERROR_CODE = 701;
+ public static final String FILE_EXTENSION_ERROR_MSG = "文件扩展名必须为xls";
+
+ /**
+ * 用户信息
+ * type = 5
+ * */
+ //添加用户信息失败
+ public static final int USER_ADD_FAILED_CODE = 500000;
+ public static final String USER_ADD_FAILED_MSG = "添加用户信息失败";
+ //删除用户信息失败
+ public static final int USER_DELETE_FAILED_CODE = 500001;
+ public static final String USER_DELETE_FAILED_MSG = "删除用户信息失败";
+ //修改用户信息失败
+ public static final int USER_EDIT_FAILED_CODE = 500002;
+ public static final String USER_EDIT_FAILED_MSG = "修改用户信息失败";
+ //登录名已存在
+ public static final int USER_LOGIN_NAME_ALREADY_EXISTS_CODE = 500003;
+ public static final String USER_LOGIN_NAME_ALREADY_EXISTS_MSG = "登录名在本系统已存在";
+ //用户录入数量超出限制
+ public static final int USER_OVER_LIMIT_FAILED_CODE = 500004;
+ public static final String USER_OVER_LIMIT_FAILED_MSG = "用户录入数量超出限制,请联系平台管理员";
+ //此用户名限制使用
+ public static final int USER_NAME_LIMIT_USE_CODE = 500005;
+ public static final String USER_NAME_LIMIT_USE_MSG = "此用户名限制使用";
+ //启用的用户数量超出限制
+ public static final int USER_ENABLE_OVER_LIMIT_FAILED_CODE = 500006;
+ public static final String USER_ENABLE_OVER_LIMIT_FAILED_MSG = "启用的用户数量超出限制,请联系平台管理员";
+ //租户不能被删除
+ public static final int USER_LIMIT_TENANT_DELETE_CODE = 500008;
+ public static final String USER_LIMIT_TENANT_DELETE_MSG = "抱歉,租户不能被删除";
+ //当前机构已经存在经理
+ public static final int USER_LEADER_IS_EXIST_CODE = 500009;
+ public static final String USER_LEADER_IS_EXIST_MSG = "抱歉,当前机构已经存在经理";
+ //验证码错误
+ public static final int USER_JCAPTCHA_ERROR_CODE = 500010;
+ public static final String USER_JCAPTCHA_ERROR_MSG = "验证码错误";
+ //验证码已失效
+ public static final int USER_JCAPTCHA_EXPIRE_CODE = 500011;
+ public static final String USER_JCAPTCHA_EXPIRE_MSG = "验证码已失效";
+ //验证码不能为空
+ public static final int USER_JCAPTCHA_EMPTY_CODE = 500012;
+ public static final String USER_JCAPTCHA_EMPTY_MSG = "验证码不能为空";
+
+ /**
+ * 角色信息
+ * type = 10
+ * */
+ //添加角色信息失败
+ public static final int ROLE_ADD_FAILED_CODE = 1000000;
+ public static final String ROLE_ADD_FAILED_MSG = "添加角色信息失败";
+ //删除角色信息失败
+ public static final int ROLE_DELETE_FAILED_CODE = 1000001;
+ public static final String ROLE_DELETE_FAILED_MSG = "删除角色信息失败";
+ //修改角色信息失败
+ public static final int ROLE_EDIT_FAILED_CODE = 1000002;
+ public static final String ROLE_EDIT_FAILED_MSG = "修改角色信息失败";
+ /**
+ * 应用信息
+ * type = 15
+ * */
+ //添加角色信息失败
+ public static final int APP_ADD_FAILED_CODE = 1500000;
+ public static final String APP_ADD_FAILED_MSG = "添加应用信息失败";
+ //删除角色信息失败
+ public static final int APP_DELETE_FAILED_CODE = 1500001;
+ public static final String APP_DELETE_FAILED_MSG = "删除应用信息失败";
+ //修改角色信息失败
+ public static final int APP_EDIT_FAILED_CODE = 1500002;
+ public static final String APP_EDIT_FAILED_MSG = "修改应用信息失败";
+ /**
+ * 仓库信息
+ * type = 20
+ * */
+ //添加仓库信息失败
+ public static final int DEPOT_ADD_FAILED_CODE = 2000000;
+ public static final String DEPOT_ADD_FAILED_MSG = "添加仓库信息失败";
+ //删除仓库信息失败
+ public static final int DEPOT_DELETE_FAILED_CODE = 2000001;
+ public static final String DEPOT_DELETE_FAILED_MSG = "删除仓库信息失败";
+ //修改仓库信息失败
+ public static final int DEPOT_EDIT_FAILED_CODE = 2000002;
+ public static final String DEPOT_EDIT_FAILED_MSG = "修改仓库信息失败";
+
+ /**
+ * 功能模块信息
+ * type = 30
+ * */
+ //添加角色信息失败
+ public static final int FUNCTIONS_ADD_FAILED_CODE = 3000000;
+ public static final String FUNCTIONS_ADD_FAILED_MSG = "添加功能模块信息失败";
+ //删除角色信息失败
+ public static final int FUNCTIONS_DELETE_FAILED_CODE = 3000001;
+ public static final String FUNCTIONS_DELETE_FAILED_MSG = "删除功能模块信息失败";
+ //修改角色信息失败
+ public static final int FUNCTIONS_EDIT_FAILED_CODE = 3000002;
+ public static final String FUNCTIONS_EDIT_FAILED_MSG = "修改功能模块信息失败";
+ /**
+ * 收支项目信息
+ * type = 35
+ * */
+ //添加收支项目信息失败
+ public static final int IN_OUT_ITEM_ADD_FAILED_CODE = 3500000;
+ public static final String IN_OUT_ITEM_ADD_FAILED_MSG = "添加收支项目信息失败";
+ //删除收支项目信息失败
+ public static final int IN_OUT_ITEM_DELETE_FAILED_CODE = 3500001;
+ public static final String IN_OUT_ITEM_DELETE_FAILED_MSG = "删除收支项目信息失败";
+ //修改收支项目信息失败
+ public static final int IN_OUT_ITEM_EDIT_FAILED_CODE = 3500002;
+ public static final String IN_OUT_ITEM_EDIT_FAILED_MSG = "修改收支项目信息失败";
+ //该收支项目的名称已经存在
+ public static final int IN_OUT_ITEM_NAME_EXIST_FAILED_CODE = 3500003;
+ public static final String IN_OUT_ITEM_NAME_EXIST_FAILED_MSG = "该收支项目的名称已经存在,请修改!";
+ /**
+ * 多单位信息
+ * type = 40
+ * */
+ //添加多单位信息失败
+ public static final int UNIT_ADD_FAILED_CODE = 4000000;
+ public static final String UNIT_ADD_FAILED_MSG = "添加多单位信息失败";
+ //删除多单位信息失败
+ public static final int UNIT_DELETE_FAILED_CODE = 4000001;
+ public static final String UNIT_DELETE_FAILED_MSG = "删除多单位信息失败";
+ //修改多单位信息失败
+ public static final int UNIT_EDIT_FAILED_CODE = 4000002;
+ public static final String UNIT_EDIT_FAILED_MSG = "修改多单位信息失败";
+ /**
+ * 经手人信息
+ * type = 45
+ * */
+ //添加经手人信息失败
+ public static final int PERSON_ADD_FAILED_CODE = 4500000;
+ public static final String PERSON_ADD_FAILED_MSG = "添加经手人信息失败";
+ //删除经手人信息失败
+ public static final int PERSON_DELETE_FAILED_CODE = 4500001;
+ public static final String PERSON_DELETE_FAILED_MSG = "删除经手人信息失败";
+ //修改经手人信息失败
+ public static final int PERSON_EDIT_FAILED_CODE = 4500002;
+ public static final String PERSON_EDIT_FAILED_MSG = "修改经手人信息失败";
+ /**
+ * 用户角色模块关系信息
+ * type = 50
+ * */
+ //添加用户角色模块关系信息失败
+ public static final int USER_BUSINESS_ADD_FAILED_CODE = 5000000;
+ public static final String USER_BUSINESS_ADD_FAILED_MSG = "添加用户角色模块关系信息失败";
+ //删除用户角色模块关系信息失败
+ public static final int USER_BUSINESS_DELETE_FAILED_CODE = 5000001;
+ public static final String USER_BUSINESS_DELETE_FAILED_MSG = "删除用户角色模块关系信息失败";
+ //修改用户角色模块关系信息失败
+ public static final int USER_BUSINESS_EDIT_FAILED_CODE = 5000002;
+ public static final String USER_BUSINESS_EDIT_FAILED_MSG = "修改用户角色模块关系信息失败";
+ /**
+ * 系统参数信息
+ * type = 55
+ * */
+ //添加系统参数信息失败
+ public static final int SYSTEM_CONFIG_ADD_FAILED_CODE = 5500000;
+ public static final String SYSTEM_CONFIG_ADD_FAILED_MSG = "添加系统参数信息失败";
+ //删除系统参数信息失败
+ public static final int SYSTEM_CONFIG_DELETE_FAILED_CODE = 5500001;
+ public static final String SYSTEM_CONFIG_DELETE_FAILED_MSG = "删除系统参数信息失败";
+ //修改系统参数信息失败
+ public static final int SYSTEM_CONFIG_EDIT_FAILED_CODE = 5500002;
+ public static final String SYSTEM_CONFIG_EDIT_FAILED_MSG = "修改系统参数信息失败";
+ /**
+ * 商品扩展信息
+ * type = 60
+ * */
+ //添加商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_ADD_FAILED_CODE = 6000000;
+ public static final String MATERIAL_PROPERTY_ADD_FAILED_MSG = "添加商品扩展信息失败";
+ //删除商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_DELETE_FAILED_CODE = 6000001;
+ public static final String MATERIAL_PROPERTY_DELETE_FAILED_MSG = "删除商品扩展信息失败";
+ //修改商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_EDIT_FAILED_CODE = 6000002;
+ public static final String MATERIAL_PROPERTY_EDIT_FAILED_MSG = "修改商品扩展信息失败";
+ /**
+ * 账户信息
+ * type = 65
+ * */
+ //添加账户信息失败
+ public static final int ACCOUNT_ADD_FAILED_CODE = 6500000;
+ public static final String ACCOUNT_ADD_FAILED_MSG = "添加账户信息失败";
+ //删除账户信息失败
+ public static final int ACCOUNT_DELETE_FAILED_CODE = 6500001;
+ public static final String ACCOUNT_DELETE_FAILED_MSG = "删除账户信息失败";
+ //修改账户信息失败
+ public static final int ACCOUNT_EDIT_FAILED_CODE = 6500002;
+ public static final String ACCOUNT_EDIT_FAILED_MSG = "修改账户信息失败";
+ /**
+ * 供应商信息
+ * type = 70
+ * */
+ //添加供应商信息失败
+ public static final int SUPPLIER_ADD_FAILED_CODE = 7000000;
+ public static final String SUPPLIER_ADD_FAILED_MSG = "添加供应商信息失败";
+ //删除供应商信息失败
+ public static final int SUPPLIER_DELETE_FAILED_CODE = 7000001;
+ public static final String SUPPLIER_DELETE_FAILED_MSG = "删除供应商信息失败";
+ //修改供应商信息失败
+ public static final int SUPPLIER_EDIT_FAILED_CODE = 7000002;
+ public static final String SUPPLIER_EDIT_FAILED_MSG = "修改供应商信息失败";
+ /**
+ * 商品类别信息
+ * type = 75
+ * */
+ //添加商品类别信息失败
+ public static final int MATERIAL_CATEGORY_ADD_FAILED_CODE = 7500000;
+ public static final String MATERIAL_CATEGORY_ADD_FAILED_MSG = "添加商品类别信息失败";
+ //删除商品类别信息失败
+ public static final int MATERIAL_CATEGORY_DELETE_FAILED_CODE = 7500001;
+ public static final String MATERIAL_CATEGORY_DELETE_FAILED_MSG = "删除商品类别信息失败";
+ //修改商品类别信息失败
+ public static final int MATERIAL_CATEGORY_EDIT_FAILED_CODE = 7500002;
+ public static final String MATERIAL_CATEGORY_EDIT_FAILED_MSG = "修改商品类别信息失败";
+ //商品类别编号已存在
+ public static final int MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE = 7500003;
+ public static final String MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG = "商品类别编号已存在";
+ //根类别不支持修改
+ public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_CODE = 7500004;
+ public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_MSG = "根类别不支持修改";
+ //根类别不支持删除
+ public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_CODE = 7500005;
+ public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_MSG = "根类别不支持删除";
+ //该类别存在下级不允许删除
+ public static final int MATERIAL_CATEGORY_CHILD_NOT_SUPPORT_DELETE_CODE = 7500006;
+ public static final String MATERIAL_CATEGORY_CHILD_NOT_SUPPORT_DELETE_MSG = "该类别存在下级不允许删除";
+ /**
+ * 商品信息
+ * type = 80
+ * */
+ //商品信息不存在
+ public static final int MATERIAL_NOT_EXISTS_CODE = 8000000;
+ public static final String MATERIAL_NOT_EXISTS_MSG = "商品信息不存在";
+ //商品信息不唯一
+ public static final int MATERIAL_NOT_ONLY_CODE = 8000001;
+ public static final String MATERIAL_NOT_ONLY_MSG = "商品信息不唯一";
+ //该商品未开启序列号
+ public static final int MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE = 8000002;
+ public static final String MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG = "该商品未开启序列号功能";
+ //商品的序列号不能为空
+ public static final int MATERIAL_SERIAL_NUMBERE_EMPTY_CODE = 8000003;
+ public static final String MATERIAL_SERIAL_NUMBERE_EMPTY_MSG = "抱歉,商品条码:%s的序列号不能为空";
+ //商品库存不足
+ public static final int MATERIAL_STOCK_NOT_ENOUGH_CODE = 8000004;
+ public static final String MATERIAL_STOCK_NOT_ENOUGH_MSG = "商品:%s库存不足";
+ //商品条码重复
+ public static final int MATERIAL_BARCODE_EXISTS_CODE = 8000005;
+ public static final String MATERIAL_BARCODE_EXISTS_MSG = "商品条码:%s重复";
+ //商品-单位匹配不上
+ public static final int MATERIAL_UNIT_MATE_CODE = 8000006;
+ public static final String MATERIAL_UNIT_MATE_MSG = "抱歉,商品条码:%s的单位匹配不上,请完善多单位信息!";
+ //商品条码长度应该为4到40位
+ public static final int MATERIAL_BARCODE_LENGTH_ERROR_CODE = 8000007;
+ public static final String MATERIAL_BARCODE_LENGTH_ERROR_MSG = "商品条码:%s的长度应该为4到40位";
+ //序列号和批号只能有一项
+ public static final int MATERIAL_ENABLE_MUST_ONE_CODE = 8000008;
+ public static final String MATERIAL_ENABLE_MUST_ONE_MSG = "抱歉,商品条码:%s的序列号和批号不能同时填1";
+ //名称为空
+ public static final int MATERIAL_NAME_EMPTY_CODE = 8000010;
+ public static final String MATERIAL_NAME_EMPTY_MSG = "第%s行名称为空";
+ //基本单位为空
+ public static final int MATERIAL_UNIT_EMPTY_CODE = 8000011;
+ public static final String MATERIAL_UNIT_EMPTY_MSG = "第%s行基本单位为空";
+ //状态格式错误
+ public static final int MATERIAL_ENABLED_ERROR_CODE = 8000012;
+ public static final String MATERIAL_ENABLED_ERROR_MSG = "第%s行状态格式错误";
+ //单次导入超出1000条
+ public static final int MATERIAL_IMPORT_OVER_LIMIT_CODE = 8000013;
+ public static final String MATERIAL_IMPORT_OVER_LIMIT_MSG = "抱歉,单次导入不能超出1000条";
+ //基础重量格式错误
+ public static final int MATERIAL_WEIGHT_NOT_DECIMAL_CODE = 8000014;
+ public static final String MATERIAL_WEIGHT_NOT_DECIMAL_MSG = "第%s行基础重量格式错误";
+ //保质期格式错误
+ public static final int MATERIAL_EXPIRY_NUM_NOT_INTEGER_CODE = 8000015;
+ public static final String MATERIAL_EXPIRY_NUM_NOT_INTEGER_MSG = "第%s行保质期格式错误";
+ //比例格式错误
+ public static final int MATERIAL_RATIO_NOT_INTEGER_CODE = 8000016;
+ public static final String MATERIAL_RATIO_NOT_INTEGER_MSG = "第%s行比例格式错误";
+ //组装拆卸单不能选择批号或序列号商品
+ public static final int MATERIAL_ASSEMBLE_SELECT_ERROR_CODE = 80000017;
+ public static final String MATERIAL_ASSEMBLE_SELECT_ERROR_MSG = "抱歉,组装拆卸单不能选择批号或序列号商品:%s";
+ //调拨单不能选择批号或序列号商品
+ public static final int MATERIAL_TRANSFER_SELECT_ERROR_CODE = 80000018;
+ public static final String MATERIAL_TRANSFER_SELECT_ERROR_MSG = "抱歉,调拨单不能选择批号或序列号商品:%s,建议走其它入库和出库单";
+ //盘点业务不能选择批号或序列号商品
+ public static final int MATERIAL_STOCK_CHECK_ERROR_CODE = 80000019;
+ public static final String MATERIAL_STOCK_CHECK_ERROR_MSG = "抱歉,盘点业务不能选择批号或序列号商品:%s,建议走其它入库和出库单";
+ //EXCEL中存在重复的商品
+ public static final int MATERIAL_EXCEL_IMPORT_EXIST_CODE = 80000020;
+ public static final String MATERIAL_EXCEL_IMPORT_EXIST_MSG = "抱歉,EXCEL中存在重复的商品,具体信息为:%s";
+ //EXCEL中存在重复的条码
+ public static final int MATERIAL_EXCEL_IMPORT_BARCODE_EXIST_CODE = 80000021;
+ public static final String MATERIAL_EXCEL_IMPORT_BARCODE_EXIST_MSG = "抱歉,EXCEL中存在重复的条码,具体条码为:%s";
+ //名称长度超出
+ public static final int MATERIAL_NAME_OVER_CODE = 8000022;
+ public static final String MATERIAL_NAME_OVER_MSG = "第%s行名称长度超出100个字符";
+ //规格长度超出
+ public static final int MATERIAL_STANDARD_OVER_CODE = 8000023;
+ public static final String MATERIAL_STANDARD_OVER_MSG = "第%s行规格长度超出100个字符";
+ //型号长度超出
+ public static final int MATERIAL_MODEL_OVER_CODE = 8000024;
+ public static final String MATERIAL_MODEL_OVER_MSG = "第%s行型号长度超出100个字符";
+ //多属性商品不能输入库存,建议进行盘点录入
+ public static final int MATERIAL_SKU_BEGIN_STOCK_FAILED_CODE = 8000025;
+ public static final String MATERIAL_SKU_BEGIN_STOCK_FAILED_MSG = "多属性商品%s不能输入库存,建议进行盘点录入";
+ //商品条码不存在,请重新选择
+ public static final int MATERIAL_BARCODE_IS_NOT_EXIST_CODE = 8000026;
+ public static final String MATERIAL_BARCODE_IS_NOT_EXIST_MSG = "商品条码%s不存在,请重新选择";
+ //基本条码为空
+ public static final int MATERIAL_BARCODE_EMPTY_CODE = 8000027;
+ public static final String MATERIAL_BARCODE_EMPTY_MSG = "第%s行基本条码为空";
+ //EXCEL中有副条码在系统中已存在(除自身商品之外)
+ public static final int MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_CODE = 80000028;
+ public static final String MATERIAL_EXCEL_IMPORT_MANY_BARCODE_EXIST_MSG = "抱歉,EXCEL中有副条码在系统中已存在,具体副条码为:%s";
+
+ /**
+ * 单据信息
+ * type = 85
+ * */
+ //添加单据信息失败
+ public static final int DEPOT_HEAD_ADD_FAILED_CODE = 8500000;
+ public static final String DEPOT_HEAD_ADD_FAILED_MSG = "添加单据信息失败";
+ //删除单据信息失败
+ public static final int DEPOT_HEAD_DELETE_FAILED_CODE = 8500001;
+ public static final String DEPOT_HEAD_DELETE_FAILED_MSG = "删除单据信息失败";
+ //修改单据信息失败
+ public static final int DEPOT_HEAD_EDIT_FAILED_CODE = 8500002;
+ public static final String DEPOT_HEAD_EDIT_FAILED_MSG = "修改单据信息失败";
+ //单据录入-仓库不能为空
+ public static final int DEPOT_HEAD_DEPOT_FAILED_CODE = 8500004;
+ public static final String DEPOT_HEAD_DEPOT_FAILED_MSG = "仓库不能为空";
+ //单据录入-调入仓库不能为空
+ public static final int DEPOT_HEAD_ANOTHER_DEPOT_FAILED_CODE = 8500005;
+ public static final String DEPOT_HEAD_ANOTHER_DEPOT_FAILED_MSG = "调入仓库不能为空";
+ //单据录入-明细不能为空
+ public static final int DEPOT_HEAD_ROW_FAILED_CODE = 8500006;
+ public static final String DEPOT_HEAD_ROW_FAILED_MSG = "单据明细不能为空";
+ //单据录入-账户不能为空
+ public static final int DEPOT_HEAD_ACCOUNT_FAILED_CODE = 8500007;
+ public static final String DEPOT_HEAD_ACCOUNT_FAILED_MSG = "结算账户不能为空";
+ //单据录入-请修改多账户的结算金额
+ public static final int DEPOT_HEAD_MANY_ACCOUNT_FAILED_CODE = 8500008;
+ public static final String DEPOT_HEAD_MANY_ACCOUNT_FAILED_MSG = "请修改多账户的结算金额";
+ //单据录入-调入仓库与原仓库不能重复
+ public static final int DEPOT_HEAD_ANOTHER_DEPOT_EQUAL_FAILED_CODE = 8500010;
+ public static final String DEPOT_HEAD_ANOTHER_DEPOT_EQUAL_FAILED_MSG = "调入仓库与原仓库不能重复";
+ //单据删除-只有未审核的单据才能删除,请先进行反审核
+ public static final int DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_CODE = 8500011;
+ public static final String DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_MSG = "抱歉,只有未审核的单据才能删除,请先进行反审核";
+ //单据审核-只有未审核的单据才能审核
+ public static final int DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_CODE = 8500012;
+ public static final String DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_MSG = "抱歉,只有未审核的单据才能审核";
+ //单据反审核-只有已审核的单据才能反审核
+ public static final int DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_CODE = 8500013;
+ public static final String DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_MSG = "抱歉,只有已审核的单据才能反审核";
+ //单据录入-商品条码XXX的数量需要修改下
+ public static final int DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_CODE = 85000014;
+ public static final String DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_MSG = "商品条码%s的数量需要修改下";
+ //单据录入-商品的批号不能为空
+ public static final int DEPOT_HEAD_BATCH_NUMBERE_EMPTY_CODE = 8500015;
+ public static final String DEPOT_HEAD_BATCH_NUMBERE_EMPTY_MSG = "抱歉,商品条码:%s的批号不能为空";
+ //单据录入-会员预付款余额不足
+ public static final int DEPOT_HEAD_MEMBER_PAY_LACK_CODE = 8500016;
+ public static final String DEPOT_HEAD_MEMBER_PAY_LACK_MSG = "抱歉,会员预付款余额不足";
+ //单据录入-累计订金超出原订单中的订金
+ public static final int DEPOT_HEAD_DEPOSIT_OVER_PRE_CODE = 8500017;
+ public static final String DEPOT_HEAD_DEPOSIT_OVER_PRE_MSG = "抱歉,累计订金超出原订单中的订金";
+ //单据录入-商品条码XXX的单价低于最低售价
+ public static final int DEPOT_HEAD_UNIT_PRICE_LOW_CODE = 8500018;
+ public static final String DEPOT_HEAD_UNIT_PRICE_LOW_MSG = "商品条码%s的单价低于最低售价";
+ //单据录入-单据明细中必须要有组合件和普通子件
+ public static final int DEPOT_HEAD_CHECK_ASSEMBLE_EMPTY_CODE = 8500020;
+ public static final String DEPOT_HEAD_CHECK_ASSEMBLE_EMPTY_MSG = "抱歉,单据明细中必须要有组合件和普通子件";
+ //单据录入-商品条码XXX的数量与序列号不一致
+ public static final int DEPOT_HEAD_SN_NUMBERE_FAILED_CODE = 8500021;
+ public static final String DEPOT_HEAD_SN_NUMBERE_FAILED_MSG = "抱歉,商品条码:%s的数量与序列号不一致";
+ //单据录入-单据编号已经存在
+ public static final int DEPOT_HEAD_BILL_NUMBER_EXIST_CODE = 8500022;
+ public static final String DEPOT_HEAD_BILL_NUMBER_EXIST_MSG = "抱歉,单据编号已经存在";
+ //单据录入-单据当前状态下不能修改
+ public static final int DEPOT_HEAD_BILL_CANNOT_EDIT_CODE = 8500023;
+ public static final String DEPOT_HEAD_BILL_CANNOT_EDIT_MSG = "抱歉,单据当前状态下不能修改";
+ //单据删除-单据中的序列号已经出库,不能删除
+ public static final int DEPOT_HEAD_SERIAL_IS_SELL_CODE = 8500024;
+ public static final String DEPOT_HEAD_SERIAL_IS_SELL_MSG = "抱歉,单据%s的序列号已经出库,不能删除";
+ //单据录入-单据附件不能超过规定数量
+ public static final int DEPOT_HEAD_FILE_NUM_LIMIT_CODE = 8500025;
+ public static final String DEPOT_HEAD_FILE_NUM_LIMIT_MSG = "抱歉,单据附件不能超过%s份";
+ //单据录入-完成采购的单据不能进行反审核
+ public static final int DEPOT_HEAD_PURCHASE_STATUS_TWO_CODE = 8500026;
+ public static final String DEPOT_HEAD_PURCHASE_STATUS_TWO_MSG = "抱歉,完成采购的单据不能进行反审核";
+ //单据录入-部分采购的单据不能进行反审核
+ public static final int DEPOT_HEAD_PURCHASE_STATUS_THREE_CODE = 8500027;
+ public static final String DEPOT_HEAD_PURCHASE_STATUS_THREE_MSG = "抱歉,部分采购的单据不能进行反审核";
+ //单据录入-单据中存在部分状态,需要到新增界面关联单据
+ public static final int DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_CODE = 8500028;
+ public static final String DEPOT_ITEM_EXIST_PARTIALLY_STATUS_FAILED_MSG = "抱歉,单据:%s是部分%s状态,需要到新增界面关联单据";
+ //单据录入-关联请购单号和关联订单号不能同时录入
+ public static final int DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_CODE = 8500029;
+ public static final String DEPOT_ITEM_EXIST_REPEAT_NO_FAILED_MSG = "抱歉,关联请购单号和关联订单号不能同时录入";
+ //单据录入-单据最新状态不能进行批量操作
+ public static final int DEPOT_ITEM_EXIST_NEW_STATUS_FAILED_CODE = 8500030;
+ public static final String DEPOT_ITEM_EXIST_NEW_STATUS_FAILED_MSG = "抱歉,单据:%s最新状态不能进行批量操作";
+ //单据录入-单据在该状态不能强制结单
+ public static final int DEPOT_HEAD_FORCE_CLOSE_FAILED_CODE = 8500031;
+ public static final String DEPOT_HEAD_FORCE_CLOSE_FAILED_MSG = "抱歉,单据:%s在该状态不能强制结单";
+ //单据录入-请勿频繁提交单据
+ public static final int DEPOT_HEAD_SUBMIT_REPEAT_FAILED_CODE = 8500032;
+ public static final String DEPOT_HEAD_SUBMIT_REPEAT_FAILED_MSG = "抱歉,请不要频繁提交单据";
+ //单据录入-单据明细中存在重复的序列号
+ public static final int DEPOT_HEAD_CHECK_SERIAL_NUMBER_REPEAT_CODE = 8500033;
+ public static final String DEPOT_HEAD_CHECK_SERIAL_NUMBER_REPEAT_MSG = "抱歉,单据明细中存在重复的序列号:%s";
+
+ /**
+ * 单据明细信息
+ * type = 90
+ * */
+ //添加单据明细信息失败
+ public static final int DEPOT_ITEM_ADD_FAILED_CODE = 9000000;
+ public static final String DEPOT_ITEM_ADD_FAILED_MSG = "添加单据明细信息失败";
+ //删除单据明细信息失败
+ public static final int DEPOT_ITEM_DELETE_FAILED_CODE = 9000001;
+ public static final String DEPOT_ITEM_DELETE_FAILED_MSG = "删除单据明细信息失败";
+ //修改单据明细信息失败
+ public static final int DEPOT_ITEM_EDIT_FAILED_CODE = 9000002;
+ public static final String DEPOT_ITEM_EDIT_FAILED_MSG = "修改单据明细信息失败";
+ //单据明细-明细中商品不存在
+ public static final int DEPOT_ITEM_BARCODE_IS_NOT_EXIST_CODE = 9000003;
+ public static final String DEPOT_ITEM_BARCODE_IS_NOT_EXIST_MSG = "抱歉,商品条码:%s在商品管理中不存在";
+ //单据明细-明细中仓库不存在
+ public static final int DEPOT_ITEM_DEPOTNAME_IS_NOT_EXIST_CODE = 9000004;
+ public static final String DEPOT_ITEM_DEPOTNAME_IS_NOT_EXIST_MSG = "抱歉,仓库:%s在基础资料-仓库信息中不存在";
+ //单据明细-单据中存在序列号,需要到新增界面关联单据
+ public static final int DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_CODE = 9000005;
+ public static final String DEPOT_ITEM_EXIST_SERIAL_NUMBER_FAILED_MSG = "抱歉,单据:%s里面存在序列号,需要到新增界面关联单据";
+ //单据明细-单据中存在批号,需要到新增界面关联单据
+ public static final int DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_CODE = 9000006;
+ public static final String DEPOT_ITEM_EXIST_BATCH_NUMBER_FAILED_MSG = "抱歉,单据:%s里面存在批号,需要到新增界面关联单据";
+ //原关联单据已被修改,请重新关联
+ public static final int DEPOT_ITEM_PRE_BILL_IS_CHANGE_CODE = 9000007;
+ public static final String DEPOT_ITEM_PRE_BILL_IS_CHANGE_MSG = "抱歉,原关联单据已被修改,请重新关联";
+
+ /**
+ * 财务信息
+ * type = 95
+ * */
+ //添加财务信息失败
+ public static final int ACCOUNT_HEAD_ADD_FAILED_CODE = 9500000;
+ public static final String ACCOUNT_HEAD_ADD_FAILED_MSG = "添加财务信息失败";
+ //删除财务信息失败
+ public static final int ACCOUNT_HEAD_DELETE_FAILED_CODE = 9500001;
+ public static final String ACCOUNT_HEAD_DELETE_FAILED_MSG = "删除财务信息失败";
+ //修改财务信息失败
+ public static final int ACCOUNT_HEAD_EDIT_FAILED_CODE = 9500002;
+ public static final String ACCOUNT_HEAD_EDIT_FAILED_MSG = "修改财务信息失败";
+ //单据录入-明细不能为空
+ public static final int ACCOUNT_HEAD_ROW_FAILED_CODE = 9500003;
+ public static final String ACCOUNT_HEAD_ROW_FAILED_MSG = "单据明细不能为空";
+ //单据删除-只有未审核的单据才能删除,请先进行反审核
+ public static final int ACCOUNT_HEAD_UN_AUDIT_DELETE_FAILED_CODE = 9500004;
+ public static final String ACCOUNT_HEAD_UN_AUDIT_DELETE_FAILED_MSG = "抱歉,只有未审核的单据才能删除,请先进行反审核";
+ //财务信息录入-单据编号已经存在
+ public static final int ACCOUNT_HEAD_BILL_NO_EXIST_CODE = 9500005;
+ public static final String ACCOUNT_HEAD_BILL_NO_EXIST_MSG = "抱歉,单据编号已经存在";
+ //财务信息录入-付款账户和明细中的账户重复
+ public static final int ACCOUNT_HEAD_ACCOUNT_REPEAT_CODE = 9500006;
+ public static final String ACCOUNT_HEAD_ACCOUNT_REPEAT_MSG = "抱歉,付款账户:%s和明细中的账户重复";
+ //财务信息审核-只有未审核的单据才能审核
+ public static final int ACCOUNT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_CODE = 9500007;
+ public static final String ACCOUNT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_MSG = "抱歉,只有未审核的单据才能审核";
+ //财务信息反审核-只有已审核的单据才能反审核
+ public static final int ACCOUNT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_CODE = 9500008;
+ public static final String ACCOUNT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_MSG = "抱歉,只有已审核的单据才能反审核";
+ /**
+ * 财务明细信息
+ * type = 100
+ * */
+ //添加财务明细信息失败
+ public static final int ACCOUNT_ITEM_ADD_FAILED_CODE = 10000000;
+ public static final String ACCOUNT_ITEM_ADD_FAILED_MSG = "添加财务明细信息失败";
+ //删除财务明细信息失败
+ public static final int ACCOUNT_ITEM_DELETE_FAILED_CODE = 10000001;
+ public static final String ACCOUNT_ITEM_DELETE_FAILED_MSG = "删除财务明细信息失败";
+ //修改财务明细信息失败
+ public static final int ACCOUNT_ITEM_EDIT_FAILED_CODE = 10000002;
+ public static final String ACCOUNT_ITEM_EDIT_FAILED_MSG = "修改财务明细信息失败";
+ /**
+ * 序列号
+ * type = 105
+ * */
+ /**序列号已存在*/
+ public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000;
+ public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号:%s已存在";
+ /**序列号不存在或者已经出库*/
+ public static final int SERIAL_NUMBERE_NOT_EXISTS_CODE = 10500001;
+ public static final String SERIAL_NUMBERE_NOT_EXISTS_MSG = "序列号:%s不存在或者已经出库";
+ /**
+ * 机构信息
+ * type = 110
+ * */
+ //添加机构信息失败
+ public static final int ORGANIZATION_ADD_FAILED_CODE = 11000000;
+ public static final String ORGANIZATION_ADD_FAILED_MSG = "添加机构信息失败";
+ //删除机构信息失败
+ public static final int ORGANIZATION_DELETE_FAILED_CODE = 11000001;
+ public static final String ORGANIZATION_DELETE_FAILED_MSG = "删除机构信息失败";
+ //修改机构信息失败
+ public static final int ORGANIZATION_EDIT_FAILED_CODE = 11000002;
+ public static final String ORGANIZATION_EDIT_FAILED_MSG = "修改机构信息失败";
+ //机构编号已存在
+ public static final int ORGANIZATION_NO_ALREADY_EXISTS_CODE = 11000003;
+ public static final String ORGANIZATION_NO_ALREADY_EXISTS_MSG = "机构编号已存在";
+ //根机构不允许删除
+ public static final int ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_CODE = 11000004;
+ public static final String ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_MSG = "根机构不允许删除";
+ //根机构不允许修改
+ public static final int ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_CODE = 11000005;
+ public static final String ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_MSG = "根机构不允许修改";
+ //该机构存在下级不允许删除
+ public static final int ORGANIZATION_CHILD_NOT_ALLOWED_DELETE_CODE = 11000006;
+ public static final String ORGANIZATION_CHILD_NOT_ALLOWED_DELETE_MSG = "该机构存在下级不允许删除";
+ /**
+ * 机构用户关联关系
+ * type = 115
+ * */
+ //添加机构用户关联关系失败
+ public static final int ORGA_USER_REL_ADD_FAILED_CODE = 11500000;
+ public static final String ORGA_USER_REL_ADD_FAILED_MSG = "添加机构用户关联关系失败";
+ //删除机构用户关联关系失败
+ public static final int ORGA_USER_REL_DELETE_FAILED_CODE = 11500001;
+ public static final String ORGA_USER_REL_DELETE_FAILED_MSG = "删除机构用户关联关系失败";
+ //修改机构用户关联关系失败
+ public static final int ORGA_USER_REL_EDIT_FAILED_CODE = 11500002;
+ public static final String ORGA_USER_REL_EDIT_FAILED_MSG = "修改机构用户关联关系失败";
+
+ //进销存统计,如果有权限的仓库数量太多则提示要选择仓库
+ public static final int REPORT_TWO_MANY_DEPOT_FAILED_CODE = 510;
+ public static final String REPORT_TWO_MANY_DEPOT_FAILED_MSG = "请选择仓库,再进行查询";
+
+ //演示用户禁止操作
+ public static final int SYSTEM_CONFIG_TEST_USER_CODE = -1;
+ public static final String SYSTEM_CONFIG_TEST_USER_MSG = "演示用户禁止操作";
+
+
+ /**
+ * 标准正常返回/操作成功返回
+ * @return
+ */
+ public static JSONObject standardSuccess () {
+ JSONObject success = new JSONObject();
+ success.put(GLOBAL_RETURNS_CODE, SERVICE_SUCCESS_CODE);
+ success.put(GLOBAL_RETURNS_MESSAGE, SERVICE_SUCCESS_MSG);
+ return success;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/AccountController.java b/src/main/java/com/jsh/erp/controller/AccountController.java
new file mode 100644
index 0000000..0642396
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/AccountController.java
@@ -0,0 +1,304 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.base.BaseController;
+import com.jsh.erp.base.TableDataInfo;
+import com.jsh.erp.datasource.entities.Account;
+import com.jsh.erp.datasource.vo.AccountVo4InOutList;
+import com.jsh.erp.datasource.vo.AccountVo4List;
+import com.jsh.erp.service.AccountService;
+import com.jsh.erp.service.SystemConfigService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import com.jsh.erp.utils.Constants;
+import com.jsh.erp.utils.ErpInfo;
+import com.jsh.erp.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
+import static com.jsh.erp.utils.ResponseJsonUtil.returnStr;
+
+/**
+ * @author jishenghua 75271*8920
+ */
+@RestController
+@RequestMapping(value = "/account")
+@Api(tags = {"账户管理"})
+public class AccountController extends BaseController {
+ private Logger logger = LoggerFactory.getLogger(AccountController.class);
+
+ @Resource
+ private AccountService accountService;
+
+ @Resource
+ private SystemConfigService systemConfigService;
+
+ @GetMapping(value = "/info")
+ @ApiOperation(value = "根据id获取信息")
+ public String getList(@RequestParam("id") Long id,
+ HttpServletRequest request) throws Exception {
+ Account account = accountService.getAccount(id);
+ Map objectMap = new HashMap<>();
+ if(account != null) {
+ objectMap.put("info", account);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ @GetMapping(value = "/list")
+ @ApiOperation(value = "获取信息列表")
+ public TableDataInfo getList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ String name = StringUtil.getInfo(search, "name");
+ String serialNo = StringUtil.getInfo(search, "serialNo");
+ String remark = StringUtil.getInfo(search, "remark");
+ List list = accountService.select(name, serialNo, remark);
+ return getDataTable(list);
+ }
+
+ @PostMapping(value = "/add")
+ @ApiOperation(value = "新增")
+ public String addResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int insert = accountService.insertAccount(obj, request);
+ return returnStr(objectMap, insert);
+ }
+
+ @PutMapping(value = "/update")
+ @ApiOperation(value = "修改")
+ public String updateResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int update = accountService.updateAccount(obj, request);
+ return returnStr(objectMap, update);
+ }
+
+ @DeleteMapping(value = "/delete")
+ @ApiOperation(value = "删除")
+ public String deleteResource(@RequestParam("id") Long id, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = accountService.deleteAccount(id, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @DeleteMapping(value = "/deleteBatch")
+ @ApiOperation(value = "批量删除")
+ public String batchDeleteResource(@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = accountService.batchDeleteAccount(ids, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @GetMapping(value = "/checkIsNameExist")
+ @ApiOperation(value = "检查名称是否存在")
+ public String checkIsNameExist(@RequestParam Long id, @RequestParam(value ="name", required = false) String name,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int exist = accountService.checkIsNameExist(id, name);
+ if(exist > 0) {
+ objectMap.put("status", true);
+ } else {
+ objectMap.put("status", false);
+ }
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ }
+
+ /**
+ * 查找结算账户信息-下拉框
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findBySelect")
+ @ApiOperation(value = "查找结算账户信息-下拉框")
+ public String findBySelect(HttpServletRequest request) throws Exception {
+ String res = null;
+ try {
+ List dataList = accountService.findBySelect();
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (Account account : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("Id", account.getId());
+ //结算账户名称
+ item.put("AccountName", account.getName());
+ dataArray.add(item);
+ }
+ }
+ res = dataArray.toJSONString();
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 获取所有结算账户
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getAccount")
+ @ApiOperation(value = "获取所有结算账户")
+ public BaseResponseInfo getAccount(HttpServletRequest request) throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ List accountList = accountService.getAccount();
+ map.put("accountList", accountList);
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 账户流水信息
+ * @param currentPage
+ * @param pageSize
+ * @param accountId
+ * @param initialAmount
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findAccountInOutList")
+ @ApiOperation(value = "账户流水信息")
+ public BaseResponseInfo findAccountInOutList(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("accountId") Long accountId,
+ @RequestParam("initialAmount") BigDecimal initialAmount,
+ @RequestParam(value = "number",required = false) String number,
+ @RequestParam(value = "beginTime",required = false) String beginTime,
+ @RequestParam(value = "endTime",required = false) String endTime,
+ HttpServletRequest request) throws Exception{
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ Boolean forceFlag = systemConfigService.getForceApprovalFlag();
+ List dataList = accountService.findAccountInOutList(accountId, StringUtil.toNull(number),
+ beginTime, endTime, forceFlag, (currentPage-1)*pageSize, pageSize);
+ int total = accountService.findAccountInOutListCount(accountId, StringUtil.toNull(number),
+ beginTime, endTime, forceFlag);
+ map.put("total", total);
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (AccountVo4InOutList aEx : dataList) {
+ String type = aEx.getType().replace("其它", "");
+ aEx.setType(type);
+ String operTime = aEx.getOperTime();
+ BigDecimal balance = accountService.getAccountSum(accountId, null, operTime, forceFlag)
+ .add(accountService.getAccountSumByHead(accountId, null, operTime, forceFlag))
+ .add(accountService.getAccountSumByDetail(accountId, null, operTime, forceFlag))
+ .add(accountService.getManyAccountSum(accountId, null, operTime, forceFlag)).add(initialAmount);
+ aEx.setBalance(balance);
+ aEx.setAccountId(accountId);
+ dataArray.add(aEx);
+ }
+ }
+ map.put("rows", dataArray);
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 更新默认账户
+ * @param object
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/updateIsDefault")
+ @ApiOperation(value = "更新默认账户")
+ public String updateIsDefault(@RequestBody JSONObject object,
+ HttpServletRequest request) throws Exception{
+ Long accountId = object.getLong("id");
+ Map objectMap = new HashMap<>();
+ int res = accountService.updateIsDefault(accountId);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 获取带余额的报表
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/listWithBalance")
+ @ApiOperation(value = "获取带余额的报表")
+ public TableDataInfo listWithBalance(@RequestParam("name") String name,
+ @RequestParam("serialNo") String serialNo,
+ HttpServletRequest request) throws Exception {
+ List list = accountService.listWithBalance(StringUtil.toNull(name), StringUtil.toNull(serialNo));
+ return getDataTable(list);
+ }
+
+ /**
+ * 结算账户的统计
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getStatistics")
+ @ApiOperation(value = "结算账户的统计")
+ public BaseResponseInfo getStatistics(@RequestParam("name") String name,
+ @RequestParam("serialNo") String serialNo,
+ HttpServletRequest request) throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ Map map = accountService.getStatistics(StringUtil.toNull(name), StringUtil.toNull(serialNo));
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 批量设置状态-启用或者禁用
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request)throws Exception {
+ Boolean status = jsonObject.getBoolean("status");
+ String ids = jsonObject.getString("ids");
+ Map objectMap = new HashMap<>();
+ int res = accountService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/AccountHeadController.java b/src/main/java/com/jsh/erp/controller/AccountHeadController.java
new file mode 100644
index 0000000..9455500
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/AccountHeadController.java
@@ -0,0 +1,197 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.base.BaseController;
+import com.jsh.erp.base.TableDataInfo;
+import com.jsh.erp.constants.ExceptionConstants;
+import com.jsh.erp.datasource.entities.AccountHead;
+import com.jsh.erp.datasource.entities.AccountHeadVo4Body;
+import com.jsh.erp.datasource.entities.AccountHeadVo4ListEx;
+import com.jsh.erp.service.AccountHeadService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import com.jsh.erp.utils.Constants;
+import com.jsh.erp.utils.ErpInfo;
+import com.jsh.erp.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
+import static com.jsh.erp.utils.ResponseJsonUtil.returnStr;
+
+/**
+ * @author jishenghua 752*718*920
+ */
+@RestController
+@RequestMapping(value = "/accountHead")
+@Api(tags = {"财务管理"})
+public class AccountHeadController extends BaseController {
+ private Logger logger = LoggerFactory.getLogger(AccountHeadController.class);
+
+ @Resource
+ private AccountHeadService accountHeadService;
+
+ @GetMapping(value = "/info")
+ @ApiOperation(value = "根据id获取信息")
+ public String getList(@RequestParam("id") Long id,
+ HttpServletRequest request) throws Exception {
+ AccountHead accountHead = accountHeadService.getAccountHead(id);
+ Map objectMap = new HashMap<>();
+ if(accountHead != null) {
+ objectMap.put("info", accountHead);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ @GetMapping(value = "/list")
+ @ApiOperation(value = "获取信息列表")
+ public TableDataInfo getList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ String type = StringUtil.getInfo(search, "type");
+ String billNo = StringUtil.getInfo(search, "billNo");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ Long organId = StringUtil.parseStrLong(StringUtil.getInfo(search, "organId"));
+ Long creator = StringUtil.parseStrLong(StringUtil.getInfo(search, "creator"));
+ Long handsPersonId = StringUtil.parseStrLong(StringUtil.getInfo(search, "handsPersonId"));
+ Long accountId = StringUtil.parseStrLong(StringUtil.getInfo(search, "accountId"));
+ String status = StringUtil.getInfo(search, "status");
+ String remark = StringUtil.getInfo(search, "remark");
+ String number = StringUtil.getInfo(search, "number");
+ Long inOutItemId = StringUtil.parseStrLong(StringUtil.getInfo(search, "inOutItemId"));
+ List list = accountHeadService.select(type, billNo, beginTime, endTime, organId, creator,
+ handsPersonId, accountId, status, remark, number, inOutItemId);
+ return getDataTable(list);
+ }
+
+ @DeleteMapping(value = "/delete")
+ @ApiOperation(value = "删除")
+ public String deleteResource(@RequestParam("id") Long id, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = accountHeadService.deleteAccountHead(id, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @DeleteMapping(value = "/deleteBatch")
+ @ApiOperation(value = "批量删除")
+ public String batchDeleteResource(@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = accountHeadService.batchDeleteAccountHead(ids, request);
+ return returnStr(objectMap, delete);
+ }
+
+ /**
+ * 批量设置状态-审核或者反审核
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态-审核或者反审核")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request) throws Exception{
+ Map objectMap = new HashMap<>();
+ String status = jsonObject.getString("status");
+ String ids = jsonObject.getString("ids");
+ int res = accountHeadService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 新增财务主表及财务子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/addAccountHeadAndDetail")
+ @ApiOperation(value = "新增财务主表及财务子表信息")
+ public Object addAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ accountHeadService.addAccountHeadAndDetail(beanJson,rows, request);
+ return result;
+ }
+
+ /**
+ * 更新财务主表及财务子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PutMapping(value = "/updateAccountHeadAndDetail")
+ @ApiOperation(value = "更新财务主表及财务子表信息")
+ public Object updateAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ accountHeadService.updateAccountHeadAndDetail(beanJson,rows,request);
+ return result;
+ }
+
+ /**
+ * 根据编号查询单据信息
+ * @param billNo
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getDetailByNumber")
+ @ApiOperation(value = "根据编号查询单据信息")
+ public BaseResponseInfo getDetailByNumber(@RequestParam("billNo") String billNo,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ AccountHeadVo4ListEx ahl = new AccountHeadVo4ListEx();
+ try {
+ List list = accountHeadService.getDetailByNumber(billNo);
+ if(list.size()>0) {
+ ahl = list.get(0);
+ }
+ res.code = 200;
+ res.data = ahl;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 根据出入库单据id查询收付款单号
+ * @param billId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getFinancialBillNoByBillId")
+ @ApiOperation(value = "根据编号查询单据信息")
+ public BaseResponseInfo getFinancialBillNoByBillId(@RequestParam("billId") Long billId,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ List list = accountHeadService.getFinancialBillNoByBillId(billId);
+ res.code = 200;
+ res.data = list;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/AccountItemController.java b/src/main/java/com/jsh/erp/controller/AccountItemController.java
new file mode 100644
index 0000000..7ced5b2
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/AccountItemController.java
@@ -0,0 +1,93 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.constants.BusinessConstants;
+import com.jsh.erp.datasource.vo.AccountItemVo4List;
+import com.jsh.erp.service.AccountHeadService;
+import com.jsh.erp.service.AccountItemService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import com.jsh.erp.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author ji sheng hua 752*718*920
+ */
+@RestController
+@RequestMapping(value = "/accountItem")
+@Api(tags = {"财务明细"})
+public class AccountItemController {
+ private Logger logger = LoggerFactory.getLogger(AccountItemController.class);
+
+ @Resource
+ private AccountItemService accountItemService;
+
+ @Resource
+ private AccountHeadService accountHeadService;
+
+ @GetMapping(value = "/getDetailList")
+ @ApiOperation(value = "明细列表")
+ public BaseResponseInfo getDetailList(@RequestParam("headerId") Long headerId,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ String type = null;
+ List dataList = new ArrayList<>();
+ if(headerId != 0) {
+ dataList = accountItemService.getDetailList(headerId);
+ type = accountHeadService.getAccountHead(headerId).getType();
+ }
+ JSONObject outer = new JSONObject();
+ outer.put("total", dataList.size());
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (AccountItemVo4List ai : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("accountId", ai.getAccountId());
+ item.put("accountName", ai.getAccountName());
+ item.put("inOutItemId", ai.getInOutItemId());
+ item.put("inOutItemName", ai.getInOutItemName());
+ if(StringUtil.isNotEmpty(ai.getBillNumber())) {
+ item.put("billNumber", ai.getBillNumber());
+ } else {
+ item.put("billNumber", "QiChu");
+ }
+ item.put("needDebt", ai.getNeedDebt());
+ item.put("finishDebt", ai.getFinishDebt());
+ BigDecimal eachAmount = ai.getEachAmount();
+ if(BusinessConstants.TYPE_MONEY_IN.equals(type)) {
+ item.put("eachAmount", eachAmount);
+ } else if(BusinessConstants.TYPE_MONEY_OUT.equals(type)) {
+ item.put("eachAmount", BigDecimal.ZERO.subtract(eachAmount));
+ } else {
+ item.put("eachAmount", (eachAmount.compareTo(BigDecimal.ZERO))==-1 ? BigDecimal.ZERO.subtract(eachAmount): eachAmount);
+ }
+ item.put("remark", ai.getRemark());
+ dataArray.add(item);
+ }
+ }
+ outer.put("rows", dataArray);
+ res.code = 200;
+ res.data = outer;
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/DepotController.java b/src/main/java/com/jsh/erp/controller/DepotController.java
new file mode 100644
index 0000000..9f83fb5
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/DepotController.java
@@ -0,0 +1,305 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.base.BaseController;
+import com.jsh.erp.base.TableDataInfo;
+import com.jsh.erp.datasource.entities.Depot;
+import com.jsh.erp.datasource.entities.DepotEx;
+import com.jsh.erp.datasource.entities.MaterialInitialStock;
+import com.jsh.erp.datasource.entities.User;
+import com.jsh.erp.service.DepotService;
+import com.jsh.erp.service.MaterialService;
+import com.jsh.erp.service.UserBusinessService;
+import com.jsh.erp.service.UserService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import com.jsh.erp.utils.Constants;
+import com.jsh.erp.utils.ErpInfo;
+import com.jsh.erp.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
+import static com.jsh.erp.utils.ResponseJsonUtil.returnStr;
+
+/**
+ * @author ji sheng hua 752*718*920
+ */
+@RestController
+@RequestMapping(value = "/depot")
+@Api(tags = {"仓库管理"})
+public class DepotController extends BaseController {
+ private Logger logger = LoggerFactory.getLogger(DepotController.class);
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private UserBusinessService userBusinessService;
+
+ @Resource
+ private MaterialService materialService;
+
+ @Resource
+ private UserService userService;
+
+ @GetMapping(value = "/info")
+ @ApiOperation(value = "根据id获取信息")
+ public String getList(@RequestParam("id") Long id,
+ HttpServletRequest request) throws Exception {
+ Depot depot = depotService.getDepot(id);
+ Map objectMap = new HashMap<>();
+ if(depot != null) {
+ objectMap.put("info", depot);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ @GetMapping(value = "/list")
+ @ApiOperation(value = "获取信息列表")
+ public TableDataInfo getList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ String name = StringUtil.getInfo(search, "name");
+ Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type"));
+ String remark = StringUtil.getInfo(search, "remark");
+ List list = depotService.select(name, type, remark);
+ return getDataTable(list);
+ }
+
+ @PostMapping(value = "/add")
+ @ApiOperation(value = "新增")
+ public String addResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int insert = depotService.insertDepot(obj, request);
+ return returnStr(objectMap, insert);
+ }
+
+ @PutMapping(value = "/update")
+ @ApiOperation(value = "修改")
+ public String updateResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int update = depotService.updateDepot(obj, request);
+ return returnStr(objectMap, update);
+ }
+
+ @DeleteMapping(value = "/delete")
+ @ApiOperation(value = "删除")
+ public String deleteResource(@RequestParam("id") Long id, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = depotService.deleteDepot(id, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @DeleteMapping(value = "/deleteBatch")
+ @ApiOperation(value = "批量删除")
+ public String batchDeleteResource(@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = depotService.batchDeleteDepot(ids, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @GetMapping(value = "/checkIsNameExist")
+ @ApiOperation(value = "检查名称是否存在")
+ public String checkIsNameExist(@RequestParam Long id, @RequestParam(value ="name", required = false) String name,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int exist = depotService.checkIsNameExist(id, name);
+ if(exist > 0) {
+ objectMap.put("status", true);
+ } else {
+ objectMap.put("status", false);
+ }
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ }
+
+ /**
+ * 仓库列表
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/getAllList")
+ @ApiOperation(value = "仓库列表")
+ public BaseResponseInfo getAllList(HttpServletRequest request) throws Exception{
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ List depotList = depotService.getAllList();
+ res.code = 200;
+ res.data = depotList;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 用户对应仓库显示
+ * @param type
+ * @param keyId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findUserDepot")
+ @ApiOperation(value = "用户对应仓库显示")
+ public JSONArray findUserDepot(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId,
+ HttpServletRequest request) throws Exception{
+ JSONArray arr = new JSONArray();
+ try {
+ //获取权限信息
+ String ubValue = userBusinessService.getUBValueByTypeAndKeyId(type, keyId);
+ List dataList = depotService.findUserDepot();
+ //开始拼接json数据
+ JSONObject outer = new JSONObject();
+ outer.put("id", 0);
+ outer.put("key", 0);
+ outer.put("value", 0);
+ outer.put("title", "仓库列表");
+ outer.put("attributes", "仓库列表");
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (Depot depot : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("id", depot.getId());
+ item.put("key", depot.getId());
+ item.put("value", depot.getId());
+ item.put("title", depot.getName());
+ item.put("attributes", depot.getName());
+ Boolean flag = ubValue.contains("[" + depot.getId().toString() + "]");
+ if (flag) {
+ item.put("checked", true);
+ }
+ dataArray.add(item);
+ }
+ }
+ outer.put("children", dataArray);
+ arr.add(outer);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ return arr;
+ }
+
+ /**
+ * 获取当前用户拥有权限的仓库列表
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/findDepotByCurrentUser")
+ @ApiOperation(value = "获取当前用户拥有权限的仓库列表")
+ public BaseResponseInfo findDepotByCurrentUser(HttpServletRequest request) throws Exception{
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ JSONArray arr = depotService.findDepotByCurrentUser();
+ res.code = 200;
+ res.data = arr;
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 更新默认仓库
+ * @param object
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/updateIsDefault")
+ @ApiOperation(value = "更新默认仓库")
+ public String updateIsDefault(@RequestBody JSONObject object,
+ HttpServletRequest request) throws Exception{
+ Long depotId = object.getLong("id");
+ Map objectMap = new HashMap<>();
+ int res = depotService.updateIsDefault(depotId);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 仓库列表-带库存
+ * @param mId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getAllListWithStock")
+ @ApiOperation(value = "仓库列表-带库存")
+ public BaseResponseInfo getAllList(@RequestParam("mId") Long mId,
+ HttpServletRequest request) {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ List list = depotService.getAllList();
+ List depotList = new ArrayList();
+ for(Depot depot: list) {
+ DepotEx de = new DepotEx();
+ if(mId!=0) {
+ BigDecimal initStock = materialService.getInitStock(mId, depot.getId());
+ BigDecimal currentStock = materialService.getCurrentStockByMaterialIdAndDepotId(mId, depot.getId());
+ de.setInitStock(initStock);
+ de.setCurrentStock(currentStock);
+ MaterialInitialStock materialInitialStock = materialService.getSafeStock(mId, depot.getId());
+ de.setLowSafeStock(materialInitialStock.getLowSafeStock());
+ de.setHighSafeStock(materialInitialStock.getHighSafeStock());
+ } else {
+ de.setInitStock(BigDecimal.ZERO);
+ de.setCurrentStock(BigDecimal.ZERO);
+ }
+ de.setId(depot.getId());
+ de.setName(depot.getName());
+ depotList.add(de);
+ }
+ res.code = 200;
+ res.data = depotList;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 批量设置状态-启用或者禁用
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request)throws Exception {
+ Boolean status = jsonObject.getBoolean("status");
+ String ids = jsonObject.getString("ids");
+ Map objectMap = new HashMap<>();
+ int res = depotService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/DepotHeadController.java b/src/main/java/com/jsh/erp/controller/DepotHeadController.java
new file mode 100644
index 0000000..7a6090e
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/DepotHeadController.java
@@ -0,0 +1,811 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.base.BaseController;
+import com.jsh.erp.base.TableDataInfo;
+import com.jsh.erp.constants.BusinessConstants;
+import com.jsh.erp.constants.ExceptionConstants;
+import com.jsh.erp.datasource.entities.DepotHead;
+import com.jsh.erp.datasource.entities.DepotHeadVo4Body;
+import com.jsh.erp.datasource.vo.DepotHeadVo4InDetail;
+import com.jsh.erp.datasource.vo.DepotHeadVo4InOutMCount;
+import com.jsh.erp.datasource.vo.DepotHeadVo4List;
+import com.jsh.erp.datasource.vo.DepotHeadVo4StatementAccount;
+import com.jsh.erp.service.DepotService;
+import com.jsh.erp.service.DepotHeadService;
+import com.jsh.erp.service.MaterialService;
+import com.jsh.erp.service.SystemConfigService;
+import com.jsh.erp.service.UserService;
+import com.jsh.erp.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
+import static com.jsh.erp.utils.ResponseJsonUtil.returnStr;
+
+/**
+ * @author ji-sheng-hua 752*718*920
+ */
+@RestController
+@RequestMapping(value = "/depotHead")
+@Api(tags = {"单据管理"})
+public class DepotHeadController extends BaseController {
+ private Logger logger = LoggerFactory.getLogger(DepotHeadController.class);
+
+ @Resource
+ private DepotHeadService depotHeadService;
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private MaterialService materialService;
+
+ @Resource
+ private SystemConfigService systemConfigService;
+
+ @Resource
+ private UserService userService;
+
+ @GetMapping(value = "/info")
+ @ApiOperation(value = "根据id获取信息")
+ public String getList(@RequestParam("id") Long id,
+ HttpServletRequest request) throws Exception {
+ DepotHead depotHead = depotHeadService.getDepotHead(id);
+ Map objectMap = new HashMap<>();
+ if(depotHead != null) {
+ objectMap.put("info", depotHead);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ @GetMapping(value = "/list")
+ @ApiOperation(value = "获取信息列表")
+ public TableDataInfo getList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ String type = StringUtil.getInfo(search, "type");
+ String subType = StringUtil.getInfo(search, "subType");
+ String hasDebt = StringUtil.getInfo(search, "hasDebt");
+ String status = StringUtil.getInfo(search, "status");
+ String purchaseStatus = StringUtil.getInfo(search, "purchaseStatus");
+ String number = StringUtil.getInfo(search, "number");
+ String linkApply = StringUtil.getInfo(search, "linkApply");
+ String linkNumber = StringUtil.getInfo(search, "linkNumber");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ String materialParam = StringUtil.getInfo(search, "materialParam");
+ Long organId = StringUtil.parseStrLong(StringUtil.getInfo(search, "organId"));
+ Long creator = StringUtil.parseStrLong(StringUtil.getInfo(search, "creator"));
+ Long depotId = StringUtil.parseStrLong(StringUtil.getInfo(search, "depotId"));
+ Long accountId = StringUtil.parseStrLong(StringUtil.getInfo(search, "accountId"));
+ String salesMan = StringUtil.getInfo(search, "salesMan");
+ String remark = StringUtil.getInfo(search, "remark");
+ List list = depotHeadService.select(type, subType, hasDebt, status, purchaseStatus, number, linkApply, linkNumber,
+ beginTime, endTime, materialParam, organId, creator, depotId, accountId, salesMan, remark);
+ return getDataTable(list);
+ }
+
+ @DeleteMapping(value = "/delete")
+ @ApiOperation(value = "删除")
+ public String deleteResource(@RequestParam("id") Long id, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = depotHeadService.deleteDepotHead(id, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @DeleteMapping(value = "/deleteBatch")
+ @ApiOperation(value = "批量删除")
+ public String batchDeleteResource(@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ int delete = depotHeadService.batchDeleteDepotHead(ids, request);
+ return returnStr(objectMap, delete);
+ }
+
+ @PostMapping(value = "/forceCloseBatch")
+ @ApiOperation(value = "强制结单")
+ public String forceCloseBatch(@RequestBody JSONObject jsonObject, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String ids = jsonObject.getString("ids");
+ int res = depotHeadService.batchForceClose(ids, request);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ @PostMapping(value = "/forceClosePurchaseBatch")
+ @ApiOperation(value = "强制结单-以销定购")
+ public String forceClosePurchaseBatch(@RequestBody JSONObject jsonObject, HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String ids = jsonObject.getString("ids");
+ int res = depotHeadService.batchForceClosePurchase(ids, request);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 批量设置状态-审核或者反审核
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态-审核或者反审核")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request) throws Exception{
+ Map objectMap = new HashMap<>();
+ String status = jsonObject.getString("status");
+ String ids = jsonObject.getString("ids");
+ int res = depotHeadService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 入库出库明细接口
+ * @param currentPage
+ * @param pageSize
+ * @param oId
+ * @param number
+ * @param materialParam
+ * @param depotId
+ * @param beginTime
+ * @param endTime
+ * @param type
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findInOutDetail")
+ @ApiOperation(value = "入库出库明细接口")
+ public BaseResponseInfo findInOutDetail(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam(value = "organId", required = false) Integer oId,
+ @RequestParam("number") String number,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("type") String type,
+ @RequestParam(value = "creator", required = false) Long creator,
+ @RequestParam(value = "categoryId", required = false) Long categoryId,
+ @RequestParam(value = "organizationId", required = false) Long organizationId,
+ @RequestParam("remark") String remark,
+ @RequestParam(value = "column", required = false, defaultValue = "createTime") String column,
+ @RequestParam(value = "order", required = false, defaultValue = "desc") String order,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ List depotList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ List resList = new ArrayList();
+ String [] creatorArray = depotHeadService.getCreatorArray();
+ if(creatorArray == null && organizationId != null) {
+ creatorArray = depotHeadService.getCreatorArrayByOrg(organizationId);
+ }
+ String subType = "出库".equals(type)? "销售" : "";
+ String [] organArray = depotHeadService.getOrganArray(subType, "");
+ List categoryList = new ArrayList<>();
+ if(categoryId != null){
+ categoryList = materialService.getListByParentId(categoryId);
+ }
+ beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ Boolean forceFlag = systemConfigService.getForceApprovalFlag();
+ Boolean inOutManageFlag = systemConfigService.getInOutManageFlag();
+ List list = depotHeadService.findInOutDetail(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, oId, StringUtil.toNull(number), creator, remark,
+ StringUtil.safeSqlParse(column), StringUtil.safeSqlParse(order), (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findInOutDetailCount(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, oId, StringUtil.toNull(number), creator, remark);
+ map.put("total", total);
+ //存放数据json数组
+ if (null != list) {
+ resList.addAll(list);
+ }
+ map.put("rows", resList);
+ DepotHeadVo4InDetail statistic = depotHeadService.findInOutDetailStatistic(beginTime, endTime, type, creatorArray, organArray, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, oId, StringUtil.toNull(number), creator, remark);
+ map.put("operNumberTotal", statistic.getOperNumber());
+ map.put("allPriceTotal", statistic.getAllPrice());
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 入库出库汇总接口
+ * @param currentPage
+ * @param pageSize
+ * @param oId
+ * @param materialParam
+ * @param depotId
+ * @param beginTime
+ * @param endTime
+ * @param type
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findInOutMaterialCount")
+ @ApiOperation(value = "入库出库汇总接口")
+ public BaseResponseInfo findInOutMaterialCount(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam(value = "organId", required = false) Integer oId,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam(value = "categoryId", required = false) Long categoryId,
+ @RequestParam(value = "organizationId", required = false) Long organizationId,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("type") String type,
+ @RequestParam(value = "column", required = false, defaultValue = "createTime") String column,
+ @RequestParam(value = "order", required = false, defaultValue = "desc") String order,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ List depotList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ List categoryList = new ArrayList<>();
+ if(categoryId != null){
+ categoryList = materialService.getListByParentId(categoryId);
+ }
+ beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ Boolean forceFlag = systemConfigService.getForceApprovalFlag();
+ Boolean inOutManageFlag = systemConfigService.getInOutManageFlag();
+ List list = depotHeadService.findInOutMaterialCount(beginTime, endTime, type, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, organizationId, oId, StringUtil.safeSqlParse(column), StringUtil.safeSqlParse(order),
+ (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findInOutMaterialCountTotal(beginTime, endTime, type, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, organizationId, oId);
+ map.put("total", total);
+ map.put("rows", list);
+ DepotHeadVo4InOutMCount statistic = depotHeadService.findInOutMaterialCountStatistic(beginTime, endTime, type, categoryList, forceFlag, inOutManageFlag,
+ StringUtil.toNull(materialParam), depotList, organizationId, oId);
+ map.put("numSumTotal", statistic.getNumSum());
+ map.put("priceSumTotal", statistic.getPriceSum());
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 调拨明细统计
+ * @param currentPage
+ * @param pageSize
+ * @param number
+ * @param materialParam
+ * @param depotIdF 调出仓库
+ * @param depotId 调入仓库
+ * @param beginTime
+ * @param endTime
+ * @param subType
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findAllocationDetail")
+ @ApiOperation(value = "调拨明细统计")
+ public BaseResponseInfo findallocationDetail(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("number") String number,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam(value = "depotIdF", required = false) Long depotIdF,
+ @RequestParam(value = "categoryId", required = false) Long categoryId,
+ @RequestParam(value = "organizationId", required = false) Long organizationId,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("subType") String subType,
+ @RequestParam("remark") String remark,
+ @RequestParam(value = "column", required = false, defaultValue = "createTime") String column,
+ @RequestParam(value = "order", required = false, defaultValue = "desc") String order,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ List depotList = new ArrayList<>();
+ List depotFList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ if(depotIdF != null) {
+ depotFList.add(depotIdF);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotFList.add(object.getLong("id"));
+ }
+ }
+ String [] creatorArray = depotHeadService.getCreatorArray();
+ if(creatorArray == null && organizationId != null) {
+ creatorArray = depotHeadService.getCreatorArrayByOrg(organizationId);
+ }
+ List categoryList = new ArrayList<>();
+ if(categoryId != null){
+ categoryList = materialService.getListByParentId(categoryId);
+ }
+ beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ Boolean forceFlag = systemConfigService.getForceApprovalFlag();
+ List list = depotHeadService.findAllocationDetail(beginTime, endTime, subType, StringUtil.toNull(number),
+ creatorArray, categoryList, forceFlag, StringUtil.toNull(materialParam), depotList, depotFList, remark,
+ StringUtil.safeSqlParse(column), StringUtil.safeSqlParse(order), (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findAllocationDetailCount(beginTime, endTime, subType, StringUtil.toNull(number),
+ creatorArray, categoryList, forceFlag, StringUtil.toNull(materialParam), depotList, depotFList, remark);
+ map.put("rows", list);
+ map.put("total", total);
+ DepotHeadVo4InDetail statistic = depotHeadService.findAllocationStatistic(beginTime, endTime, subType, StringUtil.toNull(number),
+ creatorArray, categoryList, forceFlag, StringUtil.toNull(materialParam), depotList, depotFList, remark);
+ map.put("operNumberTotal", statistic.getOperNumber());
+ map.put("allPriceTotal", statistic.getAllPrice());
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 对账单接口
+ * @param currentPage
+ * @param pageSize
+ * @param beginTime
+ * @param endTime
+ * @param organId
+ * @param hasDebt 1-有欠款 0-无欠款
+ * @param supplierType
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getStatementAccount")
+ @ApiOperation(value = "对账单接口")
+ public BaseResponseInfo getStatementAccount(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam(value = "organId", required = false) Integer organId,
+ @RequestParam(value = "hasDebt", required = false) Integer hasDebt,
+ @RequestParam("supplierType") String supplierType,
+ HttpServletRequest request) throws Exception{
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap();
+ try {
+ String type = "";
+ String subType = "";
+ String typeBack = "";
+ String subTypeBack = "";
+ String billType = "";
+ if (("供应商").equals(supplierType)) {
+ type = "入库";
+ subType = "采购";
+ typeBack = "出库";
+ subTypeBack = "采购退货";
+ billType = "付款";
+ } else if (("客户").equals(supplierType)) {
+ type = "出库";
+ subType = "销售";
+ typeBack = "入库";
+ subTypeBack = "销售退货";
+ billType = "收款";
+ }
+ String [] organArray = depotHeadService.getOrganArray(subType, "");
+ beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ List list = depotHeadService.getStatementAccount(beginTime, endTime, organId, organArray,
+ hasDebt, supplierType, type, subType,typeBack, subTypeBack, billType, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.getStatementAccountCount(beginTime, endTime, organId, organArray,
+ hasDebt, supplierType, type, subType,typeBack, subTypeBack, billType);
+ for(DepotHeadVo4StatementAccount item: list) {
+ //期初 = 起始期初金额+上期欠款金额-上期退货的欠款金额-上期收付款
+ BigDecimal preNeed = item.getBeginNeed().add(item.getPreDebtMoney()).subtract(item.getPreReturnDebtMoney()).subtract(item.getPreBackMoney());
+ item.setPreNeed(preNeed);
+ //实际欠款 = 本期欠款-本期退货的欠款金额
+ BigDecimal realDebtMoney = item.getDebtMoney().subtract(item.getReturnDebtMoney());
+ item.setDebtMoney(realDebtMoney);
+ //期末 = 期初+实际欠款-本期收款
+ BigDecimal allNeedGet = preNeed.add(realDebtMoney).subtract(item.getBackMoney());
+ item.setAllNeed(allNeedGet);
+ }
+ map.put("rows", list);
+ map.put("total", total);
+ List totalPayList = depotHeadService.getStatementAccountTotalPay(beginTime, endTime, organId, organArray,
+ hasDebt, supplierType, type, subType, typeBack, subTypeBack, billType);
+ if(totalPayList.size()>0) {
+ DepotHeadVo4StatementAccount totalPayItem = totalPayList.get(0);
+ BigDecimal firstMoney = BigDecimal.ZERO;
+ BigDecimal lastMoney = BigDecimal.ZERO;
+ if(totalPayItem!=null) {
+ //期初 = 起始期初金额+上期欠款金额-上期退货的欠款金额-上期收付款
+ firstMoney = totalPayItem.getBeginNeed().add(totalPayItem.getPreDebtMoney()).subtract(totalPayItem.getPreReturnDebtMoney()).subtract(totalPayItem.getPreBackMoney());
+ //期末 = 期初+本期欠款-本期退货的欠款金额-本期收款
+ lastMoney = firstMoney.add(totalPayItem.getDebtMoney()).subtract(totalPayItem.getReturnDebtMoney()).subtract(totalPayItem.getBackMoney());
+ }
+ map.put("firstMoney", firstMoney); //期初
+ map.put("lastMoney", lastMoney); //期末
+ }
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 获取待收款或付款的条数
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getNeedCount")
+ @ApiOperation(value = "获取待收款或付款的条数")
+ public BaseResponseInfo getNeedCount(@RequestParam("type") String type, HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ Map map = new HashMap<>();
+ try {
+ String supplierType = "";
+ if (("vendor").equals(type)) {
+ supplierType = "供应商";
+ } else if (("customer").equals(type)) {
+ supplierType = "客户";
+ }
+ int needCount = depotHeadService.getNeedCount(supplierType);
+ map.put("needCount", needCount);
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 根据编号查询单据信息
+ * @param number
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getDetailByNumber")
+ @ApiOperation(value = "根据编号查询单据信息")
+ public BaseResponseInfo getDetailByNumber(@RequestParam("number") String number,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ DepotHeadVo4List dhl = new DepotHeadVo4List();
+ try {
+ List list = depotHeadService.getDetailByNumber(number, request);
+ if(list.size()>0) {
+ dhl = list.get(0);
+ }
+ res.code = 200;
+ res.data = dhl;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 根据原单号查询关联的单据列表
+ * @param number
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getBillListByLinkNumber")
+ @ApiOperation(value = "根据原单号查询关联的单据列表")
+ public BaseResponseInfo getBillListByLinkNumber(@RequestParam("number") String number,
+ HttpServletRequest request)throws Exception {
+ BaseResponseInfo res = new BaseResponseInfo();
+ DepotHead dh = new DepotHead();
+ try {
+ List list = depotHeadService.getBillListByLinkNumber(number);
+ res.code = 200;
+ res.data = list;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 新增单据主表及单据子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/addDepotHeadAndDetail")
+ @ApiOperation(value = "新增单据主表及单据子表信息")
+ public Object addDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ depotHeadService.addDepotHeadAndDetail(beanJson, rows, request);
+ return result;
+ }
+
+ /**
+ * 更新单据主表及单据子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PutMapping(value = "/updateDepotHeadAndDetail")
+ @ApiOperation(value = "更新单据主表及单据子表信息")
+ public Object updateDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ depotHeadService.updateDepotHeadAndDetail(beanJson,rows,request);
+ return result;
+ }
+
+ /**
+ * 统计今日采购额、昨日采购额、本月采购额、今年采购额|销售额|零售额
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getBuyAndSaleStatistics")
+ @ApiOperation(value = "统计今日采购额、昨日采购额、本月采购额、今年采购额|销售额|零售额")
+ public BaseResponseInfo getBuyAndSaleStatistics(HttpServletRequest request) {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ Map map = new HashMap<>();
+ String loginName = userService.getCurrentUser().getLoginName();
+ if(!"admin".equals(loginName)) {
+ String today = Tools.getNow() + BusinessConstants.DAY_FIRST_TIME;
+ String monthFirstDay = Tools.firstDayOfMonth(Tools.getCurrentMonth()) + BusinessConstants.DAY_FIRST_TIME;
+ String yesterdayBegin = Tools.getYesterday() + BusinessConstants.DAY_FIRST_TIME;
+ String yesterdayEnd = Tools.getYesterday() + BusinessConstants.DAY_LAST_TIME;
+ String yearBegin = Tools.getYearBegin() + BusinessConstants.DAY_FIRST_TIME;
+ String yearEnd = Tools.getYearEnd() + BusinessConstants.DAY_LAST_TIME;
+ map = depotHeadService.getBuyAndSaleStatistics(today, monthFirstDay, yesterdayBegin, yesterdayEnd, yearBegin, yearEnd, request);
+ }
+ res.code = 200;
+ res.data = map;
+ } catch(Exception e){
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 根据当前用户获取操作员数组,用于控制当前用户的数据权限,限制可以看到的单据范围
+ * 注意:该接口提供给部分插件使用,勿删
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getCreatorByCurrentUser")
+ @ApiOperation(value = "根据当前用户获取操作员数组")
+ public BaseResponseInfo getCreatorByCurrentUser(HttpServletRequest request) {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ String creator = depotHeadService.getCreatorByCurrentUser();
+ res.code = 200;
+ res.data = creator;
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 查询存在欠款的单据
+ * @param search
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/debtList")
+ @ApiOperation(value = "查询存在欠款的单据")
+ public String debtList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ @RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String organIdStr = StringUtil.getInfo(search, "organId");
+ Long organId = Long.parseLong(organIdStr);
+ String materialParam = StringUtil.getInfo(search, "materialParam");
+ String number = StringUtil.getInfo(search, "number");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ String status = StringUtil.getInfo(search, "status");
+ List list = depotHeadService.debtList(organId, materialParam, number, beginTime, endTime,
+ status, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.debtListCount(organId, materialParam, number, beginTime, endTime, status);
+ if (list != null) {
+ objectMap.put("rows", list);
+ objectMap.put("total", total);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ objectMap.put("rows", new ArrayList<>());
+ objectMap.put("total", 0);
+ return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);
+ }
+ }
+
+ /**
+ * 导出存在欠款的单据
+ * @param organId
+ * @param materialParam
+ * @param number
+ * @param type
+ * @param subType
+ * @param beginTime
+ * @param endTime
+ * @param status
+ * @param mpList
+ * @param request
+ * @param response
+ * @throws Exception
+ */
+ @GetMapping(value = "/debtExport")
+ @ApiOperation(value = "导出存在欠款的单据")
+ public void debtExport(@RequestParam(value = "organId", required = false) Long organId,
+ @RequestParam(value = "materialParam", required = false) String materialParam,
+ @RequestParam(value = "number", required = false) String number,
+ @RequestParam(value = "type", required = false) String type,
+ @RequestParam(value = "subType", required = false) String subType,
+ @RequestParam(value = "beginTime", required = false) String beginTime,
+ @RequestParam(value = "endTime", required = false) String endTime,
+ @RequestParam(value = "status", required = false) String status,
+ @RequestParam(value = "mpList", required = false) String mpList,
+ HttpServletRequest request, HttpServletResponse response)throws Exception {
+ try {
+ depotHeadService.debtExport(organId, materialParam, number, type, subType, beginTime, endTime,
+ status, mpList, request, response);
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * 查询等待入库或出库的单据
+ * @param search
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/waitBillList")
+ @ApiOperation(value = "查询等待入库或出库的单据")
+ public String waitBillList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ @RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String number = StringUtil.getInfo(search, "number");
+ String materialParam = StringUtil.getInfo(search, "materialParam");
+ String type = StringUtil.getInfo(search, "type");
+ String subType = StringUtil.getInfo(search, "subType");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ String status = StringUtil.getInfo(search, "status");
+ List list = depotHeadService.waitBillList(number, materialParam, type, subType, beginTime, endTime,
+ status, (currentPage-1)*pageSize, pageSize);
+ long total = depotHeadService.waitBillCount(number, materialParam, type, subType, beginTime, endTime, status);
+ if (list != null) {
+ objectMap.put("rows", list);
+ objectMap.put("total", total);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ objectMap.put("rows", new ArrayList<>());
+ objectMap.put("total", 0);
+ return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);
+ }
+ }
+
+ /**
+ * 查询等待入库或出库的单据数量
+ * @param search
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/waitBillCount")
+ @ApiOperation(value = "查询等待入库或出库的单据数量")
+ public String waitBillCount(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String number = StringUtil.getInfo(search, "number");
+ String materialParam = StringUtil.getInfo(search, "materialParam");
+ String type = StringUtil.getInfo(search, "type");
+ String subType = StringUtil.getInfo(search, "subType");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ String status = StringUtil.getInfo(search, "status");
+ long total = depotHeadService.waitBillCount(number, materialParam, type, subType, beginTime, endTime, status);
+ objectMap.put("total", total);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ }
+
+ /**
+ * 批量新增入库或出库单据
+ * @param jsonObject
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/batchAddDepotHeadAndDetail")
+ @ApiOperation(value = "批量新增入库或出库单据")
+ public Object batchAddDepotHeadAndDetail(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String ids = jsonObject.getString("ids");
+ depotHeadService.batchAddDepotHeadAndDetail(ids, request);
+ return result;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/controller/DepotItemController.java b/src/main/java/com/jsh/erp/controller/DepotItemController.java
new file mode 100644
index 0000000..07e39b8
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/DepotItemController.java
@@ -0,0 +1,1147 @@
+package com.jsh.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jsh.erp.constants.BusinessConstants;
+import com.jsh.erp.constants.ExceptionConstants;
+import com.jsh.erp.datasource.entities.*;
+import com.jsh.erp.datasource.vo.DepotItemStockWarningCount;
+import com.jsh.erp.datasource.vo.DepotItemVoBatchNumberList;
+import com.jsh.erp.datasource.vo.InOutPriceVo;
+import com.jsh.erp.datasource.vo.MaterialDepotStock;
+import com.jsh.erp.exception.BusinessRunTimeException;
+import com.jsh.erp.service.DepotService;
+import com.jsh.erp.service.DepotHeadService;
+import com.jsh.erp.service.DepotItemService;
+import com.jsh.erp.service.MaterialService;
+import com.jsh.erp.service.RoleService;
+import com.jsh.erp.service.SystemConfigService;
+import com.jsh.erp.service.UnitService;
+import com.jsh.erp.service.UserService;
+import com.jsh.erp.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import jxl.Sheet;
+import jxl.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
+
+/**
+ * @author ji-sheng-hua 管伊佳erp
+ */
+@RestController
+@RequestMapping(value = "/depotItem")
+@Api(tags = {"单据明细"})
+public class DepotItemController {
+ private Logger logger = LoggerFactory.getLogger(DepotItemController.class);
+
+ @Resource
+ private DepotHeadService depotHeadService;
+
+ @Resource
+ private DepotItemService depotItemService;
+
+ @Resource
+ private MaterialService materialService;
+
+ @Resource
+ private UnitService unitService;
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private RoleService roleService;
+
+ @Resource
+ private UserService userService;
+
+ @Resource
+ private SystemConfigService systemConfigService;
+
+ @Value(value="${file.uploadType}")
+ private Long fileUploadType;
+
+ /**
+ * 根据仓库和商品查询单据列表
+ * @param mId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findDetailByDepotIdsAndMaterialId")
+ @ApiOperation(value = "根据仓库和商品查询单据列表")
+ public String findDetailByDepotIdsAndMaterialId(
+ @RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,
+ @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,
+ @RequestParam(value = "depotIds",required = false) String depotIds,
+ @RequestParam(value = "sku",required = false) String sku,
+ @RequestParam(value = "batchNumber",required = false) String batchNumber,
+ @RequestParam(value = "number",required = false) String number,
+ @RequestParam(value = "beginTime",required = false) String beginTime,
+ @RequestParam(value = "endTime",required = false) String endTime,
+ @RequestParam("materialId") Long mId,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ if(StringUtil.isNotEmpty(beginTime)) {
+ beginTime = beginTime + BusinessConstants.DAY_FIRST_TIME;
+ }
+ if(StringUtil.isNotEmpty(endTime)) {
+ endTime = endTime + BusinessConstants.DAY_LAST_TIME;
+ }
+ Boolean forceFlag = systemConfigService.getForceApprovalFlag();
+ Boolean inOutManageFlag = systemConfigService.getInOutManageFlag();
+ List list = depotItemService.findDetailByDepotIdsAndMaterialIdList(depotIds, forceFlag, inOutManageFlag, sku,
+ batchNumber, StringUtil.toNull(number), beginTime, endTime, mId, (currentPage-1)*pageSize, pageSize);
+ JSONArray dataArray = new JSONArray();
+ if (list != null) {
+ for (DepotItemVo4DetailByTypeAndMId d: list) {
+ JSONObject item = new JSONObject();
+ item.put("number", d.getNumber()); //编号
+ item.put("barCode", d.getBarCode()); //条码
+ item.put("materialName", d.getMaterialName()); //名称
+ String type = d.getType();
+ String subType = d.getSubType();
+ if(("其它").equals(type)) {
+ item.put("type", subType); //进出类型
+ } else {
+ item.put("type", subType + type); //进出类型
+ }
+ item.put("depotName", d.getDepotName()); //仓库名称
+ item.put("basicNumber", d.getBnum()); //数量
+ item.put("unitPrice", d.getUnitPrice()); //单价
+ item.put("allPrice", d.getAllPrice()); //金额
+ item.put("operTime", Tools.getCenternTime(d.getOtime())); //时间
+ dataArray.add(item);
+ }
+ }
+ if (list == null) {
+ objectMap.put("rows", new ArrayList