-- 考勤定位字段迁移。旧规则保持 location_required=0,先配置地点再启用范围限制。
|
DELIMITER $$
|
DROP PROCEDURE IF EXISTS xgdl_hrm_attendance_add_column_20261024$$
|
CREATE PROCEDURE xgdl_hrm_attendance_add_column_20261024(
|
IN p_table_name VARCHAR(64), IN p_column_name VARCHAR(64), IN p_ddl_sql VARCHAR(1000))
|
BEGIN
|
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table_name AND COLUMN_NAME = p_column_name) THEN
|
SET @hrm_location_ddl = p_ddl_sql;
|
PREPARE hrm_location_stmt FROM @hrm_location_ddl;
|
EXECUTE hrm_location_stmt;
|
DEALLOCATE PREPARE hrm_location_stmt;
|
END IF;
|
END$$
|
DELIMITER ;
|
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','location_name',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN location_name varchar(100) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','location_address',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN location_address varchar(255) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','longitude',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN longitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','latitude',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN latitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','radius_meters',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN radius_meters int DEFAULT 10');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','location_required',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN location_required bit(1) NOT NULL DEFAULT b''0''');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_rule','coordinate_system',
|
'ALTER TABLE hrm_attendance_rule ADD COLUMN coordinate_system varchar(20) DEFAULT ''WGS84''');
|
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_in_longitude',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_in_longitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_in_latitude',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_in_latitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_in_accuracy',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_in_accuracy decimal(8,2) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_in_distance',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_in_distance decimal(10,2) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_in_address',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_in_address varchar(255) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_out_longitude',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_out_longitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_out_latitude',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_out_latitude decimal(10,7) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_out_accuracy',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_out_accuracy decimal(8,2) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_out_distance',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_out_distance decimal(10,2) NULL');
|
CALL xgdl_hrm_attendance_add_column_20261024('hrm_attendance_record','clock_out_address',
|
'ALTER TABLE hrm_attendance_record ADD COLUMN clock_out_address varchar(255) NULL');
|
|
DROP PROCEDURE xgdl_hrm_attendance_add_column_20261024;
|
|
-- 对齐考勤规则与打卡按钮权限码,确保 Web 和 APP 普通角色可以授权使用。
|
UPDATE `system_menu` SET `permission` = 'hrm:attendance-rule:query' WHERE `id` = 60131;
|
UPDATE `system_menu` SET `permission` = 'hrm:attendance-rule:create' WHERE `id` = 60132;
|
UPDATE `system_menu` SET `permission` = 'hrm:attendance-rule:update' WHERE `id` = 60133;
|
UPDATE `system_menu` SET `permission` = 'hrm:attendance-rule:delete' WHERE `id` = 60134;
|
UPDATE `system_menu` SET `permission` = 'hrm:attendance-rule:export' WHERE `id` = 60135;
|
|
INSERT INTO `system_menu`
|
(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`,
|
`component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`,
|
`updater`, `update_time`, `deleted`)
|
VALUES
|
(60114, '定位打卡', 'hrm:attendance-record:clock', 3, 4, 6011, '', '', '', '',
|
0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
|
ON DUPLICATE KEY UPDATE
|
`name` = VALUES(`name`), `permission` = VALUES(`permission`), `status` = 0, `deleted` = b'0';
|
|
-- 已拥有“考勤记录”菜单的角色自动获得定位打卡按钮权限。
|
INSERT INTO `system_role_menu`
|
(`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
|
SELECT DISTINCT parent_role.`role_id`, 60114, '1', NOW(), '1', NOW(), b'0', parent_role.`tenant_id`
|
FROM `system_role_menu` parent_role
|
WHERE parent_role.`menu_id` = 6011 AND parent_role.`deleted` = b'0'
|
AND NOT EXISTS (
|
SELECT 1 FROM `system_role_menu` current_grant
|
WHERE current_grant.`role_id` = parent_role.`role_id`
|
AND current_grant.`menu_id` = 60114
|
AND current_grant.`tenant_id` = parent_role.`tenant_id`
|
AND current_grant.`deleted` = b'0'
|
);
|