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 d0248fd..d85e6df 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 @@ -24,6 +24,7 @@ import org.apache.commons.lang3.StringUtils; import javax.validation.Valid; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * 审批请求控制器 @@ -80,6 +81,32 @@ public class ApprovalApiController { } } + @PostMapping("/handle/asset") + @ApiOperation(value = "处理审批操作") + public ResponseDTO handleAssetApproval(@Valid @RequestBody UpdateReturnApprovalCommand command) { + if (command.getApprovalId() == null) { + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, "审批ID不能为空")); + } + if (command.getStatus() == null) { + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, "操作状态不能为空")); + } + + try { + if (command.getStatus() == 2) { + approvalApplicationService.approveApproval(command); + } else if (command.getStatus() == 3) { + approvalApplicationService.rejectApproval(command); + } else { + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, "无效的操作状态")); + } + return ResponseDTO.ok("操作成功"); + } catch (Exception e) { + log.error("审批操作失败", e); + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, e.getMessage())); + } + } + + /** * 提交退货审批申请 * @@ -117,4 +144,11 @@ public class ApprovalApiController { PageDTO page = approvalApplicationService.getApprovalWithGoodsInfo(query); return ResponseDTO.ok(page); } + + @GetMapping("/getApprovalOrderGoods") + @ApiOperation(value = "审批列表") + public ResponseDTO> getApprovalOrderGoods(Long approvalId) { + List list = approvalApplicationService.getApprovalOrderGoods(approvalId); + return ResponseDTO.ok(list); + } } 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 e406559..56997a0 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 @@ -67,6 +67,9 @@ public class AssetApplicationService { if (command.getStock() != null) { shopGoodsEntity.setStock(command.getStock()); } + if (command.getStock() != null) { + shopGoodsEntity.setMonthlyPurchaseLimit(command.getMonthlyPurchaseLimit()); + } if (command.getAutoApproval() != null) { shopGoodsEntity.setAutoApproval(command.getAutoApproval()); } @@ -168,9 +171,9 @@ public class AssetApplicationService { String appid = "QWTONG_YS_WXSHOP"; List authCorpInfoList = authCorpInfoApplicationService.getByAppid(appid); QyAuthCorpInfoEntity authCorpInfo = authCorpInfoList.stream() - .filter(a -> WeixinConstants.corpid.equals(a.getCorpid())) + .filter(a -> postAssetApprovalCommand.getCorpid().equals(a.getCorpid())) .findFirst().orElse(null); - QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, authCorpInfo.getCorpid()); + QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, postAssetApprovalCommand.getCorpid()); // 获取用户ID List adminUserIds = qyUserService.selectAdminUserIds(); String toUser = String.join("|", adminUserIds); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/asset/command/PostAssetGoodsCommand.java b/agileboot-domain/src/main/java/com/agileboot/domain/asset/command/PostAssetGoodsCommand.java index a8257cc..3acda64 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/asset/command/PostAssetGoodsCommand.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/asset/command/PostAssetGoodsCommand.java @@ -1,5 +1,6 @@ package com.agileboot.domain.asset.command; +import com.agileboot.common.annotation.ExcelColumn; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -48,5 +49,8 @@ public class PostAssetGoodsCommand { @ApiModelProperty("归属类型(0-借还柜 1-固资通)") private Integer belongType; + + @ApiModelProperty("每人每月限购数量") + private String monthlyPurchaseLimit; } } 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 e6c70ee..52ac106 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 @@ -26,6 +26,7 @@ import com.agileboot.domain.shop.approval.query.SearchReturnApprovalQuery; import com.agileboot.domain.shop.goods.model.GoodsModel; import com.agileboot.domain.shop.goods.model.GoodsModelFactory; import com.agileboot.domain.shop.order.db.ShopOrderGoodsEntity; +import com.agileboot.domain.shop.order.db.ShopOrderGoodsService; import com.agileboot.domain.shop.order.model.OrderGoodsModel; import com.agileboot.domain.shop.order.model.OrderGoodsModelFactory; import com.agileboot.domain.shop.order.model.OrderModel; @@ -59,6 +60,7 @@ public class ReturnApprovalApplicationService { private final ReturnApprovalService approvalService; private final ReturnApprovalModelFactory modelFactory; + private final ShopOrderGoodsService shopOrderGoodsService; private final OrderGoodsModelFactory orderGoodsModelFactory; private final OrderModelFactory orderModelFactory; private final PaymentApplicationService paymentApplicationService; @@ -187,9 +189,9 @@ public class ReturnApprovalApplicationService { } else if (Objects.equals(orderModel.getPaymentMethod(), "balance")) { // 余额退款 try { - QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid("QWTONG_YS_WXSHOP", WeixinConstants.corpid); + QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid("QWTONG_YS_WXSHOP", command.getCorpid()); String userid = QywxApiUtil.convertToUserid(accessToken.getAccessToken(), orderModel.getOpenid()).getUserid(); - QyUserEntity qyUser = userService.getUserByUserIdAndCorpid(userid, WeixinConstants.corpid); + QyUserEntity qyUser = userService.getUserByUserIdAndCorpid(userid, command.getCorpid()); if (null != qyUser) { qyUser.setBalance(qyUser.getBalance().add(command.getReturnAmount())); qyUser.setUseBalance(qyUser.getUseBalance().subtract(command.getReturnAmount())); @@ -204,7 +206,7 @@ public class ReturnApprovalApplicationService { if (StringUtils.isNotBlank(command.getAuditName())) { model.setAuditName(command.getAuditName()); } else if (StringUtils.isNotBlank(command.getUserid())) { - QyUserEntity qyUserEntity = qyUserService.getUserByUserIdAndCorpid(command.getUserid(), WeixinConstants.corpid); + QyUserEntity qyUserEntity = qyUserService.getUserByUserIdAndCorpid(command.getUserid(), command.getCorpid()); if (null != qyUserEntity) { model.setAuditName(qyUserEntity.getName()); } @@ -234,6 +236,11 @@ public class ReturnApprovalApplicationService { cabinetCellModel.updateById(); } + + public void approveAssetApproval(UpdateReturnApprovalCommand command) { + + } + /** * 提交退货审批申请 * @param command 添加退货审批命令 @@ -278,7 +285,7 @@ public class ReturnApprovalApplicationService { String appid = "QWTONG_YS_WXSHOP"; List authCorpInfoList = authCorpInfoApplicationService.getByAppid(appid); QyAuthCorpInfoEntity authCorpInfo = authCorpInfoList.stream() - .filter(a -> WeixinConstants.corpid.equals(a.getCorpid())) + .filter(a -> command.getCorpid().equals(a.getCorpid())) .findFirst().orElse(null); QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, authCorpInfo.getCorpid()); // 获取用户ID @@ -308,6 +315,10 @@ public class ReturnApprovalApplicationService { return new PageDTO<>(page.getRecords(), page.getTotal()); } + public List getApprovalOrderGoods(Long approvalId) { + return shopOrderGoodsService.selectOrderGoodsByApprovalId(approvalId); + } + /** * 审批驳回退货申请 * @param command 更新退货审批命令(包含驳回原因) @@ -318,7 +329,7 @@ public class ReturnApprovalApplicationService { // 审批人信息 if (StringUtils.isNotBlank(command.getUserid())) { - QyUserEntity qyUserEntity = qyUserService.getUserByUserIdAndCorpid(command.getUserid(), WeixinConstants.corpid); + QyUserEntity qyUserEntity = qyUserService.getUserByUserIdAndCorpid(command.getUserid(), command.getCorpid()); if (null != qyUserEntity) { model.setAuditName(qyUserEntity.getName()); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsEntity.java index b958a49..2d47992 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsEntity.java @@ -48,6 +48,10 @@ public class ShopGoodsEntity extends BaseEntity { @TableField("corpid") private String corpid; + @ApiModelProperty("每人每月限购数量") + @TableField("monthly_purchase_limit") + private String monthlyPurchaseLimit; + @ApiModelProperty("销售价格") @TableField("price") private BigDecimal price; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/dto/ShopGoodsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/dto/ShopGoodsDTO.java index 9a68d32..66af8f4 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/dto/ShopGoodsDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/dto/ShopGoodsDTO.java @@ -9,6 +9,9 @@ import com.agileboot.domain.shop.goods.db.SearchGoodsDO; import com.agileboot.domain.system.user.db.SysUserEntity; import java.math.BigDecimal; import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @ExcelSheet(name = "商品列表") @@ -98,4 +101,7 @@ public class ShopGoodsDTO { @ExcelColumn(name = "商品使用说明") private String usageInstruction; + + @ExcelColumn(name = "每人每月限购数量") + private String monthlyPurchaseLimit; } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java index 55c653f..66184a7 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsEntity.java @@ -36,6 +36,10 @@ public class ShopOrderGoodsEntity extends BaseEntity { @TableField("order_id") private Long orderId; + @ApiModelProperty("审批ID") + @TableField("approval_id") + private Long approvalId; + @ApiModelProperty("关联商品ID") @TableField("goods_id") private Long goodsId; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java index c8611f7..07ae8fd 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java @@ -24,4 +24,6 @@ public interface ShopOrderGoodsService extends IService { List selectTodayLatestOrderGoods(); List selectUnReturnOrderGoods(); + + List selectOrderGoodsByApprovalId(Long approvalId); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java index a0a14f0..a8a423b 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java @@ -1,6 +1,7 @@ package com.agileboot.domain.shop.order.db; import com.agileboot.domain.shop.order.dto.TopGoodsDTO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -42,4 +43,12 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl selectOrderGoodsByApprovalId(Long approvalId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_id", approvalId) + .eq("deleted", 0); + return this.list(queryWrapper); + } + } diff --git a/sql/20250605.sql b/sql/20250605.sql index 05f508a..8d425ce 100644 --- a/sql/20250605.sql +++ b/sql/20250605.sql @@ -65,4 +65,12 @@ ALTER TABLE `shop_order` ADD COLUMN `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id'; ALTER TABLE `shop_order_goods` -ADD COLUMN `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id'; \ No newline at end of file +ADD COLUMN `corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id'; + +ALTER TABLE `shop_goods` +ADD COLUMN `monthly_purchase_limit` INT DEFAULT NULL COMMENT '每人每月限购数量' +AFTER `corpid`; + +ALTER TABLE `shop_order_goods` +ADD COLUMN `approval_id` bigint NULL COMMENT '审批ID' +AFTER `order_id`; \ No newline at end of file