multi-store/app/api/controller/IndexController.php
2024-09-21 17:58:12 +08:00

217 lines
7.4 KiB
PHP

<?php
namespace app\api\controller;
use app\admin\logic\store_branch_product\StoreBranchProductLogic;
use app\common\logic\StoreFinanceFlowLogic;
use app\admin\logic\store_product\StoreProductLogic;
use app\admin\validate\tools\GenerateTableValidate;
use app\admin\logic\tools\GeneratorLogic;
use app\api\logic\order\CartLogic;
use app\api\logic\order\OrderLogic as OrderOrderLogic;
use app\common\logic\PayNotifyLogic;
use app\common\logic\store_order\StoreOrderLogic;
use app\common\model\Config as ModelConfig;
use app\common\model\store_branch_product\StoreBranchProduct;
use app\common\model\store_finance_flow\StoreFinanceFlow;
use app\common\model\store_order\StoreOrder;
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
use app\common\model\store_product\StoreProduct;
use app\common\model\system_store\SystemStore;
use app\common\model\user\User;
use app\common\model\warehouse_product\WarehouseProduct;
use app\common\service\pay\PayService;
use app\common\service\PushService;
use app\common\service\wechat\WechatTemplate;
use app\statistics\logic\OrderLogic;
use Exception;
use Overtrue\EasySms\EasySms;
use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
use support\Cache;
use think\facade\Db;
use Webman\Config;
use support\Log;
use Yansongda\Pay\Exception\InvalidSignException;
use Monolog\Handler\RotatingFileHandler;
use Webman\RedisQueue\Redis;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
class IndexController extends BaseApiController
{
public $notNeedLogin = ['index', 'app_update', 'express_list', 'province', 'city', 'area', 'street', 'village', 'brigade', 'config', 'push'];
public function index()
{
// $product_arr=[
// ['product_id'=>1166,'stock'=>17.2],
// ['product_id'=>374,'stock'=>29.6],
// ['product_id'=>823,'stock'=>20],
// ];
// $user_id=0;
// //$store_id=18;//酒店商贩
// $store_id=17;//一条龙门店
// $oid=1390;
// foreach ($product_arr as $k => $v) {
// $v['uid'] = $user_id;
// $v['store_id'] = $store_id;
// $v['cart_num'] = $v['stock'];
// $res = CartLogic::add($v);
// $cartId[] = $res['id'];
// }
// if($user_id > 0){
// $user = User::where('id', $user_id)->find();
// }else{
// $user=null;
// }
// $orderInfo = OrderOrderLogic::cartIdByOrderInfo($cartId, null, $user, ['store_id' => $store_id,'source'=>2]);
// $goods_list = $orderInfo['cart_list'];
// foreach ($goods_list as $k => $v) {
// $goods_list[$k]['oid'] = $oid;
// $goods_list[$k]['uid'] = $user_id;
// $goods_list[$k]['cart_id'] = implode(',', $cartId);
// $goods_list[$k]['delivery_id'] = $store_id; //商家id
// }
// $a=(new StoreOrderCartInfo())->saveAll($goods_list);
// d($a);
return json(1);
$financeFlow = new StoreFinanceFlow();
$financeFlowLogic = new StoreFinanceFlowLogic();
$select_1 = $financeFlow->where('id',16197)->select();
foreach ($select_1 as $k => $v) {
if ($v['other_uid'] > 0) {
$financeFlowLogic->updateStatusUser($v['id'], $v['other_uid'], $v['number'], $v['order_id']);
}
}
}
/**
* @notes 下载文件
*/
public function download()
{
$params = (new GenerateTableValidate())->goCheck('download');
$result = GeneratorLogic::download($params['file']);
if (false === $result) {
return $this->fail(GeneratorLogic::getError() ?: '下载失败');
}
return response()->download($result, 'webman-curd.zip');
}
/**
* @notes 获取app更新信息
*/
public function app_update()
{
$find = Db::name('app_update')->where('type', 2)->order('id', 'desc')->findOrEmpty();
return $this->success('ok', $find);
}
/**
* @notes 获取省列表
*/
public function province()
{
$list = Db::name('geo_province')->select()->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取市列表
*/
public function city()
{
$province_code = $this->request->get('province_code');
$list = Db::name('geo_city')->where('province_code', $province_code)->select()?->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取区列表
*/
public function area()
{
$city_code = $this->request->get('city_code');
$list = Db::name('geo_area')->where('city_code', $city_code)->select()?->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取街道列表
*/
public function street()
{
$area_code = $this->request->get('area_code');
$list = Db::name('geo_street')->where('area_code', $area_code)->select()?->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取村列表
*/
public function village()
{
$area_code = $this->request->get('street_code');
$list = Db::name('geo_village')->where('street_code', $area_code)->select()?->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取队列表
*/
public function brigade()
{
$list = Db::name('geo_brigade')->select()?->toArray();
return $this->success('ok', $list);
}
/**
* @notes 获取队列表
*/
public function config()
{
//处理返回最近的店铺
$params = $this->request->get();
if ((isset($params['lat']) && $params['lat'] != '') && (isset($params['long']) && $params['long'] != '')) {
$latitude = $params['lat'];
$longitude = $params['long'];
// 计算距离的SQL表达式
$distanceExpr = "6371 * 2 * ASIN(SQRT(POWER(SIN(({$latitude} - abs(latitude)) * pi()/180 / 2), 2) + COS({$latitude} * pi()/180) * COS(abs(latitude) * pi()/180) * POWER(SIN(({$longitude} - longitude) * pi()/180 / 2), 2)))";
$find = SystemStore::field("id, name,abbreviation, {$distanceExpr} AS distance")
->where('is_show', '=', 1)
->where('latitude', '<>', '')
->where('longitude', '<>', '')
->order('distance', 'asc') // 根据距离排序
->find();
if (!$find) {
$store_id = getenv('STORE_ID') ?? 1;
$find = SystemStore::where('id', $store_id)->find();
}
} else {
$store_id = getenv('STORE_ID') ?? 1;
$find = SystemStore::where('id', $store_id)->find();
}
$list = [
'id' => $find['id'],
'store_name' => $find['name'],
'abbreviation' => $find['abbreviation'],
];
return $this->success('ok', $list);
}
public function push()
{
$name = $this->request->get('name'); //用户名
$uid = $this->request->get('uid'); //用户id
$type = $this->request->get('type', 'INDUSTRYMEMBERS'); //类型
$a = PushService::push($name, $uid, ['type' => $type, 'msg' => '支付超时,订单已被取消,请重新提交订单', 'data' => ['id' => 5]]);
return $this->success('ok', ['data' => $a]);
}
}