This commit is contained in:
2025-10-29 15:32:26 +08:00
parent d90614805b
commit b7462657cd
78921 changed files with 2753938 additions and 71 deletions

View File

@@ -0,0 +1,325 @@
<?php
/**
*/
namespace app\model\storegoods;
use app\model\BaseModel;
use app\model\store\Store;
/**
* 商品
*/
class StoreGoods extends BaseModel
{
/**
* 门店商品信息
* @param $condition
* @param string $field
* @return array
*/
public function getStoreGoodsInfo($condition, $field = '*')
{
$info = model('store_goods')->getInfo($condition, $field);
if (!empty($info)) {
if (isset($info[ 'stock' ])) {
$info[ 'stock' ] = numberFormat($info[ 'stock' ]);
}
if (isset($info[ 'sale_num' ])) {
$info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
}
if (isset($info[ 'real_stock' ])) {
$info[ 'real_stock' ] = numberFormat($info[ 'real_stock' ]);
}
}
return $this->success($info);
}
/**
* 门店sku信息
* @param $condition
* @param string $field
* @return array
*/
public function getStoreGoodsSkuInfo($condition, $field = '*')
{
$info = model('store_goods_sku')->getInfo($condition, $field);
if (!empty($info)) {
if (isset($info[ 'stock' ])) {
$info[ 'stock' ] = numberFormat($info[ 'stock' ]);
}
if (isset($info[ 'sale_num' ])) {
$info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
}
if (isset($info[ 'real_stock' ])) {
$info[ 'real_stock' ] = numberFormat($info[ 'real_stock' ]);
}
}
return $this->success($info);
}
public function checkStoreGoods($goods_ids, $site_id, $store_id)
{
$goods_list = model('goods')->getList([ [ 'goods_id', 'in', (string) $goods_ids ], [ 'site_id', '=', $site_id ] ], 'price, goods_id');
foreach ($goods_list as $k => $v) {
$goods_condition = array (
[ 'goods_id', '=', $v[ 'goods_id' ] ],
[ 'store_id', '=', $store_id ]
);
$goods_info = model('store_goods')->getInfo($goods_condition, 'id');
//不存在就创建
if (empty($goods_info)) {
$data = array (
'goods_id' => $v[ 'goods_id' ],
'store_id' => $store_id,
'create_time' => time(),
'price' => $v[ 'price' ]
);
model('store_goods')->add($data);
}
}
$sku_goods_list = model('goods_sku')->getList([ [ 'goods_id', 'in', (string) $goods_ids ], [ 'site_id', '=', $site_id ] ], 'price, goods_id, sku_id');
foreach ($sku_goods_list as $k => $v) {
$sku_goods_condition = array (
[ 'sku_id', '=', $v[ 'sku_id' ] ],
[ 'store_id', '=', $store_id ]
);
$sku_info = model('store_goods_sku')->getInfo($sku_goods_condition, 'id');
//不存在就创建
if (empty($sku_info)) {
$data = array (
'goods_id' => $v[ 'goods_id' ],
'store_id' => $store_id,
'sku_id' => $v[ 'sku_id' ],
'create_time' => time(),
'price' => $v[ 'price' ]
);
model('store_goods_sku')->add($data);
}
}
return $this->success(1);
}
/**
* 门店修改商品状态
* @param $goods_ids
* @param $goods_state
* @param $site_id
* @param int $store_id
* @return array
*/
public function modifyGoodsState($goods_ids, $goods_state, $site_id, $store_id = 0)
{
if ($store_id == 0) {
$store_model = new Store();
$store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
$store_id = $store_info[ 'store_id' ];
}
$this->checkStoreGoods($goods_ids, $site_id, $store_id);
model('store_goods')->update([ 'status' => $goods_state ], [ [ 'goods_id', 'in', (string) $goods_ids ], [ 'store_id', '=', $store_id ] ]);
model('store_goods_sku')->update([ 'status' => $goods_state ], [ [ 'goods_id', 'in', (string) $goods_ids ], [ 'store_id', '=', $store_id ] ]);
return $this->success(1);
}
/**
* 修改价格库存
* @param $goods_sku_array
* @param $site_id
* @param $store_id
* @param $uid
* @return array
*/
public function editStoreGoods($goods_sku_array, $site_id, $store_id, $uid)
{
$store_stock_model = new \app\model\stock\GoodsStock();
$store_model = new Store();
$store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ])[ 'data' ] ?? [];
$default_store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
$default_store_id = $default_store_info[ 'store_id' ];
$is_default_store = 0;
if ($default_store_id == $store_id) {
$is_default_store = 1;
}
model('goods')->startTrans();
try {
foreach ($goods_sku_array as $k => $v) {
$item_sku_id = $v[ 'sku_id' ];
$sku_info = model('goods_sku')->getInfo([ [ 'sku.site_id', '=', $site_id ], [ 'sku.sku_id', '=', $item_sku_id ] ], "sku.goods_id,sku.stock,sku.price as sku_price,g.is_unify_price,g.price, g.goods_class", 'sku', [
[ 'goods g', 'sku.goods_id=g.goods_id', 'left' ]
]);
$goods_id = $sku_info[ 'goods_id' ];
$goods_info = model('store_goods')->getInfo([
[ 'goods_id', '=', $goods_id ],
[ 'store_id', '=', $store_id ]
], 'id');
if (empty($goods_info)) {
$data = array (
'goods_id' => $goods_id,
'store_id' => $store_id,
'create_time' => time(),
'price' => $sku_info[ 'price' ]
);
model('store_goods')->add($data);
}
$store_sku_info = model('store_goods_sku')->getInfo([
[ 'sku_id', '=', $item_sku_id ],
[ 'store_id', '=', $store_id ]
], 'id');
if (empty($store_sku_info)) {
$data = array (
'goods_id' => $goods_id,
'store_id' => $store_id,
'sku_id' => $item_sku_id,
'create_time' => time(),
'price' => $sku_info[ 'sku_price' ]
);
model('store_goods_sku')->add($data);
}
$save_data = [];
if (!$sku_info[ 'is_unify_price' ]) {
$save_data[ 'price' ] = $v[ 'price' ];
}
if ($k == 0 && !empty($save_data)) {
model('store_goods')->update($save_data, [ [ 'goods_id', '=', $goods_id ], [ 'store_id', '=', $store_id ] ]);
}
if (!empty($save_data)) model('store_goods_sku')->update($save_data, [ [ 'sku_id', '=', $item_sku_id ], [ 'store_id', '=', $store_id ] ]);
//统一库存不入库
if (isset($v[ 'stock' ]) && $store_info && $store_info[ 'stock_type' ] == 'store') {
$res = $store_stock_model->changeGoodsStock([
'store_id' => $store_id,
'site_id' => $site_id,
'sku_id' => $item_sku_id,
'stock' => $v[ 'stock' ],
'uid' => $uid,
'goods_class' => $sku_info[ 'goods_class' ]
]);
}
//如果是默认门店,也会同步修改平台价
if (!empty($save_data[ 'price' ])) {
if ($is_default_store) {
if ($k == 0 && !empty($save_data)) {
model('goods')->update([ 'price' => $save_data[ 'price' ] ], [ [ 'goods_id', '=', $goods_id ] ]);
}
model('goods_sku')->update([ 'price' => $save_data[ 'price' ] ], [ [ 'sku_id', '=', $item_sku_id ] ]);
}
}
}
model('goods')->commit();
return $this->success();
} catch (\Exception $e) {
model('goods')->rollback();
return $this->error($e->getMessage());
}
}
/**
* 设置门店商品成本价
* @param $params
* @return array
*/
public function setSkuPrice($params)
{
$goods_id = $params[ 'goods_id' ];
$site_id = $params[ 'site_id' ];
$store_id = $params[ 'store_id' ] ?? 0;
if ($store_id == 0) {
$store_model = new Store();
$store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
$store_id = $store_info[ 'store_id' ];
}
$result = $this->checkStoreGoods($goods_id, $site_id, $store_id);
$goods_condition = array (
[ 'goods_id', '=', $goods_id ]
);
$goods_info = model('goods')->getInfo($goods_condition, 'cost_price,price');
$sku_list = model('goods_sku')->getList($goods_condition, 'sku_id,cost_price,price');
$store_goods_condition = array (
[ 'goods_id', '=', $goods_id ],
[ 'store_id', '=', $store_id ]
);
model('store_goods')->update([ 'cost_price' => $goods_info[ 'cost_price' ], 'price' => $goods_info[ 'price' ] ], $store_goods_condition);
foreach ($sku_list as $k => $v) {
$store_goods_sku_condition = array (
[ 'sku_id', '=', $v[ 'sku_id' ] ],
[ 'store_id', '=', $store_id ]
);
$item_data = array (
'cost_price' => $v[ 'cost_price' ],
'price' => $v[ 'price' ]
);
model('store_goods_sku')->update($item_data, $store_goods_sku_condition);
}
return $this->success();
}
/**
* 同步数据
* @param $params
* @return array
*/
public function syncGoodsData($params)
{
$update_data = $params[ 'update_data' ];
$condition = $params[ 'condition' ];
$site_id = $params[ 'site_id' ];
$store_id = $params[ 'store_id' ] ?? 0;
if ($store_id == 0) {
$store_model = new Store();
$store_info = $store_model->getDefaultStore()[ 'data' ] ?? [];
$store_id = $store_info[ 'store_id' ];
}
$goods_list = model('goods')->getList($condition, 'goods_id, price, cost_price');
$goods_ids = array_column($goods_list, 'goods_id');
//检验商品对否存在
$result = $this->checkStoreGoods(implode(',', $goods_ids), $site_id, $store_id);
$store_condition = array ( [ 'store_id', '=', $store_id ] );
foreach ($goods_list as $k => $v) {
$item_update_data = array (
'price' => $v[ 'price' ],
'cost_price' => $v[ 'cost_price' ]
);
$item_store_condition = $store_condition;
$item_store_condition[] = [ 'goods_id', '=', $v[ 'goods_id' ] ];
model('store_goods')->update($item_update_data, $item_store_condition);
}
$goods_sku_list = model('goods_sku')->getList($condition, 'sku_id, price, cost_price');
foreach ($goods_sku_list as $k => $v) {
$item_update_data = array (
'price' => $v[ 'price' ],
'cost_price' => $v[ 'cost_price' ]
);
$item_store_condition = $store_condition;
$item_store_condition[] = [ 'sku_id', '=', $v[ 'sku_id' ] ];
model('store_goods_sku')->update($item_update_data, $item_store_condition);
}
return $this->success();
}
}

View File

@@ -0,0 +1,105 @@
<?php
/**
*/
namespace app\model\storegoods;
use app\model\BaseModel;
use app\model\store\Store;
use think\db\exception\DbException;
/**
* 商品
*/
class StoreSale extends BaseModel
{
/**
* 增加商品销量
* @param $params
* @return array
* @throws DbException
*/
public function incStoreGoodsSaleNum($params)
{
$sku_id = $params[ 'sku_id' ];
$num = $params[ 'num' ];
$store_id = $params[ 'store_id' ] ?? 0;
if ($store_id == 0) {
$store_model = new Store();
$store_info = $store_model->getDefaultStore()[ 'data' ] ?? [];
if (empty($store_info))
return $this->error();
$store_id = $store_info[ 'store_id' ];
}
$goods_id = $params[ 'goods_id' ] ?? 0;
$condition = array (
[ 'sku_id', '=', $sku_id ],
[ 'store_id', '=', $store_id ]
);
//增加sku销量
$res = model('store_goods_sku')->setInc($condition, 'sale_num', $num);
if ($res !== false) {
if ($goods_id == 0) {
$sku_info = model('goods_sku')->getInfo($condition, 'goods_id');
if (empty($sku_info))
return $this->error();
$goods_id = $sku_info[ 'goods_id' ];
}
$res = model('store_goods')->setInc([ [ 'goods_id', '=', $goods_id ] ], 'sale_num', $num);
return $this->success($res);
}
return $this->error($res);
}
/**
* 减少商品销量
* @param $params
* @return array
* @throws DbException
*/
public function decStoreGoodsSaleNum($params)
{
$sku_id = $params[ 'sku_id' ];
$num = $params[ 'num' ];
$store_id = $params[ 'store_id' ] ?? 0;
if ($store_id == 0) {
$store_model = new Store();
$store_info = $store_model->getDefaultStore()[ 'data' ] ?? [];
if (empty($store_info))
return $this->error();
$store_id = $store_info[ 'store_id' ];
}
$goods_id = $params[ 'goods_id' ] ?? 0;
$condition = array (
[ 'sku_id', '=', $sku_id ],
[ 'store_id', '=', $store_id ]
);
//增加sku销量
$res = model('store_goods_sku')->setDec($condition, 'sale_num', $num);
if ($res !== false) {
if ($goods_id == 0) {
$sku_info = model('goods_sku')->getInfo($condition, 'goods_id');
if (empty($sku_info))
return $this->error();
$goods_id = $sku_info[ 'goods_id' ];
}
$res = model('store_goods')->setDec([ [ 'goods_id', '=', $goods_id ] ], 'sale_num', $num);
return $this->success($res);
}
return $this->error($res);
}
}