117 lines
4.5 KiB
PHP
117 lines
4.5 KiB
PHP
<?php
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace app\model\goods;
|
|
|
|
use app\model\BaseModel;
|
|
use app\model\storegoods\StoreGoods;
|
|
use think\facade\Db;
|
|
|
|
/**
|
|
* 商品批量设置
|
|
*/
|
|
class Batch extends BaseModel
|
|
{
|
|
|
|
/**
|
|
* 批量设置
|
|
* @param $params
|
|
*/
|
|
public function setPrice($params)
|
|
{
|
|
$site_id = $params[ 'site_id' ];
|
|
$type = $params[ 'type' ] ?? '';
|
|
$price = $params[ 'price' ] ?? 0;
|
|
$price_type = $params[ 'price_type' ] ?? '';
|
|
$sign = $params[ 'sign' ] ?? '';
|
|
$goods_ids = $params[ 'goods_ids' ] ?? '';
|
|
$precise = $params[ 'precise' ] ?? '';
|
|
|
|
$calculate_price_type = $params[ 'calculate_price_type' ] ?? '';
|
|
$condition = array (
|
|
[ 'site_id', '=', $site_id ],
|
|
[ 'goods_id', 'in', $goods_ids ]
|
|
);
|
|
|
|
$price_field_data = array (
|
|
'sale' => 'price',
|
|
'cost' => 'cost_price',
|
|
'market' => 'market_price'
|
|
);
|
|
$price_field = $price_field_data[ $price_type ] ?? '';
|
|
|
|
$todo_price = 0;
|
|
switch ( $type ) {
|
|
case 'money'://固定金额
|
|
//批量给商品设置价格
|
|
$todo_price = $price;
|
|
$update_data = array (
|
|
$price_field => $price
|
|
);
|
|
break;
|
|
case 'calculate'://公式算法
|
|
$calculate_price_field = $price_field_data[ $calculate_price_type ] ?? '';
|
|
switch ( $sign ) {
|
|
case 'add'://加法
|
|
$sign_str = '+';
|
|
break;
|
|
case 'subtract'://减法
|
|
$sign_str = '-';
|
|
break;
|
|
case 'multiply'://乘法
|
|
$sign_str = '*';
|
|
break;
|
|
case 'division'://除法
|
|
$sign_str = '/';
|
|
break;
|
|
}
|
|
$calculate_str = $calculate_price_field . $sign_str . $price;
|
|
switch ( $precise ) {
|
|
case 1://全部保留
|
|
$calculate_str = 'FLOOR((' . $calculate_str . ')*100)/100';
|
|
break;
|
|
case 2://抹分
|
|
$calculate_str = 'FLOOR((' . $calculate_str . ')*10)/10';
|
|
break;
|
|
case 3://抹角
|
|
$calculate_str = 'FLOOR(' . $calculate_str . ')';
|
|
break;
|
|
case 4://四舍五入到分
|
|
$calculate_str = 'ROUND(' . $calculate_str . ', 2)';
|
|
break;
|
|
case 5://四舍五入到角
|
|
$calculate_str = 'ROUND(' . $calculate_str . ', 1)';
|
|
break;
|
|
case 6://四舍五入到元
|
|
$calculate_str = 'ROUND(' . $calculate_str . ')';
|
|
break;
|
|
}
|
|
//todo mysql的 round函数和floor函数
|
|
$update_data[ $price_field ] = Db::raw($calculate_str);
|
|
$todo_price = $calculate_str;
|
|
break;
|
|
}
|
|
|
|
model('goods')->update($update_data, $condition);
|
|
//只有销售价被改动如果存在就忽略设置discount_price才会收到影响
|
|
if ($price_type == 'sale') {
|
|
//鉴于限时折扣活动的复杂性(商品关联限时折扣活动表,如果存在就忽略设置discount_price)
|
|
$sku_update_data[ 'discount_price' ] = Db::raw('if(discount_price = price,' . $todo_price . ',discount_price)');
|
|
$sku_update_data[ $price_field ] = $update_data[ $price_field ];
|
|
}
|
|
model('goods_sku')->update($sku_update_data, $condition);
|
|
//如果销售价被改动,默认门店的价格也都会被改动
|
|
if(in_array($price_type, ['sale', 'cost'])){
|
|
$store_goods_model = new StoreGoods();
|
|
$store_goods_model->syncGoodsData(['update_data' => $update_data, 'condition' => $condition, 'site_id' => $site_id]);
|
|
}
|
|
return $this->success($update_data);
|
|
}
|
|
} |