jh-admin/addon/supply/model/goods/Move.php

531 lines
24 KiB
PHP

<?php
/**
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.gobuysaas.com
* =========================================================
*/
namespace addon\supply\model\goods;
use addon\supply\model\order\Order;
use app\model\BaseModel;
use app\model\goods\Config;
use app\model\goods\Goods as GoodsModel;
use app\model\goods\GoodsCategory;
use app\model\system\Stat;
/**
* 商品迁移
*/
class Move extends BaseModel
{
/**
* 保存迁移一部分商品(将供应商商品转化为特殊的结构用于普通商品的添加)
* @param $condition
*/
public function move($condition, $site_id)
{
// $goods_state 传入的商品状态 可以选择直接上架或是到仓库
$order_model = new Order();
$order_list = $order_model->getOrderList($condition)[ 'data' ] ?? [];
if (empty($order_list))
return $this->error([], 'ORDER_EMPTY');
$temp_list = [];
$goods_id_array = [];
foreach ($order_list as $order_k => $order_v) {
$order_goods_condition = array (
[ 'order_id', '=', $order_v[ 'order_id' ] ],
);
$order_goods_list = $order_model->getOrderGoodsList($order_goods_condition)[ 'data' ] ?? [];
if (!empty($order_goods_list)) {
foreach ($order_goods_list as $order_goods_k => $order_goods_v) {
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ] = [];
}
$goods_id_array[] = $order_goods_v[ 'goods_id' ];
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] = 0;
}
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] += $order_goods_v[ 'num' ];
}
}
}
if (empty($temp_list))
return $this->error([], 'ORDER_EMPTY');
$temp_goods_condition = [
[ 'goods_id', 'in', $goods_id_array ]
];
//查询到可迁移的商品
$supply_goods_model = new Goods();
$goods_list = $supply_goods_model->getGoodsList($temp_goods_condition, '*')[ 'data' ] ?? [];
if (empty($goods_list)) {
return $this->error([], '找不到可迁移的商品');
}
$goods_model = new GoodsModel();
model('goods')->startTrans();
try {
//将供应商商品转化为普通的商品
//店铺信息
$shop_info = model('shop')->getInfo([ [ 'site_id', '=', $site_id ] ], 'site_id, site_name, website_id, is_own,cert_id, shop_status');
$goods_config = new Config();
$goods_verify_config = $goods_config->getVerifyConfig();
$goods_verify_config = $goods_verify_config[ 'data' ][ 'value' ];
$verify_state = 1;
if (!empty($goods_verify_config[ 'is_open' ])) {
$verify_state = 0;//开启商品审核后,审核状态为:待审核
}
// 店铺未认证、审核中的状态下,商品需要审核
if (empty($shop_info[ 'cert_id' ]) || $shop_info[ 'shop_status' ] == 0 || $shop_info[ 'shop_status' ] == 2) {
$verify_state = 0;//开启商品审核后,审核状态为:待审核
}
foreach ($goods_list as $goods_k => $goods_item) {
//对比当前商品的商品是否已存在,如果已存在 不重复添加,编辑当前商品的库
// $original_goods_info = model('goods')->getInfo([['supply_goods_id', '=', $goods_item[ 'goods_id' ]]]);
// //不存在创建
// if(empty($original_goods_info)){
//商品的规格sku项
$sku_list = $supply_goods_model->getGoodsSkuList([ [ 'goods_id', '=', $goods_item[ 'goods_id' ] ] ], '*')[ 'data' ] ?? [];
if (empty($sku_list)) {
return $this->error([], '商品规格项缺失');
}
$first_sku_data = $sku_list[ 0 ];
//先创建新的商品数据(商品默认没有库存,模拟创建操作)
$goods_data = $goods_item;
$stock = array_sum($temp_list[ $goods_item[ 'goods_id' ] ] ?? []);
$goods_data[ 'goods_stock' ] = $stock;
$goods_data[ 'price' ] = $first_sku_data[ 'min_price' ];
$goods_data[ 'market_price' ] = $first_sku_data[ 'market_price' ];
$goods_data[ 'cost_price' ] = $first_sku_data[ 'cost_price' ];
unset($goods_data[ 'goods_id' ]);//删除原有的自增长键
unset($goods_data[ 'max_price' ]);//删除最低价
unset($goods_data[ 'min_price' ]);//删除最高价
unset($goods_data[ 'min_num' ]);//删除最低购买数量
//重置部分字段, 库存都为空, 默认不上架
$goods_data[ 'sku_id' ] = 0;
$goods_data[ 'create_time' ] = time();
$goods_data[ 'modify_time' ] = time();
$goods_data[ 'sale_num' ] = 0;
$goods_info[ 'promotion_addon' ] = '';//迁移的商品没有营销活动
$goods_data[ 'evaluate' ] = 0;
$goods_data[ 'evaluate_shaitu' ] = 0;
$goods_data[ 'evaluate_shipin' ] = 0;
$goods_data[ 'evaluate_zhuiping' ] = 0;
$goods_data[ 'evaluate_haoping' ] = 0;
$goods_data[ 'evaluate_zhongping' ] = 0;
$goods_data[ 'evaluate_chaping' ] = 0;
$goods_data[ 'is_fenxiao' ] = 0;
$goods_data[ 'fenxiao_type' ] = 1;
$goods_data[ 'site_id' ] = $shop_info[ 'site_id' ];
$goods_data[ 'site_name' ] = $shop_info[ 'site_name' ];
$goods_data[ 'supplier_id' ] = $goods_item[ 'site_id' ];
// $goods_data['goods_state'] = 0;
$goods_data[ 'verify_state' ] = $verify_state;
$goods_data[ 'verify_state_remark' ] = '';
//迁移的商品不会有定时上下架
$goods_id = model('goods')->add($goods_data);
$sku_arr = [];
foreach ($sku_list as $k => $v) {
$sku_data = $v;
$sku_data[ 'price' ] = $sku_data[ 'min_price' ];
unset($sku_data[ 'sku_id' ]);
unset($sku_data[ 'price_json' ]);//删除价格规格
unset($sku_data[ 'min_price' ]);//删除最低价
unset($sku_data[ 'max_price' ]);//删除最高价
unset($sku_data[ 'min_num' ]);//删除最小数量
$sku_stock = $temp_list[ $goods_item[ 'goods_id' ] ][ $v[ 'sku_id' ] ] ?? 0;
$sku_data[ 'stock' ] = $sku_stock;
$sku_data[ 'goods_id' ] = $goods_id;
// $sku_data['goods_state'] = 0;
$sku_data[ 'verify_state' ] = $verify_state;
$sku_data[ 'evaluate' ] = 0;
$sku_data[ 'evaluate_shaitu' ] = 0;
$sku_data[ 'evaluate_shipin' ] = 0;
$sku_data[ 'evaluate_zhuiping' ] = 0;
$sku_data[ 'evaluate_haoping' ] = 0;
$sku_data[ 'evaluate_zhongping' ] = 0;
$sku_data[ 'evaluate_chaping' ] = 0;
$sku_data[ 'click_num' ] = 0;
$sku_data[ 'sale_num' ] = 0;
$sku_data[ 'collect_num' ] = 0;
$sku_data[ 'discount_id' ] = 0;
$sku_data[ 'seckill_id' ] = 0;
$sku_data[ 'topic_id' ] = 0;
$sku_data[ 'pintuan_id' ] = 0;
$sku_data[ 'bargain_id' ] = 0;
$sku_data[ 'sale_num' ] = 0;
$sku_data[ 'goods_state' ] = 0;
$sku_data[ 'verify_state' ] = 0;
$sku_data[ 'verify_state_remark' ] = '';
$sku_data[ 'supplier_id' ] = $goods_item[ 'site_id' ];
$sku_data[ 'start_time' ] = 0;
$sku_data[ 'end_time' ] = 0;
$sku_data[ 'promotion_type' ] = 0;
$sku_data[ 'discount_price' ] = $sku_data[ 'price' ];
$sku_data[ 'start_time' ] = 0;
$sku_data[ 'site_id' ] = $shop_info[ 'site_id' ];
$sku_data[ 'site_name' ] = $shop_info[ 'site_name' ];
$sku_arr[] = $sku_data;
}
model('goods_sku')->addList($sku_arr);
// 赋值第一个商品sku_id
$first_info = model('goods_sku')->getFirstData([ 'goods_id' => $goods_id ], 'sku_id', 'sku_id asc');
model('goods')->update([ 'sku_id' => $first_info[ 'sku_id' ] ], [ [ 'goods_id', '=', $goods_id ] ]);
//添加商品属性关联关系
$goods_model->refreshGoodsAttribute($goods_id, $goods_item[ 'goods_attr_format' ]);
if (!empty($data[ 'goods_spec_format' ])) {
//刷新SKU商品规格项/规格值JSON字符串
$goods_model->dealGoodsSkuSpecFormat($goods_id, $data[ 'goods_spec_format' ]);
}
//添加店铺添加统计
$stat = new Stat();
$stat->addShopStat([ 'add_goods_count' => 1, 'site_id' => $goods_item[ 'site_id' ] ]);
// }else{//存在的话 编辑已存在的商品(增加库存)
//
// }
}
model('goods')->commit();
return $this->success($goods_id);
} catch (\Exception $e) {
model('goods')->rollback();
return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
}
}
/**
* 根据订单来查询商品 并复制
* @param $condition
* @param int $site_id
*/
public function orderMove($condition, $site_id = 0)
{
$order_model = new Order();
$order_list = $order_model->getOrderList($condition)[ 'data' ] ?? [];
if (empty($order_list))
return $this->error([], 'ORDER_EMPTY');
$temp_list = [];
$goods_id_array = [];
foreach ($order_list as $order_k => $order_v) {
$order_goods_condition = array (
[ 'order_id', '=', $order_v[ 'order_id' ] ],
);
$order_goods_list = $order_model->getOrderGoodsList($order_goods_condition)[ 'data' ] ?? [];
if (!empty($order_goods_list)) {
foreach ($order_goods_list as $order_goods_k => $order_goods_v) {
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ] = [];
}
$goods_id_array[] = $order_goods_v[ 'goods_id' ];
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] = 0;
}
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] += $order_goods_v[ 'num' ];
}
}
}
if (empty($temp_list))
return $this->error([], 'ORDER_EMPTY');
$temp_goods_condition = [
[ 'goods_id', 'in', $goods_id_array ]
];
//查询到可迁移的商品
$supply_goods_model = new Goods();
$goods_list = $supply_goods_model->getGoodsList($temp_goods_condition, '*')[ 'data' ] ?? [];
if (empty($goods_list)) {
return $this->error([], '找不到可迁移的商品');
}
model('goods')->startTrans();
try {
//店铺信息
$shop_info = model('shop')->getInfo([ [ 'site_id', '=', $site_id ] ], 'site_id, site_name, website_id, is_own,cert_id, shop_status');
//循环创建或补充商品库存
foreach ($goods_list as $k => $v) {
$item_result = $this->itemMove($v, $shop_info, $temp_list);
if ($item_result[ 'code' ] < 0) {
return $item_result;
}
}
model('supply_order_goods')->update([ 'is_move' => 1 ], $condition);
model('goods')->commit();
return $this->success();
} catch (\Exception $e) {
model('goods')->rollback();
return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
}
}
/**
* 根据订单项id发货
* @param $condition
*/
public function orderGoodsMove($condition, $site_id = 0)
{
$order_goods_list = model('supply_order_goods')->getList($condition);
if (empty($order_goods_list))
return $this->error();
$temp_list = [];
$goods_id_array = [];
if (!empty($order_goods_list)) {
foreach ($order_goods_list as $order_goods_k => $order_goods_v) {
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ] = [];
}
$goods_id_array[] = $order_goods_v[ 'goods_id' ];
if (!isset($temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ])) {
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] = 0;
}
$temp_list[ $order_goods_v[ 'goods_id' ] ][ $order_goods_v[ 'sku_id' ] ] += $order_goods_v[ 'num' ];
}
}
if (empty($temp_list))
return $this->error([], 'ORDER_EMPTY');
$temp_goods_condition = [
[ 'goods_id', 'in', $goods_id_array ]
];
//查询到可迁移的商品
$supply_goods_model = new Goods();
$goods_list = $supply_goods_model->getGoodsList($temp_goods_condition, '*')[ 'data' ] ?? [];
if (empty($goods_list)) {
return $this->error([], '找不到可迁移的商品');
}
model('goods')->startTrans();
try {
//店铺信息
$shop_info = model('shop')->getInfo([ [ 'site_id', '=', $site_id ] ], 'site_id, site_name, website_id, is_own,cert_id, shop_status');
//循环创建或补充商品库存
foreach ($goods_list as $k => $v) {
$item_result = $this->itemMove($v, $shop_info, $temp_list);
if ($item_result[ 'code' ] < 0) {
return $item_result;
}
}
model('supply_order_goods')->update([ 'is_move' => 1 ], $condition);
model('goods')->commit();
return $this->success();
} catch (\Exception $e) {
model('goods')->rollback();
return $this->error($e->getMessage() . $e->getFile() . $e->getLine());
}
}
/**
* 订单项商品导出
* @param $order_goods
*/
public function itemMove($goods_item, $shop_info, $temp_list = [])
{
model('goods')->startTrans();
try {
$category_model = new GoodsCategory();
//将供应商商品转化为普通的商品
$goods_config = new Config();
$goods_verify_config = $goods_config->getVerifyConfig();
$goods_verify_config = $goods_verify_config[ 'data' ][ 'value' ];
$verify_state = 1;
if (!empty($goods_verify_config[ 'is_open' ])) {
$verify_state = 0;//开启商品审核后,审核状态为:待审核
}
// 店铺未认证、审核中的状态下,商品需要审核
if (empty($shop_info[ 'cert_id' ]) || $shop_info[ 'shop_status' ] == 0 || $shop_info[ 'shop_status' ] == 2) {
$verify_state = 0;//开启商品审核后,审核状态为:待审核
}
$goods_model = new GoodsModel();
$supply_goods_model = new Goods();
//商品的规格sku项
$sku_list = $supply_goods_model->getGoodsSkuList([ [ 'goods_id', '=', $goods_item[ 'goods_id' ] ] ], '*')[ 'data' ] ?? [];
if (empty($sku_list)) {
return $this->error([], '商品规格项缺失');
}
//对比当前商品的商品是否已存在,如果已存在 不重复添加,编辑当前商品的库
$original_goods_info = model('goods')->getInfo([ [ 'supply_goods_id', '=', $goods_item[ 'goods_id' ] ] ]);
//不存在创建
if (empty($original_goods_info)) {
//查询商品分类
$category_info = $category_model->getCategoryInfo([ [ 'category_id', '=', $goods_item[ 'category_id' ] ] ], 'supply_commission_rate')[ 'data' ] ?? [];
$commission_rate = $category_info[ 'supply_commission_rate' ] ?? 0;
$first_sku_data = $sku_list[ 0 ];
//先创建新的商品数据(商品默认没有库存,模拟创建操作)
$goods_data = $goods_item;
$stock = array_sum($temp_list[ $goods_item[ 'goods_id' ] ] ?? []);
$goods_data[ 'goods_stock' ] = $stock;
$goods_data[ 'price' ] = $first_sku_data[ 'min_price' ];
// $goods_data['market_price'] = $first_sku_data['market_price'];
$goods_data[ 'cost_price' ] = $first_sku_data[ 'cost_price' ];
unset($goods_data[ 'goods_id' ]);//删除原有的自增长键
unset($goods_data[ 'max_price' ]);//删除最低价
unset($goods_data[ 'min_price' ]);//删除最高价
unset($goods_data[ 'min_num' ]);//删除最低购买数量
//重置部分字段, 库存都为空, 默认不上架
$goods_data[ 'sku_id' ] = 0;
$goods_data[ 'create_time' ] = time();
$goods_data[ 'modify_time' ] = time();
$goods_data[ 'promotion_addon' ] = '';//迁移商品 营销活动为空
$goods_data[ 'sale_num' ] = 0;
$goods_data[ 'evaluate' ] = 0;
$goods_data[ 'evaluate_shaitu' ] = 0;
$goods_data[ 'evaluate_shipin' ] = 0;
$goods_data[ 'evaluate_zhuiping' ] = 0;
$goods_data[ 'evaluate_haoping' ] = 0;
$goods_data[ 'evaluate_zhongping' ] = 0;
$goods_data[ 'evaluate_chaping' ] = 0;
$goods_data[ 'is_fenxiao' ] = 0;
$goods_data[ 'fenxiao_type' ] = 1;
$goods_data[ 'site_id' ] = $shop_info[ 'site_id' ];
$goods_data[ 'site_name' ] = $shop_info[ 'site_name' ];
$goods_data[ 'supplier_id' ] = $goods_item[ 'site_id' ];//供应商id
$goods_data[ 'commission_rate' ] = $commission_rate;//商品佣金比率
$goods_data[ 'verify_state' ] = $verify_state;
$goods_data[ 'verify_state_remark' ] = '';
$goods_data[ 'supply_goods_id' ] = $goods_item[ 'goods_id' ];//关联供应商商品的商品id
$goods_id = model('goods')->add($goods_data);
$sku_arr = [];
foreach ($sku_list as $k => $v) {
$sku_data = $v;
$sku_data[ 'price' ] = $sku_data[ 'min_price' ];
unset($sku_data[ 'sku_id' ]);
unset($sku_data[ 'price_json' ]);//删除价格规格
unset($sku_data[ 'min_price' ]);//删除最低价
unset($sku_data[ 'max_price' ]);//删除最高价
unset($sku_data[ 'min_num' ]);//删除最小数量
$sku_stock = $temp_list[ $goods_item[ 'goods_id' ] ][ $v[ 'sku_id' ] ] ?? 0;
$sku_data[ 'stock' ] = $sku_stock;
$sku_data[ 'goods_id' ] = $goods_id;
// $sku_data['goods_state'] = 0;
$sku_data[ 'verify_state' ] = $verify_state;
$sku_data[ 'evaluate' ] = 0;
$sku_data[ 'evaluate_shaitu' ] = 0;
$sku_data[ 'evaluate_shipin' ] = 0;
$sku_data[ 'evaluate_zhuiping' ] = 0;
$sku_data[ 'evaluate_haoping' ] = 0;
$sku_data[ 'evaluate_zhongping' ] = 0;
$sku_data[ 'evaluate_chaping' ] = 0;
$sku_data[ 'click_num' ] = 0;
$sku_data[ 'sale_num' ] = 0;
$sku_data[ 'collect_num' ] = 0;
$sku_data[ 'sale_num' ] = 0;
$sku_data[ 'goods_state' ] = 0;
$sku_data[ 'verify_state' ] = 0;
$sku_data[ 'verify_state_remark' ] = '';
$sku_data[ 'start_time' ] = 0;
$sku_data[ 'end_time' ] = 0;
$sku_data[ 'promotion_type' ] = 0;
$sku_data[ 'discount_price' ] = $sku_data[ 'price' ];
$sku_data[ 'start_time' ] = 0;
$sku_data[ 'site_id' ] = $shop_info[ 'site_id' ];
$sku_data[ 'site_name' ] = $shop_info[ 'site_name' ];
$sku_data[ 'supplier_id' ] = $goods_item[ 'site_id' ];//供应商id
//移除供应商sku表中的分佣比率
// $sku_data['commission_rate'] = $commission_rate;//商品佣金比率
$sku_data[ 'supply_goods_id' ] = $goods_item[ 'goods_id' ];//关联供应商商品的商品id
$sku_data[ 'supply_sku_id' ] = $v[ 'sku_id' ];
$sku_arr[] = $sku_data;
}
model('goods_sku')->addList($sku_arr);
// 赋值第一个商品sku_id
$first_info = model('goods_sku')->getFirstData([ 'goods_id' => $goods_id ], 'sku_id', 'sku_id asc');
model('goods')->update([ 'sku_id' => $first_info[ 'sku_id' ] ], [ [ 'goods_id', '=', $goods_id ] ]);
//添加商品属性关联关系
$goods_model->refreshGoodsAttribute($goods_id, $goods_item[ 'goods_attr_format' ]);
if (!empty($data[ 'goods_spec_format' ])) {
//刷新SKU商品规格项/规格值JSON字符串
$goods_model->dealGoodsSkuSpecFormat($goods_id, $data[ 'goods_spec_format' ]);
}
//添加店铺添加统计
$stat = new Stat();
$stat->addShopStat([ 'add_goods_count' => 1, 'site_id' => $goods_item[ 'site_id' ] ]);
} else {//存在的话 编辑已存在的商品(增加库存)
//编辑已存在的商品 增加库存
// [['supply_goods_id', '=', $goods_item['goods_id']]]
$stock = array_sum($temp_list[ $goods_item[ 'goods_id' ] ] ?? []);
$new_goods_stock = $stock + $original_goods_info[ 'goods_stock' ];//将要改变的商品库存
$goods_data = array (
'goods_stock' => $new_goods_stock
);
model('goods')->update($goods_data, [ [ 'goods_id', '=', $original_goods_info[ 'goods_id' ] ] ]);//编辑商品新库存
//编辑各sku的库存
foreach ($sku_list as $k => $v) {
$sku_stock = $temp_list[ $goods_item[ 'goods_id' ] ][ $v[ 'sku_id' ] ] ?? 0;//sku购买数量 商品库存变动
$original_sku_info = model('goods_sku')->getInfo([ [ 'supply_sku_id', '=', $v[ 'sku_id' ] ] ]);
$new_sku_stock = $sku_stock + $original_sku_info[ 'stock' ];
$sku_data = array (
'stock' => $new_sku_stock
);
model('goods_sku')->update($sku_data, [ [ 'supply_sku_id', '=', $v[ 'sku_id' ] ] ]);//编辑商品新库存
}
}
model('goods')->commit();
return $this->success();
} catch (\Exception $e) {
model('goods')->rollback();
return $this->error($e->getMessage());
}
}
}