From 9f1a87e348029a720f958bdc06c1e4ca59f3b8d2 Mon Sep 17 00:00:00 2001 From: dzq Date: Sat, 14 Jun 2025 11:40:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(approval):=20=E6=96=B0=E5=A2=9E=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E5=AE=A1=E6=89=B9=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E5=AE=A1=E6=89=B9=E7=A0=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加审批数量字段到ApprovalGoodsDTO和ApprovalGoodsEntity - 新增ReturnApprovalAssetDTO用于资产审批列表展示 - 实现审批码校验接口及核销状态更新 - 新增资产审批分页查询接口及相关查询条件 - 添加审批码校验状态字段和申请人名字段 - 创建approval_goods_cell表用于记录商品格口分配 - 完善资产审批相关服务逻辑 --- .../api/controller/ApprovalApiController.java | 28 ++++++++ .../domain/asset/AssetApplicationService.java | 1 + .../ReturnApprovalApplicationService.java | 56 ++++++++++++++++ .../approval/db/ReturnApprovalEntity.java | 8 +++ .../approval/db/ReturnApprovalMapper.java | 1 + .../approval/db/ReturnApprovalService.java | 2 + .../db/ReturnApprovalServiceImpl.java | 5 ++ .../approval/dto/ReturnApprovalAssetDTO.java | 21 ++++++ .../shop/approval/dto/ReturnApprovalDTO.java | 5 ++ .../query/SearchApiReturnApprovalQuery.java | 4 ++ .../query/SearchReturnApprovalAssetQuery.java | 66 +++++++++++++++++++ .../query/SearchReturnApprovalQuery.java | 2 + .../approvalGoods/db/ApprovalGoodsEntity.java | 4 ++ .../approvalGoods/dto/ApprovalGoodsDTO.java | 3 + sql/20250611.sql | 38 +++++++++++ 15 files changed, 244 insertions(+) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalAssetDTO.java create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalAssetQuery.java diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java index 275d41d..1fff902 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java @@ -1,5 +1,6 @@ package com.agileboot.api.controller; +import com.agileboot.common.constant.WeixinConstants; import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.page.PageDTO; import com.agileboot.common.exception.ApiException; @@ -8,8 +9,10 @@ import com.agileboot.domain.shop.approval.ReturnApprovalApplicationService; import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand; import com.agileboot.domain.shop.approval.command.UpdateReturnApprovalCommand; import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity; +import com.agileboot.domain.shop.approval.dto.ReturnApprovalAssetDTO; import com.agileboot.domain.shop.approval.model.ReturnApprovalModel; import com.agileboot.domain.shop.approval.query.SearchApiReturnApprovalQuery; +import com.agileboot.domain.shop.approval.query.SearchReturnApprovalAssetQuery; import com.agileboot.domain.shop.approval.query.SearchReturnApprovalQuery; import com.agileboot.domain.shop.order.OrderApplicationService; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; @@ -151,4 +154,29 @@ public class ApprovalApiController { List list = approvalApplicationService.getApprovalOrderGoods(approvalId); return ResponseDTO.ok(list); } + + + @GetMapping("/list/asset") + @ApiOperation(value = "审批列表") + public ResponseDTO> listAsset(SearchReturnApprovalAssetQuery query) { + PageDTO page = approvalApplicationService.getApprovalAssetPage(query); + return ResponseDTO.ok(page); + } + + @PostMapping("/checkCode") + @ApiOperation(value = "校验审批码") + public ResponseDTO checkCode(@RequestParam String corpid, @RequestParam Integer approvalType, @RequestParam String code) { + try { + if (StringUtils.isBlank(corpid)) { + corpid = WeixinConstants.corpid; + } + approvalApplicationService.checkCode(corpid, approvalType, code); + } catch (Exception e) { + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, e.getMessage())); + } + + return ResponseDTO.ok("校验成功"); + } + + } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java index ad9ae6a..be0961d 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java @@ -129,6 +129,7 @@ public class AssetApplicationService { if (returnApprovalCommand.getApprovalType() == null) { returnApprovalCommand.setApprovalType(1); } + returnApprovalCommand.setApplyUserid(postAssetApprovalCommand.getUserid()); ReturnApprovalModel returnApprovalModel = returnApprovalModelFactory.create(); returnApprovalModel.initBaseEntity(); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 758f150..77e96aa 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -21,10 +21,14 @@ import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand; import com.agileboot.domain.shop.approval.command.UpdateReturnApprovalCommand; import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity; import com.agileboot.domain.shop.approval.db.ReturnApprovalService; +import com.agileboot.domain.shop.approval.dto.ReturnApprovalAssetDTO; import com.agileboot.domain.shop.approval.model.ReturnApprovalModel; import com.agileboot.domain.shop.approval.model.ReturnApprovalModelFactory; import com.agileboot.domain.shop.approval.query.SearchApiReturnApprovalQuery; +import com.agileboot.domain.shop.approval.query.SearchReturnApprovalAssetQuery; import com.agileboot.domain.shop.approval.query.SearchReturnApprovalQuery; +import com.agileboot.domain.shop.approvalGoods.db.ApprovalGoodsEntity; +import com.agileboot.domain.shop.approvalGoods.db.ApprovalGoodsService; import com.agileboot.domain.shop.goods.model.GoodsModel; import com.agileboot.domain.shop.goods.model.GoodsModelFactory; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; @@ -37,6 +41,7 @@ import com.agileboot.domain.shop.payment.PaymentApplicationService; import com.agileboot.domain.shop.payment.dto.RefundVO; import com.agileboot.domain.shop.paymentOperationLog.PaymentOperationLogApplicationService; import com.agileboot.domain.shop.paymentOperationLog.command.AddPaymentOperationLogCommand; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.math.BigDecimal; @@ -72,6 +77,7 @@ public class ReturnApprovalApplicationService { private final QyUserService userService; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; private final AssetApplicationService assetApplicationService; + private final ApprovalGoodsService approvalGoodsService; /** * 获取退货审批列表 @@ -439,6 +445,33 @@ public class ReturnApprovalApplicationService { return shopOrderGoodsService.selectOrderGoodsByApprovalId(approvalId); } + public PageDTO getApprovalAssetPage(SearchReturnApprovalAssetQuery query) { + Page page = approvalService.getApprovalAssetPage(query); + List dtoList = page.getRecords().stream() + .map(ReturnApprovalAssetDTO::new) + .collect(java.util.stream.Collectors.toList()); + + if (!dtoList.isEmpty()) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("approval_id", + page.getRecords().stream() + .map(ReturnApprovalEntity::getApprovalId) + .collect(java.util.stream.Collectors.toList())) + .eq("deleted", false); + + List approvalGoodsEntities = approvalGoodsService.list(queryWrapper); + + for (ReturnApprovalAssetDTO dto : dtoList) { + List goodsList = approvalGoodsEntities.stream() + .filter(g -> g.getApprovalId().equals(dto.getApprovalId())) + .collect(java.util.stream.Collectors.toList()); + dto.setGoodsList(goodsList); + } + } + + return new PageDTO<>(dtoList, page.getTotal()); + } + /** * 审批驳回退货申请 * @param command 更新退货审批命令(包含驳回原因) @@ -461,4 +494,27 @@ public class ReturnApprovalApplicationService { model.setApprovalTime(new Date()); model.updateById(); } + + + /** + * 验证审批码有效性并更新核销状态 + * @param corpid 企业微信ID + * @param approvalType 审批类型(0为借还柜 1为固资通) + * @param code 审批码 + * @throws RuntimeException 当审批码无效或已核销时抛出 + */ + public void checkCode(String corpid, Integer approvalType, String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("corpid", corpid) + .eq("approval_type", approvalType) + .eq("code", code) + .eq("code_check", 0) + .eq("deleted", false); + ReturnApprovalEntity approval = approvalService.getOne(queryWrapper); + if (approval == null) { + throw new RuntimeException("无效的审批码"); + } + approval.setCodeCheck(1); + approval.updateById(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java index 5555221..46fb1bb 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalEntity.java @@ -58,6 +58,10 @@ public class ReturnApprovalEntity extends BaseEntity { @TableField("code") private String code; + @ApiModelProperty("审批码校验状态(0未核销 1已核销)") + @TableField("code_check") + private Integer codeCheck; + @ApiModelProperty("企业微信id") @TableField("corpid") private String corpid; @@ -66,6 +70,10 @@ public class ReturnApprovalEntity extends BaseEntity { @TableField("apply_userid") private String applyUserid; + @ApiModelProperty("申请人") + @TableField("apply_user_name") + private String applyUserName; + @ApiModelProperty("审批人企业UserID") @TableField("audit_userid") private String auditUserid; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java index 59a869e..41af022 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalMapper.java @@ -26,6 +26,7 @@ public interface ReturnApprovalMapper extends BaseMapper { "${ew.customSqlSegment}") Page selectApprovalWithGoodsInfo(Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT ra.*, sog.goods_name AS goodsName, sog.cover_img AS coverImg, " + "so.mobile, so.userid, so.name, so.payment_method AS paymentMethod " + diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java index 4a557b6..b309f78 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalService.java @@ -25,4 +25,6 @@ public interface ReturnApprovalService extends IService { ReturnApprovalEntity getByOrderId(Long orderId); Page selectApprovalWithGoodsInfo(AbstractPageQuery query); + + Page getApprovalAssetPage(AbstractPageQuery query); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java index d886b62..8674330 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/db/ReturnApprovalServiceImpl.java @@ -48,4 +48,9 @@ public class ReturnApprovalServiceImpl extends ServiceImpl selectApprovalWithGoodsInfo(AbstractPageQuery query) { return this.baseMapper.selectApprovalWithGoodsInfo(query.toPage(), query.toQueryWrapper()); } + + @Override + public Page getApprovalAssetPage(AbstractPageQuery query) { + return this.page(query.toPage(), query.toQueryWrapper()); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalAssetDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalAssetDTO.java new file mode 100644 index 0000000..50a8ab9 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalAssetDTO.java @@ -0,0 +1,21 @@ +package com.agileboot.domain.shop.approval.dto; + +import com.agileboot.domain.shop.approval.db.ReturnApprovalEntity; +import com.agileboot.domain.shop.approvalGoods.db.ApprovalGoodsEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.beans.BeanUtils; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ReturnApprovalAssetDTO extends ReturnApprovalEntity { + public ReturnApprovalAssetDTO(ReturnApprovalEntity entity) { + if (entity != null) { + BeanUtils.copyProperties(entity, this); + } + } + + private List goodsList; +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalDTO.java index ebfb762..30e114f 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/dto/ReturnApprovalDTO.java @@ -53,12 +53,17 @@ public class ReturnApprovalDTO { @ExcelColumn(name = "审批码") private String code; + private Integer codeCheck; + @ExcelColumn(name = "企业微信id") private String corpid; @ExcelColumn(name = "申请人企业UserID") private String applyUserid; + @ExcelColumn(name = "申请人") + private String applyUserName; + @ExcelColumn(name = "审批人企业UserID") private String auditUserid; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java index f650b4a..6f44c81 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchApiReturnApprovalQuery.java @@ -19,8 +19,10 @@ public class SearchApiReturnApprovalQuery extends AbstractPageQuery { private Long externalGoodsId; private Long externalApprovalId; private String code; + private Integer codeCheck; private String corpid; private String applyUserid; + private String applyUserName; private String auditUserid; private Integer applyQuantity; private Integer approvalType; @@ -42,9 +44,11 @@ public class SearchApiReturnApprovalQuery extends AbstractPageQuery { .eq(externalGoodsId != null, "ra.external_goods_id", externalGoodsId) .eq(externalApprovalId != null, "ra.external_approval_id", externalApprovalId) .eq(StrUtil.isNotEmpty(code), "ra.code", code) + .eq(codeCheck != null, "ra.code_check", codeCheck) .eq(approvalType != null, "ra.approval_type", approvalType) .eq(StrUtil.isNotEmpty(corpid), "ra.corpid", corpid) .eq(StrUtil.isNotEmpty(applyUserid), "ra.apply_userid", applyUserid) + .eq(StrUtil.isNotEmpty(applyUserName), "ra.apply_user_name", applyUserName) .eq(StrUtil.isNotEmpty(auditUserid), "ra.audit_userid", auditUserid) .like(StrUtil.isNotEmpty(goodsName), "sog.goods_name", goodsName) .between(startTime != null && endTime != null, "ra.create_time", startTime, endTime) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalAssetQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalAssetQuery.java new file mode 100644 index 0000000..1912971 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalAssetQuery.java @@ -0,0 +1,66 @@ +package com.agileboot.domain.shop.approval.query; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchReturnApprovalAssetQuery extends AbstractPageQuery { + private Long approvalId; + private Long orderId; + private Long goodsId; + private Integer status; + private Long externalGoodsId; + private Long externalApprovalId; + private String code; + private Integer codeCheck; + private String corpid; + private String applyUserid; + private String applyUserName; + private String auditUserid; + private Integer applyQuantity; + private Integer approvalType; + private String applyRemark; + private String returnRemark; + private String auditRemark; + private Date startTime; + private Date endTime; + private String paymentMethod; + private Date approvalTime; + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + queryWrapper + .eq(approvalId != null, "approval_id", approvalId) + .eq(orderId != null, "order_id", orderId) + .eq(goodsId != null, "goods_id", goodsId) + .eq(status != null, "status", status) + .eq(externalGoodsId != null, "external_goods_id", externalGoodsId) + .eq(externalApprovalId != null, "external_approval_id", externalApprovalId) + .eq(StrUtil.isNotEmpty(code), "code", code) + .eq(codeCheck!= null, "code_check", codeCheck) + .eq(approvalType != null, "approval_type", approvalType) + .eq(StrUtil.isNotEmpty(corpid), "corpid", corpid) + .eq(StrUtil.isNotEmpty(applyUserid), "apply_userid", applyUserid) + .eq(StrUtil.isNotEmpty(applyUserName), "apply_user_name", applyUserName) + .eq(StrUtil.isNotEmpty(auditUserid), "audit_userid", auditUserid) + .like(StrUtil.isNotEmpty(returnRemark), "return_remark", returnRemark) + .like(StrUtil.isNotEmpty(auditRemark), "audit_remark", auditRemark) + .between(approvalTime != null, "approval_time", + approvalTime == null ? null : DateUtil.beginOfDay(approvalTime).toJdkDate(), + approvalTime == null ? null : DateUtil.endOfDay(approvalTime).toJdkDate()) + .orderByDesc("create_time"); + + this.timeRangeColumn = "create_time"; + + return queryWrapper; + } +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalQuery.java index fc664c1..5ce06e3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/query/SearchReturnApprovalQuery.java @@ -21,6 +21,7 @@ public class SearchReturnApprovalQuery extends AbstractPageQuery { private String code; private String corpid; private String applyUserid; + private String applyUserName; private String auditUserid; private Integer applyQuantity; private Integer approvalType; @@ -47,6 +48,7 @@ public class SearchReturnApprovalQuery extends AbstractPageQuery { .eq(approvalType != null, "ra.approval_type", approvalType) .eq(StrUtil.isNotEmpty(corpid), "ra.corpid", corpid) .eq(StrUtil.isNotEmpty(applyUserid), "ra.apply_userid", applyUserid) + .eq(StrUtil.isNotEmpty(applyUserName), "ra.apply_user_name", applyUserName) .eq(StrUtil.isNotEmpty(auditUserid), "ra.audit_userid", auditUserid) .like(StrUtil.isNotEmpty(returnRemark), "ra.return_remark", returnRemark) .like(StrUtil.isNotEmpty(auditRemark), "ra.audit_remark", auditRemark) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/db/ApprovalGoodsEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/db/ApprovalGoodsEntity.java index b0d0e11..50b3648 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/db/ApprovalGoodsEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/db/ApprovalGoodsEntity.java @@ -64,6 +64,10 @@ public class ApprovalGoodsEntity extends BaseEntity { @TableField("apply_quantity") private Integer applyQuantity; + @ApiModelProperty("审批数量") + @TableField("approval_quantity") + private Integer approvalQuantity; + @ApiModelProperty("封面图URL") @TableField("cover_img") private String coverImg; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/dto/ApprovalGoodsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/dto/ApprovalGoodsDTO.java index 24ea2f7..21c0c29 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/dto/ApprovalGoodsDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approvalGoods/dto/ApprovalGoodsDTO.java @@ -46,6 +46,9 @@ public class ApprovalGoodsDTO { @ExcelColumn(name = "申请数量") private Integer applyQuantity; + @ExcelColumn(name = "审批数量") + private Integer approvalQuantity; + @ExcelColumn(name = "封面图URL") private String coverImg; } \ No newline at end of file diff --git a/sql/20250611.sql b/sql/20250611.sql index 50cc1e8..9e3cd06 100644 --- a/sql/20250611.sql +++ b/sql/20250611.sql @@ -25,3 +25,41 @@ AFTER `balance_enable`; ALTER TABLE `return_approval` ADD COLUMN `code` varchar(32) DEFAULT NULL COMMENT '审批码' AFTER `external_approval_id`; + +ALTER TABLE `return_approval` +ADD COLUMN `code_check` TINYINT NOT NULL DEFAULT 0 COMMENT '审批码校验 0未核销 1已核销' +AFTER `code`; + +ALTER TABLE `return_approval` +ADD COLUMN `apply_user_name` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '申请人' +AFTER `apply_userid`; + +ALTER TABLE `approval_goods` +ADD COLUMN `approval_quantity` int DEFAULT NULL COMMENT '审批数量' +AFTER `apply_quantity`; + + +CREATE TABLE `approval_goods_cell` ( + `approval_goods_cell_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `approval_id` bigint NOT NULL COMMENT '审批ID', + `approval_goods_id` bigint NOT NULL COMMENT '申请领用商品ID', + `shop_id` bigint NULL COMMENT '商店ID', + `cabinet_id` bigint NOT NULL COMMENT '柜机ID', + `cell_id` bigint NOT NULL COMMENT '格口ID', + `allocate_quantity` int NOT NULL COMMENT '分配数量', + `shop_name` varchar(100) NULL COMMENT '商店名称', + `cabinet_name` varchar(100) NULL COMMENT '柜机名称', + `cell_no` int NULL COMMENT '格口号', + `creator_id` bigint NULL DEFAULT '0' COMMENT '创建者ID', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater_id` bigint NULL DEFAULT '0' COMMENT '更新者ID', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + PRIMARY KEY (`approval_goods_cell_id`), + UNIQUE KEY `uk_approval_goods_cell` (`approval_goods_id`, `cell_id`), + KEY `idx_approval_id` (`approval_id`), + KEY `idx_approval_goods_id` (`approval_goods_id`), + KEY `idx_shop_id` (`shop_id`), + KEY `idx_cabinet_id` (`cabinet_id`), + KEY `idx_cell_id` (`cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='申请领用商品格口分配表'; \ No newline at end of file