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; } }