✨ 组织树独立权限、平台公司回写、合同计费客商角色与查看菜单补齐

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-11-04 03:15:42 +08:00
parent a0e30d5834
commit 69f9c9af7f
26 changed files with 745 additions and 98 deletions
@@ -203,14 +203,18 @@ public class Dept extends TenantEntity {
/**
* 是否平台公司:0否,1是
* ALWAYS:保证「否(0)」也能更新落库,避免被字段策略跳过
*/
@Schema(description = "是否平台公司:0否,1是")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Integer isPlatformCompany;
/**
* 是否业务部门:0否,1是
* ALWAYS:保证「否(0)」也能更新落库,避免被字段策略跳过
*/
@Schema(description = "是否业务部门:0否,1是")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Integer isBusinessDept;
/**
@@ -67,6 +67,18 @@ public class RoleDataScopeVO implements Serializable {
return scope;
}
/**
* 无组织可见(未配置数据权限时的默认结果)
*/
public static RoleDataScopeVO none() {
RoleDataScopeVO scope = new RoleDataScopeVO();
scope.setScopeType(RoleDataScopeType.CUSTOM.getCode());
scope.setAllDept(false);
scope.setOwnCreate(false);
scope.setDeptIds(Collections.emptyList());
return scope;
}
public static RoleDataScopeVO ownCreate() {
RoleDataScopeVO scope = new RoleDataScopeVO();
scope.setScopeType(RoleDataScopeType.OWN_CREATE.getCode());
@@ -64,9 +64,13 @@ public class ContractManageVO extends ContractManage {
private Boolean hcsSynced;
@TableField(exist = false)
@Schema(description = "生效类型筛选")
@Schema(description = "合同状态筛选")
private String effectiveType;
@TableField(exist = false)
@Schema(description = "客商(匹配甲/乙/丙方)")
private String partyName;
@TableField(exist = false)
@Schema(description = "创建人姓名")
private String createUserName;
@@ -126,8 +126,11 @@ public class DeptController extends BladeController {
/**
* 获取部门树形结构
* <p>
* 登录即可调用;数据范围由角色「数据权限」中 {@code dept_tree}(树形结构)单独配置,
* 未配置时返回空树(默认不展示)。
*/
@PreAuth(menu = "dept")
@PreAuth(AuthConstant.PERMIT_ALL)
@GetMapping("/tree")
@ApiOperationSupport(order = 4)
@Operation(summary = "树形结构", description = "树形结构")
@@ -139,8 +142,9 @@ public class DeptController extends BladeController {
* 懒加载获取部门树形结构
* <p>
* tenantId 由 Service 层完整决策:超管入参为空表示查全部,非超管强制覆盖为会话租户。
* 数据范围与 {@link #tree} 相同,由 {@code dept_tree} 单独配置,未配置时返回空树。
*/
@PreAuth(menu = "dept")
@PreAuth(AuthConstant.PERMIT_ALL)
@GetMapping("/lazy-tree")
@ApiOperationSupport(order = 5)
@Operation(summary = "懒加载树形结构", description = "树形结构")
@@ -66,6 +66,16 @@ public interface IRoleMenuDataScopeService extends BaseService<RoleMenuDataScope
*/
RoleDataScopeVO resolveByMenuCode(List<Long> roleIds, String menuCode, List<Long> userDeptIds);
/**
* 按菜单编码解析角色数据权限;菜单不存在或未配置时返回空权限(不回落为全部组织)
*
* @param roleIds 角色ID集合
* @param menuCode 菜单编码
* @param userDeptIds 用户所属组织
* @return 解析结果
*/
RoleDataScopeVO resolveByMenuCodeOrEmpty(List<Long> roleIds, String menuCode, List<Long> userDeptIds);
/**
* 合并用户全部角色菜单配置为最宽数据权限
*
@@ -224,13 +224,18 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
.toList();
}
/**
* 组织树专用数据权限菜单编码(角色「数据权限」中单独配置;未配置时组织树默认不展示)。
*/
public static final String MENU_DEPT_TREE = "dept_tree";
/**
* 解析当前登录用户的组织树数据权限。
* <p>
* 超管或角色菜单数据权限最宽合并为「全部组织」时不过滤;
* 其余按角色配置的组织并集过滤。仅「本人创建」时按用户所属组织及下级展示组织树。
* 仅读取 {@link #MENU_DEPT_TREE}「树形结构」菜单的数据权限配置,不再合并其他业务菜单;
* 超管不过滤;未配置该菜单数据权限时返回空树(默认不显示)。
*
* @return 过滤上下文;无法识别用户时按空权限处理
* @return 过滤上下文;无法识别用户或未配置时按空权限处理
*/
private DeptDataScopeFilter resolveDeptDataScopeFilter() {
if (AuthUtil.isAdministrator()) {
@@ -246,8 +251,11 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
if (Func.isNotEmpty(user) && Func.isNotEmpty(user.getDeptId())) {
userDeptIds = Func.toLongList(user.getDeptId());
}
RoleDataScopeVO scope = roleMenuDataScopeService.resolveWidest(roleIds, userDeptIds);
if (scope == null || scope.isAllDept()) {
RoleDataScopeVO scope = roleMenuDataScopeService.resolveByMenuCodeOrEmpty(roleIds, MENU_DEPT_TREE, userDeptIds);
if (scope == null) {
return DeptDataScopeFilter.empty();
}
if (scope.isAllDept()) {
return DeptDataScopeFilter.all();
}
LinkedHashSet<Long> allowedDeptIds = new LinkedHashSet<>();
@@ -665,12 +673,9 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
dept.setAncestors(parent.getAncestors() + StringPool.COMMA + dept.getParentId());
}
dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
if (dept.getIsPlatformCompany() == null) {
dept.setIsPlatformCompany(0);
}
if (dept.getIsBusinessDept() == null) {
dept.setIsBusinessDept(0);
}
// 统一规范为 0/1,避免前端传空串、布尔或其它类型导致更新未生效
dept.setIsPlatformCompany(normalizeYesNoFlag(dept.getIsPlatformCompany()));
dept.setIsBusinessDept(normalizeYesNoFlag(dept.getIsBusinessDept()));
// 排序未填时默认 1
if (dept.getSort() == null) {
dept.setSort(1);
@@ -679,9 +684,24 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
throw new ServiceException("租户ID不能为空");
}
validateDeptCategory(dept);
validateDeptCode(dept, parent);
validateDeptCode(dept);
validateContractInitialSerial(dept);
return saveOrUpdate(dept);
boolean saved = saveOrUpdate(dept);
if (saved && Func.isNotEmpty(dept.getId())) {
// 显式回写两个业务标志,避免部分更新路径漏改
this.update(Wrappers.<Dept>lambdaUpdate()
.set(Dept::getIsPlatformCompany, dept.getIsPlatformCompany())
.set(Dept::getIsBusinessDept, dept.getIsBusinessDept())
.eq(Dept::getId, dept.getId()));
}
return saved;
}
/**
* 将是否类标志规范为 0/1;空值按 0 处理。
*/
private Integer normalizeYesNoFlag(Integer flag) {
return Integer.valueOf(1).equals(flag) ? 1 : 0;
}
@Override
@@ -881,9 +901,9 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
}
}
private void validateDeptCode(Dept dept, Dept parent) {
private void validateDeptCode(Dept dept) {
String deptCode = dept.getDeptCode();
// 组织编码非必填,为空时存 null,避免唯一索引冲突
// 组织编码非必填,为空时存 null,避免唯一索引冲突;不再校验 GWWL/上级编码+三位数字格式
if (StringUtil.isBlank(deptCode)) {
dept.setDeptCode(null);
return;
@@ -892,26 +912,6 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
if (deptCode.length() > 30) {
throw new ServiceException("组织编码不能超过30个字符");
}
// 顶级组织不依赖上级编码
if (parent == null) {
this.ensureDeptCodeUnique(dept, deptCode);
dept.setDeptCode(deptCode);
return;
}
if (StringUtil.isBlank(parent.getDeptCode())) {
throw new ServiceException("请选择已配置组织编码的上级组织");
}
// 公司:GWWL+三位数字;部门:所属公司编码+三位数字;其他:上级编码+三位数字
String expectedParentCode = parent.getDeptCode();
if (DeptCategory.COMPANY.getCode().equals(dept.getDeptCategory())) {
expectedParentCode = OAConvertConstant.OA_SYNC_ROOT_DEPT_CODE;
} else if (DeptCategory.DEPT.getCode().equals(dept.getDeptCategory())
&& StringUtil.isNotBlank(dept.getBelongCompanyCode())) {
expectedParentCode = dept.getBelongCompanyCode();
}
if (!org.springblade.system.util.DeptCodeUtil.matchesChildCode(expectedParentCode, deptCode)) {
throw new ServiceException("组织编码格式应为:" + expectedParentCode + "三位数字(不足补零,中间不加-)");
}
this.ensureDeptCodeUnique(dept, deptCode);
dept.setDeptCode(deptCode);
}
@@ -184,20 +184,44 @@ public class RoleMenuDataScopeServiceImpl extends BaseServiceImpl<RoleMenuDataSc
if (Func.isEmpty(roleIds) || Func.isBlank(menuCode)) {
return RoleDataScopeVO.all();
}
Menu menu = menuMapper.selectOne(Wrappers.<Menu>lambdaQuery()
.eq(Menu::getCode, menuCode)
.eq(Menu::getIsDeleted, 0)
.last("limit 1"));
Menu menu = findMenuByCode(menuCode);
if (Func.isEmpty(menu)) {
return RoleDataScopeVO.all();
}
List<RoleMenuDataScope> scopeList = list(Wrappers.<RoleMenuDataScope>lambdaQuery()
.in(RoleMenuDataScope::getRoleId, roleIds)
.eq(RoleMenuDataScope::getMenuId, menu.getId())
.eq(RoleMenuDataScope::getIsDeleted, 0));
List<RoleMenuDataScope> scopeList = listScopes(roleIds, menu.getId());
return mergeScopes(scopeList, userDeptIds);
}
@Override
public RoleDataScopeVO resolveByMenuCodeOrEmpty(List<Long> roleIds, String menuCode, List<Long> userDeptIds) {
if (Func.isEmpty(roleIds) || Func.isBlank(menuCode)) {
return RoleDataScopeVO.none();
}
Menu menu = findMenuByCode(menuCode);
if (Func.isEmpty(menu)) {
return RoleDataScopeVO.none();
}
List<RoleMenuDataScope> scopeList = listScopes(roleIds, menu.getId());
if (Func.isEmpty(scopeList)) {
return RoleDataScopeVO.none();
}
return mergeScopes(scopeList, userDeptIds);
}
private Menu findMenuByCode(String menuCode) {
return menuMapper.selectOne(Wrappers.<Menu>lambdaQuery()
.eq(Menu::getCode, menuCode)
.eq(Menu::getIsDeleted, 0)
.last("limit 1"));
}
private List<RoleMenuDataScope> listScopes(List<Long> roleIds, Long menuId) {
return list(Wrappers.<RoleMenuDataScope>lambdaQuery()
.in(RoleMenuDataScope::getRoleId, roleIds)
.eq(RoleMenuDataScope::getMenuId, menuId)
.eq(RoleMenuDataScope::getIsDeleted, 0));
}
@Override
public RoleDataScopeVO resolveWidest(List<Long> roleIds, List<Long> userDeptIds) {
if (Func.isEmpty(roleIds)) {
@@ -310,7 +310,7 @@ public class CommonAddressServiceImpl extends BaseServiceImpl<CommonAddressMappe
private void fillDisplay(CommonAddressVO address) {
address.setSiteCodeDisplay(TYPE_NORMAL.equals(address.getAddressType()) ? NORMAL_SITE_CODE : address.getSiteCode());
address.setReadonly(!TransportBusinessSupport.isAdministrator() && !Objects.equals(address.getDeptId(), currentDeptId()));
address.setReadonly(TransportBusinessSupport.isDeptReadonly(address.getDeptId(), TransportBusinessSupport.MENU_COMMON_ADDRESS));
address.setCreateUserName(UserCache.getUserRealName(address.getCreateUser()));
address.setUpdateUserName(UserCache.getUserRealName(address.getUpdateUser()));
}
@@ -60,7 +60,6 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -646,6 +645,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
.eq(Func.isNotEmpty(contractManage.getArchiveStatus()), ContractManage::getArchiveStatus, contractManage.getArchiveStatus())
.eq(Func.isNotEmpty(contractManage.getContractStage()), ContractManage::getContractStage, contractManage.getContractStage())
.orderByDesc(ContractManage::getCreateTime);
applyPartyName(queryWrapper, contractManage.getPartyName());
applyEffectiveType(queryWrapper, contractManage.getEffectiveType());
applyExpireScope(queryWrapper, contractManage.getExpireScope());
// 是否同步金蝶(kingdee_id 是否已回填)/ 是否同步合规(hcs_sync_status 是否 synced)
@@ -671,6 +671,18 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
}
}
/**
* 客商筛选:匹配合同甲/乙/丙方名称(模糊)
*/
private void applyPartyName(LambdaQueryWrapper<ContractManage> queryWrapper, String partyName) {
if (Func.isEmpty(partyName)) {
return;
}
queryWrapper.and(wrapper -> wrapper.like(ContractManage::getPartyA, partyName)
.or().like(ContractManage::getPartyB, partyName)
.or().like(ContractManage::getPartyC, partyName));
}
private void applyEffectiveType(LambdaQueryWrapper<ContractManage> queryWrapper, String effectiveType) {
if (Func.isEmpty(effectiveType)) {
return;
@@ -700,7 +712,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
.lt(ContractManage::getTemporaryEndDate, today)
.or(wrapper2 -> wrapper2.ne(ContractManage::getContractStage, STAGE_TEMPORARY)
.lt(ContractManage::getEndDate, today)));
default -> throw new ServiceException("无效的生效类型筛选条件");
default -> throw new ServiceException("无效的合同状态筛选条件");
}
}
@@ -1049,18 +1061,11 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
if (!(parsed instanceof List<?> plans)) {
throw new ServiceException("计费方案设置格式不正确");
}
Map<String, Integer> defaultPlanCount = new HashMap<>();
for (Object value : plans) {
if (!(value instanceof Map<?, ?> plan)) {
throw new ServiceException("计费方案设置格式不正确");
}
String transportMode = trimValue(plan.get("transportMode"));
if (isDefaultBillingPlan(plan)) {
int count = defaultPlanCount.merge(transportMode, 1, Integer::sum);
if (count > 1) {
throw new ServiceException("同一运输方式仅支持配置一个默认计费方案");
}
}
// 一个客商对应一个方案,不再校验「默认方案」
validateBillingMatchConditions(plan);
validateBillingRuleTaxRates(plan);
}
@@ -1122,15 +1127,6 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
return value != null && !String.valueOf(value).trim().isEmpty();
}
private boolean isDefaultBillingPlan(Map<?, ?> plan) {
Object value = plan.get("defaultPlan");
return Boolean.TRUE.equals(value) || "true".equalsIgnoreCase(String.valueOf(value)) || "1".equals(String.valueOf(value));
}
private String trimValue(Object value) {
return value == null ? null : TransportBusinessSupport.trimToNull(String.valueOf(value));
}
private void validatePaymentRatios(String paymentRatioJson) {
if (Func.isEmpty(paymentRatioJson)) return;
try {
@@ -93,7 +93,8 @@ public final class ContractPartySupport {
}
/**
* 校验计费方案均已绑定合同明细中的客商
* 校验计费方案均已绑定合同明细中的客商。
* 客户合同仅允许绑定甲方;承运商合同仅允许绑定乙方/丙方。
*/
public static void validateBillingPlanBindings(ContractManage contractManage) {
String billingPlanJson = contractManage.getBillingPlanJson();
@@ -104,7 +105,10 @@ public final class ContractPartySupport {
if (!(parsed instanceof List<?> plans) || plans.isEmpty()) {
return;
}
Map<String, Map<String, Object>> partyByRowId = indexPartyRows(contractManage);
Set<String> allowedRoles = allowedBillingPartyRoles(contractManage.getContractCategory());
Map<String, Map<String, Object>> partyByRowId = indexPartyRows(contractManage).entrySet().stream()
.filter(entry -> allowedRoles.contains(normalizeRole(String.valueOf(entry.getValue().get("partyRole")))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> left, LinkedHashMap::new));
Set<String> customerKeys = partyByRowId.values().stream()
.map(ContractPartySupport::customerMatchKey)
.filter(Func::isNotEmpty)
@@ -121,6 +125,9 @@ public final class ContractPartySupport {
if (Func.isEmpty(partyRowId) && Func.isEmpty(customerId) && Func.isEmpty(customerName)) {
throw new ServiceException("计费方案第" + (index + 1) + "个必须选择适用客商");
}
if (Func.isNotEmpty(partyRole) && !allowedRoles.contains(partyRole)) {
throw new ServiceException(billingPartyRoleMessage(contractManage.getContractCategory(), index + 1));
}
boolean matched = false;
if (Func.isNotEmpty(partyRowId) && partyByRowId.containsKey(partyRowId)) {
matched = true;
@@ -134,11 +141,36 @@ public final class ContractPartySupport {
}
}
if (!matched) {
throw new ServiceException("计费方案第" + (index + 1) + "个适用客商不在合同甲/乙/丙明细中");
throw new ServiceException(billingPartyRoleMessage(contractManage.getContractCategory(), index + 1));
}
}
}
/**
* 计费方案可选客商角色:客户合同=甲方;承运商合同=乙方/丙方
*/
public static Set<String> allowedBillingPartyRoles(String contractCategory) {
String category = Func.toStr(contractCategory).trim();
if ("承运商合同".equals(category)) {
return Set.of(ROLE_B, ROLE_C);
}
if ("客户合同".equals(category)) {
return Set.of(ROLE_A);
}
return Set.of(ROLE_A, ROLE_B, ROLE_C);
}
private static String billingPartyRoleMessage(String contractCategory, int planIndex) {
String category = Func.toStr(contractCategory).trim();
if ("承运商合同".equals(category)) {
return "计费方案第" + planIndex + "个适用客商只能选择乙方或丙方";
}
if ("客户合同".equals(category)) {
return "计费方案第" + planIndex + "个适用客商只能选择甲方";
}
return "计费方案第" + planIndex + "个适用客商不在合同甲/乙/丙明细中";
}
public static List<Map<String, Object>> parsePartyRows(String partyJson) {
if (Func.isEmpty(partyJson)) {
return List.of();
@@ -23,12 +23,11 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.CommonCargo;
import org.springblade.transport.pojo.vo.CommonCargoVO;
import org.springblade.transport.support.TransportBusinessSupport;
import java.math.BigDecimal;
import java.util.Objects;
@@ -52,8 +51,7 @@ public class CommonCargoWrapper extends BaseEntityWrapper<CommonCargo, CommonCar
}
commonCargoVO.setCreateUserName(UserCache.getUserRealName(commonCargo.getCreateUser()));
commonCargoVO.setUpdateUserName(UserCache.getUserRealName(commonCargo.getUpdateUser()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
commonCargoVO.setReadonly(currentDeptId != null && !Objects.equals(commonCargo.getDeptId(), currentDeptId));
commonCargoVO.setReadonly(TransportBusinessSupport.isDeptReadonly(commonCargo.getDeptId(), TransportBusinessSupport.MENU_COMMON_CARGO));
return commonCargoVO;
}
@@ -23,12 +23,11 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.CommonRoute;
import org.springblade.transport.pojo.vo.CommonRouteVO;
import org.springblade.transport.support.TransportBusinessSupport;
import java.util.Objects;
@@ -48,8 +47,7 @@ public class CommonRouteWrapper extends BaseEntityWrapper<CommonRoute, CommonRou
CommonRouteVO commonRouteVO = Objects.requireNonNull(BeanUtil.copyProperties(commonRoute, CommonRouteVO.class));
commonRouteVO.setCreateUserName(UserCache.getUserRealName(commonRoute.getCreateUser()));
commonRouteVO.setUpdateUserName(UserCache.getUserRealName(commonRoute.getUpdateUser()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
commonRouteVO.setReadonly(currentDeptId != null && !Objects.equals(commonRoute.getDeptId(), currentDeptId));
commonRouteVO.setReadonly(TransportBusinessSupport.isDeptReadonly(commonRoute.getDeptId(), TransportBusinessSupport.MENU_COMMON_ROUTE));
return commonRouteVO;
}
@@ -5,12 +5,11 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.LoadingManage;
import org.springblade.transport.pojo.vo.LoadingManageVO;
import org.springblade.transport.support.TransportBusinessSupport;
import java.math.BigDecimal;
import java.util.Objects;
@@ -31,8 +30,7 @@ public class LoadingManageWrapper extends BaseEntityWrapper<LoadingManage, Loadi
LoadingManageVO loadingManageVO = Objects.requireNonNull(BeanUtil.copyProperties(loadingManage, LoadingManageVO.class));
loadingManageVO.setCreateUserName(UserCache.getUserRealName(loadingManage.getCreateUser()));
loadingManageVO.setUpdateUserName(UserCache.getUserRealName(loadingManage.getUpdateUser()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
loadingManageVO.setReadonly(currentDeptId != null && !Objects.equals(loadingManage.getDeptId(), currentDeptId));
loadingManageVO.setReadonly(TransportBusinessSupport.isDeptReadonly(loadingManage.getDeptId(), TransportBusinessSupport.MENU_LOADING_MANAGE));
loadingManageVO.setBusinessStatusName(businessStatusName(loadingManage.getBusinessStatus()));
// 未维护里程的占位值 -1 对外展示为空
if (loadingManageVO.getMileage() != null
@@ -23,12 +23,11 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.ProcessConfig;
import org.springblade.transport.pojo.vo.ProcessConfigVO;
import org.springblade.transport.support.TransportBusinessSupport;
import java.util.Objects;
@@ -48,8 +47,7 @@ public class ProcessConfigWrapper extends BaseEntityWrapper<ProcessConfig, Proce
ProcessConfigVO processConfigVO = Objects.requireNonNull(BeanUtil.copyProperties(processConfig, ProcessConfigVO.class));
processConfigVO.setCreateUserName(UserCache.getUserRealName(processConfig.getCreateUser()));
processConfigVO.setUpdateUserName(UserCache.getUserRealName(processConfig.getUpdateUser()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
processConfigVO.setReadonly(currentDeptId != null && !Objects.equals(processConfig.getDeptId(), currentDeptId));
processConfigVO.setReadonly(TransportBusinessSupport.isDeptReadonly(processConfig.getDeptId(), TransportBusinessSupport.MENU_PROCESS_CONFIG));
processConfigVO.setStatusName(statusName(processConfig.getStatus()));
return processConfigVO;
}
@@ -23,12 +23,11 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.ShippingTemplate;
import org.springblade.transport.pojo.vo.ShippingTemplateVO;
import org.springblade.transport.support.TransportBusinessSupport;
import java.util.Objects;
@@ -48,8 +47,7 @@ public class ShippingTemplateWrapper extends BaseEntityWrapper<ShippingTemplate,
ShippingTemplateVO shippingTemplateVO = Objects.requireNonNull(BeanUtil.copyProperties(shippingTemplate, ShippingTemplateVO.class));
shippingTemplateVO.setCreateUserName(UserCache.getUserRealName(shippingTemplate.getCreateUser()));
shippingTemplateVO.setUpdateUserName(UserCache.getUserRealName(shippingTemplate.getUpdateUser()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
shippingTemplateVO.setReadonly(currentDeptId != null && !Objects.equals(shippingTemplate.getDeptId(), currentDeptId));
shippingTemplateVO.setReadonly(TransportBusinessSupport.isDeptReadonly(shippingTemplate.getDeptId(), TransportBusinessSupport.MENU_SHIPPING_TEMPLATE));
return shippingTemplateVO;
}
@@ -23,9 +23,7 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.UserCache;
import org.springblade.transport.pojo.entity.TransportPlan;
import org.springblade.transport.pojo.vo.TransportPlanVO;
@@ -50,8 +48,7 @@ public class TransportPlanWrapper extends BaseEntityWrapper<TransportPlan, Trans
transportPlanVO.setCreateUserName(UserCache.getUserRealName(transportPlan.getCreateUser()));
transportPlanVO.setUpdateUserName(UserCache.getUserRealName(transportPlan.getUpdateUser()));
transportPlanVO.setDataSource(TransportBusinessSupport.normalizeTransportPlanDataSource(transportPlan.getDataSource()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
transportPlanVO.setReadonly(currentDeptId != null && !Objects.equals(transportPlan.getDeptId(), currentDeptId));
transportPlanVO.setReadonly(TransportBusinessSupport.isDeptReadonly(transportPlan.getDeptId(), TransportBusinessSupport.MENU_TRANSPORT_PLAN));
transportPlanVO.setBusinessStatusName(businessStatusName(transportPlan.getBusinessStatus()));
return transportPlanVO;
}
@@ -23,7 +23,6 @@
package org.springblade.transport.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.DictBizCache;
@@ -54,8 +53,7 @@ public class WaybillWrapper extends BaseEntityWrapper<Waybill, WaybillVO> {
waybillVO.setCreateUserName(UserCache.getUserRealName(waybill.getCreateUser()));
waybillVO.setUpdateUserName(UserCache.getUserRealName(waybill.getUpdateUser()));
waybillVO.setDataSource(TransportBusinessSupport.normalizeWaybillDataSource(waybill.getDataSource()));
Long currentDeptId = Func.firstLong(AuthUtil.getDeptId());
waybillVO.setReadonly(currentDeptId != null && !Objects.equals(waybill.getDeptId(), currentDeptId));
waybillVO.setReadonly(TransportBusinessSupport.isDeptReadonly(waybill.getDeptId(), TransportBusinessSupport.MENU_WAYBILL_MANAGE));
String displayStatus = WaybillProcessSupport.normalizeBusinessStatus(
waybill.getBusinessStatus(), waybill.getProcessJson(), waybill.getDriverAcceptStatus());
waybillVO.setBusinessStatus(displayStatus);
@@ -0,0 +1,44 @@
-- ----------------------------
-- 补齐基础/系统业务模块「查看」按钮权限(角色授权用)
-- 执行前请确认目标库尚未存在同 code 菜单
-- ----------------------------
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075429330000000001, 2075421555200860162, 'port_terminal_view', '查看', 'port_terminal_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'port_terminal_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075429280000000001, 2075427962415456258, 'railway_station_view', '查看', 'railway_station_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'railway_station_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075431850000000001, 2075431169720033282, 'airport_master_view', '查看', 'airport_master_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'airport_master_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075449000000000009, 2075449000000000001, 'currency_view', '查看', 'currency_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'currency_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075449100000000006, 2075449100000000001, 'customer_type_view', '查看', 'customer_type_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'customer_type_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075449200000000009, 2075449200000000001, 'fee_item_view', '查看', 'fee_item_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'fee_item_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2075449300000000006, 2075449300000000001, 'measurement_unit_view', '查看', 'measurement_unit_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'measurement_unit_view' AND `is_deleted` = 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2080110200000000105, 2080110200000000101, 'business_dept_config_view', '查看', 'business_dept_config_view', '', '', 4, 2, 0, 1, NULL, '', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'business_dept_config_view' AND `is_deleted` = 0);
@@ -0,0 +1,511 @@
-- ----------------------------
-- 业务数据「所属组织」旧残留批量订正
-- 口径:按创建人当前所属组织(blade_user.dept_id 首个)回填 dept_id / dept_name(或 organization_name)
-- 适用:各环境 OA/组织同步后,业务表仍挂着已删/不存在/空组织的存量数据
-- 可重复执行;update_time 不改,保留原值
-- ----------------------------
--
-- 订正范围(仅处理残留):
-- 1) dept_id 为空或 <=0
-- 2) dept_id 在 blade_dept 中不存在或已逻辑删除
-- 仅名称字段的表:organization_name / dept_name 为空,或名称在当前未删除组织中找不到
--
-- 取值规则:
-- create_user → blade_user.dept_id(多组织取逗号分隔第一个,与登录态 AuthUtil.firstLong 一致)
-- → blade_dept.dept_name
-- 创建人无组织、或组织已失效:跳过该行
--
-- 特殊:
-- blade_customer_archive 客商所属组织业务上固定为「广西现代物流集团有限公司」,
-- 不按创建人组织回填,残留时改挂该顶级组织。
-- 合同负责部门(organization_id)/ 票据使用部门(blade_bill_payment.dept_id)不在本脚本范围。
--
-- 执行顺序:
-- 0 预览 → 1 备份 → 2 订正 → 3 校验;出问题用 4 回退
-- ----------------------------
SET NAMES utf8mb4;
-- ----------------------------
-- 0. 预览:各表待订正条数(执行订正前先看)
-- ----------------------------
-- DROP TEMPORARY TABLE IF EXISTS tmp_user_current_dept;
-- CREATE TEMPORARY TABLE tmp_user_current_dept AS
-- SELECT
-- u.id AS user_id,
-- CAST(SUBSTRING_INDEX(TRIM(u.dept_id), ',', 1) AS UNSIGNED) AS dept_id,
-- d.dept_name AS dept_name
-- FROM blade_user u
-- INNER JOIN blade_dept d
-- ON d.id = CAST(SUBSTRING_INDEX(TRIM(IFNULL(u.dept_id, '')), ',', 1) AS UNSIGNED)
-- AND IFNULL(d.is_deleted, 0) = 0
-- WHERE IFNULL(u.is_deleted, 0) = 0
-- AND IFNULL(TRIM(u.dept_id), '') <> ''
-- AND CAST(SUBSTRING_INDEX(TRIM(u.dept_id), ',', 1) AS UNSIGNED) > 0;
-- ALTER TABLE tmp_user_current_dept ADD PRIMARY KEY (user_id);
--
-- SELECT 'blade_common_route' AS table_name, COUNT(*) AS pending_cnt
-- FROM blade_common_route t
-- INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
-- WHERE IFNULL(t.is_deleted, 0) = 0
-- AND (t.dept_id IS NULL OR t.dept_id <= 0
-- OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- -- 其余表同理,可按第 2 节表清单自行复制预览
-- ----------------------------
-- 1. 备份表(不存在则创建;可重复执行)
-- ----------------------------
CREATE TABLE IF NOT EXISTS blade_biz_dept_backfill_bak_20261104 (
bak_id BIGINT NOT NULL AUTO_INCREMENT,
table_name VARCHAR(64) NOT NULL,
biz_id BIGINT NOT NULL,
old_dept_id BIGINT DEFAULT NULL,
old_dept_name VARCHAR(255) DEFAULT NULL,
new_dept_id BIGINT DEFAULT NULL,
new_dept_name VARCHAR(255) DEFAULT NULL,
create_user BIGINT DEFAULT NULL,
bak_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (bak_id),
KEY idx_biz_dept_bak_table_biz (table_name, biz_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='所属组织订正备份20261104';
START TRANSACTION;
-- 创建人 → 当前所属组织(多组织取第一个)
DROP TEMPORARY TABLE IF EXISTS tmp_user_current_dept;
CREATE TEMPORARY TABLE tmp_user_current_dept AS
SELECT
u.id AS user_id,
CAST(SUBSTRING_INDEX(TRIM(u.dept_id), ',', 1) AS UNSIGNED) AS dept_id,
d.dept_name AS dept_name
FROM blade_user u
INNER JOIN blade_dept d
ON d.id = CAST(SUBSTRING_INDEX(TRIM(IFNULL(u.dept_id, '')), ',', 1) AS UNSIGNED)
AND IFNULL(d.is_deleted, 0) = 0
WHERE IFNULL(u.is_deleted, 0) = 0
AND IFNULL(TRIM(u.dept_id), '') <> ''
AND CAST(SUBSTRING_INDEX(TRIM(u.dept_id), ',', 1) AS UNSIGNED) > 0;
ALTER TABLE tmp_user_current_dept ADD PRIMARY KEY (user_id);
-- 客商固定顶级组织
DROP TEMPORARY TABLE IF EXISTS tmp_fixed_owner_dept;
CREATE TEMPORARY TABLE tmp_fixed_owner_dept AS
SELECT d.id AS dept_id, d.dept_name
FROM blade_dept d
WHERE IFNULL(d.is_deleted, 0) = 0
AND d.dept_name = '广西现代物流集团有限公司'
ORDER BY d.id
LIMIT 1;
ALTER TABLE tmp_fixed_owner_dept ADD PRIMARY KEY (dept_id);
-- ----------------------------
-- 2. 订正:dept_id + dept_name 类表
-- ----------------------------
-- 2.1 常用线路
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_common_route', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_common_route t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_common_route t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.2 常用货物
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_common_cargo', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_common_cargo t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_common_cargo t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.3 过程配置
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_process_config', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_process_config t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_process_config t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.4 发货模板
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_shipping_template', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_shipping_template t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_shipping_template t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.5 运输计划
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_transport_plan', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_transport_plan t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_transport_plan t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.6 运单
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_waybill', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_waybill t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_waybill t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.7 配载
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_loading_manage', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_loading_manage t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_loading_manage t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.8 常用地址
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_common_address', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_common_address t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_common_address t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.9 预结算
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_pre_settlement', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_pre_settlement t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_pre_settlement t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.10 正式结算
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_formal_settlement', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_formal_settlement t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_formal_settlement t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.11 应收应付明细
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_receivable_payable_detail', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_receivable_payable_detail t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_receivable_payable_detail t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.12 异常处置
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_exception_disposal', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_exception_disposal t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_exception_disposal t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.13 风险处置
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_risk_disposal', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_risk_disposal t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_risk_disposal t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.14 开票申请
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_invoice_application', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_invoice_application t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_invoice_application t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.15 收票登记
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_invoice_receipt', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_invoice_receipt t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_invoice_receipt t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.16 付款申请
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_payment_application', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_payment_application t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_payment_application t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.17 运输对账
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_transport_reconciliation', t.id, t.dept_id, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_transport_reconciliation t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
UPDATE blade_transport_reconciliation t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- 2.18 客商档案:固定挂顶级「广西现代物流集团有限公司」
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_customer_archive', t.id, t.dept_id, t.dept_name, f.dept_id, f.dept_name, t.create_user
FROM blade_customer_archive t
CROSS JOIN tmp_fixed_owner_dept f
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0)
OR IFNULL(t.dept_id, 0) <> f.dept_id);
UPDATE blade_customer_archive t
CROSS JOIN tmp_fixed_owner_dept f
SET t.dept_id = f.dept_id,
t.dept_ids = CAST(f.dept_id AS CHAR),
t.dept_name = f.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_id IS NULL OR t.dept_id <= 0
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0)
OR IFNULL(t.dept_id, 0) <> f.dept_id);
-- ----------------------------
-- 2.19 仅名称字段:司机 / 车辆 / 船舶 / 派车
-- ----------------------------
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_transport_driver', t.id, NULL, t.organization_name, c.dept_id, c.dept_name, t.create_user
FROM blade_transport_driver t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
UPDATE blade_transport_driver t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.organization_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_transport_vehicle', t.id, NULL, t.organization_name, c.dept_id, c.dept_name, t.create_user
FROM blade_transport_vehicle t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
UPDATE blade_transport_vehicle t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.organization_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_transport_ship', t.id, NULL, t.organization_name, c.dept_id, c.dept_name, t.create_user
FROM blade_transport_ship t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
UPDATE blade_transport_ship t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.organization_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_vehicle_dispatch', t.id, NULL, t.organization_name, c.dept_id, c.dept_name, t.create_user
FROM blade_vehicle_dispatch t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
UPDATE blade_vehicle_dispatch t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.organization_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.organization_name IS NULL OR TRIM(t.organization_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.organization_name));
-- 2.20 结算调整单(仅 dept_name)
INSERT INTO blade_biz_dept_backfill_bak_20261104 (table_name, biz_id, old_dept_id, old_dept_name, new_dept_id, new_dept_name, create_user)
SELECT 'blade_settlement_adjustment', t.id, NULL, t.dept_name, c.dept_id, c.dept_name, t.create_user
FROM blade_settlement_adjustment t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_name IS NULL OR TRIM(t.dept_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.dept_name));
UPDATE blade_settlement_adjustment t
INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
SET t.dept_name = c.dept_name
WHERE IFNULL(t.is_deleted, 0) = 0
AND (t.dept_name IS NULL OR TRIM(t.dept_name) = ''
OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE IFNULL(d.is_deleted, 0) = 0 AND d.dept_name = t.dept_name));
COMMIT;
-- ----------------------------
-- 3. 校验(订正后执行)
-- ----------------------------
-- SELECT table_name, COUNT(*) AS bak_rows
-- FROM blade_biz_dept_backfill_bak_20261104
-- GROUP BY table_name
-- ORDER BY table_name;
--
-- -- 仍挂无效组织、且创建人当前有有效组织的运单(示例,期望 0)
-- SELECT COUNT(*) AS still_bad
-- FROM blade_waybill t
-- INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
-- WHERE IFNULL(t.is_deleted, 0) = 0
-- AND (t.dept_id IS NULL OR t.dept_id <= 0
-- OR NOT EXISTS (SELECT 1 FROM blade_dept d WHERE d.id = t.dept_id AND IFNULL(d.is_deleted, 0) = 0));
-- ----------------------------
-- 4. 回退(按备份表恢复;按需取消注释)
-- ----------------------------
-- UPDATE blade_waybill t
-- INNER JOIN blade_biz_dept_backfill_bak_20261104 b
-- ON b.table_name = 'blade_waybill' AND b.biz_id = t.id
-- SET t.dept_id = b.old_dept_id, t.dept_name = b.old_dept_name;
-- -- 其他表同理替换 table_name / 字段名
-- ----------------------------
-- 5. 可选:全量强制按创建人当前组织覆盖(不仅残留)
-- 默认不要执行;确认业务需要「全部改挂创建人当前组织」时再跑
-- ----------------------------
-- UPDATE blade_waybill t
-- INNER JOIN tmp_user_current_dept c ON c.user_id = t.create_user
-- SET t.dept_id = c.dept_id, t.dept_name = c.dept_name
-- WHERE IFNULL(t.is_deleted, 0) = 0;
@@ -34,4 +34,5 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
(2080110200000000101, 1123598815738675203, 'business_dept_config', '业务部门配置', 'business_dept_config', '/system/business-dept-config', 'iconfont iconicon_group', 25, 1, 0, 1, NULL, '', 0),
(2080110200000000102, 2080110200000000101, 'business_dept_config_add', '新增', 'business_dept_config_add', '', '', 1, 2, 0, 1, NULL, '', 0),
(2080110200000000103, 2080110200000000101, 'business_dept_config_edit', '编辑', 'business_dept_config_edit', '', '', 2, 2, 0, 1, NULL, '', 0),
(2080110200000000104, 2080110200000000101, 'business_dept_config_delete', '删除', 'business_dept_config_delete', '', '', 3, 2, 0, 1, NULL, '', 0);
(2080110200000000104, 2080110200000000101, 'business_dept_config_delete', '删除', 'business_dept_config_delete', '', '', 3, 2, 0, 1, NULL, '', 0),
(2080110200000000105, 2080110200000000101, 'business_dept_config_view', '查看', 'business_dept_config_view', '', '', 4, 2, 0, 1, NULL, '', 0);
+1
View File
@@ -40,3 +40,4 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000006, 2075449000000000001, 'currency_edit', '编辑', 'currency_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000007, 2075449000000000001, 'currency_status', '修改状态', 'currency_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000008, 2075449000000000001, 'currency_add', '新增', 'currency_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000009, 2075449000000000001, 'currency_view', '查看', 'currency_view', '', '', 1, 2, 0, 1, NULL, '', 0);
@@ -26,3 +26,4 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000003, 2075449100000000001, 'customer_type_edit', '编辑', 'customer_type_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000004, 2075449100000000001, 'customer_type_status', '修改状态', 'customer_type_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000005, 2075449100000000001, 'customer_type_add', '新增', 'customer_type_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000006, 2075449100000000001, 'customer_type_view', '查看', 'customer_type_view', '', '', 1, 2, 0, 1, NULL, '', 0);
@@ -0,0 +1,9 @@
-- ----------------------------
-- 组织树 /dept/tree 独立权限菜单(角色「数据权限」中配置)
-- 未配置该菜单数据权限时,组织树接口默认返回空(不展示)
-- ----------------------------
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`)
SELECT 2076110415738675232, 1123598815738675205, 'dept_tree', '树形结构', 'dept_tree', '/api/blade-system/dept/tree', 'file-text', 5, 2, 2, 1, '', '组织树接口独立数据权限配置项;未配置时组织树默认不展示', 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `blade_menu` WHERE `code` = 'dept_tree' AND `is_deleted` = 0);
+1
View File
@@ -33,3 +33,4 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000006, 2075449200000000001, 'fee_item_import', '批量导入', 'fee_item_import', '/api/blade-system/fee-item/import-fee-item', 'upload', 5, 2, 3, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000007, 2075449200000000001, 'fee_item_template', '下载模板', 'fee_item_template', '/api/blade-system/fee-item/export-template', 'download', 6, 2, 2, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000008, 2075449200000000001, 'fee_item_export', '批量导出', 'fee_item_export', '/api/blade-system/fee-item/export-fee-item', 'download', 7, 2, 2, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000009, 2075449200000000001, 'fee_item_view', '查看', 'fee_item_view', '', '', 1, 2, 0, 1, NULL, '', 0);
+2 -1
View File
@@ -30,4 +30,5 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
(2075449300000000002, 2075449300000000001, 'measurement_unit_delete', '删除', 'measurement_unit_delete', '', '', 1, 2, 0, 1, NULL, '', 0),
(2075449300000000003, 2075449300000000001, 'measurement_unit_edit', '编辑', 'measurement_unit_edit', '', '', 1, 2, 0, 1, NULL, '', 0),
(2075449300000000004, 2075449300000000001, 'measurement_unit_status', '修改状态', 'measurement_unit_status', '', '', 1, 2, 0, 1, NULL, '', 0),
(2075449300000000005, 2075449300000000001, 'measurement_unit_add', '新增', 'measurement_unit_add', '', '', 1, 2, 0, 1, NULL, '', 0);
(2075449300000000005, 2075449300000000001, 'measurement_unit_add', '新增', 'measurement_unit_add', '', '', 1, 2, 0, 1, NULL, '', 0),
(2075449300000000006, 2075449300000000001, 'measurement_unit_view', '查看', 'measurement_unit_view', '', '', 1, 2, 0, 1, NULL, '', 0);
+7
View File
@@ -836,6 +836,7 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675230, 1123598815738675205, 'dept_edit', '修改', 'edit', '/system/dept/edit', 'form', 2, 2, 2, 1, '', NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675231, 1123598815738675205, 'dept_delete', '删除', 'delete', '/api/blade-system/dept/remove', 'delete', 3, 2, 3, 1, '', NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675232, 1123598815738675205, 'dept_view', '查看', 'view', '/system/dept/view', 'file-text', 4, 2, 2, 1, '', NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2076110415738675232, 1123598815738675205, 'dept_tree', '树形结构', 'dept_tree', '/api/blade-system/dept/tree', 'file-text', 5, 2, 2, 1, '', '组织树接口独立数据权限配置项;未配置时组织树默认不展示', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675233, 1123598815738675206, 'dict_add', '新增', 'add', '/system/dict/add', 'plus', 1, 2, 1, 1, '', NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675234, 1123598815738675206, 'dict_edit', '修改', 'edit', '/system/dict/edit', 'form', 2, 2, 2, 1, '', NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (1123598815738675235, 1123598815738675206, 'dict_delete', '删除', 'delete', '/api/blade-system/dict/remove', 'delete', 3, 2, 3, 1, '', NULL, 0);
@@ -998,7 +999,9 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429169922023425, 2075427962415456258, 'railway_station_edit', '编辑', 'railway_station_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429216734650369, 2075427962415456258, 'railway_station_status', '修改状态', 'railway_station_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429274242752513, 2075427962415456258, 'railway_station_add', '新增', 'railway_station_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429280000000001, 2075427962415456258, 'railway_station_view', '查看', 'railway_station_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429329544650754, 2075421555200860162, 'port_terminal_add', '新增', 'port_terminal_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075429330000000001, 2075421555200860162, 'port_terminal_view', '查看', 'port_terminal_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431169720033282, 1164733399668962201, 'airport_master', '空港机场主数据', 'airport_master', '/base/airport-master', 'iconfont icon-fengche', 30, 1, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431461312241665, 2075431169720033282, 'airport_master_import', '批量导入', 'airport_master_import', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431522544885762, 2075431169720033282, 'airport_master_template', '下载模板', 'airport_master_template', '', '', 1, 2, 0, 1, NULL, '', 0);
@@ -1007,6 +1010,7 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431710063828994, 2075431169720033282, 'airport_master_edit', '编辑', 'airport_master_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431753298714626, 2075431169720033282, 'airport_master_status', '修改状态', 'airport_master_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431820189474818, 2075431169720033282, 'airport_master_add', '新增', 'airport_master_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075431850000000001, 2075431169720033282, 'airport_master_view', '查看', 'airport_master_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000001, 1164733399668962201, 'currency', '币种汇率管理', 'currency', '/base/currency', 'iconfont iconicon_exchange', 40, 1, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000002, 2075449000000000001, 'currency_import', '批量导入', 'currency_import', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000003, 2075449000000000001, 'currency_template', '下载模板', 'currency_template', '', '', 1, 2, 0, 1, NULL, '', 0);
@@ -1015,11 +1019,13 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000006, 2075449000000000001, 'currency_edit', '编辑', 'currency_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000007, 2075449000000000001, 'currency_status', '修改状态', 'currency_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000008, 2075449000000000001, 'currency_add', '新增', 'currency_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449000000000009, 2075449000000000001, 'currency_view', '查看', 'currency_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000001, 1164733399668962201, 'customer_type', '客商类型', 'customer_type', '/base/customer-type', 'iconfont icon-hezuohuobanmiyueguanli', 50, 1, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000002, 2075449100000000001, 'customer_type_delete', '批量删除', 'customer_type_delete', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000003, 2075449100000000001, 'customer_type_edit', '编辑', 'customer_type_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000004, 2075449100000000001, 'customer_type_status', '修改状态', 'customer_type_status', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000005, 2075449100000000001, 'customer_type_add', '新增', 'customer_type_add', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449100000000006, 2075449100000000001, 'customer_type_view', '查看', 'customer_type_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000001, 1164733399668962201, 'fee_item', '费用项', 'fee_item', '/base/fee-item', 'iconfont icon-shoucang', 60, 1, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000002, 2075449200000000001, 'fee_item_delete', '批量删除', 'fee_item_delete', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000003, 2075449200000000001, 'fee_item_edit', '编辑', 'fee_item_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
@@ -1028,6 +1034,7 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000006, 2075449200000000001, 'fee_item_import', '批量导入', 'fee_item_import', '/api/blade-system/fee-item/import-fee-item', 'upload', 5, 2, 3, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000007, 2075449200000000001, 'fee_item_template', '下载模板', 'fee_item_template', '/api/blade-system/fee-item/export-template', 'download', 6, 2, 2, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000008, 2075449200000000001, 'fee_item_export', '批量导出', 'fee_item_export', '/api/blade-system/fee-item/export-fee-item', 'download', 7, 2, 2, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075449200000000009, 2075449200000000001, 'fee_item_view', '查看', 'fee_item_view', '', '', 1, 2, 0, 1, NULL, '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075436235826896898, 0, 'blade-transport', '车/船务管理', 'blade-transport', '/vehicle', 'iconfont icon-shebeiguanli', 10, 1, 0, 1, '', '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437082342301697, 2075436235826896898, 'maintenance_record', '维修记录', 'maintenance_record', '/vehicle/maintenance-record', 'iconfont icon-wxbgongju', 20, 1, 0, 1, '', '', 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437237678350338, 2075436235826896898, 'maintenance_plan', '保养记录', 'maintenance_plan', '/vehicle/maintenance-plan', 'iconfont iconicon_exchange', 30, 1, 0, 1, '', '', 0);