Merge pull request 'dev' (#91) from dev into master

Reviewed-on: #91
This commit is contained in:
mkm 2023-12-04 16:02:35 +08:00
commit d505b2a211
17 changed files with 605 additions and 108 deletions

View File

@ -0,0 +1,84 @@
<?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\middleware;
use app\Request;
use crmeb\exceptions\AuthException;
use think\exception\ValidateException;
use think\Response;
use Throwable;
class SignMiddleware extends BaseMiddleware
{
/**
* @param Request $request
* @throws Throwable
* @author xaboy
* @day 2020-04-10
*/
public function before(Request $request)
{
try {
$appid = $request->header('appid');
$timestamp = $request->header('timestamp');
$sign = $request->header('sign');
// 中台系统secret
$appSecret = 'St@tF!8r@fgjCu88fJB9eo4PTRHxsntC';
$this->verifySign(['appid'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign], $appSecret);
} catch (AuthException $e) {
$eArray = ($e->getResponse())->getData();
throw new AuthException($eArray['message'] ?? '非法签名');
return;
} catch (Throwable $e) {
throw new AuthException('非法请求');
return;
}
}
public function after(Response $response)
{
}
private function makeSign($data, $appSecret)
{
ksort($data);
$string = "";
foreach ($data as $k => $v) {
if ($k == "sign" || is_array($v)) {
continue;
}
$string .= $k . "=" . $v . "&";
}
$string = trim($string, "&");
$string = $string . "&key=" . $appSecret;
$string = md5(md5($string));
return strtolower($string);
}
private function verifySign($data, $appSecret)
{
// 验证请求, 10秒钟失效
if (time() - ($data['timestamp'] ?? 0) > 10) {
throw new AuthException('签名已失效');
}
// 比对签名
$clientSign = $data['sign'] ?? '';
$serverSign = $this->makeSign($data, $appSecret);
if ($clientSign != $serverSign) {
throw new AuthException('签名校验失败');
}
}
}

View File

@ -239,7 +239,7 @@ class ProductRepository extends BaseRepository
$result = $this->dao->create($product);
$settleParams = $this->setAttrValue($data, $result->product_id, $productType, 0, $data['mer_id']);
if(isset($data['mer_cate_id']) &&$data['mer_cate_id']!=0){
if (isset($data['mer_cate_id']) && count($data['mer_cate_id']) != 0) {
$settleParams['cate'] = $this->setMerCate($data['mer_cate_id'], $result->product_id, $data['mer_id']);
}
$settleParams['attr'] = $this->setAttr($data['attr'], $result->product_id);
@ -277,7 +277,11 @@ class ProductRepository extends BaseRepository
event('product.update.before', compact('id', 'data', 'merId', 'productType', 'conType'));
$spuData = $product = $this->setProduct($data);
$settleParams = $this->setAttrValue($data, $id, $productType, 1, $merId);
if (isset($data['mer_cate_id']) && count($data['mer_cate_id']) != 0 ) {
if($data['mer_cate_id'][0]!=0){
$settleParams['cate'] = $this->setMerCate($data['mer_cate_id'], $id, $merId);
}
}
$settleParams['attr'] = $this->setAttr($data['attr'], $id);
$content = [
'content' => $conType ? json_encode($data['content']) : $data['content'],
@ -988,6 +992,7 @@ class ProductRepository extends BaseRepository
'storeCategory',
'brand',
'merchant',
'attrValue'
]);
$count = $query->count();
$data = $query->page($page, $limit)->setOption('field', [])->field($this->admin_filed)->select();

View File

@ -6,6 +6,7 @@ use app\common\repositories\BaseRepository;
use crmeb\basic\BaseController;
use think\App;
use think\exception\ValidateException;
use think\facade\Db;
class Logistics extends BaseController
{
@ -33,4 +34,31 @@ class Logistics extends BaseController
$count = count($list);
return app('json')->success(compact('count', 'list'));
}
// 镇级最新物流配送详情
public function latestLogistics()
{
if ($this->streetCode == '') {
return app('json')->fail('未获取到位置信息');
}
$detail = Db::name('store_order')->alias('o')
->field(['o.order_sn', 'o.real_name', 'o.user_phone', 'o.user_address', 'o.user_address_code', 'p.store_name', 'm.mer_name', 'o.create_time', 'o.status','m.area_id', 'm.street_id', 'm.village_id', 'm.mer_address', 'm.long as mer_long', 'm.lat as mer_lat'])
->leftJoin('product_order_log og', 'o.order_id = og.order_id')
->leftJoin('merchant m', 'o.mer_id = m.mer_id')
->leftJoin('store_order_product op', 'o.order_id = op.order_id')
->leftJoin('product_library p', 'op.product_id = p.id')
->where('og.street_code', $this->streetCode)
->order('o.order_id', 'desc')
->find();
// 拼接商户的详细地址 area_id street_id village_id
$area = Db::name('geo_area')->where('area_code', $detail['area_id'])->find();
$city = Db::name('geo_city')->where('city_code', $area['city_code'])->find();
$province = Db::name('geo_province')->where('province_code', $city['province_code'])->find();
$street = Db::name('geo_street')->where('street_code', $detail['street_id'])->find();
$village = Db::name('geo_village')->where('village_id', $detail['village_id'])->find();
$merAddress = $province['province_name'] . $city['city_name'] . $area['area_name'] . $street['street_name'].$village['village_name'].$detail['mer_address'];
$detail['mer_address'] = $merAddress;
$detail['status'] = app()->make(Order::class)->getStatusDesc($detail['status']);
return app('json')->success($detail);
}
}

View File

@ -152,7 +152,7 @@ class Order extends BaseController
return app('json')->success(compact('orderCount', 'townOrderList'));
}
private function getStatusDesc($status)
public function getStatusDesc($status)
{
// 订单状态0待发货1待收货2待评价3已完成 9: 拼团中 10: 待付尾款 11:尾款超时未付 -1已退款
$desc = [

View File

@ -62,17 +62,17 @@ class Merchant extends BaseController
if (empty($where['type_id'])) {
$where['type_id'] =[10,17];
}
// if($where['store_category_id']>0){
// $arr= Db::name('store_category')->where(['pid'=>$where['store_category_id'],'mer_id'=>0,'level'=>1,'is_show'=>1])->column('cate_name');
// if($arr){
// $category_id=Db::name('merchant_category')->whereIn('category_name',$arr)->column('merchant_category_id');
// if($category_id){
// $where['category_id']=implode(',',$category_id);
// }
// }
// unset($where['store_category_id']);
// }
$where['category_id']=$where['store_category_id']??'';
if($where['store_category_id']>0){
$arr= Db::name('store_category')->where(['pid'=>$where['store_category_id'],'mer_id'=>0,'level'=>1,'is_show'=>1])->column('cate_name');
if($arr){
$category_id=Db::name('merchant_category')->whereIn('category_name',$arr)->column('merchant_category_id');
if($category_id){
$where['category_id']=implode(',',$category_id);
}
}
unset($where['store_category_id']);
}
// $where['category_id']=$where['store_category_id']??'';
return app('json')->success($this->repository->getList($where, $page, $limit, $this->userInfo));
}

View File

@ -0,0 +1,45 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use think\facade\Db;
use app\common\repositories\system\merchant\MerchantRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class Merchant extends BaseController
{
protected $repository;
public function __construct(App $app, MerchantRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function get_area(){
$city_code = $this->request->param('city_code', '');
$select = Db::name('geo_area')->where('city_code',$city_code)->field('area_id id,area_code code,area_name name')->select();
return app('json')->success($select);
}
public function count()
{
$where = $this->request->params(['keyword', 'date', 'status', 'statusTag', 'is_trader', 'category_id', 'type_id']);
return app('json')->success($this->repository->count($where));
}
public function lst()
{
[$page, $limit] = $this->getPage();
$where = $this->request->params(['keyword', 'date', 'status', 'statusTag', 'is_trader', 'category_id', 'type_id', 'area_id', 'street_id']);
return app('json')->success($this->repository->lst($where, $page, $limit));
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use think\facade\Db;
use app\common\repositories\system\merchant\MerchantCategoryRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class MerchantCategory extends BaseController
{
protected $repository;
public function __construct(App $app, MerchantCategoryRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function getOptions()
{
return app('json')->success($this->repository->allOptions());
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use think\facade\Db;
use app\common\repositories\system\merchant\MerchantTypeRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class MerchantType extends BaseController
{
protected $repository;
public function __construct(App $app, MerchantTypeRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function options()
{
return app('json')->success($this->repository->getOptions());
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\store\product\ProductLabelRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class ProductLabel extends BaseController
{
protected $repository;
public function __construct(App $app, ProductLabelRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function getOptions()
{
$data = $this->repository->getOptions(0);
return app('json')->success($data);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\store\StoreCategoryRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class StoreCategory extends BaseController
{
protected $repository;
public function __construct(App $app, StoreCategoryRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function getList()
{
$type = $this->request->param('type',null);
$lv = $this->request->param('lv',null);
if (!is_null($lv)) $lv = $lv + 1;
$data = $this->repository->getList($type, $lv);
return app('json')->success($data);
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\system\merchant\MerchantRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class StoreProduct extends BaseController
{
protected $repository;
public function __construct(App $app, ProductRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function getStatusFilter()
{
return app('json')->success($this->repository->getFilter(null,'商品',0));
}
public function lst()
{
[$page, $limit] = $this->getPage();
$where = $this->request->params(['cate_id', 'keyword', ['type', 1], 'mer_cate_id', 'pid','store_name','is_trader','us_status','product_id','star','sys_labels','hot_type','svip_price_type']);
$mer_id = $this->request->param('mer_id','');
$merId = $mer_id ? $mer_id : null;
$where['is_gift_bag'] = 0;
$_where = $this->repository->switchType($where['type'], null,0);
unset($_where['product_type']);
unset($_where['star']);
$where = array_merge($where, $_where);
return app('json')->success($this->repository->getAdminList($merId, $where, $page, $limit));
}
public function lists()
{
$make = app()->make(MerchantRepository::class);
$data = $make->selectWhere(['is_del' => 0],'mer_id,mer_name');
return app('json')->success($data);
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\user\UserRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class User extends BaseController
{
protected $repository;
public function __construct(App $app, UserRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function lst()
{
$where = $this->request->params([
'label_id',
'user_type',
'sex',
'is_promoter',
'country',
'pay_count',
'user_time_type',
'user_time',
'nickname',
'province',
'city',
'group_id',
'phone',
'uid',
]);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getList($where, $page, $limit));
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\user\UserGroupRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class UserGroup extends BaseController
{
protected $repository;
public function __construct(App $app, UserGroupRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function lst()
{
$page = 1;
$limit = 9999;
return app('json')->success($this->repository->getList([], $page, $limit));
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace app\controller\middle;
use crmeb\basic\BaseController;
use think\App;
use app\common\repositories\user\UserLabelRepository;
/**
* Class Auth
* @package app\controller\api
* @author xaboy
* @day 2020-05-06
*/
class UserLabel extends BaseController
{
protected $repository;
public function __construct(App $app, UserLabelRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function lst()
{
$page = 1;
$limit = 9999;
$where = $this->request->params(['type', 'all']);
$where['mer_id'] = $this->request->merId();
return app('json')->success($this->repository->getList($where, $page, $limit));
}
}

View File

@ -66,9 +66,13 @@ class SpreadsheetExcelService
]
];
private function __construct(){}
private function __construct()
{
}
private function __clone(){}
private function __clone()
{
}
public static function instance()
{
@ -371,6 +375,7 @@ class SpreadsheetExcelService
*/
public function checkImport($filePath, $check = [], $is_limit = false, $count = 1000)
{
try {
$ext = ucfirst(pathinfo($filePath, PATHINFO_EXTENSION));
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($ext);
$spreadsheet = $reader->load($filePath);
@ -388,7 +393,9 @@ class SpreadsheetExcelService
if ($_c !== $c) throw new ValidateException('表格"' . $s . '"不是"' . $c . '"不可导入');
}
}
} catch (\Exception $e) {
throw new ValidateException('表格中有无法解析的编码,请重新设置表格');
}
return true;
}
}

View File

@ -721,6 +721,7 @@ Route::group('api/', function () {
Route::get('order_ranking', 'Order/orderRanking');
Route::get('delivered_product_ranking', 'Order/deliveredProductRanking');
Route::get('vehicle_list', 'Logistics/vehicleList');
Route::get('latest_logistics', 'Logistics/latestLogistics');
})->prefix('api.dataview.');
})->middleware(AllowOriginMiddleware::class)

33
route/middle.php Executable file
View File

@ -0,0 +1,33 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
use app\common\middleware\SignMiddleware;
use think\facade\Route;
Route::group('middle/', function () {
Route::any('product/label/option', 'middle.ProductLabel/getOptions');
Route::any('store/product/lst_filter', 'middle.StoreProduct/getStatusFilter');
Route::any('store/product/lst', 'middle.StoreProduct/lst');
Route::any('store/product/mer_select', 'middle.StoreProduct/lists');
Route::any('store/category/list', 'middle.StoreCategory/getList');
Route::any('user/group/lst', 'middle.UserGroup/lst');
Route::any('user/label/lst', 'middle.UserLabel/lst');
Route::any('user/lst', 'middle.User/lst');
Route::any('merchant/city/get_area', 'middle.Merchant/get_area');
Route::any('merchant/count', 'middle.Merchant/count');
Route::any('merchant/category/options', 'middle.MerchantCategory/getOptions');
Route::any('merchant/type/options', 'middle.MerchantType/options');
Route::any('merchant/lst', 'middle.Merchant/lst');
})->middleware(SignMiddleware::class);