Merge branches 'dev' and 'dev' of https://gitea.lihaink.cn/mkm/multi-store into dev
This commit is contained in:
commit
53cb5d8f06
@ -4,13 +4,121 @@ namespace app\admin\controller;
|
||||
|
||||
use app\common\model\store_category\StoreCategory;
|
||||
use app\common\model\store_product\StoreProduct;
|
||||
use app\common\model\store_product_group_price\StoreProductGroupPrice;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use support\Redis;
|
||||
|
||||
class LocalController extends BaseAdminController
|
||||
{
|
||||
|
||||
public $notNeedLogin = [];
|
||||
public $notNeedLogin = ['setPrice'];
|
||||
|
||||
public function setPrice()
|
||||
{
|
||||
$file = $this->request->file('file');
|
||||
$reader = IOFactory::createReader('Xlsx');
|
||||
$spreadsheet = $reader->load($file->getRealPath());
|
||||
$data = $spreadsheet->getActiveSheet()->toArray();
|
||||
$insert = [];
|
||||
$update = [];
|
||||
$productIds = [];
|
||||
foreach ($data as $k => $row) {
|
||||
if ($k < 2) {
|
||||
continue;
|
||||
}
|
||||
if (empty($row[0])) {
|
||||
continue;
|
||||
}
|
||||
$productId = intval($row[0]);
|
||||
if (empty($productId)) {
|
||||
continue;
|
||||
}
|
||||
$productIds[] = $productId;
|
||||
}
|
||||
$products = StoreProduct::whereIn('id', $productIds)->field('id,store_name,purchase')->select()->toArray();
|
||||
$products = reset_index($products, 'id');
|
||||
foreach ($data as $k => $row) {
|
||||
if ($k < 2) {
|
||||
continue;
|
||||
}
|
||||
if (empty($row[0])) {
|
||||
continue;
|
||||
}
|
||||
$productId = intval($row[0]);
|
||||
if (empty($productId)) {
|
||||
continue;
|
||||
}
|
||||
$product = $products[$productId] ?? [];
|
||||
if (empty($product)) {
|
||||
continue;
|
||||
}
|
||||
$groupIds = [
|
||||
5 => 23,
|
||||
7 => 24,
|
||||
9 => 25,
|
||||
11 => 26,
|
||||
13 => 27,
|
||||
15 => 28,
|
||||
17 => 29,
|
||||
19 => 30,
|
||||
21 => 31,
|
||||
23 => 32,
|
||||
25 => 33,
|
||||
27 => 34,
|
||||
29 => 35,
|
||||
31 => 36,
|
||||
33 => 37,
|
||||
35 => 1,
|
||||
37 => 18,
|
||||
39 => 22,
|
||||
];
|
||||
for ($i = 5; $i < 35; $i = $i + 2) {
|
||||
$rate = intval(rtrim($row[$i] ?? 0, '%'));
|
||||
if (empty($rate)) {
|
||||
continue;
|
||||
}
|
||||
$price = $row[$i + 1] ?? 0;
|
||||
if (empty($price)) {
|
||||
$price = $product['purchase'] * (1 + $rate / 100);
|
||||
}
|
||||
$item = [
|
||||
'product_id' => $productId,
|
||||
'group_id' => $groupIds[$i],
|
||||
'price_type' => 3,
|
||||
'base_rate' => 100 + $rate,
|
||||
'price' => $price
|
||||
];
|
||||
$insert[] = $item;
|
||||
}
|
||||
$productGroupPrices = StoreProductGroupPrice::where('product_id', $productId)->whereIn('group_id', [1, 18, 22])->select()->toArray();
|
||||
$groupIds = array_flip($groupIds);
|
||||
foreach ($productGroupPrices as $productGroupPrice) {
|
||||
$cellId = $groupIds[$productGroupPrice['group_id']] ?? 0;
|
||||
$rate = intval(rtrim($row[$cellId] ?? 0, '%'));
|
||||
if (empty($rate)) {
|
||||
continue;
|
||||
}
|
||||
$price = $row[$cellId + 1] ?? 0;
|
||||
if (empty($price)) {
|
||||
$price = $product['purchase'] * (1 + $rate / 100);
|
||||
}
|
||||
if ($price != $productGroupPrice['price']) {
|
||||
$update[] = [
|
||||
'id' => $productGroupPrice['id'],
|
||||
'base_rate' => $rate,
|
||||
'price' => $price,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (count($insert) > 0) {
|
||||
StoreProductGroupPrice::insertAll($insert);
|
||||
}
|
||||
if (count($update) > 0) {
|
||||
(new StoreProductGroupPrice())->saveAll($update);
|
||||
}
|
||||
return $this->success('插入成功:' . count($insert) . '条,更新成功:' . count($update) . '条');
|
||||
}
|
||||
|
||||
public function fixCategory()
|
||||
{
|
||||
|
@ -57,6 +57,9 @@ class StoreCategoryLists extends BaseAdminDataLists implements ListsSearchInterf
|
||||
unset($priceRate[100003], $priceRate[100004]);
|
||||
$temp = [];
|
||||
foreach ($userGroups as $userGroup) {
|
||||
if (!isset($priceRate[$userGroup['id']])) {
|
||||
continue;
|
||||
}
|
||||
if ($userGroup['id'] == 21 && !empty($priceRate[100001]) && empty($userGroup['rate'])) {
|
||||
$userGroup['rate'] = $priceRate[100001]['rate'];
|
||||
unset($priceRate[100001]);
|
||||
|
@ -45,7 +45,7 @@ class SupplierLists extends BaseAdminDataLists implements ListsSearchInterface
|
||||
{
|
||||
return Supplier::where($this->searchWhere)
|
||||
->field(['id', 'category_id', 'mer_name', 'phone', 'settle_cycle', 'address', 'mark'])
|
||||
->limit($this->limitOffset, $this->limitLength)
|
||||
->limit($this->limitOffset, 100)
|
||||
->order(['id' => 'desc'])
|
||||
->select()->each(function ($item) {
|
||||
$item->total_completed_amount=WarehouseProduct::where('supplier_id',$item['id'])->where('financial_pm',1)->where('is_pay',1)->sum('total_price');
|
||||
|
@ -378,7 +378,13 @@ class PurchaseProductOfferLogic extends BaseLogic
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (empty($storeProductGroupPrice)) {
|
||||
return;
|
||||
}
|
||||
foreach ($productCatePriceRate as $k => $v) {
|
||||
if (empty($v['rate'])) {
|
||||
continue;
|
||||
}
|
||||
if ($v['id'] == 4 &&$purchase>0) {
|
||||
//商户
|
||||
$data['cost_lv'] = bcdiv($v['rate'], 100, 2);
|
||||
@ -431,14 +437,30 @@ class PurchaseProductOfferLogic extends BaseLogic
|
||||
public static function getProductCatePriceRate($product)
|
||||
{
|
||||
$productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate');
|
||||
if (!empty($productCatePriceRate)) {
|
||||
if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) {
|
||||
return $productCatePriceRate;
|
||||
}
|
||||
$productCatePriceRate = StoreCategory::where('id', $product['two_cate_id'])->value('price_rate');
|
||||
if (!empty($productCatePriceRate)) {
|
||||
if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) {
|
||||
return $productCatePriceRate;
|
||||
}
|
||||
return StoreCategory::where('id', $product['top_cate_id'])->value('price_rate');
|
||||
$productCatePriceRate = StoreCategory::where('id', $product['top_cate_id'])->value('price_rate');
|
||||
if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) {
|
||||
return $productCatePriceRate;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function hasPurchase(array $productCatePriceRate): bool
|
||||
{
|
||||
$res = true;
|
||||
foreach ($productCatePriceRate as $item) {
|
||||
if ($item['id'] == 21 && empty($item['rate'])) {
|
||||
$res = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -44,4 +44,14 @@ class DictData extends BaseModel
|
||||
return $data['status'] ? '正常' : '停用';
|
||||
}
|
||||
|
||||
public static function getDictValue($type, $key)
|
||||
{
|
||||
$dictType = DictType::where('type', $type)->where('status', 1)->find();
|
||||
if ($dictType) {
|
||||
$dictData = DictData::where('type_id', $dictType['id'])->where('name', $key)->where('status', 1)->value('value');
|
||||
return empty($dictData) ? '' : $dictData;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
@ -4,11 +4,14 @@ namespace process;
|
||||
|
||||
use app\common\enum\OrderEnum;
|
||||
use app\common\logic\PayNotifyLogic;
|
||||
use app\common\model\dict\DictData;
|
||||
use app\common\model\store_branch_product\StoreBranchProduct;
|
||||
use app\common\model\store_order\StoreOrder;
|
||||
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
|
||||
use app\common\model\store_product\StoreProduct;
|
||||
use app\common\model\store_product_price\StoreProductPrice;
|
||||
use app\common\model\user_recharge\UserRecharge;
|
||||
use support\Cache;
|
||||
use think\facade\Db;
|
||||
use Webman\RedisQueue\Redis;
|
||||
use Workerman\Crontab\Crontab;
|
||||
@ -62,5 +65,41 @@ class Task
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$this->updateProductPrice();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将商品价格更改列表的价格同步至商品
|
||||
* @return void
|
||||
*/
|
||||
public function updateProductPrice()
|
||||
{
|
||||
new Crontab('0 */10 * * * *', function () {
|
||||
$value = DictData::getDictValue('update_product_price_task', 'status');
|
||||
if ($value == 1) {
|
||||
$lastProductId = Cache::get('update_product_price_last_product_id', 0);
|
||||
$productIds = StoreProduct::where('purchase', 0)->where('id', '>', $lastProductId)->limit(200)->column('id');
|
||||
$lastProductId = end($productIds);
|
||||
if (count($productIds) < 200) {
|
||||
$lastProductId = 0;
|
||||
}
|
||||
Cache::set('update_product_price_last_product_id', $lastProductId);
|
||||
$productPrices = StoreProductPrice::whereIn('product_id', $productIds)->where('status', 1)->distinct('product_id')->order('id desc')->select()->toArray();
|
||||
$update = [];
|
||||
foreach ($productPrices as $productPrice) {
|
||||
$update[] = [
|
||||
'id' => $productPrice['product_id'],
|
||||
'purchase' => $productPrice['purchase'] ?? 0,
|
||||
'cost' => $productPrice['cost'] ?? 0,
|
||||
'price' => $productPrice['purchase'] ?? 0,
|
||||
];
|
||||
}
|
||||
if (count($update) > 0) {
|
||||
(new StoreProduct())->saveAll($update);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user