【同步】BOOT 和 CLOUD 的功能
This commit is contained in:
+1248
-869
File diff suppressed because it is too large
Load Diff
+613
-179
File diff suppressed because it is too large
Load Diff
+613
-179
File diff suppressed because it is too large
Load Diff
+729
-296
File diff suppressed because it is too large
Load Diff
+197
-242
@@ -1,253 +1,208 @@
|
|||||||
-- ----------------------------
|
-- https://github.com/quartz-scheduler/quartz/blob/main/quartz/src/main/resources/org/quartz/impl/jdbcjobstore/tables_postgres.sql
|
||||||
-- qrtz_blob_triggers
|
-- Thanks to Patrick Lightbody for submitting this...
|
||||||
-- ----------------------------
|
--
|
||||||
CREATE TABLE qrtz_blob_triggers
|
-- In your Quartz properties file, you'll need to set
|
||||||
|
-- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_LOCKS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_CALENDARS;
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_JOB_DETAILS
|
||||||
(
|
(
|
||||||
sched_name varchar(120) NOT NULL,
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
trigger_name varchar(190) NOT NULL,
|
JOB_NAME VARCHAR(200) NOT NULL,
|
||||||
trigger_group varchar(190) NOT NULL,
|
JOB_GROUP VARCHAR(200) NOT NULL,
|
||||||
blob_data bytea NULL,
|
DESCRIPTION VARCHAR(250) NULL,
|
||||||
PRIMARY KEY (sched_name, trigger_name, trigger_group)
|
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
|
||||||
|
IS_DURABLE BOOL NOT NULL,
|
||||||
|
IS_NONCONCURRENT BOOL NOT NULL,
|
||||||
|
IS_UPDATE_DATA BOOL NOT NULL,
|
||||||
|
REQUESTS_RECOVERY BOOL NOT NULL,
|
||||||
|
JOB_DATA BYTEA NULL,
|
||||||
|
PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX idx_qrtz_blob_triggers_sched_name ON qrtz_blob_triggers (sched_name, trigger_name, trigger_group);
|
CREATE TABLE QRTZ_TRIGGERS
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_calendars
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_calendars
|
|
||||||
(
|
(
|
||||||
sched_name varchar(120) NOT NULL,
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
calendar_name varchar(190) NOT NULL,
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
calendar bytea NOT NULL,
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
PRIMARY KEY (sched_name, calendar_name)
|
JOB_NAME VARCHAR(200) NOT NULL,
|
||||||
|
JOB_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
DESCRIPTION VARCHAR(250) NULL,
|
||||||
|
NEXT_FIRE_TIME BIGINT NULL,
|
||||||
|
PREV_FIRE_TIME BIGINT NULL,
|
||||||
|
PRIORITY INTEGER NULL,
|
||||||
|
TRIGGER_STATE VARCHAR(16) NOT NULL,
|
||||||
|
TRIGGER_TYPE VARCHAR(8) NOT NULL,
|
||||||
|
START_TIME BIGINT NOT NULL,
|
||||||
|
END_TIME BIGINT NULL,
|
||||||
|
CALENDAR_NAME VARCHAR(200) NULL,
|
||||||
|
MISFIRE_INSTR SMALLINT NULL,
|
||||||
|
JOB_DATA BYTEA NULL,
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_SIMPLE_TRIGGERS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
REPEAT_COUNT BIGINT NOT NULL,
|
||||||
|
REPEAT_INTERVAL BIGINT NOT NULL,
|
||||||
|
TIMES_TRIGGERED BIGINT NOT NULL,
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_CRON_TRIGGERS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
CRON_EXPRESSION VARCHAR(120) NOT NULL,
|
||||||
|
TIME_ZONE_ID VARCHAR(80),
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
STR_PROP_1 VARCHAR(512) NULL,
|
||||||
|
STR_PROP_2 VARCHAR(512) NULL,
|
||||||
|
STR_PROP_3 VARCHAR(512) NULL,
|
||||||
|
INT_PROP_1 INT NULL,
|
||||||
|
INT_PROP_2 INT NULL,
|
||||||
|
LONG_PROP_1 BIGINT NULL,
|
||||||
|
LONG_PROP_2 BIGINT NULL,
|
||||||
|
DEC_PROP_1 NUMERIC(13, 4) NULL,
|
||||||
|
DEC_PROP_2 NUMERIC(13, 4) NULL,
|
||||||
|
BOOL_PROP_1 BOOL NULL,
|
||||||
|
BOOL_PROP_2 BOOL NULL,
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_BLOB_TRIGGERS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
BLOB_DATA BYTEA NULL,
|
||||||
|
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)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_CALENDARS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
CALENDAR_NAME VARCHAR(200) NOT NULL,
|
||||||
|
CALENDAR BYTEA NOT NULL,
|
||||||
|
PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
|
||||||
-- qrtz_cron_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_cron_triggers
|
|
||||||
(
|
(
|
||||||
sched_name varchar(120) NOT NULL,
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
trigger_name varchar(190) NOT NULL,
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
trigger_group varchar(190) NOT NULL,
|
PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
|
||||||
cron_expression varchar(120) NOT NULL,
|
|
||||||
time_zone_id varchar(80) NULL DEFAULT NULL,
|
|
||||||
PRIMARY KEY (sched_name, trigger_name, trigger_group)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
-- @formatter:off
|
CREATE TABLE QRTZ_FIRED_TRIGGERS
|
||||||
BEGIN;
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
ENTRY_ID VARCHAR(95) NOT NULL,
|
||||||
|
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||||
|
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||||
|
INSTANCE_NAME VARCHAR(200) NOT NULL,
|
||||||
|
FIRED_TIME BIGINT NOT NULL,
|
||||||
|
SCHED_TIME BIGINT NOT NULL,
|
||||||
|
PRIORITY INTEGER NOT NULL,
|
||||||
|
STATE VARCHAR(16) NOT NULL,
|
||||||
|
JOB_NAME VARCHAR(200) NULL,
|
||||||
|
JOB_GROUP VARCHAR(200) NULL,
|
||||||
|
IS_NONCONCURRENT BOOL NULL,
|
||||||
|
REQUESTS_RECOVERY BOOL NULL,
|
||||||
|
PRIMARY KEY (SCHED_NAME, ENTRY_ID)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_SCHEDULER_STATE
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
INSTANCE_NAME VARCHAR(200) NOT NULL,
|
||||||
|
LAST_CHECKIN_TIME BIGINT NOT NULL,
|
||||||
|
CHECKIN_INTERVAL BIGINT NOT NULL,
|
||||||
|
PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE QRTZ_LOCKS
|
||||||
|
(
|
||||||
|
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||||
|
LOCK_NAME VARCHAR(40) NOT NULL,
|
||||||
|
PRIMARY KEY (SCHED_NAME, LOCK_NAME)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY
|
||||||
|
ON QRTZ_JOB_DETAILS (SCHED_NAME, REQUESTS_RECOVERY);
|
||||||
|
CREATE INDEX IDX_QRTZ_J_GRP
|
||||||
|
ON QRTZ_JOB_DETAILS (SCHED_NAME, JOB_GROUP);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_QRTZ_T_J
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_JG
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, JOB_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_C
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, CALENDAR_NAME);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_G
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_STATE
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_N_STATE
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_N_G_STATE
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, NEXT_FIRE_TIME);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_NFT_ST
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);
|
||||||
|
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP
|
||||||
|
ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME);
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_J_G
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_JG
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_T_G
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);
|
||||||
|
CREATE INDEX IDX_QRTZ_FT_TG
|
||||||
|
ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
|
||||||
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
-- @formatter:on
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_fired_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_fired_triggers
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
entry_id varchar(95) NOT NULL,
|
|
||||||
trigger_name varchar(190) NOT NULL,
|
|
||||||
trigger_group varchar(190) NOT NULL,
|
|
||||||
instance_name varchar(190) NOT NULL,
|
|
||||||
fired_time int8 NOT NULL,
|
|
||||||
sched_time int8 NOT NULL,
|
|
||||||
priority int4 NOT NULL,
|
|
||||||
state varchar(16) NOT NULL,
|
|
||||||
job_name varchar(190) NULL DEFAULT NULL,
|
|
||||||
job_group varchar(190) NULL DEFAULT NULL,
|
|
||||||
is_nonconcurrent varchar(1) NULL DEFAULT NULL,
|
|
||||||
requests_recovery varchar(1) NULL DEFAULT NULL,
|
|
||||||
PRIMARY KEY (sched_name, entry_id)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX idx_qrtz_ft_trig_inst_name ON qrtz_fired_triggers (sched_name, instance_name);
|
|
||||||
CREATE INDEX idx_qrtz_ft_inst_job_req_rcvry ON qrtz_fired_triggers (sched_name, instance_name, requests_recovery);
|
|
||||||
CREATE INDEX idx_qrtz_ft_j_g ON qrtz_fired_triggers (sched_name, job_name, job_group);
|
|
||||||
CREATE INDEX idx_qrtz_ft_jg ON qrtz_fired_triggers (sched_name, job_group);
|
|
||||||
CREATE INDEX idx_qrtz_ft_t_g ON qrtz_fired_triggers (sched_name, trigger_name, trigger_group);
|
|
||||||
CREATE INDEX idx_qrtz_ft_tg ON qrtz_fired_triggers (sched_name, trigger_group);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_job_details
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_job_details
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
job_name varchar(190) NOT NULL,
|
|
||||||
job_group varchar(190) NOT NULL,
|
|
||||||
description varchar(250) NULL DEFAULT NULL,
|
|
||||||
job_class_name varchar(250) NOT NULL,
|
|
||||||
is_durable varchar(1) NOT NULL,
|
|
||||||
is_nonconcurrent varchar(1) NOT NULL,
|
|
||||||
is_update_data varchar(1) NOT NULL,
|
|
||||||
requests_recovery varchar(1) NOT NULL,
|
|
||||||
job_data bytea NULL,
|
|
||||||
PRIMARY KEY (sched_name, job_name, job_group)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX idx_qrtz_j_req_recovery ON qrtz_job_details (sched_name, requests_recovery);
|
|
||||||
CREATE INDEX idx_qrtz_j_grp ON qrtz_job_details (sched_name, job_group);
|
|
||||||
|
|
||||||
-- @formatter:off
|
|
||||||
BEGIN;
|
|
||||||
COMMIT;
|
|
||||||
-- @formatter:on
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_locks
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_locks
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
lock_name varchar(40) NOT NULL,
|
|
||||||
PRIMARY KEY (sched_name, lock_name)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- @formatter:off
|
|
||||||
BEGIN;
|
|
||||||
COMMIT;
|
|
||||||
-- @formatter:on
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_paused_trigger_grps
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_paused_trigger_grps
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
trigger_group varchar(190) NOT NULL,
|
|
||||||
PRIMARY KEY (sched_name, trigger_group)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_scheduler_state
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_scheduler_state
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
instance_name varchar(190) NOT NULL,
|
|
||||||
last_checkin_time int8 NOT NULL,
|
|
||||||
checkin_interval int8 NOT NULL,
|
|
||||||
PRIMARY KEY (sched_name, instance_name)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- @formatter:off
|
|
||||||
BEGIN;
|
|
||||||
COMMIT;
|
|
||||||
-- @formatter:on
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_simple_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_simple_triggers
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
trigger_name varchar(190) NOT NULL,
|
|
||||||
trigger_group varchar(190) NOT NULL,
|
|
||||||
repeat_count int8 NOT NULL,
|
|
||||||
repeat_interval int8 NOT NULL,
|
|
||||||
times_triggered int8 NOT NULL,
|
|
||||||
PRIMARY KEY (sched_name, trigger_name, trigger_group)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_simprop_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_simprop_triggers
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
trigger_name varchar(190) NOT NULL,
|
|
||||||
trigger_group varchar(190) NOT NULL,
|
|
||||||
str_prop_1 varchar(512) NULL DEFAULT NULL,
|
|
||||||
str_prop_2 varchar(512) NULL DEFAULT NULL,
|
|
||||||
str_prop_3 varchar(512) NULL DEFAULT NULL,
|
|
||||||
int_prop_1 int4 NULL DEFAULT NULL,
|
|
||||||
int_prop_2 int4 NULL DEFAULT NULL,
|
|
||||||
long_prop_1 int8 NULL DEFAULT NULL,
|
|
||||||
long_prop_2 int8 NULL DEFAULT NULL,
|
|
||||||
dec_prop_1 numeric(13, 4) NULL DEFAULT NULL,
|
|
||||||
dec_prop_2 numeric(13, 4) NULL DEFAULT NULL,
|
|
||||||
bool_prop_1 varchar(1) NULL DEFAULT NULL,
|
|
||||||
bool_prop_2 varchar(1) NULL DEFAULT NULL,
|
|
||||||
PRIMARY KEY (sched_name, trigger_name, trigger_group)
|
|
||||||
);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- qrtz_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE qrtz_triggers
|
|
||||||
(
|
|
||||||
sched_name varchar(120) NOT NULL,
|
|
||||||
trigger_name varchar(190) NOT NULL,
|
|
||||||
trigger_group varchar(190) NOT NULL,
|
|
||||||
job_name varchar(190) NOT NULL,
|
|
||||||
job_group varchar(190) NOT NULL,
|
|
||||||
description varchar(250) NULL DEFAULT NULL,
|
|
||||||
next_fire_time int8 NULL DEFAULT NULL,
|
|
||||||
prev_fire_time int8 NULL DEFAULT NULL,
|
|
||||||
priority int4 NULL DEFAULT NULL,
|
|
||||||
trigger_state varchar(16) NOT NULL,
|
|
||||||
trigger_type varchar(8) NOT NULL,
|
|
||||||
start_time int8 NOT NULL,
|
|
||||||
end_time int8 NULL DEFAULT NULL,
|
|
||||||
calendar_name varchar(190) NULL DEFAULT NULL,
|
|
||||||
misfire_instr int2 NULL DEFAULT NULL,
|
|
||||||
job_data bytea NULL,
|
|
||||||
PRIMARY KEY (sched_name, trigger_name, trigger_group)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX idx_qrtz_t_j ON qrtz_triggers (sched_name, job_name, job_group);
|
|
||||||
CREATE INDEX idx_qrtz_t_jg ON qrtz_triggers (sched_name, job_group);
|
|
||||||
CREATE INDEX idx_qrtz_t_c ON qrtz_triggers (sched_name, calendar_name);
|
|
||||||
CREATE INDEX idx_qrtz_t_g ON qrtz_triggers (sched_name, trigger_group);
|
|
||||||
CREATE INDEX idx_qrtz_t_state ON qrtz_triggers (sched_name, trigger_state);
|
|
||||||
CREATE INDEX idx_qrtz_t_n_state ON qrtz_triggers (sched_name, trigger_name, trigger_group, trigger_state);
|
|
||||||
CREATE INDEX idx_qrtz_t_n_g_state ON qrtz_triggers (sched_name, trigger_group, trigger_state);
|
|
||||||
CREATE INDEX idx_qrtz_t_next_fire_time ON qrtz_triggers (sched_name, next_fire_time);
|
|
||||||
CREATE INDEX idx_qrtz_t_nft_st ON qrtz_triggers (sched_name, trigger_state, next_fire_time);
|
|
||||||
CREATE INDEX idx_qrtz_t_nft_misfire ON qrtz_triggers (sched_name, misfire_instr, next_fire_time);
|
|
||||||
CREATE INDEX idx_qrtz_t_nft_st_misfire ON qrtz_triggers (sched_name, misfire_instr, next_fire_time, trigger_state);
|
|
||||||
CREATE INDEX idx_qrtz_t_nft_st_misfire_grp ON qrtz_triggers (sched_name, misfire_instr, next_fire_time, trigger_group,
|
|
||||||
trigger_state);
|
|
||||||
|
|
||||||
-- @formatter:off
|
|
||||||
BEGIN;
|
|
||||||
COMMIT;
|
|
||||||
-- @formatter:on
|
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- FK: qrtz_blob_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE qrtz_blob_triggers
|
|
||||||
ADD CONSTRAINT qrtz_blob_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name,
|
|
||||||
trigger_name,
|
|
||||||
trigger_group);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- FK: qrtz_cron_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE qrtz_cron_triggers
|
|
||||||
ADD CONSTRAINT qrtz_cron_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- FK: qrtz_simple_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE qrtz_simple_triggers
|
|
||||||
ADD CONSTRAINT qrtz_simple_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name,
|
|
||||||
trigger_name,
|
|
||||||
trigger_group);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- FK: qrtz_simprop_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE qrtz_simprop_triggers
|
|
||||||
ADD CONSTRAINT qrtz_simprop_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES qrtz_triggers (sched_name, trigger_name, trigger_group);
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- FK: qrtz_triggers
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE qrtz_triggers
|
|
||||||
ADD CONSTRAINT qrtz_triggers_ibfk_1 FOREIGN KEY (sched_name, job_name, job_group) REFERENCES qrtz_job_details (sched_name, job_name, job_group);
|
|
||||||
|
|||||||
+521
-184
File diff suppressed because it is too large
Load Diff
+1075
-184
File diff suppressed because it is too large
Load Diff
+142
-44
@@ -4,6 +4,14 @@
|
|||||||
Author: dhb52 (https://gitee.com/dhb52)
|
Author: dhb52 (https://gitee.com/dhb52)
|
||||||
|
|
||||||
pip install simple-ddl-parser
|
pip install simple-ddl-parser
|
||||||
|
|
||||||
|
or with uv
|
||||||
|
uv run --with simple-ddl-parser convertor.py postgres > ../postgresql/ruoyi-vue-pro.sql 239ms 四 5/22 21:03:16 2025
|
||||||
|
uv run --with simple-ddl-parser convertor.py sqlserver > ../sqlserver/ruoyi-vue-pro.sql
|
||||||
|
uv run --with simple-ddl-parser convertor.py kingbase > ../kingbase/ruoyi-vue-pro.sql
|
||||||
|
uv run --with simple-ddl-parser convertor.py opengauss > ../opengauss/ruoyi-vue-pro.sql
|
||||||
|
uv run --with simple-ddl-parser convertor.py oracle > ../oracle/ruoyi-vue-pro.sql
|
||||||
|
uv run --with simple-ddl-parser convertor.py dm8 > ../dm/ruoyi-vue-pro-dm8.sql
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -38,6 +46,7 @@ def load_and_clean(sql_file: str) -> str:
|
|||||||
str: 清理后的sql文件内容
|
str: 清理后的sql文件内容
|
||||||
"""
|
"""
|
||||||
REPLACE_PAIR_LIST = (
|
REPLACE_PAIR_LIST = (
|
||||||
|
(")\nVALUES ", ") VALUES "),
|
||||||
(" CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ", " "),
|
(" CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ", " "),
|
||||||
(" KEY `", " INDEX `"),
|
(" KEY `", " INDEX `"),
|
||||||
("UNIQUE INDEX", "UNIQUE KEY"),
|
("UNIQUE INDEX", "UNIQUE KEY"),
|
||||||
@@ -45,7 +54,7 @@ def load_and_clean(sql_file: str) -> str:
|
|||||||
("b'1'", "'1'"),
|
("b'1'", "'1'"),
|
||||||
)
|
)
|
||||||
|
|
||||||
content = open(sql_file).read()
|
content = open(sql_file, encoding="utf-8").read()
|
||||||
for replace_pair in REPLACE_PAIR_LIST:
|
for replace_pair in REPLACE_PAIR_LIST:
|
||||||
content = content.replace(*replace_pair)
|
content = content.replace(*replace_pair)
|
||||||
content = re.sub(r"ENGINE.*COMMENT", "COMMENT", content)
|
content = re.sub(r"ENGINE.*COMMENT", "COMMENT", content)
|
||||||
@@ -110,18 +119,28 @@ class Convertor(ABC):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def gen_comment(self, table_sql: str, table_name: str) -> str:
|
def gen_comment(self, table_ddl: Dict) -> str:
|
||||||
"""生成字段/表注释
|
"""生成字段/表注释
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
table_sql (str): 原始表SQL
|
table_ddl (Dict): 表DDL
|
||||||
table_name (str): 表名
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: 生成脚本
|
str: 生成脚本
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def gen_uk(self, table_ddl: Dict) -> str:
|
||||||
|
"""生成
|
||||||
|
|
||||||
|
Args:
|
||||||
|
table_ddl (Dict): 表DDL
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 生成脚本
|
||||||
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def gen_insert(self, table_name: str) -> str:
|
def gen_insert(self, table_name: str) -> str:
|
||||||
"""生成 insert 语句块
|
"""生成 insert 语句块
|
||||||
@@ -178,6 +197,16 @@ class Convertor(ABC):
|
|||||||
table_name = ddl["table_name"].lower()
|
table_name = ddl["table_name"].lower()
|
||||||
yield f"CREATE INDEX idx_{table_name}_{no:02d} ON {table_name} ({columns})"
|
yield f"CREATE INDEX idx_{table_name}_{no:02d} ON {table_name} ({columns})"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def unique_index(ddl: Dict) -> Generator:
|
||||||
|
if "constraints" in ddl and "uniques" in ddl["constraints"]:
|
||||||
|
uk_list = ddl["constraints"]["uniques"]
|
||||||
|
for uk in uk_list:
|
||||||
|
table_name = ddl["table_name"]
|
||||||
|
uk_name = uk["constraint_name"]
|
||||||
|
uk_columns = uk["columns"]
|
||||||
|
yield table_name, uk_name, uk_columns
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def filed_comments(table_sql: str) -> Generator:
|
def filed_comments(table_sql: str) -> Generator:
|
||||||
for line in table_sql.split("\n"):
|
for line in table_sql.split("\n"):
|
||||||
@@ -188,7 +217,7 @@ class Convertor(ABC):
|
|||||||
yield field, comment_string
|
yield field, comment_string
|
||||||
|
|
||||||
def table_comment(self, table_sql: str) -> str:
|
def table_comment(self, table_sql: str) -> str:
|
||||||
match = re.search(r"COMMENT \= '([^']+)';", table_sql)
|
match = re.search(r"COMMENT \='([^']+)';", table_sql)
|
||||||
return match.group(1) if match else None
|
return match.group(1) if match else None
|
||||||
|
|
||||||
def print(self):
|
def print(self):
|
||||||
@@ -226,11 +255,21 @@ class Convertor(ABC):
|
|||||||
if table_name.lower().startswith("qrtz"):
|
if table_name.lower().startswith("qrtz"):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 为每个表生成个5个基本部分
|
# 解析注释
|
||||||
|
for column in table_ddl["columns"]:
|
||||||
|
column["comment"] = bytes(column["comment"], "utf-8").decode(
|
||||||
|
"unicode_escape"
|
||||||
|
)[1:-1]
|
||||||
|
table_ddl["comment"] = bytes(table_ddl["comment"], "utf-8").decode(
|
||||||
|
"unicode_escape"
|
||||||
|
)[1:-1]
|
||||||
|
|
||||||
|
# 为每个表生成个6个基本部分
|
||||||
create = self.gen_create(table_ddl)
|
create = self.gen_create(table_ddl)
|
||||||
pk = self.gen_pk(table_name)
|
pk = self.gen_pk(table_name)
|
||||||
|
uk = self.gen_uk(table_ddl)
|
||||||
index = self.gen_index(table_ddl)
|
index = self.gen_index(table_ddl)
|
||||||
comment = self.gen_comment(table_sql, table_name)
|
comment = self.gen_comment(table_ddl)
|
||||||
inserts = self.gen_insert(table_name)
|
inserts = self.gen_insert(table_name)
|
||||||
|
|
||||||
# 组合当前表的DDL脚本
|
# 组合当前表的DDL脚本
|
||||||
@@ -238,6 +277,8 @@ class Convertor(ABC):
|
|||||||
|
|
||||||
{pk}
|
{pk}
|
||||||
|
|
||||||
|
{uk}
|
||||||
|
|
||||||
{index}
|
{index}
|
||||||
|
|
||||||
{comment}
|
{comment}
|
||||||
@@ -267,17 +308,19 @@ class PostgreSQLConvertor(Convertor):
|
|||||||
|
|
||||||
if type == "varchar":
|
if type == "varchar":
|
||||||
return f"varchar({size})"
|
return f"varchar({size})"
|
||||||
if type == "int":
|
if type in ("int", "int unsigned"):
|
||||||
return "int4"
|
return "int4"
|
||||||
if type == "bigint" or type == "bigint unsigned":
|
if type in ("bigint", "bigint unsigned"):
|
||||||
return "int8"
|
return "int8"
|
||||||
if type == "datetime":
|
if type == "datetime":
|
||||||
return "timestamp"
|
return "timestamp"
|
||||||
|
if type == "timestamp":
|
||||||
|
return f"timestamp({size})"
|
||||||
if type == "bit":
|
if type == "bit":
|
||||||
return "bool"
|
return "bool"
|
||||||
if type in ("tinyint", "smallint"):
|
if type in ("tinyint", "smallint"):
|
||||||
return "int2"
|
return "int2"
|
||||||
if type == "text":
|
if type in ("text", "longtext"):
|
||||||
return "text"
|
return "text"
|
||||||
if type in ("blob", "mediumblob"):
|
if type in ("blob", "mediumblob"):
|
||||||
return "bytea"
|
return "bytea"
|
||||||
@@ -316,18 +359,22 @@ CREATE TABLE {table_name} (
|
|||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_index(self, ddl: Dict) -> str:
|
||||||
return "\n".join(f"{script};" for script in self.index(ddl))
|
return "\n".join(f"{script};" for script in self.index(ddl))
|
||||||
|
|
||||||
def gen_comment(self, table_sql: str, table_name: str) -> str:
|
def gen_comment(self, table_ddl: Dict) -> str:
|
||||||
"""生成字段及表的注释"""
|
"""生成字段及表的注释"""
|
||||||
|
|
||||||
script = ""
|
script = ""
|
||||||
for field, comment_string in self.filed_comments(table_sql):
|
for column in table_ddl["columns"]:
|
||||||
|
table_comment = column["comment"]
|
||||||
script += (
|
script += (
|
||||||
f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n"
|
f"COMMENT ON COLUMN {table_ddl['table_name']}.{column['name']} IS '{table_comment}';"
|
||||||
|
+ "\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
table_comment = self.table_comment(table_sql)
|
table_comment = table_ddl["comment"]
|
||||||
if table_comment:
|
if table_comment:
|
||||||
script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n"
|
script += (
|
||||||
|
f"COMMENT ON TABLE {table_ddl['table_name']} IS '{table_comment}';\n"
|
||||||
|
)
|
||||||
|
|
||||||
return script
|
return script
|
||||||
|
|
||||||
@@ -335,6 +382,15 @@ CREATE TABLE {table_name} (
|
|||||||
"""生成主键定义"""
|
"""生成主键定义"""
|
||||||
return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n"
|
return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n"
|
||||||
|
|
||||||
|
def gen_uk(self, table_ddl: Dict) -> str:
|
||||||
|
script = ""
|
||||||
|
uk_list = list(Convertor.unique_index(table_ddl))
|
||||||
|
for idx, (table_name, _, uk_columns) in enumerate(uk_list, 1):
|
||||||
|
uk_name = f"uk_{table_name}_{idx:02d}"
|
||||||
|
script += f"CREATE UNIQUE INDEX {uk_name} ON {table_name} ({', '.join(uk_columns)});\n"
|
||||||
|
|
||||||
|
return script
|
||||||
|
|
||||||
def gen_insert(self, table_name: str) -> str:
|
def gen_insert(self, table_name: str) -> str:
|
||||||
"""生成 insert 语句,以及根据最后的 insert id+1 生成 Sequence"""
|
"""生成 insert 语句,以及根据最后的 insert id+1 生成 Sequence"""
|
||||||
|
|
||||||
@@ -393,17 +449,19 @@ class OracleConvertor(Convertor):
|
|||||||
|
|
||||||
if type == "varchar":
|
if type == "varchar":
|
||||||
return f"varchar2({size if size < 4000 else 4000})"
|
return f"varchar2({size if size < 4000 else 4000})"
|
||||||
if type == "int":
|
if type in ("int", "int unsigned"):
|
||||||
return "number"
|
return "number"
|
||||||
if type == "bigint" or type == "bigint unsigned":
|
if type == "bigint" or type == "bigint unsigned":
|
||||||
return "number"
|
return "number"
|
||||||
if type == "datetime":
|
if type == "datetime":
|
||||||
return "date"
|
return "date"
|
||||||
|
if type == "timestamp":
|
||||||
|
return f"timestamp({size})"
|
||||||
if type == "bit":
|
if type == "bit":
|
||||||
return "number(1,0)"
|
return "number(1,0)"
|
||||||
if type in ("tinyint", "smallint"):
|
if type in ("tinyint", "smallint"):
|
||||||
return "smallint"
|
return "smallint"
|
||||||
if type == "text":
|
if type in ("text", "longtext"):
|
||||||
return "clob"
|
return "clob"
|
||||||
if type in ("blob", "mediumblob"):
|
if type in ("blob", "mediumblob"):
|
||||||
return "blob"
|
return "blob"
|
||||||
@@ -423,6 +481,8 @@ class OracleConvertor(Convertor):
|
|||||||
type = col["type"].lower()
|
type = col["type"].lower()
|
||||||
full_type = self.translate_type(type, col["size"])
|
full_type = self.translate_type(type, col["size"])
|
||||||
nullable = "NULL" if col["nullable"] else "NOT NULL"
|
nullable = "NULL" if col["nullable"] else "NOT NULL"
|
||||||
|
# Oracle的 INSERT '' 不能通过NOT NULL校验,因此对文字类型字段覆写为 NULL
|
||||||
|
nullable = "NULL" if type in ("varchar", "text", "longtext") else nullable
|
||||||
default = f"DEFAULT {col['default']}" if col["default"] is not None else ""
|
default = f"DEFAULT {col['default']}" if col["default"] is not None else ""
|
||||||
# Oracle 中 size 不能作为字段名
|
# Oracle 中 size 不能作为字段名
|
||||||
field_name = '"size"' if name == "size" else name
|
field_name = '"size"' if name == "size" else name
|
||||||
@@ -447,16 +507,20 @@ CREATE TABLE {table_name} (
|
|||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_index(self, ddl: Dict) -> str:
|
||||||
return "\n".join(f"{script};" for script in self.index(ddl))
|
return "\n".join(f"{script};" for script in self.index(ddl))
|
||||||
|
|
||||||
def gen_comment(self, table_sql: str, table_name: str) -> str:
|
def gen_comment(self, table_ddl: Dict) -> str:
|
||||||
script = ""
|
script = ""
|
||||||
for field, comment_string in self.filed_comments(table_sql):
|
for column in table_ddl["columns"]:
|
||||||
|
table_comment = column["comment"]
|
||||||
script += (
|
script += (
|
||||||
f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n"
|
f"COMMENT ON COLUMN {table_ddl['table_name']}.{column['name']} IS '{table_comment}';"
|
||||||
|
+ "\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
table_comment = self.table_comment(table_sql)
|
table_comment = table_ddl["comment"]
|
||||||
if table_comment:
|
if table_comment:
|
||||||
script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n"
|
script += (
|
||||||
|
f"COMMENT ON TABLE {table_ddl['table_name']} IS '{table_comment}';\n"
|
||||||
|
)
|
||||||
|
|
||||||
return script
|
return script
|
||||||
|
|
||||||
@@ -464,6 +528,15 @@ CREATE TABLE {table_name} (
|
|||||||
"""生成主键定义"""
|
"""生成主键定义"""
|
||||||
return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n"
|
return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n"
|
||||||
|
|
||||||
|
def gen_uk(self, table_ddl: Dict) -> str:
|
||||||
|
script = ""
|
||||||
|
uk_list = list(Convertor.unique_index(table_ddl))
|
||||||
|
for idx, (table_name, _, uk_columns) in enumerate(uk_list, 1):
|
||||||
|
uk_name = f"uk_{table_name}_{idx:02d}"
|
||||||
|
script += f"CREATE UNIQUE INDEX {uk_name} ON {table_name} ({', '.join(uk_columns)});\n"
|
||||||
|
|
||||||
|
return script
|
||||||
|
|
||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_index(self, ddl: Dict) -> str:
|
||||||
return "\n".join(f"{script};" for script in self.index(ddl))
|
return "\n".join(f"{script};" for script in self.index(ddl))
|
||||||
|
|
||||||
@@ -521,17 +594,17 @@ class SQLServerConvertor(Convertor):
|
|||||||
|
|
||||||
if type == "varchar":
|
if type == "varchar":
|
||||||
return f"nvarchar({size if size < 4000 else 4000})"
|
return f"nvarchar({size if size < 4000 else 4000})"
|
||||||
if type == "int":
|
if type in ("int", "int unsigned"):
|
||||||
return "int"
|
return "int"
|
||||||
if type == "bigint" or type == "bigint unsigned":
|
if type in ("bigint", "bigint unsigned"):
|
||||||
return "bigint"
|
return "bigint"
|
||||||
if type == "datetime":
|
if type in ("datetime", "timestamp"):
|
||||||
return "datetime2"
|
return "datetime2"
|
||||||
if type == "bit":
|
if type == "bit":
|
||||||
return "varchar(1)"
|
return "varchar(1)"
|
||||||
if type in ("tinyint", "smallint"):
|
if type in ("tinyint", "smallint"):
|
||||||
return "tinyint"
|
return "tinyint"
|
||||||
if type == "text":
|
if type in ("text", "longtext"):
|
||||||
return "nvarchar(max)"
|
return "nvarchar(max)"
|
||||||
if type in ("blob", "mediumblob"):
|
if type in ("blob", "mediumblob"):
|
||||||
return "varbinary(max)"
|
return "varbinary(max)"
|
||||||
@@ -571,14 +644,18 @@ GO"""
|
|||||||
|
|
||||||
return script
|
return script
|
||||||
|
|
||||||
def gen_comment(self, table_sql: str, table_name: str) -> str:
|
def gen_comment(self, table_ddl: Dict) -> str:
|
||||||
"""生成字段及表的注释"""
|
"""生成字段及表的注释"""
|
||||||
|
|
||||||
script = ""
|
script = ""
|
||||||
|
table_name = table_ddl["table_name"]
|
||||||
|
|
||||||
|
for column in table_ddl["columns"]:
|
||||||
|
column_comment = column["comment"]
|
||||||
|
field = column["name"]
|
||||||
|
|
||||||
for field, comment_string in self.filed_comments(table_sql):
|
|
||||||
script += f"""EXEC sp_addextendedproperty
|
script += f"""EXEC sp_addextendedproperty
|
||||||
'MS_Description', N'{comment_string}',
|
'MS_Description', N'{column_comment}',
|
||||||
'SCHEMA', N'dbo',
|
'SCHEMA', N'dbo',
|
||||||
'TABLE', N'{table_name}',
|
'TABLE', N'{table_name}',
|
||||||
'COLUMN', N'{field}'
|
'COLUMN', N'{field}'
|
||||||
@@ -586,7 +663,7 @@ GO
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
table_comment = self.table_comment(table_sql)
|
table_comment = table_ddl["comment"]
|
||||||
if table_comment:
|
if table_comment:
|
||||||
script += f"""EXEC sp_addextendedproperty
|
script += f"""EXEC sp_addextendedproperty
|
||||||
'MS_Description', N'{table_comment}',
|
'MS_Description', N'{table_comment}',
|
||||||
@@ -601,6 +678,15 @@ GO
|
|||||||
"""生成主键定义"""
|
"""生成主键定义"""
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def gen_uk(self, table_ddl: Dict) -> str:
|
||||||
|
script = ""
|
||||||
|
uk_list = list(Convertor.unique_index(table_ddl))
|
||||||
|
for idx, (table_name, _, uk_columns) in enumerate(uk_list, 1):
|
||||||
|
uk_name = f"uk_{table_name}_{idx:02d}"
|
||||||
|
script += f"CREATE UNIQUE INDEX {uk_name} ON {table_name} ({', '.join(uk_columns)})\nGO"
|
||||||
|
|
||||||
|
return script
|
||||||
|
|
||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_index(self, ddl: Dict) -> str:
|
||||||
"""生成 index"""
|
"""生成 index"""
|
||||||
return "\n".join(f"{script}\nGO" for script in self.index(ddl))
|
return "\n".join(f"{script}\nGO" for script in self.index(ddl))
|
||||||
@@ -674,22 +760,22 @@ class DM8Convertor(Convertor):
|
|||||||
|
|
||||||
if type == "varchar":
|
if type == "varchar":
|
||||||
return f"varchar({size})"
|
return f"varchar({size})"
|
||||||
if type == "int":
|
if type in ("int", "int unsigned"):
|
||||||
return "int"
|
return "int"
|
||||||
if type == "bigint" or type == "bigint unsigned":
|
if type in ("bigint", "bigint unsigned"):
|
||||||
return "bigint"
|
return "bigint"
|
||||||
if type == "datetime":
|
if type == "datetime":
|
||||||
return "datetime"
|
return "datetime"
|
||||||
|
if type == "timestamp":
|
||||||
|
return f"timestamp({size})"
|
||||||
if type == "bit":
|
if type == "bit":
|
||||||
return "bit"
|
return "bit"
|
||||||
if type in ("tinyint", "smallint"):
|
if type in ("tinyint", "smallint"):
|
||||||
return "smallint"
|
return "smallint"
|
||||||
if type == "text":
|
if type in ("text", "longtext"):
|
||||||
return "text"
|
return "text"
|
||||||
if type == "blob":
|
if type in ("blob", "mediumblob"):
|
||||||
return "blob"
|
return "blob"
|
||||||
if type == "mediumblob":
|
|
||||||
return "varchar(10240)"
|
|
||||||
if type == "decimal":
|
if type == "decimal":
|
||||||
return (
|
return (
|
||||||
f"decimal({','.join(str(s) for s in size)})" if len(size) else "decimal"
|
f"decimal({','.join(str(s) for s in size)})" if len(size) else "decimal"
|
||||||
@@ -724,19 +810,20 @@ CREATE TABLE {table_name} (
|
|||||||
|
|
||||||
return script
|
return script
|
||||||
|
|
||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_comment(self, table_ddl: Dict) -> str:
|
||||||
return "\n".join(f"{script};" for script in self.index(ddl))
|
|
||||||
|
|
||||||
def gen_comment(self, table_sql: str, table_name: str) -> str:
|
|
||||||
script = ""
|
script = ""
|
||||||
for field, comment_string in self.filed_comments(table_sql):
|
for column in table_ddl["columns"]:
|
||||||
|
table_comment = column["comment"]
|
||||||
script += (
|
script += (
|
||||||
f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n"
|
f"COMMENT ON COLUMN {table_ddl['table_name']}.{column['name']} IS '{table_comment}';"
|
||||||
|
+ "\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
table_comment = self.table_comment(table_sql)
|
table_comment = table_ddl["comment"]
|
||||||
if table_comment:
|
if table_comment:
|
||||||
script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n"
|
script += (
|
||||||
|
f"COMMENT ON TABLE {table_ddl['table_name']} IS '{table_comment}';\n"
|
||||||
|
)
|
||||||
|
|
||||||
return script
|
return script
|
||||||
|
|
||||||
@@ -744,6 +831,15 @@ CREATE TABLE {table_name} (
|
|||||||
"""生成主键定义"""
|
"""生成主键定义"""
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def gen_uk(self, table_ddl: Dict) -> str:
|
||||||
|
script = ""
|
||||||
|
uk_list = list(Convertor.unique_index(table_ddl))
|
||||||
|
for idx, (table_name, _, uk_columns) in enumerate(uk_list, 1):
|
||||||
|
uk_name = f"uk_{table_name}_{idx:02d}"
|
||||||
|
script += f"CREATE UNIQUE INDEX {uk_name} ON {table_name} ({', '.join(uk_columns)});\n"
|
||||||
|
|
||||||
|
return script
|
||||||
|
|
||||||
def gen_index(self, ddl: Dict) -> str:
|
def gen_index(self, ddl: Dict) -> str:
|
||||||
return "\n".join(f"{script};" for script in self.index(ddl))
|
return "\n".join(f"{script};" for script in self.index(ddl))
|
||||||
|
|
||||||
@@ -784,6 +880,8 @@ class KingbaseConvertor(PostgreSQLConvertor):
|
|||||||
type = col["type"].lower()
|
type = col["type"].lower()
|
||||||
full_type = self.translate_type(type, col["size"])
|
full_type = self.translate_type(type, col["size"])
|
||||||
nullable = "NULL" if col["nullable"] else "NOT NULL"
|
nullable = "NULL" if col["nullable"] else "NOT NULL"
|
||||||
|
if full_type == "text":
|
||||||
|
nullable = "NULL"
|
||||||
default = f"DEFAULT {col['default']}" if col["default"] is not None else ""
|
default = f"DEFAULT {col['default']}" if col["default"] is not None else ""
|
||||||
return f"{name} {full_type} {nullable} {default}"
|
return f"{name} {full_type} {nullable} {default}"
|
||||||
|
|
||||||
|
|||||||
+14
-1
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.common.util.date;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
|
import cn.hutool.core.date.TemporalAccessorUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.DateIntervalEnum;
|
import cn.iocoder.yudao.framework.common.enums.DateIntervalEnum;
|
||||||
@@ -19,7 +20,7 @@ import static cn.hutool.core.date.DatePattern.UTC_MS_WITH_XXX_OFFSET_PATTERN;
|
|||||||
import static cn.hutool.core.date.DatePattern.createFormatter;
|
import static cn.hutool.core.date.DatePattern.createFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 时间工具类,用于 {@link java.time.LocalDateTime}
|
* 时间工具类,用于 {@link LocalDateTime}
|
||||||
*
|
*
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
*/
|
*/
|
||||||
@@ -312,4 +313,16 @@ public class LocalDateTimeUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将给定的 {@link LocalDateTime} 转换为自 Unix 纪元时间(1970-01-01T00:00:00Z)以来的秒数。
|
||||||
|
*
|
||||||
|
* @param sourceDateTime 需要转换的本地日期时间,不能为空
|
||||||
|
* @return 自 1970-01-01T00:00:00Z 起的秒数(epoch second)
|
||||||
|
* @throws NullPointerException 如果 {@code sourceDateTime} 为 {@code null}
|
||||||
|
* @throws DateTimeException 如果转换过程中发生时间超出范围或其他时间处理异常
|
||||||
|
*/
|
||||||
|
public static Long toEpochSecond(LocalDateTime sourceDateTime) {
|
||||||
|
return TemporalAccessorUtil.toInstant(sourceDateTime).getEpochSecond();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+30
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.excel.core.handler;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.ReflectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.hutool.poi.excel.ExcelUtil;
|
import cn.hutool.poi.excel.ExcelUtil;
|
||||||
@@ -10,6 +11,8 @@ import cn.iocoder.yudao.framework.common.core.KeyValue;
|
|||||||
import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
|
import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
|
||||||
import cn.iocoder.yudao.framework.excel.core.annotations.ExcelColumnSelect;
|
import cn.iocoder.yudao.framework.excel.core.annotations.ExcelColumnSelect;
|
||||||
import cn.iocoder.yudao.framework.excel.core.function.ExcelColumnSelectFunction;
|
import cn.iocoder.yudao.framework.excel.core.function.ExcelColumnSelectFunction;
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.write.handler.SheetWriteHandler;
|
import com.alibaba.excel.write.handler.SheetWriteHandler;
|
||||||
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
@@ -20,6 +23,7 @@ import org.apache.poi.ss.usermodel.*;
|
|||||||
import org.apache.poi.ss.util.CellRangeAddressList;
|
import org.apache.poi.ss.util.CellRangeAddressList;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -56,7 +60,20 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
|
|||||||
public SelectSheetWriteHandler(Class<?> head) {
|
public SelectSheetWriteHandler(Class<?> head) {
|
||||||
// 解析下拉数据
|
// 解析下拉数据
|
||||||
int colIndex = 0;
|
int colIndex = 0;
|
||||||
|
boolean ignoreUnannotated = head.isAnnotationPresent(ExcelIgnoreUnannotated.class);
|
||||||
for (Field field : head.getDeclaredFields()) {
|
for (Field field : head.getDeclaredFields()) {
|
||||||
|
// 关联 https://github.com/YunaiV/ruoyi-vue-pro/pull/853
|
||||||
|
// 1.1 忽略 static final 或 transient 的字段
|
||||||
|
if (isStaticFinalOrTransient(field) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 1.2 忽略的字段跳过
|
||||||
|
if ((ignoreUnannotated && !field.isAnnotationPresent(ExcelProperty.class))
|
||||||
|
|| field.isAnnotationPresent(ExcelIgnore.class)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 核心:处理有 ExcelColumnSelect 注解的字段
|
||||||
if (field.isAnnotationPresent(ExcelColumnSelect.class)) {
|
if (field.isAnnotationPresent(ExcelColumnSelect.class)) {
|
||||||
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
|
ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
|
||||||
if (excelProperty != null && excelProperty.index() != -1) {
|
if (excelProperty != null && excelProperty.index() != -1) {
|
||||||
@@ -68,6 +85,19 @@ public class SelectSheetWriteHandler implements SheetWriteHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断字段是否是静态的、最终的、 transient 的
|
||||||
|
* 原因:EasyExcel 默认是忽略 static final 或 transient 的字段,所以需要判断
|
||||||
|
*
|
||||||
|
* @param field 字段
|
||||||
|
* @return 是否是静态的、最终的、transient 的
|
||||||
|
*/
|
||||||
|
private boolean isStaticFinalOrTransient(Field field) {
|
||||||
|
return (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()))
|
||||||
|
|| Modifier.isTransient(field.getModifiers());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得下拉数据,并添加到 {@link #selectMap} 中
|
* 获得下拉数据,并添加到 {@link #selectMap} 中
|
||||||
*
|
*
|
||||||
|
|||||||
+14
-7
@@ -5,9 +5,9 @@ import org.springframework.beans.BeansException;
|
|||||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.scheduling.annotation.EnableAsync;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
|
import org.springframework.core.task.SimpleAsyncTaskExecutor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步任务 Configuration
|
* 异步任务 Configuration
|
||||||
@@ -22,13 +22,20 @@ public class YudaoAsyncAutoConfiguration {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||||
if (!(bean instanceof ThreadPoolTaskExecutor)) {
|
// 处理 ThreadPoolTaskExecutor
|
||||||
return bean;
|
if (bean instanceof ThreadPoolTaskExecutor) {
|
||||||
|
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) bean;
|
||||||
|
executor.setTaskDecorator(TtlRunnable::get);
|
||||||
|
return executor;
|
||||||
}
|
}
|
||||||
// 修改提交的任务,接入 TransmittableThreadLocal
|
// 处理 SimpleAsyncTaskExecutor
|
||||||
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) bean;
|
// 参考 https://t.zsxq.com/CBoks 增加
|
||||||
executor.setTaskDecorator(TtlRunnable::get);
|
if (bean instanceof SimpleAsyncTaskExecutor) {
|
||||||
return executor;
|
SimpleAsyncTaskExecutor executor = (SimpleAsyncTaskExecutor) bean;
|
||||||
|
executor.setTaskDecorator(TtlRunnable::get);
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
return bean;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
+1
@@ -42,6 +42,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
|
|||||||
default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
|
default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
|
||||||
// 特殊:不分页,直接查询全部
|
// 特殊:不分页,直接查询全部
|
||||||
if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
|
if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
|
||||||
|
MyBatisUtils.addOrder(queryWrapper, sortingFields);
|
||||||
List<T> list = selectList(queryWrapper);
|
List<T> list = selectList(queryWrapper);
|
||||||
return new PageResult<>(list, (long) list.size());
|
return new PageResult<>(list, (long) list.size());
|
||||||
}
|
}
|
||||||
|
|||||||
+36
-7
@@ -1,11 +1,15 @@
|
|||||||
package cn.iocoder.yudao.framework.mybatis.core.util;
|
package cn.iocoder.yudao.framework.mybatis.core.util;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.lang.func.Func1;
|
||||||
|
import cn.hutool.core.lang.func.LambdaUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.SortingField;
|
import cn.iocoder.yudao.framework.common.pojo.SortingField;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
|
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||||
@@ -18,7 +22,6 @@ import net.sf.jsqlparser.schema.Table;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MyBatis 工具类
|
* MyBatis 工具类
|
||||||
@@ -35,15 +38,27 @@ public class MyBatisUtils {
|
|||||||
// 页码 + 数量
|
// 页码 + 数量
|
||||||
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
|
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
|
||||||
// 排序字段
|
// 排序字段
|
||||||
if (!CollectionUtil.isEmpty(sortingFields)) {
|
if (CollUtil.isNotEmpty(sortingFields)) {
|
||||||
page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder())
|
for (SortingField sortingField : sortingFields) {
|
||||||
? OrderItem.asc(StrUtil.toUnderlineCase(sortingField.getField()))
|
page.addOrder(new OrderItem().setAsc(SortingField.ORDER_ASC.equals(sortingField.getOrder()))
|
||||||
: OrderItem.desc(StrUtil.toUnderlineCase(sortingField.getField())))
|
.setColumn(StrUtil.toUnderlineCase(sortingField.getField())));
|
||||||
.collect(Collectors.toList()));
|
}
|
||||||
}
|
}
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
|
||||||
|
if (CollUtil.isEmpty(sortingFields)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
|
||||||
|
for (SortingField sortingField : sortingFields) {
|
||||||
|
query.orderBy(true,
|
||||||
|
SortingField.ORDER_ASC.equals(sortingField.getOrder()),
|
||||||
|
StrUtil.toUnderlineCase(sortingField.getField()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将拦截器添加到链中
|
* 将拦截器添加到链中
|
||||||
* 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置
|
* 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置
|
||||||
@@ -103,4 +118,18 @@ public class MyBatisUtils {
|
|||||||
.replace("#{value}", StrUtil.toString(value));
|
.replace("#{value}", StrUtil.toString(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将驼峰命名转换为下划线命名
|
||||||
|
*
|
||||||
|
* 使用场景:
|
||||||
|
* 1. <a href="https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1357/files">fix:修复"商品统计聚合函数的别名与排序字段不符"导致的 SQL 异常</a>
|
||||||
|
*
|
||||||
|
* @param func 字段名函数(驼峰命名)
|
||||||
|
* @return 字段名(下划线命名)
|
||||||
|
*/
|
||||||
|
public static <T> String toUnderlineCase(Func1<T, ?> func) {
|
||||||
|
String fieldName = LambdaUtil.getFieldName(func);
|
||||||
|
return StrUtil.toUnderlineCase(fieldName);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -128,8 +128,10 @@ public class SecurityFrameworkUtils {
|
|||||||
|
|
||||||
// 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号;
|
// 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号;
|
||||||
// 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息
|
// 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息
|
||||||
WebFrameworkUtils.setLoginUserId(request, loginUser.getId());
|
if (request != null) {
|
||||||
WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType());
|
WebFrameworkUtils.setLoginUserId(request, loginUser.getId());
|
||||||
|
WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Authentication buildAuthentication(LoginUser loginUser, HttpServletRequest request) {
|
private static Authentication buildAuthentication(LoginUser loginUser, HttpServletRequest request) {
|
||||||
|
|||||||
+1
-1
@@ -84,7 +84,7 @@ public class StringDesensitizeSerializer extends StdSerializer<String> implement
|
|||||||
*/
|
*/
|
||||||
private Field getField(JsonGenerator generator) {
|
private Field getField(JsonGenerator generator) {
|
||||||
String currentName = generator.getOutputContext().getCurrentName();
|
String currentName = generator.getOutputContext().getCurrentName();
|
||||||
Object currentValue = generator.getCurrentValue();
|
Object currentValue = generator.currentValue();
|
||||||
Class<?> currentValueClass = currentValue.getClass();
|
Class<?> currentValueClass = currentValue.getClass();
|
||||||
return ReflectUtil.getField(currentValueClass, currentName);
|
return ReflectUtil.getField(currentValueClass, currentName);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -162,7 +162,7 @@ public class AiChatConversationServiceImpl implements AiChatConversationService
|
|||||||
if (CollUtil.isEmpty(list)) {
|
if (CollUtil.isEmpty(list)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
chatConversationMapper.deleteBatchIds(convertList(list, AiChatConversationDO::getId));
|
chatConversationMapper.deleteByIds(convertList(list, AiChatConversationDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -339,7 +339,7 @@ public class AiChatMessageServiceImpl implements AiChatMessageService {
|
|||||||
throw exception(CHAT_MESSAGE_NOT_EXIST);
|
throw exception(CHAT_MESSAGE_NOT_EXIST);
|
||||||
}
|
}
|
||||||
// 2. 执行删除
|
// 2. 执行删除
|
||||||
chatMessageMapper.deleteBatchIds(convertList(messages, AiChatMessageDO::getId));
|
chatMessageMapper.deleteByIds(convertList(messages, AiChatMessageDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -200,7 +200,7 @@ public class AiKnowledgeDocumentServiceImpl implements AiKnowledgeDocumentServic
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return knowledgeDocumentMapper.selectBatchIds(ids);
|
return knowledgeDocumentMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -351,7 +351,7 @@ public class AiKnowledgeSegmentServiceImpl implements AiKnowledgeSegmentService
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return segmentMapper.selectBatchIds(ids);
|
return segmentMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -163,7 +163,7 @@ public class AiChatRoleServiceImpl implements AiChatRoleService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return chatRoleMapper.selectBatchIds(ids);
|
return chatRoleMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -84,7 +84,7 @@ public class AiToolServiceImpl implements AiToolService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AiToolDO> getToolList(Collection<Long> ids) {
|
public List<AiToolDO> getToolList(Collection<Long> ids) {
|
||||||
return toolMapper.selectBatchIds(ids);
|
return toolMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -80,7 +80,7 @@ public class BpmFormServiceImpl implements BpmFormService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return formMapper.selectBatchIds(ids);
|
return formMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-2
@@ -70,7 +70,7 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BpmUserGroupDO> getUserGroupList(Collection<Long> ids) {
|
public List<BpmUserGroupDO> getUserGroupList(Collection<Long> ids) {
|
||||||
return userGroupMapper.selectBatchIds(ids);
|
return userGroupMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ public class BpmUserGroupServiceImpl implements BpmUserGroupService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获得用户组信息
|
// 获得用户组信息
|
||||||
List<BpmUserGroupDO> userGroups = userGroupMapper.selectBatchIds(ids);
|
List<BpmUserGroupDO> userGroups = userGroupMapper.selectByIds(ids);
|
||||||
Map<Long, BpmUserGroupDO> userGroupMap = convertMap(userGroups, BpmUserGroupDO::getId);
|
Map<Long, BpmUserGroupDO> userGroupMap = convertMap(userGroups, BpmUserGroupDO::getId);
|
||||||
// 校验
|
// 校验
|
||||||
ids.forEach(id -> {
|
ids.forEach(id -> {
|
||||||
|
|||||||
+1
-1
@@ -270,7 +270,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
|||||||
.setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(node))
|
.setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(node))
|
||||||
.setCandidateUserIds(getTaskCandidateUserList(bpmnModel, node.getId(),
|
.setCandidateUserIds(getTaskCandidateUserList(bpmnModel, node.getId(),
|
||||||
loginUserId, historicProcessInstance.getProcessDefinitionId(), processVariables)));
|
loginUserId, historicProcessInstance.getProcessDefinitionId(), processVariables)));
|
||||||
if (CollUtil.isNotEmpty(nextActivityNodes)) {
|
if (CollUtil.isEmpty(nextActivityNodes)) {
|
||||||
return nextActivityNodes;
|
return nextActivityNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -142,12 +142,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
|||||||
updateBusinessProduct(updateObj.getId(), businessProducts);
|
updateBusinessProduct(updateObj.getId(), businessProducts);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
|
updateReqVO.setOwnerUserId(oldBusiness.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldBusiness, CrmBusinessSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldBusiness, CrmBusinessSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("businessName", oldBusiness.getName());
|
LogRecordContext.putVariable("businessName", oldBusiness.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@LogRecord(type = CRM_BUSINESS_TYPE, subType = CRM_BUSINESS_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}",
|
@LogRecord(type = CRM_BUSINESS_TYPE, subType = CRM_BUSINESS_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}}",
|
||||||
success = CRM_BUSINESS_FOLLOW_UP_SUCCESS)
|
success = CRM_BUSINESS_FOLLOW_UP_SUCCESS)
|
||||||
@CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
|
@CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
|
||||||
public void updateBusinessFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
|
public void updateBusinessFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
|
||||||
@@ -180,7 +181,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
|||||||
businessProductMapper.updateBatch(diffList.get(1));
|
businessProductMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
businessProductMapper.deleteBatchIds(convertSet(diffList.get(2), CrmBusinessProductDO::getId));
|
businessProductMapper.deleteByIds(convertSet(diffList.get(2), CrmBusinessProductDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +329,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return ListUtil.empty();
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
return businessMapper.selectBatchIds(ids);
|
return businessMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+3
-3
@@ -100,7 +100,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
|||||||
businessStatusMapper.updateBatch(diffList.get(1));
|
businessStatusMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
businessStatusMapper.deleteBatchIds(convertSet(diffList.get(2), CrmBusinessStatusDO::getId));
|
businessStatusMapper.deleteByIds(convertSet(diffList.get(2), CrmBusinessStatusDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return businessStatusTypeMapper.selectBatchIds(ids);
|
return businessStatusTypeMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -175,7 +175,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return businessStatusMapper.selectBatchIds(ids);
|
return businessStatusMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+7
-6
@@ -92,19 +92,20 @@ public class CrmClueServiceImpl implements CrmClueService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@LogRecord(type = CRM_CLUE_TYPE, subType = CRM_CLUE_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
|
@LogRecord(type = CRM_CLUE_TYPE, subType = CRM_CLUE_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
|
||||||
success = CRM_CLUE_UPDATE_SUCCESS)
|
success = CRM_CLUE_UPDATE_SUCCESS)
|
||||||
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CLUE, bizId = "#updateReq.id", level = CrmPermissionLevelEnum.OWNER)
|
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CLUE, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.OWNER)
|
||||||
public void updateClue(CrmClueSaveReqVO updateReq) {
|
public void updateClue(CrmClueSaveReqVO updateReqVO) {
|
||||||
Assert.notNull(updateReq.getId(), "线索编号不能为空");
|
Assert.notNull(updateReqVO.getId(), "线索编号不能为空");
|
||||||
// 1.1 校验线索是否存在
|
// 1.1 校验线索是否存在
|
||||||
CrmClueDO oldClue = validateClueExists(updateReq.getId());
|
CrmClueDO oldClue = validateClueExists(updateReqVO.getId());
|
||||||
// 1.2 校验关联数据
|
// 1.2 校验关联数据
|
||||||
validateRelationDataExists(updateReq);
|
validateRelationDataExists(updateReqVO);
|
||||||
|
|
||||||
// 2. 更新线索
|
// 2. 更新线索
|
||||||
CrmClueDO updateObj = BeanUtils.toBean(updateReq, CrmClueDO.class);
|
CrmClueDO updateObj = BeanUtils.toBean(updateReqVO, CrmClueDO.class);
|
||||||
clueMapper.updateById(updateObj);
|
clueMapper.updateById(updateObj);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
|
updateReqVO.setOwnerUserId(oldClue.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldClue, CrmCustomerSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldClue, CrmCustomerSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("clueName", oldClue.getName());
|
LogRecordContext.putVariable("clueName", oldClue.getName());
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -114,6 +114,7 @@ public class CrmContactServiceImpl implements CrmContactService {
|
|||||||
contactMapper.updateById(updateObj);
|
contactMapper.updateById(updateObj);
|
||||||
|
|
||||||
// 3. 记录操作日志
|
// 3. 记录操作日志
|
||||||
|
updateReqVO.setOwnerUserId(oldContact.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldContact, CrmContactSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldContact, CrmContactSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("contactName", oldContact.getName());
|
LogRecordContext.putVariable("contactName", oldContact.getName());
|
||||||
}
|
}
|
||||||
@@ -262,7 +263,7 @@ public class CrmContactServiceImpl implements CrmContactService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return ListUtil.empty();
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
return contactMapper.selectBatchIds(ids);
|
return contactMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+7
-6
@@ -140,9 +140,9 @@ public class CrmContractServiceImpl implements CrmContractService {
|
|||||||
Assert.notNull(updateReqVO.getId(), "合同编号不能为空");
|
Assert.notNull(updateReqVO.getId(), "合同编号不能为空");
|
||||||
updateReqVO.setOwnerUserId(null); // 不允许更新的字段
|
updateReqVO.setOwnerUserId(null); // 不允许更新的字段
|
||||||
// 1.1 校验存在
|
// 1.1 校验存在
|
||||||
CrmContractDO contract = validateContractExists(updateReqVO.getId());
|
CrmContractDO oldContract = validateContractExists(updateReqVO.getId());
|
||||||
// 1.2 只有草稿、审批中,可以编辑;
|
// 1.2 只有草稿、审批中,可以编辑;
|
||||||
if (!ObjectUtils.equalsAny(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
|
if (!ObjectUtils.equalsAny(oldContract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
|
||||||
CrmAuditStatusEnum.PROCESS.getStatus())) {
|
CrmAuditStatusEnum.PROCESS.getStatus())) {
|
||||||
throw exception(CONTRACT_UPDATE_FAIL_NOT_DRAFT);
|
throw exception(CONTRACT_UPDATE_FAIL_NOT_DRAFT);
|
||||||
}
|
}
|
||||||
@@ -159,8 +159,9 @@ public class CrmContractServiceImpl implements CrmContractService {
|
|||||||
updateContractProduct(updateReqVO.getId(), contractProducts);
|
updateContractProduct(updateReqVO.getId(), contractProducts);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(contract, CrmContractSaveReqVO.class));
|
updateReqVO.setOwnerUserId(oldContract.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable("contractName", contract.getName());
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldContract, CrmContractSaveReqVO.class));
|
||||||
|
LogRecordContext.putVariable("contractName", oldContract.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateContractProduct(Long id, List<CrmContractProductDO> newList) {
|
private void updateContractProduct(Long id, List<CrmContractProductDO> newList) {
|
||||||
@@ -175,7 +176,7 @@ public class CrmContractServiceImpl implements CrmContractService {
|
|||||||
contractProductMapper.updateBatch(diffList.get(1));
|
contractProductMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
contractProductMapper.deleteBatchIds(convertSet(diffList.get(2), CrmContractProductDO::getId));
|
contractProductMapper.deleteByIds(convertSet(diffList.get(2), CrmContractProductDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +342,7 @@ public class CrmContractServiceImpl implements CrmContractService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return ListUtil.empty();
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
return contractMapper.selectBatchIds(ids);
|
return contractMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+10
-15
@@ -137,6 +137,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
customerMapper.updateById(updateObj);
|
customerMapper.updateById(updateObj);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
|
updateReqVO.setOwnerUserId(oldCustomer.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldCustomer, CrmCustomerSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldCustomer, CrmCustomerSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("customerName", oldCustomer.getName());
|
LogRecordContext.putVariable("customerName", oldCustomer.getName());
|
||||||
}
|
}
|
||||||
@@ -162,7 +163,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}",
|
@LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}}",
|
||||||
success = CRM_CUSTOMER_FOLLOW_UP_SUCCESS)
|
success = CRM_CUSTOMER_FOLLOW_UP_SUCCESS)
|
||||||
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
|
@CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
|
||||||
public void updateCustomerFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
|
public void updateCustomerFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
|
||||||
@@ -232,24 +233,18 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
private void transfer(CrmCustomerTransferReqVO reqVO, Long userId) {
|
private void transfer(CrmCustomerTransferReqVO reqVO, Long userId) {
|
||||||
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_CONTACT.getType())) {
|
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_CONTACT.getType())) {
|
||||||
List<CrmContactDO> contactList = contactService.getContactListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
List<CrmContactDO> contactList = contactService.getContactListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
||||||
contactList.forEach(item -> {
|
contactList.forEach(item -> contactService.transferContact(new CrmContactTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
||||||
contactService.transferContact(new CrmContactTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
reqVO.getOldOwnerPermissionLevel()), userId));
|
||||||
reqVO.getOldOwnerPermissionLevel()), userId);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_BUSINESS.getType())) {
|
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_BUSINESS.getType())) {
|
||||||
List<CrmBusinessDO> businessList = businessService.getBusinessListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
List<CrmBusinessDO> businessList = businessService.getBusinessListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
||||||
businessList.forEach(item -> {
|
businessList.forEach(item -> businessService.transferBusiness(new CrmBusinessTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
||||||
businessService.transferBusiness(new CrmBusinessTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
reqVO.getOldOwnerPermissionLevel()), userId));
|
||||||
reqVO.getOldOwnerPermissionLevel()), userId);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_CONTRACT.getType())) {
|
if (reqVO.getToBizTypes().contains(CrmBizTypeEnum.CRM_CONTRACT.getType())) {
|
||||||
List<CrmContractDO> contractList = contractService.getContractListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
List<CrmContractDO> contractList = contractService.getContractListByCustomerIdOwnerUserId(reqVO.getId(), userId);
|
||||||
contractList.forEach(item -> {
|
contractList.forEach(item -> contractService.transferContract(new CrmContractTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
||||||
contractService.transferContract(new CrmContractTransferReqVO(item.getId(), reqVO.getNewOwnerUserId(),
|
reqVO.getOldOwnerPermissionLevel()), userId));
|
||||||
reqVO.getOldOwnerPermissionLevel()), userId);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,7 +386,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void receiveCustomer(List<Long> ids, Long ownerUserId, Boolean isReceive) {
|
public void receiveCustomer(List<Long> ids, Long ownerUserId, Boolean isReceive) {
|
||||||
// 1.1 校验存在
|
// 1.1 校验存在
|
||||||
List<CrmCustomerDO> customers = customerMapper.selectBatchIds(ids);
|
List<CrmCustomerDO> customers = customerMapper.selectByIds(ids);
|
||||||
if (customers.size() != ids.size()) {
|
if (customers.size() != ids.size()) {
|
||||||
throw exception(CUSTOMER_NOT_EXISTS);
|
throw exception(CUSTOMER_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
@@ -495,7 +490,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return customerMapper.selectBatchIds(ids);
|
return customerMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+7
-7
@@ -187,7 +187,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void validatePermissionExists(Collection<Long> ids) {
|
private void validatePermissionExists(Collection<Long> ids) {
|
||||||
List<CrmPermissionDO> permissionList = permissionMapper.selectBatchIds(ids);
|
List<CrmPermissionDO> permissionList = permissionMapper.selectByIds(ids);
|
||||||
if (ObjUtil.notEqual(permissionList.size(), ids.size())) {
|
if (ObjUtil.notEqual(permissionList.size(), ids.size())) {
|
||||||
throw exception(CRM_PERMISSION_NOT_EXISTS);
|
throw exception(CRM_PERMISSION_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
@@ -210,12 +210,12 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|||||||
CrmPermissionDO oldPermission = permissionMapper.selectByBizTypeAndBizIdByUserId(
|
CrmPermissionDO oldPermission = permissionMapper.selectByBizTypeAndBizIdByUserId(
|
||||||
transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
|
transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
|
||||||
String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
|
String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
|
||||||
if (oldPermission == null // 不是拥有者,并且不是超管
|
if ((oldPermission == null || !isOwner(oldPermission.getLevel()))
|
||||||
|| (!isOwner(oldPermission.getLevel()) && !CrmPermissionUtils.isCrmAdmin())) {
|
&& !CrmPermissionUtils.isCrmAdmin()) { // 并且不是超管
|
||||||
throw exception(CRM_PERMISSION_DENIED, bizTypeName);
|
throw exception(CRM_PERMISSION_DENIED, bizTypeName);
|
||||||
}
|
}
|
||||||
// 1.1 校验转移对象是否已经是该负责人
|
// 1.1 校验转移对象是否已经是该负责人
|
||||||
if (ObjUtil.equal(transferReqBO.getNewOwnerUserId(), oldPermission.getUserId())) {
|
if (oldPermission != null && ObjUtil.equal(transferReqBO.getNewOwnerUserId(), oldPermission.getUserId())) {
|
||||||
throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS, bizTypeName);
|
throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS, bizTypeName);
|
||||||
}
|
}
|
||||||
// 1.2 校验新负责人是否存在
|
// 1.2 校验新负责人是否存在
|
||||||
@@ -255,7 +255,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 删除数据权限
|
// 删除数据权限
|
||||||
permissionMapper.deleteBatchIds(convertSet(permissions, CrmPermissionDO::getId));
|
permissionMapper.deleteByIds(convertSet(permissions, CrmPermissionDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -268,7 +268,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deletePermissionBatch(Collection<Long> ids, Long userId) {
|
public void deletePermissionBatch(Collection<Long> ids, Long userId) {
|
||||||
List<CrmPermissionDO> permissions = permissionMapper.selectBatchIds(ids);
|
List<CrmPermissionDO> permissions = permissionMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(permissions)) {
|
if (CollUtil.isEmpty(permissions)) {
|
||||||
throw exception(CRM_PERMISSION_NOT_EXISTS);
|
throw exception(CRM_PERMISSION_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
@@ -286,7 +286,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 删除数据权限
|
// 删除数据权限
|
||||||
permissionMapper.deleteBatchIds(ids);
|
permissionMapper.deleteByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -132,7 +132,7 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CrmProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
|
public List<CrmProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
|
||||||
return productCategoryMapper.selectBatchIds(ids);
|
return productCategoryMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -158,7 +158,7 @@ public class CrmProductServiceImpl implements CrmProductService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
List<CrmProductDO> list = productMapper.selectBatchIds(ids);
|
List<CrmProductDO> list = productMapper.selectByIds(ids);
|
||||||
Map<Long, CrmProductDO> productMap = convertMap(list, CrmProductDO::getId);
|
Map<Long, CrmProductDO> productMap = convertMap(list, CrmProductDO::getId);
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
CrmProductDO product = productMap.get(id);
|
CrmProductDO product = productMap.get(id);
|
||||||
@@ -177,7 +177,7 @@ public class CrmProductServiceImpl implements CrmProductService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return productMapper.selectBatchIds(ids);
|
return productMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -104,6 +104,7 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService {
|
|||||||
receivablePlanMapper.updateById(updateObj);
|
receivablePlanMapper.updateById(updateObj);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
|
updateReqVO.setOwnerUserId(oldReceivablePlan.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldReceivablePlan, CrmReceivablePlanSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldReceivablePlan, CrmReceivablePlanSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("receivablePlan", oldReceivablePlan);
|
LogRecordContext.putVariable("receivablePlan", oldReceivablePlan);
|
||||||
}
|
}
|
||||||
@@ -165,7 +166,7 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return ListUtil.empty();
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
return receivablePlanMapper.selectBatchIds(ids);
|
return receivablePlanMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+9
-8
@@ -162,14 +162,14 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
|
|||||||
Assert.notNull(updateReqVO.getId(), "回款编号不能为空");
|
Assert.notNull(updateReqVO.getId(), "回款编号不能为空");
|
||||||
updateReqVO.setOwnerUserId(null).setCustomerId(null).setContractId(null).setPlanId(null); // 不允许修改的字段
|
updateReqVO.setOwnerUserId(null).setCustomerId(null).setContractId(null).setPlanId(null); // 不允许修改的字段
|
||||||
// 1.1 校验存在
|
// 1.1 校验存在
|
||||||
CrmReceivableDO receivable = validateReceivableExists(updateReqVO.getId());
|
CrmReceivableDO oldReceivable = validateReceivableExists(updateReqVO.getId());
|
||||||
updateReqVO.setOwnerUserId(receivable.getOwnerUserId()).setCustomerId(receivable.getCustomerId())
|
updateReqVO.setOwnerUserId(oldReceivable.getOwnerUserId()).setCustomerId(oldReceivable.getCustomerId())
|
||||||
.setContractId(receivable.getContractId()).setPlanId(receivable.getPlanId()); // 设置已存在的值
|
.setContractId(oldReceivable.getContractId()).setPlanId(oldReceivable.getPlanId()); // 设置已存在的值
|
||||||
// 1.2 校验可回款金额超过上限
|
// 1.2 校验可回款金额超过上限
|
||||||
validateReceivablePriceExceedsLimit(updateReqVO);
|
validateReceivablePriceExceedsLimit(updateReqVO);
|
||||||
|
|
||||||
// 1.3 只有草稿、审批中,可以编辑;
|
// 1.3 只有草稿、审批中,可以编辑;
|
||||||
if (!ObjectUtils.equalsAny(receivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
|
if (!ObjectUtils.equalsAny(oldReceivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
|
||||||
CrmAuditStatusEnum.PROCESS.getStatus())) {
|
CrmAuditStatusEnum.PROCESS.getStatus())) {
|
||||||
throw exception(RECEIVABLE_UPDATE_FAIL_EDITING_PROHIBITED);
|
throw exception(RECEIVABLE_UPDATE_FAIL_EDITING_PROHIBITED);
|
||||||
}
|
}
|
||||||
@@ -179,9 +179,10 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
|
|||||||
receivableMapper.updateById(updateObj);
|
receivableMapper.updateById(updateObj);
|
||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("receivable", receivable);
|
updateReqVO.setOwnerUserId(oldReceivable.getOwnerUserId()); // 避免操作日志出现“删除负责人”的情况
|
||||||
LogRecordContext.putVariable("period", getReceivablePeriod(receivable.getPlanId()));
|
LogRecordContext.putVariable("oldReceivable", oldReceivable);
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(receivable, CrmReceivableSaveReqVO.class));
|
LogRecordContext.putVariable("period", getReceivablePeriod(oldReceivable.getPlanId()));
|
||||||
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldReceivable, CrmReceivableSaveReqVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer getReceivablePeriod(Long planId) {
|
private Integer getReceivablePeriod(Long planId) {
|
||||||
@@ -277,7 +278,7 @@ public class CrmReceivableServiceImpl implements CrmReceivableService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return ListUtil.empty();
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
return receivableMapper.selectBatchIds(ids);
|
return receivableMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-3
@@ -15,8 +15,7 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ACCOUNT_NOT_ENABLE;
|
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ACCOUNT_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ERP 结算账户 Service 实现类
|
* ERP 结算账户 Service 实现类
|
||||||
@@ -102,7 +101,7 @@ public class ErpAccountServiceImpl implements ErpAccountService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpAccountDO> getAccountList(Collection<Long> ids) {
|
public List<ErpAccountDO> getAccountList(Collection<Long> ids) {
|
||||||
return accountMapper.selectBatchIds(ids);
|
return accountMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+3
-3
@@ -189,7 +189,7 @@ public class ErpFinancePaymentServiceImpl implements ErpFinancePaymentService {
|
|||||||
financePaymentItemMapper.updateBatch(diffList.get(1));
|
financePaymentItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
financePaymentItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpFinancePaymentItemDO::getId));
|
financePaymentItemMapper.deleteByIds(convertList(diffList.get(2), ErpFinancePaymentItemDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第三步,更新采购入库、退货的付款金额情况
|
// 第三步,更新采购入库、退货的付款金额情况
|
||||||
@@ -214,7 +214,7 @@ public class ErpFinancePaymentServiceImpl implements ErpFinancePaymentService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteFinancePayment(List<Long> ids) {
|
public void deleteFinancePayment(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpFinancePaymentDO> payments = financePaymentMapper.selectBatchIds(ids);
|
List<ErpFinancePaymentDO> payments = financePaymentMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(payments)) {
|
if (CollUtil.isEmpty(payments)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ public class ErpFinancePaymentServiceImpl implements ErpFinancePaymentService {
|
|||||||
financePaymentMapper.deleteById(payment.getId());
|
financePaymentMapper.deleteById(payment.getId());
|
||||||
// 2.2 删除付款单项
|
// 2.2 删除付款单项
|
||||||
List<ErpFinancePaymentItemDO> paymentItems = financePaymentItemMapper.selectListByPaymentId(payment.getId());
|
List<ErpFinancePaymentItemDO> paymentItems = financePaymentItemMapper.selectListByPaymentId(payment.getId());
|
||||||
financePaymentItemMapper.deleteBatchIds(convertSet(paymentItems, ErpFinancePaymentItemDO::getId));
|
financePaymentItemMapper.deleteByIds(convertSet(paymentItems, ErpFinancePaymentItemDO::getId));
|
||||||
|
|
||||||
// 2.3 更新采购入库、退货的付款金额情况
|
// 2.3 更新采购入库、退货的付款金额情况
|
||||||
updatePurchasePrice(paymentItems);
|
updatePurchasePrice(paymentItems);
|
||||||
|
|||||||
+3
-3
@@ -189,7 +189,7 @@ public class ErpFinanceReceiptServiceImpl implements ErpFinanceReceiptService {
|
|||||||
financeReceiptItemMapper.updateBatch(diffList.get(1));
|
financeReceiptItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
financeReceiptItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpFinanceReceiptItemDO::getId));
|
financeReceiptItemMapper.deleteByIds(convertList(diffList.get(2), ErpFinanceReceiptItemDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第三步,更新销售出库、退货的收款金额情况
|
// 第三步,更新销售出库、退货的收款金额情况
|
||||||
@@ -214,7 +214,7 @@ public class ErpFinanceReceiptServiceImpl implements ErpFinanceReceiptService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteFinanceReceipt(List<Long> ids) {
|
public void deleteFinanceReceipt(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpFinanceReceiptDO> receipts = financeReceiptMapper.selectBatchIds(ids);
|
List<ErpFinanceReceiptDO> receipts = financeReceiptMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(receipts)) {
|
if (CollUtil.isEmpty(receipts)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ public class ErpFinanceReceiptServiceImpl implements ErpFinanceReceiptService {
|
|||||||
financeReceiptMapper.deleteById(receipt.getId());
|
financeReceiptMapper.deleteById(receipt.getId());
|
||||||
// 2.2 删除收款单项
|
// 2.2 删除收款单项
|
||||||
List<ErpFinanceReceiptItemDO> receiptItems = financeReceiptItemMapper.selectListByReceiptId(receipt.getId());
|
List<ErpFinanceReceiptItemDO> receiptItems = financeReceiptItemMapper.selectListByReceiptId(receipt.getId());
|
||||||
financeReceiptItemMapper.deleteBatchIds(convertSet(receiptItems, ErpFinanceReceiptItemDO::getId));
|
financeReceiptItemMapper.deleteByIds(convertSet(receiptItems, ErpFinanceReceiptItemDO::getId));
|
||||||
|
|
||||||
// 2.3 更新销售出库、退货的收款金额情况
|
// 2.3 更新销售出库、退货的收款金额情况
|
||||||
updateSalePrice(receiptItems);
|
updateSalePrice(receiptItems);
|
||||||
|
|||||||
+1
-1
@@ -143,7 +143,7 @@ public class ErpProductCategoryServiceImpl implements ErpProductCategoryService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
|
public List<ErpProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
|
||||||
return erpProductCategoryMapper.selectBatchIds(ids);
|
return erpProductCategoryMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+5
-10
@@ -16,16 +16,11 @@ import jakarta.annotation.Resource;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PRODUCT_NOT_ENABLE;
|
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PRODUCT_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ERP 产品 Service 实现类
|
* ERP 产品 Service 实现类
|
||||||
@@ -77,7 +72,7 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
List<ErpProductDO> list = productMapper.selectBatchIds(ids);
|
List<ErpProductDO> list = productMapper.selectByIds(ids);
|
||||||
Map<Long, ErpProductDO> productMap = convertMap(list, ErpProductDO::getId);
|
Map<Long, ErpProductDO> productMap = convertMap(list, ErpProductDO::getId);
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
ErpProductDO product = productMap.get(id);
|
ErpProductDO product = productMap.get(id);
|
||||||
@@ -113,7 +108,7 @@ public class ErpProductServiceImpl implements ErpProductService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
List<ErpProductDO> list = productMapper.selectBatchIds(ids);
|
List<ErpProductDO> list = productMapper.selectByIds(ids);
|
||||||
return buildProductVOList(list);
|
return buildProductVOList(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -105,7 +105,7 @@ public class ErpProductUnitServiceImpl implements ErpProductUnitService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpProductUnitDO> getProductUnitList(Collection<Long> ids) {
|
public List<ErpProductUnitDO> getProductUnitList(Collection<Long> ids) {
|
||||||
return productUnitMapper.selectBatchIds(ids);
|
return productUnitMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+3
-3
@@ -86,7 +86,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
|
|||||||
|
|
||||||
// 2.1 插入入库
|
// 2.1 插入入库
|
||||||
ErpPurchaseInDO purchaseIn = BeanUtils.toBean(createReqVO, ErpPurchaseInDO.class, in -> in
|
ErpPurchaseInDO purchaseIn = BeanUtils.toBean(createReqVO, ErpPurchaseInDO.class, in -> in
|
||||||
.setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()))
|
.setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()))
|
||||||
.setOrderNo(purchaseOrder.getNo()).setSupplierId(purchaseOrder.getSupplierId());
|
.setOrderNo(purchaseOrder.getNo()).setSupplierId(purchaseOrder.getSupplierId());
|
||||||
calculateTotalPrice(purchaseIn, purchaseInItems);
|
calculateTotalPrice(purchaseIn, purchaseInItems);
|
||||||
purchaseInMapper.insert(purchaseIn);
|
purchaseInMapper.insert(purchaseIn);
|
||||||
@@ -232,7 +232,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
|
|||||||
purchaseInItemMapper.updateBatch(diffList.get(1));
|
purchaseInItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
purchaseInItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpPurchaseInItemDO::getId));
|
purchaseInItemMapper.deleteByIds(convertList(diffList.get(2), ErpPurchaseInItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deletePurchaseIn(List<Long> ids) {
|
public void deletePurchaseIn(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpPurchaseInDO> purchaseIns = purchaseInMapper.selectBatchIds(ids);
|
List<ErpPurchaseInDO> purchaseIns = purchaseInMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(purchaseIns)) {
|
if (CollUtil.isEmpty(purchaseIns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -183,7 +183,7 @@ public class ErpPurchaseOrderServiceImpl implements ErpPurchaseOrderService {
|
|||||||
purchaseOrderItemMapper.updateBatch(diffList.get(1));
|
purchaseOrderItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
purchaseOrderItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpPurchaseOrderItemDO::getId));
|
purchaseOrderItemMapper.deleteByIds(convertList(diffList.get(2), ErpPurchaseOrderItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +231,7 @@ public class ErpPurchaseOrderServiceImpl implements ErpPurchaseOrderService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deletePurchaseOrder(List<Long> ids) {
|
public void deletePurchaseOrder(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpPurchaseOrderDO> purchaseOrders = purchaseOrderMapper.selectBatchIds(ids);
|
List<ErpPurchaseOrderDO> purchaseOrders = purchaseOrderMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(purchaseOrders)) {
|
if (CollUtil.isEmpty(purchaseOrders)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -82,7 +82,7 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService {
|
|||||||
|
|
||||||
// 2.1 插入退货
|
// 2.1 插入退货
|
||||||
ErpPurchaseReturnDO purchaseReturn = BeanUtils.toBean(createReqVO, ErpPurchaseReturnDO.class, in -> in
|
ErpPurchaseReturnDO purchaseReturn = BeanUtils.toBean(createReqVO, ErpPurchaseReturnDO.class, in -> in
|
||||||
.setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()))
|
.setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()))
|
||||||
.setOrderNo(purchaseOrder.getNo()).setSupplierId(purchaseOrder.getSupplierId());
|
.setOrderNo(purchaseOrder.getNo()).setSupplierId(purchaseOrder.getSupplierId());
|
||||||
calculateTotalPrice(purchaseReturn, purchaseReturnItems);
|
calculateTotalPrice(purchaseReturn, purchaseReturnItems);
|
||||||
purchaseReturnMapper.insert(purchaseReturn);
|
purchaseReturnMapper.insert(purchaseReturn);
|
||||||
@@ -228,7 +228,7 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService {
|
|||||||
purchaseReturnItemMapper.updateBatch(diffList.get(1));
|
purchaseReturnItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
purchaseReturnItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpPurchaseReturnItemDO::getId));
|
purchaseReturnItemMapper.deleteByIds(convertList(diffList.get(2), ErpPurchaseReturnItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deletePurchaseReturn(List<Long> ids) {
|
public void deletePurchaseReturn(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpPurchaseReturnDO> purchaseReturns = purchaseReturnMapper.selectBatchIds(ids);
|
List<ErpPurchaseReturnDO> purchaseReturns = purchaseReturnMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(purchaseReturns)) {
|
if (CollUtil.isEmpty(purchaseReturns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -15,8 +15,7 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_ENABLE;
|
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ERP 供应商 Service 实现类
|
* ERP 供应商 Service 实现类
|
||||||
@@ -79,7 +78,7 @@ public class ErpSupplierServiceImpl implements ErpSupplierService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpSupplierDO> getSupplierList(Collection<Long> ids) {
|
public List<ErpSupplierDO> getSupplierList(Collection<Long> ids) {
|
||||||
return supplierMapper.selectBatchIds(ids);
|
return supplierMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpCustomerDO> getCustomerList(Collection<Long> ids) {
|
public List<ErpCustomerDO> getCustomerList(Collection<Long> ids) {
|
||||||
return customerMapper.selectBatchIds(ids);
|
return customerMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-2
@@ -195,7 +195,7 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
|
|||||||
saleOrderItemMapper.updateBatch(diffList.get(1));
|
saleOrderItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
saleOrderItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpSaleOrderItemDO::getId));
|
saleOrderItemMapper.deleteByIds(convertList(diffList.get(2), ErpSaleOrderItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +243,7 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteSaleOrder(List<Long> ids) {
|
public void deleteSaleOrder(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpSaleOrderDO> saleOrders = saleOrderMapper.selectBatchIds(ids);
|
List<ErpSaleOrderDO> saleOrders = saleOrderMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(saleOrders)) {
|
if (CollUtil.isEmpty(saleOrders)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -240,7 +240,7 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
|
|||||||
saleOutItemMapper.updateBatch(diffList.get(1));
|
saleOutItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
saleOutItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpSaleOutItemDO::getId));
|
saleOutItemMapper.deleteByIds(convertList(diffList.get(2), ErpSaleOutItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteSaleOut(List<Long> ids) {
|
public void deleteSaleOut(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpSaleOutDO> saleOuts = saleOutMapper.selectBatchIds(ids);
|
List<ErpSaleOutDO> saleOuts = saleOutMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(saleOuts)) {
|
if (CollUtil.isEmpty(saleOuts)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -240,7 +240,7 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService {
|
|||||||
saleReturnItemMapper.updateBatch(diffList.get(1));
|
saleReturnItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
saleReturnItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpSaleReturnItemDO::getId));
|
saleReturnItemMapper.deleteByIds(convertList(diffList.get(2), ErpSaleReturnItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteSaleReturn(List<Long> ids) {
|
public void deleteSaleReturn(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpSaleReturnDO> saleReturns = saleReturnMapper.selectBatchIds(ids);
|
List<ErpSaleReturnDO> saleReturns = saleReturnMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(saleReturns)) {
|
if (CollUtil.isEmpty(saleReturns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -169,7 +169,7 @@ public class ErpStockCheckServiceImpl implements ErpStockCheckService {
|
|||||||
stockCheckItemMapper.updateBatch(diffList.get(1));
|
stockCheckItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
stockCheckItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpStockCheckItemDO::getId));
|
stockCheckItemMapper.deleteByIds(convertList(diffList.get(2), ErpStockCheckItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ public class ErpStockCheckServiceImpl implements ErpStockCheckService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteStockCheck(List<Long> ids) {
|
public void deleteStockCheck(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpStockCheckDO> stockChecks = stockCheckMapper.selectBatchIds(ids);
|
List<ErpStockCheckDO> stockChecks = stockCheckMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(stockChecks)) {
|
if (CollUtil.isEmpty(stockChecks)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -165,7 +165,7 @@ public class ErpStockInServiceImpl implements ErpStockInService {
|
|||||||
stockInItemMapper.updateBatch(diffList.get(1));
|
stockInItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
stockInItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpStockInItemDO::getId));
|
stockInItemMapper.deleteByIds(convertList(diffList.get(2), ErpStockInItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ public class ErpStockInServiceImpl implements ErpStockInService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteStockIn(List<Long> ids) {
|
public void deleteStockIn(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpStockInDO> stockIns = stockInMapper.selectBatchIds(ids);
|
List<ErpStockInDO> stockIns = stockInMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(stockIns)) {
|
if (CollUtil.isEmpty(stockIns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -166,7 +166,7 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
|
|||||||
stockMoveItemMapper.updateBatch(diffList.get(1));
|
stockMoveItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
stockMoveItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpStockMoveItemDO::getId));
|
stockMoveItemMapper.deleteByIds(convertList(diffList.get(2), ErpStockMoveItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ public class ErpStockMoveServiceImpl implements ErpStockMoveService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteStockMove(List<Long> ids) {
|
public void deleteStockMove(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpStockMoveDO> stockMoves = stockMoveMapper.selectBatchIds(ids);
|
List<ErpStockMoveDO> stockMoves = stockMoveMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(stockMoves)) {
|
if (CollUtil.isEmpty(stockMoves)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -165,7 +165,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|||||||
stockOutItemMapper.updateBatch(diffList.get(1));
|
stockOutItemMapper.updateBatch(diffList.get(1));
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
if (CollUtil.isNotEmpty(diffList.get(2))) {
|
||||||
stockOutItemMapper.deleteBatchIds(convertList(diffList.get(2), ErpStockOutItemDO::getId));
|
stockOutItemMapper.deleteByIds(convertList(diffList.get(2), ErpStockOutItemDO::getId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteStockOut(List<Long> ids) {
|
public void deleteStockOut(List<Long> ids) {
|
||||||
// 1. 校验不处于已审批
|
// 1. 校验不处于已审批
|
||||||
List<ErpStockOutDO> stockOuts = stockOutMapper.selectBatchIds(ids);
|
List<ErpStockOutDO> stockOuts = stockOutMapper.selectByIds(ids);
|
||||||
if (CollUtil.isEmpty(stockOuts)) {
|
if (CollUtil.isEmpty(stockOuts)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -20,8 +20,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.WAREHOUSE_NOT_ENABLE;
|
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.WAREHOUSE_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ERP 仓库 Service 实现类
|
* ERP 仓库 Service 实现类
|
||||||
@@ -94,7 +93,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService {
|
|||||||
if (CollUtil.isEmpty(ids)) {
|
if (CollUtil.isEmpty(ids)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
List<ErpWarehouseDO> list = warehouseMapper.selectBatchIds(ids);
|
List<ErpWarehouseDO> list = warehouseMapper.selectByIds(ids);
|
||||||
Map<Long, ErpWarehouseDO> warehouseMap = convertMap(list, ErpWarehouseDO::getId);
|
Map<Long, ErpWarehouseDO> warehouseMap = convertMap(list, ErpWarehouseDO::getId);
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
ErpWarehouseDO warehouse = warehouseMap.get(id);
|
ErpWarehouseDO warehouse = warehouseMap.get(id);
|
||||||
@@ -115,7 +114,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ErpWarehouseDO> getWarehouseList(Collection<Long> ids) {
|
public List<ErpWarehouseDO> getWarehouseList(Collection<Long> ids) {
|
||||||
return warehouseMapper.selectBatchIds(ids);
|
return warehouseMapper.selectByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+6
-2
@@ -10,7 +10,9 @@
|
|||||||
<if test="endTime != null">
|
<if test="endTime != null">
|
||||||
AND in_time < #{endTime}
|
AND in_time < #{endTime}
|
||||||
</if>
|
</if>
|
||||||
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getRequiredTenantId()}
|
<if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
|
||||||
|
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
|
||||||
|
</if>
|
||||||
AND deleted = 0) -
|
AND deleted = 0) -
|
||||||
(SELECT IFNULL(SUM(total_price), 0)
|
(SELECT IFNULL(SUM(total_price), 0)
|
||||||
FROM erp_purchase_return
|
FROM erp_purchase_return
|
||||||
@@ -18,7 +20,9 @@
|
|||||||
<if test="endTime != null">
|
<if test="endTime != null">
|
||||||
AND return_time < #{endTime}
|
AND return_time < #{endTime}
|
||||||
</if>
|
</if>
|
||||||
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getRequiredTenantId()}
|
<if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
|
||||||
|
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
|
||||||
|
</if>
|
||||||
AND deleted = 0)
|
AND deleted = 0)
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -10,7 +10,9 @@
|
|||||||
<if test="endTime != null">
|
<if test="endTime != null">
|
||||||
AND out_time < #{endTime}
|
AND out_time < #{endTime}
|
||||||
</if>
|
</if>
|
||||||
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getRequiredTenantId()}
|
<if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
|
||||||
|
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
|
||||||
|
</if>
|
||||||
AND deleted = 0) -
|
AND deleted = 0) -
|
||||||
(SELECT IFNULL(SUM(total_price), 0)
|
(SELECT IFNULL(SUM(total_price), 0)
|
||||||
FROM erp_sale_return
|
FROM erp_sale_return
|
||||||
@@ -18,7 +20,9 @@
|
|||||||
<if test="endTime != null">
|
<if test="endTime != null">
|
||||||
AND return_time < #{endTime}
|
AND return_time < #{endTime}
|
||||||
</if>
|
</if>
|
||||||
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getRequiredTenantId()}
|
<if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
|
||||||
|
AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
|
||||||
|
</if>
|
||||||
AND deleted = 0)
|
AND deleted = 0)
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -19,8 +19,11 @@ public enum CodegenFrontTypeEnum {
|
|||||||
VUE3_VBEN2_ANTD_SCHEMA(30), // Vue3 VBEN2 + ANTD + Schema 模版
|
VUE3_VBEN2_ANTD_SCHEMA(30), // Vue3 VBEN2 + ANTD + Schema 模版
|
||||||
|
|
||||||
VUE3_VBEN5_ANTD_SCHEMA(40), // Vue3 VBEN5 + ANTD + schema 模版
|
VUE3_VBEN5_ANTD_SCHEMA(40), // Vue3 VBEN5 + ANTD + schema 模版
|
||||||
|
|
||||||
VUE3_VBEN5_ANTD_GENERAL(41), // Vue3 VBEN5 + ANTD 标准模版
|
VUE3_VBEN5_ANTD_GENERAL(41), // Vue3 VBEN5 + ANTD 标准模版
|
||||||
|
|
||||||
|
// TODO @puhui999::50、51 会好点;
|
||||||
|
VUE3_VBEN5_EP_SCHEMA(42), // Vue3 VBEN5 + EP + schema 模版
|
||||||
|
VUE3_VBEN5_EP_GENERAL(43), // Vue3 VBEN5 + EP 标准模版
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+9
-1
@@ -34,7 +34,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
|
||||||
import static cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment;
|
import static cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment;
|
||||||
|
|
||||||
@@ -123,6 +122,15 @@ public class CodegenController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "批量删除数据库的表和字段定义")
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Parameter(name = "tableIds", description = "表编号列表", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:codegen:delete')")
|
||||||
|
public CommonResult<Boolean> deleteCodegenList(@RequestParam("tableIds") List<Long> tableIds) {
|
||||||
|
codegenService.deleteCodegenList(tableIds);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "预览生成代码")
|
@Operation(summary = "预览生成代码")
|
||||||
@GetMapping("/preview")
|
@GetMapping("/preview")
|
||||||
@Parameter(name = "tableId", description = "表编号", required = true, example = "1024")
|
@Parameter(name = "tableId", description = "表编号", required = true, example = "1024")
|
||||||
|
|||||||
+10
-1
@@ -62,6 +62,15 @@ public class ConfigController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Operation(summary = "批量删除参数配置")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:config:delete')")
|
||||||
|
public CommonResult<Boolean> deleteConfigList(@RequestParam("ids") List<Long> ids) {
|
||||||
|
configService.deleteConfigList(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping(value = "/get")
|
@GetMapping(value = "/get")
|
||||||
@Operation(summary = "获得参数配置")
|
@Operation(summary = "获得参数配置")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
@@ -92,7 +101,7 @@ public class ConfigController {
|
|||||||
return success(ConfigConvert.INSTANCE.convertPage(page));
|
return success(ConfigConvert.INSTANCE.convertPage(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/export")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出参数配置")
|
@Operation(summary = "导出参数配置")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:config:export')")
|
@PreAuthorize("@ss.hasPermission('infra:config:export')")
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
|||||||
+11
-2
@@ -9,12 +9,12 @@ import cn.iocoder.yudao.module.infra.service.db.DataSourceConfigService;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
@@ -52,6 +52,15 @@ public class DataSourceConfigController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Operation(summary = "批量删除数据源配置")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:data-source-config:delete')")
|
||||||
|
public CommonResult<Boolean> deleteDataSourceConfigList(@RequestParam("ids") List<Long> ids) {
|
||||||
|
dataSourceConfigService.deleteDataSourceConfigList(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得数据源配置")
|
@Operation(summary = "获得数据源配置")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
|
|||||||
public class DataSourceConfigRespVO {
|
public class DataSourceConfigRespVO {
|
||||||
|
|
||||||
@Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
@Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
private Integer id;
|
private Long id;
|
||||||
|
|
||||||
@Schema(description = "数据源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "test")
|
@Schema(description = "数据源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "test")
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,7 @@ public class Demo01ContactController {
|
|||||||
@Operation(summary = "批量删除示例联系人")
|
@Operation(summary = "批量删除示例联系人")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo01-contact:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo0iContactList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo0iContactList(@RequestParam("ids") List<Long> ids) {
|
||||||
demo01ContactService.deleteDemo0iContactListByIds(ids);
|
demo01ContactService.deleteDemo0iContactList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -67,8 +67,7 @@ public class Demo03StudentErpController {
|
|||||||
@Operation(summary = "批量删除学生")
|
@Operation(summary = "批量删除学生")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
||||||
// TODO @puhui999:deleteDemo03StudentList
|
demo03StudentErpService.deleteDemo03StudentList(ids);
|
||||||
demo03StudentErpService.deleteDemo03StudentListByIds(ids);
|
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +141,7 @@ public class Demo03StudentErpController {
|
|||||||
@Operation(summary = "批量删除学生课程")
|
@Operation(summary = "批量删除学生课程")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo03CourseList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo03CourseList(@RequestParam("ids") List<Long> ids) {
|
||||||
demo03StudentErpService.deleteDemo03CourseListByIds(ids);
|
demo03StudentErpService.deleteDemo03CourseList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,7 +193,7 @@ public class Demo03StudentErpController {
|
|||||||
@Operation(summary = "批量删除学生班级")
|
@Operation(summary = "批量删除学生班级")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo03GradeList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo03GradeList(@RequestParam("ids") List<Long> ids) {
|
||||||
demo03StudentErpService.deleteDemo03GradeListByIds(ids);
|
demo03StudentErpService.deleteDemo03GradeList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -67,7 +67,7 @@ public class Demo03StudentInnerController {
|
|||||||
@Operation(summary = "批量删除学生")
|
@Operation(summary = "批量删除学生")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
||||||
demo03StudentInnerService.deleteDemo03StudentListByIds(ids);
|
demo03StudentInnerService.deleteDemo03StudentList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -67,7 +67,7 @@ public class Demo03StudentNormalController {
|
|||||||
@Operation(summary = "批量删除学生")
|
@Operation(summary = "批量删除学生")
|
||||||
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
@PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')")
|
||||||
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
public CommonResult<Boolean> deleteDemo03StudentList(@RequestParam("ids") List<Long> ids) {
|
||||||
demo03StudentNormalService.deleteDemo03StudentListByIds(ids);
|
demo03StudentNormalService.deleteDemo03StudentList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-2
@@ -11,12 +11,13 @@ import cn.iocoder.yudao.module.infra.service.file.FileConfigService;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
import java.util.List;
|
||||||
import jakarta.validation.Valid;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
@@ -61,6 +62,15 @@ public class FileConfigController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Operation(summary = "批量删除文件配置")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file-config:delete')")
|
||||||
|
public CommonResult<Boolean> deleteFileConfigList(@RequestParam("ids") List<Long> ids) {
|
||||||
|
fileConfigService.deleteFileConfigList(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得文件配置")
|
@Operation(summary = "获得文件配置")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
|||||||
+11
@@ -26,6 +26,8 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment;
|
import static cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment;
|
||||||
|
|
||||||
@@ -75,6 +77,15 @@ public class FileController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Operation(summary = "批量删除文件")
|
||||||
|
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:file:delete')")
|
||||||
|
public CommonResult<Boolean> deleteFileList(@RequestParam("ids") List<Long> ids) throws Exception {
|
||||||
|
fileService.deleteFileList(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/{configId}/get/**")
|
@GetMapping("/{configId}/get/**")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@TenantIgnore
|
@TenantIgnore
|
||||||
|
|||||||
+10
-2
@@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.AssertTrue;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 上传文件 Request VO")
|
@Schema(description = "管理后台 - 上传文件 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class FileUploadReqVO {
|
public class FileUploadReqVO {
|
||||||
@@ -17,4 +19,10 @@ public class FileUploadReqVO {
|
|||||||
@Schema(description = "文件目录", example = "XXX/YYY")
|
@Schema(description = "文件目录", example = "XXX/YYY")
|
||||||
private String directory;
|
private String directory;
|
||||||
|
|
||||||
|
@AssertTrue(message = "文件目录不正确")
|
||||||
|
@JsonIgnore
|
||||||
|
public boolean isDirectoryValid() {
|
||||||
|
return !StrUtil.containsAny(directory, "..", "/", "\\");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
-27
@@ -1,27 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.infra.controller.admin.job;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
|
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 定时任务")
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/infra/job")
|
|
||||||
@Validated
|
|
||||||
public class JobController {
|
|
||||||
|
|
||||||
@GetMapping("/page")
|
|
||||||
@Operation(summary = "获得定时任务分页")
|
|
||||||
@PreAuthorize("@ss.hasPermission('infra:job:query')")
|
|
||||||
public CommonResult<String> getJobPage() {
|
|
||||||
return error(-1, "Cloud 版本使用 XXL-Job 作为定时任务!请参考 https://cloud.iocoder.cn/job/ 文档操作");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
+10
-2
@@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.infra.controller.app.file.vo;
|
package cn.iocoder.yudao.module.infra.controller.app.file.vo;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.AssertTrue;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
@Schema(description = "用户 App - 上传文件 Request VO")
|
@Schema(description = "用户 App - 上传文件 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class AppFileUploadReqVO {
|
public class AppFileUploadReqVO {
|
||||||
@@ -17,4 +19,10 @@ public class AppFileUploadReqVO {
|
|||||||
@Schema(description = "文件目录", example = "XXX/YYY")
|
@Schema(description = "文件目录", example = "XXX/YYY")
|
||||||
private String directory;
|
private String directory;
|
||||||
|
|
||||||
|
@AssertTrue(message = "文件目录不正确")
|
||||||
|
@JsonIgnore
|
||||||
|
public boolean isDirectoryValid() {
|
||||||
|
return !StrUtil.containsAny(directory, "..", "/", "\\");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|||||||
import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
|
import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
@@ -17,8 +18,12 @@ public interface CodegenColumnMapper extends BaseMapperX<CodegenColumnDO> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default void deleteListByTableId(Long tableId) {
|
default void deleteListByTableId(Long tableId) {
|
||||||
|
delete(CodegenColumnDO::getTableId, tableId);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void deleteListByTableId(Collection<Long> tableIds) {
|
||||||
delete(new LambdaQueryWrapperX<CodegenColumnDO>()
|
delete(new LambdaQueryWrapperX<CodegenColumnDO>()
|
||||||
.eq(CodegenColumnDO::getTableId, tableId));
|
.in(CodegenColumnDO::getTableId, tableIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.infra.framework.file.core.utils;
|
|||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
|
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
|
||||||
import com.alibaba.ttl.TransmittableThreadLocal;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -86,8 +85,8 @@ public class FileTypeUtils {
|
|||||||
response.setContentType(contentType);
|
response.setContentType(contentType);
|
||||||
// 针对 video 的特殊处理,解决视频地址在移动端播放的兼容性问题
|
// 针对 video 的特殊处理,解决视频地址在移动端播放的兼容性问题
|
||||||
if (StrUtil.containsIgnoreCase(contentType, "video")) {
|
if (StrUtil.containsIgnoreCase(contentType, "video")) {
|
||||||
response.setHeader("Content-Length", String.valueOf(content.length - 1));
|
response.setHeader("Content-Length", String.valueOf(content.length));
|
||||||
response.setHeader("Content-Range", String.valueOf(content.length - 1));
|
response.setHeader("Content-Range", "bytes 0-" + (content.length - 1) + "/" + content.length);
|
||||||
response.setHeader("Accept-Ranges", "bytes");
|
response.setHeader("Accept-Ranges", "bytes");
|
||||||
}
|
}
|
||||||
// 输出附件
|
// 输出附件
|
||||||
|
|||||||
+7
@@ -48,6 +48,13 @@ public interface CodegenService {
|
|||||||
*/
|
*/
|
||||||
void deleteCodegen(Long tableId);
|
void deleteCodegen(Long tableId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除数据库的表和字段定义
|
||||||
|
*
|
||||||
|
* @param tableIds 数据编号列表
|
||||||
|
*/
|
||||||
|
void deleteCodegenList(List<Long> tableIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得表定义列表
|
* 获得表定义列表
|
||||||
*
|
*
|
||||||
|
|||||||
+10
-1
@@ -204,7 +204,7 @@ public class CodegenServiceImpl implements CodegenService {
|
|||||||
codegenColumnMapper.insertBatch(columns);
|
codegenColumnMapper.insertBatch(columns);
|
||||||
// 4.2 删除不存在的字段
|
// 4.2 删除不存在的字段
|
||||||
if (CollUtil.isNotEmpty(deleteColumnIds)) {
|
if (CollUtil.isNotEmpty(deleteColumnIds)) {
|
||||||
codegenColumnMapper.deleteBatchIds(deleteColumnIds);
|
codegenColumnMapper.deleteByIds(deleteColumnIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,6 +222,15 @@ public class CodegenServiceImpl implements CodegenService {
|
|||||||
codegenColumnMapper.deleteListByTableId(tableId);
|
codegenColumnMapper.deleteListByTableId(tableId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void deleteCodegenList(List<Long> tableIds) {
|
||||||
|
// 批量删除 table 表定义
|
||||||
|
codegenTableMapper.deleteByIds(tableIds);
|
||||||
|
// 批量删除 column 字段定义
|
||||||
|
codegenColumnMapper.deleteListByTableId(tableIds);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CodegenTableDO> getCodegenTableList(Long dataSourceConfigId) {
|
public List<CodegenTableDO> getCodegenTableList(Long dataSourceConfigId) {
|
||||||
return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId);
|
return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId);
|
||||||
|
|||||||
+44
@@ -182,6 +182,42 @@ public class CodegenEngine {
|
|||||||
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
.put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
|
||||||
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
|
// VUE3_VBEN5_EP_SCHEMA
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/data.ts"),
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/data.ts"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/index.vue"),
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/form.vue"),
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("api/api.ts"),
|
||||||
|
vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
|
// VUE3_VBEN5_EP
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/index.vue"),
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/form.vue"),
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("api/api.ts"),
|
||||||
|
vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
|
.put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
|
||||||
|
vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@@ -590,6 +626,14 @@ public class CodegenEngine {
|
|||||||
return "codegen/vue3_vben5_antd/general/" + path + ".vm";
|
return "codegen/vue3_vben5_antd/general/" + path + ".vm";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String vue3Vben5EpSchemaTemplatePath(String path) {
|
||||||
|
return "codegen/vue3_vben5_ele/schema/" + path + ".vm";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String vue3Vben5EpGeneralTemplatePath(String path) {
|
||||||
|
return "codegen/vue3_vben5_ele/general/" + path + ".vm";
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isSubTemplate(String path) {
|
private static boolean isSubTemplate(String path) {
|
||||||
return path.contains("_sub");
|
return path.contains("_sub");
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-1
@@ -4,9 +4,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigPageReqVO;
|
||||||
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigSaveReqVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
|
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 参数配置 Service 接口
|
* 参数配置 Service 接口
|
||||||
*
|
*
|
||||||
@@ -36,6 +37,13 @@ public interface ConfigService {
|
|||||||
*/
|
*/
|
||||||
void deleteConfig(Long id);
|
void deleteConfig(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除参数配置
|
||||||
|
*
|
||||||
|
* @param ids 配置编号列表
|
||||||
|
*/
|
||||||
|
void deleteConfigList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得参数配置
|
* 获得参数配置
|
||||||
*
|
*
|
||||||
|
|||||||
+16
-1
@@ -8,11 +8,12 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
|
|||||||
import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
|
import cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigMapper;
|
||||||
import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
|
import cn.iocoder.yudao.module.infra.enums.config.ConfigTypeEnum;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
|
||||||
@@ -64,6 +65,20 @@ public class ConfigServiceImpl implements ConfigService {
|
|||||||
configMapper.deleteById(id);
|
configMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteConfigList(List<Long> ids) {
|
||||||
|
// 校验是否有内置配置
|
||||||
|
List<ConfigDO> configs = configMapper.selectByIds(ids);
|
||||||
|
configs.forEach(config -> {
|
||||||
|
if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) {
|
||||||
|
throw exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 批量删除
|
||||||
|
configMapper.deleteByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ConfigDO getConfig(Long id) {
|
public ConfigDO getConfig(Long id) {
|
||||||
return configMapper.selectById(id);
|
return configMapper.selectById(id);
|
||||||
|
|||||||
+8
-1
@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.infra.service.db;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
|
import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,6 +35,13 @@ public interface DataSourceConfigService {
|
|||||||
*/
|
*/
|
||||||
void deleteDataSourceConfig(Long id);
|
void deleteDataSourceConfig(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除数据源配置
|
||||||
|
*
|
||||||
|
* @param ids 编号列表
|
||||||
|
*/
|
||||||
|
void deleteDataSourceConfigList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得数据源配置
|
* 获得数据源配置
|
||||||
*
|
*
|
||||||
|
|||||||
+6
-1
@@ -7,10 +7,10 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO;
|
|||||||
import cn.iocoder.yudao.module.infra.dal.mysql.db.DataSourceConfigMapper;
|
import cn.iocoder.yudao.module.infra.dal.mysql.db.DataSourceConfigMapper;
|
||||||
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
|
||||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -63,6 +63,11 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
|
|||||||
dataSourceConfigMapper.deleteById(id);
|
dataSourceConfigMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDataSourceConfigList(List<Long> ids) {
|
||||||
|
dataSourceConfigMapper.deleteByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
private void validateDataSourceConfigExists(Long id) {
|
private void validateDataSourceConfigExists(Long id) {
|
||||||
if (dataSourceConfigMapper.selectById(id) == null) {
|
if (dataSourceConfigMapper.selectById(id) == null) {
|
||||||
throw exception(DATA_SOURCE_CONFIG_NOT_EXISTS);
|
throw exception(DATA_SOURCE_CONFIG_NOT_EXISTS);
|
||||||
|
|||||||
+1
-1
@@ -42,7 +42,7 @@ public interface Demo01ContactService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo0iContactListByIds(List<Long> ids);
|
void deleteDemo0iContactList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得示例联系人
|
* 获得示例联系人
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ public class Demo01ContactServiceImpl implements Demo01ContactService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteDemo0iContactListByIds(List<Long> ids) {
|
public void deleteDemo0iContactList(List<Long> ids) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateDemo01ContactExists(ids);
|
validateDemo01ContactExists(ids);
|
||||||
// 删除
|
// 删除
|
||||||
|
|||||||
+3
-3
@@ -45,7 +45,7 @@ public interface Demo03StudentErpService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo03StudentListByIds(List<Long> ids);
|
void deleteDemo03StudentList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得学生
|
* 获得学生
|
||||||
@@ -101,7 +101,7 @@ public interface Demo03StudentErpService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo03CourseListByIds(List<Long> ids);
|
void deleteDemo03CourseList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得学生课程
|
* 获得学生课程
|
||||||
@@ -149,7 +149,7 @@ public interface Demo03StudentErpService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo03GradeListByIds(List<Long> ids);
|
void deleteDemo03GradeList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得学生班级
|
* 获得学生班级
|
||||||
|
|||||||
+3
-3
@@ -71,7 +71,7 @@ public class Demo03StudentErpServiceImpl implements Demo03StudentErpService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteDemo03StudentListByIds(List<Long> ids) {
|
public void deleteDemo03StudentList(List<Long> ids) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateDemo03StudentExists(ids);
|
validateDemo03StudentExists(ids);
|
||||||
// 删除
|
// 删除
|
||||||
@@ -134,7 +134,7 @@ public class Demo03StudentErpServiceImpl implements Demo03StudentErpService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteDemo03CourseListByIds(List<Long> ids) {
|
public void deleteDemo03CourseList(List<Long> ids) {
|
||||||
// 删除
|
// 删除
|
||||||
demo03CourseErpMapper.deleteByIds(ids);
|
demo03CourseErpMapper.deleteByIds(ids);
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ public class Demo03StudentErpServiceImpl implements Demo03StudentErpService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteDemo03GradeListByIds(List<Long> ids) {
|
public void deleteDemo03GradeList(List<Long> ids) {
|
||||||
// 删除
|
// 删除
|
||||||
demo03GradeErpMapper.deleteByIds(ids);
|
demo03GradeErpMapper.deleteByIds(ids);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ public interface Demo03StudentInnerService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo03StudentListByIds(List<Long> ids);
|
void deleteDemo03StudentList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得学生
|
* 获得学生
|
||||||
|
|||||||
+1
-1
@@ -83,7 +83,7 @@ public class Demo03StudentInnerServiceImpl implements Demo03StudentInnerService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteDemo03StudentListByIds(List<Long> ids) {
|
public void deleteDemo03StudentList(List<Long> ids) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateDemo03StudentExists(ids);
|
validateDemo03StudentExists(ids);
|
||||||
// 删除
|
// 删除
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ public interface Demo03StudentNormalService {
|
|||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param ids 编号
|
||||||
*/
|
*/
|
||||||
void deleteDemo03StudentListByIds(List<Long> ids);
|
void deleteDemo03StudentList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得学生
|
* 获得学生
|
||||||
|
|||||||
+1
-1
@@ -83,7 +83,7 @@ public class Demo03StudentNormalServiceImpl implements Demo03StudentNormalServic
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteDemo03StudentListByIds(List<Long> ids) {
|
public void deleteDemo03StudentList(List<Long> ids) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateDemo03StudentExists(ids);
|
validateDemo03StudentExists(ids);
|
||||||
// 删除
|
// 删除
|
||||||
|
|||||||
+9
-1
@@ -4,10 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO;
|
||||||
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO;
|
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileConfigDO;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
|
import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件配置 Service 接口
|
* 文件配置 Service 接口
|
||||||
*
|
*
|
||||||
@@ -44,6 +45,13 @@ public interface FileConfigService {
|
|||||||
*/
|
*/
|
||||||
void deleteFileConfig(Long id);
|
void deleteFileConfig(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除文件配置
|
||||||
|
*
|
||||||
|
* @param ids 编号列表
|
||||||
|
*/
|
||||||
|
void deleteFileConfigList(List<Long> ids);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得文件配置
|
* 获得文件配置
|
||||||
*
|
*
|
||||||
|
|||||||
+18
@@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -134,6 +135,23 @@ public class FileConfigServiceImpl implements FileConfigService {
|
|||||||
clearCache(id, null);
|
clearCache(id, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteFileConfigList(List<Long> ids) {
|
||||||
|
// 校验是否有主配置
|
||||||
|
List<FileConfigDO> configs = fileConfigMapper.selectByIds(ids);
|
||||||
|
for (FileConfigDO config : configs) {
|
||||||
|
if (Boolean.TRUE.equals(config.getMaster())) {
|
||||||
|
throw exception(FILE_CONFIG_DELETE_FAIL_MASTER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量删除
|
||||||
|
fileConfigMapper.deleteByIds(ids);
|
||||||
|
|
||||||
|
// 清空缓存
|
||||||
|
ids.forEach(id -> clearCache(id, null));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清空指定文件配置
|
* 清空指定文件配置
|
||||||
*
|
*
|
||||||
|
|||||||
+9
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresigned
|
|||||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件 Service 接口
|
* 文件 Service 接口
|
||||||
*
|
*
|
||||||
@@ -59,6 +61,13 @@ public interface FileService {
|
|||||||
*/
|
*/
|
||||||
void deleteFile(Long id) throws Exception;
|
void deleteFile(Long id) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除文件
|
||||||
|
*
|
||||||
|
* @param ids 编号列表
|
||||||
|
*/
|
||||||
|
void deleteFileList(List<Long> ids) throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得文件内容
|
* 获得文件内容
|
||||||
*
|
*
|
||||||
|
|||||||
+19
@@ -20,6 +20,8 @@ import jakarta.annotation.Resource;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.hutool.core.date.DatePattern.PURE_DATE_PATTERN;
|
import static cn.hutool.core.date.DatePattern.PURE_DATE_PATTERN;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS;
|
||||||
@@ -156,6 +158,23 @@ public class FileServiceImpl implements FileService {
|
|||||||
fileMapper.deleteById(id);
|
fileMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public void deleteFileList(List<Long> ids) {
|
||||||
|
// 删除文件
|
||||||
|
List<FileDO> files = fileMapper.selectByIds(ids);
|
||||||
|
for (FileDO file : files) {
|
||||||
|
// 获取客户端
|
||||||
|
FileClient client = fileConfigService.getFileClient(file.getConfigId());
|
||||||
|
Assert.notNull(client, "客户端({}) 不能为空", file.getPath());
|
||||||
|
// 删除文件
|
||||||
|
client.delete(file.getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除记录
|
||||||
|
fileMapper.deleteByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
private FileDO validateFileExists(Long id) {
|
private FileDO validateFileExists(Long id) {
|
||||||
FileDO fileDO = fileMapper.selectById(id);
|
FileDO fileDO = fileMapper.selectById(id);
|
||||||
if (fileDO == null) {
|
if (fileDO == null) {
|
||||||
|
|||||||
+7
-10
@@ -65,10 +65,13 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
#end
|
#end
|
||||||
// 插入
|
// 插入
|
||||||
#if ($voType == 10)
|
#if ($voType == 10)
|
||||||
## TODO @puhui999:insert 也要加下 clean。万一前端乱传递,哈哈哈。这个就是 do 模式的缺点;(只在 do 模式下);看看主子表,是不是也可能存在,insert 的时候;
|
|
||||||
${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
|
${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
|
||||||
#end
|
|
||||||
${classNameVar}Mapper.insert(${classNameVar});
|
${classNameVar}Mapper.insert(${classNameVar});
|
||||||
|
#else
|
||||||
|
${saveReqVOVar}.clean() // 清理掉创建、更新时间等相关属性值
|
||||||
|
${classNameVar}Mapper.insert(${saveReqVOVar});
|
||||||
|
#end
|
||||||
|
|
||||||
## 特殊:主子表专属逻辑(非 ERP 模式)
|
## 特殊:主子表专属逻辑(非 ERP 模式)
|
||||||
#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
|
#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
|
||||||
|
|
||||||
@@ -112,6 +115,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
|
${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
|
||||||
${classNameVar}Mapper.updateById(updateObj);
|
${classNameVar}Mapper.updateById(updateObj);
|
||||||
#else
|
#else
|
||||||
|
${updateReqVOVar}.clean() // 清理掉创建、更新时间等相关属性值
|
||||||
${classNameVar}Mapper.updateById(${updateReqVOVar});
|
${classNameVar}Mapper.updateById(${updateReqVOVar});
|
||||||
#end
|
#end
|
||||||
## 特殊:主子表专属逻辑(非 ERP 模式)
|
## 特殊:主子表专属逻辑(非 ERP 模式)
|
||||||
@@ -171,8 +175,6 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
#end
|
#end
|
||||||
public void delete${simpleClassName}ListByIds(List<${primaryColumn.javaType}> ids) {
|
public void delete${simpleClassName}ListByIds(List<${primaryColumn.javaType}> ids) {
|
||||||
// 校验存在
|
|
||||||
validate${simpleClassName}Exists(ids);
|
|
||||||
// 删除
|
// 删除
|
||||||
${classNameVar}Mapper.deleteByIds(ids);
|
${classNameVar}Mapper.deleteByIds(ids);
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
@@ -189,12 +191,6 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validate${simpleClassName}Exists(List<${primaryColumn.javaType}> ids) {
|
|
||||||
List<${table.className}DO> list = ${classNameVar}Mapper.selectByIds(ids);
|
|
||||||
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
|
|
||||||
throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) {
|
private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) {
|
||||||
@@ -320,6 +316,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
}
|
}
|
||||||
// 插入
|
// 插入
|
||||||
#end
|
#end
|
||||||
|
${subClassNameVar}.clean() // 清理掉创建、更新时间等相关属性值
|
||||||
${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
|
${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
|
||||||
return ${subClassNameVar}.getId();
|
return ${subClassNameVar}.getId();
|
||||||
}
|
}
|
||||||
|
|||||||
+50
-6
@@ -13,10 +13,36 @@
|
|||||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
|
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
|
||||||
v-hasPermi="['${permissionPrefix}:create']">新增</el-button>
|
v-hasPermi="['${permissionPrefix}:create']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="isEmpty(checkedIds)"
|
||||||
|
@click="handleDeleteBatch"
|
||||||
|
v-hasPermi="['${permissionPrefix}:delete']"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
#end
|
||||||
</el-row>
|
</el-row>
|
||||||
#end
|
#end
|
||||||
## 列表
|
## 列表
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="list"
|
||||||
|
:stripe="true"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
|
>
|
||||||
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
#end
|
||||||
#foreach($column in $subColumns)
|
#foreach($column in $subColumns)
|
||||||
#if ($column.listOperationResult)
|
#if ($column.listOperationResult)
|
||||||
#set ($dictType=$column.dictType)
|
#set ($dictType=$column.dictType)
|
||||||
@@ -82,6 +108,9 @@
|
|||||||
// 列表的数据
|
// 列表的数据
|
||||||
list: [],
|
list: [],
|
||||||
#if ($table.templateType == 11)
|
#if ($table.templateType == 11)
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
checkedIds: [],
|
||||||
|
#end
|
||||||
// 列表的总页数
|
// 列表的总页数
|
||||||
total: 0,
|
total: 0,
|
||||||
// 查询参数
|
// 查询参数
|
||||||
@@ -135,12 +164,27 @@
|
|||||||
this.loading = false;
|
this.loading = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/** 搜索按钮操作 */
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
handleQuery() {
|
/** 批量删除${table.classComment} */
|
||||||
this.queryParams.pageNo = 1;
|
async handleDeleteBatch() {
|
||||||
this.getList();
|
await this.#[[$modal]]#.confirm('是否确认删除?')
|
||||||
},
|
try {
|
||||||
|
await ${simpleClassName}Api.delete${subSimpleClassName}List(this.checkedIds);
|
||||||
|
await this.getList();
|
||||||
|
this.#[[$modal]]#.msgSuccess("删除成功");
|
||||||
|
} catch {}
|
||||||
|
},
|
||||||
|
handleRowCheckboxChange(records) {
|
||||||
|
this.checkedIds = records.map((item) => item.id);
|
||||||
|
},
|
||||||
|
#end
|
||||||
|
|
||||||
#if ($table.templateType == 11)
|
#if ($table.templateType == 11)
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNo = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
/** 添加/修改操作 */
|
/** 添加/修改操作 */
|
||||||
openForm(id) {
|
openForm(id) {
|
||||||
if (!this.${subJoinColumn.javaField}) {
|
if (!this.${subJoinColumn.javaField}) {
|
||||||
|
|||||||
+54
-9
@@ -53,26 +53,45 @@
|
|||||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||||
v-hasPermi="['${permissionPrefix}:export']">导出</el-button>
|
v-hasPermi="['${permissionPrefix}:export']">导出</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#if ( $table.templateType == 2 )
|
#if ( $table.templateType == 2 )
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="danger" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">
|
<el-button type="danger" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">
|
||||||
展开/折叠
|
展开/折叠
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
#end
|
#end
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="isEmpty(checkedIds)"
|
||||||
|
@click="handleDeleteBatch"
|
||||||
|
v-hasPermi="['${permissionPrefix}:delete']"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
#end
|
||||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
|
#if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
|
||||||
<el-table
|
<el-table
|
||||||
|
row-key="id"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:data="list"
|
:data="list"
|
||||||
:stripe="true"
|
:stripe="true"
|
||||||
:highlight-current-row="true"
|
:highlight-current-row="true"
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
>
|
>
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#elseif ( $table.templateType == 2 )
|
#elseif ( $table.templateType == 2 )
|
||||||
@@ -87,7 +106,18 @@
|
|||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||||
>
|
>
|
||||||
#else
|
#else
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="list"
|
||||||
|
:stripe="true"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
|
>
|
||||||
|
#end
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
#end
|
#end
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
|
#if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
|
||||||
@@ -229,6 +259,7 @@ export default {
|
|||||||
refreshTable: true,
|
refreshTable: true,
|
||||||
// 选中行
|
// 选中行
|
||||||
currentRow: {},
|
currentRow: {},
|
||||||
|
checkedIds: [],
|
||||||
// 查询参数
|
// 查询参数
|
||||||
queryParams: {
|
queryParams: {
|
||||||
## 特殊:树表专属逻辑(树不需要分页接口)
|
## 特殊:树表专属逻辑(树不需要分页接口)
|
||||||
@@ -301,6 +332,20 @@ export default {
|
|||||||
this.#[[$modal]]#.msgSuccess("删除成功");
|
this.#[[$modal]]#.msgSuccess("删除成功");
|
||||||
} catch {}
|
} catch {}
|
||||||
},
|
},
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
/** 批量删除${table.classComment} */
|
||||||
|
async handleDeleteBatch() {
|
||||||
|
await this.#[[$modal]]#.confirm('是否确认删除?')
|
||||||
|
try {
|
||||||
|
await ${simpleClassName}Api.delete${simpleClassName}List(this.checkedIds);
|
||||||
|
await this.getList();
|
||||||
|
this.#[[$modal]]#.msgSuccess("删除成功");
|
||||||
|
} catch {}
|
||||||
|
},
|
||||||
|
handleRowCheckboxChange(records) {
|
||||||
|
this.checkedIds = records.map((item) => item.id);
|
||||||
|
},
|
||||||
|
#end
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
async handleExport() {
|
async handleExport() {
|
||||||
await this.#[[$modal]]#.confirm('是否确认导出所有${table.classComment}数据项?');
|
await this.#[[$modal]]#.confirm('是否确认导出所有${table.classComment}数据项?');
|
||||||
|
|||||||
+4
-4
@@ -113,7 +113,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { ${simpleClassName}Api } from '@/api/${table.moduleName}/${table.businessName}'
|
import { ${simpleClassName}Api, ${subSimpleClassName} } from '@/api/${table.moduleName}/${table.businessName}'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
@@ -144,12 +144,12 @@ const formRules = reactive({
|
|||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number, ${subJoinColumn.javaField}: number) => {
|
const open = async (type: string, id?: number, ${subJoinColumn.javaField}?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
dialogTitle.value = t('action.' + type)
|
dialogTitle.value = t('action.' + type)
|
||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
formData.value.${subJoinColumn.javaField} = ${subJoinColumn.javaField}
|
formData.value.${subJoinColumn.javaField} = ${subJoinColumn.javaField} as any
|
||||||
// 修改时,设置数据
|
// 修改时,设置数据
|
||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
@@ -170,7 +170,7 @@ const submitForm = async () => {
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
const data = formData.value
|
const data = formData.value as unknown as ${subSimpleClassName}
|
||||||
if (formType.value === 'create') {
|
if (formType.value === 'create') {
|
||||||
await ${simpleClassName}Api.create${subSimpleClassName}(data)
|
await ${simpleClassName}Api.create${subSimpleClassName}(data)
|
||||||
message.success(t('common.createSuccess'))
|
message.success(t('common.createSuccess'))
|
||||||
|
|||||||
+3
-3
@@ -266,10 +266,10 @@ import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } f
|
|||||||
import { ${simpleClassName}Api } from '@/api/${table.moduleName}/${table.businessName}'
|
import { ${simpleClassName}Api } from '@/api/${table.moduleName}/${table.businessName}'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
${subJoinColumn.javaField}: undefined // ${subJoinColumn.columnComment}(主表的关联字段)
|
${subJoinColumn.javaField}: number // ${subJoinColumn.columnComment}(主表的关联字段)
|
||||||
}>()
|
}>()
|
||||||
const formLoading = ref(false) // 表单的加载中
|
const formLoading = ref(false) // 表单的加载中
|
||||||
const formData = ref([])
|
const formData = ref<any#if ( $subTable.subJoinMany )[]#end>(#if ( $subTable.subJoinMany )[]#else{}#end)
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
#foreach ($column in $subColumns)
|
#foreach ($column in $subColumns)
|
||||||
#if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键
|
#if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键
|
||||||
@@ -336,7 +336,7 @@ const handleAdd = () => {
|
|||||||
#end
|
#end
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
row.${subJoinColumn.javaField} = props.${subJoinColumn.javaField}
|
row.${subJoinColumn.javaField} = props.${subJoinColumn.javaField} as any
|
||||||
formData.value.push(row)
|
formData.value.push(row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+49
-4
@@ -16,8 +16,31 @@
|
|||||||
>
|
>
|
||||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
</el-button>
|
</el-button>
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
:disabled="isEmpty(checkedIds)"
|
||||||
|
@click="handleDeleteBatch"
|
||||||
|
v-hasPermi="['${permissionPrefix}:delete']"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
|
||||||
|
</el-button>
|
||||||
|
#end
|
||||||
#end
|
#end
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table
|
||||||
|
row-key="id"
|
||||||
|
v-loading="loading"
|
||||||
|
:data="list"
|
||||||
|
:stripe="true"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
|
>
|
||||||
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
#end
|
||||||
#foreach($column in $subColumns)
|
#foreach($column in $subColumns)
|
||||||
#if ($column.listOperationResult)
|
#if ($column.listOperationResult)
|
||||||
#set ($dictType=$column.dictType)
|
#set ($dictType=$column.dictType)
|
||||||
@@ -85,14 +108,18 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
import { ${simpleClassName}Api } from '@/api/${table.moduleName}/${table.businessName}'
|
#if ($deleteBatchEnable)
|
||||||
|
import { isEmpty } from '@/utils/is'
|
||||||
|
#end
|
||||||
|
import { ${simpleClassName}Api, ${subSimpleClassName} } from '@/api/${table.moduleName}/${table.businessName}'
|
||||||
#if ($table.templateType == 11)
|
#if ($table.templateType == 11)
|
||||||
import ${subSimpleClassName}Form from './${subSimpleClassName}Form.vue'
|
import ${subSimpleClassName}Form from './${subSimpleClassName}Form.vue'
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
#if ($table.templateType == 11)
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
#end
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
${subJoinColumn.javaField}?: number // ${subJoinColumn.columnComment}(主表的关联字段)
|
${subJoinColumn.javaField}?: number // ${subJoinColumn.columnComment}(主表的关联字段)
|
||||||
}>()
|
}>()
|
||||||
@@ -144,12 +171,12 @@ const getList = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ($table.templateType == 11)
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
#if ($table.templateType == 11)
|
|
||||||
|
|
||||||
/** 添加/修改操作 */
|
/** 添加/修改操作 */
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
@@ -173,6 +200,24 @@ const handleDelete = async (id: number) => {
|
|||||||
await getList()
|
await getList()
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ($table.templateType == 11 && $deleteBatchEnable)
|
||||||
|
/** 批量删除${subTable.classComment} */
|
||||||
|
const handleDeleteBatch = async () => {
|
||||||
|
try {
|
||||||
|
// 删除的二次确认
|
||||||
|
await message.delConfirm()
|
||||||
|
await ${simpleClassName}Api.delete${subSimpleClassName}List(checkedIds.value);
|
||||||
|
message.success(t('common.delSuccess'))
|
||||||
|
await getList();
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
const checkedIds = ref<number[]>([])
|
||||||
|
const handleRowCheckboxChange = (records: ${subSimpleClassName}[]) => {
|
||||||
|
checkedIds.value = records.map((item) => item.id);
|
||||||
|
}
|
||||||
|
#end
|
||||||
#end
|
#end
|
||||||
#if ($table.templateType != 11)
|
#if ($table.templateType != 11)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -139,7 +139,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { ${simpleClassName}Api, ${simpleClassName}VO } from '@/api/${table.moduleName}/${table.businessName}'
|
import { ${simpleClassName}Api, ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}'
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#if ( $table.templateType == 2 )
|
#if ( $table.templateType == 2 )
|
||||||
import { defaultProps, handleTree } from '@/utils/tree'
|
import { defaultProps, handleTree } from '@/utils/tree'
|
||||||
@@ -243,7 +243,7 @@ const submitForm = async () => {
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
const data = formData.value as unknown as ${simpleClassName}VO
|
const data = formData.value as unknown as ${simpleClassName}
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType == 10 || $table.templateType == 12 )
|
#if ( $table.templateType == 10 || $table.templateType == 12 )
|
||||||
#if ( $subTables && $subTables.size() > 0 )
|
#if ( $subTables && $subTables.size() > 0 )
|
||||||
|
|||||||
+49
-3
@@ -107,6 +107,17 @@
|
|||||||
<Icon icon="ep:sort" class="mr-5px" /> 展开/折叠
|
<Icon icon="ep:sort" class="mr-5px" /> 展开/折叠
|
||||||
</el-button>
|
</el-button>
|
||||||
#end
|
#end
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
:disabled="isEmpty(checkedIds)"
|
||||||
|
@click="handleDeleteBatch"
|
||||||
|
v-hasPermi="['${table.moduleName}:${simpleClassName_strikeCase}:delete']"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
|
||||||
|
</el-button>
|
||||||
|
#end
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
@@ -116,12 +127,16 @@
|
|||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
|
#if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
|
||||||
<el-table
|
<el-table
|
||||||
|
row-key="id"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:data="list"
|
:data="list"
|
||||||
:stripe="true"
|
:stripe="true"
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
highlight-current-row
|
highlight-current-row
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
>
|
>
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#elseif ( $table.templateType == 2 )
|
#elseif ( $table.templateType == 2 )
|
||||||
@@ -135,7 +150,19 @@
|
|||||||
v-if="refreshTable"
|
v-if="refreshTable"
|
||||||
>
|
>
|
||||||
#else
|
#else
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table
|
||||||
|
row-key="id"
|
||||||
|
v-loading="loading"
|
||||||
|
:data="list"
|
||||||
|
:stripe="true"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
#if ($deleteBatchEnable)
|
||||||
|
@selection-change="handleRowCheckboxChange"
|
||||||
|
#end
|
||||||
|
>
|
||||||
|
#end
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
#end
|
#end
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
|
#if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
|
||||||
@@ -234,13 +261,14 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import { isEmpty } from '@/utils/is'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#if ( $table.templateType == 2 )
|
#if ( $table.templateType == 2 )
|
||||||
import { handleTree } from '@/utils/tree'
|
import { handleTree } from '@/utils/tree'
|
||||||
#end
|
#end
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import { ${simpleClassName}Api, ${simpleClassName}VO } from '@/api/${table.moduleName}/${table.businessName}'
|
import { ${simpleClassName}Api, ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}'
|
||||||
import ${simpleClassName}Form from './${simpleClassName}Form.vue'
|
import ${simpleClassName}Form from './${simpleClassName}Form.vue'
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
#if ( $table.templateType != 10 )
|
#if ( $table.templateType != 10 )
|
||||||
@@ -256,7 +284,7 @@ const message = useMessage() // 消息弹窗
|
|||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(true) // 列表的加载中
|
||||||
const list = ref<${simpleClassName}VO[]>([]) // 列表的数据
|
const list = ref<${simpleClassName}[]>([]) // 列表的数据
|
||||||
## 特殊:树表专属逻辑(树不需要分页接口)
|
## 特殊:树表专属逻辑(树不需要分页接口)
|
||||||
#if ( $table.templateType != 2 )
|
#if ( $table.templateType != 2 )
|
||||||
const total = ref(0) // 列表的总页数
|
const total = ref(0) // 列表的总页数
|
||||||
@@ -330,6 +358,24 @@ const handleDelete = async (id: number) => {
|
|||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ($table.templateType != 2 && $deleteBatchEnable)
|
||||||
|
/** 批量删除${table.classComment} */
|
||||||
|
const handleDeleteBatch = async () => {
|
||||||
|
try {
|
||||||
|
// 删除的二次确认
|
||||||
|
await message.delConfirm()
|
||||||
|
await ${simpleClassName}Api.delete${simpleClassName}List(checkedIds.value);
|
||||||
|
message.success(t('common.delSuccess'))
|
||||||
|
await getList();
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
const checkedIds = ref<number[]>([])
|
||||||
|
const handleRowCheckboxChange = (records: ${simpleClassName}[]) => {
|
||||||
|
checkedIds.value = records.map((item) => item.id);
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
+2
-2
@@ -8,7 +8,7 @@ import { ImageUpload, FileUpload } from "#/components/upload";
|
|||||||
import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue';
|
import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue';
|
||||||
import { DICT_TYPE, getDictOptions } from '#/utils';
|
import { DICT_TYPE, getDictOptions } from '#/utils';
|
||||||
#if($table.templateType == 2)## 树表需要导入这些
|
#if($table.templateType == 2)## 树表需要导入这些
|
||||||
import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}';
|
import { get${simpleClassName}List } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
|
||||||
import { handleTree } from '@vben/utils'
|
import { handleTree } from '@vben/utils'
|
||||||
#end
|
#end
|
||||||
## 特殊:主子表专属逻辑
|
## 特殊:主子表专属逻辑
|
||||||
@@ -22,7 +22,7 @@ import { handleTree } from '@vben/utils'
|
|||||||
|
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { $t } from '#/locales';
|
import { $t } from '#/locales';
|
||||||
import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}';
|
import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user