feat(asset): 支持多商品审批流程
重构资产审批流程,将单个商品审批改为支持多商品审批 - 新增ApprovalGoodsInfo类存储商品信息 - 修改审批逻辑处理多个商品 - 更新数据库表结构 - 调整审批通知消息格式
This commit is contained in:
parent
02dad5beab
commit
043c0e8cb9
|
@ -70,8 +70,6 @@ public class AssetApiControllerTest {
|
|||
PostAssetApprovalCommand approvalCommand = new PostAssetApprovalCommand();
|
||||
approvalCommand.setCorpid("wpZ1ZrEgAA2QTxIRcB4cMtY7hQbTcPAw");
|
||||
approvalCommand.setExternalApprovalId(1L);
|
||||
approvalCommand.setExternalGoodsId(1003L);
|
||||
approvalCommand.setApplyQuantity(2);
|
||||
approvalCommand.setApprovalType(1);
|
||||
approvalCommand.setApplyRemark("申请说明");
|
||||
approvalCommand.setMobile("12345678901");
|
||||
|
@ -79,6 +77,12 @@ public class AssetApiControllerTest {
|
|||
approvalCommand.setName("姓名");
|
||||
approvalCommand.setIsInternal(2);
|
||||
|
||||
approvalCommand.setGoodsInfoList(new ArrayList<>());
|
||||
PostAssetApprovalCommand.ApprovalGoodsInfo goodsInfo = new PostAssetApprovalCommand.ApprovalGoodsInfo();
|
||||
goodsInfo.setExternalGoodsId(1003L);
|
||||
goodsInfo.setApplyQuantity(2);
|
||||
approvalCommand.getGoodsInfoList().add(goodsInfo);
|
||||
|
||||
// 2.构造请求体
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
|
||||
|
|
|
@ -97,36 +97,45 @@ public class AssetApplicationService {
|
|||
}
|
||||
|
||||
|
||||
public void postAssetApprovalCommand(PostAssetApprovalCommand command) {
|
||||
if (command == null || command.getExternalGoodsId() == null || StringUtils.isBlank(command.getCorpid())) {
|
||||
public void postAssetApprovalCommand(PostAssetApprovalCommand postAssetApprovalCommand) {
|
||||
if (postAssetApprovalCommand == null || postAssetApprovalCommand.getGoodsInfoList() == null || postAssetApprovalCommand.getGoodsInfoList().isEmpty()) {
|
||||
throw new IllegalArgumentException("ExternalGoodsId cannot be null");
|
||||
}
|
||||
if (command.getApplyQuantity() == null || command.getApplyQuantity() <= 0) {
|
||||
throw new IllegalArgumentException("ApplyQuantity must be greater than 0");
|
||||
if (StringUtils.isBlank(postAssetApprovalCommand.getCorpid())) {
|
||||
throw new IllegalArgumentException("Corpid cannot be null");
|
||||
}
|
||||
|
||||
ShopGoodsEntity shopGoodsEntity = shopGoodsService.getGoodsByExternalGoodsId(command.getCorpid(), command.getExternalGoodsId());
|
||||
if (shopGoodsEntity == null) {
|
||||
throw new IllegalArgumentException("ExternalGoodsId not found");
|
||||
}
|
||||
if (shopGoodsEntity.getStock() == null || shopGoodsEntity.getStock() < command.getApplyQuantity()) {
|
||||
throw new IllegalArgumentException("Insufficient stock");
|
||||
for (PostAssetApprovalCommand.ApprovalGoodsInfo command : postAssetApprovalCommand.getGoodsInfoList()) {
|
||||
|
||||
|
||||
if (command.getApplyQuantity() == null || command.getApplyQuantity() <= 0) {
|
||||
throw new IllegalArgumentException("ApplyQuantity must be greater than 0");
|
||||
}
|
||||
|
||||
ShopGoodsEntity shopGoodsEntity = shopGoodsService.getGoodsByExternalGoodsId(postAssetApprovalCommand.getCorpid(), command.getExternalGoodsId());
|
||||
if (shopGoodsEntity == null) {
|
||||
throw new IllegalArgumentException("ExternalGoodsId not found");
|
||||
}
|
||||
if (shopGoodsEntity.getStock() == null || shopGoodsEntity.getStock() < command.getApplyQuantity()) {
|
||||
throw new IllegalArgumentException("Insufficient stock");
|
||||
}
|
||||
|
||||
AddReturnApprovalCommand returnApprovalCommand = new AddReturnApprovalCommand();
|
||||
BeanUtils.copyProperties(postAssetApprovalCommand, returnApprovalCommand);
|
||||
BeanUtils.copyProperties(command, returnApprovalCommand);
|
||||
returnApprovalCommand.setGoodsId(shopGoodsEntity.getGoodsId());
|
||||
returnApprovalCommand.setGoodsPrice(shopGoodsEntity.getPrice());
|
||||
if (returnApprovalCommand.getApprovalType() == null) {
|
||||
returnApprovalCommand.setApprovalType(1);
|
||||
}
|
||||
|
||||
ReturnApprovalModel returnApprovalModel = returnApprovalModelFactory.create();
|
||||
returnApprovalModel.initBaseEntity();
|
||||
returnApprovalModel.loadAddCommand(returnApprovalCommand);
|
||||
returnApprovalCommand.insert();
|
||||
}
|
||||
|
||||
AddReturnApprovalCommand returnApprovalCommand = new AddReturnApprovalCommand();
|
||||
BeanUtils.copyProperties(command, returnApprovalCommand);
|
||||
returnApprovalCommand.setGoodsId(shopGoodsEntity.getGoodsId());
|
||||
returnApprovalCommand.setGoodsPrice(shopGoodsEntity.getPrice());
|
||||
if (returnApprovalCommand.getApprovalType() == null) {
|
||||
returnApprovalCommand.setApprovalType(1);
|
||||
}
|
||||
|
||||
ReturnApprovalModel returnApprovalModel = returnApprovalModelFactory.create();
|
||||
returnApprovalModel.initBaseEntity();
|
||||
returnApprovalModel.loadAddCommand(returnApprovalCommand);
|
||||
returnApprovalCommand.insert();
|
||||
|
||||
|
||||
ShopGoodsEntity firstGoods = shopGoodsService.getGoodsByExternalGoodsId(postAssetApprovalCommand.getCorpid(), postAssetApprovalCommand.getGoodsInfoList().get(0).getExternalGoodsId());
|
||||
// 发送审核消息
|
||||
try {
|
||||
String appid = "QWTONG_YS_WXSHOP";
|
||||
|
@ -143,8 +152,12 @@ public class AssetApplicationService {
|
|||
List<NewsArticle> articles = new ArrayList<>();
|
||||
NewsArticle article = new NewsArticle();
|
||||
article.setTitle("耗材领用审核通知");
|
||||
article.setDescription("申请领用商品:" + shopGoodsEntity.getGoodsName());
|
||||
article.setPicurl(shopGoodsEntity.getCoverImg());
|
||||
if (postAssetApprovalCommand.getGoodsInfoList().size() > 1) {
|
||||
article.setDescription(postAssetApprovalCommand.getName() + " 申请领用" + firstGoods.getGoodsName() + "等" + postAssetApprovalCommand.getGoodsInfoList().size() + "件商品");
|
||||
} else {
|
||||
article.setDescription(postAssetApprovalCommand.getName() + " 申请领用" + firstGoods.getGoodsName());
|
||||
}
|
||||
article.setPicurl(firstGoods.getCoverImg());
|
||||
article.setUrl("http://wxshop.ab98.cn/shop-api/api/shop/qy/wechatAuth");
|
||||
articles.add(article);
|
||||
|
||||
|
|
|
@ -5,21 +5,17 @@ import io.swagger.annotations.ApiModelProperty;
|
|||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode
|
||||
@Data
|
||||
public class PostAssetApprovalCommand {
|
||||
@ApiModelProperty("企业微信id")
|
||||
private String corpid;
|
||||
|
||||
@ApiModelProperty("外部归属类型的商品ID")
|
||||
private Long externalGoodsId;
|
||||
|
||||
@ApiModelProperty("外部归属类型的审批ID")
|
||||
private Long externalApprovalId;
|
||||
|
||||
@ApiModelProperty("申请数量")
|
||||
private Integer applyQuantity;
|
||||
|
||||
@ApiModelProperty("审批类型(0为借还柜 1为固资通)")
|
||||
private Integer approvalType;
|
||||
|
||||
|
@ -37,4 +33,16 @@ public class PostAssetApprovalCommand {
|
|||
|
||||
@ApiModelProperty("是否内部用户(0否 1汇邦云用户 2企业微信用户)")
|
||||
private Integer isInternal;
|
||||
|
||||
@ApiModelProperty("审批信息列表")
|
||||
private List<ApprovalGoodsInfo> goodsInfoList;
|
||||
|
||||
@Data
|
||||
public static class ApprovalGoodsInfo {
|
||||
@ApiModelProperty("外部归属类型的商品ID")
|
||||
private Long externalGoodsId;
|
||||
|
||||
@ApiModelProperty("申请数量")
|
||||
private Integer applyQuantity;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,4 +31,28 @@ ALTER TABLE `return_approval`
|
|||
ADD COLUMN `external_approval_id` bigint DEFAULT NULL COMMENT '外部归属类型的审批ID'
|
||||
AFTER `external_goods_id`;
|
||||
ALTER TABLE `return_approval`
|
||||
ADD INDEX `idx_external_approval_id` (`external_approval_id`);
|
||||
ADD INDEX `idx_external_approval_id` (`external_approval_id`);
|
||||
|
||||
CREATE TABLE `approval_goods` (
|
||||
`approval_goods_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`approval_id` bigint NOT NULL COMMENT '审批ID',
|
||||
`goods_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称',
|
||||
`goods_id` bigint NOT NULL COMMENT '关联商品ID',
|
||||
`external_goods_id` bigint DEFAULT NULL COMMENT '外部归属类型的商品ID',
|
||||
`corpid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '企业微信id',
|
||||
`belong_type` tinyint NOT NULL DEFAULT '0' COMMENT '归属类型(0-借还柜 1-固资通)',
|
||||
`price` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '销售价格',
|
||||
`apply_quantity` int DEFAULT NULL COMMENT '申请数量',
|
||||
`cover_img` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '封面图URL',
|
||||
`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_id`),
|
||||
KEY `idx_approval_id` (`approval_id`),
|
||||
KEY `idx_goods_id` (`goods_id`),
|
||||
KEY `idx_external_goods_id` (`external_goods_id`),
|
||||
KEY `idx_corpid` (`corpid`),
|
||||
KEY `idx_update_time` (`update_time`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='申请领用商品信息表';
|
Loading…
Reference in New Issue