我有一个停车系统,后端使用Angular 6 + Laravel,但有一个特定的问题,我不知道正确的方法。
公园有两个图腾,向我的服务器发送一个条目。我仅在客户从出口离开图腾并前往付款区时检查客户是否无效。
这是我的代码,当他放入已读取EAN_13条码的票证时。这是退出图腾准备好的我的代码:
public function getEntrysDataByEan(Request $request)
{
if (isset($request)) {
$entryean = $request->input('entryean13');
$entry = $this->mdMovEntry->getEntrysDataByEan($entryean);
if (empty($entry)) {
$response["success"] = 0;
$response["message"] = "Não existe nenhuma entrada correspondente";
} else {
$nowHour = Carbon::now();
$enterHour = Carbon::parse($entry[0]->updated_at);
$difmin = $enterHour->diffInMinutes($nowHour);
$dif = $enterHour->diffInHours($nowHour);
if ($difmin <= 20) {
$this->mdMovEntry->validatedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at), $nowHour);
$entry[0]->validated = 'S';
} else {
$this->mdMovEntry->devaluedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at));
$entry[0]->validated = 'N';
}
$response["success"] = 1;
$response["message"] = "Entrada retornada com sucesso";
$response["entry"] = $entry;
}
} else {
$response["success"] = 0;
$response["message"] = "Nenhum dado enviado";
}
return $response;
}
问题是,我认为如果客户可以外出,那么要阅读的内容太多了,因此我从Laravel搜索了Task Scheduling方法和Job方法,却找不到任何问题。
我想要的是当“输入图腾”区域在我的数据库上插入时,我创建了一些作业或任务,在20分钟后,他将使其无效的每个新记录。
当客户外出时,系统只对数据库执行getEntry并检查其是否经过验证。
我该如何实现?我之所以这样问,是因为Task的每个示例都是全局执行,但我只希望每条新记录都可能有一个任务?
答案 0 :(得分:0)
请考虑将model events与delayed dispatching一起用于排队的作业。
当新条目插入数据库时,以下内容将监听softs = []
with open('software.txt', 'r') as s:
for line in s:
source = requests.get(line).text
soup = BeautifulSoup(source, 'lxml')
for link in soup.find_all('a'):
softs.append(link.get('href'))
print(softs)
事件,并分派延迟20分钟的作业以稍后使该条目无效。
InvalidateEntry作业
created
条目模型
class InvalidateEntry implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $entry;
/**
* Create a new job instance.
*
* @param Entry $entry
* @return void
*/
public function __construct(Entry $entry)
{
$this->entry = $entry;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
// you'll probably need to add some conditional logic
// before updating the entry to determine if the
// action is still required.
$isEntryInvalid = ...;
if ($isEntryInvalid) {
$this->entry->update([
'validated' => 'N'
]);
} else {
// delete the job from the queue
$this->delete();
}
}
}