This commit is contained in:
luofei 2024-01-20 17:10:58 +08:00
commit 6286f5607e
5 changed files with 123 additions and 367 deletions

View File

@ -1,294 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\common\dao\system\merchant;
use app\common\dao\BaseDao;
use app\common\model\system\merchant\Merchant;
use crmeb\services\VicWordService;
use think\db\BaseQuery;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Db;
use think\Model;
class MerchantDao extends BaseDao
{
/**
* @return string
* @author xaboy
* @day 2020-04-16
*/
protected function getModel(): string
{
return Merchant::class;
}
/**
* @param array $where
* @return BaseQuery
* @author xaboy
* @day 2020-04-16
*/
public function search(array $where, $is_del = 0)
{
$query = Merchant::getDB()
->when($is_del !== null, function ($query) use ($is_del) {
$query->where('is_del', $is_del);
})
->when(isset($where['is_trader']) && $where['is_trader'] !== '', function ($query) use ($where) {
$query->where('is_trader', $where['is_trader']);
})
->when(isset($where['is_best']) && $where['is_best'] !== '', function ($query) use ($where) {
$query->where('is_best', $where['is_best']);
})
->when(isset($where['date']) && $where['date'] !== '', function ($query) use ($where) {
getModelTime($query, $where['date']);
})
->when(isset($where['mer_state']) && $where['mer_state'] !== '', function ($query) use ($where) {
$query->where('mer_state', $where['mer_state']);
})
->when(isset($where['mer_id']) && $where['mer_id'] !== '', function ($query) use ($where) {
$query->where('mer_id', $where['mer_id']);
})
->when(isset($where['category_id']) && $where['category_id'] !== '', function ($query) use ($where) {
$query->whereIn('category_id', is_array($where['category_id']) ? $where['category_id'] : explode(',', $where['category_id']));
})
->when(isset($where['type_id']) && $where['type_id'] !== '', function ($query) use ($where) {
$query->whereIn('type_id', is_array($where['type_id']) ? $where['type_id'] : explode(',', $where['type_id']));
})
->when(isset($where['delivery_way']) && $where['delivery_way'] !== '', function ($query) use ($where) {
$query->whereLike('delivery_way', "%{$where['delivery_way']}%");
});
if (isset($where['keyword']) && $where['keyword']) {
if (is_numeric($where['keyword'])) {
$query->whereLike('mer_name|mer_keyword|mer_phone', "%{$where['keyword']}%");
} else {
$word = app()->make(VicWordService::class)->getWord($where['keyword']);
$query->where(function ($query) use ($word, $where) {
foreach ($word as $item) {
if(mb_strlen($item) > 1) {
$query->whereOr('mer_name', 'LIKE', "%$item%");
}
}
$query->whereOr('mer_name|mer_keyword', 'LIKE', "%{$where['keyword']}%");
});
}
}
if (isset($where['status']) && $where['status'] !== '')
$query->where('status', $where['status']);
$order = $where['order'] ?? '';
$query->when($order, function ($query) use ($where, $order) {
if ($order == 'rate') {
$query->order('is_best DESC, product_score DESC,service_score DESC,postage_score DESC');
} else if ($order == 'location' && isset($where['location']['long'], $where['location']['lat'])) {
$lng = (float)$where['location']['long'];
$lat = (float)$where['location']['lat'];
$query->whereNotNull('lat')->whereNotNull('long')
->order(Db::raw("(2 * 6378.137 * ASIN(
SQRT(
POW( SIN( PI( ) * ( $lng- `long` ) / 360 ), 2 ) + COS( PI( ) * $lat / 180 ) * COS( `lat` * PI( ) / 180 ) * POW( SIN( PI( ) * ( $lat- `lat` ) / 360 ), 2 )
)
)
) ASC "));
} else {
$query->order('is_best DESC, sales DESC,sort DESC');
}
}, function ($query) use ($order) {
$query->order('is_best DESC, sort DESC,sales DESC');
});
return $query;
}
/**
* @param int $id
* @return array|Model|null
* @throws DataNotFoundException
* @throws DbException
* @throws ModelNotFoundException
* @author xaboy
* @day 2020-04-17
*/
public function get($id)
{
return Merchant::getInstance()->where('is_del', 0)->find($id);
}
/**
* @param $id
* @author Qinii
*/
public function apiGetOne($id)
{
return Merchant::getInstance()->where(['is_del' => 0, 'status' => 1, 'mer_state' => 1])->find($id);
}
/**
* @param int $merId
* @author Qinii
*/
public function incCareCount(int $merId)
{
($this->getModel()::getDB())->where($this->getPk(), $merId)->inc('care_count', 1)->update();
}
/**
* @param int $merId
* @param int $inc
* @author xaboy
* @day 2020/9/25
*/
public function incSales($merId, $inc)
{
($this->getModel()::getDB())->where($this->getPk(), $merId)->inc('sales', $inc)->update();
}
/**
* @param int $merId
* @author Qinii
*/
public function decCareCount(array $merId)
{
($this->getModel()::getDB())->whereIn($this->getPk(), $merId)->where('care_count', '>', 0)->dec('care_count', 1)->update();
}
public function dateMerchantNum($date)
{
return Merchant::getDB()->where('is_del', 0)->when($date, function ($query, $date) {
getModelTime($query, $date);
})->count();
}
/**
* TODO 获取复制商品次数
* @param int $merId
* @return mixed
* @author Qinii
* @day 2020-08-06
*/
public function getCopyNum(int $merId)
{
return Merchant::getDB()->where('mer_id', $merId)->value('copy_product_num');
}
/**
* TODO 变更复制次数
* @param int $merId
* @param int $num 正负数
* @return mixed
* @author Qinii
* @day 2020-08-06
*/
public function changeCopyNum(int $merId, int $num)
{
return $this->getModel()::where('mer_id', $merId)->inc('copy_product_num', $num)->update();
}
/**
* @param $field
* @param $value
* @param int|null $except
* @return bool
* @author xaboy
* @day 2020-03-30
*/
public function fieldExists($field, $value, ?int $except = null): bool
{
$query = ($this->getModel())::getDB()->where($field, $value);
if (!is_null($except)) $query->where($this->getPk(), '<>', $except);
return $query->where('is_del', 0)->count() > 0;
}
public function names(array $ids)
{
return Merchant::getDB()->whereIn('mer_id',$ids)->column('mer_name');
}
/**
* TODO 增加商户余额
* @param int $merId
* @param float $num
* @author Qinii
* @day 3/19/21
*/
public function addMoney(int $merId, float $num)
{
$field = 'mer_money';
$merchant = $this->getModel()::getDB()->where('mer_id', $merId)->find();
if ($merchant) {
$mer_money = bcadd($merchant[$field], $num, 2);
$merchant[$field] = $mer_money;
$merchant->save();
}
}
/**
* TODO 减少商户余额
* @param int $merId
* @param float $num
* @author Qinii
* @day 3/19/21
*/
public function subMoney(int $merId, float $num)
{
$field = 'mer_money';
$merchant = $this->getModel()::getDB()->where('mer_id', $merId)->find();
if ($merchant) {
$mer_money = bcsub($merchant[$field], $num, 2);
$merchant[$field] = $mer_money;
$merchant->save();
}
}
public function clearTypeId(int $typeId)
{
return Merchant::getDB()->where('type_id', $typeId)->update(['type_id' => 0]);
}
public function addFieldNum(int $merId, int $num, string $field)
{
if ($num < 0) $num = -$num;
$merchant = $this->getModel()::getDB()->where('mer_id', $merId)->find();
$number = $merchant[$field] + $num;
$merchant[$field] = $number;
$merchant->save();
}
public function sumFieldNum(int $merId, int $num, string $field)
{
if ($num < 0) $num = -$num;
$merchant = $this->getModel()::getDB()->where('mer_id', $merId)->find();
$number = $merchant[$field] - $num;
$merchant[$field] = $number;
$merchant->save();
}
public function merIdByImage($merIds)
{
return $this->getModel()::getDB()->whereIn('mer_id', $merIds)->column('mer_id,mer_avatar');
}
public function updateMargin($typeId, $margin, $is_margin)
{
return $this->getModel()::where('type_id',$typeId)->where('is_margin','in',[0,1])->update([
'is_margin' => $is_margin,
'margin' => $margin
]);
}
}

View File

@ -328,6 +328,46 @@ class StoreOrderRepository extends BaseRepository
'mer_id' => $order->mer_id,
'financial_record_sn' => $financeSn . ($i++)
];
//市级供应链
$product_mer_id = Db::name('store_order_product')->where('order_id', $order->order_id)->value('product_mer_id');
if ($product_mer_id) {
$finance[] = [
'order_id' => $order->order_id,
'order_sn' => $order->order_sn,
'user_info' => $groupOrder->user->nickname,
'user_id' => $uid,
'financial_type' => 'order',
'financial_pm' => 0,
'type' => 1,
'number' => $_payPrice,
'mer_id' => $product_mer_id,
'financial_record_sn' => $financeSn . (($i++)+1)
];
//市级供应链押金计算
if ($_payPrice > 0) {
/** @var MerchantRepository $merchantRepo */
$merchantRepo = app()->make(MerchantRepository::class);
$merchantRepo->merId = $product_mer_id;
$merchantRepo->forceMargin = false;
[$_payCityPrice, $finance, $increase] = $merchantRepo->autoMargin($_payPrice, $order, $finance, $financeSn, $i++);
}
$finance[] = [
'order_id' => $order->order_id,
'order_sn' => $order->order_sn,
'user_info' => $groupOrder->user->nickname,
'user_id' => $uid,
'financial_type' => 'order_true',
'financial_pm' => 0,
'type' => 2,
'number' => $_payCityPrice,
'mer_id' => $product_mer_id,
'financial_record_sn' => $financeSn . (($i++)+2)
];
if (!$is_combine) {
app()->make(MerchantRepository::class)->addLockMoney($product_mer_id, 'order', $order->order_id, $_payCityPrice);
}
}
//计算手续费
$_order_rate = bcsub($order->pay_price, $_payPrice, 2);
@ -390,6 +430,20 @@ class StoreOrderRepository extends BaseRepository
$merchantRepo->forceMargin = false;
[$_payPrice, $finance, $increase] = $merchantRepo->autoMargin($_payPrice, $order, $finance, $financeSn, $i++);
}
if ($order->source == 103) {
$finance[] = [
'order_id' => $order->order_id,
'order_sn' => $order->order_sn,
'user_info' => $groupOrder->user->nickname,
'user_id' => $uid,
'financial_type' => 'commission_to_cloud_warehouse',
'financial_pm' => 0,
'type' => 1,
'number' => $_payPrice,
'mer_id' => $order->mer_id,
'financial_record_sn' => $financeSn . ($i++)
];
} else {
$finance[] = [
'order_id' => $order->order_id,
'order_sn' => $order->order_sn,
@ -402,6 +456,8 @@ class StoreOrderRepository extends BaseRepository
'mer_id' => $order->mer_id,
'financial_record_sn' => $financeSn . ($i++)
];
}
// if ($order->platform_coupon_price > 0) {
// $finance[] = [
@ -483,9 +539,7 @@ class StoreOrderRepository extends BaseRepository
Queue::push(SendSmsJob::class, ['tempId' => 'ORDER_CREATE', 'phone' => $phone['phone'], 'orderId' => $order->order_id, 'id' => 0]); //短信通知
}
}
}
});
if (count($groupOrder['give_coupon_ids']) > 0) {
@ -2738,7 +2792,6 @@ class StoreOrderRepository extends BaseRepository
}
}
return true;
} catch (\Exception $e) {
$datas['product_id'] = $product_id ?? 0;
$datas['mer_id'] = $merId;

View File

@ -714,13 +714,10 @@ class FinancialRecordRepository extends BaseRepository
//平台手续费 = order_charge + 预售手续费 presell_charge - 平台退给商户的手续费 refund_charge
$number_1 = bcsub($data['number_order_charge'], $data['number_charge'], 2);
if($data['number_supply_chain']>0){
$financialType = ['order_true'];
$where['type']=2;
$where['mer_id']=$where['is_mer'];
unset($where['is_mer']);
[$data['count_order'], $data['number_order']] = $this->dao->getDataByType($type, $where, $date, $financialType);
$financialType = ['commission_to_cloud_warehouse'];
[$data['count_commission_to_cloud_warehouse'], $data['number_commission_to_cloud_warehouse']] = $this->dao->getDataByType($type, $where, $date, $financialType);
$number_1=bcadd($number_1, $data['number_supply_chain'], 2);
$number_1=bcsub( $number_1, $data['number_order'], 2);
$number_1=bcsub( $number_1, $data['number_commission_to_cloud_warehouse'], 2);
}
//退回收入 refund_order + 退回佣金

View File

@ -687,9 +687,9 @@ class MerchantRepository extends BaseRepository
public function autoMargin($income, $order, $finance, $financeSn, $index = 0)
{
$merchant = Merchant::find($this->merId);
$margin_type = Db::name('MerchantType')->where('mer_type_id', $merchant['type_id'])->value('margin');
// $margin_type = Db::name('MerchantType')->where('mer_type_id', $merchant['type_id'])->value('margin');
//商户押金大于支付押金 或者forceMargin==false 直接返回 不计算押金
if ($merchant['paid_margin']>= $margin_type|| ($this->forceMargin === false && $merchant['auto_margin_rate'] == 0)) {
if ($merchant['paid_margin']>= $merchant['margin']|| ($this->forceMargin === false && $merchant['auto_margin_rate'] == 0)) {
return [$income, $finance, false];
}
$rate = $this->forceMargin ? 100 : $merchant['auto_margin_rate'];
@ -712,7 +712,7 @@ class MerchantRepository extends BaseRepository
'mer_id' => $this->merId,
'financial_record_sn' => $financeSn . $index
];
if(bcadd($merchant['paid_margin'],$margin)>=$margin_type){
if(bcadd($merchant['paid_margin'],$margin)>=$merchant['margin']){
$is_margin=10;
}else{
$is_margin=1;

View File

@ -366,14 +366,14 @@ class ExcelService
'commission_to_village_refund' => '退回平台佣金',
'commission_to_town_refund' => '退回平台佣金',
'auto_margin_refund' => '退回押金',
'commission_to_entry_merchant' => '订单平台佣金',
'commission_to_cloud_warehouse' => '订单平台佣金',
'commission_to_entry_merchant' => '订单平台佣金',//入口店铺佣金
'commission_to_cloud_warehouse' => '订单平台佣金',//云仓佣金
'commission_to_entry_merchant_refund' => '退回平台佣金',
'commission_to_cloud_warehouse_refund' => '退回平台佣金',
'first_order_commission' => '首单拉新',
];
$sys_pm_1 = ['first_order_commission','supply_chain','order', 'presell', 'order_charge', 'order_presell', 'presell_charge', 'refund_brokerage_one', 'refund_brokerage_two', 'commission_to_platform'];
$mer_pm_1 = ['order', 'presell', 'refund_brokerage_one', 'refund_brokerage_two', 'mer_presell',
$sys_pm_1 = ['auto_margin','order', 'presell', 'order_charge', 'order_presell', 'presell_charge', 'refund_brokerage_one', 'refund_brokerage_two', 'commission_to_platform'];
$mer_pm_1 = ['first_order_commission','order_true','order', 'presell', 'refund_brokerage_one', 'refund_brokerage_two', 'mer_presell',
'order_platform_coupon', 'commission_to_cloud_warehouse', 'commission_to_entry_merchant', 'commission_to_town', 'commission_to_village', 'commission_to_service_team'];
$date_ = $where['date'];
unset($where['date']);