123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- namespace app\admin\controller\commission;
- use app\common\controller\Backend;
- use app\common\model\commission\CommissionGoods as CommissionGoodsModel;
- use app\common\model\Goods as GoodsModel;
- use app\common\model\commission\Level as LevelModel;
- use app\common\Enum\CommissionGoodsEnum;
- use think\Db;
- class Goods extends Backend
- {
- protected $model = null;
- protected $goodsModel;
-
- /**
- * 快速搜索时执行查找的字段
- */
- protected $searchFields = 'id,title,subtitle';
-
- /**
- * 是否是关联查询
- */
- protected $relationSearch = false;
- public function _initialize()
- {
- parent::_initialize();
- $this->model = new GoodsModel(); // 使用商品模型作为主模型,以便使用FastAdmin的标准功能
- $this->goodsModel = new GoodsModel();
-
- // 传递枚举配置给前端
- $this->assignconfig('commission_goods_participate_list', CommissionGoodsEnum::$participateList);
- $this->assignconfig('commission_goods_order_status_list', CommissionGoodsEnum::$orderStatusList);
- $this->assignconfig('commission_goods_rule_type_list', CommissionGoodsEnum::$ruleTypeList);
- $this->assignconfig('commission_goods_level_list', CommissionGoodsEnum::$levelList);
- $this->assignconfig('commission_goods_self_buy_list', CommissionGoodsEnum::$selfBuyList);
- $this->assignconfig('commission_goods_settlement_list', CommissionGoodsEnum::$settlementList);
- $this->assignconfig('commission_goods_commission_settlement_list', CommissionGoodsEnum::$commissionSettlementList);
- $this->assignconfig('commission_goods_commission_type_list', CommissionGoodsEnum::$commissionTypeList);
- }
- public function index()
- {
- if (!$this->request->isAjax()) {
- return $this->view->fetch();
- }
- //如果发送的来源是 Selectpage,则转发到 Selectpage
- if ($this->request->request('keyField')) {
- return $this->selectpage();
- }
-
- [$where, $sort, $order, $offset, $limit] = $this->buildparams();
-
- $list = $this->model
- ->with('commission_goods')
- ->where($where)
- ->order($sort, $order)
- ->paginate($limit);
-
- $result = ['total' => $list->total(), 'rows' => $list->items()];
- return json($result);
- }
- /**
- * 详情
- *
- * @param $id
- */
- public function detail($id)
- {
- $goodsList = collection(GoodsModel::with(['commission_goods'])->whereIn('id', $id)->select())->each(function ($goods) {
- $goods->skus = $goods->skus;
- $goods->sku_prices = $goods->sku_prices;
- });
- // 获取分销配置
- $config = [
- 'participate_list' => CommissionGoodsEnum::$participateList,
- 'rule_type_list' => CommissionGoodsEnum::$ruleTypeList,
- 'level_list' => CommissionGoodsEnum::$levelList
- ];
-
- $this->success('分销商品详情', null, [
- 'goods' => $goodsList,
- 'config' => $config
- ]);
- }
- /**
- * 设置佣金
- *
- * @param $ids
- */
- public function edit($ids = null)
- {
- if (!$this->request->isPost()) {
- // GET请求,显示设置页面
- $goodsIds = explode(',', $ids);
- $goodsList = GoodsModel::whereIn('id', $goodsIds)
- ->with(['commission_goods'])
- ->select();
-
- // 获取分销商等级列表
- $levelList = LevelModel::where('status', 'normal')
- ->order('level asc')
- ->select();
-
- $this->view->assign([
- 'goods_list' => $goodsList,
- 'level_list' => $levelList,
- 'goods_ids' => $ids
- ]);
-
- return $this->view->fetch();
- }
- // POST请求,保存设置
- $params = $this->request->post();
-
- // 验证必需参数
- if (empty($ids)) {
- $this->error('商品ID不能为空');
- }
- $result = Db::transaction(function () use ($ids, $params) {
- $goodsIds = explode(',', $ids);
- $count = 0;
- foreach ($goodsIds as $goods_id) {
- $goods_id = intval($goods_id);
- if ($goods_id <= 0) continue;
- // 查找或创建分销商品记录
- $commissionGoods = CommissionGoodsModel::where('goods_id', $goods_id)->find();
- if (!$commissionGoods) {
- $commissionGoods = new CommissionGoodsModel();
- $commissionGoods->goods_id = $goods_id;
- }
- // 保存基本设置
- $commissionGoods->status = intval($params['status'] ?? CommissionGoodsEnum::PARTICIPATE_NO);
- $commissionGoods->order_status = intval($params['order_status'] ?? CommissionGoodsEnum::ORDER_STATUS_YES);
- $commissionGoods->rule_type = intval($params['rule_type'] ?? CommissionGoodsEnum::RULE_TYPE_DEFAULT);
- $commissionGoods->self_buy = intval($params['self_buy'] ?? CommissionGoodsEnum::SELF_BUY_OFF);
- $commissionGoods->settlement_type = intval($params['settlement_type'] ?? CommissionGoodsEnum::SETTLEMENT_GOODS_PRICE);
- $commissionGoods->commission_settlement = intval($params['commission_settlement'] ?? CommissionGoodsEnum::COMMISSION_AFTER_PAY);
-
- // 保存扩展配置
- $config = [];
- if (!empty($params['config'])) {
- $config = is_array($params['config']) ? $params['config'] : json_decode($params['config'], true);
- }
- $commissionGoods->config = $config;
- $commissionGoods->save();
- // 如果是独立规则或批量规则,保存佣金规则
- if (in_array($commissionGoods->rule_type, [CommissionGoodsEnum::RULE_TYPE_CUSTOM, CommissionGoodsEnum::RULE_TYPE_BATCH])) {
- if (!empty($params['commission_rules'])) {
- $this->saveCommissionRules($goods_id, $params['commission_rules'], $commissionGoods->rule_type);
- }
- }
- $count++;
- }
- return $count;
- });
- if ($result) {
- $this->success('设置成功', '', $result);
- } else {
- $this->error('设置失败');
- }
- }
- /**
- * 保存佣金规则
- */
- private function saveCommissionRules($goodsId, $rulesData, $ruleType)
- {
- // 删除现有规则
- Db::name('commission_goods_rules')
- ->where('goods_id', $goodsId)
- ->delete();
- if (empty($rulesData) || !is_array($rulesData)) {
- return true;
- }
- $insertData = [];
-
- foreach ($rulesData as $agentLevel => $levelRules) {
- if (!is_array($levelRules)) continue;
-
- foreach ($levelRules as $commissionLevel => $rule) {
- if (empty($rule['value']) || bccomp($rule['value'], '0', 4) <= 0) {
- continue;
- }
-
- $insertData[] = [
- 'goods_id' => $goodsId,
- 'sku_id' => 0, // 批量规则统一为0,独立规则需要具体SKU ID
- 'agent_level' => intval($agentLevel),
- 'commission_level' => intval($commissionLevel),
- 'type' => $rule['type'] ?? 'rate',
- 'value' => floatval($rule['value']),
- 'status' => 1,
- 'createtime' => time(),
- 'updatetime' => time()
- ];
- }
- }
- if (!empty($insertData)) {
- return Db::name('commission_goods_rules')->insertAll($insertData);
- }
- return true;
- }
- }
|