This commit is contained in:
luofei 2024-06-01 16:08:01 +08:00
commit 2a5bc68379
56 changed files with 2877 additions and 24 deletions

View File

@ -0,0 +1,95 @@
<?php
namespace app\admin\controller\store_extract;
use app\admin\controller\BaseAdminController;
use app\admin\lists\store_extract\StoreExtractLists;
use app\admin\logic\store_extract\StoreExtractLogic;
use app\admin\validate\store_extract\StoreExtractValidate;
/**
* 门店提现控制器
* Class StoreExtractController
* @package app\admin\controller\store_extract
*/
class StoreExtractController extends BaseAdminController
{
/**
* @notes 获取门店提现列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:09
*/
public function lists()
{
return $this->dataLists(new StoreExtractLists());
}
/**
* @notes 添加门店提现
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:09
*/
public function add()
{
$params = (new StoreExtractValidate())->post()->goCheck('add');
$result = StoreExtractLogic::add($params);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(StoreExtractLogic::getError());
}
/**
* @notes 编辑门店提现
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:09
*/
public function edit()
{
$params = (new StoreExtractValidate())->post()->goCheck('edit');
$result = StoreExtractLogic::edit($params);
if (true === $result) {
return $this->success('编辑成功', [], 1, 1);
}
return $this->fail(StoreExtractLogic::getError());
}
/**
* @notes 删除门店提现
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:09
*/
public function delete()
{
$params = (new StoreExtractValidate())->post()->goCheck('delete');
StoreExtractLogic::delete($params);
return $this->success('删除成功', [], 1, 1);
}
/**
* @notes 获取门店提现详情
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:09
*/
public function detail()
{
$params = (new StoreExtractValidate())->goCheck('detail');
$result = StoreExtractLogic::detail($params);
return $this->data($result);
}
}

View File

@ -0,0 +1,95 @@
<?php
namespace app\admin\controller\store_finance_flow;
use app\admin\controller\BaseAdminController;
use app\admin\lists\store_finance_flow\StoreFinanceFlowLists;
use app\admin\logic\store_finance_flow\StoreFinanceFlowLogic;
use app\admin\validate\store_finance_flow\StoreFinanceFlowValidate;
/**
* 门店流水控制器
* Class StoreFinanceFlowController
* @package app\admin\controller\store_finance_flow
*/
class StoreFinanceFlowController extends BaseAdminController
{
/**
* @notes 获取门店流水列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:56
*/
public function lists()
{
return $this->dataLists(new StoreFinanceFlowLists());
}
/**
* @notes 添加门店流水
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:56
*/
public function add()
{
$params = (new StoreFinanceFlowValidate())->post()->goCheck('add');
$result = StoreFinanceFlowLogic::add($params);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(StoreFinanceFlowLogic::getError());
}
/**
* @notes 编辑门店流水
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:56
*/
public function edit()
{
$params = (new StoreFinanceFlowValidate())->post()->goCheck('edit');
$result = StoreFinanceFlowLogic::edit($params);
if (true === $result) {
return $this->success('编辑成功', [], 1, 1);
}
return $this->fail(StoreFinanceFlowLogic::getError());
}
/**
* @notes 删除门店流水
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:56
*/
public function delete()
{
$params = (new StoreFinanceFlowValidate())->post()->goCheck('delete');
StoreFinanceFlowLogic::delete($params);
return $this->success('删除成功', [], 1, 1);
}
/**
* @notes 获取门店流水详情
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:56
*/
public function detail()
{
$params = (new StoreFinanceFlowValidate())->goCheck('detail');
$result = StoreFinanceFlowLogic::detail($params);
return $this->data($result);
}
}

View File

@ -0,0 +1,106 @@
<?php
namespace app\admin\controller\system_store;
use app\admin\controller\BaseAdminController;
use app\admin\lists\system_store\SystemStoreLists;
use app\admin\lists\system_store\SystemStoreSourceLists;
use app\admin\logic\system_store\SystemStoreLogic;
use app\admin\validate\system_store\SystemStoreValidate;
/**
* 门店列表控制器
* Class SystemStoreController
* @package app\admin\controller\system_store
*/
class SystemStoreController extends BaseAdminController
{
/**
* @notes 获取门店列表列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function lists()
{
return $this->dataLists(new SystemStoreLists());
}
/**
* @notes 根据商品源获取门店列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function source_product_store_lists()
{
return $this->dataLists(new SystemStoreSourceLists());
}
/**
* @notes 添加门店列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function add()
{
$params = (new SystemStoreValidate())->post()->goCheck('add');
$result = SystemStoreLogic::add($params);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(SystemStoreLogic::getError());
}
/**
* @notes 编辑门店列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function edit()
{
$params = (new SystemStoreValidate())->post()->goCheck('edit');
$result = SystemStoreLogic::edit($params);
if (true === $result) {
return $this->success('编辑成功', [], 1, 1);
}
return $this->fail(SystemStoreLogic::getError());
}
/**
* @notes 删除门店列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function delete()
{
$params = (new SystemStoreValidate())->post()->goCheck('delete');
SystemStoreLogic::delete($params);
return $this->success('删除成功', [], 1, 1);
}
/**
* @notes 获取门店列表详情
* @return \think\response\Json
* @author admin
* @date 2024/05/31 17:45
*/
public function detail()
{
$params = (new SystemStoreValidate())->goCheck('detail');
$result = SystemStoreLogic::detail($params);
return $this->data($result);
}
}

View File

@ -0,0 +1,95 @@
<?php
namespace app\admin\controller\user_bill;
use app\admin\controller\BaseAdminController;
use app\admin\lists\user_bill\UserBillLists;
use app\admin\logic\user_bill\UserBillLogic;
use app\admin\validate\user_bill\UserBillValidate;
/**
* 资金记录控制器
* Class UserBillController
* @package app\admin\controller\user_bill
*/
class UserBillController extends BaseAdminController
{
/**
* @notes 获取资金记录列表
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:44
*/
public function lists()
{
return $this->dataLists(new UserBillLists());
}
/**
* @notes 添加资金记录
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:44
*/
public function add()
{
$params = (new UserBillValidate())->post()->goCheck('add');
$result = UserBillLogic::add($params);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(UserBillLogic::getError());
}
/**
* @notes 编辑资金记录
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:44
*/
public function edit()
{
$params = (new UserBillValidate())->post()->goCheck('edit');
$result = UserBillLogic::edit($params);
if (true === $result) {
return $this->success('编辑成功', [], 1, 1);
}
return $this->fail(UserBillLogic::getError());
}
/**
* @notes 删除资金记录
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:44
*/
public function delete()
{
$params = (new UserBillValidate())->post()->goCheck('delete');
UserBillLogic::delete($params);
return $this->success('删除成功', [], 1, 1);
}
/**
* @notes 获取资金记录详情
* @return \think\response\Json
* @author admin
* @date 2024/05/31 16:44
*/
public function detail()
{
$params = (new UserBillValidate())->goCheck('detail');
$result = UserBillLogic::detail($params);
return $this->data($result);
}
}

View File

@ -26,7 +26,8 @@ class StoreCategoryLists extends BaseAdminDataLists implements ListsSearchInterf
public function setSearch(): array
{
return [
'=' => ['name','pid'],
'=' => ['pid'],
'%like%' => ['name'],
];
}
@ -46,7 +47,10 @@ class StoreCategoryLists extends BaseAdminDataLists implements ListsSearchInterf
->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->select()->each(function ($item) {
$item['is_children'] = StoreCategory::where('pid', $item->id)->count(); // 判断是否有子分类
return $item->toArray();
})
->toArray();
}

View File

@ -0,0 +1,65 @@
<?php
namespace app\admin\lists\store_extract;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\store_extract\StoreExtract;
use app\common\lists\ListsSearchInterface;
/**
* 门店提现列表
* Class StoreExtractLists
* @package app\admin\listsstore_extract
*/
class StoreExtractLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 17:09
*/
public function setSearch(): array
{
return [
'=' => ['store_id', 'extract_type', 'status', 'pay_status', 'create_time'],
];
}
/**
* @notes 获取门店提现列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 17:09
*/
public function lists(): array
{
return StoreExtract::where($this->searchWhere)
->field(['id', 'store_id', 'extract_type', 'extract_price', 'mark', 'status', 'pay_status', 'admin_id', 'create_time'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取门店提现数量
* @return int
* @author admin
* @date 2024/05/31 17:09
*/
public function count(): int
{
return StoreExtract::where($this->searchWhere)->count();
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace app\admin\lists\store_finance_flow;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\store_finance_flow\StoreFinanceFlow;
use app\common\lists\ListsSearchInterface;
/**
* 门店流水列表
* Class StoreFinanceFlowLists
* @package app\admin\listsstore_finance_flow
*/
class StoreFinanceFlowLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 16:56
*/
public function setSearch(): array
{
return [
'=' => ['store_id', 'uid', 'create_time'],
];
}
/**
* @notes 获取门店流水列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 16:56
*/
public function lists(): array
{
return StoreFinanceFlow::where($this->searchWhere)
->field(['id', 'uid', 'staff_id', 'order_id', 'link_id', 'type', 'pay_type', 'remark', 'trade_time'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取门店流水数量
* @return int
* @author admin
* @date 2024/05/31 16:56
*/
public function count(): int
{
return StoreFinanceFlow::where($this->searchWhere)->count();
}
}

View File

@ -8,6 +8,7 @@ use app\common\model\store_product\StoreProduct;
use app\common\lists\ListsSearchInterface;
use app\common\model\store_category\StoreCategory;
use app\common\model\store_product_unit\StoreProductUnit;
use app\common\model\system_store\SystemStore;
/**
* 商品列表列表
@ -44,7 +45,7 @@ class StoreProductLists extends BaseAdminDataLists implements ListsSearchInterfa
public function lists(): array
{
return StoreProduct::where($this->searchWhere)
->field(['id', 'image', 'store_name', 'cate_id', 'price', 'sales', 'stock', 'is_show', 'unit', 'cost','rose','purchase'])
->field(['id', 'image', 'store_name', 'cate_id', 'price', 'sales', 'stock', 'is_show', 'unit', 'cost','rose','purchase','store_id','bar_code'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()->each(function ($item) {

View File

@ -0,0 +1,65 @@
<?php
namespace app\admin\lists\system_store;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\system_store\SystemStore;
use app\common\lists\ListsSearchInterface;
/**
* 门店列表列表
* Class SystemStoreLists
* @package app\admin\listssystem_store
*/
class SystemStoreLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 17:45
*/
public function setSearch(): array
{
return [
'=' => ['name', 'phone'],
];
}
/**
* @notes 获取门店列表列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 17:45
*/
public function lists(): array
{
return SystemStore::where($this->searchWhere)
->field(['id', 'name', 'phone', 'detailed_address', 'image', 'is_show'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取门店列表数量
* @return int
* @author admin
* @date 2024/05/31 17:45
*/
public function count(): int
{
return SystemStore::where($this->searchWhere)->count();
}
}

View File

@ -0,0 +1,76 @@
<?php
namespace app\admin\lists\system_store;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\system_store\SystemStore;
use app\common\lists\ListsSearchInterface;
use app\common\model\store_product\StoreProduct;
use PDO;
/**
* 根据商品来源查询门店列表
* Class SystemStoreSourceLists
* @package app\admin\listssystem_store
*/
class SystemStoreSourceLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 17:45
*/
public function setSearch(): array
{
return [
'=' => ['name', 'phone'],
];
}
/**
* @notes 获取门店列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 17:45
*/
public function lists(): array
{
$store_arr=StoreProduct::where('source_id',$this->request->get('product_id'))->column('store_id');
if($store_arr){
$this->searchWhere[]=['id', 'in', $store_arr];
}else{
return [];
}
return SystemStore::where($this->searchWhere)
->field(['id', 'name', 'phone', 'detailed_address', 'image'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取门店数量
* @return int
* @author admin
* @date 2024/05/31 17:45
*/
public function count(): int
{
if($this->searchWhere){
return SystemStore::where($this->searchWhere)->count();
}else{
return 0;
}
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace app\admin\lists\user_bill;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\user_bill\UserBill;
use app\common\lists\ListsSearchInterface;
/**
* 资金记录列表
* Class UserBillLists
* @package app\admin\listsuser_bill
*/
class UserBillLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 16:44
*/
public function setSearch(): array
{
return [
'=' => ['uid', 'type', 'create_time'],
];
}
/**
* @notes 获取资金记录列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 16:44
*/
public function lists(): array
{
return UserBill::where($this->searchWhere)
->field(['id', 'type', 'number', 'mark', 'create_time'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取资金记录数量
* @return int
* @author admin
* @date 2024/05/31 16:44
*/
public function count(): int
{
return UserBill::where($this->searchWhere)->count();
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace app\admin\logic\store_extract;
use app\common\model\store_extract\StoreExtract;
use app\common\logic\BaseLogic;
use think\facade\Db;
/**
* 门店提现逻辑
* Class StoreExtractLogic
* @package app\admin\logic\store_extract
*/
class StoreExtractLogic extends BaseLogic
{
/**
* @notes 添加门店提现
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:09
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
StoreExtract::create([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑门店提现
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:09
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
StoreExtract::where('id', $params['id'])->update([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除门店提现
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:09
*/
public static function delete(array $params): bool
{
return StoreExtract::destroy($params['id']);
}
/**
* @notes 获取门店提现详情
* @param $params
* @return array
* @author admin
* @date 2024/05/31 17:09
*/
public static function detail($params): array
{
return StoreExtract::findOrEmpty($params['id'])->toArray();
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace app\admin\logic\store_finance_flow;
use app\common\model\store_finance_flow\StoreFinanceFlow;
use app\common\logic\BaseLogic;
use think\facade\Db;
/**
* 门店流水逻辑
* Class StoreFinanceFlowLogic
* @package app\admin\logic\store_finance_flow
*/
class StoreFinanceFlowLogic extends BaseLogic
{
/**
* @notes 添加门店流水
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:56
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
StoreFinanceFlow::create([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑门店流水
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:56
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
StoreFinanceFlow::where('id', $params['id'])->update([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除门店流水
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:56
*/
public static function delete(array $params): bool
{
return StoreFinanceFlow::destroy($params['id']);
}
/**
* @notes 获取门店流水详情
* @param $params
* @return array
* @author admin
* @date 2024/05/31 16:56
*/
public static function detail($params): array
{
return StoreFinanceFlow::findOrEmpty($params['id'])->toArray();
}
}

View File

@ -5,10 +5,13 @@ namespace app\admin\logic\store_product;
use app\common\model\store_product\StoreProduct;
use app\common\logic\BaseLogic;
use app\common\model\store_branch_product\StoreBranchProduct;
use app\common\model\store_branch_product_attr_value\StoreBranchProductAttrValue;
use app\common\model\store_category\StoreCategory;
use app\common\model\store_product_attr_value\StoreProductAttrValue;
use app\common\model\system_store\SystemStore;
use think\facade\Db;
use Webman\RedisQueue\Redis;
/**
* 商品列表逻辑
@ -59,6 +62,17 @@ class StoreProductLogic extends BaseLogic
StoreCategory::where('id', $params['cate_id'])->inc('three')->update();
Db::commit();
if ($params['is_store_all'] == 1) {
$store_arr = SystemStore::where('is_show', 1)->column('id');
Redis::send('copy-product', ['product_id' => $res['id'], 'store_arr' => $store_arr]);
} else {
if (is_array($params['store_arr']) && count($params['store_arr']) > 0) {
Redis::send('copy-product', ['product_id' => $res['id'], 'store_arr' => $params['store_arr']]);
}
}
return true;
} catch (\Exception $e) {
Db::rollback();
@ -85,7 +99,15 @@ class StoreProductLogic extends BaseLogic
StoreCategory::where('id', $StoreProduct['cate_id'])->dec('three')->update();
}
StoreProduct::where('id', $params['id'])->update([
'store_name' => $params['store_name']
'store_name' => $params['store_name'],
'image' => $params['image'],
'bar_code' => $params['bar_code'] ?? '',
'cate_id' => $params['cate_id'],
'unit' => $params['unit'],
'stock' => $params['stock'],
'cost' => $params['cost'],
'purchase' => $params['purchase'],
'rose' => $params['rose'],
]);
Db::commit();
@ -120,7 +142,7 @@ class StoreProductLogic extends BaseLogic
*/
public static function detail($params): array
{
return StoreProduct::findOrEmpty($params['id'])->toArray();
return StoreProduct::where('id',$params['id'])->findOrEmpty()->toArray();
}
/**
@ -145,4 +167,48 @@ class StoreProductLogic extends BaseLogic
}
}
}
/**
* 复制商品到门店
*/
public static function copy($id, $store_id)
{
$find = StoreProduct::where('id', $id)->findOrEmpty()->toArray();
$store_find = StoreBranchProduct::where(['product_id' => $id, 'store_id' => $store_id])->findOrEmpty()->toArray();
if ($find && !$store_find) {
$attr_value = StoreProductAttrValue::where('product_id', $id)->findOrEmpty();
Db::startTrans();
try {
$product = [
'product_id' => $find['id'],
'image' => $find['image'],
'store_name' => $find['store_name'],
'store_info' => $find['store_info'],
'keyword' => $find['keyword'],
'bar_code' => $find['bar_code'],
'cate_id' => $find['cate_id'],
'store_id' => $store_id,
'sales' => 0,
'stock' =>0,
];
StoreBranchProduct::create($product);
$arr = [
'product_id' => $id,
'store_id' => $store_id,
'sales' => 0,
'stock' => 0,
'type' => 0,
'bar_code' => $attr_value['bar_code']
];
StoreBranchProductAttrValue::create($arr);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
d($e);
self::setError($e->getMessage());
return false;
}
}
}
}

View File

@ -34,7 +34,6 @@ class StoreProductUnitLogic extends BaseLogic
'py' => $params['py'],
'number' => $params['number'],
'data' => $params['data'],
'more' => $params['more']
]);
Db::commit();
@ -64,7 +63,6 @@ class StoreProductUnitLogic extends BaseLogic
'py' => $params['py'],
'number' => $params['number'],
'data' => $params['data'],
'more' => $params['more']
]);
Db::commit();

View File

@ -0,0 +1,106 @@
<?php
namespace app\admin\logic\system_store;
use app\common\model\system_store\SystemStore;
use app\common\logic\BaseLogic;
use think\facade\Db;
/**
* 门店列表逻辑
* Class SystemStoreLogic
* @package app\admin\logic\system_store
*/
class SystemStoreLogic extends BaseLogic
{
/**
* @notes 添加门店列表
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:45
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
SystemStore::create([
'name' => $params['name'],
'introduction' => $params['introduction'],
'phone' => $params['phone'],
'detailed_address' => $params['detailed_address'],
'image' => $params['image'],
'is_show' => $params['is_show']
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑门店列表
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:45
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
SystemStore::where('id', $params['id'])->update([
'name' => $params['name'],
'introduction' => $params['introduction'],
'phone' => $params['phone'],
'detailed_address' => $params['detailed_address'],
'image' => $params['image'],
'latitude' => $params['latitude'],
'longitude' => $params['longitude'],
'is_show' => $params['is_show']
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除门店列表
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 17:45
*/
public static function delete(array $params): bool
{
return SystemStore::destroy($params['id']);
}
/**
* @notes 获取门店列表详情
* @param $params
* @return array
* @author admin
* @date 2024/05/31 17:45
*/
public static function detail($params): array
{
return SystemStore::findOrEmpty($params['id'])->toArray();
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace app\admin\logic\user_bill;
use app\common\model\user_bill\UserBill;
use app\common\logic\BaseLogic;
use think\facade\Db;
/**
* 资金记录逻辑
* Class UserBillLogic
* @package app\admin\logic\user_bill
*/
class UserBillLogic extends BaseLogic
{
/**
* @notes 添加资金记录
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:44
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
UserBill::create([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑资金记录
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:44
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
UserBill::where('id', $params['id'])->update([
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除资金记录
* @param array $params
* @return bool
* @author admin
* @date 2024/05/31 16:44
*/
public static function delete(array $params): bool
{
return UserBill::destroy($params['id']);
}
/**
* @notes 获取资金记录详情
* @param $params
* @return array
* @author admin
* @date 2024/05/31 16:44
*/
public static function detail($params): array
{
return UserBill::findOrEmpty($params['id'])->toArray();
}
}

View File

@ -0,0 +1,82 @@
<?php
namespace app\admin\validate\store_extract;
use app\common\validate\BaseValidate;
/**
* 门店提现验证器
* Class StoreExtractValidate
* @package app\admin\validate\store_extract
*/
class StoreExtractValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => 'id',
];
/**
* @notes 添加场景
* @return StoreExtractValidate
* @author admin
* @date 2024/05/31 17:09
*/
public function sceneAdd()
{
return $this->remove('id', true);
}
/**
* @notes 编辑场景
* @return StoreExtractValidate
* @author admin
* @date 2024/05/31 17:09
*/
public function sceneEdit()
{
return $this->only(['id']);
}
/**
* @notes 删除场景
* @return StoreExtractValidate
* @author admin
* @date 2024/05/31 17:09
*/
public function sceneDelete()
{
return $this->only(['id']);
}
/**
* @notes 详情场景
* @return StoreExtractValidate
* @author admin
* @date 2024/05/31 17:09
*/
public function sceneDetail()
{
return $this->only(['id']);
}
}

View File

@ -0,0 +1,82 @@
<?php
namespace app\admin\validate\store_finance_flow;
use app\common\validate\BaseValidate;
/**
* 门店流水验证器
* Class StoreFinanceFlowValidate
* @package app\admin\validate\store_finance_flow
*/
class StoreFinanceFlowValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => 'id',
];
/**
* @notes 添加场景
* @return StoreFinanceFlowValidate
* @author admin
* @date 2024/05/31 16:56
*/
public function sceneAdd()
{
return $this->remove('id', true);
}
/**
* @notes 编辑场景
* @return StoreFinanceFlowValidate
* @author admin
* @date 2024/05/31 16:56
*/
public function sceneEdit()
{
return $this->only(['id']);
}
/**
* @notes 删除场景
* @return StoreFinanceFlowValidate
* @author admin
* @date 2024/05/31 16:56
*/
public function sceneDelete()
{
return $this->only(['id']);
}
/**
* @notes 详情场景
* @return StoreFinanceFlowValidate
* @author admin
* @date 2024/05/31 16:56
*/
public function sceneDetail()
{
return $this->only(['id']);
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace app\admin\validate\system_store;
use app\common\validate\BaseValidate;
/**
* 门店列表验证器
* Class SystemStoreValidate
* @package app\admin\validate\system_store
*/
class SystemStoreValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
'name' => 'require',
'phone' => 'require',
'detailed_address' => 'require',
'image' => 'require',
'latitude' => 'require',
'longitude' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => 'id',
'name' => '门店名称',
'phone' => '手机号码',
'detailed_address' => '详细地址',
'image' => '门店logo',
'latitude' => '纬度',
'longitude' => '经度',
];
/**
* @notes 添加场景
* @return SystemStoreValidate
* @author admin
* @date 2024/05/31 17:45
*/
public function sceneAdd()
{
return $this->only(['name','phone','detailed_address','image','latitude','longitude']);
}
/**
* @notes 编辑场景
* @return SystemStoreValidate
* @author admin
* @date 2024/05/31 17:45
*/
public function sceneEdit()
{
return $this->only(['id','name','phone','detailed_address','image','latitude','longitude']);
}
/**
* @notes 删除场景
* @return SystemStoreValidate
* @author admin
* @date 2024/05/31 17:45
*/
public function sceneDelete()
{
return $this->only(['id']);
}
/**
* @notes 详情场景
* @return SystemStoreValidate
* @author admin
* @date 2024/05/31 17:45
*/
public function sceneDetail()
{
return $this->only(['id']);
}
}

View File

@ -0,0 +1,82 @@
<?php
namespace app\admin\validate\user_bill;
use app\common\validate\BaseValidate;
/**
* 资金记录验证器
* Class UserBillValidate
* @package app\admin\validate\user_bill
*/
class UserBillValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => 'id',
];
/**
* @notes 添加场景
* @return UserBillValidate
* @author admin
* @date 2024/05/31 16:44
*/
public function sceneAdd()
{
return $this->remove('id', true);
}
/**
* @notes 编辑场景
* @return UserBillValidate
* @author admin
* @date 2024/05/31 16:44
*/
public function sceneEdit()
{
return $this->only(['id']);
}
/**
* @notes 删除场景
* @return UserBillValidate
* @author admin
* @date 2024/05/31 16:44
*/
public function sceneDelete()
{
return $this->only(['id']);
}
/**
* @notes 详情场景
* @return UserBillValidate
* @author admin
* @date 2024/05/31 16:44
*/
public function sceneDetail()
{
return $this->only(['id']);
}
}

View File

@ -32,6 +32,7 @@ class IndexController extends BaseApiController
public function index()
{
d(uniqid(1 . '_', true));
return json(['msg' =>create_password(123456, '11d3')]);
}
@ -56,10 +57,4 @@ class IndexController extends BaseApiController
return $this->success('ok',$find);
}
/**
* @notes 获取快递列表
*/
public function express_list(){
return $this->dataLists(new ExpressLists());
}
}

View File

@ -3,7 +3,7 @@
namespace app\api\controller;
use app\api\logic\LoginLogic;
use app\api\validate\{LoginAccountValidate, RegisterValidate, WebScanLoginValidate, WechatLoginValidate};
use app\api\validate\{LoginAccountValidate, WechatLoginValidate};
use app\common\model\user\UserAuth;
class LoginController extends BaseApiController
@ -35,7 +35,7 @@ class LoginController extends BaseApiController
/**
* @notes 小程序-登录接口
* @return \think\response\Json
* @return
* @author 段誉
* @date 2022/9/20 19:48
*/
@ -52,7 +52,7 @@ class LoginController extends BaseApiController
/**
* @notes 小程序绑定微信
* @return \think\response\Json
* @return
* @author 段誉
* @date 2022/9/20 19:48
*/
@ -69,7 +69,7 @@ class LoginController extends BaseApiController
/**
* @notes 更新用户头像昵称
* @return \think\response\Json
* @return
* @author 段誉
* @date 2023/2/22 11:15
*/

View File

@ -0,0 +1,29 @@
<?php
namespace app\api\controller\cate;
use app\api\controller\BaseApiController;
use app\api\lists\cate\CateLists;
/**
* 商品分类控制器
* Class CateController
* @package app\admin\controller\goods
*/
class CateController extends BaseApiController
{
public $notNeedLogin = ['lists'];
/**
* @notes 获取商品分类列表
* @return
* @author likeadmin
* @date 2024/04/23 10:27
*/
public function lists()
{
return $this->dataLists(new CateLists());
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace app\api\controller\store;
use app\api\lists\store\SystemStoreLists;
use app\api\controller\BaseApiController;
class StoreController extends BaseApiController
{
public function lists()
{
return $this->dataLists(new SystemStoreLists());
}
}

View File

@ -0,0 +1,97 @@
<?php
namespace app\api\controller\user;
use app\api\controller\BaseApiController;
use app\api\lists\user\UserAddressList;
use app\api\logic\user\AddressLogic;
use app\api\validate\UserAddressValidate;
class AddressController extends BaseApiController
{
public function lists(){
return $this->dataLists(new UserAddressList());
}
/**
* 添加地址
* @return \support\Response
*/
public function create()
{
$params = (new UserAddressValidate())->post()->goCheck('add');
$params['uid'] = $this->request->userId;
$res=AddressLogic::add($params);
if(AddressLogic::hasError()){
return $this->fail(AddressLogic::getError());
}else{
return $this->success('添加成功');
}
}
/**
* 商户给用户添加地址
*/
/* public function merchant_create()
{
$params = $this->request->post();
if($params['order_id'] && $params['order_id']!=0){
$uid=Cashierclass::where('id',$params['order_id'])->value('uid');
if(!$uid || $uid<=0){
return $this->fail('订单不存在');
}
}
$params['uid'] = $uid;
$res=AddressLogic::add($params);
if(AddressLogic::hasError()){
return $this->fail(AddressLogic::getError());
}else{
Cashierclass::where('id',$params['order_id'])->update(['address_id'=>$res,'real_name'=>$params['real_name'],'user_phone'=>$params['phone'],'user_address'=>$params['detail']]);
return $this->success('添加成功');
}
}*/
/**
* @notes 编辑地址
* @return \support\Response
* @author likeadmin
* @date 2024/4/24 10:37
*/
public function edit()
{
$params = (new UserAddressValidate())->post()->goCheck('edit');
$params['uid'] = $this->request->userId;
if(AddressLogic::edit($params)){
return $this->success('编辑成功');
}else{
return $this->fail(AddressLogic::getError());
}
}
/**
* @notes 删除地址
* @return \support\Response
* @author likeadmin
* @date 2024/4/24 10:37
*/
public function delete()
{
$params = (new UserAddressValidate())->post()->goCheck('delete');
if(AddressLogic::delete($params)){
return $this->success('删除成功');
}else{
return $this->fail(AddressLogic::getError());
}
}
/**
* @notes 获取地址详情
* @return \support\Response
* @author likeadmin
* @date 2024/4/24 10:37
*/
public function detail()
{
$params = (new UserAddressValidate())->goCheck('detail');
return $this->success('获取成功',AddressLogic::detail($params));
}
}

View File

@ -19,7 +19,7 @@ class UserController extends BaseApiController
/**
* @notes 获取小程序手机号
* @return \think\response\Json
* @return
* @author 段誉
* @date 2022/9/21 16:46
*/

View File

@ -0,0 +1,34 @@
<?php
namespace app\api\controller\user;
use app\api\lists\user\UserFeedbackLists;
use app\api\logic\user\UserFeedbackLogic;
use app\admin\validate\user\UserFeedbackValidate;
use app\api\controller\BaseApiController;
class UserFeedbackController extends BaseApiController
{
/**
* @notes 获取用户反馈表列表
* @return \support\Response
* @author likeadmin
* @date 2024/05/13 16:56
*/
public function lists()
{
return $this->dataLists(new UserFeedbackLists());
}
public function add()
{
$params = (new UserFeedbackValidate())->post()->goCheck('add');
$result = UserFeedbackLogic::add($params,$this->request->userInfo['user_id']);
if (true === $result) {
return $this->success('添加成功', [], 1, 1);
}
return $this->fail(UserFeedbackLogic::getError());
}
}

View File

@ -0,0 +1,103 @@
<?php
namespace app\api\lists\cate;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\cate\Cate;
use app\common\lists\ListsSearchInterface;
use app\Request;
/**
* 商品分类列表
* Class GoodsclassLists
* @package app\admin\listsgoods
*/
class CateLists extends BaseAdminDataLists implements ListsSearchInterface
{
protected $where;
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
* @date 2024/04/23 10:27
*/
public function setSearch(): array
{
return [
'=' => ['pid', 'name', 'data', 'pic', 'sort'],
];
}
/**
* @notes 获取商品分类列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author likeadmin
* @date 2024/04/23 10:27
*/
public function lists(): array
{
$pid=Request()->get('pid',0);
if($pid==0){
$lists = Cate::where($this->searchWhere)
->where('pid', 0)
->where('children','<>',null)
->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])
->limit($this->limitOffset, $this->limitLength)
->order(['sort' => 'desc','id' => 'desc'])
->select()->toArray();
}else{
$three=Request()->get('three',0);
if($three==0){
$where[]=['children','<>',''];
$this->where=$where;
}
$lists = Cate::where($this->searchWhere)
->where($this->where)
->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])
->limit($this->limitOffset, $this->limitLength)
->order(['sort' => 'desc','id' => 'desc'])
->select()->toArray();
}
// ->each(function ($item) {
// $a = Goodsclass::where('pid', $item['id'])->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])->select();
// $item['children'] = $a;
// foreach ($a as $k => &$v) {
// $b = Goodsclass::where('pid', $v['id'])->field(['id', 'pid', 'name', 'data', 'pic', 'sort'])->select();
// $v['children'] = $b;
// }
// })->toArray();
return $lists;
// return linear_to_tree($lists, 'children');
}
/**
* @notes 获取商品分类数量
* @return int
* @author likeadmin
* @date 2024/04/23 10:27
*/
public function count(): int
{
$pid=Request()->get('pid',0);
if($pid==0){
return Cate::where($this->searchWhere)->where('pid', 0)
->where('children','<>',null)
->count();
}else{
return Cate::where($this->searchWhere)
->where($this->where)
->count();
}
}
}

View File

@ -0,0 +1,71 @@
<?php
namespace app\api\lists\store;
use app\admin\lists\BaseAdminDataLists;
use app\common\enum\YesNoEnum;
use app\common\model\system_store\SystemStore;
use app\common\lists\ListsSearchInterface;
/**
* 门店列表列表
* Class SystemStoreLists
* @package app\admin\listssystem_store
*/
class SystemStoreLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author admin
* @date 2024/05/31 17:45
*/
public function setSearch(): array
{
return [
'=' => ['phone'],
'%like%' => ['name'],
];
}
/**
* @notes 获取门店列表列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author admin
* @date 2024/05/31 17:45
*/
public function lists(): array
{
$where[]=['is_show','=',YesNoEnum::YES];
return SystemStore::where($this->searchWhere)->where($where)
->field(['id', 'name', 'phone', 'detailed_address', 'image', 'is_show',
'day_time','is_store','latitude','longitude'
])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取门店列表数量
* @return int
* @author admin
* @date 2024/05/31 17:45
*/
public function count(): int
{
$where[]=['is_show','=',YesNoEnum::YES];
return SystemStore::where($this->searchWhere)->where($where)->count();
}
}

View File

@ -0,0 +1,63 @@
<?php
namespace app\api\lists\user;
use app\admin\lists\BaseAdminDataLists;
use app\common\lists\ListsSearchInterface;
use app\common\model\user\UserAddress;
/**
* 地址列表
* Class OpurchaseclassLists
* @package app\api\operation
*/
class UserAddressList extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
*/
public function setSearch(): array
{
return [
];
}
/**
* @notes 获取地址列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @date 2024/04/27 11:26
*/
public function lists(): array
{
$user_id=$this->request->userId;
if(!$user_id) return [];
return UserAddress::where($this->searchWhere)->where('uid',$user_id)
->field('address_id,real_name,detail,phone,is_default')
->limit($this->limitOffset, $this->limitLength)
->order(['address_id' => 'desc'])
->select()
->toArray();
}
/**
* @notes 获取地址数量
* @return int
* @date 2024/04/27 11:26
*/
public function count(): int
{
$user_id=$this->request->userId;
return UserAddress::where($this->searchWhere)->where('uid',$user_id)->count();
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace app\api\lists\user;
use app\admin\lists\BaseAdminDataLists;
use app\common\lists\ListsSearchInterface;
use app\common\model\user\User;
use app\common\model\user\UserFeedback;
class UserFeedbackLists extends BaseAdminDataLists implements ListsSearchInterface
{
/**
* @notes 设置搜索条件
* @return \string[][]
* @author likeadmin
* @date 2024/05/13 16:56
*/
public function setSearch(): array
{
return [
'=' => ['uid'],
'%like%' => ['name', 'contact'],
];
}
/**
* @notes 获取用户反馈表列表
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author likeadmin
* @date 2024/05/13 16:56
*/
public function lists(): array
{
$uid = $this->request->userInfo['user_id'];
return UserFeedback::where($this->searchWhere)->where('uid',$uid)
->field(['id', 'uid', 'content', 'images', 'name', 'contact','create_time'])
->limit($this->limitOffset, $this->limitLength)
->order(['id' => 'desc'])
->select()->each(function($data){
$user = User::field('nickname')->where('id',$data['uid'])->findOrEmpty();
$data['user_name'] = !$user->isEmpty() ? $user['nickname'] : '';
})
->toArray();
}
/**
* @notes 获取用户反馈表数量
* @return int
* @author likeadmin
* @date 2024/05/13 16:56
*/
public function count(): int
{
return UserFeedback::where($this->searchWhere)->count();
}
}

View File

@ -16,6 +16,7 @@ namespace app\api\logic;
use app\common\cache\WebScanLoginCache;
use app\common\logic\BaseLogic;
use app\common\model\system_store\SystemStoreStaff;
use app\api\service\{UserTokenService, WechatUserService};
use app\common\enum\{LoginEnum, user\UserTerminalEnum, YesNoEnum};
use app\common\service\{
@ -229,6 +230,16 @@ class LoginLogic extends BaseLogic
// 更新登录信息
self::updateLoginInfo($userInfo['id']);
//判断是不是员工
$userInfo['is_staff'] = 0;
$userInfo['store_id'] = 0;
if($userInfo['mobile']){
$check = SystemStoreStaff::where('phone',$userInfo['mobile'])->find()??[];
if ($check){
$userInfo['is_staff'] = 1;
$userInfo['store_id'] = $check['store_id'];
}
}
Db::commit();
return $userInfo;

View File

@ -0,0 +1,106 @@
<?php
namespace app\api\logic\user;
use app\common\logic\BaseLogic;
use app\common\model\user\UserAddress;
use think\facade\Db;
/**
* 地址逻辑
* Class OrderLogic
* @package app\api\logic\order
*/
class AddressLogic extends BaseLogic
{
/**
* @notes 添加地址表
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/04/24 10:37
*/
public static function add(array $params): bool
{
Db::startTrans();
try {
if(isset($params['is_default'])&&$params['is_default']==1){
UserAddress::where('uid',$params['uid'])->update(['is_default'=>0]);
}else{
$params['is_default']=1;
}
$id=UserAddress::insertGetId([
'uid' => $params['uid'],
'real_name' => $params['real_name'],
'phone' => $params['phone'],
'detail' => $params['detail'],
'is_default' => $params['is_default'],
]);
Db::commit();
return $id;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑地址表
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/04/24 10:37
*/
public static function edit(array $params): bool
{
Db::startTrans();
try {
if($params['is_default']==1){
UserAddress::where('uid',$params['uid'])->update(['is_default'=>0]);
}
$data = [
'real_name' => $params['real_name'],
'phone' => $params['phone'],
'detail' => $params['detail'],
'is_default' => $params['is_default'],
];
UserAddress::where('uid', $params['uid'])->where('address_id', $params['address_id'])->update($data);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除地址表
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/04/24 10:37
*/
public static function delete(array $params): bool
{
return UserAddress::destroy($params['address_id']);
}
/**
* @notes 获取购物车表详情
* @param $params
* @return array
* @author likeadmin
* @date 2024/04/24 10:37
*/
public static function detail($params): array
{
return UserAddress::field('address_id,real_name,phone,detail,is_default')->findOrEmpty($params['address_id'])->toArray();
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace app\api\logic\user;
use app\common\logic\BaseLogic;
use app\common\model\user\UserFeedback;
use think\facade\Db;
class UserFeedbackLogic extends BaseLogic
{
/**
* @notes 添加用户反馈表
* @param array $params
* @return bool
* @author likeadmin
* @date 2024/05/13 16:56
*/
public static function add(array $params,$uid): bool
{
Db::startTrans();
try {
UserFeedback::create([
'uid' => $uid,
'content' => $params['content'],
'images' => $params['images'] ? json_encode($params['images']) : null,
'name' => $params['name'],
'contact' => $params['contact'],
'create_time' => time(),
]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
self::setError($e->getMessage());
return false;
}
}
}

View File

@ -0,0 +1,59 @@
<?php
namespace app\api\logic\user;
use app\common\{
logic\BaseLogic,
model\user\User,
service\wechat\WeChatMnpService};
/**
* 会员逻辑层
* Class UserLogic
* @package app\shopapi\logic
*/
class UserLogic extends BaseLogic
{
/**
* @notes 获取小程序手机号
* @param array $params
* @return bool
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
* @author 段誉
* @date 2023/2/27 11:49
*/
public static function getMobileByMnp(array $params)
{
try {
$response = (new WeChatMnpService())->getUserPhoneNumber($params['code']);
$phoneNumber = $response['phone_info']['purePhoneNumber'] ?? '';
if (empty($phoneNumber)) {
throw new \Exception('获取手机号码失败');
}
$user = User::where([
['mobile', '=', $phoneNumber],
['id', '<>', $params['user_id']]
])->findOrEmpty();
if (!$user->isEmpty()) {
throw new \Exception('手机号已被其他账号绑定');
}
// 绑定手机号
User::update([
'id' => $params['user_id'],
'mobile' => $phoneNumber
]);
return true;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
}

View File

@ -0,0 +1,54 @@
<?php
namespace app\api\validate;
use app\common\enum\PayEnum;
use app\common\validate\BaseValidate;
/**
* 支付验证
* Class PayValidate
* @package app\api\validate
*/
class PayValidate extends BaseValidate
{
protected $rule = [
'from' => 'require',
'pay_way' => 'require|in:' . PayEnum::BALANCE_PAY . ',' . PayEnum::WECHAT_PAY . ',' . PayEnum::ALIPAY,
'order_id' => 'require'
];
protected $message = [
'from.require' => '参数缺失',
'pay_way.require' => '支付方式参数缺失',
'pay_way.in' => '支付方式参数错误',
'order_id.require' => '订单参数缺失'
];
/**
* @notes 支付方式场景
* @return PayValidate
* @author 段誉
* @date 2023/2/24 17:43
*/
public function scenePayway()
{
return $this->only(['from', 'order_id']);
}
/**
* @notes 支付状态
* @return PayValidate
* @author 段誉
* @date 2023/3/1 16:17
*/
public function sceneStatus()
{
return $this->only(['from', 'order_id']);
}
}

View File

@ -0,0 +1,93 @@
<?php
namespace app\api\validate;
use app\common\validate\BaseValidate;
/**
* UserAddress验证器
* Class UserAddressValidate
* @package app\admin\validate
*/
class UserAddressValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'real_name' => 'require',
'phone' => 'require',
'detail' => 'require',
'address_id' => 'require',
"is_default"=>"require|in:0,1"
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'real_name' => '收货人姓名',
'phone' => '收货人电话',
'detail' => '收货人详细地址',
'address_id' => '地址id',
"is_default"=>"默认地址"
];
/**
* @notes 添加场景
* @return UserAddressValidate
* @author likeadmin
* @date 2024/04/28 17:28
*/
public function sceneAdd()
{
return $this->only(['real_name','phone','detail']);
}
/**
* @notes 编辑场景
* @return UserAddressValidate
* @author likeadmin
* @date 2024/04/28 17:28
*/
public function sceneEdit()
{
return $this->only(['real_name','phone','detail','address_id']);
}
/**
* @notes 删除场景
* @return UserAddressValidate
* @author likeadmin
* @date 2024/04/28 17:28
*/
public function sceneDelete()
{
return $this->only(['address_id']);
}
/**
* @notes 详情场景
* @return UserAddressValidate
* @author likeadmin
* @date 2024/04/28 17:28
*/
public function sceneDetail()
{
return $this->only(['address_id']);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace app\common\model\cate;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 商品分类模型
* Class Goodsclass
* @package app\common\model\goods
*/
class Cate extends BaseModel
{
use SoftDelete;
protected $name = 'store_category';
protected $deleteTime = 'delete_time';
public function getChildrenAttr($value)
{
if($value){
return json_decode($value, true);
}else{
return [];
}
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace app\common\model\merchant;
use app\common\model\BaseModel;
use app\common\model\user\User;
use think\model\concern\SoftDelete;
/**
* 商户列表模型
* Class Merchant
* @package app\common\model\merchant
*/
class Merchant extends BaseModel
{
use SoftDelete;
protected $ok = 'mer_id';
protected $name = 'merchant';
protected $deleteTime = 'delete_time';
public function realName()
{
return $this->hasOne(User::class,'id','uid')->bind(['mer_real_name'=>'real_name']);
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\store_branch_product;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店商品属性值辅助表模型
* Class StoreBranchProduct
* @package app\common\model\store_branch_product
*/
class StoreBranchProduct extends BaseModel
{
use SoftDelete;
protected $name = 'store_branch_product';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\store_branch_product_attr_value;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店商品辅助表模型
* Class StoreBranchProduct
* @package app\common\model\store_branch_product_attr_value
*/
class StoreBranchProductAttrValue extends BaseModel
{
use SoftDelete;
protected $name = 'store_branch_product_attr_value';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\store_extract;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店提现模型
* Class StoreExtract
* @package app\common\model\store_extract
*/
class StoreExtract extends BaseModel
{
use SoftDelete;
protected $name = 'store_extract';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\store_finance_flow;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店流水模型
* Class StoreFinanceFlow
* @package app\common\model\store_finance_flow
*/
class StoreFinanceFlow extends BaseModel
{
use SoftDelete;
protected $name = 'store_finance_flow';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\system_store;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店列表模型
* Class SystemStore
* @package app\common\model\system_store
*/
class SystemStore extends BaseModel
{
use SoftDelete;
protected $name = 'system_store';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\system_store;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店列表模型
* Class SystemStore
* @package app\common\model\system_store
*/
class SystemStoreStaff extends BaseModel
{
use SoftDelete;
protected $name = 'system_store_staff';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\system_store_storage;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 门店入库模型
* Class SystemStoreStorage
* @package app\common\model\system_store_storage
*/
class SystemStoreStorage extends BaseModel
{
use SoftDelete;
protected $name = 'system_store_storage';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\user;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 用户地址表
* Class UserAddress
* @package app\common\model
*/
class UserAddress extends BaseModel
{
use SoftDelete;
protected $pk = 'address_id';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,22 @@
<?php
namespace app\common\model\user_bill;
use app\common\model\BaseModel;
use think\model\concern\SoftDelete;
/**
* 资金记录模型
* Class UserBill
* @package app\common\model\user_bill
*/
class UserBill extends BaseModel
{
use SoftDelete;
protected $name = 'user_bill';
protected $deleteTime = 'delete_time';
}

View File

@ -0,0 +1,34 @@
<?php
namespace app\queue\redis;
use app\admin\logic\store_product\StoreProductLogic;
use Webman\RedisQueue\Consumer;
use support\Log;
/**
* 复制商品
*/
class CopyProductSend implements Consumer
{
// 要消费的队列名
public $queue = 'copy-product';
// 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接`
public $connection = 'default';
// 消费
public function consume($data)
{
$store_arr=$data['store_arr'];
foreach ($store_arr as $key => $id) {
StoreProductLogic::copy($data['product_id'],$id);
}
}
public function onConsumeFailure(\Throwable $e, $package)
{
$package['max_attempts']=0;
Log::error('复制商品失败product_id:'.$package['data']['product_id']);
return $package;
}
}

View File

@ -0,0 +1,43 @@
-----BEGIN CERTIFICATE-----
MIIDsjCCApqgAwIBAgIQICQFJaxJICk3sZeM5O23ADANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjQwNTI1MDIxNjQ1WhcNMjkwNTI0MDIxNjQ1WjCBkjELMAkGA1UEBhMCQ04x
LTArBgNVBAoMJOazuOW3numHjOa1t+WGnOS4muenkeaKgOaciemZkOWFrOWPuDEPMA0GA1UECwwG
QWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWP
uC0yMDg4ODQxMTE4NTE0OTc5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3/qWQWp
PJAveD3AJaI6ZZ2z+voaUyRJPWLayo35zp57nrN+OepF+7bLpmlNJ2ybfLwgUS4GN4pnlLLh8OkL
gbZ4rCvR6CXsiGi6gKdZSRjdIi6SY8e7MhZu0/YuwD3X4Q3PYRQ6oa5OQ3V7BA6niq1sRKt3uZJ2
GNT3VcvFd+ByLVTFF7loNzTpR+zuqegmXd/7oGHYC/jo0Pl7G3Cn0I0Tn9rCxCZg9Xd1vxNpRZfL
lPs68gFJtuzUMV+nVXydtbv6/0CzrBr0tt46YqftO70Nzwy7cBjsmFWs818NGknVdp0gOTt8xrcR
yapObuRFYouVxEwgqbLRZpYt4bnO1QIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcN
AQELBQADggEBAJ4CTf9OvSubXjxUvgJU4miaAH9sr5AwZO3YOKKS33hAwd7GHNT9l7MdMPmkWSFJ
0GLJcRW6FnXaHRMYOWSULNIk/0V1iCiRgg2VQSLC4tawLJLo1vQEKLmtduQQthmItP5WX+GH+bAI
Ccd8Y36zuYeXS/4c16QGdlzWKxgUUYc426XfhMoMw1cPl7LYDI4UQHmHD6McS3S5AcFhKXi6JjaF
GT2+qIr6Mb/+YuaCRmtB1XztYeppMxPRf6GC15prkIx+QDSFtxPaxV4Y66Sxwbv5a3dGGJhh8iur
K4Ij09XODyZpglRcQ8bijxReVf/jONbLNRm2dehh6Frsfzofyuc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
-----END CERTIFICATE-----

View File

@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIEoDCCA4igAwIBAgIQICQFJYrgve0jW7XDuTjfnzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjQwNTI1MDIxNjQ0WhcNMjkwNTI0MDIxNjQ0WjBoMQswCQYDVQQGEwJDTjEt
MCsGA1UECgwk5rO45bee6YeM5rW35Yac5Lia56eR5oqA5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQLDAZB
bGlwYXkxGTAXBgNVBAMMEDIwODg4NDExMTg1MTQ5NzkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQCktKWIoqSZ8BoSpALMsvTEsEQ1kF++wBeneams0Q17LvqGDBgiGuuICU0tnhBrjEkJ
FIw+5ApiHdkwbjFRqDqXyNj7B9fMBWp+QeHf6KvmRsPOHZegyvmQlqvMYf6hF4OwVKDrtVi6I1hV
drwf35h8KEGh4QM0WyXno2bJ7OVQDL49enrG7dXZQkwnwiluuxgjKphC2WYHCERGiYbrRKWXtQmz
ivjw7YTtfSXvypp8N3pSWXkWeLqpGGK3GG3pcUu4U+y4RFknnzSpiv20EJ6gw3pjUDkzexJoGh9b
yFOMoRVTJpIV8iTshdozd69ny5FjmIoXIouGCjdwp6M+XCXVAgMBAAGjggEpMIIBJTAfBgNVHSME
GDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNVHQ4EFgQU7grrNa/BE8O53ysngZSu711bo6Qw
QAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29t
L2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlw
YXkuY29tL2NybDg5LmNybDBgBggrBgEFBQcBAQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5h
bGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAv
MA0GCSqGSIb3DQEBCwUAA4IBAQA9DYzEMnOGG9uddKhyS7XyJiFRoP7GXIvwj4IjLn/hQ/UbD2DB
MJUTDSkFIcyEU9w2zCD7atgKZNYCscIACnFmz91op1Oo+ohMTswUNGHMZCGYqSy3msA1Okuxc8mE
yvHRwJdU7qnEsSOD7hrKw059AFcDW3okDSKYvr8tJNC3MNyGY4dd6YxouE3738HtlYf/iGkN0ntQ
NEayluq3tRI+XE6AYrU6FYvXwWAGur/UqQTyKYAT0j2UE5VBfwC7/qpFBK+13oe8JvqdgLJY6BtB
nAnLaP1Z5RY5JnmUgzXD/pCkIZu5U3WS9hFcAxCrSiZmU4+CVRTTfY7d/DU89epc
-----END CERTIFICATE-----

View File

@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKDCCAxCgAwIBAgIUYAGG3fxXIyJ8FvMcIWFHBYwI1oUwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjMwOTI1MDE1NjI1WhcNMjgwOTIzMDE1NjI1WjCBgTETMBEGA1UEAwwK
MTY1NDI3NDg2NzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
DCTms7jlt57ph4zmtbflhpzkuJrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYM
AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBANTeTUe6k55sj+jlEN1wgPyjRw8SMQ8df5xdt6P9Xe29wR+10YHtJrpo
//WRg6MNDk3akQoIq1+Nb6ADdUpwTKpeTlDaJw9MtP5sHHlfe3KUHDWUq128Fo9z
gLXoZ4BVQ0YibpBJgeTpUVBNxM7NlTMBGwL9BkK0v37arYkfUuJ0VCcGj5kOfFnH
4/CZlOAwSj/FYvQCDJrnP2LbXYLoObnf5GaAOMwbvNAJvkLmLXIAufWgPrXu5OwG
ZC0IOK01IVjLQhW6T+VPyyeKWK4xh9FLQ/vkNsZsGwlpkN2frp9F38ZCeTcKFqeP
36WEU5E0WCF3T2zubwNbl56CpENrDQMCAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsG
A1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2Eu
aXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRC
MDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdB
OUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQBFY145
P8GFVelCSY+T5a1Wqy/J0EphwBqAD0GiWCvV64vSl1Xv/hQoNh8b5Kco6DCsJMOW
jSde17gqDYPub7j1G7oKWIdOfYb/TAE/HEmAou+KQU53mtT08bEH3Ej2wXpH9O6e
i/fR656fq+FmiiK/But0+VPssa7mpuwbMjHA03DjcKfk0jrWfr1KI1uUOPS2SheW
zbMyUAludud50RTu9DRFeDP/6HUDqHcsCpdjy+yQMobrtsrmphpVKdBTI0k8/zpB
4pqyfZ12PC30Gpqyr0iPu/oMh5QQAjrzCwHc0FeA+a/06YhndX9rHx3ryD58RYBs
nkuymMJUPd5+A5Xm
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDU3k1HupOebI/o
5RDdcID8o0cPEjEPHX+cXbej/V3tvcEftdGB7Sa6aP/1kYOjDQ5N2pEKCKtfjW+g
A3VKcEyqXk5Q2icPTLT+bBx5X3tylBw1lKtdvBaPc4C16GeAVUNGIm6QSYHk6VFQ
TcTOzZUzARsC/QZCtL9+2q2JH1LidFQnBo+ZDnxZx+PwmZTgMEo/xWL0Agya5z9i
212C6Dm53+RmgDjMG7zQCb5C5i1yALn1oD617uTsBmQtCDitNSFYy0IVuk/lT8sn
iliuMYfRS0P75DbGbBsJaZDdn66fRd/GQnk3Chanj9+lhFORNFghd09s7m8DW5ee
gqRDaw0DAgMBAAECggEARE6Jcej3EbE4hL1sqgI+AdPLK5Tk1TrcBis0kJTvHSj0
3d4UOqME+HBVIlHtcdbwrh7ix9t8Uo8qMKirbJWYpFrauqsmOYydz76VbIUtMdlB
LBhm3Q9MFgA0XysSe2XgzpKh8/8ChZgxFZm++7WQmOtT5aOX7LPfdy9o3EWG7U9c
rUOQ/5ykLcywfonw88AQEf5MoVbo6pFSDxHWn8CXLT2ex4O7KY1GHU+zQDgT+19w
fqrGuJYclWVTk1jmpZ+dK8Qs2HhUo1h5Ls65GagvXYR/iZ/qtPEffhx3K1YzxIOU
Vi/H8H69//afUH1wxomcDaa0kL1AdEG3ILoPuNZOEQKBgQD7h8Haf9vNcxevrYRO
0enghp+mS84+hXppEIUcRdSoLUFLCsHOsOWoGquuliZYaxaiEzUaQetB4sT+cGJJ
LgNyZv+QtJ5pm2Bf/GmS93mi5Iy9ingKEFdeMW/fe6kxVGxNo3tlhV0Bwb/ntXJp
fhXCJ0CsXU5mrFsi5XAYRAxcpQKBgQDYpqqqflYcA+rf9ey+VGEyKiIswE+IPaqe
wkgpgYwk0kOkOjBF9gFHMf9ruomWH4kTTlqeaTHCNItGtjDOYTJISMSmPsp49D9d
civZ1+kuy3C57wf2Ns0hWp4QCwGHddppoG1DKmzAxelMHQD6db26xgGJCq9hZ3Ut
0k4RWtzKhwKBgFciRU5bApreZvMtyerAHyPvnvitxAm2lZw149bSfgOwgbDsTg07
DKO6cYTucOQqXNHSk4/ADC5rz1BRQEsXjIwiECBh4Yq2D6HQwAXwgwuh3vt+L21V
Ed8IgzfJD+iN1WLj4khd9cU5CDDNk4/l5MW4cVgEjrdUt9GT58wQLrQdAoGAVgGs
JOzsgEip2GkHp/NVdpW1ZXCe4iYg8s+L2DZejUuPoMWc3lkv3rShgoHWFuvD/g8P
+G0oXMGBPPwc2gFJ9do1fw3UUTodYZpugBevsWz//kA/N+Y/fus7boEABWeq4l3W
omBYNhsbZ6Tn+4X8YQY0G9RLFW793MftSAR7PEcCgYAh99cfwfNV36/nFIt8E18w
yzWb5HFLZ29eFjXgbmOaq4h2+P5Wor+E2v6OD154kUWm5oYNiPtBs0GHrvtjl2TW
tuBjU58+ejl2Ae6678Yxj+IlH8NRJf3pR6gDST/YHhVRv8TuBFeKT+nZ97t6HsJT
GE1Me2UOnbIHGImqvDlOvA==
-----END PRIVATE KEY-----

View File

@ -13,11 +13,11 @@ return [
// 必填-应用私钥 字符串或路径
'app_secret_cert' => 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCktKWIoqSZ8BoSpALMsvTEsEQ1kF++wBeneams0Q17LvqGDBgiGuuICU0tnhBrjEkJFIw+5ApiHdkwbjFRqDqXyNj7B9fMBWp+QeHf6KvmRsPOHZegyvmQlqvMYf6hF4OwVKDrtVi6I1hVdrwf35h8KEGh4QM0WyXno2bJ7OVQDL49enrG7dXZQkwnwiluuxgjKphC2WYHCERGiYbrRKWXtQmzivjw7YTtfSXvypp8N3pSWXkWeLqpGGK3GG3pcUu4U+y4RFknnzSpiv20EJ6gw3pjUDkzexJoGh9byFOMoRVTJpIV8iTshdozd69ny5FjmIoXIouGCjdwp6M+XCXVAgMBAAECggEAJ1Dn4sHQQN7Lmn+EG5DsVLcu0QpxkHsSKmwkUJhme20vaCgi6qE6b/KodacxjDqkhIJfJ/QPdnRhj+n949wggHL1OJcasBzq2tCnNme4APQLcXwm4b8R663LvLH3skSGruTEtP9I+sXNJDl/lqwtHhYN9LJdrXXEipK6yqC97Gl7JznT/VXctOebXqFtdxm1M1zCoxwWwU20rYbNV74VIwIQhhNYaParU7ycVRgxw7wFhImGfy/y4SgHVTOS2Lhj12oDhHVSkhQjyEL4IKlI7Np/5jbZax+NWZjiTUJcDYEK6v6hpw0Skjf7fCBhbiHWTFm0LsBonLhX0b7hKaRYAQKBgQDu6fpxBmqpFy1Vzr/VWIWR9pXNtPqD3aVGWOUm3BuTyTtM8vEr6hcFIzjDae2JzSHTwAlNXQlifx43W630Iq2/AfYLsK1jtfqPRnuB1B4Bd+dixslG5a+mvpYTX0h9nZittWUh07tB8peoRidhnre0kKBZgdsO0XaaEpGkxoaEgQKBgQCwfBEq87wF5a9elUgJuDoqpglFWj8S52YqtolLdtpPpR7CtOLgAQb/ZAZ2Q0knAXcHgNoabqTJ1/psVc33+Lg3bQZyXiy9KUT72SoNhXa+kqWOAqjb4rEqL9x65l1A04Xxd4D0D3Drf0nv4TTaJfjjM/nRRWmqcOEKcvzgakKnVQKBgQCvI9EXCBgqqrXuQGj6kjEgpn581R4MivA82K/rw9Fnjk4tg67ufWWwu3hCMKYUrc8NdqqbDwfxL7TL6iZkYQOzkVF4kmUZQm9Slt21d/UjKG30SDuHAJu6hd5ohyISC/S/6skfeiK9HoS0s/DsrDiJYrhZxUr72uux2Mjx3SMBgQKBgQCX88qoS8Eo5rDO5ANpcviJ/flfgCtscFYUEqQ1mHixOH86r5njup62x/2UV6yla+p7SGMBfSBfNZlFK7+ycLDT8Agr8o/csqrVmQ5PJAmwXf0zP3D6Gb3mj9zq6GuERFtAI1+hQ6Y67ZbQdfwWk7kujnLaz0QCXzwzzfuSkYsgHQKBgFadCh1lJYQcpCjEDD50QAdbfzhVJRSYVEQhj2ekQ+w7hEndXiwptucPt8vs39qRfyXwoez2dWbK9ZUmU3/DTZBtL/1OmpDV2yPYi+xpipgzETB44mQnpcAcvaxU59j0oZQxXsWXHKNfOBzO2KgrReHnY7oUurPPq1A76yEcGmtn',
// 必填-应用公钥证书 路径
'app_public_cert_path' => runtime_path() . '/cert/ali/appCertPublicKey_2021004146699603.crt',
'app_public_cert_path' => config_path('pay') . '/ali/appCertPublicKey_2021004146699603.crt',
// 必填-支付宝公钥证书 路径
'alipay_public_cert_path' => runtime_path() . '/cert/ali/alipayCertPublicKey_RSA2.crt',
'alipay_public_cert_path' => config_path('pay') . '/ali/alipayCertPublicKey_RSA2.crt',
// 必填-支付宝根证书 路径
'alipay_root_cert_path' => runtime_path() . '/cert/ali/alipayRootCert.crt',
'alipay_root_cert_path' => config_path('pay') . '/ali/alipayRootCert.crt',
// 选填-同步回调地址
'return_url' => 'https://erp.lihaink.cn/api/pay/alipay_return',
// 选填-异步回调地址
@ -37,9 +37,9 @@ return [
// 必填-商户秘钥
'mch_secret_key' => '7E00D167C9793006C93F4FB4CF65BCC2',
// 必填-商户私钥 字符串或路径
'mch_secret_cert' => runtime_path() . '/cert/c208f16ad08e6d2516e0b73e6d0ab8da.pem',
'mch_secret_cert' => config_path('pay') . '/wechat/c208f16ad08e6d2516e0b73e6d0ab8da.pem',
// 必填-商户公钥证书路径
'mch_public_cert_path' => runtime_path() . '/cert/82fdc3426e3aeb9e5df91a9547ac5ef3.pem',
'mch_public_cert_path' => config_path('pay') . '/wechat/82fdc3426e3aeb9e5df91a9547ac5ef3.pem',
// 必填
'notify_url' => 'https://erp.lihaink.cn/api/pay/notifyMnp',
// 选填-公众号 的 app_id