wip
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user