This commit is contained in:
2026-08-12 15:31:07 +08:00
parent b8cd7e7658
commit 831113e22f
4 changed files with 193 additions and 11 deletions

View File

@@ -6,6 +6,7 @@ use app\common\model\Tickets;
use app\common\model\CompanyOperators;
use app\common\model\Companys;
use app\common\model\User;
use think\facade\Db;
class TicketService
{
@@ -57,28 +58,41 @@ class TicketService
/**
* 新增工单
*
*/
public function createTicket(array $data)
{
if (!isset($data['website']) || trim((string)$data['website'] === '')) { // isset检查键存在且不为null
if (!isset($data['website']) || trim((string)$data['website']) === '') { // isset检查键存在且不为null
throw new \Exception('网站输入不能为空');
}
// 统一查重与落库值
$website = trim($data['website']);
$data['website'] = $website;
$unfinishedTicket = Tickets::where('website', $website) // 查找是否有未完成的同网站工单
->whereIn('status', [0, 1])
->find();
$ticketResult = Db::transaction(function () use ($data, $website) {
$unfinishedTicket = Tickets::where('website', $website) // 查找是否有未完成的同网站工单
->whereIn('status', [0, 1])
->lock(true)
->find();
if ($unfinishedTicket) {
if (empty($data['confirm'])) {
throw new \Exception('已存在未分配或进行中的相同工单,是否继续创建?', 409);
if ($unfinishedTicket) {
// 同运营判断(为null或者相同运营)
$sameOperator = is_null($unfinishedTicket->operator_id) || $unfinishedTicket->operator_id === (intval($data['operator_id']) ?? null);
if ($sameOperator) {
throw new \Exception('存在相同未完成工单(相同运营),禁止重复创建'); // 默认400
}
if (empty($data['confirm'])) {
throw new \Exception('存在相同未完成工单(不同运营),是否继续创建?', 409);
}
}
}
// 当前无相同网站
$ticketResult = Tickets::create($data);
unset($data['confirm']); // 移除确认标记,避免落库
return Tickets::create($data); // 创建新工单
});
// 通知前端实时刷新(静默,广播服务不可用不影响主流程)
TicketNotifier::notify($ticketResult->id, 'create');