where('name', 'like', '%' . $data['name'] . '%'); } $list = $model->with(['category','user'])->where('project_type', '=', 0) ->where('is_delete', '=', 0) ->order(['sort' => 'asc', 'create_time' => 'desc']) ->paginate($data); foreach($list as &$val){ $val['finish_time'] = empty($val["finish_time"]) ? '' : date('Y-m-d',$val["finish_time"]); $val['image_list'] = ReleaseProjectImageModel::getImage($val['project_id']); } return $list; } /** * 获取默认数据(分类、设置) */ public function getDefaultData() { $setting = SettingModel::getAll(); $settlement = $setting['settlement']['values'] ?? []; return [ 'category_list' => ReleaseCategoryModel::getALL(), 'demand_price' => $settlement['demand_price'] ?? 0, ]; } /** * 后台发布需求 * @param array $data 表单数据 * @param int $user_id 发布用户ID * @param int $pay_points 是否支付连盟币(0不支付,1支付) * @return bool */ public function addByAdmin($data, $user_id, $pay_points = 0) { // 验证必填项 if (empty($data['name'])) { $this->error = '请输入标题'; return false; } if (empty($data['category_id'])) { $this->error = '请选择分类'; return false; } if (empty($data['price'])) { $this->error = '请输入您的预算'; return false; } if (empty($data['content'])) { $this->error = '请输入详细要求'; return false; } // 验证需求方用户是否存在 $demand_user = DemandUserModel::detail($user_id); if (!$demand_user || $demand_user['is_delete'] == 1) { $this->error = '需求方用户不存在'; return false; } // 如果需要支付连盟币,从设置中获取金额并检查余额 $pay_price = 0; if ($pay_points > 0) { $setting = SettingModel::getAll(); $settlement = $setting['settlement']['values'] ?? []; $pay_price = $settlement['demand_price'] ?? 0; $main_user = \app\common\model\user\User::detail($user_id); if ($main_user['points'] < $pay_price) { $this->error = '用户连盟币不足'; return false; } } $save_data = [ 'user_id' => $user_id, 'name' => $data['name'], 'category_id' => $data['category_id'], 'price' => $data['price'], 'content' => $data['content'], 'product_content' => $data['product_content'] ?? '', 'product_case' => $data['product_case'] ?? '', 'detail' => $data['detail'] ?? '', 'project_type' => 0, // 需求类型 'show_phone' => $data['show_phone'] ?? 1, 'is_show' => $data['is_show'] ?? 1, 'status' => 1, // 后台发布自动通过审核 'app_id' => self::$app_id, ]; if (!empty($data['finish_time']) && $data['finish_time'] != '请选择日期') { $save_data['finish_time'] = strtotime($data['finish_time']); } else { $save_data['finish_time'] = 0; } return $this->transaction(function () use ($data, $save_data, $pay_points, $user_id) { // 记录内容 $this->save($save_data); // 记录图片 $this->saveAllImages($this['project_id'], $data); // 如果需要支付连盟币 if ($pay_points > 0) { // 从设置中获取支付金额 $setting = SettingModel::getAll(); $settlement = $setting['settlement']['values'] ?? []; $pay_price = $settlement['demand_price'] ?? 0; // 减少主用户表的连盟币 \app\common\model\user\User::where('user_id', '=', $user_id)->dec('points', $pay_price)->update(); PointsLogModel::add([ 'user_id' => $user_id, 'value' => -$pay_price, 'describe' => "后台发布需求消耗连盟币", 'app_id' => self::$app_id, ]); } return $this['project_id']; }); } /** * 后台编辑需求 * @param int $project_id 项目ID * @param array $data 表单数据 * @return bool */ public function editByAdmin($project_id, $data) { // 验证必填项 if (empty($data['name'])) { $this->error = '请输入标题'; return false; } if (empty($data['category_id'])) { $this->error = '请选择分类'; return false; } if (empty($data['price'])) { $this->error = '请输入您的预算'; return false; } if (empty($data['content'])) { $this->error = '请输入详细要求'; return false; } $model = self::detail($project_id); if (!$model) { $this->error = '项目不存在'; return false; } $save_data = [ 'name' => $data['name'], 'category_id' => $data['category_id'], 'price' => $data['price'], 'content' => $data['content'], 'product_content' => $data['product_content'] ?? '', 'product_case' => $data['product_case'] ?? '', 'detail' => $data['detail'] ?? '', 'show_phone' => $data['show_phone'] ?? 1, 'is_show' => $data['is_show'] ?? 1, ]; if (!empty($data['finish_time']) && $data['finish_time'] != '请选择日期') { $save_data['finish_time'] = strtotime($data['finish_time']); } else { $save_data['finish_time'] = 0; } return $model->transaction(function () use ($model, $project_id, $data, $save_data) { // 更新内容 $model->save($save_data); // 更新图片 $model->saveAllImages($project_id, $data); return true; }); } /** * 记录图片 */ private function saveAllImages($id, $formData) { (new ReleaseProjectImageModel())->where("project_id", "=", $id)->delete(); // 生成图片数据 if (!empty($formData['image_list']) && is_array($formData['image_list'])) { $imageData = []; foreach ($formData['image_list'] as $imageItem) { // 处理图片ID:可能是对象数组或纯ID $image_id = 0; if (is_array($imageItem)) { $image_id = !empty($imageItem['image_id']) ? $imageItem['image_id'] : ($imageItem['file_id'] ?? 0); } elseif (is_numeric($imageItem)) { $image_id = $imageItem; } if ($image_id > 0) { $imageData[] = [ 'project_id' => $id, 'image_id' => $image_id, 'app_id' => self::$app_id ]; } } if (!empty($imageData)) { $model = new ReleaseProjectImageModel; return $model->saveAll($imageData); } } return true; } /** * 审核 */ public function submit($param) { $data = ['status' => $param['status']]; if ($param['status'] == 2) { $data['reject_reason'] = $param['reject_reason']; } // 更新申请记录 $data['audit_time'] = time(); self::update($data, ['project_id' => $param['project_id']]); return true; } /** * 软删除 */ public function setDelete() { return $this->save(['is_delete' => 1]); } }