112 lines
3.5 KiB
PHP
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);
|
|
});
|
|
}
|
|
} |