From 81d3c03f09185b0ca64f90896be1f4f9c6538422 Mon Sep 17 00:00:00 2001 From: zuqijia <2924963185@qq.com> Date: Fri, 12 Jun 2026 14:21:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B7=A5=E7=A8=8B=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=A8=A1=E5=9D=97=E5=89=8D=E7=AB=AF=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=B8=8ESQL=E8=84=9A=E6=9C=AC=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/tool/TestController.java | 175 ---- .../src/main/resources/application-druid.yml | 4 +- .../src/main/resources/application-h2.yml | 18 + .../src/main/resources/application.yml | 4 +- .../src/main/resources/schema/engineering.sql | 359 +++++++ .../ruoyi/common/core/page/TableDataInfo.java | 17 + .../ruoyi/framework/config/FilterConfig.java | 6 +- .../engineering/ConstructionController.java | 94 ++ .../engineering/ContractController.java | 110 ++ .../engineering/MaterialController.java | 142 +++ .../engineering/PaymentController.java | 83 ++ .../engineering/SupplierController.java | 109 ++ .../domain/engineering/Construction.java | 358 +++++++ .../system/domain/engineering/Contract.java | 306 ++++++ .../domain/engineering/ContractChange.java | 211 ++++ .../system/domain/engineering/Material.java | 331 ++++++ .../system/domain/engineering/MaterialIn.java | 228 ++++ .../domain/engineering/MaterialOut.java | 240 +++++ .../system/domain/engineering/Payment.java | 370 +++++++ .../system/domain/engineering/Supplier.java | 490 +++++++++ .../domain/engineering/SupplierAccount.java | 147 +++ .../engineering/SupplierPaymentRecord.java | 195 ++++ .../engineering/ConstructionMapper.java | 27 + .../engineering/ContractChangeMapper.java | 21 + .../mapper/engineering/ContractMapper.java | 32 + .../mapper/engineering/MaterialInMapper.java | 21 + .../mapper/engineering/MaterialMapper.java | 29 + .../mapper/engineering/MaterialOutMapper.java | 21 + .../mapper/engineering/PaymentMapper.java | 30 + .../engineering/SupplierAccountMapper.java | 21 + .../mapper/engineering/SupplierMapper.java | 33 + .../SupplierPaymentRecordMapper.java | 25 + .../engineering/IConstructionService.java | 31 + .../service/engineering/IContractService.java | 46 + .../service/engineering/IMaterialService.java | 48 + .../service/engineering/IPaymentService.java | 32 + .../service/engineering/ISupplierService.java | 54 + .../engineering/ConstructionServiceImpl.java | 137 +++ .../impl/engineering/ContractServiceImpl.java | 195 ++++ .../impl/engineering/MaterialServiceImpl.java | 193 ++++ .../impl/engineering/PaymentServiceImpl.java | 172 +++ .../impl/engineering/SupplierServiceImpl.java | 222 ++++ .../mapper/engineering/ConstructionMapper.xml | 124 +++ .../engineering/ContractChangeMapper.xml | 79 ++ .../mapper/engineering/ContractMapper.xml | 118 +++ .../mapper/engineering/MaterialInMapper.xml | 85 ++ .../mapper/engineering/MaterialMapper.xml | 102 ++ .../mapper/engineering/MaterialOutMapper.xml | 83 ++ .../mapper/engineering/PaymentMapper.xml | 98 ++ .../engineering/SupplierAccountMapper.xml | 74 ++ .../mapper/engineering/SupplierMapper.xml | 127 +++ .../SupplierPaymentRecordMapper.xml | 66 ++ ruoyi-ui/src/api/engineering/construction.js | 77 ++ ruoyi-ui/src/api/engineering/contract.js | 97 ++ ruoyi-ui/src/api/engineering/material.js | 136 +++ ruoyi-ui/src/api/engineering/payment.js | 67 ++ ruoyi-ui/src/api/engineering/supplier.js | 99 ++ ruoyi-ui/src/assets/icons/svg/example.svg | 1 - ruoyi-ui/src/router/index.js | 42 + .../construction/AcceptanceDialog.vue | 79 ++ .../construction/ConstructionAddOrEdit.vue | 137 +++ .../views/engineering/construction/index.vue | 175 ++++ .../contract/ContractAddOrEdit.vue | 123 +++ .../engineering/contract/ContractDetail.vue | 153 +++ .../src/views/engineering/contract/index.vue | 165 +++ .../src/views/engineering/material/index.vue | 371 +++++++ .../src/views/engineering/payment/index.vue | 423 ++++++++ .../supplier/SupplierAddOrEdit.vue | 133 +++ .../engineering/supplier/SupplierDetail.vue | 169 +++ .../src/views/engineering/supplier/index.vue | 189 ++++ sql/quartz.sql | 278 ++--- sql/ry_engineering.sql | 988 ++++++++++++++++++ 72 files changed, 9926 insertions(+), 319 deletions(-) delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java create mode 100644 ruoyi-admin/src/main/resources/application-h2.yml create mode 100644 ruoyi-admin/src/main/resources/schema/engineering.sql create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ConstructionController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ContractController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/MaterialController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/PaymentController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/SupplierController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Construction.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Contract.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/ContractChange.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Material.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialIn.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialOut.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Payment.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Supplier.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierAccount.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierPaymentRecord.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ConstructionMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractChangeMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialInMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialOutMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/PaymentMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierAccountMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierPaymentRecordMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IConstructionService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IContractService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IMaterialService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IPaymentService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/ISupplierService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ConstructionServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ContractServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/MaterialServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/PaymentServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/SupplierServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/ConstructionMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/ContractChangeMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/ContractMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/MaterialInMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/MaterialMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/MaterialOutMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/PaymentMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/SupplierAccountMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/SupplierMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/engineering/SupplierPaymentRecordMapper.xml create mode 100644 ruoyi-ui/src/api/engineering/construction.js create mode 100644 ruoyi-ui/src/api/engineering/contract.js create mode 100644 ruoyi-ui/src/api/engineering/material.js create mode 100644 ruoyi-ui/src/api/engineering/payment.js create mode 100644 ruoyi-ui/src/api/engineering/supplier.js delete mode 100644 ruoyi-ui/src/assets/icons/svg/example.svg create mode 100644 ruoyi-ui/src/views/engineering/construction/AcceptanceDialog.vue create mode 100644 ruoyi-ui/src/views/engineering/construction/ConstructionAddOrEdit.vue create mode 100644 ruoyi-ui/src/views/engineering/construction/index.vue create mode 100644 ruoyi-ui/src/views/engineering/contract/ContractAddOrEdit.vue create mode 100644 ruoyi-ui/src/views/engineering/contract/ContractDetail.vue create mode 100644 ruoyi-ui/src/views/engineering/contract/index.vue create mode 100644 ruoyi-ui/src/views/engineering/material/index.vue create mode 100644 ruoyi-ui/src/views/engineering/payment/index.vue create mode 100644 ruoyi-ui/src/views/engineering/supplier/SupplierAddOrEdit.vue create mode 100644 ruoyi-ui/src/views/engineering/supplier/SupplierDetail.vue create mode 100644 ruoyi-ui/src/views/engineering/supplier/index.vue create mode 100644 sql/ry_engineering.sql diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java deleted file mode 100644 index b56a0976..00000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.ruoyi.web.controller.tool; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.utils.StringUtils; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.tags.Tag; - -/** - * swagger 用户测试方法 - * - * @author ruoyi - */ -@Tag(name = "用户信息管理") -@RestController -@RequestMapping("/test/user") -public class TestController extends BaseController -{ - private final static Map users = new LinkedHashMap(); - { - users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); - users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); - } - - @Operation(summary = "获取用户列表") - @GetMapping("/list") - public R> userList() - { - List userList = new ArrayList(users.values()); - return R.ok(userList); - } - - @Operation(summary = "获取用户详细") - @GetMapping("/{userId}") - public R getUser(@PathVariable(name = "userId") - Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - return R.ok(users.get(userId)); - } - else - { - return R.fail("用户不存在"); - } - } - - @Operation(summary = "新增用户") - @PostMapping("/save") - public R save(UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - users.put(user.getUserId(), user); - return R.ok(); - } - - @Operation(summary = "更新用户") - @PutMapping("/update") - public R update(@RequestBody - UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - if (users.isEmpty() || !users.containsKey(user.getUserId())) - { - return R.fail("用户不存在"); - } - users.remove(user.getUserId()); - users.put(user.getUserId(), user); - return R.ok(); - } - - @Operation(summary = "删除用户信息") - @DeleteMapping("/{userId}") - public R delete(@PathVariable(name = "userId") - Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - users.remove(userId); - return R.ok(); - } - else - { - return R.fail("用户不存在"); - } - } -} - -@Schema(description = "用户实体") -class UserEntity -{ - @Schema(title = "用户ID") - private Integer userId; - - @Schema(title = "用户名称") - private String username; - - @Schema(title = "用户密码") - private String password; - - @Schema(title = "用户手机") - private String mobile; - - public UserEntity() - { - - } - - public UserEntity(Integer userId, String username, String password, String mobile) - { - this.userId = userId; - this.username = username; - this.password = password; - this.mobile = mobile; - } - - public Integer getUserId() - { - return userId; - } - - public void setUserId(Integer userId) - { - this.userId = userId; - } - - public String getUsername() - { - return username; - } - - public void setUsername(String username) - { - this.username = username; - } - - public String getPassword() - { - return password; - } - - public void setPassword(String password) - { - this.password = password; - } - - public String getMobile() - { - return mobile; - } - - public void setMobile(String mobile) - { - this.mobile = mobile; - } -} diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index bcfad3ea..a667a744 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -6,9 +6,9 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/engineering?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true username: root - password: password + password: 147123369A # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/ruoyi-admin/src/main/resources/application-h2.yml b/ruoyi-admin/src/main/resources/application-h2.yml new file mode 100644 index 00000000..c9db0b0c --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-h2.yml @@ -0,0 +1,18 @@ +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.h2.Driver + url: jdbc:h2:mem:ry-vue;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + username: sa + password: + h2: + console: + enabled: true + path: /h2-console + sql: + init: + mode: always + schema-locations: classpath*:schema/*.sql + +pagehelper: + helperDialect: h2 \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 789fe791..4e8e41a5 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -98,8 +98,8 @@ token: header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz - # 令牌有效期(默认30分钟) - expireTime: 30 + # 令牌有效期(默认3600秒) + expireTime: 3600 # MyBatis配置 mybatis: diff --git a/ruoyi-admin/src/main/resources/schema/engineering.sql b/ruoyi-admin/src/main/resources/schema/engineering.sql new file mode 100644 index 00000000..4a207487 --- /dev/null +++ b/ruoyi-admin/src/main/resources/schema/engineering.sql @@ -0,0 +1,359 @@ +CREATE TABLE IF NOT EXISTS engineering_supplier ( + supplier_id BIGINT AUTO_INCREMENT PRIMARY KEY, + supplier_code VARCHAR(50) NOT NULL UNIQUE, + supplier_name VARCHAR(200) NOT NULL, + short_name VARCHAR(100), + contact_person VARCHAR(50), + contact_phone VARCHAR(20), + email VARCHAR(100), + address VARCHAR(500), + business_scope TEXT, + qualification VARCHAR(200), + register_capital DECIMAL(18,4), + establish_date DATE, + status VARCHAR(20) DEFAULT 'normal', + cooperation_status VARCHAR(20) DEFAULT 'cooperating', + total_contract_amount DECIMAL(18,4) DEFAULT 0, + total_payment_amount DECIMAL(18,4) DEFAULT 0, + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS engineering_supplier_account ( + account_id BIGINT AUTO_INCREMENT PRIMARY KEY, + supplier_id BIGINT NOT NULL, + bank_name VARCHAR(100), + account_no VARCHAR(50), + account_name VARCHAR(100), + currency VARCHAR(10) DEFAULT 'CNY', + is_default VARCHAR(1) DEFAULT '0', + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_supplier_account FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS engineering_supplier_payment_record ( + record_id BIGINT AUTO_INCREMENT PRIMARY KEY, + supplier_id BIGINT NOT NULL, + payment_id BIGINT, + amount DECIMAL(18,4) NOT NULL, + payment_date DATE, + contract_id BIGINT, + payment_type VARCHAR(20), + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_payment_record_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS engineering_contract ( + contract_id BIGINT AUTO_INCREMENT PRIMARY KEY, + contract_no VARCHAR(50) NOT NULL UNIQUE, + contract_name VARCHAR(200) NOT NULL, + contract_type VARCHAR(50), + supplier_id BIGINT NOT NULL, + amount DECIMAL(18,4) NOT NULL, + paid_amount DECIMAL(18,4) DEFAULT 0, + sign_date DATE, + start_date DATE, + end_date DATE, + status VARCHAR(20) DEFAULT 'pending', + contract_file VARCHAR(500), + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_contract_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +); + +CREATE TABLE IF NOT EXISTS engineering_contract_change ( + change_id BIGINT AUTO_INCREMENT PRIMARY KEY, + contract_id BIGINT NOT NULL, + change_type VARCHAR(50), + contract_name VARCHAR(200), + contract_type VARCHAR(50), + amount DECIMAL(18,4), + sign_date DATE, + start_date DATE, + end_date DATE, + reason TEXT, + status VARCHAR(20) DEFAULT 'pending', + approval_remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_contract_change FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS engineering_construction ( + construction_id BIGINT AUTO_INCREMENT PRIMARY KEY, + contract_id BIGINT NOT NULL, + parent_id BIGINT DEFAULT 0, + node_name VARCHAR(200) NOT NULL, + node_code VARCHAR(50), + node_level INT DEFAULT 1, + progress DECIMAL(5,2) DEFAULT 0, + status VARCHAR(20) DEFAULT 'in_progress', + plan_start_date DATE, + plan_end_date DATE, + actual_start_date DATE, + actual_end_date DATE, + acceptance_status VARCHAR(20) DEFAULT 'not_submitted', + acceptance_result VARCHAR(20), + acceptance_date DATE, + acceptance_remark TEXT, + sort_order INT DEFAULT 0, + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_construction_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id) ON DELETE CASCADE, + CONSTRAINT fk_construction_parent FOREIGN KEY (parent_id) REFERENCES engineering_construction(construction_id) +); + +CREATE TABLE IF NOT EXISTS engineering_material ( + material_id BIGINT AUTO_INCREMENT PRIMARY KEY, + material_code VARCHAR(50) NOT NULL UNIQUE, + material_name VARCHAR(200) NOT NULL, + specification VARCHAR(200), + unit VARCHAR(20), + stock DECIMAL(18,4) DEFAULT 0, + min_stock DECIMAL(18,4) DEFAULT 0, + category VARCHAR(50), + location VARCHAR(200), + status VARCHAR(20) DEFAULT 'normal', + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS engineering_material_in ( + in_id BIGINT AUTO_INCREMENT PRIMARY KEY, + material_id BIGINT NOT NULL, + quantity DECIMAL(18,4) NOT NULL, + price DECIMAL(18,4), + total_amount DECIMAL(18,4), + in_date DATE, + supplier_id BIGINT, + batch_no VARCHAR(50), + expiry_date DATE, + location VARCHAR(200), + status VARCHAR(20) DEFAULT 'pending', + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_material_in_material FOREIGN KEY (material_id) REFERENCES engineering_material(material_id), + CONSTRAINT fk_material_in_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +); + +CREATE TABLE IF NOT EXISTS engineering_material_out ( + out_id BIGINT AUTO_INCREMENT PRIMARY KEY, + material_id BIGINT NOT NULL, + quantity DECIMAL(18,4) NOT NULL, + price DECIMAL(18,4), + total_amount DECIMAL(18,4), + out_date DATE, + contract_id BIGINT, + construction_id BIGINT, + use_purpose VARCHAR(200), + status VARCHAR(20) DEFAULT 'pending', + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_material_out_material FOREIGN KEY (material_id) REFERENCES engineering_material(material_id), + CONSTRAINT fk_material_out_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id), + CONSTRAINT fk_material_out_construction FOREIGN KEY (construction_id) REFERENCES engineering_construction(construction_id) +); + +CREATE TABLE IF NOT EXISTS engineering_payment ( + payment_id BIGINT AUTO_INCREMENT PRIMARY KEY, + contract_id BIGINT NOT NULL, + supplier_id BIGINT NOT NULL, + amount DECIMAL(18,4) NOT NULL, + payment_date DATE, + payment_type VARCHAR(20), + payment_method VARCHAR(20), + bank_account VARCHAR(100), + status VARCHAR(20) DEFAULT 'pending', + remark TEXT, + create_by VARCHAR(64) DEFAULT '', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64) DEFAULT '', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_payment_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id), + CONSTRAINT fk_payment_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +); + +-- ================================================ +-- 工程管理模块菜单初始化数据 +-- ================================================ + +-- 工程管理一级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '工程管理', 0, 5, 'engineering', NULL, 1, 0, 'M', '0', '0', '', 'build', 'admin', CURRENT_TIMESTAMP, '', NULL, '工程管理目录' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '工程管理'); + +-- 获取工程管理菜单ID +SET @engineeringMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '工程管理'); + +-- 供应商管理二级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商管理', @engineeringMenuId, 1, 'supplier', 'engineering/supplier/index', 1, 0, 'C', '0', '0', 'system:engineering:supplier:list', 'people', 'admin', CURRENT_TIMESTAMP, '', NULL, '供应商管理菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商管理' AND parent_id = @engineeringMenuId); + +-- 供应商管理按钮 +SET @supplierMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '供应商管理' AND parent_id = @engineeringMenuId); +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商查询', @supplierMenuId, 1, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:query', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商查询' AND parent_id = @supplierMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商新增', @supplierMenuId, 2, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商新增' AND parent_id = @supplierMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商修改', @supplierMenuId, 3, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:edit', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商修改' AND parent_id = @supplierMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商删除', @supplierMenuId, 4, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:remove', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商删除' AND parent_id = @supplierMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '供应商导出', @supplierMenuId, 5, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '供应商导出' AND parent_id = @supplierMenuId); + +-- 合同管理二级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同管理', @engineeringMenuId, 2, 'contract', 'engineering/contract/index', 1, 0, 'C', '0', '0', 'system:engineering:contract:list', 'file-text', 'admin', CURRENT_TIMESTAMP, '', NULL, '合同管理菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同管理' AND parent_id = @engineeringMenuId); + +-- 合同管理按钮 +SET @contractMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '合同管理' AND parent_id = @engineeringMenuId); +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同查询', @contractMenuId, 1, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:query', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同查询' AND parent_id = @contractMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同新增', @contractMenuId, 2, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同新增' AND parent_id = @contractMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同修改', @contractMenuId, 3, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:edit', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同修改' AND parent_id = @contractMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同删除', @contractMenuId, 4, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:remove', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同删除' AND parent_id = @contractMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '合同导出', @contractMenuId, 5, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:export', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '合同导出' AND parent_id = @contractMenuId); + +-- 施工进度管理二级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '施工进度管理', @engineeringMenuId, 3, 'construction', 'engineering/construction/index', 1, 0, 'C', '0', '0', 'system:engineering:construction:list', 'tree-table', 'admin', CURRENT_TIMESTAMP, '', NULL, '施工进度管理菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '施工进度管理' AND parent_id = @engineeringMenuId); + +-- 施工进度管理按钮 +SET @constructionMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '施工进度管理' AND parent_id = @engineeringMenuId); +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '施工进度查询', @constructionMenuId, 1, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:query', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '施工进度查询' AND parent_id = @constructionMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '施工进度新增', @constructionMenuId, 2, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '施工进度新增' AND parent_id = @constructionMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '施工进度修改', @constructionMenuId, 3, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:edit', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '施工进度修改' AND parent_id = @constructionMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '施工进度删除', @constructionMenuId, 4, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:remove', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '施工进度删除' AND parent_id = @constructionMenuId); + +-- 物料管理二级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料管理', @engineeringMenuId, 4, 'material', 'engineering/material/index', 1, 0, 'C', '0', '0', 'system:engineering:material:list', 'shopping', 'admin', CURRENT_TIMESTAMP, '', NULL, '物料管理菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料管理' AND parent_id = @engineeringMenuId); + +-- 物料管理按钮 +SET @materialMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '物料管理' AND parent_id = @engineeringMenuId); +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料查询', @materialMenuId, 1, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:query', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料查询' AND parent_id = @materialMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料新增', @materialMenuId, 2, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料新增' AND parent_id = @materialMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料修改', @materialMenuId, 3, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:edit', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料修改' AND parent_id = @materialMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料删除', @materialMenuId, 4, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:remove', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料删除' AND parent_id = @materialMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料入库', @materialMenuId, 5, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:in:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料入库' AND parent_id = @materialMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '物料出库', @materialMenuId, 6, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:material:out:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '物料出库' AND parent_id = @materialMenuId); + +-- 付款管理二级菜单 +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款管理', @engineeringMenuId, 5, 'payment', 'engineering/payment/index', 1, 0, 'C', '0', '0', 'system:engineering:payment:list', 'money', 'admin', CURRENT_TIMESTAMP, '', NULL, '付款管理菜单' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款管理' AND parent_id = @engineeringMenuId); + +-- 付款管理按钮 +SET @paymentMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '付款管理' AND parent_id = @engineeringMenuId); +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款查询', @paymentMenuId, 1, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:query', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款查询' AND parent_id = @paymentMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款新增', @paymentMenuId, 2, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:add', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款新增' AND parent_id = @paymentMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款修改', @paymentMenuId, 3, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:edit', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款修改' AND parent_id = @paymentMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款删除', @paymentMenuId, 4, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:remove', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款删除' AND parent_id = @paymentMenuId); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +SELECT '付款审批', @paymentMenuId, 5, '#', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:approve', '#', 'admin', CURRENT_TIMESTAMP, '', NULL, '' +WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '付款审批' AND parent_id = @paymentMenuId); + +-- ================================================ +-- 为超级管理员角色分配工程管理菜单权限 +-- ================================================ +SET @adminRoleId = (SELECT role_id FROM sys_role WHERE role_key = 'admin'); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT @adminRoleId, menu_id FROM sys_menu WHERE perms LIKE 'system:engineering:%' +ON DUPLICATE KEY UPDATE role_id = role_id; + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT @adminRoleId, @engineeringMenuId +ON DUPLICATE KEY UPDATE role_id = role_id; \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java index f0befe7c..ebd94223 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -43,6 +43,23 @@ public class TableDataInfo implements Serializable this.total = total; } + /** + * 构建分页数据 + * + * @param list 列表数据 + * @param total 总记录数 + * @return 分页数据对象 + */ + public static TableDataInfo build(List list, long total) + { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(200); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(total); + return rspData; + } + public long getTotal() { return total; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java index d2429a9c..da48023e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java @@ -22,13 +22,13 @@ import com.ruoyi.common.utils.StringUtils; @Configuration public class FilterConfig { - @Value("${xss.excludes}") + @Value("${xss.excludes:/system/notice}") private String excludes; - @Value("${xss.urlPatterns}") + @Value("${xss.urlPatterns:/system/*,/monitor/*,/tool/*}") private String urlPatterns; - @Value("${referer.allowed-domains}") + @Value("${referer.allowed-domains:localhost,127.0.0.1}") private String allowedDomains; @SuppressWarnings({ "rawtypes", "unchecked" }) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ConstructionController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ConstructionController.java new file mode 100644 index 00000000..d1c87e9c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ConstructionController.java @@ -0,0 +1,94 @@ +package com.ruoyi.system.controller.engineering; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.engineering.Construction; +import com.ruoyi.system.service.engineering.IConstructionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/system/engineering/construction") +public class ConstructionController extends BaseController { + + @Autowired + private IConstructionService constructionService; + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:list')") + @GetMapping("/list") + public TableDataInfo list(Construction construction) { + return constructionService.selectConstructionList(construction); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:query')") + @GetMapping("/tree") + public AjaxResult tree(Construction construction) { + List tree = constructionService.selectConstructionTree(construction); + return AjaxResult.success(tree); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:query')") + @GetMapping(value = "/{constructionId}") + public AjaxResult getInfo(@PathVariable Long constructionId) { + return AjaxResult.success(constructionService.selectConstructionById(constructionId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:add')") + @Log(title = "施工进度管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Construction construction) { + return toAjax(constructionService.insertConstruction(construction)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:edit')") + @Log(title = "施工进度管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Construction construction) { + return toAjax(constructionService.updateConstruction(construction)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:remove')") + @Log(title = "施工进度管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{constructionIds}") + public AjaxResult remove(@PathVariable Long[] constructionIds) { + return toAjax(constructionService.deleteConstructionByIds(constructionIds)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:edit')") + @Log(title = "施工进度更新", businessType = BusinessType.UPDATE) + @PutMapping("/progress/{constructionId}") + public AjaxResult updateProgress(@PathVariable Long constructionId, @RequestParam java.math.BigDecimal progress) { + return toAjax(constructionService.updateConstructionProgress(constructionId, progress)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:edit')") + @Log(title = "验收提交", businessType = BusinessType.UPDATE) + @PutMapping("/acceptance/submit/{constructionId}") + public AjaxResult submitAcceptance(@PathVariable Long constructionId, @RequestBody(required = false) Map body) { + String remark = body != null ? body.get("remark") : null; + return toAjax(constructionService.submitAcceptance(constructionId, remark)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:edit')") + @Log(title = "验收审批", businessType = BusinessType.UPDATE) + @PutMapping("/acceptance/approve/{constructionId}") + public AjaxResult approveAcceptance(@PathVariable Long constructionId, @RequestBody Map body) { + String result = body.get("result"); + String remark = body.get("remark"); + return toAjax(constructionService.approveAcceptance(constructionId, result, remark)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:construction:query')") + @GetMapping("/statistics/{contractId}") + public AjaxResult getStatistics(@PathVariable Long contractId) { + Map statistics = constructionService.getConstructionStatistics(contractId); + return AjaxResult.success(statistics); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ContractController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ContractController.java new file mode 100644 index 00000000..2bcd9963 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/ContractController.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.controller.engineering; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.engineering.Contract; +import com.ruoyi.system.domain.engineering.ContractChange; +import com.ruoyi.system.service.engineering.IContractService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/system/engineering/contract") +public class ContractController extends BaseController { + + @Autowired + private IContractService contractService; + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:list')") + @GetMapping("/list") + public TableDataInfo list(Contract contract) { + return contractService.selectContractList(contract); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:query')") + @GetMapping(value = "/{contractId}") + public AjaxResult getInfo(@PathVariable Long contractId) { + return AjaxResult.success(contractService.selectContractById(contractId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:add')") + @Log(title = "合同管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Contract contract) { + return toAjax(contractService.insertContract(contract)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:edit')") + @Log(title = "合同管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Contract contract) { + return toAjax(contractService.updateContract(contract)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:remove')") + @Log(title = "合同管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{contractIds}") + public AjaxResult remove(@PathVariable Long[] contractIds) { + return toAjax(contractService.deleteContractByIds(contractIds)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:edit')") + @Log(title = "合同状态变更", businessType = BusinessType.UPDATE) + @PutMapping("/status/{contractId}/{status}") + public AjaxResult updateStatus(@PathVariable Long contractId, @PathVariable String status) { + return toAjax(contractService.updateContractStatus(contractId, status)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:add')") + @Log(title = "合同变更申请", businessType = BusinessType.INSERT) + @PostMapping("/change") + public AjaxResult addChange(@RequestBody ContractChange change) { + return toAjax(contractService.insertContractChange(change)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:edit')") + @Log(title = "合同变更修改", businessType = BusinessType.UPDATE) + @PutMapping("/change") + public AjaxResult updateChange(@RequestBody ContractChange change) { + return toAjax(contractService.updateContractChange(change)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:remove')") + @Log(title = "合同变更删除", businessType = BusinessType.DELETE) + @DeleteMapping("/change/{changeId}") + public AjaxResult deleteChange(@PathVariable Long changeId) { + return toAjax(contractService.deleteContractChangeById(changeId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:query')") + @GetMapping("/changes/{contractId}") + public AjaxResult getChanges(@PathVariable Long contractId) { + return AjaxResult.success(contractService.selectContractChangeList(contractId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:edit')") + @Log(title = "合同变更审批", businessType = BusinessType.UPDATE) + @PutMapping("/change/approve/{changeId}") + public AjaxResult approveChange(@PathVariable Long changeId, @RequestParam String approvalResult) { + return toAjax(contractService.approveContractChange(changeId, approvalResult)); + } + + @GetMapping("/options") + public AjaxResult getOptions() { + return AjaxResult.success(contractService.selectContractOptions()); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:contract:query')") + @GetMapping("/detail/{contractId}") + public AjaxResult getDetail(@PathVariable Long contractId) { + Map detail = contractService.selectContractDetail(contractId); + return AjaxResult.success(detail); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/MaterialController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/MaterialController.java new file mode 100644 index 00000000..01e57759 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/MaterialController.java @@ -0,0 +1,142 @@ +package com.ruoyi.system.controller.engineering; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.engineering.Material; +import com.ruoyi.system.domain.engineering.MaterialIn; +import com.ruoyi.system.domain.engineering.MaterialOut; +import com.ruoyi.system.service.engineering.IMaterialService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/system/engineering/material") +public class MaterialController extends BaseController { + + @Autowired + private IMaterialService materialService; + + @PreAuthorize("@ss.hasPermi('system:engineering:material:list')") + @GetMapping("/list") + public TableDataInfo list(Material material) { + return materialService.selectMaterialList(material); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:query')") + @GetMapping(value = "/{materialId}") + public AjaxResult getInfo(@PathVariable Long materialId) { + return AjaxResult.success(materialService.selectMaterialById(materialId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:add')") + @Log(title = "物料管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Material material) { + return toAjax(materialService.insertMaterial(material)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:edit')") + @Log(title = "物料管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Material material) { + return toAjax(materialService.updateMaterial(material)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:remove')") + @Log(title = "物料管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{materialIds}") + public AjaxResult remove(@PathVariable Long[] materialIds) { + return toAjax(materialService.deleteMaterialByIds(materialIds)); + } + + @GetMapping("/options") + public AjaxResult getOptions() { + return AjaxResult.success(materialService.selectMaterialOptions()); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:add')") + @Log(title = "物料入库", businessType = BusinessType.INSERT) + @PostMapping("/in") + public AjaxResult addMaterialIn(@RequestBody MaterialIn materialIn) { + return toAjax(materialService.insertMaterialIn(materialIn)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:edit')") + @Log(title = "物料入库", businessType = BusinessType.UPDATE) + @PutMapping("/in") + public AjaxResult updateMaterialIn(@RequestBody MaterialIn materialIn) { + return toAjax(materialService.updateMaterialIn(materialIn)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:approve')") + @Log(title = "物料入库审批", businessType = BusinessType.UPDATE) + @PutMapping("/in/approve/{inId}") + public AjaxResult approveMaterialIn(@PathVariable Long inId) { + return toAjax(materialService.approveMaterialIn(inId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:remove')") + @Log(title = "物料入库删除", businessType = BusinessType.DELETE) + @DeleteMapping("/in/{inId}") + public AjaxResult deleteMaterialIn(@PathVariable Long inId) { + return toAjax(materialService.deleteMaterialInById(inId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:list')") + @GetMapping("/in/list") + public TableDataInfo listMaterialIn(MaterialIn materialIn) { + return materialService.selectMaterialInList(materialIn); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:in:query')") + @GetMapping("/in/{inId}") + public AjaxResult getMaterialIn(@PathVariable Long inId) { + return AjaxResult.success(materialService.selectMaterialInById(inId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:add')") + @Log(title = "物料出库", businessType = BusinessType.INSERT) + @PostMapping("/out") + public AjaxResult addMaterialOut(@RequestBody MaterialOut materialOut) { + return toAjax(materialService.insertMaterialOut(materialOut)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:edit')") + @Log(title = "物料出库", businessType = BusinessType.UPDATE) + @PutMapping("/out") + public AjaxResult updateMaterialOut(@RequestBody MaterialOut materialOut) { + return toAjax(materialService.updateMaterialOut(materialOut)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:approve')") + @Log(title = "物料出库审批", businessType = BusinessType.UPDATE) + @PutMapping("/out/approve/{outId}") + public AjaxResult approveMaterialOut(@PathVariable Long outId) { + return toAjax(materialService.approveMaterialOut(outId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:remove')") + @Log(title = "物料出库删除", businessType = BusinessType.DELETE) + @DeleteMapping("/out/{outId}") + public AjaxResult deleteMaterialOut(@PathVariable Long outId) { + return toAjax(materialService.deleteMaterialOutById(outId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:list')") + @GetMapping("/out/list") + public TableDataInfo listMaterialOut(MaterialOut materialOut) { + return materialService.selectMaterialOutList(materialOut); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:material:out:query')") + @GetMapping("/out/{outId}") + public AjaxResult getMaterialOut(@PathVariable Long outId) { + return AjaxResult.success(materialService.selectMaterialOutById(outId)); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/PaymentController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/PaymentController.java new file mode 100644 index 00000000..97c74410 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/PaymentController.java @@ -0,0 +1,83 @@ +package com.ruoyi.system.controller.engineering; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.engineering.Payment; +import com.ruoyi.system.service.engineering.IPaymentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/system/engineering/payment") +public class PaymentController extends BaseController { + + @Autowired + private IPaymentService paymentService; + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:list')") + @GetMapping("/list") + public TableDataInfo list(Payment payment) { + return paymentService.selectPaymentList(payment); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:query')") + @GetMapping(value = "/{paymentId}") + public AjaxResult getInfo(@PathVariable Long paymentId) { + return AjaxResult.success(paymentService.selectPaymentById(paymentId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:add')") + @Log(title = "付款管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Payment payment) { + return toAjax(paymentService.insertPayment(payment)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:edit')") + @Log(title = "付款管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Payment payment) { + return toAjax(paymentService.updatePayment(payment)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:remove')") + @Log(title = "付款管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{paymentIds}") + public AjaxResult remove(@PathVariable Long[] paymentIds) { + return toAjax(paymentService.deletePaymentByIds(paymentIds)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:approve')") + @Log(title = "付款审批", businessType = BusinessType.UPDATE) + @PutMapping("/approve/{paymentId}") + public AjaxResult approvePayment(@PathVariable Long paymentId) { + return toAjax(paymentService.approvePayment(paymentId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:approve')") + @Log(title = "付款拒绝", businessType = BusinessType.UPDATE) + @PutMapping("/reject/{paymentId}") + public AjaxResult rejectPayment(@PathVariable Long paymentId) { + return toAjax(paymentService.rejectPayment(paymentId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:process')") + @Log(title = "付款处理", businessType = BusinessType.UPDATE) + @PutMapping("/process/{paymentId}") + public AjaxResult processPayment(@PathVariable Long paymentId) { + return toAjax(paymentService.processPayment(paymentId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:payment:query')") + @GetMapping("/contract/{contractId}") + public AjaxResult getPaymentsByContract(@PathVariable Long contractId) { + List payments = paymentService.selectPaymentByContractId(contractId); + return AjaxResult.success(payments); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/SupplierController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/SupplierController.java new file mode 100644 index 00000000..432dc948 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/engineering/SupplierController.java @@ -0,0 +1,109 @@ +package com.ruoyi.system.controller.engineering; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.engineering.Supplier; +import com.ruoyi.system.domain.engineering.SupplierAccount; +import com.ruoyi.system.service.engineering.ISupplierService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/system/engineering/supplier") +public class SupplierController extends BaseController { + + @Autowired + private ISupplierService supplierService; + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:list')") + @GetMapping("/list") + public TableDataInfo list(Supplier supplier) { + return supplierService.selectSupplierList(supplier); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:query')") + @GetMapping(value = "/{supplierId}") + public AjaxResult getInfo(@PathVariable Long supplierId) { + return AjaxResult.success(supplierService.selectSupplierDetail(supplierId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:add')") + @Log(title = "供应商管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Supplier supplier) { + return toAjax(supplierService.insertSupplier(supplier)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:edit')") + @Log(title = "供应商管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Supplier supplier) { + return toAjax(supplierService.updateSupplier(supplier)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:remove')") + @Log(title = "供应商管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{supplierIds}") + public AjaxResult remove(@PathVariable Long[] supplierIds) { + return toAjax(supplierService.deleteSupplierByIds(supplierIds)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:add')") + @Log(title = "供应商账户管理", businessType = BusinessType.INSERT) + @PostMapping("/account") + public AjaxResult addAccount(@RequestBody SupplierAccount account) { + return toAjax(supplierService.insertSupplierAccount(account)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:edit')") + @Log(title = "供应商账户管理", businessType = BusinessType.UPDATE) + @PutMapping("/account") + public AjaxResult updateAccount(@RequestBody SupplierAccount account) { + return toAjax(supplierService.updateSupplierAccount(account)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:remove')") + @Log(title = "供应商账户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/account/{accountId}") + public AjaxResult deleteAccount(@PathVariable Long accountId) { + return toAjax(supplierService.deleteSupplierAccountById(accountId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:query')") + @GetMapping("/accounts/{supplierId}") + public AjaxResult getAccounts(@PathVariable Long supplierId) { + return AjaxResult.success(supplierService.selectSupplierAccountList(supplierId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:query')") + @GetMapping("/payment-records/{supplierId}") + public AjaxResult getPaymentRecords(@PathVariable Long supplierId) { + return AjaxResult.success(supplierService.selectSupplierPaymentRecordList(supplierId)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:edit')") + @Log(title = "供应商状态变更", businessType = BusinessType.UPDATE) + @PutMapping("/status/{supplierId}/{status}") + public AjaxResult updateStatus(@PathVariable Long supplierId, @PathVariable String status) { + return toAjax(supplierService.updateSupplierStatus(supplierId, status)); + } + + @GetMapping("/options") + public AjaxResult getOptions(@RequestParam(required = false) String status) { + return AjaxResult.success(supplierService.selectSupplierOptions(status)); + } + + @PreAuthorize("@ss.hasPermi('system:engineering:supplier:query')") + @GetMapping("/detail/{supplierId}") + public AjaxResult getDetail(@PathVariable Long supplierId) { + Map detail = supplierService.selectSupplierDetail(supplierId); + return AjaxResult.success(detail); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Construction.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Construction.java new file mode 100644 index 00000000..150b347b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Construction.java @@ -0,0 +1,358 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class Construction extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long constructionId; + + @NotNull(message = "合同ID不能为空") + private Long contractId; + + @Excel(name = "合同编号") + private String contractNo; + + @NotBlank(message = "施工阶段名称不能为空") + @Excel(name = "施工阶段名称") + private String phaseName; + + @Excel(name = "阶段编码") + private String phaseCode; + + private Long parentPhaseId; + + private String constructionContent; + + @NotNull(message = "计划开工日期不能为空") + @Excel(name = "计划开工日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date planStartDate; + + @NotNull(message = "计划完工日期不能为空") + @Excel(name = "计划完工日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date planEndDate; + + @Excel(name = "实际开工日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date actualStartDate; + + @Excel(name = "实际完工日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date actualEndDate; + + @Excel(name = "计划进度") + private BigDecimal planProgress; + + @Excel(name = "实际进度") + private BigDecimal actualProgress; + + @Excel(name = "进度百分比") + private BigDecimal progress; + + @Excel(name = "负责人") + private String responsiblePerson; + + @Excel(name = "状态", readConverterExp = "pending=待开工,executing=进行中,completed=已完工,accepted=已验收") + private String status; + + @Excel(name = "验收状态", readConverterExp = "pending=待验收,submitted=已提交,approved=已通过,rejected=已驳回") + private String acceptanceStatus; + + @Excel(name = "验收结果", readConverterExp = "pass=通过,fail=未通过") + private String acceptanceResult; + + @Excel(name = "验收日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date acceptanceDate; + + private String acceptanceRemark; + + @Excel(name = "人工成本") + private BigDecimal laborCost; + + @Excel(name = "材料成本") + private BigDecimal materialCost; + + @Excel(name = "其他成本") + private BigDecimal otherCost; + + @Excel(name = "总成本") + private BigDecimal totalCost; + + @Excel(name = "现场资料") + private String attachmentUrl; + + private String remark; + + private List children = new ArrayList<>(); + + public Long getConstructionId() { + return constructionId; + } + + public void setConstructionId(Long constructionId) { + this.constructionId = constructionId; + } + + public Long getContractId() { + return contractId; + } + + public void setContractId(Long contractId) { + this.contractId = contractId; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getPhaseName() { + return phaseName; + } + + public void setPhaseName(String phaseName) { + this.phaseName = phaseName; + } + + public String getPhaseCode() { + return phaseCode; + } + + public void setPhaseCode(String phaseCode) { + this.phaseCode = phaseCode; + } + + public Long getParentPhaseId() { + return parentPhaseId; + } + + public void setParentPhaseId(Long parentPhaseId) { + this.parentPhaseId = parentPhaseId; + } + + public String getConstructionContent() { + return constructionContent; + } + + public void setConstructionContent(String constructionContent) { + this.constructionContent = constructionContent; + } + + public Date getPlanStartDate() { + return planStartDate; + } + + public void setPlanStartDate(Date planStartDate) { + this.planStartDate = planStartDate; + } + + public Date getPlanEndDate() { + return planEndDate; + } + + public void setPlanEndDate(Date planEndDate) { + this.planEndDate = planEndDate; + } + + public Date getActualStartDate() { + return actualStartDate; + } + + public void setActualStartDate(Date actualStartDate) { + this.actualStartDate = actualStartDate; + } + + public Date getActualEndDate() { + return actualEndDate; + } + + public void setActualEndDate(Date actualEndDate) { + this.actualEndDate = actualEndDate; + } + + public BigDecimal getProgress() { + return progress; + } + + public void setProgress(BigDecimal progress) { + this.progress = progress; + } + + public BigDecimal getPlanProgress() { + return planProgress; + } + + public void setPlanProgress(BigDecimal planProgress) { + this.planProgress = planProgress; + } + + public BigDecimal getActualProgress() { + return actualProgress; + } + + public void setActualProgress(BigDecimal actualProgress) { + this.actualProgress = actualProgress; + } + + public String getResponsiblePerson() { + return responsiblePerson; + } + + public void setResponsiblePerson(String responsiblePerson) { + this.responsiblePerson = responsiblePerson; + } + + public String getAcceptanceStatus() { + return acceptanceStatus; + } + + public void setAcceptanceStatus(String acceptanceStatus) { + this.acceptanceStatus = acceptanceStatus; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getAcceptanceResult() { + return acceptanceResult; + } + + public void setAcceptanceResult(String acceptanceResult) { + this.acceptanceResult = acceptanceResult; + } + + public Date getAcceptanceDate() { + return acceptanceDate; + } + + public void setAcceptanceDate(Date acceptanceDate) { + this.acceptanceDate = acceptanceDate; + } + + public String getAcceptanceRemark() { + return acceptanceRemark; + } + + public void setAcceptanceRemark(String acceptanceRemark) { + this.acceptanceRemark = acceptanceRemark; + } + + public BigDecimal getLaborCost() { + return laborCost; + } + + public void setLaborCost(BigDecimal laborCost) { + this.laborCost = laborCost; + } + + public BigDecimal getMaterialCost() { + return materialCost; + } + + public void setMaterialCost(BigDecimal materialCost) { + this.materialCost = materialCost; + } + + public BigDecimal getOtherCost() { + return otherCost; + } + + public void setOtherCost(BigDecimal otherCost) { + this.otherCost = otherCost; + } + + public BigDecimal getTotalCost() { + return totalCost; + } + + public void setTotalCost(BigDecimal totalCost) { + this.totalCost = totalCost; + } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("constructionId", getConstructionId()) + .append("contractId", getContractId()) + .append("contractNo", getContractNo()) + .append("phaseName", getPhaseName()) + .append("phaseCode", getPhaseCode()) + .append("parentPhaseId", getParentPhaseId()) + .append("constructionContent", getConstructionContent()) + .append("planStartDate", getPlanStartDate()) + .append("planEndDate", getPlanEndDate()) + .append("actualStartDate", getActualStartDate()) + .append("actualEndDate", getActualEndDate()) + .append("planProgress", getPlanProgress()) + .append("actualProgress", getActualProgress()) + .append("progress", getProgress()) + .append("responsiblePerson", getResponsiblePerson()) + .append("status", getStatus()) + .append("acceptanceStatus", getAcceptanceStatus()) + .append("acceptanceResult", getAcceptanceResult()) + .append("acceptanceDate", getAcceptanceDate()) + .append("acceptanceRemark", getAcceptanceRemark()) + .append("laborCost", getLaborCost()) + .append("materialCost", getMaterialCost()) + .append("otherCost", getOtherCost()) + .append("totalCost", getTotalCost()) + .append("attachmentUrl", getAttachmentUrl()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Contract.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Contract.java new file mode 100644 index 00000000..7e388b1b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Contract.java @@ -0,0 +1,306 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import java.math.BigDecimal; +import java.util.Date; + +public class Contract extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long contractId; + + @NotBlank(message = "合同编号不能为空") + @Size(max = 50, message = "合同编号长度不能超过50个字符") + @Excel(name = "合同编号") + private String contractNo; + + @NotBlank(message = "合同类型不能为空") + @Excel(name = "合同类型", readConverterExp = "construction=施工合同,material=材料采购合同,equipment=设备服务合同") + private String contractType; + + @NotBlank(message = "合同名称不能为空") + @Size(max = 200, message = "合同名称长度不能超过200个字符") + @Excel(name = "合同名称") + private String contractName; + + @NotNull(message = "供应商ID不能为空") + private Long supplierId; + + @Excel(name = "供应商名称") + private String supplierName; + + @NotNull(message = "合同金额不能为空") + @Excel(name = "合同金额") + private BigDecimal amount; + + @Excel(name = "税率") + private BigDecimal taxRate; + + @Excel(name = "税额") + private BigDecimal taxAmount; + + @NotNull(message = "含税总额不能为空") + @Excel(name = "含税总额") + private BigDecimal totalAmount; + + @NotNull(message = "签订日期不能为空") + @Excel(name = "签订日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date signDate; + + @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date startDate; + + @Excel(name = "结束日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date endDate; + + private String contractContent; + + @Excel(name = "附件") + private String attachmentUrl; + + @Excel(name = "审批状态", readConverterExp = "pending=待审批,approved=已通过,rejected=已驳回") + private String approvalStatus; + + @Excel(name = "合同状态", readConverterExp = "draft=草稿,executing=执行中,completed=已完成,terminated=已终止") + private String status; + + @Excel(name = "质保金比例") + private BigDecimal qualityRate; + + @Excel(name = "质保金金额") + private BigDecimal qualityAmount; + + @Excel(name = "已付金额") + private BigDecimal paidAmount; + + @Excel(name = "未付余额") + private BigDecimal remainingAmount; + + private String remark; + + public Long getContractId() { + return contractId; + } + + public void setContractId(Long contractId) { + this.contractId = contractId; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getContractType() { + return contractType; + } + + public void setContractType(String contractType) { + this.contractType = contractType; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public BigDecimal getTaxRate() { + return taxRate; + } + + public void setTaxRate(BigDecimal taxRate) { + this.taxRate = taxRate; + } + + public BigDecimal getTaxAmount() { + return taxAmount; + } + + public void setTaxAmount(BigDecimal taxAmount) { + this.taxAmount = taxAmount; + } + + public BigDecimal getTotalAmount() { + return totalAmount; + } + + public void setTotalAmount(BigDecimal totalAmount) { + this.totalAmount = totalAmount; + } + + public Date getSignDate() { + return signDate; + } + + public void setSignDate(Date signDate) { + this.signDate = signDate; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getContractContent() { + return contractContent; + } + + public void setContractContent(String contractContent) { + this.contractContent = contractContent; + } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getApprovalStatus() { + return approvalStatus; + } + + public void setApprovalStatus(String approvalStatus) { + this.approvalStatus = approvalStatus; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public BigDecimal getQualityRate() { + return qualityRate; + } + + public void setQualityRate(BigDecimal qualityRate) { + this.qualityRate = qualityRate; + } + + public BigDecimal getQualityAmount() { + return qualityAmount; + } + + public void setQualityAmount(BigDecimal qualityAmount) { + this.qualityAmount = qualityAmount; + } + + public BigDecimal getPaidAmount() { + return paidAmount; + } + + public void setPaidAmount(BigDecimal paidAmount) { + this.paidAmount = paidAmount; + } + + public BigDecimal getRemainingAmount() { + return remainingAmount; + } + + public void setRemainingAmount(BigDecimal remainingAmount) { + this.remainingAmount = remainingAmount; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("contractId", getContractId()) + .append("contractNo", getContractNo()) + .append("contractType", getContractType()) + .append("contractName", getContractName()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("amount", getAmount()) + .append("taxRate", getTaxRate()) + .append("taxAmount", getTaxAmount()) + .append("totalAmount", getTotalAmount()) + .append("signDate", getSignDate()) + .append("startDate", getStartDate()) + .append("endDate", getEndDate()) + .append("contractContent", getContractContent()) + .append("attachmentUrl", getAttachmentUrl()) + .append("approvalStatus", getApprovalStatus()) + .append("status", getStatus()) + .append("qualityRate", getQualityRate()) + .append("qualityAmount", getQualityAmount()) + .append("paidAmount", getPaidAmount()) + .append("remainingAmount", getRemainingAmount()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/ContractChange.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/ContractChange.java new file mode 100644 index 00000000..576a6760 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/ContractChange.java @@ -0,0 +1,211 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +public class ContractChange extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long changeId; + + @NotNull(message = "合同ID不能为空") + private Long contractId; + + @Excel(name = "合同编号") + private String contractNo; + + @NotBlank(message = "变更类型不能为空") + @Excel(name = "变更类型", readConverterExp = "amount=金额变更,content=内容变更,term=期限变更,other=其他变更") + private String changeType; + + @NotBlank(message = "变更原因不能为空") + @Excel(name = "变更原因") + private String changeReason; + + @Excel(name = "变更金额") + private BigDecimal changeAmount; + + private String beforeContent; + + private String afterContent; + + @Excel(name = "状态", readConverterExp = "pending=待审批,approved=已通过,rejected=已驳回") + private String status; + + private String approvalResult; + + @Excel(name = "审批人") + private String approvalBy; + + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + @Excel(name = "附件") + private String attachmentUrl; + + private String remark; + + public ContractChange(Object o, Long contractId, Object o1, Object o2, Object o3, Object o4, Object o5, Object o6, Object o7, Object o8, Object o9, Object o10, Object o11) { + super(); + } + + public ContractChange() { + + } + + public Long getChangeId() { + return changeId; + } + + public void setChangeId(Long changeId) { + this.changeId = changeId; + } + + public Long getContractId() { + return contractId; + } + + public void setContractId(Long contractId) { + this.contractId = contractId; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getChangeType() { + return changeType; + } + + public void setChangeType(String changeType) { + this.changeType = changeType; + } + + public String getChangeReason() { + return changeReason; + } + + public void setChangeReason(String changeReason) { + this.changeReason = changeReason; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public String getBeforeContent() { + return beforeContent; + } + + public void setBeforeContent(String beforeContent) { + this.beforeContent = beforeContent; + } + + public String getAfterContent() { + return afterContent; + } + + public void setAfterContent(String afterContent) { + this.afterContent = afterContent; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getApprovalResult() { + return approvalResult; + } + + public void setApprovalResult(String approvalResult) { + this.approvalResult = approvalResult; + } + + public String getApprovalBy() { + return approvalBy; + } + + public void setApprovalBy(String approvalBy) { + this.approvalBy = approvalBy; + } + + public Date getApprovalTime() { + return approvalTime; + } + + public void setApprovalTime(Date approvalTime) { + this.approvalTime = approvalTime; + } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("changeId", getChangeId()) + .append("contractId", getContractId()) + .append("contractNo", getContractNo()) + .append("changeType", getChangeType()) + .append("changeReason", getChangeReason()) + .append("changeAmount", getChangeAmount()) + .append("beforeContent", getBeforeContent()) + .append("afterContent", getAfterContent()) + .append("status", getStatus()) + .append("approvalResult", getApprovalResult()) + .append("approvalBy", getApprovalBy()) + .append("approvalTime", getApprovalTime()) + .append("attachmentUrl", getAttachmentUrl()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Material.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Material.java new file mode 100644 index 00000000..0110302e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Material.java @@ -0,0 +1,331 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import java.math.BigDecimal; +import java.util.Date; + +public class Material extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long materialId; + + @NotBlank(message = "物料编码不能为空") + @Size(max = 50, message = "物料编码长度不能超过50个字符") + @Excel(name = "物料编码") + private String materialCode; + + @NotBlank(message = "物料名称不能为空") + @Size(max = 200, message = "物料名称长度不能超过200个字符") + @Excel(name = "物料名称") + private String materialName; + + @Excel(name = "物料类型") + private String materialType; + + @Excel(name = "物料分类") + private String materialCategory; + + @Size(max = 200, message = "规格型号长度不能超过200个字符") + @Excel(name = "规格型号") + private String specification; + + @NotBlank(message = "计量单位不能为空") + @Size(max = 20, message = "计量单位长度不能超过20个字符") + @Excel(name = "计量单位") + private String unit; + + @Excel(name = "单价") + private BigDecimal unitPrice; + + @Excel(name = "参考单价") + private BigDecimal referencePrice; + + @Excel(name = "安全库存") + private BigDecimal safetyStock; + + @Excel(name = "当前库存") + private BigDecimal currentStock; + + @Excel(name = "库存数量") + private BigDecimal quantity; + + @Excel(name = "库存") + private BigDecimal stock; + + @Excel(name = "最低库存") + private BigDecimal minStock; + + @Excel(name = "最高库存") + private BigDecimal maxStock; + + @Excel(name = "预警阈值") + private BigDecimal warningThreshold; + + @Excel(name = "预警状态", readConverterExp = "normal=正常,warning=预警,urgent=紧急") + private String warningStatus; + + private Long supplierId; + + @Excel(name = "供应商名称") + private String supplierName; + + @Excel(name = "批次号") + private String batchNo; + + @Size(max = 100, message = "所属仓库长度不能超过100个字符") + @Excel(name = "所属仓库") + private String warehouse; + + @Size(max = 100, message = "库位长度不能超过100个字符") + @Excel(name = "库位") + private String location; + + @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd") + private Date expireDate; + + private String remark; + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public String getMaterialType() { + return materialType; + } + + public void setMaterialType(String materialType) { + this.materialType = materialType; + } + + public String getMaterialCategory() { + return materialCategory; + } + + public void setMaterialCategory(String materialCategory) { + this.materialCategory = materialCategory; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getReferencePrice() { + return referencePrice; + } + + public void setReferencePrice(BigDecimal referencePrice) { + this.referencePrice = referencePrice; + } + + public BigDecimal getSafetyStock() { + return safetyStock; + } + + public void setSafetyStock(BigDecimal safetyStock) { + this.safetyStock = safetyStock; + } + + public BigDecimal getCurrentStock() { + return currentStock; + } + + public void setCurrentStock(BigDecimal currentStock) { + this.currentStock = currentStock; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getStock() { + return stock; + } + + public void setStock(BigDecimal stock) { + this.stock = stock; + } + + public BigDecimal getMinStock() { + return minStock; + } + + public void setMinStock(BigDecimal minStock) { + this.minStock = minStock; + } + + public BigDecimal getMaxStock() { + return maxStock; + } + + public void setMaxStock(BigDecimal maxStock) { + this.maxStock = maxStock; + } + + public BigDecimal getWarningThreshold() { + return warningThreshold; + } + + public void setWarningThreshold(BigDecimal warningThreshold) { + this.warningThreshold = warningThreshold; + } + + public String getWarningStatus() { + return warningStatus; + } + + public void setWarningStatus(String warningStatus) { + this.warningStatus = warningStatus; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + } + + public String getWarehouse() { + return warehouse; + } + + public void setWarehouse(String warehouse) { + this.warehouse = warehouse; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public Date getExpireDate() { + return expireDate; + } + + public void setExpireDate(Date expireDate) { + this.expireDate = expireDate; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("materialId", getMaterialId()) + .append("materialCode", getMaterialCode()) + .append("materialName", getMaterialName()) + .append("materialType", getMaterialType()) + .append("materialCategory", getMaterialCategory()) + .append("specification", getSpecification()) + .append("unit", getUnit()) + .append("unitPrice", getUnitPrice()) + .append("referencePrice", getReferencePrice()) + .append("safetyStock", getSafetyStock()) + .append("currentStock", getCurrentStock()) + .append("quantity", getQuantity()) + .append("minStock", getMinStock()) + .append("maxStock", getMaxStock()) + .append("warningThreshold", getWarningThreshold()) + .append("warningStatus", getWarningStatus()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("batchNo", getBatchNo()) + .append("warehouse", getWarehouse()) + .append("location", getLocation()) + .append("expireDate", getExpireDate()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialIn.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialIn.java new file mode 100644 index 00000000..ae2dd339 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialIn.java @@ -0,0 +1,228 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +public class MaterialIn extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long inId; + + @NotBlank(message = "入库单号不能为空") + @Excel(name = "入库单号") + private String inNo; + + @NotNull(message = "物料ID不能为空") + private Long materialId; + + @Excel(name = "物料编码") + private String materialCode; + + @Excel(name = "物料名称") + private String materialName; + + @NotNull(message = "入库数量不能为空") + @Excel(name = "入库数量") + private BigDecimal quantity; + + @Excel(name = "单价") + private BigDecimal unitPrice; + + @Excel(name = "金额") + private BigDecimal amount; + + @Excel(name = "入库日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date inDate; + + @Excel(name = "批次号") + private String batchNo; + + @Excel(name = "入库类型", readConverterExp = "purchase=采购入库,return=退货入库,transfer=调拨入库,other=其他") + private String inType; + + @Excel(name = "供应商名称") + private String supplierName; + + @Excel(name = "仓库") + private String warehouse; + + @Excel(name = "库位") + private String location; + + @Excel(name = "状态", readConverterExp = "pending=待审核,approved=已审核,canceled=已取消") + private String status; + + private String remark; + + public Long getInId() { + return inId; + } + + public void setInId(Long inId) { + this.inId = inId; + } + + public String getInNo() { + return inNo; + } + + public void setInNo(String inNo) { + this.inNo = inNo; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public Date getInDate() { + return inDate; + } + + public void setInDate(Date inDate) { + this.inDate = inDate; + } + + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + } + + public String getInType() { + return inType; + } + + public void setInType(String inType) { + this.inType = inType; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getWarehouse() { + return warehouse; + } + + public void setWarehouse(String warehouse) { + this.warehouse = warehouse; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("inId", getInId()) + .append("inNo", getInNo()) + .append("materialId", getMaterialId()) + .append("materialCode", getMaterialCode()) + .append("materialName", getMaterialName()) + .append("quantity", getQuantity()) + .append("unitPrice", getUnitPrice()) + .append("amount", getAmount()) + .append("inDate", getInDate()) + .append("batchNo", getBatchNo()) + .append("inType", getInType()) + .append("supplierName", getSupplierName()) + .append("warehouse", getWarehouse()) + .append("location", getLocation()) + .append("status", getStatus()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialOut.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialOut.java new file mode 100644 index 00000000..22e9613b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/MaterialOut.java @@ -0,0 +1,240 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +public class MaterialOut extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long outId; + + @NotBlank(message = "出库单号不能为空") + @Excel(name = "出库单号") + private String outNo; + + @NotNull(message = "物料ID不能为空") + private Long materialId; + + @Excel(name = "物料编码") + private String materialCode; + + @Excel(name = "物料名称") + private String materialName; + + @NotNull(message = "出库数量不能为空") + @Excel(name = "出库数量") + private BigDecimal quantity; + + @Excel(name = "单价") + private BigDecimal unitPrice; + + @Excel(name = "金额") + private BigDecimal amount; + + @Excel(name = "出库日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date outDate; + + @Excel(name = "出库类型", readConverterExp = "use=领用出库,sale=销售出库,transfer=调拨出库,scrap=报废出库,other=其他") + private String outType; + + @Excel(name = "使用部门") + private String deptName; + + @Excel(name = "领用人") + private String receiver; + + @Excel(name = "用途") + private String purpose; + + @Excel(name = "仓库") + private String warehouse; + + @Excel(name = "库位") + private String location; + + @Excel(name = "状态", readConverterExp = "pending=待审核,approved=已审核,canceled=已取消") + private String status; + + private String remark; + + public Long getOutId() { + return outId; + } + + public void setOutId(Long outId) { + this.outId = outId; + } + + public String getOutNo() { + return outNo; + } + + public void setOutNo(String outNo) { + this.outNo = outNo; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public Date getOutDate() { + return outDate; + } + + public void setOutDate(Date outDate) { + this.outDate = outDate; + } + + public String getOutType() { + return outType; + } + + public void setOutType(String outType) { + this.outType = outType; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + public String getPurpose() { + return purpose; + } + + public void setPurpose(String purpose) { + this.purpose = purpose; + } + + public String getWarehouse() { + return warehouse; + } + + public void setWarehouse(String warehouse) { + this.warehouse = warehouse; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("outId", getOutId()) + .append("outNo", getOutNo()) + .append("materialId", getMaterialId()) + .append("materialCode", getMaterialCode()) + .append("materialName", getMaterialName()) + .append("quantity", getQuantity()) + .append("unitPrice", getUnitPrice()) + .append("amount", getAmount()) + .append("outDate", getOutDate()) + .append("outType", getOutType()) + .append("deptName", getDeptName()) + .append("receiver", getReceiver()) + .append("purpose", getPurpose()) + .append("warehouse", getWarehouse()) + .append("location", getLocation()) + .append("status", getStatus()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Payment.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Payment.java new file mode 100644 index 00000000..a9f119c2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Payment.java @@ -0,0 +1,370 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +public class Payment extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long paymentId; + + @NotBlank(message = "付款单号不能为空") + @Excel(name = "付款单号") + private String paymentNo; + + @NotNull(message = "合同ID不能为空") + private Long contractId; + + @Excel(name = "合同编号") + private String contractNo; + + @Excel(name = "合同名称") + private String contractName; + + @NotNull(message = "供应商ID不能为空") + private Long supplierId; + + @Excel(name = "供应商名称") + private String supplierName; + + @NotBlank(message = "款项类型不能为空") + @Excel(name = "款项类型", readConverterExp = "advance=预付款,progress=进度款,final=尾款,quality=质保金") + private String paymentType; + + @Excel(name = "计划金额") + private BigDecimal planAmount; + + @Excel(name = "实际金额") + private BigDecimal actualAmount; + + @Excel(name = "计划付款日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date planDate; + + @Excel(name = "实际付款日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date actualDate; + + @Excel(name = "付款方式", readConverterExp = "bank=银行转账,cash=现金,check=支票,other=其他") + private String paymentMethod; + + @Excel(name = "付款日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date paymentDate; + + @Excel(name = "付款金额") + private BigDecimal amount; + + @Excel(name = "币种") + private String currency; + + @Excel(name = "汇率") + private BigDecimal exchangeRate; + + private Long accountId; + + @Excel(name = "付款银行") + private String bankName; + + @Excel(name = "付款账号") + private String bankAccount; + + @Excel(name = "发票号码") + private String invoiceNo; + + @Excel(name = "发票金额") + private BigDecimal invoiceAmount; + + @Excel(name = "凭证编号") + private String voucherNo; + + @Excel(name = "附件") + private String attachmentUrl; + + @Excel(name = "状态", readConverterExp = "pending=待审批,approved=已审批,paid=已打款,rejected=已驳回") + private String status; + + private Long constructionId; + + @Excel(name = "申请进度比例") + private BigDecimal progressPercent; + + private String remark; + + public Long getPaymentId() { + return paymentId; + } + + public void setPaymentId(Long paymentId) { + this.paymentId = paymentId; + } + + public String getPaymentNo() { + return paymentNo; + } + + public void setPaymentNo(String paymentNo) { + this.paymentNo = paymentNo; + } + + public Long getContractId() { + return contractId; + } + + public void setContractId(Long contractId) { + this.contractId = contractId; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getPaymentType() { + return paymentType; + } + + public void setPaymentType(String paymentType) { + this.paymentType = paymentType; + } + + public BigDecimal getPlanAmount() { + return planAmount; + } + + public void setPlanAmount(BigDecimal planAmount) { + this.planAmount = planAmount; + } + + public BigDecimal getActualAmount() { + return actualAmount; + } + + public void setActualAmount(BigDecimal actualAmount) { + this.actualAmount = actualAmount; + } + + public Date getPlanDate() { + return planDate; + } + + public void setPlanDate(Date planDate) { + this.planDate = planDate; + } + + public Date getActualDate() { + return actualDate; + } + + public void setActualDate(Date actualDate) { + this.actualDate = actualDate; + } + + public String getPaymentMethod() { + return paymentMethod; + } + + public void setPaymentMethod(String paymentMethod) { + this.paymentMethod = paymentMethod; + } + + public Date getPaymentDate() { + return paymentDate; + } + + public void setPaymentDate(Date paymentDate) { + this.paymentDate = paymentDate; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public BigDecimal getExchangeRate() { + return exchangeRate; + } + + public void setExchangeRate(BigDecimal exchangeRate) { + this.exchangeRate = exchangeRate; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName; + } + + public String getBankAccount() { + return bankAccount; + } + + public void setBankAccount(String bankAccount) { + this.bankAccount = bankAccount; + } + + public String getInvoiceNo() { + return invoiceNo; + } + + public void setInvoiceNo(String invoiceNo) { + this.invoiceNo = invoiceNo; + } + + public BigDecimal getInvoiceAmount() { + return invoiceAmount; + } + + public void setInvoiceAmount(BigDecimal invoiceAmount) { + this.invoiceAmount = invoiceAmount; + } + + public String getVoucherNo() { + return voucherNo; + } + + public void setVoucherNo(String voucherNo) { + this.voucherNo = voucherNo; + } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Long getConstructionId() { + return constructionId; + } + + public void setConstructionId(Long constructionId) { + this.constructionId = constructionId; + } + + public BigDecimal getProgressPercent() { + return progressPercent; + } + + public void setProgressPercent(BigDecimal progressPercent) { + this.progressPercent = progressPercent; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("paymentId", getPaymentId()) + .append("paymentNo", getPaymentNo()) + .append("contractId", getContractId()) + .append("contractNo", getContractNo()) + .append("contractName", getContractName()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("paymentType", getPaymentType()) + .append("planAmount", getPlanAmount()) + .append("actualAmount", getActualAmount()) + .append("planDate", getPlanDate()) + .append("actualDate", getActualDate()) + .append("paymentMethod", getPaymentMethod()) + .append("paymentDate", getPaymentDate()) + .append("amount", getAmount()) + .append("currency", getCurrency()) + .append("exchangeRate", getExchangeRate()) + .append("accountId", getAccountId()) + .append("bankName", getBankName()) + .append("bankAccount", getBankAccount()) + .append("invoiceNo", getInvoiceNo()) + .append("invoiceAmount", getInvoiceAmount()) + .append("voucherNo", getVoucherNo()) + .append("attachmentUrl", getAttachmentUrl()) + .append("status", getStatus()) + .append("constructionId", getConstructionId()) + .append("progressPercent", getProgressPercent()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Supplier.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Supplier.java new file mode 100644 index 00000000..0b3e3aa6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/Supplier.java @@ -0,0 +1,490 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import java.math.BigDecimal; +import java.util.Date; + +public class Supplier extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long supplierId; + + @NotBlank(message = "供应商编码不能为空") + @Size(max = 50, message = "供应商编码长度不能超过50个字符") + @Excel(name = "供应商编码") + private String supplierCode; + + @NotBlank(message = "供应商名称不能为空") + @Size(max = 200, message = "供应商名称长度不能超过200个字符") + @Excel(name = "供应商名称") + private String supplierName; + + @Size(max = 100, message = "简称长度不能超过100个字符") + @Excel(name = "简称") + private String shortName; + + @Size(max = 50, message = "统一社会信用代码长度不能超过50个字符") + @Excel(name = "统一社会信用代码") + private String creditCode; + + @Size(max = 50, message = "营业执照编号长度不能超过50个字符") + @Excel(name = "营业执照编号") + private String businessLicenseNo; + + @Size(max = 100, message = "法人姓名长度不能超过100个字符") + @Excel(name = "法人姓名") + private String legalPerson; + + @Size(max = 100, message = "联系人长度不能超过100个字符") + @Excel(name = "联系人") + private String contact; + + @Size(max = 50, message = "联系电话长度不能超过50个字符") + @Excel(name = "联系电话") + private String phone; + + @Size(max = 50, message = "手机号长度不能超过50个字符") + @Excel(name = "手机号") + private String mobile; + + @Size(max = 100, message = "邮箱长度不能超过100个字符") + @Excel(name = "邮箱") + private String email; + + @Size(max = 500, message = "地址长度不能超过500个字符") + @Excel(name = "地址") + private String address; + + @Size(max = 50, message = "省份长度不能超过50个字符") + private String province; + + @Size(max = 50, message = "城市长度不能超过50个字符") + private String city; + + @Size(max = 50, message = "区县长度不能超过50个字符") + private String district; + + @Size(max = 200, message = "资质等级长度不能超过200个字符") + @Excel(name = "资质等级") + private String qualification; + + @Size(max = 100, message = "资质证书编号长度不能超过100个字符") + @Excel(name = "资质证书编号") + private String qualificationNo; + + @Excel(name = "资质有效期", width = 30, dateFormat = "yyyy-MM-dd") + private Date qualificationExpireDate; + + @Size(max = 20, message = "信用等级长度不能超过20个字符") + @Excel(name = "信用等级") + private String creditRating; + + @Size(max = 500, message = "经营范围长度不能超过500个字符") + private String businessScope; + + @Excel(name = "注册资本") + private BigDecimal registerCapital; + + @Excel(name = "成立日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date establishDate; + + @Size(max = 50, message = "税号长度不能超过50个字符") + @Excel(name = "税号") + private String taxNo; + + @Size(max = 100, message = "开户银行长度不能超过100个字符") + @Excel(name = "开户银行") + private String bankName; + + @Size(max = 100, message = "银行账号长度不能超过100个字符") + @Excel(name = "银行账号") + private String bankAccount; + + @Size(max = 20, message = "结算方式长度不能超过20个字符") + @Excel(name = "结算方式", readConverterExp = "bank=银行转账,cash=现金,acceptance=承兑汇票") + private String settlementMethod; + + @Size(max = 20, message = "付款条件长度不能超过20个字符") + @Excel(name = "付款条件", readConverterExp = "prepay=预付款,progress=进度款,final=竣工结算") + private String paymentTerms; + + @Size(max = 20, message = "付款周期长度不能超过20个字符") + @Excel(name = "付款周期", readConverterExp = "t30=T+30,t45=T+45,t60=T+60") + private String paymentCycle; + + @Excel(name = "质保金比例") + private BigDecimal warrantyRate; + + @Excel(name = "合作开始日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date cooperationStartDate; + + @Size(max = 20, message = "合作状态长度不能超过20个字符") + @Excel(name = "合作状态", readConverterExp = "cooperating=合作中,suspended=暂停合作,terminated=终止合作") + private String cooperationStatus; + + @Size(max = 20, message = "供应商类型长度不能超过20个字符") + @Excel(name = "供应商类型", readConverterExp = "construction=施工单位,material=材料供应商,equipment=设备供应商,service=服务提供商") + private String supplierType; + + @Excel(name = "状态", readConverterExp = "normal=正常,abnormal=异常,blacklist=黑名单") + private String status; + + @Excel(name = "累计合同金额") + private BigDecimal totalContractAmount; + + @Excel(name = "累计付款金额") + private BigDecimal totalPaymentAmount; + + private String remark; + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierCode() { + return supplierCode; + } + + public void setSupplierCode(String supplierCode) { + this.supplierCode = supplierCode; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getShortName() { + return shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + public String getCreditCode() { + return creditCode; + } + + public void setCreditCode(String creditCode) { + this.creditCode = creditCode; + } + + public String getBusinessLicenseNo() { + return businessLicenseNo; + } + + public void setBusinessLicenseNo(String businessLicenseNo) { + this.businessLicenseNo = businessLicenseNo; + } + + public String getLegalPerson() { + return legalPerson; + } + + public void setLegalPerson(String legalPerson) { + this.legalPerson = legalPerson; + } + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getQualification() { + return qualification; + } + + public void setQualification(String qualification) { + this.qualification = qualification; + } + + public String getQualificationNo() { + return qualificationNo; + } + + public void setQualificationNo(String qualificationNo) { + this.qualificationNo = qualificationNo; + } + + public Date getQualificationExpireDate() { + return qualificationExpireDate; + } + + public void setQualificationExpireDate(Date qualificationExpireDate) { + this.qualificationExpireDate = qualificationExpireDate; + } + + public String getCreditRating() { + return creditRating; + } + + public void setCreditRating(String creditRating) { + this.creditRating = creditRating; + } + + public String getBusinessScope() { + return businessScope; + } + + public void setBusinessScope(String businessScope) { + this.businessScope = businessScope; + } + + public BigDecimal getRegisterCapital() { + return registerCapital; + } + + public void setRegisterCapital(BigDecimal registerCapital) { + this.registerCapital = registerCapital; + } + + public Date getEstablishDate() { + return establishDate; + } + + public void setEstablishDate(Date establishDate) { + this.establishDate = establishDate; + } + + public String getTaxNo() { + return taxNo; + } + + public void setTaxNo(String taxNo) { + this.taxNo = taxNo; + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName; + } + + public String getBankAccount() { + return bankAccount; + } + + public void setBankAccount(String bankAccount) { + this.bankAccount = bankAccount; + } + + public String getSettlementMethod() { + return settlementMethod; + } + + public void setSettlementMethod(String settlementMethod) { + this.settlementMethod = settlementMethod; + } + + public String getPaymentTerms() { + return paymentTerms; + } + + public void setPaymentTerms(String paymentTerms) { + this.paymentTerms = paymentTerms; + } + + public String getPaymentCycle() { + return paymentCycle; + } + + public void setPaymentCycle(String paymentCycle) { + this.paymentCycle = paymentCycle; + } + + public BigDecimal getWarrantyRate() { + return warrantyRate; + } + + public void setWarrantyRate(BigDecimal warrantyRate) { + this.warrantyRate = warrantyRate; + } + + public Date getCooperationStartDate() { + return cooperationStartDate; + } + + public void setCooperationStartDate(Date cooperationStartDate) { + this.cooperationStartDate = cooperationStartDate; + } + + public String getCooperationStatus() { + return cooperationStatus; + } + + public void setCooperationStatus(String cooperationStatus) { + this.cooperationStatus = cooperationStatus; + } + + public String getSupplierType() { + return supplierType; + } + + public void setSupplierType(String supplierType) { + this.supplierType = supplierType; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public BigDecimal getTotalContractAmount() { + return totalContractAmount; + } + + public void setTotalContractAmount(BigDecimal totalContractAmount) { + this.totalContractAmount = totalContractAmount; + } + + public BigDecimal getTotalPaymentAmount() { + return totalPaymentAmount; + } + + public void setTotalPaymentAmount(BigDecimal totalPaymentAmount) { + this.totalPaymentAmount = totalPaymentAmount; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("supplierId", getSupplierId()) + .append("supplierCode", getSupplierCode()) + .append("supplierName", getSupplierName()) + .append("shortName", getShortName()) + .append("creditCode", getCreditCode()) + .append("businessLicenseNo", getBusinessLicenseNo()) + .append("legalPerson", getLegalPerson()) + .append("contact", getContact()) + .append("phone", getPhone()) + .append("mobile", getMobile()) + .append("email", getEmail()) + .append("address", getAddress()) + .append("province", getProvince()) + .append("city", getCity()) + .append("district", getDistrict()) + .append("qualification", getQualification()) + .append("qualificationNo", getQualificationNo()) + .append("qualificationExpireDate", getQualificationExpireDate()) + .append("creditRating", getCreditRating()) + .append("businessScope", getBusinessScope()) + .append("registerCapital", getRegisterCapital()) + .append("establishDate", getEstablishDate()) + .append("taxNo", getTaxNo()) + .append("bankName", getBankName()) + .append("bankAccount", getBankAccount()) + .append("settlementMethod", getSettlementMethod()) + .append("paymentTerms", getPaymentTerms()) + .append("paymentCycle", getPaymentCycle()) + .append("warrantyRate", getWarrantyRate()) + .append("cooperationStartDate", getCooperationStartDate()) + .append("cooperationStatus", getCooperationStatus()) + .append("supplierType", getSupplierType()) + .append("status", getStatus()) + .append("totalContractAmount", getTotalContractAmount()) + .append("totalPaymentAmount", getTotalPaymentAmount()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierAccount.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierAccount.java new file mode 100644 index 00000000..281dc11d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierAccount.java @@ -0,0 +1,147 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +public class SupplierAccount extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long accountId; + + @NotNull(message = "供应商ID不能为空") + private Long supplierId; + + @Size(max = 100, message = "账户名称长度不能超过100个字符") + @Excel(name = "账户名称") + private String accountName; + + @NotBlank(message = "开户银行不能为空") + @Size(max = 100, message = "开户银行长度不能超过100个字符") + @Excel(name = "开户银行") + private String bankName; + + @Size(max = 100, message = "支行名称长度不能超过100个字符") + @Excel(name = "支行名称") + private String branchName; + + @NotBlank(message = "银行账号不能为空") + @Size(max = 100, message = "银行账号长度不能超过100个字符") + @Excel(name = "银行账号") + private String bankAccount; + + @Excel(name = "币种") + private String currency; + + @Excel(name = "是否默认", readConverterExp = "0=否,1=是") + private String isDefault; + + private String remark; + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName; + } + + public String getBranchName() { + return branchName; + } + + public void setBranchName(String branchName) { + this.branchName = branchName; + } + + public String getBankAccount() { + return bankAccount; + } + + public void setBankAccount(String bankAccount) { + this.bankAccount = bankAccount; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getIsDefault() { + return isDefault; + } + + public void setIsDefault(String isDefault) { + this.isDefault = isDefault; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("accountId", getAccountId()) + .append("supplierId", getSupplierId()) + .append("accountName", getAccountName()) + .append("bankName", getBankName()) + .append("branchName", getBranchName()) + .append("bankAccount", getBankAccount()) + .append("currency", getCurrency()) + .append("isDefault", getIsDefault()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierPaymentRecord.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierPaymentRecord.java new file mode 100644 index 00000000..4c9516b1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/engineering/SupplierPaymentRecord.java @@ -0,0 +1,195 @@ +package com.ruoyi.system.domain.engineering; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +public class SupplierPaymentRecord extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long recordId; + + @NotNull(message = "供应商ID不能为空") + private Long supplierId; + + @Excel(name = "供应商名称") + private String supplierName; + + private Long contractId; + + @Excel(name = "合同编号") + private String contractNo; + + @NotNull(message = "付款日期不能为空") + @Excel(name = "付款日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date paymentDate; + + @NotNull(message = "付款金额不能为空") + @Excel(name = "付款金额") + private BigDecimal paymentAmount; + + @Excel(name = "款项类型", readConverterExp = "advance=预付款,progress=进度款,final=尾款,quality=质保金") + private String paymentType; + + @Excel(name = "付款方式") + private String paymentMethod; + + private Long accountId; + + @Excel(name = "发票号码") + private String invoiceNo; + + @Excel(name = "凭证编号") + private String voucherNo; + + private String remark; + + public Long getRecordId() { + return recordId; + } + + public void setRecordId(Long recordId) { + this.recordId = recordId; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public Long getContractId() { + return contractId; + } + + public void setContractId(Long contractId) { + this.contractId = contractId; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public Date getPaymentDate() { + return paymentDate; + } + + public void setPaymentDate(Date paymentDate) { + this.paymentDate = paymentDate; + } + + public BigDecimal getPaymentAmount() { + return paymentAmount; + } + + public void setPaymentAmount(BigDecimal paymentAmount) { + this.paymentAmount = paymentAmount; + } + + public String getPaymentType() { + return paymentType; + } + + public void setPaymentType(String paymentType) { + this.paymentType = paymentType; + } + + public String getPaymentMethod() { + return paymentMethod; + } + + public void setPaymentMethod(String paymentMethod) { + this.paymentMethod = paymentMethod; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getInvoiceNo() { + return invoiceNo; + } + + public void setInvoiceNo(String invoiceNo) { + this.invoiceNo = invoiceNo; + } + + public String getVoucherNo() { + return voucherNo; + } + + public void setVoucherNo(String voucherNo) { + this.voucherNo = voucherNo; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("recordId", getRecordId()) + .append("supplierId", getSupplierId()) + .append("supplierName", getSupplierName()) + .append("contractId", getContractId()) + .append("contractNo", getContractNo()) + .append("paymentDate", getPaymentDate()) + .append("paymentAmount", getPaymentAmount()) + .append("paymentType", getPaymentType()) + .append("paymentMethod", getPaymentMethod()) + .append("accountId", getAccountId()) + .append("invoiceNo", getInvoiceNo()) + .append("voucherNo", getVoucherNo()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("delFlag", getDelFlag()) + .toString(); + } + + private Integer delFlag; + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + + public void setPaymentId(Long paymentId) { + } + + public void setAmount(BigDecimal amount) { + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ConstructionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ConstructionMapper.java new file mode 100644 index 00000000..2f0c147c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ConstructionMapper.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.Construction; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ConstructionMapper { + public List selectConstructionList(Construction construction); + + public List selectConstructionTree(Construction construction); + + public Construction selectConstructionById(Long constructionId); + + public int insertConstruction(Construction construction); + + public int updateConstruction(Construction construction); + + public int updateConstructionProgress(Long constructionId, java.math.BigDecimal progress); + + public int updateConstructionAcceptance(Long constructionId, String acceptanceStatus, String acceptanceResult, java.util.Date acceptanceDate, String acceptanceRemark); + + public int deleteConstructionById(Long constructionId); + + public int deleteConstructionByIds(Long[] constructionIds); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractChangeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractChangeMapper.java new file mode 100644 index 00000000..688da668 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractChangeMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.ContractChange; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ContractChangeMapper { + public List selectContractChangeList(ContractChange contractChange); + + public ContractChange selectContractChangeById(Long changeId); + + public int insertContractChange(ContractChange contractChange); + + public int updateContractChange(ContractChange contractChange); + + public int deleteContractChangeById(Long changeId); + + public int deleteContractChangeByContractId(Long contractId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractMapper.java new file mode 100644 index 00000000..ccd46439 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/ContractMapper.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.Contract; +import org.apache.ibatis.annotations.Mapper; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface ContractMapper { + public List selectContractList(Contract contract); + + public Contract selectContractById(Long contractId); + + public Contract selectContractByNo(String contractNo); + + public List selectContractBySupplierId(Long supplierId); + + public int insertContract(Contract contract); + + public int updateContract(Contract contract); + + public int updateContractStatus(Long contractId, String status); + + public int updateContractPaidAmount(Long contractId, BigDecimal paidAmount); + + public int deleteContractById(Long contractId); + + public int deleteContractByIds(Long[] contractIds); + + public BigDecimal sumContractAmountBySupplierId(Long supplierId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialInMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialInMapper.java new file mode 100644 index 00000000..5a08b192 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialInMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.MaterialIn; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface MaterialInMapper { + public List selectMaterialInList(MaterialIn materialIn); + + public MaterialIn selectMaterialInById(Long inId); + + public int insertMaterialIn(MaterialIn materialIn); + + public int updateMaterialIn(MaterialIn materialIn); + + public int updateMaterialInStatus(Long inId, String status); + + public int deleteMaterialInById(Long inId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialMapper.java new file mode 100644 index 00000000..eb2da5f7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialMapper.java @@ -0,0 +1,29 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.Material; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface MaterialMapper { + public List selectMaterialList(Material material); + + public Material selectMaterialById(Long materialId); + + public Material selectMaterialByCode(String materialCode); + + public int insertMaterial(Material material); + + public int updateMaterial(Material material); + + public int updateMaterialStock(@Param("materialId") Long materialId, @Param("quantity") BigDecimal quantity); + + public int deleteMaterialById(Long materialId); + + public int deleteMaterialByIds(Long[] materialIds); + + public List selectMaterialOptions(); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialOutMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialOutMapper.java new file mode 100644 index 00000000..05132e97 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/MaterialOutMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.MaterialOut; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface MaterialOutMapper { + public List selectMaterialOutList(MaterialOut materialOut); + + public MaterialOut selectMaterialOutById(Long outId); + + public int insertMaterialOut(MaterialOut materialOut); + + public int updateMaterialOut(MaterialOut materialOut); + + public int updateMaterialOutStatus(Long outId, String status); + + public int deleteMaterialOutById(Long outId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/PaymentMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/PaymentMapper.java new file mode 100644 index 00000000..2b03abcb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/PaymentMapper.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.Payment; +import org.apache.ibatis.annotations.Mapper; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface PaymentMapper { + public List selectPaymentList(Payment payment); + + public Payment selectPaymentById(Long paymentId); + + public int insertPayment(Payment payment); + + public int updatePayment(Payment payment); + + public int updatePaymentStatus(Long paymentId, String status); + + public int deletePaymentById(Long paymentId); + + public int deletePaymentByIds(Long[] paymentIds); + + public BigDecimal sumPaymentAmountByContractId(Long contractId); + + public BigDecimal sumPaymentAmountBySupplierId(Long supplierId); + + Object selectPaymentByContractId(Long contractId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierAccountMapper.java new file mode 100644 index 00000000..ade40946 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierAccountMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.SupplierAccount; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SupplierAccountMapper { + public List selectSupplierAccountBySupplierId(Long supplierId); + + public SupplierAccount selectSupplierAccountById(Long accountId); + + public int insertSupplierAccount(SupplierAccount account); + + public int updateSupplierAccount(SupplierAccount account); + + public int deleteSupplierAccountById(Long accountId); + + public int deleteSupplierAccountBySupplierId(Long supplierId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierMapper.java new file mode 100644 index 00000000..26063728 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierMapper.java @@ -0,0 +1,33 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.Supplier; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface SupplierMapper { + public List selectSupplierList(Supplier supplier); + + public Supplier selectSupplierById(Long supplierId); + + public Supplier selectSupplierByCode(String supplierCode); + + public int insertSupplier(Supplier supplier); + + public int updateSupplier(Supplier supplier); + + public int updateSupplierStatus(@Param("supplierId") Long supplierId, @Param("status") String status); + + public int updateSupplierAmount(@Param("supplierId") Long supplierId, + @Param("totalContractAmount") BigDecimal totalContractAmount, + @Param("totalPaymentAmount") BigDecimal totalPaymentAmount); + + public int deleteSupplierById(Long supplierId); + + public int deleteSupplierByIds(Long[] supplierIds); + + public List selectSupplierOptions(@Param("status") String status); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierPaymentRecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierPaymentRecordMapper.java new file mode 100644 index 00000000..896d4756 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/engineering/SupplierPaymentRecordMapper.java @@ -0,0 +1,25 @@ +package com.ruoyi.system.mapper.engineering; + +import com.ruoyi.system.domain.engineering.SupplierPaymentRecord; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface SupplierPaymentRecordMapper { + public List selectSupplierPaymentRecordBySupplierId(Long supplierId); + + public SupplierPaymentRecord selectSupplierPaymentRecordById(Long recordId); + + public int insertSupplierPaymentRecord(SupplierPaymentRecord record); + + public int updateSupplierPaymentRecord(SupplierPaymentRecord record); + + public int deleteSupplierPaymentRecordById(Long recordId); + + public int deleteSupplierPaymentRecordBySupplierId(Long supplierId); + + public BigDecimal sumPaymentAmountBySupplierId(Long supplierId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IConstructionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IConstructionService.java new file mode 100644 index 00000000..e1506dda --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IConstructionService.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.service.engineering; + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.engineering.Construction; + +import java.util.List; +import java.util.Map; + +public interface IConstructionService { + public TableDataInfo selectConstructionList(Construction construction); + + public List selectConstructionTree(Construction construction); + + public Construction selectConstructionById(Long constructionId); + + public int insertConstruction(Construction construction); + + public int updateConstruction(Construction construction); + + public int deleteConstructionById(Long constructionId); + + public int deleteConstructionByIds(Long[] constructionIds); + + public int updateConstructionProgress(Long constructionId, java.math.BigDecimal progress); + + public int submitAcceptance(Long constructionId, String acceptanceRemark); + + public int approveAcceptance(Long constructionId, String acceptanceResult, String acceptanceRemark); + + public Map getConstructionStatistics(Long contractId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IContractService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IContractService.java new file mode 100644 index 00000000..0e5709e0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IContractService.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.service.engineering; + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.engineering.Contract; +import com.ruoyi.system.domain.engineering.ContractChange; + +import java.util.List; +import java.util.Map; + +public interface IContractService { + public TableDataInfo selectContractList(Contract contract); + + public Map selectContractDetail(Long contractId); + + public Contract selectContractById(Long contractId); + + public int insertContract(Contract contract); + + public int updateContract(Contract contract); + + public int deleteContractById(Long contractId); + + public int deleteContractByIds(Long[] contractIds); + + public boolean hasRelatedData(Long contractId); + + public int updateContractStatus(Long contractId, String status); + + public int updateContractPaidAmount(Long contractId, java.math.BigDecimal paidAmount); + + public int insertContractChange(ContractChange change); + + public int updateContractChange(ContractChange change); + + public int deleteContractChangeById(Long changeId); + + public List selectContractChangeList(Long contractId); + + public ContractChange selectContractChangeById(Long changeId); + + public int approveContractChange(Long changeId, String approvalResult); + + public List selectContractOptions(); + + public java.math.BigDecimal sumContractAmountBySupplierId(Long supplierId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IMaterialService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IMaterialService.java new file mode 100644 index 00000000..d29a4343 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IMaterialService.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.service.engineering; + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.engineering.Material; +import com.ruoyi.system.domain.engineering.MaterialIn; +import com.ruoyi.system.domain.engineering.MaterialOut; + +import java.util.List; + +public interface IMaterialService { + public TableDataInfo selectMaterialList(Material material); + + public Material selectMaterialById(Long materialId); + + public int insertMaterial(Material material); + + public int updateMaterial(Material material); + + public int deleteMaterialById(Long materialId); + + public int deleteMaterialByIds(Long[] materialIds); + + public List selectMaterialOptions(); + + public int insertMaterialIn(MaterialIn materialIn); + + public int updateMaterialIn(MaterialIn materialIn); + + public int approveMaterialIn(Long inId); + + public int deleteMaterialInById(Long inId); + + public TableDataInfo selectMaterialInList(MaterialIn materialIn); + + public MaterialIn selectMaterialInById(Long inId); + + public int insertMaterialOut(MaterialOut materialOut); + + public int updateMaterialOut(MaterialOut materialOut); + + public int approveMaterialOut(Long outId); + + public int deleteMaterialOutById(Long outId); + + public TableDataInfo selectMaterialOutList(MaterialOut materialOut); + + public MaterialOut selectMaterialOutById(Long outId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IPaymentService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IPaymentService.java new file mode 100644 index 00000000..5980f003 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/IPaymentService.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.service.engineering; + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.engineering.Payment; + +import java.util.List; + +public interface IPaymentService { + public TableDataInfo selectPaymentList(Payment payment); + + public Payment selectPaymentById(Long paymentId); + + public int insertPayment(Payment payment); + + public int updatePayment(Payment payment); + + public int deletePaymentById(Long paymentId); + + public int deletePaymentByIds(Long[] paymentIds); + + public int approvePayment(Long paymentId); + + public int rejectPayment(Long paymentId); + + public int processPayment(Long paymentId); + + public java.math.BigDecimal sumPaymentAmountByContractId(Long contractId); + + public java.math.BigDecimal sumPaymentAmountBySupplierId(Long supplierId); + + public List selectPaymentByContractId(Long contractId); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/ISupplierService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/ISupplierService.java new file mode 100644 index 00000000..db81f93d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/engineering/ISupplierService.java @@ -0,0 +1,54 @@ +package com.ruoyi.system.service.engineering; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.engineering.Supplier; +import com.ruoyi.system.domain.engineering.SupplierAccount; +import com.ruoyi.system.domain.engineering.SupplierPaymentRecord; + +import java.util.List; +import java.util.Map; + +public interface ISupplierService { + public TableDataInfo selectSupplierList(Supplier supplier); + + public Map selectSupplierDetail(Long supplierId); + + public Supplier selectSupplierById(Long supplierId); + + public int insertSupplier(Supplier supplier); + + public int updateSupplier(Supplier supplier); + + public int deleteSupplierById(Long supplierId); + + public int deleteSupplierByIds(Long[] supplierIds); + + public boolean hasRelatedData(Long supplierId); + + public int insertSupplierAccount(SupplierAccount account); + + public int updateSupplierAccount(SupplierAccount account); + + public int deleteSupplierAccountById(Long accountId); + + public List selectSupplierAccountList(Long supplierId); + + public List selectSupplierPaymentRecordList(Long supplierId); + + public java.math.BigDecimal sumPaymentAmount(Long supplierId); + + public java.math.BigDecimal sumContractAmount(Long supplierId); + + public boolean isBlacklisted(Long supplierId); + + public boolean canCreateContract(Long supplierId); + + public boolean canMakePayment(Long supplierId); + + public int updateSupplierStatus(Long supplierId, String status); + + public int updateSupplierAmount(Long supplierId, java.math.BigDecimal totalContractAmount, java.math.BigDecimal totalPaymentAmount); + + public List selectSupplierOptions(String status); +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ConstructionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ConstructionServiceImpl.java new file mode 100644 index 00000000..d345ddf4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ConstructionServiceImpl.java @@ -0,0 +1,137 @@ +package com.ruoyi.system.service.impl.engineering; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.engineering.Construction; +import com.ruoyi.system.mapper.engineering.ConstructionMapper; +import com.ruoyi.system.service.engineering.IConstructionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class ConstructionServiceImpl implements IConstructionService { + + @Autowired + private ConstructionMapper constructionMapper; + + @Override + public TableDataInfo selectConstructionList(Construction construction) { + List list = constructionMapper.selectConstructionList(construction); + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public List selectConstructionTree(Construction construction) { + return constructionMapper.selectConstructionTree(construction); + } + + @Override + public Construction selectConstructionById(Long constructionId) { + return constructionMapper.selectConstructionById(constructionId); + } + + @Override + @Transactional + public int insertConstruction(Construction construction) { + if (StringUtils.isBlank(construction.getStatus())) { + construction.setStatus("in_progress"); + } + if (construction.getProgress() == null) { + construction.setProgress(BigDecimal.ZERO); + } + if (StringUtils.isBlank(construction.getAcceptanceStatus())) { + construction.setAcceptanceStatus("not_submitted"); + } + return constructionMapper.insertConstruction(construction); + } + + @Override + @Transactional + public int updateConstruction(Construction construction) { + return constructionMapper.updateConstruction(construction); + } + + @Override + @Transactional + public int deleteConstructionById(Long constructionId) { + return constructionMapper.deleteConstructionById(constructionId); + } + + @Override + @Transactional + public int deleteConstructionByIds(Long[] constructionIds) { + for (Long constructionId : constructionIds) { + constructionMapper.deleteConstructionById(constructionId); + } + return constructionIds.length; + } + + @Override + @Transactional + public int updateConstructionProgress(Long constructionId, BigDecimal progress) { + if (progress.compareTo(BigDecimal.ZERO) < 0) { + progress = BigDecimal.ZERO; + } + if (progress.compareTo(new BigDecimal("100")) > 0) { + progress = new BigDecimal("100"); + } + return constructionMapper.updateConstructionProgress(constructionId, progress); + } + + @Override + @Transactional + public int submitAcceptance(Long constructionId, String acceptanceRemark) { + Construction construction = constructionMapper.selectConstructionById(constructionId); + if (construction == null) { + throw new RuntimeException("施工节点不存在"); + } + return constructionMapper.updateConstructionAcceptance(constructionId, "pending", null, new java.util.Date(), acceptanceRemark); + } + + @Override + @Transactional + public int approveAcceptance(Long constructionId, String acceptanceResult, String acceptanceRemark) { + Construction construction = constructionMapper.selectConstructionById(constructionId); + if (construction == null) { + throw new RuntimeException("施工节点不存在"); + } + + String acceptanceStatus = "approved".equals(acceptanceResult) ? "approved" : "rejected"; + return constructionMapper.updateConstructionAcceptance(constructionId, acceptanceStatus, acceptanceResult, new java.util.Date(), acceptanceRemark); + } + + @Override + public Map getConstructionStatistics(Long contractId) { + Map statistics = new HashMap<>(); + Construction query = new Construction(); + query.setContractId(contractId); + List list = constructionMapper.selectConstructionList(query); + + int totalCount = list.size(); + int completedCount = 0; + BigDecimal totalProgress = BigDecimal.ZERO; + + for (Construction c : list) { + if ("approved".equals(c.getAcceptanceStatus())) { + completedCount++; + } + if (c.getProgress() != null) { + totalProgress = totalProgress.add(c.getProgress()); + } + } + + statistics.put("totalCount", totalCount); + statistics.put("completedCount", completedCount); + statistics.put("totalProgress", totalCount > 0 ? totalProgress.divide(new BigDecimal(totalCount), 2, java.math.RoundingMode.HALF_UP) : BigDecimal.ZERO); + + return statistics; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ContractServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ContractServiceImpl.java new file mode 100644 index 00000000..99938ec6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/ContractServiceImpl.java @@ -0,0 +1,195 @@ +package com.ruoyi.system.service.impl.engineering; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.engineering.Contract; +import com.ruoyi.system.domain.engineering.ContractChange; +import com.ruoyi.system.domain.engineering.Payment; +import com.ruoyi.system.mapper.engineering.ContractChangeMapper; +import com.ruoyi.system.mapper.engineering.ContractMapper; +import com.ruoyi.system.mapper.engineering.PaymentMapper; +import com.ruoyi.system.service.engineering.IContractService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class ContractServiceImpl implements IContractService { + + @Autowired + private ContractMapper contractMapper; + + @Autowired + private ContractChangeMapper contractChangeMapper; + + @Autowired + private PaymentMapper paymentMapper; + + @Override + public TableDataInfo selectContractList(Contract contract) { + List list = contractMapper.selectContractList(contract); + for (Contract c : list) { + c.setPaidAmount(sumPaymentAmountByContractId(c.getContractId())); + } + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public Map selectContractDetail(Long contractId) { + Map detail = new HashMap<>(); + Contract contract = contractMapper.selectContractById(contractId); + contract.setPaidAmount(sumPaymentAmountByContractId(contractId)); + detail.put("contract", contract); + ContractChange queryChange = new ContractChange(); + queryChange.setContractId(contractId); + detail.put("changes", contractChangeMapper.selectContractChangeList(queryChange)); + detail.put("payments", paymentMapper.selectPaymentByContractId(contractId)); + + Map statistics = new HashMap<>(); + statistics.put("paidAmount", contract.getPaidAmount()); + statistics.put("unpaidAmount", contract.getAmount().subtract(contract.getPaidAmount())); + detail.put("statistics", statistics); + + return detail; + } + + @Override + public Contract selectContractById(Long contractId) { + Contract contract = contractMapper.selectContractById(contractId); + if (contract != null) { + contract.setPaidAmount(sumPaymentAmountByContractId(contractId)); + } + return contract; + } + + @Override + @Transactional + public int insertContract(Contract contract) { + if (StringUtils.isBlank(contract.getStatus())) { + contract.setStatus("pending"); + } + if (contract.getPaidAmount() == null) { + contract.setPaidAmount(BigDecimal.ZERO); + } + return contractMapper.insertContract(contract); + } + + @Override + @Transactional + public int updateContract(Contract contract) { + return contractMapper.updateContract(contract); + } + + @Override + @Transactional + public int deleteContractById(Long contractId) { + if (hasRelatedData(contractId)) { + throw new RuntimeException("该合同存在关联数据(付款记录),无法删除"); + } + contractChangeMapper.deleteContractChangeByContractId(contractId); + return contractMapper.deleteContractById(contractId); + } + + @Override + @Transactional + public int deleteContractByIds(Long[] contractIds) { + for (Long contractId : contractIds) { + deleteContractById(contractId); + } + return contractIds.length; + } + + @Override + public boolean hasRelatedData(Long contractId) { + List payments = (List) paymentMapper.selectPaymentByContractId(contractId); + return payments != null && !payments.isEmpty(); + } + + @Override + @Transactional + public int updateContractStatus(Long contractId, String status) { + return contractMapper.updateContractStatus(contractId, status); + } + + @Override + @Transactional + public int updateContractPaidAmount(Long contractId, BigDecimal paidAmount) { + return contractMapper.updateContractPaidAmount(contractId, paidAmount); + } + + @Override + @Transactional + public int insertContractChange(ContractChange change) { + change.setStatus("pending"); + return contractChangeMapper.insertContractChange(change); + } + + @Override + @Transactional + public int updateContractChange(ContractChange change) { + return contractChangeMapper.updateContractChange(change); + } + + @Override + @Transactional + public int deleteContractChangeById(Long changeId) { + return contractChangeMapper.deleteContractChangeById(changeId); + } + + @Override + public List selectContractChangeList(Long contractId) { + ContractChange change = new ContractChange(); + change.setContractId(contractId); + return contractChangeMapper.selectContractChangeList(change); + } + + @Override + public ContractChange selectContractChangeById(Long changeId) { + return contractChangeMapper.selectContractChangeById(changeId); + } + + @Override + @Transactional + public int approveContractChange(Long changeId, String approvalResult) { + ContractChange change = contractChangeMapper.selectContractChangeById(changeId); + if (change == null) { + throw new RuntimeException("变更记录不存在"); + } + + if ("approved".equals(approvalResult)) { + change.setStatus("approved"); + Contract contract = contractMapper.selectContractById(change.getContractId()); + if (change.getChangeAmount() != null) { + BigDecimal newAmount = contract.getAmount().add(change.getChangeAmount()); + contract.setAmount(newAmount); + } + contractMapper.updateContract(contract); + } else { + change.setStatus("rejected"); + } + return contractChangeMapper.updateContractChange(change); + } + + @Override + public List selectContractOptions() { + return contractMapper.selectContractList(new Contract()); + } + + @Override + public BigDecimal sumContractAmountBySupplierId(Long supplierId) { + BigDecimal sum = contractMapper.sumContractAmountBySupplierId(supplierId); + return sum != null ? sum : BigDecimal.ZERO; + } + + private BigDecimal sumPaymentAmountByContractId(Long contractId) { + BigDecimal sum = paymentMapper.sumPaymentAmountByContractId(contractId); + return sum != null ? sum : BigDecimal.ZERO; + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/MaterialServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/MaterialServiceImpl.java new file mode 100644 index 00000000..55f53f91 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/MaterialServiceImpl.java @@ -0,0 +1,193 @@ +package com.ruoyi.system.service.impl.engineering; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.engineering.Material; +import com.ruoyi.system.domain.engineering.MaterialIn; +import com.ruoyi.system.domain.engineering.MaterialOut; +import com.ruoyi.system.mapper.engineering.MaterialInMapper; +import com.ruoyi.system.mapper.engineering.MaterialMapper; +import com.ruoyi.system.mapper.engineering.MaterialOutMapper; +import com.ruoyi.system.service.engineering.IMaterialService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.List; + +@Service +public class MaterialServiceImpl implements IMaterialService { + + @Autowired + private MaterialMapper materialMapper; + + @Autowired + private MaterialInMapper materialInMapper; + + @Autowired + private MaterialOutMapper materialOutMapper; + + @Override + public TableDataInfo selectMaterialList(Material material) { + List list = materialMapper.selectMaterialList(material); + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public Material selectMaterialById(Long materialId) { + return materialMapper.selectMaterialById(materialId); + } + + @Override + @Transactional + public int insertMaterial(Material material) { + if (material.getStock() == null) { + material.setStock(BigDecimal.ZERO); + } + if (material.getMinStock() == null) { + material.setMinStock(BigDecimal.ZERO); + } + return materialMapper.insertMaterial(material); + } + + @Override + @Transactional + public int updateMaterial(Material material) { + return materialMapper.updateMaterial(material); + } + + @Override + @Transactional + public int deleteMaterialById(Long materialId) { + return materialMapper.deleteMaterialById(materialId); + } + + @Override + @Transactional + public int deleteMaterialByIds(Long[] materialIds) { + for (Long materialId : materialIds) { + materialMapper.deleteMaterialById(materialId); + } + return materialIds.length; + } + + @Override + public List selectMaterialOptions() { + return materialMapper.selectMaterialOptions(); + } + + @Override + @Transactional + public int insertMaterialIn(MaterialIn materialIn) { + if (StringUtils.isBlank(materialIn.getStatus())) { + materialIn.setStatus("pending"); + } + return materialInMapper.insertMaterialIn(materialIn); + } + + @Override + @Transactional + public int updateMaterialIn(MaterialIn materialIn) { + return materialInMapper.updateMaterialIn(materialIn); + } + + @Override + @Transactional + public int approveMaterialIn(Long inId) { + MaterialIn materialIn = materialInMapper.selectMaterialInById(inId); + if (materialIn == null) { + throw new RuntimeException("入库记录不存在"); + } + + materialInMapper.updateMaterialInStatus(inId, "approved"); + + Material material = materialMapper.selectMaterialById(materialIn.getMaterialId()); + if (material != null) { + BigDecimal currentStock = material.getStock() != null ? material.getStock() : BigDecimal.ZERO; + BigDecimal newStock = currentStock.add(materialIn.getQuantity() != null ? materialIn.getQuantity() : BigDecimal.ZERO); + materialMapper.updateMaterialStock(materialIn.getMaterialId(), newStock); + } + return 1; + } + + @Override + @Transactional + public int deleteMaterialInById(Long inId) { + return materialInMapper.deleteMaterialInById(inId); + } + + @Override + public TableDataInfo selectMaterialInList(MaterialIn materialIn) { + List list = materialInMapper.selectMaterialInList(materialIn); + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public MaterialIn selectMaterialInById(Long inId) { + return materialInMapper.selectMaterialInById(inId); + } + + @Override + @Transactional + public int insertMaterialOut(MaterialOut materialOut) { + if (StringUtils.isBlank(materialOut.getStatus())) { + materialOut.setStatus("pending"); + } + return materialOutMapper.insertMaterialOut(materialOut); + } + + @Override + @Transactional + public int updateMaterialOut(MaterialOut materialOut) { + return materialOutMapper.updateMaterialOut(materialOut); + } + + @Override + @Transactional + public int approveMaterialOut(Long outId) { + MaterialOut materialOut = materialOutMapper.selectMaterialOutById(outId); + if (materialOut == null) { + throw new RuntimeException("出库记录不存在"); + } + + Material material = materialMapper.selectMaterialById(materialOut.getMaterialId()); + if (material == null) { + throw new RuntimeException("物料不存在"); + } + + BigDecimal currentStock = material.getStock() != null ? material.getStock() : BigDecimal.ZERO; + BigDecimal outQuantity = materialOut.getQuantity() != null ? materialOut.getQuantity() : BigDecimal.ZERO; + + if (currentStock.compareTo(outQuantity) < 0) { + throw new RuntimeException("库存不足"); + } + + materialOutMapper.updateMaterialOutStatus(outId, "approved"); + + BigDecimal newStock = currentStock.subtract(outQuantity); + materialMapper.updateMaterialStock(materialOut.getMaterialId(), newStock); + return 1; + } + + @Override + @Transactional + public int deleteMaterialOutById(Long outId) { + return materialOutMapper.deleteMaterialOutById(outId); + } + + @Override + public TableDataInfo selectMaterialOutList(MaterialOut materialOut) { + List list = materialOutMapper.selectMaterialOutList(materialOut); + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public MaterialOut selectMaterialOutById(Long outId) { + return materialOutMapper.selectMaterialOutById(outId); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/PaymentServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/PaymentServiceImpl.java new file mode 100644 index 00000000..5c2c3caa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/PaymentServiceImpl.java @@ -0,0 +1,172 @@ +package com.ruoyi.system.service.impl.engineering; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.engineering.Contract; +import com.ruoyi.system.domain.engineering.Payment; +import com.ruoyi.system.domain.engineering.SupplierPaymentRecord; +import com.ruoyi.system.mapper.engineering.ContractMapper; +import com.ruoyi.system.mapper.engineering.PaymentMapper; +import com.ruoyi.system.mapper.engineering.SupplierPaymentRecordMapper; +import com.ruoyi.system.service.engineering.IPaymentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Service +public class PaymentServiceImpl implements IPaymentService { + + @Autowired + private PaymentMapper paymentMapper; + + @Autowired + private ContractMapper contractMapper; + + @Autowired + private SupplierPaymentRecordMapper supplierPaymentRecordMapper; + + @Override + public TableDataInfo selectPaymentList(Payment payment) { + List list = paymentMapper.selectPaymentList(payment); + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public Payment selectPaymentById(Long paymentId) { + return paymentMapper.selectPaymentById(paymentId); + } + + @Override + @Transactional + public int insertPayment(Payment payment) { + if (StringUtils.isBlank(payment.getStatus())) { + payment.setStatus("pending"); + } + + Contract contract = contractMapper.selectContractById(payment.getContractId()); + if (contract == null) { + throw new RuntimeException("合同不存在"); + } + + BigDecimal maxPayable = contract.getAmount().subtract(contract.getPaidAmount()); + if (payment.getAmount().compareTo(maxPayable) > 0) { + throw new RuntimeException("付款金额超过合同未付金额"); + } + + return paymentMapper.insertPayment(payment); + } + + @Override + @Transactional + public int updatePayment(Payment payment) { + return paymentMapper.updatePayment(payment); + } + + @Override + @Transactional + public int deletePaymentById(Long paymentId) { + Payment payment = paymentMapper.selectPaymentById(paymentId); + if (payment != null && "paid".equals(payment.getStatus())) { + throw new RuntimeException("已付款的记录无法删除"); + } + return paymentMapper.deletePaymentById(paymentId); + } + + @Override + @Transactional + public int deletePaymentByIds(Long[] paymentIds) { + for (Long paymentId : paymentIds) { + deletePaymentById(paymentId); + } + return paymentIds.length; + } + + @Override + @Transactional + public int approvePayment(Long paymentId) { + Payment payment = paymentMapper.selectPaymentById(paymentId); + if (payment == null) { + throw new RuntimeException("付款记录不存在"); + } + + Contract contract = contractMapper.selectContractById(payment.getContractId()); + if (contract == null) { + throw new RuntimeException("合同不存在"); + } + + BigDecimal maxPayable = contract.getAmount().subtract(contract.getPaidAmount()); + if (payment.getAmount().compareTo(maxPayable) > 0) { + throw new RuntimeException("付款金额超过合同未付金额"); + } + + paymentMapper.updatePaymentStatus(paymentId, "approved"); + return 1; + } + + @Override + @Transactional + public int rejectPayment(Long paymentId) { + Payment payment = paymentMapper.selectPaymentById(paymentId); + if (payment == null) { + throw new RuntimeException("付款记录不存在"); + } + return paymentMapper.updatePaymentStatus(paymentId, "rejected"); + } + + @Override + @Transactional + public int processPayment(Long paymentId) { + Payment payment = paymentMapper.selectPaymentById(paymentId); + if (payment == null) { + throw new RuntimeException("付款记录不存在"); + } + + if (!"approved".equals(payment.getStatus())) { + throw new RuntimeException("付款记录未通过审批"); + } + + paymentMapper.updatePaymentStatus(paymentId, "paid"); + payment.setPaymentDate(new Date()); + paymentMapper.updatePayment(payment); + + Contract contract = contractMapper.selectContractById(payment.getContractId()); + BigDecimal newPaidAmount = contract.getPaidAmount().add(payment.getAmount()); + contractMapper.updateContractPaidAmount(payment.getContractId(), newPaidAmount); + + SupplierPaymentRecord record = new SupplierPaymentRecord(); + record.setSupplierId(contract.getSupplierId()); + record.setPaymentId(payment.getPaymentId()); + record.setAmount(payment.getAmount()); + record.setPaymentDate(payment.getPaymentDate()); + record.setContractId(payment.getContractId()); + record.setPaymentType(payment.getPaymentType()); + supplierPaymentRecordMapper.insertSupplierPaymentRecord(record); + + return 1; + } + + @Override + public BigDecimal sumPaymentAmountByContractId(Long contractId) { + BigDecimal sum = paymentMapper.sumPaymentAmountByContractId(contractId); + return sum != null ? sum : BigDecimal.ZERO; + } + + @Override + public BigDecimal sumPaymentAmountBySupplierId(Long supplierId) { + BigDecimal sum = paymentMapper.sumPaymentAmountBySupplierId(supplierId); + return sum != null ? sum : BigDecimal.ZERO; + } + + @Override + public List selectPaymentByContractId(Long contractId) { + Payment payment = new Payment(); + payment.setContractId(contractId); + return paymentMapper.selectPaymentList(payment); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/SupplierServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/SupplierServiceImpl.java new file mode 100644 index 00000000..35e3e9ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/engineering/SupplierServiceImpl.java @@ -0,0 +1,222 @@ +package com.ruoyi.system.service.impl.engineering; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.engineering.Contract; +import com.ruoyi.system.domain.engineering.Supplier; +import com.ruoyi.system.domain.engineering.SupplierAccount; +import com.ruoyi.system.domain.engineering.SupplierPaymentRecord; +import com.ruoyi.system.mapper.engineering.ContractMapper; +import com.ruoyi.system.mapper.engineering.SupplierAccountMapper; +import com.ruoyi.system.mapper.engineering.SupplierMapper; +import com.ruoyi.system.mapper.engineering.SupplierPaymentRecordMapper; +import com.ruoyi.system.service.engineering.ISupplierService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class SupplierServiceImpl implements ISupplierService { + + @Autowired + private SupplierMapper supplierMapper; + + @Autowired + private SupplierAccountMapper supplierAccountMapper; + + @Autowired + private SupplierPaymentRecordMapper supplierPaymentRecordMapper; + + @Autowired + private ContractMapper contractMapper; + + @Override + public TableDataInfo selectSupplierList(Supplier supplier) { + List list = supplierMapper.selectSupplierList(supplier); + for (Supplier s : list) { + s.setTotalContractAmount(sumContractAmount(s.getSupplierId())); + s.setTotalPaymentAmount(sumPaymentAmount(s.getSupplierId())); + } + long total = PageHelper.getLocalPage().getTotal(); + return TableDataInfo.build(list, total); + } + + @Override + public Map selectSupplierDetail(Long supplierId) { + Map detail = new HashMap<>(); + Supplier supplier = supplierMapper.selectSupplierById(supplierId); + supplier.setTotalContractAmount(sumContractAmount(supplierId)); + supplier.setTotalPaymentAmount(sumPaymentAmount(supplierId)); + detail.put("supplier", supplier); + detail.put("accounts", supplierAccountMapper.selectSupplierAccountBySupplierId(supplierId)); + detail.put("paymentRecords", supplierPaymentRecordMapper.selectSupplierPaymentRecordBySupplierId(supplierId)); + detail.put("contracts", contractMapper.selectContractBySupplierId(supplierId)); + + Map statistics = new HashMap<>(); + statistics.put("totalPayment", sumPaymentAmount(supplierId)); + statistics.put("totalContractAmount", sumContractAmount(supplierId)); + statistics.put("unpaidAmount", sumContractAmount(supplierId).subtract(sumPaymentAmount(supplierId))); + detail.put("statistics", statistics); + + return detail; + } + + @Override + public Supplier selectSupplierById(Long supplierId) { + return supplierMapper.selectSupplierById(supplierId); + } + + @Override + @Transactional + public int insertSupplier(Supplier supplier) { + if (StringUtils.isBlank(supplier.getStatus())) { + supplier.setStatus("normal"); + } + if (StringUtils.isBlank(supplier.getCooperationStatus())) { + supplier.setCooperationStatus("cooperating"); + } + if (supplier.getTotalContractAmount() == null) { + supplier.setTotalContractAmount(BigDecimal.ZERO); + } + if (supplier.getTotalPaymentAmount() == null) { + supplier.setTotalPaymentAmount(BigDecimal.ZERO); + } + return supplierMapper.insertSupplier(supplier); + } + + @Override + @Transactional + public int updateSupplier(Supplier supplier) { + return supplierMapper.updateSupplier(supplier); + } + + @Override + @Transactional + public int deleteSupplierById(Long supplierId) { + if (hasRelatedData(supplierId)) { + throw new RuntimeException("该供应商存在关联数据(合同/付款),无法删除"); + } + supplierAccountMapper.deleteSupplierAccountBySupplierId(supplierId); + supplierPaymentRecordMapper.deleteSupplierPaymentRecordBySupplierId(supplierId); + return supplierMapper.deleteSupplierById(supplierId); + } + + @Override + @Transactional + public int deleteSupplierByIds(Long[] supplierIds) { + for (Long supplierId : supplierIds) { + deleteSupplierById(supplierId); + } + return supplierIds.length; + } + + @Override + public boolean hasRelatedData(Long supplierId) { + return !contractMapper.selectContractBySupplierId(supplierId).isEmpty(); + } + + @Override + @Transactional + public int insertSupplierAccount(SupplierAccount account) { + if ("1".equals(account.getIsDefault())) { + List accounts = supplierAccountMapper.selectSupplierAccountBySupplierId(account.getSupplierId()); + for (SupplierAccount acc : accounts) { + if ("1".equals(acc.getIsDefault())) { + acc.setIsDefault("0"); + supplierAccountMapper.updateSupplierAccount(acc); + } + } + } + if (StringUtils.isBlank(account.getCurrency())) { + account.setCurrency("CNY"); + } + return supplierAccountMapper.insertSupplierAccount(account); + } + + @Override + @Transactional + public int updateSupplierAccount(SupplierAccount account) { + if ("1".equals(account.getIsDefault())) { + List accounts = supplierAccountMapper.selectSupplierAccountBySupplierId(account.getSupplierId()); + for (SupplierAccount acc : accounts) { + if (!acc.getAccountId().equals(account.getAccountId()) && "1".equals(acc.getIsDefault())) { + acc.setIsDefault("0"); + supplierAccountMapper.updateSupplierAccount(acc); + } + } + } + return supplierAccountMapper.updateSupplierAccount(account); + } + + @Override + @Transactional + public int deleteSupplierAccountById(Long accountId) { + return supplierAccountMapper.deleteSupplierAccountById(accountId); + } + + @Override + public List selectSupplierAccountList(Long supplierId) { + return supplierAccountMapper.selectSupplierAccountBySupplierId(supplierId); + } + + @Override + public List selectSupplierPaymentRecordList(Long supplierId) { + return supplierPaymentRecordMapper.selectSupplierPaymentRecordBySupplierId(supplierId); + } + + @Override + public BigDecimal sumPaymentAmount(Long supplierId) { + BigDecimal sum = supplierPaymentRecordMapper.sumPaymentAmountBySupplierId(supplierId); + return sum != null ? sum : BigDecimal.ZERO; + } + + @Override + public BigDecimal sumContractAmount(Long supplierId) { + BigDecimal sum = contractMapper.sumContractAmountBySupplierId(supplierId); + return sum != null ? sum : BigDecimal.ZERO; + } + + @Override + public boolean isBlacklisted(Long supplierId) { + Supplier supplier = supplierMapper.selectSupplierById(supplierId); + return supplier != null && "blacklist".equals(supplier.getStatus()); + } + + @Override + public boolean canCreateContract(Long supplierId) { + Supplier supplier = supplierMapper.selectSupplierById(supplierId); + if (supplier == null) { + return false; + } + return !"blacklist".equals(supplier.getStatus()) && !"terminated".equals(supplier.getCooperationStatus()); + } + + @Override + public boolean canMakePayment(Long supplierId) { + Supplier supplier = supplierMapper.selectSupplierById(supplierId); + return supplier != null && !"blacklist".equals(supplier.getStatus()); + } + + @Override + @Transactional + public int updateSupplierStatus(Long supplierId, String status) { + return supplierMapper.updateSupplierStatus(supplierId, status); + } + + @Override + @Transactional + public int updateSupplierAmount(Long supplierId, BigDecimal totalContractAmount, BigDecimal totalPaymentAmount) { + return supplierMapper.updateSupplierAmount(supplierId, totalContractAmount, totalPaymentAmount); + } + + @Override + public List selectSupplierOptions(String status) { + return supplierMapper.selectSupplierOptions(status); + } +} \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/ConstructionMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/ConstructionMapper.xml new file mode 100644 index 00000000..52ac34f5 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/ConstructionMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT construction_id, contract_id, parent_id, node_name, node_code, node_level, + progress, status, plan_start_date, plan_end_date, actual_start_date, actual_end_date, + acceptance_status, acceptance_result, acceptance_date, acceptance_remark, + sort_order, remark, create_by, create_time, update_by, update_time + FROM engineering_construction + + + + + + + + + + INSERT INTO engineering_construction ( + contract_id, parent_id, node_name, node_code, node_level, progress, status, + plan_start_date, plan_end_date, actual_start_date, actual_end_date, + acceptance_status, acceptance_result, acceptance_date, acceptance_remark, + sort_order, remark, create_by, create_time, update_by, update_time + ) VALUES ( + #{contractId}, #{parentId}, #{nodeName}, #{nodeCode}, #{nodeLevel}, #{progress}, #{status}, + #{planStartDate}, #{planEndDate}, #{actualStartDate}, #{actualEndDate}, + #{acceptanceStatus}, #{acceptanceResult}, #{acceptanceDate}, #{acceptanceRemark}, + #{sortOrder}, #{remark}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_construction + SET contract_id = #{contractId}, + parent_id = #{parentId}, + node_name = #{nodeName}, + node_code = #{nodeCode}, + node_level = #{nodeLevel}, + progress = #{progress}, + status = #{status}, + plan_start_date = #{planStartDate}, + plan_end_date = #{planEndDate}, + actual_start_date = #{actualStartDate}, + actual_end_date = #{actualEndDate}, + acceptance_status = #{acceptanceStatus}, + acceptance_result = #{acceptanceResult}, + acceptance_date = #{acceptanceDate}, + acceptance_remark = #{acceptanceRemark}, + sort_order = #{sortOrder}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE construction_id = #{constructionId} + + + + UPDATE engineering_construction + SET progress = #{progress} + WHERE construction_id = #{constructionId} + + + + UPDATE engineering_construction + SET acceptance_status = #{acceptanceStatus}, + acceptance_result = #{acceptanceResult}, + acceptance_date = #{acceptanceDate}, + acceptance_remark = #{acceptanceRemark} + WHERE construction_id = #{constructionId} + + + + DELETE FROM engineering_construction WHERE construction_id = #{constructionId} + + + + DELETE FROM engineering_construction WHERE construction_id IN + + #{constructionId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/ContractChangeMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/ContractChangeMapper.xml new file mode 100644 index 00000000..f8dba6e5 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/ContractChangeMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + SELECT change_id, contract_id, change_type, contract_name, contract_type, amount, + sign_date, start_date, end_date, reason, status, approval_remark, + create_by, create_time, update_time + FROM engineering_contract_change + + + + + + + + INSERT INTO engineering_contract_change ( + contract_id, change_type, contract_name, contract_type, amount, + sign_date, start_date, end_date, reason, status, approval_remark, + create_by, create_time, update_time + ) VALUES ( + #{contractId}, #{changeType}, #{contractName}, #{contractType}, #{amount}, + #{signDate}, #{startDate}, #{endDate}, #{reason}, #{status}, #{approvalRemark}, + #{createBy}, #{createTime}, #{updateTime} + ) + + + + UPDATE engineering_contract_change + SET change_type = #{changeType}, + contract_name = #{contractName}, + contract_type = #{contractType}, + amount = #{amount}, + sign_date = #{signDate}, + start_date = #{startDate}, + end_date = #{endDate}, + reason = #{reason}, + status = #{status}, + approval_remark = #{approvalRemark}, + update_time = #{updateTime} + WHERE change_id = #{changeId} + + + + DELETE FROM engineering_contract_change WHERE change_id = #{changeId} + + + + DELETE FROM engineering_contract_change WHERE contract_id = #{contractId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/ContractMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/ContractMapper.xml new file mode 100644 index 00000000..fa0f4a70 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/ContractMapper.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT contract_id, contract_no, contract_name, contract_type, supplier_id, amount, + paid_amount, sign_date, start_date, end_date, status, contract_file, remark, + create_by, create_time, update_by, update_time + FROM engineering_contract + + + + + + + + + + + + INSERT INTO engineering_contract ( + contract_no, contract_name, contract_type, supplier_id, amount, paid_amount, + sign_date, start_date, end_date, status, contract_file, remark, + create_by, create_time, update_by, update_time + ) VALUES ( + #{contractNo}, #{contractName}, #{contractType}, #{supplierId}, #{amount}, #{paidAmount}, + #{signDate}, #{startDate}, #{endDate}, #{status}, #{contractFile}, #{remark}, + #{createBy}, #{createTime}, #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_contract + SET contract_no = #{contractNo}, + contract_name = #{contractName}, + contract_type = #{contractType}, + supplier_id = #{supplierId}, + amount = #{amount}, + paid_amount = #{paidAmount}, + sign_date = #{signDate}, + start_date = #{startDate}, + end_date = #{endDate}, + status = #{status}, + contract_file = #{contractFile}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE contract_id = #{contractId} + + + + UPDATE engineering_contract + SET status = #{status} + WHERE contract_id = #{contractId} + + + + UPDATE engineering_contract + SET paid_amount = #{paidAmount} + WHERE contract_id = #{contractId} + + + + DELETE FROM engineering_contract WHERE contract_id = #{contractId} + + + + DELETE FROM engineering_contract WHERE contract_id IN + + #{contractId} + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/MaterialInMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/MaterialInMapper.xml new file mode 100644 index 00000000..11f44a48 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/MaterialInMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + SELECT in_id, material_id, quantity, price, total_amount, in_date, supplier_id, + batch_no, expiry_date, location, status, remark, create_by, create_time, + update_by, update_time + FROM engineering_material_in + + + + + + + + INSERT INTO engineering_material_in ( + material_id, quantity, price, total_amount, in_date, supplier_id, + batch_no, expiry_date, location, status, remark, create_by, create_time, + update_by, update_time + ) VALUES ( + #{materialId}, #{quantity}, #{price}, #{totalAmount}, #{inDate}, #{supplierId}, + #{batchNo}, #{expiryDate}, #{location}, #{status}, #{remark}, #{createBy}, #{createTime}, + #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_material_in + SET material_id = #{materialId}, + quantity = #{quantity}, + price = #{price}, + total_amount = #{totalAmount}, + in_date = #{inDate}, + supplier_id = #{supplierId}, + batch_no = #{batchNo}, + expiry_date = #{expiryDate}, + location = #{location}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE in_id = #{inId} + + + + UPDATE engineering_material_in + SET status = #{status} + WHERE in_id = #{inId} + + + + DELETE FROM engineering_material_in WHERE in_id = #{inId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/MaterialMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/MaterialMapper.xml new file mode 100644 index 00000000..1cf6f5f8 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/MaterialMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + SELECT material_id, material_code, material_name, specification, unit, stock, + min_stock, category, location, status, remark, create_by, create_time, + update_by, update_time + FROM engineering_material + + + + + + + + + + INSERT INTO engineering_material ( + material_code, material_name, specification, unit, stock, min_stock, + category, location, status, remark, create_by, create_time, + update_by, update_time + ) VALUES ( + #{materialCode}, #{materialName}, #{specification}, #{unit}, #{stock}, #{minStock}, + #{category}, #{location}, #{status}, #{remark}, #{createBy}, #{createTime}, + #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_material + SET material_code = #{materialCode}, + material_name = #{materialName}, + specification = #{specification}, + unit = #{unit}, + stock = #{stock}, + min_stock = #{minStock}, + category = #{category}, + location = #{location}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE material_id = #{materialId} + + + + UPDATE engineering_material + SET stock = #{quantity} + WHERE material_id = #{materialId} + + + + DELETE FROM engineering_material WHERE material_id = #{materialId} + + + + DELETE FROM engineering_material WHERE material_id IN + + #{materialId} + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/MaterialOutMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/MaterialOutMapper.xml new file mode 100644 index 00000000..99f56e04 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/MaterialOutMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + SELECT out_id, material_id, quantity, price, total_amount, out_date, contract_id, + construction_id, use_purpose, status, remark, create_by, create_time, + update_by, update_time + FROM engineering_material_out + + + + + + + + INSERT INTO engineering_material_out ( + material_id, quantity, price, total_amount, out_date, contract_id, + construction_id, use_purpose, status, remark, create_by, create_time, + update_by, update_time + ) VALUES ( + #{materialId}, #{quantity}, #{price}, #{totalAmount}, #{outDate}, #{contractId}, + #{constructionId}, #{usePurpose}, #{status}, #{remark}, #{createBy}, #{createTime}, + #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_material_out + SET material_id = #{materialId}, + quantity = #{quantity}, + price = #{price}, + total_amount = #{totalAmount}, + out_date = #{outDate}, + contract_id = #{contractId}, + construction_id = #{constructionId}, + use_purpose = #{usePurpose}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE out_id = #{outId} + + + + UPDATE engineering_material_out + SET status = #{status} + WHERE out_id = #{outId} + + + + DELETE FROM engineering_material_out WHERE out_id = #{outId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/PaymentMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/PaymentMapper.xml new file mode 100644 index 00000000..9f0fb074 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/PaymentMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + SELECT payment_id, contract_id, supplier_id, amount, payment_date, payment_type, + payment_method, bank_account, status, remark, create_by, create_time, + update_by, update_time + FROM engineering_payment + + + + + + + + INSERT INTO engineering_payment ( + contract_id, supplier_id, amount, payment_date, payment_type, + payment_method, bank_account, status, remark, create_by, create_time, + update_by, update_time + ) VALUES ( + #{contractId}, #{supplierId}, #{amount}, #{paymentDate}, #{paymentType}, + #{paymentMethod}, #{bankAccount}, #{status}, #{remark}, #{createBy}, #{createTime}, + #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_payment + SET contract_id = #{contractId}, + supplier_id = #{supplierId}, + amount = #{amount}, + payment_date = #{paymentDate}, + payment_type = #{paymentType}, + payment_method = #{paymentMethod}, + bank_account = #{bankAccount}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE payment_id = #{paymentId} + + + + UPDATE engineering_payment + SET status = #{status} + WHERE payment_id = #{paymentId} + + + + DELETE FROM engineering_payment WHERE payment_id = #{paymentId} + + + + DELETE FROM engineering_payment WHERE payment_id IN + + #{paymentId} + + + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/SupplierAccountMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/SupplierAccountMapper.xml new file mode 100644 index 00000000..3d78c279 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/SupplierAccountMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + SELECT account_id, supplier_id, bank_name, account_no, account_name, currency, + is_default, remark, create_by, create_time, update_by, update_time + FROM engineering_supplier_account + + + + + + + + + + INSERT INTO engineering_supplier_account ( + supplier_id, bank_name, account_no, account_name, currency, is_default, remark, + create_by, create_time, update_by, update_time + ) VALUES ( + #{supplierId}, #{bankName}, #{accountNo}, #{accountName}, #{currency}, #{isDefault}, #{remark}, + #{createBy}, #{createTime}, #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_supplier_account + SET bank_name = #{bankName}, + account_no = #{accountNo}, + account_name = #{accountName}, + currency = #{currency}, + is_default = #{isDefault}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE account_id = #{accountId} + + + + DELETE FROM engineering_supplier_account WHERE account_id = #{accountId} + + + + DELETE FROM engineering_supplier_account WHERE supplier_id = #{supplierId} + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/SupplierMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/SupplierMapper.xml new file mode 100644 index 00000000..8e8a09d4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/SupplierMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT supplier_id, supplier_code, supplier_name, short_name, contact_person, contact_phone, + email, address, business_scope, qualification, register_capital, establish_date, + status, cooperation_status, total_contract_amount, total_payment_amount, remark, + create_by, create_time, update_by, update_time + FROM engineering_supplier + + + + + + + + + + INSERT INTO engineering_supplier ( + supplier_code, supplier_name, short_name, contact_person, contact_phone, email, + address, business_scope, qualification, register_capital, establish_date, + status, cooperation_status, total_contract_amount, total_payment_amount, remark, + create_by, create_time, update_by, update_time + ) VALUES ( + #{supplierCode}, #{supplierName}, #{shortName}, #{contactPerson}, #{contactPhone}, #{email}, + #{address}, #{businessScope}, #{qualification}, #{registerCapital}, #{establishDate}, + #{status}, #{cooperationStatus}, #{totalContractAmount}, #{totalPaymentAmount}, #{remark}, + #{createBy}, #{createTime}, #{updateBy}, #{updateTime} + ) + + + + UPDATE engineering_supplier + SET supplier_code = #{supplierCode}, + supplier_name = #{supplierName}, + short_name = #{shortName}, + contact_person = #{contactPerson}, + contact_phone = #{contactPhone}, + email = #{email}, + address = #{address}, + business_scope = #{businessScope}, + qualification = #{qualification}, + register_capital = #{registerCapital}, + establish_date = #{establishDate}, + status = #{status}, + cooperation_status = #{cooperationStatus}, + total_contract_amount = #{totalContractAmount}, + total_payment_amount = #{totalPaymentAmount}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE supplier_id = #{supplierId} + + + + UPDATE engineering_supplier + SET status = #{status} + WHERE supplier_id = #{supplierId} + + + + UPDATE engineering_supplier + SET total_contract_amount = #{totalContractAmount}, + total_payment_amount = #{totalPaymentAmount} + WHERE supplier_id = #{supplierId} + + + + DELETE FROM engineering_supplier WHERE supplier_id = #{supplierId} + + + + DELETE FROM engineering_supplier WHERE supplier_id IN + + #{supplierId} + + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/engineering/SupplierPaymentRecordMapper.xml b/ruoyi-system/src/main/resources/mapper/engineering/SupplierPaymentRecordMapper.xml new file mode 100644 index 00000000..a640b080 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/engineering/SupplierPaymentRecordMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + SELECT record_id, supplier_id, payment_id, amount, payment_date, contract_id, + payment_type, remark, create_by, create_time + FROM engineering_supplier_payment_record + + + + + + + + + + INSERT INTO engineering_supplier_payment_record ( + supplier_id, payment_id, amount, payment_date, contract_id, payment_type, remark, + create_by, create_time + ) VALUES ( + #{supplierId}, #{paymentId}, #{amount}, #{paymentDate}, #{contractId}, #{paymentType}, #{remark}, + #{createBy}, #{createTime} + ) + + + + DELETE FROM engineering_supplier_payment_record WHERE record_id = #{recordId} + + + + DELETE FROM engineering_supplier_payment_record WHERE supplier_id = #{supplierId} + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/api/engineering/construction.js b/ruoyi-ui/src/api/engineering/construction.js new file mode 100644 index 00000000..ef7980b6 --- /dev/null +++ b/ruoyi-ui/src/api/engineering/construction.js @@ -0,0 +1,77 @@ +import request from '@/utils/request' + +export function listConstruction(query) { + return request({ + url: '/system/engineering/construction/list', + method: 'get', + params: query + }) +} + +export function getConstructionTree(query) { + return request({ + url: '/system/engineering/construction/tree', + method: 'get', + params: query + }) +} + +export function getConstruction(constructionId) { + return request({ + url: '/system/engineering/construction/' + constructionId, + method: 'get' + }) +} + +export function addConstruction(data) { + return request({ + url: '/system/engineering/construction', + method: 'post', + data: data + }) +} + +export function updateConstruction(data) { + return request({ + url: '/system/engineering/construction', + method: 'put', + data: data + }) +} + +export function delConstruction(constructionIds) { + return request({ + url: '/system/engineering/construction/' + constructionIds, + method: 'delete' + }) +} + +export function updateProgress(constructionId, progress) { + return request({ + url: '/system/engineering/construction/progress/' + constructionId + '?progress=' + progress, + method: 'put' + }) +} + +export function submitAcceptance(constructionId, remark) { + return request({ + url: '/system/engineering/construction/acceptance/submit/' + constructionId, + method: 'put', + data: remark ? { remark } : {} + }) +} + +export function approveAcceptance(constructionId, data) { + return request({ + url: '/system/engineering/construction/acceptance/approve/' + constructionId, + method: 'put', + data: data + }) +} + +export function getConstructionStatistics(contractId) { + return request({ + url: '/system/engineering/construction/statistics/' + contractId, + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/engineering/contract.js b/ruoyi-ui/src/api/engineering/contract.js new file mode 100644 index 00000000..75098ef3 --- /dev/null +++ b/ruoyi-ui/src/api/engineering/contract.js @@ -0,0 +1,97 @@ +import request from '@/utils/request' + +export function listContract(query) { + return request({ + url: '/system/engineering/contract/list', + method: 'get', + params: query + }) +} + +export function getContract(contractId) { + return request({ + url: '/system/engineering/contract/' + contractId, + method: 'get' + }) +} + +export function addContract(data) { + return request({ + url: '/system/engineering/contract', + method: 'post', + data: data + }) +} + +export function updateContract(data) { + return request({ + url: '/system/engineering/contract', + method: 'put', + data: data + }) +} + +export function delContract(contractIds) { + return request({ + url: '/system/engineering/contract/' + contractIds, + method: 'delete' + }) +} + +export function updateContractStatus(contractId, status) { + return request({ + url: '/system/engineering/contract/status/' + contractId + '/' + status, + method: 'put' + }) +} + +export function getContractOptions() { + return request({ + url: '/system/engineering/contract/options', + method: 'get' + }) +} + +export function getContractDetail(contractId) { + return request({ + url: '/system/engineering/contract/detail/' + contractId, + method: 'get' + }) +} + +export function addContractChange(data) { + return request({ + url: '/system/engineering/contract/change', + method: 'post', + data: data + }) +} + +export function updateContractChange(data) { + return request({ + url: '/system/engineering/contract/change', + method: 'put', + data: data + }) +} + +export function delContractChange(changeId) { + return request({ + url: '/system/engineering/contract/change/' + changeId, + method: 'delete' + }) +} + +export function getContractChanges(contractId) { + return request({ + url: '/system/engineering/contract/changes/' + contractId, + method: 'get' + }) +} + +export function approveContractChange(changeId, approvalResult) { + return request({ + url: '/system/engineering/contract/change/approve/' + changeId + '?approvalResult=' + approvalResult, + method: 'put' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/engineering/material.js b/ruoyi-ui/src/api/engineering/material.js new file mode 100644 index 00000000..6348e7b8 --- /dev/null +++ b/ruoyi-ui/src/api/engineering/material.js @@ -0,0 +1,136 @@ +import request from '@/utils/request' + +export function listMaterial(query) { + return request({ + url: '/system/engineering/material/list', + method: 'get', + params: query + }) +} + +export function getMaterial(materialId) { + return request({ + url: '/system/engineering/material/' + materialId, + method: 'get' + }) +} + +export function addMaterial(data) { + return request({ + url: '/system/engineering/material', + method: 'post', + data: data + }) +} + +export function updateMaterial(data) { + return request({ + url: '/system/engineering/material', + method: 'put', + data: data + }) +} + +export function delMaterial(materialIds) { + return request({ + url: '/system/engineering/material/' + materialIds, + method: 'delete' + }) +} + +export function getMaterialOptions() { + return request({ + url: '/system/engineering/material/options', + method: 'get' + }) +} + +export function listMaterialIn(query) { + return request({ + url: '/system/engineering/material/in/list', + method: 'get', + params: query + }) +} + +export function getMaterialIn(inId) { + return request({ + url: '/system/engineering/material/in/' + inId, + method: 'get' + }) +} + +export function addMaterialIn(data) { + return request({ + url: '/system/engineering/material/in', + method: 'post', + data: data + }) +} + +export function updateMaterialIn(data) { + return request({ + url: '/system/engineering/material/in', + method: 'put', + data: data + }) +} + +export function approveMaterialIn(inId) { + return request({ + url: '/system/engineering/material/in/approve/' + inId, + method: 'put' + }) +} + +export function delMaterialIn(inId) { + return request({ + url: '/system/engineering/material/in/' + inId, + method: 'delete' + }) +} + +export function listMaterialOut(query) { + return request({ + url: '/system/engineering/material/out/list', + method: 'get', + params: query + }) +} + +export function getMaterialOut(outId) { + return request({ + url: '/system/engineering/material/out/' + outId, + method: 'get' + }) +} + +export function addMaterialOut(data) { + return request({ + url: '/system/engineering/material/out', + method: 'post', + data: data + }) +} + +export function updateMaterialOut(data) { + return request({ + url: '/system/engineering/material/out', + method: 'put', + data: data + }) +} + +export function approveMaterialOut(outId) { + return request({ + url: '/system/engineering/material/out/approve/' + outId, + method: 'put' + }) +} + +export function delMaterialOut(outId) { + return request({ + url: '/system/engineering/material/out/' + outId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/engineering/payment.js b/ruoyi-ui/src/api/engineering/payment.js new file mode 100644 index 00000000..a26f9596 --- /dev/null +++ b/ruoyi-ui/src/api/engineering/payment.js @@ -0,0 +1,67 @@ +import request from '@/utils/request' + +export function listPayment(query) { + return request({ + url: '/system/engineering/payment/list', + method: 'get', + params: query + }) +} + +export function getPayment(paymentId) { + return request({ + url: '/system/engineering/payment/' + paymentId, + method: 'get' + }) +} + +export function addPayment(data) { + return request({ + url: '/system/engineering/payment', + method: 'post', + data: data + }) +} + +export function updatePayment(data) { + return request({ + url: '/system/engineering/payment', + method: 'put', + data: data + }) +} + +export function delPayment(paymentIds) { + return request({ + url: '/system/engineering/payment/' + paymentIds, + method: 'delete' + }) +} + +export function approvePayment(paymentId) { + return request({ + url: '/system/engineering/payment/approve/' + paymentId, + method: 'put' + }) +} + +export function rejectPayment(paymentId) { + return request({ + url: '/system/engineering/payment/reject/' + paymentId, + method: 'put' + }) +} + +export function processPayment(paymentId) { + return request({ + url: '/system/engineering/payment/process/' + paymentId, + method: 'put' + }) +} + +export function getPaymentsByContract(contractId) { + return request({ + url: '/system/engineering/payment/contract/' + contractId, + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/engineering/supplier.js b/ruoyi-ui/src/api/engineering/supplier.js new file mode 100644 index 00000000..c88f5a77 --- /dev/null +++ b/ruoyi-ui/src/api/engineering/supplier.js @@ -0,0 +1,99 @@ +import request from '@/utils/request' + +export function listSupplier(query) { + return request({ + url: '/system/engineering/supplier/list', + method: 'get', + params: query + }) +} + +export function getSupplier(supplierId) { + return request({ + url: '/system/engineering/supplier/' + supplierId, + method: 'get' + }) +} + +export function addSupplier(data) { + return request({ + url: '/system/engineering/supplier', + method: 'post', + data: data + }) +} + +export function updateSupplier(data) { + return request({ + url: '/system/engineering/supplier', + method: 'put', + data: data + }) +} + +export function delSupplier(supplierIds) { + return request({ + url: '/system/engineering/supplier/' + supplierIds, + method: 'delete' + }) +} + +export function updateSupplierStatus(supplierId, status) { + return request({ + url: '/system/engineering/supplier/status/' + supplierId + '/' + status, + method: 'put' + }) +} + +export function getSupplierOptions(status) { + const params = status ? { status } : {} + return request({ + url: '/system/engineering/supplier/options', + method: 'get', + params: params + }) +} + +export function getSupplierDetail(supplierId) { + return request({ + url: '/system/engineering/supplier/detail/' + supplierId, + method: 'get' + }) +} + +export function addSupplierAccount(data) { + return request({ + url: '/system/engineering/supplier/account', + method: 'post', + data: data + }) +} + +export function updateSupplierAccount(data) { + return request({ + url: '/system/engineering/supplier/account', + method: 'put', + data: data + }) +} + +export function delSupplierAccount(accountId) { + return request({ + url: '/system/engineering/supplier/account/' + accountId, + method: 'delete' + }) +} + +export function getSupplierAccounts(supplierId) { + return request({ + url: '/system/engineering/supplier/accounts/' + supplierId, + method: 'get' + }) +} + +export function getSupplierPaymentRecords(supplierId) { + return request({ + url: '/system/engineering/supplier/payment-records/' + supplierId, + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/example.svg b/ruoyi-ui/src/assets/icons/svg/example.svg deleted file mode 100644 index 46f42b53..00000000 --- a/ruoyi-ui/src/assets/icons/svg/example.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 2dd6e790..92358034 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -96,6 +96,48 @@ export const constantRoutes = [ } ] +export const engineeringRoutes = [ + { + path: '/engineering', + component: Layout, + redirect: '/engineering/supplier', + name: 'Engineering', + meta: { title: '工程管理', icon: 'build', permission: 'system:engineering' }, + children: [ + { + path: 'supplier', + component: () => import('@/views/engineering/supplier/index'), + name: 'Supplier', + meta: { title: '供应商管理', icon: 'people', permission: 'system:engineering:supplier' } + }, + { + path: 'contract', + component: () => import('@/views/engineering/contract/index'), + name: 'Contract', + meta: { title: '合同管理', icon: 'file-text', permission: 'system:engineering:contract' } + }, + { + path: 'construction', + component: () => import('@/views/engineering/construction/index'), + name: 'Construction', + meta: { title: '施工进度管理', icon: 'tree-table', permission: 'system:engineering:construction' } + }, + { + path: 'material', + component: () => import('@/views/engineering/material/index'), + name: 'Material', + meta: { title: '物料管理', icon: 'shopping', permission: 'system:engineering:material' } + }, + { + path: 'payment', + component: () => import('@/views/engineering/payment/index'), + name: 'Payment', + meta: { title: '付款管理', icon: 'money', permission: 'system:engineering:payment' } + } + ] + } +] + // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { diff --git a/ruoyi-ui/src/views/engineering/construction/AcceptanceDialog.vue b/ruoyi-ui/src/views/engineering/construction/AcceptanceDialog.vue new file mode 100644 index 00000000..fe94a227 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/construction/AcceptanceDialog.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/construction/ConstructionAddOrEdit.vue b/ruoyi-ui/src/views/engineering/construction/ConstructionAddOrEdit.vue new file mode 100644 index 00000000..8ae9a308 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/construction/ConstructionAddOrEdit.vue @@ -0,0 +1,137 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/construction/index.vue b/ruoyi-ui/src/views/engineering/construction/index.vue new file mode 100644 index 00000000..ecaca26c --- /dev/null +++ b/ruoyi-ui/src/views/engineering/construction/index.vue @@ -0,0 +1,175 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/contract/ContractAddOrEdit.vue b/ruoyi-ui/src/views/engineering/contract/ContractAddOrEdit.vue new file mode 100644 index 00000000..b63d4f1a --- /dev/null +++ b/ruoyi-ui/src/views/engineering/contract/ContractAddOrEdit.vue @@ -0,0 +1,123 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/contract/ContractDetail.vue b/ruoyi-ui/src/views/engineering/contract/ContractDetail.vue new file mode 100644 index 00000000..f68529b3 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/contract/ContractDetail.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/contract/index.vue b/ruoyi-ui/src/views/engineering/contract/index.vue new file mode 100644 index 00000000..89d98c5c --- /dev/null +++ b/ruoyi-ui/src/views/engineering/contract/index.vue @@ -0,0 +1,165 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/material/index.vue b/ruoyi-ui/src/views/engineering/material/index.vue new file mode 100644 index 00000000..35f49e55 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/material/index.vue @@ -0,0 +1,371 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/payment/index.vue b/ruoyi-ui/src/views/engineering/payment/index.vue new file mode 100644 index 00000000..2489a28a --- /dev/null +++ b/ruoyi-ui/src/views/engineering/payment/index.vue @@ -0,0 +1,423 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/supplier/SupplierAddOrEdit.vue b/ruoyi-ui/src/views/engineering/supplier/SupplierAddOrEdit.vue new file mode 100644 index 00000000..01fcac98 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/supplier/SupplierAddOrEdit.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/supplier/SupplierDetail.vue b/ruoyi-ui/src/views/engineering/supplier/SupplierDetail.vue new file mode 100644 index 00000000..b566ee06 --- /dev/null +++ b/ruoyi-ui/src/views/engineering/supplier/SupplierDetail.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/engineering/supplier/index.vue b/ruoyi-ui/src/views/engineering/supplier/index.vue new file mode 100644 index 00000000..dad6a94e --- /dev/null +++ b/ruoyi-ui/src/views/engineering/supplier/index.vue @@ -0,0 +1,189 @@ + + + \ No newline at end of file diff --git a/sql/quartz.sql b/sql/quartz.sql index 5f99bfb5..2758816d 100644 --- a/sql/quartz.sql +++ b/sql/quartz.sql @@ -1,3 +1,9 @@ +-- ================================================ +-- Quartz 定时任务表初始化脚本 +-- 字符集: utf8mb4 +-- 排序规则: utf8mb4_general_ci +-- ================================================ + DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; @@ -13,162 +19,162 @@ DROP TABLE IF EXISTS QRTZ_CALENDARS; -- ---------------------------- -- 1、存储每一个已配置的 jobDetail 的详细信息 -- ---------------------------- -create table QRTZ_JOB_DETAILS ( - sched_name varchar(120) not null comment '调度名称', - job_name varchar(200) not null comment '任务名称', - job_group varchar(200) not null comment '任务组名', - description varchar(250) null comment '相关介绍', - job_class_name varchar(250) not null comment '执行任务类名称', - is_durable varchar(1) not null comment '是否持久化', - is_nonconcurrent varchar(1) not null comment '是否并发', - is_update_data varchar(1) not null comment '是否更新数据', - requests_recovery varchar(1) not null comment '是否接受恢复执行', - job_data blob null comment '存放持久化job对象', - primary key (sched_name, job_name, job_group) -) engine=innodb comment = '任务详细信息表'; +CREATE TABLE QRTZ_JOB_DETAILS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + job_name VARCHAR(200) NOT NULL COMMENT '任务名称', + job_group VARCHAR(200) NOT NULL COMMENT '任务组名', + description VARCHAR(250) NULL COMMENT '相关介绍', + job_class_name VARCHAR(250) NOT NULL COMMENT '执行任务类名称', + is_durable VARCHAR(1) NOT NULL COMMENT '是否持久化', + is_nonconcurrent VARCHAR(1) NOT NULL COMMENT '是否并发', + is_update_data VARCHAR(1) NOT NULL COMMENT '是否更新数据', + requests_recovery VARCHAR(1) NOT NULL COMMENT '是否接受恢复执行', + job_data BLOB NULL COMMENT '存放持久化job对象', + PRIMARY KEY (sched_name, job_name, job_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务详细信息表'; -- ---------------------------- --- 2、 存储已配置的 Trigger 的信息 +-- 2、存储已配置的 Trigger 的信息 -- ---------------------------- -create table QRTZ_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment '触发器的名字', - trigger_group varchar(200) not null comment '触发器所属组的名字', - job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键', - job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键', - description varchar(250) null comment '相关介绍', - next_fire_time bigint(13) null comment '上一次触发时间(毫秒)', - prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)', - priority integer null comment '优先级', - trigger_state varchar(16) not null comment '触发器状态', - trigger_type varchar(8) not null comment '触发器的类型', - start_time bigint(13) not null comment '开始时间', - end_time bigint(13) null comment '结束时间', - calendar_name varchar(200) null comment '日程表名称', - misfire_instr smallint(2) null comment '补偿执行的策略', - job_data blob null comment '存放持久化job对象', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group) -) engine=innodb comment = '触发器详细信息表'; +CREATE TABLE QRTZ_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_name VARCHAR(200) NOT NULL COMMENT '触发器的名字', + trigger_group VARCHAR(200) NOT NULL COMMENT '触发器所属组的名字', + job_name VARCHAR(200) NOT NULL COMMENT 'qrtz_job_details表job_name的外键', + job_group VARCHAR(200) NOT NULL COMMENT 'qrtz_job_details表job_group的外键', + description VARCHAR(250) NULL COMMENT '相关介绍', + next_fire_time BIGINT(13) NULL COMMENT '上一次触发时间(毫秒)', + prev_fire_time BIGINT(13) NULL COMMENT '下一次触发时间(默认为-1表示不触发)', + priority INTEGER NULL COMMENT '优先级', + trigger_state VARCHAR(16) NOT NULL COMMENT '触发器状态', + trigger_type VARCHAR(8) NOT NULL COMMENT '触发器的类型', + start_time BIGINT(13) NOT NULL COMMENT '开始时间', + end_time BIGINT(13) NULL COMMENT '结束时间', + calendar_name VARCHAR(200) NULL COMMENT '日程表名称', + misfire_instr SMALLINT(2) NULL COMMENT '补偿执行的策略', + job_data BLOB NULL COMMENT '存放持久化job对象', + PRIMARY KEY (sched_name, trigger_name, trigger_group), + FOREIGN KEY (sched_name, job_name, job_group) REFERENCES QRTZ_JOB_DETAILS(sched_name, job_name, job_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='触发器详细信息表'; -- ---------------------------- --- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 +-- 3、存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 -- ---------------------------- -create table QRTZ_SIMPLE_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - repeat_count bigint(7) not null comment '重复的次数统计', - repeat_interval bigint(12) not null comment '重复的间隔时间', - times_triggered bigint(10) not null comment '已经触发的次数', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = '简单触发器的信息表'; +CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + repeat_count BIGINT(7) NOT NULL COMMENT '重复的次数统计', + repeat_interval BIGINT(12) NOT NULL COMMENT '重复的间隔时间', + times_triggered BIGINT(10) NOT NULL COMMENT '已经触发的次数', + PRIMARY KEY (sched_name, trigger_name, trigger_group), + FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='简单触发器的信息表'; -- ---------------------------- --- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 --- ---------------------------- -create table QRTZ_CRON_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - cron_expression varchar(200) not null comment 'cron表达式', - time_zone_id varchar(80) comment '时区', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = 'Cron类型的触发器表'; +-- 4、存储 Cron Trigger,包括 Cron 表达式和时区信息 +-- ---------------------------- +CREATE TABLE QRTZ_CRON_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + cron_expression VARCHAR(200) NOT NULL COMMENT 'cron表达式', + time_zone_id VARCHAR(80) COMMENT '时区', + PRIMARY KEY (sched_name, trigger_name, trigger_group), + FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Cron类型的触发器表'; -- ---------------------------- --- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) --- ---------------------------- -create table QRTZ_BLOB_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - blob_data blob null comment '存放持久化Trigger对象', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = 'Blob类型的触发器表'; +-- 5、Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) +-- ---------------------------- +CREATE TABLE QRTZ_BLOB_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + blob_data BLOB NULL COMMENT '存放持久化Trigger对象', + PRIMARY KEY (sched_name, trigger_name, trigger_group), + FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Blob类型的触发器表'; -- ---------------------------- --- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 --- ---------------------------- -create table QRTZ_CALENDARS ( - sched_name varchar(120) not null comment '调度名称', - calendar_name varchar(200) not null comment '日历名称', - calendar blob not null comment '存放持久化calendar对象', - primary key (sched_name, calendar_name) -) engine=innodb comment = '日历信息表'; +-- 6、以 Blob 类型存储存放日历信息,quartz可配置一个日历来指定一个时间范围 +-- ---------------------------- +CREATE TABLE QRTZ_CALENDARS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + calendar_name VARCHAR(200) NOT NULL COMMENT '日历名称', + calendar BLOB NOT NULL COMMENT '存放持久化calendar对象', + PRIMARY KEY (sched_name, calendar_name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='日历信息表'; -- ---------------------------- --- 7、 存储已暂停的 Trigger 组的信息 --- ---------------------------- -create table QRTZ_PAUSED_TRIGGER_GRPS ( - sched_name varchar(120) not null comment '调度名称', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - primary key (sched_name, trigger_group) -) engine=innodb comment = '暂停的触发器表'; +-- 7、存储已暂停的 Trigger 组的信息 +-- ---------------------------- +CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + PRIMARY KEY (sched_name, trigger_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='暂停的触发器表'; -- ---------------------------- --- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 --- ---------------------------- -create table QRTZ_FIRED_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - entry_id varchar(95) not null comment '调度器实例id', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - instance_name varchar(200) not null comment '调度器实例名', - fired_time bigint(13) not null comment '触发的时间', - sched_time bigint(13) not null comment '定时器制定的时间', - priority integer not null comment '优先级', - state varchar(16) not null comment '状态', - job_name varchar(200) null comment '任务名称', - job_group varchar(200) null comment '任务组名', - is_nonconcurrent varchar(1) null comment '是否并发', - requests_recovery varchar(1) null comment '是否接受恢复执行', - primary key (sched_name, entry_id) -) engine=innodb comment = '已触发的触发器表'; +-- 8、存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 +-- ---------------------------- +CREATE TABLE QRTZ_FIRED_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + entry_id VARCHAR(95) NOT NULL COMMENT '调度器实例id', + trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + instance_name VARCHAR(200) NOT NULL COMMENT '调度器实例名', + fired_time BIGINT(13) NOT NULL COMMENT '触发的时间', + sched_time BIGINT(13) NOT NULL COMMENT '定时器制定的时间', + priority INTEGER NOT NULL COMMENT '优先级', + state VARCHAR(16) NOT NULL COMMENT '状态', + job_name VARCHAR(200) NULL COMMENT '任务名称', + job_group VARCHAR(200) NULL COMMENT '任务组名', + is_nonconcurrent VARCHAR(1) NULL COMMENT '是否并发', + requests_recovery VARCHAR(1) NULL COMMENT '是否接受恢复执行', + PRIMARY KEY (sched_name, entry_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='已触发的触发器表'; -- ---------------------------- --- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 --- ---------------------------- -create table QRTZ_SCHEDULER_STATE ( - sched_name varchar(120) not null comment '调度名称', - instance_name varchar(200) not null comment '实例名称', - last_checkin_time bigint(13) not null comment '上次检查时间', - checkin_interval bigint(13) not null comment '检查间隔时间', - primary key (sched_name, instance_name) -) engine=innodb comment = '调度器状态表'; +-- 9、存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 +-- ---------------------------- +CREATE TABLE QRTZ_SCHEDULER_STATE ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + instance_name VARCHAR(200) NOT NULL COMMENT '实例名称', + last_checkin_time BIGINT(13) NOT NULL COMMENT '上次检查时间', + checkin_interval BIGINT(13) NOT NULL COMMENT '检查间隔时间', + PRIMARY KEY (sched_name, instance_name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='调度器状态表'; -- ---------------------------- --- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) --- ---------------------------- -create table QRTZ_LOCKS ( - sched_name varchar(120) not null comment '调度名称', - lock_name varchar(40) not null comment '悲观锁名称', - primary key (sched_name, lock_name) -) engine=innodb comment = '存储的悲观锁信息表'; +-- 10、存储程序的悲观锁的信息(假如使用了悲观锁) +-- ---------------------------- +CREATE TABLE QRTZ_LOCKS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + lock_name VARCHAR(40) NOT NULL COMMENT '悲观锁名称', + PRIMARY KEY (sched_name, lock_name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='存储的悲观锁信息表'; -- ---------------------------- --- 11、 Quartz集群实现同步机制的行锁表 --- ---------------------------- -create table QRTZ_SIMPROP_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', - str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', - str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', - int_prop_1 int null comment 'int类型的trigger的第一个参数', - int_prop_2 int null comment 'int类型的trigger的第二个参数', - long_prop_1 bigint null comment 'long类型的trigger的第一个参数', - long_prop_2 bigint null comment 'long类型的trigger的第二个参数', - dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', - dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', - bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', - bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = '同步机制的行锁表'; +-- 11、Quartz集群实现同步机制的行锁表 +-- ---------------------------- +CREATE TABLE QRTZ_SIMPROP_TRIGGERS ( + sched_name VARCHAR(120) NOT NULL COMMENT '调度名称', + trigger_name VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + str_prop_1 VARCHAR(512) NULL COMMENT 'String类型的trigger的第一个参数', + str_prop_2 VARCHAR(512) NULL COMMENT 'String类型的trigger的第二个参数', + str_prop_3 VARCHAR(512) NULL COMMENT 'String类型的trigger的第三个参数', + int_prop_1 INT NULL COMMENT 'int类型的trigger的第一个参数', + int_prop_2 INT NULL COMMENT 'int类型的trigger的第二个参数', + long_prop_1 BIGINT NULL COMMENT 'long类型的trigger的第一个参数', + long_prop_2 BIGINT NULL COMMENT 'long类型的trigger的第二个参数', + dec_prop_1 NUMERIC(13,4) NULL COMMENT 'decimal类型的trigger的第一个参数', + dec_prop_2 NUMERIC(13,4) NULL COMMENT 'decimal类型的trigger的第二个参数', + bool_prop_1 VARCHAR(1) NULL COMMENT 'Boolean类型的trigger的第一个参数', + bool_prop_2 VARCHAR(1) NULL COMMENT 'Boolean类型的trigger的第二个参数', + PRIMARY KEY (sched_name, trigger_name, trigger_group), + FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='同步机制的行锁表'; -commit; \ No newline at end of file +COMMIT; \ No newline at end of file diff --git a/sql/ry_engineering.sql b/sql/ry_engineering.sql new file mode 100644 index 00000000..65b10032 --- /dev/null +++ b/sql/ry_engineering.sql @@ -0,0 +1,988 @@ +-- ================================================ +-- RuoYi-Vue 工程管理系统 - 完整数据库初始化脚本 +-- 字符集: utf8mb4 +-- 排序规则: utf8mb4_general_ci +-- ================================================ + +-- ---------------------------- +-- 1、部门表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_dept; +CREATE TABLE sys_dept ( + dept_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', + parent_id bigint(20) DEFAULT 0 COMMENT '父部门id', + ancestors varchar(50) DEFAULT '' COMMENT '祖级列表', + dept_name varchar(30) DEFAULT '' COMMENT '部门名称', + order_num int(4) DEFAULT 0 COMMENT '显示顺序', + leader varchar(20) DEFAULT NULL COMMENT '负责人', + phone varchar(11) DEFAULT NULL COMMENT '联系电话', + email varchar(50) DEFAULT NULL COMMENT '邮箱', + status char(1) DEFAULT '0' COMMENT '部门状态(0正常 1停用)', + del_flag char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + PRIMARY KEY (dept_id) +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='部门表'; + +-- ---------------------------- +-- 初始化-部门表数据 +-- ---------------------------- +INSERT INTO sys_dept VALUES(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); +INSERT INTO sys_dept VALUES(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL); + + +-- ---------------------------- +-- 2、用户信息表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_user; +CREATE TABLE sys_user ( + user_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + dept_id bigint(20) DEFAULT NULL COMMENT '部门ID', + user_name varchar(30) NOT NULL COMMENT '用户账号', + nick_name varchar(30) NOT NULL COMMENT '用户昵称', + user_type varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户)', + email varchar(50) DEFAULT '' COMMENT '用户邮箱', + phonenumber varchar(11) DEFAULT '' COMMENT '手机号码', + sex char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', + avatar varchar(100) DEFAULT '' COMMENT '头像地址', + password varchar(100) DEFAULT '' COMMENT '密码', + status char(1) DEFAULT '0' COMMENT '账号状态(0正常 1停用)', + del_flag char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + login_ip varchar(128) DEFAULT '' COMMENT '最后登录IP', + login_date datetime COMMENT '最后登录时间', + pwd_update_date datetime COMMENT '密码最后更新时间', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (user_id) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表'; + +-- ---------------------------- +-- 初始化-用户信息表数据 +-- ---------------------------- +INSERT INTO sys_user VALUES(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', NOW(), NOW(), 'admin', NOW(), '', NULL, '管理员'); +INSERT INTO sys_user VALUES(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', NOW(), NOW(), 'admin', NOW(), '', NULL, '测试员'); + + +-- ---------------------------- +-- 3、岗位信息表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_post; +CREATE TABLE sys_post ( + post_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + post_code varchar(64) NOT NULL COMMENT '岗位编码', + post_name varchar(50) NOT NULL COMMENT '岗位名称', + post_sort int(4) NOT NULL COMMENT '显示顺序', + status char(1) NOT NULL COMMENT '状态(0正常 1停用)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (post_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='岗位信息表'; + +-- ---------------------------- +-- 初始化-岗位信息表数据 +-- ---------------------------- +INSERT INTO sys_post VALUES(1, 'ceo', '董事长', 1, '0', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_post VALUES(2, 'se', '项目经理', 2, '0', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_post VALUES(3, 'hr', '人力资源', 3, '0', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_post VALUES(4, 'user', '普通员工', 4, '0', 'admin', NOW(), '', NULL, ''); + + +-- ---------------------------- +-- 4、角色信息表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_role; +CREATE TABLE sys_role ( + role_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID', + role_name varchar(30) NOT NULL COMMENT '角色名称', + role_key varchar(100) NOT NULL COMMENT '角色权限字符串', + role_sort int(4) NOT NULL COMMENT '显示顺序', + data_scope char(1) DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + menu_check_strictly tinyint(1) DEFAULT 1 COMMENT '菜单树选择项是否关联显示', + dept_check_strictly tinyint(1) DEFAULT 1 COMMENT '部门树选择项是否关联显示', + status char(1) NOT NULL COMMENT '角色状态(0正常 1停用)', + del_flag char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (role_id) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色信息表'; + +-- ---------------------------- +-- 初始化-角色信息表数据 +-- ---------------------------- +INSERT INTO sys_role VALUES('1', '超级管理员', 'admin', 1, 1, 1, 1, '0', '0', 'admin', NOW(), '', NULL, '超级管理员'); +INSERT INTO sys_role VALUES('2', '普通角色', 'common', 2, 2, 1, 1, '0', '0', 'admin', NOW(), '', NULL, '普通角色'); + + +-- ---------------------------- +-- 5、菜单权限表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_menu; +CREATE TABLE sys_menu ( + menu_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + menu_name varchar(50) NOT NULL COMMENT '菜单名称', + parent_id bigint(20) DEFAULT 0 COMMENT '父菜单ID', + order_num int(4) DEFAULT 0 COMMENT '显示顺序', + path varchar(200) DEFAULT '' COMMENT '路由地址', + component varchar(255) DEFAULT NULL COMMENT '组件路径', + query varchar(255) DEFAULT NULL COMMENT '路由参数', + route_name varchar(50) DEFAULT '' COMMENT '路由名称', + is_frame int(1) DEFAULT 1 COMMENT '是否为外链(0是 1否)', + is_cache int(1) DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)', + menu_type char(1) DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)', + visible char(1) DEFAULT 0 COMMENT '菜单状态(0显示 1隐藏)', + status char(1) DEFAULT 0 COMMENT '菜单状态(0正常 1停用)', + perms varchar(100) DEFAULT NULL COMMENT '权限标识', + icon varchar(100) DEFAULT '#' COMMENT '菜单图标', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT '' COMMENT '备注', + PRIMARY KEY (menu_id) +) ENGINE=InnoDB AUTO_INCREMENT=2000 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='菜单权限表'; + +-- ---------------------------- +-- 初始化-菜单信息表数据 +-- ---------------------------- +-- 一级菜单 +INSERT INTO sys_menu VALUES('1', '系统管理', '0', '1', 'system', NULL, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', NOW(), '', NULL, '系统管理目录'); +INSERT INTO sys_menu VALUES('2', '系统监控', '0', '2', 'monitor', NULL, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), '', NULL, '系统监控目录'); +INSERT INTO sys_menu VALUES('3', '系统工具', '0', '3', 'tool', NULL, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', NOW(), '', NULL, '系统工具目录'); +INSERT INTO sys_menu VALUES('4', '若依官网', '0', '4', 'http://ruoyi.vip', NULL, '', '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', NOW(), '', NULL, '若依官网地址'); +INSERT INTO sys_menu VALUES('5', '工程管理', '0', '5', 'engineering', NULL, '', '', 1, 0, 'M', '0', '0', '', 'build', 'admin', NOW(), '', NULL, '工程管理目录'); +-- 二级菜单 +INSERT INTO sys_menu VALUES('100', '用户管理', '1', '1', 'user', 'system/user/index', '', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', NOW(), '', NULL, '用户管理菜单'); +INSERT INTO sys_menu VALUES('101', '角色管理', '1', '2', 'role', 'system/role/index', '', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', NOW(), '', NULL, '角色管理菜单'); +INSERT INTO sys_menu VALUES('102', '菜单管理', '1', '3', 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', NOW(), '', NULL, '菜单管理菜单'); +INSERT INTO sys_menu VALUES('103', '部门管理', '1', '4', 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', NOW(), '', NULL, '部门管理菜单'); +INSERT INTO sys_menu VALUES('104', '岗位管理', '1', '5', 'post', 'system/post/index', '', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', NOW(), '', NULL, '岗位管理菜单'); +INSERT INTO sys_menu VALUES('105', '字典管理', '1', '6', 'dict', 'system/dict/index', '', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', NOW(), '', NULL, '字典管理菜单'); +INSERT INTO sys_menu VALUES('106', '参数设置', '1', '7', 'config', 'system/config/index', '', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', NOW(), '', NULL, '参数设置菜单'); +INSERT INTO sys_menu VALUES('107', '通知公告', '1', '8', 'notice', 'system/notice/index', '', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', NOW(), '', NULL, '通知公告菜单'); +INSERT INTO sys_menu VALUES('108', '日志管理', '1', '9', 'log', '', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', NOW(), '', NULL, '日志管理菜单'); +INSERT INTO sys_menu VALUES('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', NOW(), '', NULL, '在线用户菜单'); +INSERT INTO sys_menu VALUES('110', '定时任务', '2', '2', 'job', 'monitor/job/index', '', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', NOW(), '', NULL, '定时任务菜单'); +INSERT INTO sys_menu VALUES('111', '数据监控', '2', '3', 'druid', 'monitor/druid/index', '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', NOW(), '', NULL, '数据监控菜单'); +INSERT INTO sys_menu VALUES('112', '服务监控', '2', '4', 'server', 'monitor/server/index', '', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', NOW(), '', NULL, '服务监控菜单'); +INSERT INTO sys_menu VALUES('113', '缓存监控', '2', '5', 'cache', 'monitor/cache/index', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', NOW(), '', NULL, '缓存监控菜单'); +INSERT INTO sys_menu VALUES('114', '缓存列表', '2', '6', 'cacheList', 'monitor/cache/list', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', NOW(), '', NULL, '缓存列表菜单'); +INSERT INTO sys_menu VALUES('115', '表单构建', '3', '1', 'build', 'tool/build/index', '', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', NOW(), '', NULL, '表单构建菜单'); +INSERT INTO sys_menu VALUES('116', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', NOW(), '', NULL, '代码生成菜单'); +INSERT INTO sys_menu VALUES('117', '系统接口', '3', '3', 'swagger', 'tool/swagger/index', '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', NOW(), '', NULL, '系统接口菜单'); +INSERT INTO sys_menu VALUES('200', '供应商管理', '5', '1', 'supplier', 'engineering/supplier/index', '', '', 1, 0, 'C', '0', '0', 'system:engineering:supplier:list', 'people', 'admin', NOW(), '', NULL, '供应商管理菜单'); +INSERT INTO sys_menu VALUES('201', '合同管理', '5', '2', 'contract', 'engineering/contract/index', '', '', 1, 0, 'C', '0', '0', 'system:engineering:contract:list', 'file-text', 'admin', NOW(), '', NULL, '合同管理菜单'); +INSERT INTO sys_menu VALUES('202', '施工进度管理', '5', '3', 'construction', 'engineering/construction/index', '', '', 1, 0, 'C', '0', '0', 'system:engineering:construction:list', 'tree-table', 'admin', NOW(), '', NULL, '施工进度管理菜单'); +INSERT INTO sys_menu VALUES('203', '物料管理', '5', '4', 'material', 'engineering/material/index', '', '', 1, 0, 'C', '0', '0', 'system:engineering:material:list', 'shopping', 'admin', NOW(), '', NULL, '物料管理菜单'); +INSERT INTO sys_menu VALUES('204', '付款管理', '5', '5', 'payment', 'engineering/payment/index', '', '', 1, 0, 'C', '0', '0', 'system:engineering:payment:list', 'money', 'admin', NOW(), '', NULL, '付款管理菜单'); +-- 三级菜单 +INSERT INTO sys_menu VALUES('500', '操作日志', '108', '1', 'operlog', 'monitor/operlog/index', '', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', NOW(), '', NULL, '操作日志菜单'); +INSERT INTO sys_menu VALUES('501', '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', NOW(), '', NULL, '登录日志菜单'); +-- 用户管理按钮 +INSERT INTO sys_menu VALUES('1000', '用户查询', '100', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1001', '用户新增', '100', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1002', '用户修改', '100', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1003', '用户删除', '100', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1004', '用户导出', '100', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1005', '用户导入', '100', '6', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1006', '重置密码', '100', '7', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', NOW(), '', NULL, ''); +-- 角色管理按钮 +INSERT INTO sys_menu VALUES('1007', '角色查询', '101', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1008', '角色新增', '101', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1009', '角色修改', '101', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1010', '角色删除', '101', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1011', '角色导出', '101', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', NOW(), '', NULL, ''); +-- 菜单管理按钮 +INSERT INTO sys_menu VALUES('1012', '菜单查询', '102', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1013', '菜单新增', '102', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1014', '菜单修改', '102', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1015', '菜单删除', '102', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', NOW(), '', NULL, ''); +-- 部门管理按钮 +INSERT INTO sys_menu VALUES('1016', '部门查询', '103', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1017', '部门新增', '103', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1018', '部门修改', '103', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1019', '部门删除', '103', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', NOW(), '', NULL, ''); +-- 岗位管理按钮 +INSERT INTO sys_menu VALUES('1020', '岗位查询', '104', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1021', '岗位新增', '104', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1022', '岗位修改', '104', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1023', '岗位删除', '104', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1024', '岗位导出', '104', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', NOW(), '', NULL, ''); +-- 字典管理按钮 +INSERT INTO sys_menu VALUES('1025', '字典查询', '105', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1026', '字典新增', '105', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1027', '字典修改', '105', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1028', '字典删除', '105', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1029', '字典导出', '105', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', NOW(), '', NULL, ''); +-- 参数设置按钮 +INSERT INTO sys_menu VALUES('1030', '参数查询', '106', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1031', '参数新增', '106', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1032', '参数修改', '106', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1033', '参数删除', '106', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1034', '参数导出', '106', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', NOW(), '', NULL, ''); +-- 通知公告按钮 +INSERT INTO sys_menu VALUES('1035', '公告查询', '107', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1036', '公告新增', '107', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1037', '公告修改', '107', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1038', '公告删除', '107', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', NOW(), '', NULL, ''); +-- 操作日志按钮 +INSERT INTO sys_menu VALUES('1039', '操作查询', '500', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1040', '操作删除', '500', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1041', '日志导出', '500', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', NOW(), '', NULL, ''); +-- 登录日志按钮 +INSERT INTO sys_menu VALUES('1042', '登录查询', '501', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1043', '登录删除', '501', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1044', '日志导出', '501', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1045', '账户解锁', '501', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', NOW(), '', NULL, ''); +-- 在线用户按钮 +INSERT INTO sys_menu VALUES('1046', '在线查询', '109', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1047', '批量强退', '109', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1048', '单条强退', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', NOW(), '', NULL, ''); +-- 定时任务按钮 +INSERT INTO sys_menu VALUES('1049', '任务查询', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1050', '任务新增', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1051', '任务修改', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1052', '任务删除', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1053', '状态修改', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1054', '任务导出', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', NOW(), '', NULL, ''); +-- 代码生成按钮 +INSERT INTO sys_menu VALUES('1055', '生成查询', '116', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1056', '生成修改', '116', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1057', '生成删除', '116', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1058', '导入代码', '116', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1059', '预览代码', '116', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('1060', '生成代码', '116', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', NOW(), '', NULL, ''); +-- 供应商管理按钮 +INSERT INTO sys_menu VALUES('2000', '供应商查询', '200', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2001', '供应商新增', '200', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2002', '供应商修改', '200', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2003', '供应商删除', '200', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:remove','#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2004', '供应商导出', '200', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:supplier:export','#', 'admin', NOW(), '', NULL, ''); +-- 合同管理按钮 +INSERT INTO sys_menu VALUES('2005', '合同查询', '201', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2006', '合同新增', '201', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2007', '合同修改', '201', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2008', '合同删除', '201', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:remove','#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2009', '合同导出', '201', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:contract:export','#', 'admin', NOW(), '', NULL, ''); +-- 施工进度管理按钮 +INSERT INTO sys_menu VALUES('2010', '施工进度查询', '202', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2011', '施工进度新增', '202', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2012', '施工进度修改', '202', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2013', '施工进度删除', '202', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:construction:remove','#', 'admin', NOW(), '', NULL, ''); +-- 物料管理按钮 +INSERT INTO sys_menu VALUES('2014', '物料查询', '203', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2015', '物料新增', '203', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2016', '物料修改', '203', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2017', '物料删除', '203', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:remove','#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2018', '物料入库', '203', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:in:add','#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2019', '物料出库', '203', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:material:out:add','#', 'admin', NOW(), '', NULL, ''); +-- 付款管理按钮 +INSERT INTO sys_menu VALUES('2020', '付款查询', '204', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:query', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2021', '付款新增', '204', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:add', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2022', '付款修改', '204', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:edit', '#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2023', '付款删除', '204', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:remove','#', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_menu VALUES('2024', '付款审批', '204', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:engineering:payment:approve','#', 'admin', NOW(), '', NULL, ''); + + +-- ---------------------------- +-- 6、用户和角色关联表 用户N-1角色 +-- ---------------------------- +DROP TABLE IF EXISTS sys_user_role; +CREATE TABLE sys_user_role ( + user_id bigint(20) NOT NULL COMMENT '用户ID', + role_id bigint(20) NOT NULL COMMENT '角色ID', + PRIMARY KEY(user_id, role_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户和角色关联表'; + +-- ---------------------------- +-- 初始化-用户和角色关联表数据 +-- ---------------------------- +INSERT INTO sys_user_role VALUES ('1', '1'); +INSERT INTO sys_user_role VALUES ('2', '2'); + + +-- ---------------------------- +-- 7、角色和菜单关联表 角色1-N菜单 +-- ---------------------------- +DROP TABLE IF EXISTS sys_role_menu; +CREATE TABLE sys_role_menu ( + role_id bigint(20) NOT NULL COMMENT '角色ID', + menu_id bigint(20) NOT NULL COMMENT '菜单ID', + PRIMARY KEY(role_id, menu_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色和菜单关联表'; + +-- ---------------------------- +-- 初始化-角色和菜单关联表数据 +-- ---------------------------- +-- 普通角色权限 +INSERT INTO sys_role_menu VALUES ('2', '1'); +INSERT INTO sys_role_menu VALUES ('2', '2'); +INSERT INTO sys_role_menu VALUES ('2', '3'); +INSERT INTO sys_role_menu VALUES ('2', '4'); +INSERT INTO sys_role_menu VALUES ('2', '100'); +INSERT INTO sys_role_menu VALUES ('2', '101'); +INSERT INTO sys_role_menu VALUES ('2', '102'); +INSERT INTO sys_role_menu VALUES ('2', '103'); +INSERT INTO sys_role_menu VALUES ('2', '104'); +INSERT INTO sys_role_menu VALUES ('2', '105'); +INSERT INTO sys_role_menu VALUES ('2', '106'); +INSERT INTO sys_role_menu VALUES ('2', '107'); +INSERT INTO sys_role_menu VALUES ('2', '108'); +INSERT INTO sys_role_menu VALUES ('2', '109'); +INSERT INTO sys_role_menu VALUES ('2', '110'); +INSERT INTO sys_role_menu VALUES ('2', '111'); +INSERT INTO sys_role_menu VALUES ('2', '112'); +INSERT INTO sys_role_menu VALUES ('2', '113'); +INSERT INTO sys_role_menu VALUES ('2', '114'); +INSERT INTO sys_role_menu VALUES ('2', '115'); +INSERT INTO sys_role_menu VALUES ('2', '116'); +INSERT INTO sys_role_menu VALUES ('2', '117'); +INSERT INTO sys_role_menu VALUES ('2', '500'); +INSERT INTO sys_role_menu VALUES ('2', '501'); +INSERT INTO sys_role_menu VALUES ('2', '1000'); +INSERT INTO sys_role_menu VALUES ('2', '1001'); +INSERT INTO sys_role_menu VALUES ('2', '1002'); +INSERT INTO sys_role_menu VALUES ('2', '1003'); +INSERT INTO sys_role_menu VALUES ('2', '1004'); +INSERT INTO sys_role_menu VALUES ('2', '1005'); +INSERT INTO sys_role_menu VALUES ('2', '1006'); +INSERT INTO sys_role_menu VALUES ('2', '1007'); +INSERT INTO sys_role_menu VALUES ('2', '1008'); +INSERT INTO sys_role_menu VALUES ('2', '1009'); +INSERT INTO sys_role_menu VALUES ('2', '1010'); +INSERT INTO sys_role_menu VALUES ('2', '1011'); +INSERT INTO sys_role_menu VALUES ('2', '1012'); +INSERT INTO sys_role_menu VALUES ('2', '1013'); +INSERT INTO sys_role_menu VALUES ('2', '1014'); +INSERT INTO sys_role_menu VALUES ('2', '1015'); +INSERT INTO sys_role_menu VALUES ('2', '1016'); +INSERT INTO sys_role_menu VALUES ('2', '1017'); +INSERT INTO sys_role_menu VALUES ('2', '1018'); +INSERT INTO sys_role_menu VALUES ('2', '1019'); +INSERT INTO sys_role_menu VALUES ('2', '1020'); +INSERT INTO sys_role_menu VALUES ('2', '1021'); +INSERT INTO sys_role_menu VALUES ('2', '1022'); +INSERT INTO sys_role_menu VALUES ('2', '1023'); +INSERT INTO sys_role_menu VALUES ('2', '1024'); +INSERT INTO sys_role_menu VALUES ('2', '1025'); +INSERT INTO sys_role_menu VALUES ('2', '1026'); +INSERT INTO sys_role_menu VALUES ('2', '1027'); +INSERT INTO sys_role_menu VALUES ('2', '1028'); +INSERT INTO sys_role_menu VALUES ('2', '1029'); +INSERT INTO sys_role_menu VALUES ('2', '1030'); +INSERT INTO sys_role_menu VALUES ('2', '1031'); +INSERT INTO sys_role_menu VALUES ('2', '1032'); +INSERT INTO sys_role_menu VALUES ('2', '1033'); +INSERT INTO sys_role_menu VALUES ('2', '1034'); +INSERT INTO sys_role_menu VALUES ('2', '1035'); +INSERT INTO sys_role_menu VALUES ('2', '1036'); +INSERT INTO sys_role_menu VALUES ('2', '1037'); +INSERT INTO sys_role_menu VALUES ('2', '1038'); +INSERT INTO sys_role_menu VALUES ('2', '1039'); +INSERT INTO sys_role_menu VALUES ('2', '1040'); +INSERT INTO sys_role_menu VALUES ('2', '1041'); +INSERT INTO sys_role_menu VALUES ('2', '1042'); +INSERT INTO sys_role_menu VALUES ('2', '1043'); +INSERT INTO sys_role_menu VALUES ('2', '1044'); +INSERT INTO sys_role_menu VALUES ('2', '1045'); +INSERT INTO sys_role_menu VALUES ('2', '1046'); +INSERT INTO sys_role_menu VALUES ('2', '1047'); +INSERT INTO sys_role_menu VALUES ('2', '1048'); +INSERT INTO sys_role_menu VALUES ('2', '1049'); +INSERT INTO sys_role_menu VALUES ('2', '1050'); +INSERT INTO sys_role_menu VALUES ('2', '1051'); +INSERT INTO sys_role_menu VALUES ('2', '1052'); +INSERT INTO sys_role_menu VALUES ('2', '1053'); +INSERT INTO sys_role_menu VALUES ('2', '1054'); +INSERT INTO sys_role_menu VALUES ('2', '1055'); +INSERT INTO sys_role_menu VALUES ('2', '1056'); +INSERT INTO sys_role_menu VALUES ('2', '1057'); +INSERT INTO sys_role_menu VALUES ('2', '1058'); +INSERT INTO sys_role_menu VALUES ('2', '1059'); +INSERT INTO sys_role_menu VALUES ('2', '1060'); +-- 超级管理员拥有工程管理所有权限 +INSERT INTO sys_role_menu VALUES ('1', '5'); +INSERT INTO sys_role_menu VALUES ('1', '200'); +INSERT INTO sys_role_menu VALUES ('1', '201'); +INSERT INTO sys_role_menu VALUES ('1', '202'); +INSERT INTO sys_role_menu VALUES ('1', '203'); +INSERT INTO sys_role_menu VALUES ('1', '204'); +INSERT INTO sys_role_menu VALUES ('1', '2000'); +INSERT INTO sys_role_menu VALUES ('1', '2001'); +INSERT INTO sys_role_menu VALUES ('1', '2002'); +INSERT INTO sys_role_menu VALUES ('1', '2003'); +INSERT INTO sys_role_menu VALUES ('1', '2004'); +INSERT INTO sys_role_menu VALUES ('1', '2005'); +INSERT INTO sys_role_menu VALUES ('1', '2006'); +INSERT INTO sys_role_menu VALUES ('1', '2007'); +INSERT INTO sys_role_menu VALUES ('1', '2008'); +INSERT INTO sys_role_menu VALUES ('1', '2009'); +INSERT INTO sys_role_menu VALUES ('1', '2010'); +INSERT INTO sys_role_menu VALUES ('1', '2011'); +INSERT INTO sys_role_menu VALUES ('1', '2012'); +INSERT INTO sys_role_menu VALUES ('1', '2013'); +INSERT INTO sys_role_menu VALUES ('1', '2014'); +INSERT INTO sys_role_menu VALUES ('1', '2015'); +INSERT INTO sys_role_menu VALUES ('1', '2016'); +INSERT INTO sys_role_menu VALUES ('1', '2017'); +INSERT INTO sys_role_menu VALUES ('1', '2018'); +INSERT INTO sys_role_menu VALUES ('1', '2019'); +INSERT INTO sys_role_menu VALUES ('1', '2020'); +INSERT INTO sys_role_menu VALUES ('1', '2021'); +INSERT INTO sys_role_menu VALUES ('1', '2022'); +INSERT INTO sys_role_menu VALUES ('1', '2023'); +INSERT INTO sys_role_menu VALUES ('1', '2024'); + + +-- ---------------------------- +-- 8、角色和部门关联表 角色1-N部门 +-- ---------------------------- +DROP TABLE IF EXISTS sys_role_dept; +CREATE TABLE sys_role_dept ( + role_id bigint(20) NOT NULL COMMENT '角色ID', + dept_id bigint(20) NOT NULL COMMENT '部门ID', + PRIMARY KEY(role_id, dept_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色和部门关联表'; + +-- ---------------------------- +-- 初始化-角色和部门关联表数据 +-- ---------------------------- +INSERT INTO sys_role_dept VALUES ('2', '100'); +INSERT INTO sys_role_dept VALUES ('2', '101'); +INSERT INTO sys_role_dept VALUES ('2', '105'); + + +-- ---------------------------- +-- 9、用户与岗位关联表 用户1-N岗位 +-- ---------------------------- +DROP TABLE IF EXISTS sys_user_post; +CREATE TABLE sys_user_post ( + user_id bigint(20) NOT NULL COMMENT '用户ID', + post_id bigint(20) NOT NULL COMMENT '岗位ID', + PRIMARY KEY (user_id, post_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户与岗位关联表'; + +-- ---------------------------- +-- 初始化-用户与岗位关联表数据 +-- ---------------------------- +INSERT INTO sys_user_post VALUES ('1', '1'); +INSERT INTO sys_user_post VALUES ('2', '2'); + + +-- ---------------------------- +-- 10、操作日志记录 +-- ---------------------------- +DROP TABLE IF EXISTS sys_oper_log; +CREATE TABLE sys_oper_log ( + oper_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', + title varchar(50) DEFAULT '' COMMENT '模块标题', + business_type int(2) DEFAULT 0 COMMENT '业务类型(0其它 1新增 2修改 3删除)', + method varchar(200) DEFAULT '' COMMENT '方法名称', + request_method varchar(10) DEFAULT '' COMMENT '请求方式', + operator_type int(1) DEFAULT 0 COMMENT '操作类别(0其它 1后台用户 2手机端用户)', + oper_name varchar(50) DEFAULT '' COMMENT '操作人员', + dept_name varchar(50) DEFAULT '' COMMENT '部门名称', + oper_url varchar(255) DEFAULT '' COMMENT '请求URL', + oper_ip varchar(128) DEFAULT '' COMMENT '主机地址', + oper_location varchar(255) DEFAULT '' COMMENT '操作地点', + oper_param varchar(2000) DEFAULT '' COMMENT '请求参数', + json_result varchar(2000) DEFAULT '' COMMENT '返回参数', + status int(1) DEFAULT 0 COMMENT '操作状态(0正常 1异常)', + error_msg varchar(2000) DEFAULT '' COMMENT '错误消息', + oper_time datetime COMMENT '操作时间', + cost_time bigint(20) DEFAULT 0 COMMENT '消耗时间', + PRIMARY KEY (oper_id), + KEY idx_sys_oper_log_bt (business_type), + KEY idx_sys_oper_log_s (status), + KEY idx_sys_oper_log_ot (oper_time) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='操作日志记录'; + + +-- ---------------------------- +-- 11、字典类型表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_dict_type; +CREATE TABLE sys_dict_type ( + dict_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键', + dict_name varchar(100) DEFAULT '' COMMENT '字典名称', + dict_type varchar(100) DEFAULT '' COMMENT '字典类型', + status char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (dict_id), + UNIQUE KEY uk_dict_type (dict_type) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典类型表'; + +INSERT INTO sys_dict_type VALUES(1, '用户性别', 'sys_user_sex', '0', 'admin', NOW(), '', NULL, '用户性别列表'); +INSERT INTO sys_dict_type VALUES(2, '菜单状态', 'sys_show_hide', '0', 'admin', NOW(), '', NULL, '菜单状态列表'); +INSERT INTO sys_dict_type VALUES(3, '系统开关', 'sys_normal_disable', '0', 'admin', NOW(), '', NULL, '系统开关列表'); +INSERT INTO sys_dict_type VALUES(4, '任务状态', 'sys_job_status', '0', 'admin', NOW(), '', NULL, '任务状态列表'); +INSERT INTO sys_dict_type VALUES(5, '任务分组', 'sys_job_group', '0', 'admin', NOW(), '', NULL, '任务分组列表'); +INSERT INTO sys_dict_type VALUES(6, '系统是否', 'sys_yes_no', '0', 'admin', NOW(), '', NULL, '系统是否列表'); +INSERT INTO sys_dict_type VALUES(7, '通知类型', 'sys_notice_type', '0', 'admin', NOW(), '', NULL, '通知类型列表'); +INSERT INTO sys_dict_type VALUES(8, '通知状态', 'sys_notice_status', '0', 'admin', NOW(), '', NULL, '通知状态列表'); +INSERT INTO sys_dict_type VALUES(9, '操作类型', 'sys_oper_type', '0', 'admin', NOW(), '', NULL, '操作类型列表'); +INSERT INTO sys_dict_type VALUES(10, '系统状态', 'sys_common_status', '0', 'admin', NOW(), '', NULL, '登录状态列表'); + + +-- ---------------------------- +-- 12、字典数据表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_dict_data; +CREATE TABLE sys_dict_data ( + dict_code bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码', + dict_sort int(4) DEFAULT 0 COMMENT '字典排序', + dict_label varchar(100) DEFAULT '' COMMENT '字典标签', + dict_value varchar(100) DEFAULT '' COMMENT '字典键值', + dict_type varchar(100) DEFAULT '' COMMENT '字典类型', + css_class varchar(100) DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + list_class varchar(100) DEFAULT NULL COMMENT '表格回显样式', + is_default char(1) DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + status char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (dict_code) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典数据表'; + +INSERT INTO sys_dict_data VALUES(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '性别男'); +INSERT INTO sys_dict_data VALUES(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', NOW(), '', NULL, '性别女'); +INSERT INTO sys_dict_data VALUES(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', NOW(), '', NULL, '性别未知'); +INSERT INTO sys_dict_data VALUES(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '显示菜单'); +INSERT INTO sys_dict_data VALUES(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '隐藏菜单'); +INSERT INTO sys_dict_data VALUES(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '正常状态'); +INSERT INTO sys_dict_data VALUES(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '停用状态'); +INSERT INTO sys_dict_data VALUES(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '正常状态'); +INSERT INTO sys_dict_data VALUES(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '停用状态'); +INSERT INTO sys_dict_data VALUES(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '默认分组'); +INSERT INTO sys_dict_data VALUES(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', NOW(), '', NULL, '系统分组'); +INSERT INTO sys_dict_data VALUES(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '系统默认是'); +INSERT INTO sys_dict_data VALUES(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '系统默认否'); +INSERT INTO sys_dict_data VALUES(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', NOW(), '', NULL, '通知'); +INSERT INTO sys_dict_data VALUES(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', NOW(), '', NULL, '公告'); +INSERT INTO sys_dict_data VALUES(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '正常状态'); +INSERT INTO sys_dict_data VALUES(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '关闭状态'); +INSERT INTO sys_dict_data VALUES(18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '其他操作'); +INSERT INTO sys_dict_data VALUES(19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '新增操作'); +INSERT INTO sys_dict_data VALUES(20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '修改操作'); +INSERT INTO sys_dict_data VALUES(21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '删除操作'); +INSERT INTO sys_dict_data VALUES(22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '授权操作'); +INSERT INTO sys_dict_data VALUES(23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '导出操作'); +INSERT INTO sys_dict_data VALUES(24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '导入操作'); +INSERT INTO sys_dict_data VALUES(25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '强退操作'); +INSERT INTO sys_dict_data VALUES(26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '生成操作'); +INSERT INTO sys_dict_data VALUES(27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '清空操作'); +INSERT INTO sys_dict_data VALUES(28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '正常状态'); +INSERT INTO sys_dict_data VALUES(29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '停用状态'); + + +-- ---------------------------- +-- 13、参数配置表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_config; +CREATE TABLE sys_config ( + config_id int(5) NOT NULL AUTO_INCREMENT COMMENT '参数主键', + config_name varchar(100) DEFAULT '' COMMENT '参数名称', + config_key varchar(100) DEFAULT '' COMMENT '参数键名', + config_value varchar(500) DEFAULT '' COMMENT '参数键值', + config_type char(1) DEFAULT 'N' COMMENT '系统内置(Y是 N否)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (config_id) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='参数配置表'; + +INSERT INTO sys_config VALUES(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', NOW(), '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); +INSERT INTO sys_config VALUES(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', NOW(), '', NULL, '初始化密码 123456'); +INSERT INTO sys_config VALUES(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', NOW(), '', NULL, '深色主题theme-dark,浅色主题theme-light'); +INSERT INTO sys_config VALUES(4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', NOW(), '', NULL, '是否开启验证码功能(true开启,false关闭)'); +INSERT INTO sys_config VALUES(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', NOW(), '', NULL, '是否开启注册用户功能(true开启,false关闭)'); +INSERT INTO sys_config VALUES(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', NOW(), '', NULL, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)'); +INSERT INTO sys_config VALUES(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', NOW(), '', NULL, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框'); +INSERT INTO sys_config VALUES(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', NOW(), '', NULL, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框'); +INSERT INTO sys_config VALUES(9, '用户管理-密码字符范围', 'sys.account.chrtype', '0', 'Y', 'admin', NOW(), '', NULL, '默认任意字符范围,0任意(密码可以输入任意字符),1数字(密码只能为0-9数字),2英文字母(密码只能为a-z和A-Z字母),3字母和数字(密码必须包含字母,数字),4字母数字和特殊字符(目前支持的特殊字符包括:~!@#$%^&*()-=_+)'); + + +-- ---------------------------- +-- 14、系统访问记录 +-- ---------------------------- +DROP TABLE IF EXISTS sys_logininfor; +CREATE TABLE sys_logininfor ( + info_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '访问ID', + user_name varchar(50) DEFAULT '' COMMENT '用户账号', + ipaddr varchar(128) DEFAULT '' COMMENT '登录IP地址', + login_location varchar(255) DEFAULT '' COMMENT '登录地点', + browser varchar(50) DEFAULT '' COMMENT '浏览器类型', + os varchar(50) DEFAULT '' COMMENT '操作系统', + status char(1) DEFAULT '0' COMMENT '登录状态(0成功 1失败)', + msg varchar(255) DEFAULT '' COMMENT '提示消息', + login_time datetime COMMENT '访问时间', + PRIMARY KEY (info_id), + KEY idx_sys_logininfor_s (status), + KEY idx_sys_logininfor_lt (login_time) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统访问记录'; + + +-- ---------------------------- +-- 15、定时任务调度表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_job; +CREATE TABLE sys_job ( + job_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID', + job_name varchar(64) DEFAULT '' COMMENT '任务名称', + job_group varchar(64) DEFAULT 'DEFAULT' COMMENT '任务组名', + invoke_target varchar(500) NOT NULL COMMENT '调用目标字符串', + cron_expression varchar(255) DEFAULT '' COMMENT 'cron执行表达式', + misfire_policy varchar(20) DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + concurrent char(1) DEFAULT '1' COMMENT '是否并发执行(0允许 1禁止)', + status char(1) DEFAULT '0' COMMENT '状态(0正常 1暂停)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + remark varchar(500) DEFAULT '' COMMENT '备注信息', + PRIMARY KEY (job_id, job_name, job_group) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时任务调度表'; + +INSERT INTO sys_job VALUES(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', NOW(), '', NULL, ''); +INSERT INTO sys_job VALUES(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(''ry'')', '0/15 * * * * ?', '3', '1', '1', 'admin', NOW(), '', NULL, ''); + + +-- ---------------------------- +-- 16、定时任务日志表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_job_log; +CREATE TABLE sys_job_log ( + job_log_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', + job_name varchar(64) NOT NULL COMMENT '任务名称', + job_group varchar(64) NOT NULL COMMENT '任务组名', + invoke_target varchar(500) DEFAULT '' COMMENT '调用目标字符串', + job_message varchar(500) DEFAULT '' COMMENT '日志信息', + status char(1) DEFAULT '0' COMMENT '执行状态(0成功 1失败)', + exception_info varchar(2000) DEFAULT '' COMMENT '异常信息', + create_time datetime COMMENT '创建时间', + PRIMARY KEY (job_log_id), + KEY idx_sys_job_log_jn (job_name), + KEY idx_sys_job_log_s (status) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时任务日志表'; + + +-- ---------------------------- +-- 17、通知公告表 +-- ---------------------------- +DROP TABLE IF EXISTS sys_notice; +CREATE TABLE sys_notice ( + notice_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '公告ID', + notice_title varchar(50) NOT NULL COMMENT '公告标题', + notice_type char(1) DEFAULT '1' COMMENT '公告类型(1通知 2公告)', + notice_content text COMMENT '公告内容', + status char(1) DEFAULT '0' COMMENT '公告状态(0正常 1关闭)', + create_by varchar(64) DEFAULT '' COMMENT '创建者', + create_time datetime COMMENT '创建时间', + update_by varchar(64) DEFAULT '' COMMENT '更新者', + update_time datetime COMMENT '更新时间', + PRIMARY KEY (notice_id) +) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='通知公告表'; + +INSERT INTO sys_notice VALUES(1, '欢迎使用若依管理系统', '2', '

欢迎使用若依管理系统,这是一个开源的快速开发平台,提供了丰富的功能模块,帮助您快速构建企业级应用。

若依官网:https://ruoyi.vip

', '0', 'admin', NOW(), '', NULL); + + +-- ============================ +-- 工程管理业务表 +-- ============================ + +-- ---------------------------- +-- 供应商信息表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_supplier; +CREATE TABLE engineering_supplier ( + supplier_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '供应商ID', + supplier_code VARCHAR(50) NOT NULL UNIQUE COMMENT '供应商编码', + supplier_name VARCHAR(200) NOT NULL COMMENT '供应商名称', + short_name VARCHAR(100) COMMENT '简称', + contact_person VARCHAR(50) COMMENT '联系人', + contact_phone VARCHAR(20) COMMENT '联系电话', + email VARCHAR(100) COMMENT '邮箱', + address VARCHAR(500) COMMENT '地址', + business_scope TEXT COMMENT '经营范围', + qualification VARCHAR(200) COMMENT '资质证书', + register_capital DECIMAL(18,4) COMMENT '注册资本', + establish_date DATE COMMENT '成立日期', + status VARCHAR(20) DEFAULT 'normal' COMMENT '状态', + cooperation_status VARCHAR(20) DEFAULT 'cooperating' COMMENT '合作状态', + total_contract_amount DECIMAL(18,4) DEFAULT 0 COMMENT '合同总额', + total_payment_amount DECIMAL(18,4) DEFAULT 0 COMMENT '已付款总额', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_supplier_code (supplier_code), + KEY idx_supplier_status (status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='供应商信息表'; + + +-- ---------------------------- +-- 供应商账户表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_supplier_account; +CREATE TABLE engineering_supplier_account ( + account_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '账户ID', + supplier_id BIGINT NOT NULL COMMENT '供应商ID', + bank_name VARCHAR(100) COMMENT '开户行', + account_no VARCHAR(50) COMMENT '账号', + account_name VARCHAR(100) COMMENT '账户名称', + currency VARCHAR(10) DEFAULT 'CNY' COMMENT '币种', + is_default VARCHAR(1) DEFAULT '0' COMMENT '是否默认', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_account_supplier (supplier_id), + CONSTRAINT fk_supplier_account FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='供应商账户表'; + + +-- ---------------------------- +-- 供应商付款记录表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_supplier_payment_record; +CREATE TABLE engineering_supplier_payment_record ( + record_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID', + supplier_id BIGINT NOT NULL COMMENT '供应商ID', + payment_id BIGINT COMMENT '付款单ID', + amount DECIMAL(18,4) NOT NULL COMMENT '付款金额', + payment_date DATE COMMENT '付款日期', + contract_id BIGINT COMMENT '合同ID', + payment_type VARCHAR(20) COMMENT '付款类型', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + KEY idx_payment_record_supplier (supplier_id), + CONSTRAINT fk_payment_record_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='供应商付款记录表'; + + +-- ---------------------------- +-- 合同信息表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_contract; +CREATE TABLE engineering_contract ( + contract_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '合同ID', + contract_no VARCHAR(50) NOT NULL UNIQUE COMMENT '合同编号', + contract_name VARCHAR(200) NOT NULL COMMENT '合同名称', + contract_type VARCHAR(50) COMMENT '合同类型', + supplier_id BIGINT NOT NULL COMMENT '供应商ID', + amount DECIMAL(18,4) NOT NULL COMMENT '合同金额', + paid_amount DECIMAL(18,4) DEFAULT 0 COMMENT '已付金额', + sign_date DATE COMMENT '签订日期', + start_date DATE COMMENT '开始日期', + end_date DATE COMMENT '结束日期', + status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', + contract_file VARCHAR(500) COMMENT '合同文件', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_contract_no (contract_no), + KEY idx_contract_supplier (supplier_id), + CONSTRAINT fk_contract_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='合同信息表'; + + +-- ---------------------------- +-- 合同变更表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_contract_change; +CREATE TABLE engineering_contract_change ( + change_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '变更ID', + contract_id BIGINT NOT NULL COMMENT '合同ID', + change_type VARCHAR(50) COMMENT '变更类型', + change_amount DECIMAL(18,4) COMMENT '变更金额', + reason TEXT COMMENT '变更原因', + status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', + approval_remark TEXT COMMENT '审批备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_contract_change_contract (contract_id), + CONSTRAINT fk_contract_change FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='合同变更表'; + + +-- ---------------------------- +-- 施工进度表(WBS节点) +-- ---------------------------- +DROP TABLE IF EXISTS engineering_construction; +CREATE TABLE engineering_construction ( + construction_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '施工ID', + contract_id BIGINT NOT NULL COMMENT '合同ID', + parent_id BIGINT DEFAULT 0 COMMENT '父节点ID', + node_name VARCHAR(200) NOT NULL COMMENT '节点名称', + node_code VARCHAR(50) COMMENT '节点编码', + node_level INT DEFAULT 1 COMMENT '节点层级', + progress DECIMAL(5,2) DEFAULT 0 COMMENT '进度百分比', + status VARCHAR(20) DEFAULT 'in_progress' COMMENT '状态', + plan_start_date DATE COMMENT '计划开始日期', + plan_end_date DATE COMMENT '计划结束日期', + actual_start_date DATE COMMENT '实际开始日期', + actual_end_date DATE COMMENT '实际结束日期', + acceptance_status VARCHAR(20) DEFAULT 'not_submitted' COMMENT '验收状态', + acceptance_result VARCHAR(20) COMMENT '验收结果', + acceptance_date DATE COMMENT '验收日期', + acceptance_remark TEXT COMMENT '验收备注', + sort_order INT DEFAULT 0 COMMENT '排序', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_construction_contract (contract_id), + KEY idx_construction_parent (parent_id), + CONSTRAINT fk_construction_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id) ON DELETE CASCADE, + CONSTRAINT fk_construction_parent FOREIGN KEY (parent_id) REFERENCES engineering_construction(construction_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='施工进度表'; + + +-- ---------------------------- +-- 物料信息表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_material; +CREATE TABLE engineering_material ( + material_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '物料ID', + material_code VARCHAR(50) NOT NULL UNIQUE COMMENT '物料编码', + material_name VARCHAR(200) NOT NULL COMMENT '物料名称', + specification VARCHAR(200) COMMENT '规格型号', + unit VARCHAR(20) COMMENT '单位', + stock DECIMAL(18,4) DEFAULT 0 COMMENT '库存数量', + min_stock DECIMAL(18,4) DEFAULT 0 COMMENT '最低库存', + category VARCHAR(50) COMMENT '类别', + location VARCHAR(200) COMMENT '存放位置', + status VARCHAR(20) DEFAULT 'normal' COMMENT '状态', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_material_code (material_code), + KEY idx_material_category (category) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物料信息表'; + + +-- ---------------------------- +-- 物料入库表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_material_in; +CREATE TABLE engineering_material_in ( + in_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '入库ID', + material_id BIGINT NOT NULL COMMENT '物料ID', + quantity DECIMAL(18,4) NOT NULL COMMENT '入库数量', + price DECIMAL(18,4) COMMENT '单价', + total_amount DECIMAL(18,4) COMMENT '总金额', + in_date DATE COMMENT '入库日期', + supplier_id BIGINT COMMENT '供应商ID', + batch_no VARCHAR(50) COMMENT '批次号', + expiry_date DATE COMMENT '有效期', + location VARCHAR(200) COMMENT '存放位置', + status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_material_in_material (material_id), + CONSTRAINT fk_material_in_material FOREIGN KEY (material_id) REFERENCES engineering_material(material_id), + CONSTRAINT fk_material_in_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物料入库表'; + + +-- ---------------------------- +-- 物料出库表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_material_out; +CREATE TABLE engineering_material_out ( + out_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '出库ID', + material_id BIGINT NOT NULL COMMENT '物料ID', + quantity DECIMAL(18,4) NOT NULL COMMENT '出库数量', + price DECIMAL(18,4) COMMENT '单价', + total_amount DECIMAL(18,4) COMMENT '总金额', + out_date DATE COMMENT '出库日期', + contract_id BIGINT COMMENT '合同ID', + construction_id BIGINT COMMENT '施工节点ID', + use_purpose VARCHAR(200) COMMENT '用途', + status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_material_out_material (material_id), + CONSTRAINT fk_material_out_material FOREIGN KEY (material_id) REFERENCES engineering_material(material_id), + CONSTRAINT fk_material_out_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id), + CONSTRAINT fk_material_out_construction FOREIGN KEY (construction_id) REFERENCES engineering_construction(construction_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='物料出库表'; + + +-- ---------------------------- +-- 付款申请表 +-- ---------------------------- +DROP TABLE IF EXISTS engineering_payment; +CREATE TABLE engineering_payment ( + payment_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '付款ID', + contract_id BIGINT NOT NULL COMMENT '合同ID', + supplier_id BIGINT NOT NULL COMMENT '供应商ID', + amount DECIMAL(18,4) NOT NULL COMMENT '付款金额', + payment_date DATE COMMENT '付款日期', + payment_type VARCHAR(20) COMMENT '付款类型', + payment_method VARCHAR(20) COMMENT '付款方式', + bank_account VARCHAR(100) COMMENT '收款账户', + status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', + remark TEXT COMMENT '备注', + del_flag CHAR(1) DEFAULT '0' COMMENT '删除标志', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_payment_contract (contract_id), + KEY idx_payment_supplier (supplier_id), + CONSTRAINT fk_payment_contract FOREIGN KEY (contract_id) REFERENCES engineering_contract(contract_id), + CONSTRAINT fk_payment_supplier FOREIGN KEY (supplier_id) REFERENCES engineering_supplier(supplier_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='付款申请表'; + +COMMIT; \ No newline at end of file