###### tags: `實習`
# 實習logger
## 資料
Control Panel (Vesta)
https://zeneatea.com:8083/login
admin
Google@1234
ATBBPfkpSWJmUeU47Gc3PvZXrWc4D804B78E
d3w4XAZrYiI7qMDx0G6UmJH50Zef19Nx1dNnQwuPYBT
SS
1. git password :-1:
- GCP: nwrHNEwJ38drFjt2w83V
- Taipei :pQP7N73zZrZu5LTzJFA8
2. jira L56jLWlq9BCEjW0ZpcQY3FCC6
總店:309916949/1229486075
ch87891363gg
分店:607090903
Ch87891363Gg
2745
admin_bot_2
PA6NRe3flE
## 11/30 實習(13:00~17:00)
### foodpanda api
1. **Get Acces Code**
url = https://i2i8h1fo03.execute-api.ap-southeast-1.amazonaws.com/prd/v3/master/login
需求參數:{"email":"franky4328@gmail.com","password":"me852000"}
可以拿到ACCESS code
**authorization: Bearer + Accesc] code
2. 拿取各種不同資料
共同需求參數:json : {"platformVendorIds":["FP_TW;xqya"],"from":"2021-11-23","to":"2021-11-29"}
(1) getdashborad 拿取報表
https://81ovwvv8hi.execute-api.ap-southeast-1.amazonaws.com/prd/v4/dashboard
(2) getorderid 拿取時間內訂單編號
https://81ovwvv8hi.execute-api.ap-southeast-1.amazonaws.com/prd/v4/orders
(3) getorderitem 拿取查詢訂單的詳細資料
'https://os-backend.api.as.prd.portal.restaurant/v1/vendors/FP_TW;xqya/orders/' + orderid + '?order_timestamp' + ordertimestamp
## 12/4
目前進度
(1)抓取資料 已完成
(2)定期抓取資料 已完成
(3)存入sqlite db 已完成


未來:
(1) 串接line nofity api
(2) 連接service(ex:printer)
# 目前技術上缺乏的是:
1. php
- 解決方式:?
2. sql
- 解決方式:?
sqlite 常用指令
```sqllite
create table if not exists
Foodpanda_items(
order_identifier varchar(100) ,
item_id varchar (100) ,
item_name varchar (100),
item_unit_price FLOAT ,
quantity INTEGER,
option TEXT,
FOREIGN KEY (order_identifier)
REFERENCES Foodpanda_Order(order_identifier)
);
INSERT INTO Foodpanda_Order SELECT ?,?,?,? WHERE NOT EXISTS (SELECT * FROM Foodpanda_Order WHERE order_identifier = '{}' )
SELECT OrderId,RecivedTime FROM Foodpanda_Order WHERE RecivedTime > '{}'
```
## 目前課題:
- 將ubereat line notify 印出負數:index錯誤
- 猜測:可能是印到折扣金額
解決方式:
,利用length = list.dize()-1
### 12/7
目標:完成foodpanda
1.sqlite 儲存問題
(1) 儲存 (OK)
(2) 格式問題
2.將資料格式以及資料名稱跟ubereat保持一致
目前狀況:正常,缺少時間參數
3.測試推送:
目前狀況:正常
5.上傳
今日進度:
### 12/10
進度:
(1) 優化程式碼
(2) 嘗試傳送json to linenotify api
問題:
目前將參數傳入會常常出現參數重複發送
猜測:傳入方式錯誤
更改時間
開始時間 結束時間 結束兌換時間 2020to2021/config.ini
```php=
設定活動資料
```
define("EVENT_TIME", $config["Website"]["EventTime"]);
define("REDEMPTION_TIME", $config["Website"]["RedemptionTime"]);
```
```ini
[Database]
; 資料庫主機
;Host = "60.250.133.84"
Host = "10.140.0.7"
; 資料庫使用者
User = "admin_event"
; 資料庫使用者密碼
Pass = "ch87891363best"
; 資料庫名稱
Name = "admin_2020to2021"
[Website]
; 網站名稱
Name = "2021 蟬吃茶共享尾牙"
; 網站網址路徑
UrlPath = "/2020to2021/"
; 活動時間
EventTime = "12/31"
; 兌換時間
RedemptionTime = "2021/03/31 22:00"
; 活動開始時間
eventOpenTime = "2020-12-31 18:00:00"
;eventOpenTime = "2020-12-23 00:00:00"
; 活動結束時間
eventCloseTime = "2020-12-31 22:00:00"
; 兌換結束時間
redemptionCloseTime = "2021-03-31 22:00:00"
```
### 12/17
Scp (-r是不是資料夾) 目標 下載地點
scp -r @34.81.165.22:/home/admin/web/zeneatea.com/public_html/2020to2021 C:\xampp\htdocs
$len = sizeof($restaurantOrder["checkoutInfo"]);
$order_amount = $restaurantOrder["checkoutInfo"][$len-1]["rawValue"];
scp C:\xampp\htdocs\bot_3\api\foodpanda_print.php root@34.81.165.22:/home/admin/web/zeneatea.com/public_html/bot_3/api/
scp C:\Users\garyl\Desktop\foodpanda\main.py root@34.81.165.22:/home/foodpanda
```
```
使用linux screen
查看所有screen sessions
screen -ls
新增一個新的session
screen -S [session name]
回復到其中一個session
screen -R [session name] / PIDsc
關閉session
kill PID
背景執行
Ctrl + A + D
screen -ls 列出背景執行的
```py=
# selenium
# 測試程式
def Login1():
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("'referer': 'https://auth.uber.com'}")
sess = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
#sess.add_cookie('hello')
# uber authentication
sess.get(url='https://google.com')
time.sleep(1)
uberURL = 'https://auth.uber.com'
sess.get(url=uberURL + '/login/')
email = sess.find_element_by_id('useridInput')
userEmail = "poppy-383226@ubereats.com"
password = 'b602fb62'
email.send_keys(userEmail)
email.submit()
time.sleep(2)
sess.save_screenshot('123.png')
PassWord = sess.find_element_by_id('password')
PassWord.send_keys(password)
PassWord.submit()
time.sleep(2)
sess.get('https://restaurant-dashboard.uber.com/dashboard_v2')
time.sleep(10)
print(sess.get_cookies())
return sess.get_cookies()
```
```
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def Login1():
chrome_options = Options()
prefs = {
'profile.default_content_settings': {
'profile.default_content_setting_values': {
'images': 2, # 不加载图片
'javascript': 2, # 不加载JS
}}}
sess = webdriver.Chrome(options=chrome_options)
sess.get(url='https://www.google.com.tw/maps/dir/110台北市信義區吳興街30號/永安市場/?hl=en')
# sess.add_cookie('hello')
# uber authentication
sess.implicitly_wait(5)
sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[3]/div[1]/div[2]/div/div[2]/div/div/div[1]/div[2]/button/img').click()
sess.implicitly_wait(5)
sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[8]/div/div[1]/div/div/div[2]/button[2]').click()
sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[8]/div/div[1]/div/div/div[2]/div[2]/div/div[1]/div[1]/div[1]/label').click()
sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[8]/div/div[1]/div/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/label').click()
sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[8]/div/div[1]/div/div/div[2]/div[2]/div/div[1]/div[2]/div[3]/label').click()
sess.implicitly_wait(5)
t = sess.find_element_by_xpath(
'/html/body/div[3]/div[9]/div[8]/div/div[1]/div/div/div[4]/div[1]/div/div[1]/div[1]/div[2]/div/').text
print(t)
Login1()
```
### 12/21
目前狀態:
目前已嘗試過:sleninum 使用choruim模擬人點擊,依然被判斷是bot
可以點擊到recaocha的按鈕,但他認為我們存在風險,




### 12/23
遇到問題:nodejs送出去資料php無法收到
原因:要以url?parmname1=parm1&parmname2=parm2....
解決方式
qs.stringfy()
```\desk
總店:309916949
ch87891363gg
分店:607090903
Ch87891363Gg
root@60.250.133.84
ch87891363best
scp C:\Users\garyl\Desktop\實習\websocket.js root@34.81.165.22:/home/websocket/client_connect
印明細:http://127.0.0.1/bot_2_printer/details_order.php
印貼紙:http://127.0.0.1/bot_2_printer/stickers.php
```
### 12/31
目前要做的事:
window下背景執行 已找到方法WSL
websocket client heartbeat ,大概知道如何實作了
websocket server 還在實作中
foodpanda sql 一次性大量送出訂單 ,目前發現是資料庫沒做更新,導致有些時間的單子發生問題
### 1/1
目前要做的事:
1.websocket client checkinternetstaue 已實作
實作方法:在gcp上放一個空的php如果有網路,就會staue code200
若不是200,就重啟websocket
2.websocket client heartbeat 尚未實作
希望實作方法:目前nodejs會定期去向server送空字串以此讓server知道我client還活著,不會導致server 觸發settimeout 踢掉 client,目前希望可以從server端,設定若client傳送特定問字,就會回傳給Client一個回應,以此讓client知道server還活著,若沒有活著就可以做重聯的動作,以此保證程式執行的穩定度
3.foodpanda sqlite問題 已實作,尚未測試穩定度
4.window 下背景執行
目前:找到方法WSL
缺點:要灌附加系統,有點不值得
ubereats recapcha 尚未找到方法
5.ubereats recapcha 目前尚未解決
### 1/2
目前要做的事:
1.websocket client heartbeat 已實作,尚未上機
目前已做好簡易的server ping pong程式
功能:
(1)若client傳送ping,那server端就會回傳pong
(2)server會以一個不固定的時間(10s~60min)去做一個假送訂單已模擬真實情況
(3)若client端網路掛掉,會以5s為基準重新開啟連線
2.foodpanda sqlite問題
目前問題:我帳號登不進去,所以沒法看一些資訊
3.改善bot_3有時會發生點數折致導致付款按鍵消失
目前還未找到問題
4.window 下背景執行
目前:找到方法WSL
5.ubereats recapcha 目前尚未解決
scp -r C:\Users\garyl\Desktop\實習\foodpanda root@34.81.165.22:/home
目前課題:
付款按鈕消失
## 1/11
<暫時結論>
經過一個禮拜的測試,得到websocket disconnect
結論:網路不穩導致websocket client disconnect ,目前reconnect的程式目前執行次數
總店:2次
分店:0次
1. 點數折扣問題
問題描述:按下店數折扣後付款按鈕消失
狀況:我無法重現此bug,因此懷疑是手機型號or line的瀏覽器版本不同
2,Ubereats Recapcha 文件說明
問題描述:將爬蟲放上gcp會導致ubeereats偵測成機器人,導致需要進行recapcha
3.機器人待做
4.機器人客人的備註-貼紙
ex:料少,茶少
### 1/14
1.ubereats移植;目前狀態:程式以移植到總店並執行了
2.點數歷史紀錄;
3.點數折扣問題;目前狀況:無法重現漏洞
4.機器人待做(RFM Analysis);目前狀況:文章已經看完了
https://inboundmarketing.com.tw/crm/rfm%E9%A1%A7%E5%AE%A2%E5%88%86%E7%BE%A4%E5%BE%8C-%E4%B8%8B%E4%B8%80%E6%AD%A5%E8%A9%B2%E5%A6%82%E4%BD%95%E6%93%AC%E8%A8%82%E7%AD%96%E7%95%A5.html
## 1/15
1.點數歷史紀錄;
2.機器人待做(RFM Analysis);目前狀況:文章已經看完了
3.禮盒
4.大量客製
USER SUMBIT lINUX
金額需要人工檢查
金額
## 1/21
1. 大量客製訂單
## 1/24目前待做:
目前待做:
1.點數折扣問題
2.點數歷史查詢
3.抽獎顯示問題
4.QRCode Generator & Analytics
## 1/25
1.MVC架構
2.RWD網頁
3.UML架構圖
4.Design pattner
## 1/26
1/26待做:
1.蟬吃茶server code 上git
2.點數歷史紀錄
目前進度:
刪除訂單以及購買訂單會成功紀錄,剩點數商城以及手動調整用戶點數還尚未實裝
3.issue report 的模板
4.點數扣抵訂單問題 (下方完成訂單列表消失)
5.抽獎顯示問題
暑假功課:
ER Model
DB 正規化
API
JSON
REST, RESTful API
PHP basic
js basic
PHP module/class
js module/class
PHP memory/network
js memory/network
MVC design pattern
linux安裝GIT指令
1.sudo apt-get install git-all
Initialized empty Git repository in /home/admin/web/zeneatea.com/public_html/.git/
https://www.runoob.com/git/git-add.html
https://backlog.com/git-tutorial/tw/
目前狀態: git status
目前記錄: git log
ex: git log -p -2
檔案還原:git checkout filename or git checkout .
admin_bot_2
PA6NRe3flE
commit:git commit -m [message]
主動式監控程式
include_once(dirname(dirname(__FILE__)) . "/lib/mysqli_bot2.php");
$config = parse_ini_file(dirname(dirname(__FILE__)) . "/config_bot2.ini", true); //解析配置檔
刮刮刮
## 1/27
今日待做
1.點數歷史紀錄(剩後台查詢)
2.點數扣抵訂單問題 (下方完成訂單列表消失)
3.issue report 的模板
4.抽獎顯示問題
## 1/28
1.點數歷史紀錄(剩切換聊天室變更網址
2.點數扣抵訂單問題 (下方完成訂單列表消失)
3.抽獎顯示問題
獨立開發環境
//可再現下
查看error message
//先找Error log(WEBSERVER PHP BROWSER) apace Cofig.ini apce (port damin name) webserver
ER Model
DB 正規化
API
JSON
REST, RESTful API
PHP basic (W3school)
js basic (jQeury)
PHP module/class
js module/class
PHP memory/network/security/performance/robust
js memory/network/security/performance/robust
MVC design pattern
alpha test
beta test
ERP
https://www.youtube.com/watch?v=9v_kDNewW5I
https://www.youtube.com/watch?v=w8vCeKT-H68
https://www.youtube.com/watch?v=hyhuDCbLgnc
https://docs.google.com/spreadsheets/d/18SXx2VbyzmUAuoHdBUNcSFme1N0hG8oHU8ckqBz0Ioc/edit#gid=110599442
追:
(1)點數歷史系統 禎禎
## 2/7
本日待做:
(1) 點數歷史紀錄後台管理系統
(2) 貼紙備註超出邊界
(3) 抽獎顯示問題
(4) QRCode Generator & Analytics
(5) bitbuket
(6) test case 點數歷史
技術
(1) wireframe
(2) flowchart
(3) UI/UX
明天: 1:30 紀錄 工作
scp -r root@34.81.165.22:/home/admin/web/zeneatea.com/public_html/bot_2 C:\Users\garyl\Desktop\線下開發環境
關機計畫 -help
點數歷史紀錄後台 test case
幫我測試一下新功能:
功能介紹:可以利用後台系統查尋人的點數歷史紀錄(名子 過去訂單 電話號碼)
網址:https://zeneatea.com/bot_2/admin/

幫我測試一下:
(1)查尋自己的以及利用其他兩人的名子進行查尋對方點數歷史紀錄,幫我把其餘兩人的最後點數記錄下來
(2)下一個假訂單,然後用訂單號查尋自己的點數紀錄,幫我記錄下最後的點數
(3)在下一個假訂單,然後用自己的電話下去查尋
*需要用哪個查尋,就打哪一個的,其餘的不用填寫*
寵物項圈
外送狀況
自動行銷
新功能位置
功能描述: 因為聊天紀錄的排序是依照
UML Class squenedia er model 3nf WireFrame
目前待做:
1.QRCode Generator & Analytics
2.在機器人 Notify的資料新增快速查看歷史紀錄的超連結
3.Wireframe (點餐機器人)
會員: 參考露易莎會員,最基本的功能化成Wireframe
價格修改,會員的顯示,
Wireframe
點餐系統(前台)
後台
(1)登入系統
(2)Dashborad(顯示過去一段時間的營收,以及飲料銷售狀況,熱銷商品,各物品庫存)
(3)修改點數(利用訂單編號 OR 電話 OR 訂購者名子) 需要顯示他現在多少點,以及你做完這個操作會將積分改成多少
(4)修改OR新增產品(圖片,文字,狀態)
(5)重新列印
(6)目前各程式執行狀況
(7)EXCEL點餐
(8)廣告圖
(9)聊天後台
(9)機器人圖片
(10)設定配料有無貨
(11)查詢用戶點數歷史紀錄
(12)目前活動管理
會員
(1)註冊系統
(2)登入系統
(3)會員推送特別優惠
(4)可以大量訂購(分次拿,像咖啡一樣,但可以有比較低的價格)
(5)載具顯示
(6)現實可以利用QR CODE OR 電話號碼增加點數,也可以在實體店家購買時使用積分(像加油站)
/html/body/div[1]/div/div/div/div[1]/div/div/div/div/div[1]/div/div[1]/div/div/div[2]/div/div/div/div[1]/div/div[2]/div/div/div[2]/div/div/div/div/div[2]/div[1]/div/div[1]/div/div[2]/div/div
https://merchants.ubereats.com/orders/dashboard_v2/orders/new/31f1cbb5-d270-4506-b28c-019b2cf47c0c
https://merchants.ubereats.com/orders/rt/eats/v2/stores/66c0cb5a-ada1-490b-8f9e-29fc9005c8c9/get-restaurant-order-count-for-eater

def getcount(sess,resp,requestHeader,uuid):
data = {
"request": {"eaterUUIDs": [uuid], "uuid": "66c0cb5a-ada1-490b-8f9e-29fc9005c8c9"}}
requestHeader['content-type'] = 'application/json'
resp = sess.post(
'https://merchants.ubereats.com/orders/rt/eats/v2/stores/66c0cb5a-ada1-490b-8f9e-29fc9005c8c9/get-restaurant-order-count-for-eater',
headers=requestHeader,
cookies=sess.cookies,
data=json.dumps(data)
)
respond = eval(str(resp.content)[2:-1])
return respond["orderCountByEaterUUIDMap"][uuid
命名原則:[功能名稱]_[執行店家]_[版本編號]
version:1.0.0(init)
最前面的數字代表整個程式運作方式改變
中間的數字改變代表部分現有功能被更改
最後面的數字代表小部分更新
ex:UberRequst_bot2_1.0.0.py
點數歷史紀錄(聊天機器人):禎偵
點數歷史紀錄
目前狀況:
- 設計線
- - 會員系統
- - 後台系統
- - 檔名設計
- - 資料夾設計
- 研發線
- - 點數歷史紀錄(Linepay)
- 測試線
- - 點數歷史紀錄(聊天系統)
- - 點數歷史紀錄(後台系統)
- - 列印單據位置以及貼紙的位置調整
$LinePay = new Chinwei6\LinePay($apiEndpoint, $channelId, $channelSecret);
$userid = $_SESSION["cache"]["userID"];
$orderId = $_SESSION["cache"]["orderId"];
$p = $points->get();
if ($p!=$p-$pointsDiscount){
$mysqli->SavePointHistory($userid,$orderId,$orderQueueNumber,"Sub Order Point",$p,$p-$pointsDiscount);
$p = $p-$pointsDiscount;
}
點餐:
功能說明:
### 未來
1. 研發線,設計線,測試線 上JIRA
https://merchants.ubereats.com/manager/marketing/performance
愛品雲網頁
全家網頁 ,官網網頁
從消費者角度 去看
系統加解密 7月
網頁line pay 5月
設計->研發->測試
## 策略
測試暴衝 採取 一分鐘 30->20->10->自動銷售
測試循序增加
rule 
目前問題:
1. uber當掉
原因:之前看log紀錄大概都是 json prase error
通常發生於:Acces token lost(登入失敗),我猜測可能是我們登入頻率過高,導致被擋一陣子,然後那一陣子都沒辦法使用
//但是他目前這個問題屬於有時有,有時無
2. 機器人當掉
原因:
(1) 網路問題
(2) 電腦互相交互出現問題(查出依賴問題)
1. 3月底討論,NAS架設
2. 列一下需要加強的技術 今天或明天
## 2022/3/11
本日待做:
1. 關閉兩台server / 斷網
2. 機器人疊單問題
3. 訂單歷史紀錄
4. 機器人monitor
5. RMF 分群程式碼
60.250.133.82:443 官網
60.250.133.81 無
60.250.133.83 api
60.250.133.84
2. 機器人疊單問題,目前機器人的流程是
## 2020/3/25代做
1. foodpanda 列印問題(無列印出資訊)
2. uber 列印問題(品項名列印錯誤)
3. 工程後台
1. 總店程式: **Done**
1. uber 總店爬蟲 **Done**
2. uber 分店爬蟲 **Done**
3. websocket **Done**
2. 分店程式: **Inprogress**
1. websocket **Inprogress**
3. GCP **ToDo**
1. foodpanda 分店爬蟲 **ToDo**
2. websocket 聊天系統 **ToDo**
3. Websocket 送單系統 **ToDo**
4. 網頁 **ToDo**
1. 點餐系統 **ToDo**
2. 點數商城 **ToDo**
3. 聊天系統 **ToDo**
## 2022/3/26
1. foodpanda 列印問題(無列印出資訊) **Done**
2. uber 列印問題(品項名列印錯誤) **Inprogress** 目前進度:還在尋找解法
3. 工程後台
1. 總店程式: **Done**
1. uber 總店爬蟲 **Done**
2. uber 分店爬蟲 **Done**
3. websocket **Done**
4. 印表機狀況
1. 硬體本身
2. 印表機存活監控
3. Socket監控
4. 網路連線監控
5. 小主機的監控
6. POS機的監控
7. POS列印狀況監控
2. 分店程式: **Done**
1. websocket **Done**
3. GCP **Inprogress**
1. foodpanda 分店爬蟲 **Done**
2. websocket 聊天系統 **Inprogress**
3. Websocket 送單系統 **Inprogress**
4. 網頁 **Done**
1. 點餐系統 **Done**
2. 點數商城 **Done**
3. 聊天系統 **Done**
4.
## 2022/3/27
1. Power bi 把資料以圖表顯示
2. uber 列印問題(品項名列印錯誤) **block**
3. 工程後台 **block**
1. GCP **Inprogress**
1. foodpanda 分店爬蟲 **Done**
2. websocket 聊天系統 **Inprogress**
3. Websocket 送單系統 **Inprogress**
## 2022/4/9
1. uber 列印問題(品項名列印錯誤) **block**
2. 工程後台 **block**
1. GCP **Inprogress**
1. websocket 聊天系統 **Inprogress**
2. Websocket 送單系統 **Inprogress**
2. 呈現網頁
1. 所有網頁目前狀態 **Inprogress**
2. Uber目前狀態 **Inprogress**
3. foodpanda目前狀態 **Inprogress**
4. Websocket目前狀態 **Inprogress**

### 工作守則
1. 開發人員規範
- 開發人員的SOP
- 針對merge的SOP, (標準動作)
- Git 在要push時,請注意目前是否為最新版本,一定要先pull,再做merge,請使用soft 並且只要有merge記得測試所有的組件是否有問題
- 最小覆蓋集合
- 開發版, 正式版
- 開發版, 有功能要檢測, 要規範, 才能開始做, 以及算完成
- 正式版, 有功能要檢測, 要規範, 才能開始做, 以及算完成
2. 監控表列
- 今天早上列的各種監控
- 機器人
- 點餐狀況 (OK)
- 連線狀況 (OK)
- 機器人列印狀況
- 機器人主機狀況
- Uber
- 抓取資料狀況(OK)
- 連線狀況(OK)
- 列印狀況
- Foodpanda
- 抓取資料狀況(OK)
- 連線狀況
- 列印狀況
- 聊天
- 連線狀況(OK)
- 店家
- 印表機連線狀況
- 主機狀況
- GCP
- 主機狀況
1. 紅燈
2. 綠燈
3. 錯誤訊息
Error Issue 定義
### 2020/4/15
1. uber機器人疊單
目前待做:
1. 製作簡易表格顯示資料
工程人員如何測試:測試uber列印,測試機器人列印
需要改善的問題
1. uber 機器人 疊單
2. uber 列印問題
(1) 資訊不全
(2) 資訊不對
(3) 無列印
3. 機器人列印問題
(1) 無列印
目前策略:
1. 機器人疊單屬於同步問題,理論上上次已經對websocket做序列化,理論上已經解決
之後手動作測試,在一個瞬間連續:
1. uber兩張
2. 機器人兩張
3. uber跟機器人各一張
2. uber 列印問題
(1) x
(2) 目前已經更改判斷重複列印標準,之後再做連續測試,判斷日期+判斷電話
(3) 目前容易發生問題的
1. 程式掛掉,無自行重開: 目前最容易掛掉的地方在eval,作正規化檢查,以避免錯誤,然後之後就等時間驗證
2. WEBSOCKET斷掉: 除小黑和網路斷掉,不然不太可能發生
3. 標籤機無正確連接
3. 機器人列印問題
(1)
1. WEBSOCKET斷掉: 除小黑和網路斷掉,不然不太可能發生
2. 標籤機無正確連接
### 回報
1. 測試送單系統
- 2022/4/16 回報總店,測試
- 2022/4/18 回報分店
### 今日待做
1. 將 表格製作成可以滾動的
2. 監控小黑和的WEBSOCKET(目前程式已經寫完,只是放上gcp,後開啟無法正確從外部連線,但內部可以使用localhost,連線)
3. 測試列印測試組件(uber/foodpanda/機器人)
### 2022/4/26今日待做
(先預設小黑盒子的監控是不影響的)
1. 修復延遲問題,測試方法:
目前機制:
1. 機器人(OK) -> GCP API(OK) -> 各分店WebSocket(OK) -> localhost/printer/api(Ok)
2. uber爬取 -> GCP WebSocket -> 各分店WebSocket -> localhost/printer/api
3. foodpanda爬取 -> GCP WebSocket -> 各分店WebSocket-> localhost/printer/api
延遲可能發生問題:
1. 機器人單可能卡在[各分店WebSocket]或[localhost/printer/api]
2/3. 機器人單可能卡在[各分店WebSocket]或[GCP WebSocket]或[localhost/printer/api]或[uber爬取]或
測試計畫:
1. 送出連續3張各5杯的訂單,然後請現場看時間差,若時間差很短,代表 錯誤收束於[uber爬取]或[GCP WebSocket]
2. 模擬程式爬取送至websocket,確認是否為,WebSocket造成的問題
先統整出目前發現的Bug
2. 利用剛發現的Bug,跟監控組件,去思考甚麼問題
### 待做
總店分店 同步問題
分店總店 機器人選擇
### 2022/4/29
1. (Done)excel要貼紙以及也要有明細, 安排在待做
- 目前狀態:使用系統列印時,有貼紙,卻沒有收據紙 ( 目前程式基本上方式是以websocket傳送至,故理論上應該會列印收據紙,等等再次檢查)
- 想要改善的功能:
- (Done) 再列印時有收據紙 (找到原因:參數為傳遞,導致列印失敗,有
- (Done)在預定單前30分鐘再次列印(目前設計他第預約單會先列印一次置資料庫,所以我直接調用重新列印的api進行實現,之前並不會重新列印的原因是無法通過列印的條件,重新列印是屬於直接列印,會無視條件
2. (Done)分店電腦網路斷線
- 確定是機器關掉還是網路關掉(非正常關機,不知道原因,可能:斷電?程式錯誤?window更新?
3. 機器人選擇店家問題
- 目前狀態:無法正確順利切換店家
- 想要改善的問題:兩店可以順利切換
4. (Done)總店分店程式碼同步問題
- 目前狀態:兩邊程式碼,不太一樣
- 想要改善的問題:了解目前程式碼差異
1. GCP
1. comfirm.php
- (Done) 點數歷史紀錄
2. api/uber_print
- (Done) 訂購次數
- (Done) 疊單判斷
3. admin\index.php
- 查詢客戶點數
4. api/repoint
- (Done)點數歷史紀錄
5. delteorder
- (Done)點數歷史紀錄
6. chat/admin/GetPointHistory.php
- (Done)更新總店分店個別查
2. 總店
1. uberRequest.py
- (Done) 拿取訂單次數
- (Done) 定時重開
2. deatail.php
- (Done)印出點餐次數
### 2022/4/30
1. 找出分店電腦關機原因
- 可能原因
- 斷電?
- 程式錯誤?
- window更新?
- 可能解決方法
- Window Log(意外關機不記錄)
- Websocket監控(目前無設定斷線主動通知,只會顯示至工程後台)
2. 機器人選擇店家問題(目前我這邊測試可以正確切換,只是理論上點餐前就要能更換自己的店家才對)
- 目前狀態:無法正確順利切換店家
- 想要改善的問題:兩店可以順利切換
3. 工程後台跑版
- 目前狀態:在小螢幕上顯示出現問題
### 2022/4/30
1. 機器人選擇店家問題(目前我這邊測試可以正確切換,只是理論上點餐前就要能更換自己的店家才對)
- 目前狀態:無法正確順利切換店家
- 想要改善的問題:兩店可以順利切換
2. 工程後台跑版
- 目前狀態:在小螢幕上顯示出現問題
### 2022/5/6
1. 外部操作uber各項數據
2. 工程後台
- Log歸檔
- bot_2/index.php
- bot_3/index.php
- bot_set/redirect.php
- foodpanda分店
- Uber分店
- Uber總店
- websocket
- 分店websocket
- 分店竹科小黑
- 總店小黑
### 2022/5/7
1. Uber後台操作
- 目前各項指標
- 廣告投資報酬
- 轉換率
- 廣告銷售額
- 支出金額
- 設定
- 變更是否自動銷售
- 變更手動銷售近額
2. 機器人選擇店家問題(目前我這邊測試可以正確切換,只是理論上點餐前就要能更換自己的店家才對)
- 目前狀態:無法正確順利切換店家
- 想要改善的問題:兩店可以順利切換
- 目前解決方法:
- 更換變換店家元件

### 2022/5/8
1. Uber後台操作
- 登入
- 猜測登入機制:使用者按下按鈕->將我們所輸入的pin碼,對graphql做出請求->回傳給程式做判斷->跳轉頁面
- Graphql 模擬登入:https://github.com/graphql-python/gql
- 目前各項指標
- 廣告投資報酬
- 轉換率
- 廣告銷售額
- 支出金額
- 設定
- 變更是否自動銷售
- 變更手動銷售近額

```py
#!/usr/bin/python
import json
import requests
from time import sleep
import urllib.parse
import logging
import datetime
import schedule
import time
log_filename = str(datetime.datetime.now()).replace('.', '-').replace(' ', '-').replace(':', '-') + '.txt'
logging.basicConfig(level=logging.INFO, filename=log_filename, filemode='w',
# format='[%(levelname).1s %(asctime)s] %(message)s',
format='[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s',
datefmt='%Y%m%d %H:%M:%S',
)
logging.FileHandler(log_filename)
logging.warning("hello")
reconnect_flag = False
def getcount(sess, resp, requestHeader, uuid):
data = {
"request": {"eaterUUIDs": [uuid], "uuid": "66c0cb5a-ada1-490b-8f9e-29fc9005c8c9"}}
requestHeader['content-type'] = 'application/json'
resp = sess.post(
'https://merchants.ubereats.com/orders/rt/eats/v2/stores/66c0cb5a-ada1-490b-8f9e-29fc9005c8c9/get-restaurant-order-count-for-eater',
headers=requestHeader,
cookies=sess.cookies,
data=json.dumps(data)
)
try:
respond = eval(str(resp.content)[2:-1])
except:
return -1
print(respond["orderCountByEaterUUIDMap"][uuid])
return respond["orderCountByEaterUUIDMap"][uuid]
# Header
def setHeaders(resp):
url = 'https://auth.uber.com'
headers = {}
csrfToken = resp.headers.get('x-csrf-token')
headers.update({
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
'Content-type': 'application/json',
'x-csrf-token': csrfToken
})
return headers
def Login():
sess = requests.Session()
# uber authentication
uberURL = 'https://auth.uber.com'
requestHeader = dict(referer=uberURL)
# send request to /login
print('Sending requests to /login with headers;')
print(str(requestHeader) + "\n")
resp = sess.get(url=uberURL + '/login/', headers=requestHeader)
userEmail = "poppy-383226@ubereats.com"
# handle username/email
requestHeader.update(setHeaders(resp))
payload = '{"answer":{"type":"VERIFY_INPUT_EMAIL","userIdentifier":{"email":"' + userEmail + '"}},"init":true}'
resp = sess.post(url=uberURL + '/login/handleanswer', headers=requestHeader, data=payload)
print("Email entered: ")
print(resp.text + "\n")
# handle password
requestHeader.update(setHeaders(resp))
payload = '{"answer":{"type":"VERIFY_PASSWORD","password":"b602fb62"},"rememberMe":true}'
resp = sess.post(url=uberURL + '/login/handleanswer', headers=requestHeader, data=payload)
print("Password entered: ")
print(resp.text + "\n")
dashURL = 'https://merchants.ubereats.com/manager/pin'
print(resp.cookies)
resp = requests.get(
dashURL,
headers={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
'Content-type': 'application/json',
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'x-csrf-token': 'x'
},
cookies=resp.cookies
)
print(resp.cookies)
dashURL = 'https://merchants.ubereats.com/manager/pin'
print(resp.content)
if __name__ == '__main__':
Login()
```
圖表:https://merchants.ubereats.com/manager/api/fetchAdsMetrics?localeCode=zh-TW

### 2022/5/13
1. Uber目前各項指標
- 廣告投資報酬
- 轉換率
- 廣告銷售額
- 支出金額
目前狀態:已經可以拿到資料,但她的資料是未經處理過的資料,他後面有用js做運算,然後他做修改廣告額的指令好像是有個特殊的參數模式,並不是簡單的單純數字
2. 總店分店同步問題
1. 分店uber點餐次數 line notufy 顯示
2. 分店uber備註 line notufy 顯示
3. 檢查目前版本問題
1. 定義每隔程式一個版本名
### 監控系統
### Server(GCP)
#### 功能
1. 接收所有終端的訊息判斷是否程式是否從活
#### API
1. 主動通知工程師狀況
1. 參數
- 發生終端名子
- 程式名稱
- 時間
2. 發送訊息內容
- 發生終端名子
- 程式名稱
- 程式猜錯錯誤
- 程式錯誤行數
- 程式碼目前狀態
3. 發送訊息時機
- 程式無定期回報資訊,判斷此程式未活著
- 程式發生錯誤過度頻繁(3次連續在1分鐘)
### Client Center
#### 功能
1. 主動檢查本地端是否有程式目前無存活並回報給Server
2. 主動通知工程師狀況
1. 發送訊息內容
- 發生終端名子
- 程式名稱
- 程式猜錯錯誤
- 程式錯誤行數
- 程式碼目前狀態
2. 發送訊息時機
- 重啟次數過多(3次連續在5分鐘)
#### API
1. MySQL
1. SaveErrorMessage
1. 功能: 儲存錯誤資訊
2. 參數
- 發生終端名子
- 程式名稱
- 程式猜錯錯誤
- 程式錯誤行數
- 程式碼目前狀態
### Client Program
#### 功能
1. 做自己應該要做的
2. 儲存錯誤訊息
- 對本地API送出 SaveErrorMessage
6月總整理
倒流漏斗
### 2022/6/25
1. 機器人動線設計
2. 關店設定
3. 假連線狀態偵測
### Bug
| 發生的問題 | 處理關鍵 | 未來處理時間點 |
| -------------------- |:----------------------------- |:------------------- |
| 店家網路問題 | 搭配監控即時通報 | 2022/6/30~2022/7/1 |
| 店家監控程式掛掉 | Try catch | Finish |
| 機器人不能列印 | 店家Websocket | 2022/6/30~2022/7/1 |
| WebSocket假連線 | Server與Client 使用剔除演算法 | 2022/6/29~2022/6/29 |
| 錯誤回報系統 | 監測WebSocket | 2022/6/29~2022/7/1 |
| Uber拿取訂單程式被踢 | 定時重連 | Finish |
| 後台控制店家開關 | 無 | 2022/6/29~2022/6/30 |
#### 未來計畫
| 目標 | 未來處理時間點 |
|:-------------- |:------------------- |
| 監控回報系系統 | 2022/6/29~2022/7/15 |
| 工程後台 | 2022/6/29~2022/7/15 |
| 會員系統 | 2022/7/15~2022/7/30 |
| Uber行銷AI | 2022/7/15~2022/7/30 |
#### 目前待測試上線功能
1. 後台可以利用按鈕快速測試整個列印機器人單以及測試uber單流程
2. 防止WebSocket假連線之剃除演算法
3. 錯誤回報系統(version 1.01)//有bug細節
4. 後台控制店家開關
5. 運費試算
### 假完成
2. WebSocket連線替除演算法通知。
3. Uber假單/機器人假單 :自動檢查流程
### 未來計畫
1. 工程後台
- 目標:
- 零失誤
- 錯誤可以快速掌握
- 子系統
- 監控系統
- 監控目標
1. 店家執行程式
2. GCP執行程式
3. API是否能正常執行
4. 網頁是否可以被存取
5. 資料庫是否可以被存取
- 回報系統
- 回報項目
1. 錯誤資訊
2. 錯誤檔案位置
3. 錯誤行數
4. 可能導致的組件執行失敗
5. 目前修繕狀況
- 自動恢復系統
- 功能
- 恢復紀錄
- 若無法恢復的解決方式
2. 機器人點餐系統
- 目標:有良好的使用這體驗,導流漏斗
- 功能
1. 如何讓使用者明確知道下一步(確認訂單)
2. 即時杯數顯示位置
3. 新增多地址選擇
4. 時間選擇使用區間進行
5. 信用卡最低金額
6. 新的支付方式
* 街口
* 悠遊付
7. 外送費加入金額進入
8. 送禮方式
9. 團購
10. pos 進網路
3. 版本控制系統
- 目標可以顯示所有程式目前的版本
4. 開發流程管理系統
- 目標:讓多人開發時可以更有流暢的分工
- 功能:
1. 指派
2. Due Time
3. 可以顯示所有店家每個模組的版本序號
4. 需求說明
4. 可以顯示目前計畫的進度
5. 可以顯示現在系統的Roadmap
5. 全平台金流彙整系統
- 目標:將所有程式不同方面的收支作顯示
- 項目
1. Uber
2. foodpanda
3. 機器人電商
4. Pos
5. 進貨出貨列表
6. 會員系統
- 目標:待討論
7. 行銷AI
- 目標自動維持最大化維持行銷
- 項目
1. Uber
2. foodpanda
3. 機器人電商
4. ....
- 功能
1. 定時拿取各項指標
2. 可以更新AD價錢的API
1. 監控回報系系統
1. 測試所有模組是否正常
2. 主動監測模組問題,並發送訊息讓工程師可以快速了解情況
3. 分析錯誤原因,錯誤行數,並彙整出最有可能會造成問題的程式
2. 工程後台
1. 可以了解各店家營收
2. 可以了解各店家程式模組運行狀態
3. 可以顯示所有店家每個模組的版本序號
4. 可以顯示目前計畫的進度
5. 可以顯示現在系統的Roadmap
3. 會員系統
1. 如何讓使用者明確知道下一步(確認訂單)
2. 即時杯數顯示位置
3. 新增多地址選擇
4. 時間選擇使用區間進行
5. 信用卡最低金額
6. 新的支付方式
* 街口
* 悠遊付
7. 外送費加入金額進入
8. 送禮方式
9. 團購
10. pos 進網路
4. Uber行銷AI
# 2022/6/30
1. 運費問題
2. 訂單WebSocket
## 2022/7/1
1. 剔除演算法若沒有連線通知 (目前程式上限中,我先不要改以安全為主)
2. 更精確的運費計算(目前Google map已經提供機車)
3. 可以在外送選項點餐時,若有需要加入外送費且使用線上付款,可直接將外送費加入到付款金額
4. 店家選擇問題(最後才能更換店家)
5. 進貨出貨列表
## 目標
- 點餐次數
- 零失誤, 全掌控 (7/15 以前
- 外送 (7/15 以前
- 訊息自動提醒 (7/30 以前
- 1.0 版本統一, 模組化, 版本歸納 (7/30 之前
- 開罰環境 (7/30 之前
| 地點 | 距離 |
| -------------- | ------ |
|信義安和|0.9 km|
|台北101/世貿|1.2 km|
|象山|1.3 km|
|國父紀念館|1.3 km|
|六張犁|1.4 km|
|市政府|1.9 km|
|科技大樓|2.2 km|
|麟光站|2.3 km|
|忠孝敦化|2.3 km|
|忠孝復興|2.7 km|
|永春|2.8 km|
|大安|3.0 km|
|南京三民|3.0 km|
|松山|3.2 km|
|後山埤|3.4 km|
|台北小巨蛋|3.6 km|
|公館|3.8 km|
|忠孝新生|3.9 km|
|大安森林公園|4.1 km|
|辛亥|4.2 km|
|南京復興|4.3 km|
|東門|4.6 km|
|台電大樓|4.6 km|
|中山國中|4.7 km|
|萬隆|4.7 km|
|松江南京|4.7 km|
|善導寺|4.8 km|
|松山機場|4.9 km|
|古亭|4.9 km|
|昆陽|4.9 km|
|萬芳醫院|5.1 km|
|台大醫院|5.4 km|
|木柵|5.5 km|
|台北車站|5.6 km|
|行天宮|5.7 km|
|中正紀念堂|5.8 km|
|南港|6.1 km|
|港墘|6.2 km|
|萬芳社區|6.4 km|
|景美|6.5 km|
|北門|6.5 km|
|永安市場|6.5 km|
|頂溪|6.5 km|
|中山|6.8 km|
|小南門|6.8 km|
|雙連|6.8 km|
|大坪林|6.8 km|
|中山國小|6.9 km|
|西湖|6.9 km|
|東湖|7.2 km|
|南港展覽館|7.2 km|
|龍山寺|7.3 km|
|西門|7.4 km|
|動物園|7.4 km|
|南勢角|7.4 km|
|民權西路|7.6 km|
|景安|7.6 km|
|南港軟體園區|7.9 km|
|捷運大直|8.2 km|
|七張|8.2 km|
|大橋頭|8.2 km|
|文德|8.3 km|
|圓山|8.4 km|
|新店區公所|8.5 km|
|葫洲|8.7 km|
|內湖|8.8 km|
|菜寮|8.8 km|
|大湖公園|9.4 km|
|劍南路|9.5 km|
|台北橋|9.5 km|
|新店|9.6 km|
|三重國小|10.2 km|
|三重|10.6 km|
|小碧潭|10.7 km|
|劍潭|11.0 km|
Process finished with exit code 0
運費試算
### 網路自動連線
```bat
set wifi_name=Chino_5G
set log_file=C:\Users\garyl\Desktop\wifi.log
set try_cnt=1
if [Chino_5G] == [] (echo default_wifi>nul) || (
set wifi_name==Chino_5G
)
echo [%date% %time%] Start connect wifi:%wifi_name% >>%log_file%
:mainloop
(netsh WLAN show interfaces | findStr %wifi_name% >nul && (
echo already connected.
)) || (
set /a try_cnt+=1
echo [%date% %time%] try to connect... [%try_cnt%]
echo [%date% %time%] try to connect... [%try_cnt%] >>%log_file%
netsh wlan connect ssid=%wifi_name% name=%wifi_name% >>%log_file%
)
choice /t 5 /d y /n >nul
goto mainloop
```
```python=
import requests
import random
import time
import pymysql.cursors
db_settings = {
'database': "admin_2022to2023",
'host': "zeneatea.com",
'user': "admin_2022to2023",
'password': "ch87891363best",
'charset': "utf8"
}
def test():
for i in range(1000):
requests.get('https://zeneatea.com/2022to2023/test.php?chanceArea='+random.sample('ABCDE',1)[0])
time.sleep(0)
print(i)
def runQuery(query):
print(query)
try:
conn = pymysql.connect(**db_settings)
with conn.cursor() as cursor:
cursor.execute(query)
conn.commit()
except Exception as e:
print("Error", e)
data = """蟬吃茶一年免費喝!,3,3,1,1,1,1,1
一個月免費喝,4,4,1,2,5,5,0
蟬吃玉山烏龍茶禮*1 蟬吃佳葉龍茶具禮*1,2,2,0,1,3,5,0
蟬吃蜜香紅茶包大盒裝3 蟬吃佳葉龍茶包大盒裝,3,6,6,1,3,6,6,1
蟬吃蜜香紅茶包小盒裝10 蟬吃佳葉龍茶包小盒裝,10,20,20,1,10,10,10,0
蟬吃鮮翠烏龍,100,100,10,10,10,10,10
《蟬吃金玉紅一杯》,200,200,20,13.5,9.5,8.5,21
高山冷泓清一杯,200,200,20,13.5,9.5,8.5,21
蟬吃蜜香紅茶包一包,300,300,22.5,22.5,22.5,22.5,22.5
蟬吃佳葉龍茶包一包,300,300,22.5,22.5,22.5,22.5,22.5
不好意思,沒抽中喔,我們再接再厲,祝福2023年,萬事如意、身體健康、闔家平安,300,300,1,1,1,1,1"""
i = 1
for line in data.split('\n'):
sp = line.split(',')
sql = f"INSERT INTO `prizes`(`prize_index`, `item_name`, `original_quantity`, `quantity`, `chance1`, `chance2`, `chance3`, `chance4`, `chance5`) VALUES ({i},'{sp[0]}', {sp[1]}, {sp[2]}, {sp[3]}, {sp[4]}, {sp[5]},{sp[6]},{sp[7]})"
runQuery(query=sql)
i=i+1
```