From a138f3b916d0825d7a66b8fda62afd21430babf4 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Sun, 20 Sep 2026 13:16:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95mk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/provider/AuthProvider.java | 2 + .../system/pojo/entity/MeasurementUnit.java | 6 ++ .../controller/BusinessProcessController.java | 16 +++- .../service/IBusinessProcessService.java | 9 +++ .../impl/BusinessProcessServiceImpl.java | 73 +++++++++++++++++ .../system/mapper/MeasurementUnitMapper.xml | 6 ++ .../impl/MeasurementUnitServiceImpl.java | 21 +++++ .../CustomerArchivePublicController.java | 81 +++++++++++++++++++ .../service/ICustomerArchiveService.java | 17 ++++ .../impl/CustomerArchiveServiceImpl.java | 74 ++++++++++++----- doc/nacos/blade.yaml | 2 + doc/sql/bladex/bladex.mysql.all.create.sql | 2 + doc/sql/transport/blade_measurement_unit.sql | 2 + .../blade_measurement_unit_code_20260919.sql | 11 +++ 14 files changed, 296 insertions(+), 26 deletions(-) create mode 100644 blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchivePublicController.java create mode 100644 doc/sql/transport/blade_measurement_unit_code_20260919.sql diff --git a/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java b/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java index a259f7b..c67671b 100644 --- a/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java +++ b/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java @@ -63,6 +63,8 @@ public class AuthProvider { DEFAULT_SKIP_URL.add("/manager/check-upload"); DEFAULT_SKIP_URL.add("/assets/**"); DEFAULT_SKIP_URL.add("/iam/sso/token/**"); + DEFAULT_SKIP_URL.add("/blade-transport/customer-archive/public/**"); + DEFAULT_SKIP_URL.add("/customer-archive/public/**"); } /** diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/MeasurementUnit.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/MeasurementUnit.java index ad80a1e..7cdde90 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/MeasurementUnit.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/MeasurementUnit.java @@ -43,6 +43,12 @@ public class MeasurementUnit extends BaseEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 计量单位编码 + */ + @Schema(description = "计量单位编码") + private String unitCode; + /** * 计量单位 */ diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java index c976569..8241b21 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/controller/BusinessProcessController.java @@ -17,6 +17,7 @@ import org.springblade.process.pojo.dto.ApprovalDTO; import org.springblade.process.pojo.vo.ApprovalVO; import org.springblade.process.pojo.vo.ProcessApprovedRecordVO; import org.springblade.process.service.IBusinessProcessService; +import org.springblade.thirdparty.mk.pojo.dto.MKProcessCreateDTO; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -52,29 +53,36 @@ public class BusinessProcessController extends BladeController { return R.data(pages); } - @GetMapping("/isEditView") + @PostMapping("/processSubmit") @ApiOperationSupport(order = 2) + @Operation(summary = "提交MK审核流", description = "调用mk processSubmit,传入templateCode/submitIdentity/formInstanceId") + public R processSubmit(@Validated @RequestBody MKProcessCreateDTO param) { + return R.data(businessProcessService.processSubmit(param)); + } + + @GetMapping("/isEditView") + @ApiOperationSupport(order = 3) @Operation(summary = "是否编辑页", description = "传入业务id") public R isEditView(@Valid @NotBlank(message = "业务id不能为空") String bizId) { return R.data(businessProcessService.isEditView(bizId)); } @GetMapping("/getMKApprovalUrl") - @ApiOperationSupport(order = 3) + @ApiOperationSupport(order = 4) @Operation(summary = "获取mk审批页链接", description = "传入业务id或流程实例id") public R getMKApprovalUrl(String bizId, String processInstanceId) { return R.data(businessProcessService.getMKApprovalUrl(bizId, processInstanceId)); } @GetMapping("/getApprovedRecords") - @ApiOperationSupport(order = 4) + @ApiOperationSupport(order = 5) @Operation(summary = "查询审批记录", description = "传入业务id或流程实例id") public R> getApprovedRecords(String bizId, String processInstanceId) { return R.data(businessProcessService.queryApprovedRecords(bizId, processInstanceId)); } @GetMapping("/downloadFile") - @ApiOperationSupport(order = 5) + @ApiOperationSupport(order = 6) @Operation(summary = "下载附件", description = "传入附件id") public void downloadFile(HttpServletResponse response, @Valid @NotBlank(message = "附件id不能为空") String fileId) { businessProcessService.downloadFile(response, fileId); diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java index 5e3e2ff..a577c09 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/IBusinessProcessService.java @@ -6,6 +6,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.springblade.process.pojo.dto.*; import org.springblade.process.pojo.entity.BusinessProcess; import org.springblade.process.pojo.vo.*; +import org.springblade.thirdparty.mk.pojo.dto.MKProcessCreateDTO; import java.util.List; @@ -25,6 +26,14 @@ public interface IBusinessProcessService extends IService { */ BusinessProcessVO submitBusinessProcess(BusinessProcessSubmitDTO param); + /** + * 直接调用 MK processSubmit 提交流程 + * + * @param param MK 流程创建参数 + * @return 流程实例 id + */ + String processSubmit(MKProcessCreateDTO param); + /** * 修改业务流程状态 * @param param diff --git a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java index 50984d3..1317fdf 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/process/service/impl/BusinessProcessServiceImpl.java @@ -24,6 +24,8 @@ import org.springblade.process.pojo.entity.BusinessProcess; import org.springblade.process.pojo.enums.TodoStatus; import org.springblade.process.pojo.vo.*; import org.springblade.process.service.IBusinessProcessService; +import org.springblade.system.pojo.entity.User; +import org.springblade.system.service.IUserService; import org.springblade.thirdparty.mk.config.MKProperties; import org.springblade.thirdparty.mk.constant.MKConstant; import org.springblade.thirdparty.mk.constant.MKDoc; @@ -61,6 +63,7 @@ public class BusinessProcessServiceImpl extends ServiceImpllambdaQuery() + .eq(BusinessProcess::getBizId, bizId) + ); + if (businessProcess == null) { + businessProcess = new BusinessProcess(); + businessProcess.setBizId(bizId); + businessProcess.setProcessType(param.getTemplateCode()); + businessProcess.setSubject(param.getSubject()); + businessProcess.setPromoterId(AuthUtil.getUserId()); + businessProcess.setPromoterName(AuthUtil.getNickName()); + businessProcess.setPromoterLoginName(loginName); + businessProcess.setSubmitTime(new Date()); + } else { + businessProcess.setProcessType(param.getTemplateCode()); + if (StringUtil.isNotBlank(param.getSubject())) { + businessProcess.setSubject(param.getSubject()); + } + businessProcess.setPromoterLoginName(loginName); + if (businessProcess.getSubmitTime() == null) { + businessProcess.setSubmitTime(new Date()); + } + } + businessProcess.setProcessInstanceId(processInstanceId); + businessProcess.setApproveStatus(ApproveStatusEnum.APPROVING.getValue()); + this.saveOrUpdate(businessProcess); + return processInstanceId; + } + + /** + * 从当前登录用户实体读取真实手机号(绕过接口返回脱敏) + */ + private String resolveCurrentUserPhone() { + Long userId = AuthUtil.getUserId(); + if (userId != null) { + User user = userService.getById(userId); + if (user != null && StringUtil.isNotBlank(user.getPhone()) && !user.getPhone().contains("*")) { + return user.getPhone().trim(); + } + if (user != null && StringUtil.isNotBlank(user.getAccount()) && user.getAccount().matches("^1\\d{10}$")) { + return user.getAccount().trim(); + } + } + String account = AuthUtil.getUserAccount(); + if (StringUtil.isNotBlank(account) && account.matches("^1\\d{10}$")) { + return account.trim(); + } + return null; + } + @Transactional(rollbackFor = Exception.class) @Override public String updateBusinessProcessStatus(BusinessProcessUpdateDTO param) { diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MeasurementUnitMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MeasurementUnitMapper.xml index 387f1a2..10fbb90 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MeasurementUnitMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/MeasurementUnitMapper.xml @@ -13,6 +13,7 @@ + @@ -30,6 +31,7 @@ mmu.update_time, mmu.status, mmu.is_deleted, + mmu.unit_code, mmu.unit_name, mmu.dimension, mmu.remark @@ -39,6 +41,10 @@ LEFT JOIN blade_user uu ON uu.id = mmu.update_user WHERE mmu.is_deleted = 0 + + + AND mmu.unit_code LIKE #{unitCodeLike} + AND mmu.unit_name LIKE #{unitNameLike} diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MeasurementUnitServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MeasurementUnitServiceImpl.java index 615bb67..df18f4f 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MeasurementUnitServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MeasurementUnitServiceImpl.java @@ -46,6 +46,7 @@ public class MeasurementUnitServiceImpl extends BaseServiceImpl UNIT_CODE_MAX_LENGTH) { + throw new ServiceException("计量单位编码不能超过50字"); + } if (Func.isEmpty(measurementUnit.getUnitName())) { throw new ServiceException("计量单位不能为空"); } @@ -115,9 +123,22 @@ public class MeasurementUnitServiceImpl extends BaseServiceImpl queryWrapper = Wrappers.lambdaQuery() + .eq(MeasurementUnit::getUnitCode, measurementUnit.getUnitCode()) + .eq(MeasurementUnit::getIsDeleted, 0); + if (Func.isNotEmpty(measurementUnit.getId())) { + queryWrapper.ne(MeasurementUnit::getId, measurementUnit.getId()); + } + if (count(queryWrapper) > 0L) { + throw new ServiceException("该计量单位编码已存在"); + } + } + private void validateUniqueUnitName(MeasurementUnit measurementUnit) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() .eq(MeasurementUnit::getUnitName, measurementUnit.getUnitName()) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchivePublicController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchivePublicController.java new file mode 100644 index 0000000..b2094c3 --- /dev/null +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/CustomerArchivePublicController.java @@ -0,0 +1,81 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.transport.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.annotation.PreAuth; +import org.springblade.core.secure.constant.AuthConstant; +import org.springblade.core.tenant.annotation.TenantIgnore; +import org.springblade.core.tool.api.R; +import org.springblade.transport.pojo.vo.CustomerArchiveVO; +import org.springblade.transport.pojo.vo.CustomerChangeRecordVO; +import org.springblade.transport.service.ICustomerArchiveService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 客商档案公开查看 控制器 + * + * @author Chill + */ +@RestController +@AllArgsConstructor +@TenantIgnore +@PreAuth(AuthConstant.PERMIT_ALL) +@RequestMapping("/customer-archive/public") +@Tag(name = "客商档案公开查看", description = "客商档案公开查看") +public class CustomerArchivePublicController { + + private final ICustomerArchiveService customerArchiveService; + + /** + * 公开详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @Operation(summary = "公开详情", description = "传入id,无需登录") + public R detail(@Parameter(description = "主键", required = true) @RequestParam Long id) { + return R.data(customerArchiveService.publicDetail(id)); + } + + /** + * 公开变更记录分页 + */ + @GetMapping("/change-record/list") + @ApiOperationSupport(order = 2) + @Operation(summary = "公开变更记录分页", description = "传入客商ID,无需登录") + public R> changeRecordList( + @Parameter(description = "客商ID", required = true) @RequestParam Long customerId, Query query) { + return R.data(customerArchiveService.publicChangeRecordPage(Condition.getPage(query), customerId)); + } + +} diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java index 73ddd1a..9a6472b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/ICustomerArchiveService.java @@ -66,6 +66,23 @@ public interface ICustomerArchiveService extends BaseService { */ CustomerArchiveVO detail(Long id); + /** + * 公开查看详情(不校验登录态与数据权限) + * + * @param id 主键 + * @return 客商档案详情 + */ + CustomerArchiveVO publicDetail(Long id); + + /** + * 公开查看变更记录分页(不校验登录态与数据权限) + * + * @param page 分页参数 + * @param customerId 客商ID + * @return 变更记录分页 + */ + IPage publicChangeRecordPage(IPage page, Long customerId); + /** * 新增或修改客商档案 *

仅当 {@code customer.recordChange = true}(前端点「提交」)时写入变更记录;「保存」不落变更记录。

diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java index 7dde6cd..8485807 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java @@ -32,6 +32,7 @@ import lombok.RequiredArgsConstructor; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tenant.annotation.TenantIgnore; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; @@ -151,31 +152,28 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl recordPage = changeRecordMapper.selectPage( - new Page<>(page.getCurrent(), page.getSize()), - Wrappers.lambdaQuery() - .eq(CustomerChangeRecord::getCustomerId, customerId) - .eq(CustomerChangeRecord::getIsDeleted, 0) - .orderByDesc(CustomerChangeRecord::getChangeTime)); - page.setTotal(recordPage.getTotal()); - return page.setRecords(recordPage.getRecords().stream() - .map(record -> Objects.requireNonNull(BeanUtil.copyProperties(record, CustomerChangeRecordVO.class))) - .toList()); + return queryChangeRecordPage(page, customerId); + } + + @Override + @TenantIgnore + public IPage publicChangeRecordPage(IPage page, Long customerId) { + if (Func.isEmpty(customerId)) { + throw new ServiceException("客商ID不能为空"); + } + getExistingCustomer(customerId); + return queryChangeRecordPage(page, customerId); } @Override public CustomerArchiveVO detail(Long id) { - if (Func.isEmpty(id)) { - throw new ServiceException("主键不能为空"); - } - CustomerArchive customer = ensureCustomerAccessible(id); - CustomerArchiveVO detail = Objects.requireNonNull(BeanUtil.copyProperties(customer, CustomerArchiveVO.class)); - detail.setContacts(loadContacts(id)); - detail.setReceiptAccounts(loadReceiptAccounts(id)); - detail.setInvoices(loadInvoices(id)); - detail.setScores(loadScores(id)); - fillFundUseRisk(List.of(detail)); - return detail; + return buildDetail(ensureCustomerAccessible(id)); + } + + @Override + @TenantIgnore + public CustomerArchiveVO publicDetail(Long id) { + return buildDetail(getExistingCustomer(id)); } @Override @@ -987,11 +985,43 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl queryChangeRecordPage(IPage page, Long customerId) { + IPage recordPage = changeRecordMapper.selectPage( + new Page<>(page.getCurrent(), page.getSize()), + Wrappers.lambdaQuery() + .eq(CustomerChangeRecord::getCustomerId, customerId) + .eq(CustomerChangeRecord::getIsDeleted, 0) + .orderByDesc(CustomerChangeRecord::getChangeTime)); + page.setTotal(recordPage.getTotal()); + return page.setRecords(recordPage.getRecords().stream() + .map(record -> Objects.requireNonNull(BeanUtil.copyProperties(record, CustomerChangeRecordVO.class))) + .toList()); + } + + private CustomerArchiveVO buildDetail(CustomerArchive customer) { + CustomerArchiveVO detail = Objects.requireNonNull(BeanUtil.copyProperties(customer, CustomerArchiveVO.class)); + Long id = customer.getId(); + detail.setContacts(loadContacts(id)); + detail.setReceiptAccounts(loadReceiptAccounts(id)); + detail.setInvoices(loadInvoices(id)); + detail.setScores(loadScores(id)); + fillFundUseRisk(List.of(detail)); + return detail; + } + + private CustomerArchive getExistingCustomer(Long id) { + if (Func.isEmpty(id)) { + throw new ServiceException("主键不能为空"); + } CustomerArchive customer = getById(id); if (Func.isEmpty(customer) || Objects.equals(customer.getIsDeleted(), 1)) { throw new ServiceException("客商档案不存在"); } + return customer; + } + + private CustomerArchive ensureCustomerAccessible(Long id) { + CustomerArchive customer = getExistingCustomer(id); if (baseMapper.selectCustomerPermissionCount(id, AuthUtil.getUserId()) == 0) { throw new ServiceException("无权访问该客商档案"); } diff --git a/doc/nacos/blade.yaml b/doc/nacos/blade.yaml index f65e82d..cc51556 100644 --- a/doc/nacos/blade.yaml +++ b/doc/nacos/blade.yaml @@ -216,6 +216,8 @@ blade: # 退出登录:允许无令牌/令牌失效时也能调用(服务端对无用户直接返回成功) - /oauth/logout/** - /blade-auth/oauth/logout/** + - /blade-transport/customer-archive/public/** + - /customer-archive/public/** #授权认证配置 auth: - method: ALL diff --git a/doc/sql/bladex/bladex.mysql.all.create.sql b/doc/sql/bladex/bladex.mysql.all.create.sql index f43daca..b805412 100644 --- a/doc/sql/bladex/bladex.mysql.all.create.sql +++ b/doc/sql/bladex/bladex.mysql.all.create.sql @@ -1757,6 +1757,7 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s DROP TABLE IF EXISTS `blade_measurement_unit`; CREATE TABLE `blade_measurement_unit` ( `id` bigint NOT NULL COMMENT '主键', + `unit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量单位编码', `unit_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量单位', `dimension` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量维度', `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', @@ -1768,6 +1769,7 @@ CREATE TABLE `blade_measurement_unit` ( `status` int NULL DEFAULT 1 COMMENT '状态', `is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除', PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_measurement_unit_code`(`unit_code`) USING BTREE, UNIQUE INDEX `uk_measurement_unit_name`(`unit_name`) USING BTREE, INDEX `idx_measurement_unit_dimension`(`dimension`) USING BTREE, INDEX `idx_measurement_unit_status`(`status`) USING BTREE diff --git a/doc/sql/transport/blade_measurement_unit.sql b/doc/sql/transport/blade_measurement_unit.sql index 8f03d43..175be76 100644 --- a/doc/sql/transport/blade_measurement_unit.sql +++ b/doc/sql/transport/blade_measurement_unit.sql @@ -4,6 +4,7 @@ DROP TABLE IF EXISTS `blade_measurement_unit`; CREATE TABLE `blade_measurement_unit` ( `id` bigint NOT NULL COMMENT '主键', + `unit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量单位编码', `unit_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量单位', `dimension` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量维度', `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', @@ -15,6 +16,7 @@ CREATE TABLE `blade_measurement_unit` ( `status` int NULL DEFAULT 1 COMMENT '状态', `is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除', PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_measurement_unit_code`(`unit_code`) USING BTREE, UNIQUE INDEX `uk_measurement_unit_name`(`unit_name`) USING BTREE, INDEX `idx_measurement_unit_dimension`(`dimension`) USING BTREE, INDEX `idx_measurement_unit_status`(`status`) USING BTREE diff --git a/doc/sql/transport/blade_measurement_unit_code_20260919.sql b/doc/sql/transport/blade_measurement_unit_code_20260919.sql new file mode 100644 index 0000000..5da38d2 --- /dev/null +++ b/doc/sql/transport/blade_measurement_unit_code_20260919.sql @@ -0,0 +1,11 @@ +-- 计量单位新增计量单位编码 +ALTER TABLE `blade_measurement_unit` + ADD COLUMN `unit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '计量单位编码' AFTER `id`; + +UPDATE `blade_measurement_unit` +SET `unit_code` = CONCAT('MU', `id`) +WHERE `unit_code` IS NULL OR `unit_code` = ''; + +ALTER TABLE `blade_measurement_unit` + MODIFY COLUMN `unit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '计量单位编码', + ADD UNIQUE INDEX `uk_measurement_unit_code`(`unit_code`) USING BTREE;