<?php
|
|
namespace app\shop\model\plus\release;
|
|
use app\common\model\plus\release\Project as ProjectModel;
|
use app\common\model\plus\release\ReleaseProjectImage as ReleaseProjectImageModel;
|
use app\common\model\plus\release\ReleaseCategory as ReleaseCategoryModel;
|
use app\common\model\plus\release\DemandUser as DemandUserModel;
|
use app\common\model\plus\release\Setting as SettingModel;
|
use app\common\model\user\PointsLog as PointsLogModel;
|
|
/**
|
* 模型
|
*/
|
class DemandProject extends ProjectModel
|
{
|
/**
|
* 获取列表记录
|
*/
|
public function getList($data)
|
{
|
$model = $this;
|
// 查询条件
|
if (!empty($data['name'])) {
|
$model = $model->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]);
|
}
|
|
}
|