Commit 3a670845 by 杨树贤

完善上架校验

parent 7767996a
......@@ -75,14 +75,14 @@ class SkuApiController extends Controller
$uploadLogId = SkuUploadLogModel::where('supplier_code', $supplierCode)
->where('status', SkuUploadLogModel::STATUS_HANDLED)->orderBy('id', 'desc')
->value('id');
$content = [
'supplier_code' => $supplierCode,
'brand_id' => $brandId,
'log_id' => $uploadLogId,
"down_type" => 1,
'user_name' => $request->user->name,
];
Log::info($content);
$content = [
'supplier_code' => $supplierCode,
'brand_id' => $brandId,
'log_id' => $uploadLogId,
"down_type" => 1,
'user_name' => $request->user->name,
];
Log::info($content);
$data = [
'supplier_code' => $supplierCode,
......@@ -137,7 +137,10 @@ class SkuApiController extends Controller
$this->response(-1, '请设置上架有效期');
}
}
(new SkuService())->batchUpdateSkuStatus($data);
$result = (new SkuService())->batchUpdateSkuStatus($data);
if ($result !== true) {
$this->response(-1, $result);
}
$this->response(0, '操作成功,请等待后台上下架任务完成刷新查看');
}
......
......@@ -326,107 +326,120 @@ class SkuService extends BaseService
//批量更新sku状态,走队列的
public function batchUpdateSkuStatus($data)
{
try {
$skuIds = explode(',', $data['sku_ids']);
//上架时验证cp_time限制
if ($data['operate_type'] == SkuService::OPERATE_TYPE_PUTAWAY) {
//商品类型枚举
$goodsLabelMap = config('field.SkuGoodsLabel');
$invalidSkuIds = [];
$now = time();
$redis = new RedisModel();
$skuList = $redis->hmget('sku', $skuIds);
$skuList = array_filter($skuList, function ($value) {
return $value;
});
$supplierCpTimeMap = SupplierChannelModel::select('supplier_code', 'cp_time_day', 'futures_cp_time_day')->whereIn('supplier_code', array_column($skuList, 'canal'))->pluck('cp_time_day', 'supplier_code')->toArray();
foreach ($skuIds as $skuId) {
//获取goods_tag信息
$goodsTagsStr = $redis->hget('goods_tag', $skuId);
$isFutures = false;
if ($goodsTagsStr) {
$goodsTagsData = json_decode($goodsTagsStr, true);
if (!empty($goodsTagsData['goods_label'])) {
$goodsLabelType = (int)$goodsTagsData['goods_label'];
$goodsLabel = isset($goodsLabelMap[$goodsLabelType]) ? $goodsLabelMap[$goodsLabelType] : '';
//判断是否是期货(标签名称包含"期货")
if (strpos($goodsLabel, '期货') !== false) {
$isFutures = true;
}
$skuIds = explode(',', $data['sku_ids']);
//上架时验证cp_time限制
if ($data['operate_type'] == SkuService::OPERATE_TYPE_PUTAWAY) {
//商品类型枚举
$goodsLabelMap = config('field.SkuGoodsLabel');
$invalidSkuIds = [];
$now = time();
$redis = new RedisModel();
$skuList = $redis->hmget('sku', $skuIds);
$skuList = array_map(function ($sku) {
return \json_decode($sku, true);
}, $skuList);
$skuList = array_filter($skuList, function ($value) {
return $value;
});
$supplierCpTimeMap = SupplierChannelModel::select('supplier_code', 'cp_time_day', 'futures_cp_time_day')->whereIn('supplier_code', array_column($skuList, 'canal'))->get()->keyBy('supplier_code')->toArray();
foreach ($skuIds as $skuId) {
$sku = $redis->hget('sku', $skuId);
$sku = \json_decode($sku, true);
//获取goods_tag信息
$goodsTagsStr = $redis->hget('goods_tag', $skuId);
$isFutures = false;
if ($goodsTagsStr) {
$goodsTagsData = json_decode($goodsTagsStr, true);
if (!empty($goodsTagsData['goods_label'])) {
$goodsLabelType = (int)$goodsTagsData['goods_label'];
$goodsLabel = isset($goodsLabelMap[$goodsLabelType]) ? $goodsLabelMap[$goodsLabelType] : '';
//判断是否是期货(标签名称包含"期货")
if (strpos($goodsLabel, '期货') !== false) {
$isFutures = true;
}
}
}
//获取SKU信息以获取供应商编码
$skuInfo = isset($skuList[$skuId]) ? json_decode($skuList[$skuId], true) : null;
if (!$skuInfo || empty($skuInfo['canal'])) {
$invalidSkuIds[] = $skuId;
continue;
}
$supplierCode = $skuInfo['canal'];
//获取对应的cp_time限制
if (!isset($supplierCpTimeMap[$supplierCode])) {
$invalidSkuIds[] = $skuId;
continue;
}
$cpTimeLimit = $isFutures ? $supplierCpTimeMap[$supplierCode]['futures_cp_time_day'] : $supplierCpTimeMap[$supplierCode]['cp_time_day'];
// -1表示不限制
if ($cpTimeLimit == -1) {
continue;
}
//计算允许的最大cp_time(当前时间+限制天数)
$maxCpTime = $now + ($cpTimeLimit * 86400);
//获取SKU信息以获取供应商编码
$skuInfo = $sku;
if (!$skuInfo || empty($skuInfo['canal'])) {
$invalidSkuIds[] = $skuId;
continue;
}
//获取传入的cp_time(从请求中获取,这里假设传入的是2051193600)
$inputCpTime = $data['cp_time'];
$supplierCode = $skuInfo['canal'];
//获取对应的cp_time限制
if (!isset($supplierCpTimeMap[$supplierCode])) {
$invalidSkuIds[] = [
'sku_id' => $skuId,
'supplier_code' => $supplierCode,
'cp_time_limit' => '',
];
continue;
}
//验证cp_time是否超过限制
if ($inputCpTime > $maxCpTime) {
$invalidSkuIds[] = $skuId;
}
$cpTimeLimit = $isFutures ? $supplierCpTimeMap[$supplierCode]['futures_cp_time_day'] : $supplierCpTimeMap[$supplierCode]['cp_time_day'];
// -1表示不限制
if ($cpTimeLimit == -1) {
continue;
}
//如果有不符合要求的SKU,全部拒绝
if (!empty($invalidSkuIds)) {
return new Exception("以下SKU的cp_time超过限制:" . implode('</br>', $invalidSkuIds));
//计算允许的最大cp_time(当前时间+限制天数)
$maxCpTime = $now + ($cpTimeLimit * 86400);
//获取传入的cp_time(从请求中获取,这里假设传入的是2051193600)
$inputCpTime = $data['cp_time'];
//验证cp_time是否超过限制
if (!$inputCpTime) {
$inputCpTime = 100000000000;
}
}
$supplierCodes = explode(',', $data['supplier_codes']);
//构建队列数据
//上架
$queueData = [];
if ($data['operate_type'] == self::OPERATE_TYPE_PUTAWAY) {
$queueName = 'lie_footstone_batch_upsku_queue';
$data['cp_time'] = $data['is_long_term'] == 1 ? self::LONG_TERM_TIMESTAMP : strtotime($data['cp_time']);
foreach ($skuIds as $key => $skuId) {
$queueData[] = [
$inputCpTime = strtotime($inputCpTime);
if ($inputCpTime > $maxCpTime) {
$invalidSkuIds[] = [
'sku_id' => $skuId,
'cp_time' => $data['cp_time'],
'source' => 'supplier',
'user_id' => request()->user->userId,
'supplier_code' => $supplierCode,
'cp_time_limit' => $cpTimeLimit,
];
ManualPutawaySkuLog::addManualPutawaySkuLog($skuId, $supplierCodes[$key], 1);
}
} else {
foreach ($skuIds as $key => $skuId) {
ManualPutawaySkuLog::addManualPutawaySkuLog($skuId, $supplierCodes[$key]);
}
//如果有不符合要求的SKU,全部拒绝
if (!empty($invalidSkuIds)) {
$errorMessages = [];
foreach ($invalidSkuIds as $invalidSku) {
$errorMessages[] = "SKU ID: {$invalidSku['sku_id']}, 供应商编码: {$invalidSku['supplier_code']}, 过期时间限制: {$invalidSku['cp_time_limit']}天";
}
$queueName = 'lie_footstone_batch_downsku_queue';
$queueData['down_type'] = 2;
$queueData['data'] = $skuIds;
$queueData['source'] = 'supplier';
$queueData['user_id'] = request()->user->userId;
return "以下SKU的过期时间超过限制:" . implode('</br>', $errorMessages);
}
QueueService::publishQueueSecond($queueName, $queueData);
} catch (\Exception $exception) {
return $exception;
}
$supplierCodes = explode(',', $data['supplier_codes']);
//构建队列数据
//上架
$queueData = [];
if ($data['operate_type'] == self::OPERATE_TYPE_PUTAWAY) {
$queueName = 'lie_footstone_batch_upsku_queue';
$data['cp_time'] = $data['is_long_term'] == 1 ? self::LONG_TERM_TIMESTAMP : strtotime($data['cp_time']);
foreach ($skuIds as $key => $skuId) {
$queueData[] = [
'sku_id' => $skuId,
'cp_time' => $data['cp_time'],
'source' => 'supplier',
'user_id' => request()->user->userId,
];
ManualPutawaySkuLog::addManualPutawaySkuLog($skuId, $supplierCodes[$key], 1);
}
} else {
foreach ($skuIds as $key => $skuId) {
ManualPutawaySkuLog::addManualPutawaySkuLog($skuId, $supplierCodes[$key]);
}
$queueName = 'lie_footstone_batch_downsku_queue';
$queueData['down_type'] = 2;
$queueData['data'] = $skuIds;
$queueData['source'] = 'supplier';
$queueData['user_id'] = request()->user->userId;
}
QueueService::publishQueueSecond($queueName, $queueData);
return true;
}
......
......@@ -51,7 +51,7 @@
success: function (res) {
if (res.err_code === 0) {
admin.closeThisDialog();
parent.layer.msg(res.err_msg, {icon: 6});
layer.msg(res.err_msg, {icon: 6});
} else {
layer.msg(res.err_msg, {icon: 5});
}
......
......@@ -396,7 +396,7 @@
if (status !== 'offshelf') {
layer.open({
type: 2,
area: ['600px', '500px'],
area: ['800px', '500px'],
offset: '100px',
fixed: false, //不固定
maxmin: true,
......@@ -425,14 +425,14 @@
success: function (res) {
console.log(res);
if (res.err_code === 0) {
layer.msg(res.err_msg, {icon: 6});
parent.layer.msg(res.err_msg, {icon: 6});
table.reload('skuList', {
page: {
curr: currentPage
},
});
} else {
layer.msg(res.err_msg, {icon: 5});
parent.layer.msg(res.err_msg, {icon: 5});
return false;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment