Files
code-bang/backend/application/common/service/DemandBiddingService.php
T
2026-09-17 16:25:31 +08:00

112 lines
3.5 KiB
PHP

<?php
namespace app\common\service;
use app\common\model\demand\Biddings;
use app\common\traits\ServiceTrait;
use Exception;
use think\Db;
class DemandBiddingService
{
use ServiceTrait;
/** @var Biddings */
public static $Model = Biddings::class;
// 竞标状态
const STATUS_BIDDING_NO = 0; //无
const STATUS_BIDDING_ONGOING = 1; //竞标中
const STATUS_BIDDING_WIN = 2; //中标
const STATUS_BIDDING_FAILED = 3; //未中标
const BIDDING_STATUS_MAP = [
self::STATUS_BIDDING_NO => '无',
self::STATUS_BIDDING_ONGOING => '竞标中',
self::STATUS_BIDDING_WIN => '中标',
self::STATUS_BIDDING_FAILED => '未中标',
];
// 竞标状态
const STATUS_PROCESS_NO = 0; //未处理
const STATUS_PROCESS_ONGOING = 1; //待确认
const STATUS_PROCESS_CONFIRMED = 2; //已确认
const STATUS_PROCESS_FAILED = 3; //已拒绝
const STATUS_PROCESS_TIMEOUT = 4; //超时弃权
const PROCESS_STATUS_MAP = [
self::STATUS_PROCESS_NO => '未处理',
self::STATUS_PROCESS_ONGOING => '待确认',
self::STATUS_PROCESS_CONFIRMED => '已确认',
self::STATUS_PROCESS_FAILED => '已拒绝',
self::STATUS_PROCESS_TIMEOUT => '超时弃权',
];
/**
* 创建竞标记录
*
* @param array $data 需求数据
* @param int $userId 用户ID
* @return bool
* @throws Exception
*/
public static function create($data, $userId)
{
$saveData = $data + [
'user_id' => $userId,
'bidding_status' => self::STATUS_BIDDING_ONGOING,
'process_status' => self::STATUS_PROCESS_NO,
];
$result = self::$Model::create($saveData);
if (!$result) {
throw new Exception('需求保存失败');
}
return true;
}
public static function joinBidding()
{
}
/**
* 设为中标
* @param $demandBidding
* @return void
*/
public static function setWin($demandBidding)
{
DB::transaction(function () use ($demandBidding) {
$demandId = $demandBidding->demand_id;
$demand = DemandService::getOne(['id' => $demandId]);
$where = ['demand_id' => $demandId, 'bidding_status' => DemandBiddingService::STATUS_BIDDING_WIN];
$winBidding = DemandBiddingService::where($where)->find();
if ($winBidding) {
exception('请先执行重置投标操作');
}
if ($demandBidding->bidding_status != CommonService::ONGOING) {
exception('用户投标状态异常不能中标');
}
//设置为已中标
$demandBidding->bidding_status = DemandBiddingService::STATUS_BIDDING_WIN;
$demandBidding->process_status = DemandBiddingService::STATUS_PROCESS_ONGOING;
$saveRes = $demandBidding->save();
if (!$saveRes) {
exception('更新中标状态失败');
}
//发送接单成功提醒消息
$msgData = [
'values' => [
$demand->parent_order_no,
mb_substr($demand->desc, 0, 8),
mb_substr($demand->desc, 0, 11),
SubscribeMessageService::MSG_MAP[SubscribeMessageService::MSG_TEMP_DEMAND_RECEIVE]['remark'],
]
];
(new EasyWeChatService())->sendMsg($demandBidding->user_id, SubscribeMessageService::MSG_TEMP_DEMAND_RECEIVE, $msgData);
});
}
}