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_category\StoreCategory;
|
||||||
use app\common\model\store_product\StoreProduct;
|
use app\common\model\store_product\StoreProduct;
|
||||||
|
use app\common\model\store_product_group_price\StoreProductGroupPrice;
|
||||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||||
use support\Redis;
|
use support\Redis;
|
||||||
|
|
||||||
class LocalController extends BaseAdminController
|
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()
|
public function fixCategory()
|
||||||
{
|
{
|
||||||
|
@ -57,6 +57,9 @@ class StoreCategoryLists extends BaseAdminDataLists implements ListsSearchInterf
|
|||||||
unset($priceRate[100003], $priceRate[100004]);
|
unset($priceRate[100003], $priceRate[100004]);
|
||||||
$temp = [];
|
$temp = [];
|
||||||
foreach ($userGroups as $userGroup) {
|
foreach ($userGroups as $userGroup) {
|
||||||
|
if (!isset($priceRate[$userGroup['id']])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ($userGroup['id'] == 21 && !empty($priceRate[100001]) && empty($userGroup['rate'])) {
|
if ($userGroup['id'] == 21 && !empty($priceRate[100001]) && empty($userGroup['rate'])) {
|
||||||
$userGroup['rate'] = $priceRate[100001]['rate'];
|
$userGroup['rate'] = $priceRate[100001]['rate'];
|
||||||
unset($priceRate[100001]);
|
unset($priceRate[100001]);
|
||||||
|
@ -45,7 +45,7 @@ class SupplierLists extends BaseAdminDataLists implements ListsSearchInterface
|
|||||||
{
|
{
|
||||||
return Supplier::where($this->searchWhere)
|
return Supplier::where($this->searchWhere)
|
||||||
->field(['id', 'category_id', 'mer_name', 'phone', 'settle_cycle', 'address', 'mark'])
|
->field(['id', 'category_id', 'mer_name', 'phone', 'settle_cycle', 'address', 'mark'])
|
||||||
->limit($this->limitOffset, $this->limitLength)
|
->limit($this->limitOffset, 100)
|
||||||
->order(['id' => 'desc'])
|
->order(['id' => 'desc'])
|
||||||
->select()->each(function ($item) {
|
->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');
|
$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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (empty($storeProductGroupPrice)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
foreach ($productCatePriceRate as $k => $v) {
|
foreach ($productCatePriceRate as $k => $v) {
|
||||||
|
if (empty($v['rate'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ($v['id'] == 4 &&$purchase>0) {
|
if ($v['id'] == 4 &&$purchase>0) {
|
||||||
//商户
|
//商户
|
||||||
$data['cost_lv'] = bcdiv($v['rate'], 100, 2);
|
$data['cost_lv'] = bcdiv($v['rate'], 100, 2);
|
||||||
@ -431,14 +437,30 @@ class PurchaseProductOfferLogic extends BaseLogic
|
|||||||
public static function getProductCatePriceRate($product)
|
public static function getProductCatePriceRate($product)
|
||||||
{
|
{
|
||||||
$productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate');
|
$productCatePriceRate = StoreCategory::where('id', $product['cate_id'])->value('price_rate');
|
||||||
if (!empty($productCatePriceRate)) {
|
if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) {
|
||||||
return $productCatePriceRate;
|
return $productCatePriceRate;
|
||||||
}
|
}
|
||||||
$productCatePriceRate = StoreCategory::where('id', $product['two_cate_id'])->value('price_rate');
|
$productCatePriceRate = StoreCategory::where('id', $product['two_cate_id'])->value('price_rate');
|
||||||
if (!empty($productCatePriceRate)) {
|
if (!empty($productCatePriceRate) && self::hasPurchase($productCatePriceRate)) {
|
||||||
return $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'] ? '正常' : '停用';
|
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\enum\OrderEnum;
|
||||||
use app\common\logic\PayNotifyLogic;
|
use app\common\logic\PayNotifyLogic;
|
||||||
|
use app\common\model\dict\DictData;
|
||||||
use app\common\model\store_branch_product\StoreBranchProduct;
|
use app\common\model\store_branch_product\StoreBranchProduct;
|
||||||
use app\common\model\store_order\StoreOrder;
|
use app\common\model\store_order\StoreOrder;
|
||||||
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
|
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
|
||||||
use app\common\model\store_product\StoreProduct;
|
use app\common\model\store_product\StoreProduct;
|
||||||
|
use app\common\model\store_product_price\StoreProductPrice;
|
||||||
use app\common\model\user_recharge\UserRecharge;
|
use app\common\model\user_recharge\UserRecharge;
|
||||||
|
use support\Cache;
|
||||||
use think\facade\Db;
|
use think\facade\Db;
|
||||||
use Webman\RedisQueue\Redis;
|
use Webman\RedisQueue\Redis;
|
||||||
use Workerman\Crontab\Crontab;
|
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