This commit is contained in:
雷欧(林平凡)
2025-10-10 14:24:59 +08:00
parent 939660297d
commit 4ccd5f799e
6 changed files with 323 additions and 27 deletions

View File

@@ -40,6 +40,10 @@ public class BatchPublishItem extends BaseEntity
@Excel(name = "账号名称")
private String accountRemark;
/** 子账号(会员名) */
@Excel(name = "子账号")
private String subAccount;
/** 发品状态0待发布 1发布中 2发布成功 3发布失败 4上架中 5已上架 6上架失败 */
@Excel(name = "发品状态", readConverterExp = "0=待发布,1=发布中,2=发布成功,3=发布失败,4=上架中,5=已上架,6=上架失败")
private Integer status;
@@ -118,6 +122,14 @@ public class BatchPublishItem extends BaseEntity
this.accountRemark = accountRemark;
}
public String getSubAccount() {
return subAccount;
}
public void setSubAccount(String subAccount) {
this.subAccount = subAccount;
}
public Integer getStatus() {
return status;
}
@@ -191,6 +203,7 @@ public class BatchPublishItem extends BaseEntity
.append("productName", getProductName())
.append("targetAccount", getTargetAccount())
.append("accountRemark", getAccountRemark())
.append("subAccount", getSubAccount())
.append("status", getStatus())
.append("productId", getProductId())
.append("productStatus", getProductStatus())

View File

@@ -23,9 +23,9 @@ public class BatchPublishRequest {
@NotEmpty(message = "商品列表不能为空")
private List<ProductItem> products;
/** 目标ERP账号列表 */
@NotEmpty(message = "目标账号不能为空")
private List<String> targetAccounts;
/** 账号配置列表(包含多个主账号及其子账号) */
@NotEmpty(message = "账号配置不能为空")
private List<AccountConfig> accountConfigs;
/** 通用参数 */
@NotNull(message = "通用参数不能为空")
@@ -34,6 +34,35 @@ public class BatchPublishRequest {
/** 延迟上架时间默认3秒 */
private Integer delaySeconds = 3;
/**
* 账号配置(主账号+子账号列表)
*/
public static class AccountConfig {
/** 目标ERP账号appid */
@NotBlank(message = "目标账号不能为空")
private String targetAccount;
/** 该账号下的子账号列表 */
@NotEmpty(message = "子账号不能为空")
private List<String> subAccounts;
public String getTargetAccount() {
return targetAccount;
}
public void setTargetAccount(String targetAccount) {
this.targetAccount = targetAccount;
}
public List<String> getSubAccounts() {
return subAccounts;
}
public void setSubAccounts(List<String> subAccounts) {
this.subAccounts = subAccounts;
}
}
public static class ProductItem {
/** SKUID */
@NotBlank(message = "SKUID不能为空")
@@ -292,12 +321,12 @@ public class BatchPublishRequest {
this.products = products;
}
public List<String> getTargetAccounts() {
return targetAccounts;
public List<AccountConfig> getAccountConfigs() {
return accountConfigs;
}
public void setTargetAccounts(List<String> targetAccounts) {
this.targetAccounts = targetAccounts;
public void setAccountConfigs(List<AccountConfig> accountConfigs) {
this.accountConfigs = accountConfigs;
}
public CommonParams getCommonParams() {

View File

@@ -256,8 +256,15 @@ public class BatchPublishServiceImpl implements IBatchPublishService
@Override
@Transactional
public Long batchPublish(BatchPublishRequest request) {
log.info("开始批量发品任务,商品数: {}, 账号数: {}",
request.getProducts().size(), request.getTargetAccounts().size());
// 计算总的子账号数
int totalSubAccounts = request.getAccountConfigs().stream()
.mapToInt(config -> config.getSubAccounts().size())
.sum();
log.info("开始批量发品任务,商品数: {}, 主账号数: {}, 总子账号数: {}",
request.getProducts().size(),
request.getAccountConfigs().size(),
totalSubAccounts);
// 获取当前用户
SysUser currentUser = SecurityUtils.getLoginUser().getUser();
@@ -268,7 +275,8 @@ public class BatchPublishServiceImpl implements IBatchPublishService
task.setOriginalMessage(request.getOriginalMessage());
task.setTotalProducts(request.getProducts().size());
task.setSelectedProducts(request.getProducts().size());
task.setTargetAccounts(JSON.toJSONString(request.getTargetAccounts()));
// 保存账号配置信息
task.setTargetAccounts(JSON.toJSONString(request.getAccountConfigs()));
task.setStatus(0); // 待处理
task.setSuccessCount(0);
task.setFailCount(0);
@@ -280,21 +288,28 @@ public class BatchPublishServiceImpl implements IBatchPublishService
taskMapper.insertBatchPublishTask(task);
Long taskId = task.getId();
// 创建明细记录
// 创建明细记录 - 为每个商品×每个主账号×每个子账号创建一条记录
List<BatchPublishItem> items = new ArrayList<>();
for (BatchPublishRequest.ProductItem product : request.getProducts()) {
for (String accountAppid : request.getTargetAccounts()) {
BatchPublishItem item = new BatchPublishItem();
item.setTaskId(taskId);
item.setSkuid(product.getSkuid());
item.setProductName(product.getProductName());
item.setTargetAccount(accountAppid);
item.setAccountRemark(getAccountRemark(accountAppid));
item.setStatus(0); // 待发布
item.setPublishPrice(product.getPrice() != null ? Math.round(product.getPrice() * 100) : null);
item.setDelaySeconds(request.getDelaySeconds());
item.setCreateTime(new Date());
items.add(item);
for (BatchPublishRequest.AccountConfig accountConfig : request.getAccountConfigs()) {
String accountAppid = accountConfig.getTargetAccount();
String accountRemark = getAccountRemark(accountAppid);
for (String subAccount : accountConfig.getSubAccounts()) {
BatchPublishItem item = new BatchPublishItem();
item.setTaskId(taskId);
item.setSkuid(product.getSkuid());
item.setProductName(product.getProductName());
item.setTargetAccount(accountAppid);
item.setAccountRemark(accountRemark + "-" + subAccount);
item.setSubAccount(subAccount); // 设置子账号
item.setStatus(0); // 待发布
item.setPublishPrice(product.getPrice() != null ? Math.round(product.getPrice() * 100) : null);
item.setDelaySeconds(request.getDelaySeconds());
item.setCreateTime(new Date());
items.add(item);
}
}
}
@@ -413,7 +428,8 @@ public class BatchPublishServiceImpl implements IBatchPublishService
// 2. 发布店铺(必填)
PublishShop shop = new PublishShop();
shop.setUserName(commonParams.getUserName());
// 使用子账号作为会员名
shop.setUserName(item.getSubAccount() != null ? item.getSubAccount() : commonParams.getUserName());
shop.setProvince(commonParams.getProvince());
shop.setCity(commonParams.getCity());
shop.setDistrict(commonParams.getDistrict());

View File

@@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="productName" column="product_name" />
<result property="targetAccount" column="target_account" />
<result property="accountRemark" column="account_remark" />
<result property="subAccount" column="sub_account" />
<result property="status" column="status" />
<result property="productId" column="product_id" />
<result property="productStatus" column="product_status" />
@@ -23,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectBatchPublishItemVo">
select id, task_id, skuid, product_name, target_account, account_remark, status,
select id, task_id, skuid, product_name, target_account, account_remark, sub_account, status,
product_id, product_status, outer_id, publish_price, error_message,
publish_time, delay_seconds, create_time
from batch_publish_item
@@ -59,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="productName != null">product_name,</if>
<if test="targetAccount != null">target_account,</if>
<if test="accountRemark != null">account_remark,</if>
<if test="subAccount != null">sub_account,</if>
<if test="status != null">status,</if>
<if test="productId != null">product_id,</if>
<if test="productStatus != null">product_status,</if>
@@ -75,6 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="productName != null">#{productName},</if>
<if test="targetAccount != null">#{targetAccount},</if>
<if test="accountRemark != null">#{accountRemark},</if>
<if test="subAccount != null">#{subAccount},</if>
<if test="status != null">#{status},</if>
<if test="productId != null">#{productId},</if>
<if test="productStatus != null">#{productStatus},</if>
@@ -89,11 +92,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="batchInsertBatchPublishItem" parameterType="java.util.List">
insert into batch_publish_item
(task_id, skuid, product_name, target_account, account_remark, status, publish_price, delay_seconds, create_time)
(task_id, skuid, product_name, target_account, account_remark, sub_account, status, publish_price, delay_seconds, create_time)
values
<foreach collection="list" item="item" separator=",">
(#{item.taskId}, #{item.skuid}, #{item.productName}, #{item.targetAccount}, #{item.accountRemark},
#{item.status}, #{item.publishPrice}, #{item.delaySeconds}, #{item.createTime})
#{item.subAccount}, #{item.status}, #{item.publishPrice}, #{item.delaySeconds}, #{item.createTime})
</foreach>
</insert>