1.公司要實現一個業(yè)務邏輯:一天一個手機號碼phone只能提交一次訂單。
目前這個業(yè)務邏輯不涉及高并發(fā)等場景,大概也就是幾分鐘一次訂單;
2.在編寫了簡單的表單驗證之后,使用laravel5.4有如下代碼;
/**
* 臨時訂單生成
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws ApiException
*/
public function AdvertisementUserOrder(Request $request){
PcUserValidator::GcCheCkAdvertisement(1001);//表單驗證
$temporay_order = DB::select('select id from o2o_temporary_order where to_days(created_at) = to_days(now()) and phone = :phone', [':phone'=>$request->phone]);
if ($temporay_order) {
throw new ApiException(3020, '今天已申請過訂單,請等待處理!');
}
//判斷來源是否正確
$source = config('constants.user.source');
if ($request->has('source')){
if (count($source) >= $request->input('source') && $request->input('source') > 0){
$source_input = $request->input('source');
}else{
$source_input = 1;
}
}else{
$source_input = 1;
}
$temporay = DB::insert('insert into o2o_temporary_order (phone, username, source,created_at,updated_at) values (?, ?, ?,?,?)',
[$request->phone, $request->username, $source_input, date('Y-m-d H:i:s', time()), date('Y-m-d H:i:s', time())]);
if (!$temporay){
throw new ApiException(3020,'添加失敗');
}
return $this->success();
}
3.在本地經過簡單的表單測試后一切正常上線;
4.問題出現在數據庫會在某種情況下出現數據重復錄入,但前臺js已經做好了重復提交等功能,而且就算是重復提交了,這時候第二次請求應該會被return;
5.數據庫相關
6.為了模擬類似的情況發(fā)生,用linux做了定時任務,建了一個臨時表用相同的代碼每分鐘訪問一次接口。發(fā)現并不會出現重復的數據
可以在表單驗證里完成,代碼:
public function rules() {
return [
'phone' => [
'required',
'string',
'size:11',
'regex:/^1[3-8]{1}[0-9]{9}$/',
Rule::unique('o2o_temporary_order')->where(function ($query) {
$query->whereDate('created_at', today()->toDateString());
})
],
//其它
];
}
public function messages() {
return [
'phone.unique' => '今天已申請過訂單,請等待處理!'
];
}
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數據專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產業(yè)為響應國家深化產教融合/校企合作的政策,積極推進“中國制造2025”,實現中華民族偉大復興的升級產業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。