Merge branches 'dev' and 'dev' of https://gitea.lihaink.cn/mkm/multi-store into dev

This commit is contained in:
mkm 2025-01-01 10:47:24 +08:00
commit 53cb5d8f06
6 changed files with 187 additions and 5 deletions

View File

@ -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()
{

View File

@ -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]);

View File

@ -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');

View File

@ -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;
}
}

View File

@ -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 '';
}
}

View File

@ -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);
}
}
});
}
}