Files
huangjingfen/pro_v3.5.1_副本/app/controller/api/v2/PublicController.php

176 lines
7.1 KiB
PHP
Raw Normal View History

feat(fsgx): 完成全部24项开发任务 Phase1-7 Phase1 后端核心: - 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess) - SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机) - StoreOrderCreateServices 周期循环佣金计算 - StoreOrderTakeServices 佣金发放后同步冻结积分 - StoreProductServices/StoreProduct 保存 is_queue_goods Phase2 后端接口: - GET /api/hjf/brokerage/progress 佣金周期进度 - GET /api/hjf/assets/overview 资产总览 - HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务 - PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口 - GET /adminapi/hjf/points/release_log 积分日志接口 Phase3 前端清理: - hjfCustom.js 路由精简(仅保留 points/log) - hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口 - pages.json 公排→推荐佣金/佣金记录/佣金规则 Phase4-5 前端改造: - queue/status.vue 推荐佣金进度页整体重写 - 商品详情/订单确认/支付结果页文案与逻辑改造 - 个人中心/资产页/引导页/规则页文案改造 - HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造 - 推广中心嵌入佣金进度摘要 - hjfMockData.js 全量更新(公排字段→佣金字段) Phase6 Admin 增强: - 用户列表新增 frozen_points/available_points 列及不考核操作按钮 - hjfPoints.js USE_MOCK=false 对接真实积分日志接口 Phase7 配置文档: - docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单 Made-with: Cursor
2026-03-23 22:32:19 +08:00
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\api\v2;
use app\Request;
use app\services\diy\DiyServices;
use app\services\other\CityAreaServices;
use app\services\product\category\StoreProductCategoryServices;
use app\services\product\product\StoreProductServices;
use app\services\wechat\WechatUserServices;
use crmeb\services\CacheService;
use crmeb\services\SystemConfigService;
class PublicController
{
/**
* 主页获取
* @param Request $request
* @return mixed
*/
public function index(Request $request)
{
$uid = $request->hasMacro('uid') ? (int)$request->uid() : 0;
$data = SystemConfigService::more(['fast_number', 'bast_number', 'first_number', 'promotion_number', 'tengxun_map_key', 'site_name']);
$site_name = $data['site_name'] ?? '';
$tengxun_map_key = $data['tengxun_map_key'] ?? '';
$fastNumber = (int)($data['fast_number'] ?? 0);// 快速选择分类个数
$bastNumber = (int)($data['bast_number'] ?? 0);// 精品推荐个数
$firstNumber = (int)($data['first_number'] ?? 0);// 首发新品个数
$promotionNumber = (int)($data['promotion_number'] ?? 0);// 首发新品个数
$info['fastList'] = [];
if ($fastNumber) {
/** @var StoreProductCategoryServices $categoryService */
$categoryService = app()->make(StoreProductCategoryServices::class);
$info['fastList'] = $categoryService->byIndexList($fastNumber, 'id,cate_name,pid,pic');// 快速选择分类个数
}
/** @var StoreProductServices $storeProductServices */
$storeProductServices = app()->make(StoreProductServices::class);
$info['bastList'] = $bastNumber ? $storeProductServices->getRecommendProduct($uid, ['is_best' => 1], $bastNumber) : [];// 精品推荐个数
$info['firstList'] = $firstNumber ? $storeProductServices->getRecommendProduct($uid, ['is_new' => 1], $firstNumber) : [];// 首发新品个数
$benefit = $promotionNumber ? $storeProductServices->getRecommendProduct($uid, ['is_benefit' => 1], $promotionNumber) : [];// 首页促销单品
$likeInfo = $storeProductServices->getRecommendProduct($uid, ['is_hot' => 1], 3);// 热门榜单 猜你喜欢
if ($request->uid()) {
/** @var WechatUserServices $wechatUserService */
$wechatUserService = app()->make(WechatUserServices::class);
$subscribe = (bool)$wechatUserService->value(['uid' => $request->uid(), 'user_type' => 'wechat'], 'subscribe');
} else {
$subscribe = true;
}
return app('json')->successful(compact('info', 'benefit', 'likeInfo', 'subscribe', 'tengxun_map_key', 'site_name'));
}
/**
* 获取页面数据
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getDiy($name = '')
{
/** @var DiyServices $diyService */
$diyService = app()->make(DiyServices::class);
$data = CacheService::redisHandler('diy')->remember('diy_' . $name, function () use ($name, $diyService) {
$data = $diyService->getDiy($name);
if (isset($data['f_scroll_box']['goodsList']['list'])) {
$data['f_scroll_box']['goodsList']['list'] = get_thumb_water($data['f_scroll_box']['goodsList']['list'], 'small', ['pic']);
}
return $data;
});
return app('json')->successful($data);
}
/**
* 是否强制绑定手机号
* @return mixed
*/
public function bindPhoneStatus()
{
$status = (bool)sys_config('store_user_mobile');
return app('json')->success(compact('status'));
}
/**
* 是否关注
* @param Request $request
* @param WechatUserServices $services
* @return mixed
*/
public function subscribe(Request $request, WechatUserServices $services)
{
return app('json')->success(['subscribe' => (bool)$services->value(['uid' => $request->uid(), 'user_type' => 'wechat'], 'subscribe')]);
}
/**
* 获取提货点自提开启状态
* @return mixed
*/
public function getStoreStatus()
{
$data['store_status'] = 0;
if (sys_config('store_func_status', 1)) {
$data['store_status'] = sys_config('store_self_mention', 0);
}
return app('json')->successful($data);
}
/**
* 获取颜色选择和分类模板选择
* @param DiyServices $services
* @param $name
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function colorChange(DiyServices $services, $name)
{
$colorData = $services->getColorChange((string)$name);
$status = (int)$colorData['value'];
$color_data = json_decode($colorData['color_data'], true);
$navigation = (int)sys_config('navigation_open');
$product_category_level = (int)sys_config('product_category_level');//商品分类层级
return app('json')->success(compact('status', 'color_data', 'navigation', 'product_category_level'));
}
/**
* 获取城市
* @param CityAreaServices $services
* @return mixed
*/
public function city(Request $request, CityAreaServices $services)
{
$pid = $request->get('pid', 0);
return app('json')->success($services->getCityTreeList((int)$pid));
}
/**
* 解析(获取导入微信地址)
* @param CityAreaServices $services
* @return mixed
*/
public function cityList(Request $request, CityAreaServices $services)
{
$address = $request->param('address', '');
if (!$address)
return app('json')->fail('地址不存在');
$city = $services->searchCity(compact('address'));
if (!$city) return app('json')->fail('地址暂未录入,请联系管理员');
$where = [['id', 'in', array_merge([$city['id']], explode('/', trim($city->path, '/')))]];
return app('json')->success($services->getCityList($where, 'id as value,id,name as label,parent_id as pid', ['children']));
}
/**
* 获取客服类型配置
* @return mixed
*/
public function getCustomerType()
{
$data = SystemConfigService::more(['routine_contact_type', 'customer_type', 'customer_phone', 'customer_url', 'wechat_work_corpid']);
$data['userInfo'] = [];
return app('json')->success($data);
}
}