()
| 38 | |
| 39 | for (let i = 0; i < len; i++) { |
| 40 | const wrap = async () => { |
| 41 | let partsConfig = goods_models[i].split("#"); |
| 42 | let parts = partsConfig[0]; |
| 43 | let option = partsConfig.length >= 2 ? partsConfig[1] : ""; |
| 44 | let name = partsConfig.length == 3 ? partsConfig[2] : ""; |
| 45 | let subObj = { watch: 0, pickup: 0, soldout: 0, changed: 0 }; |
| 46 | let availability = await getGoodsStock(parts, applestore_region, option); |
| 47 | |
| 48 | if (availability && availability.length > 0) { |
| 49 | // 获取AppleStore取货信息 |
| 50 | for (let store of availability) { |
| 51 | let storeNumber = store["storeNumber"]; |
| 52 | if (!stock.hasOwnProperty(parts)) { |
| 53 | stock[parts] = { title: store["partsAvailability"][parts]["storePickupProductTitle"], stores: {} }; |
| 54 | } |
| 55 | if (!stock[parts]["stores"][storeNumber]) { |
| 56 | stock[parts]["stores"][storeNumber] = { notify: false, pickup: false, msg: "等待查询", city: store["city"], name: store["storeName"] }; |
| 57 | } |
| 58 | if (stock[parts]["stores"][storeNumber]["msg"] != store["partsAvailability"][parts]["pickupSearchQuote"]) { |
| 59 | // 更新库存情况 |
| 60 | stock[parts]["stores"][storeNumber]["msg"] = store["partsAvailability"][parts]["pickupSearchQuote"]; |
| 61 | stock[parts]["stores"][storeNumber]["pickup"] = store["partsAvailability"][parts]["pickupDisplay"] != "unavailable"; |
| 62 | // 库存变化推送通知 |
| 63 | stock[parts]["stores"][storeNumber]["notify"] = true; |
| 64 | } else { |
| 65 | // 库存未变化不推送 |
| 66 | stock[parts]["stores"][storeNumber]["notify"] = false; |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | let now = new Date(); |
| 71 | if (!stock[parts]["title"] && !name) { |
| 72 | name = "未命名商品"; |
| 73 | } |
| 74 | let logStr = `${name}\n`; |
| 75 | let title = `${name} - ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`; |
| 76 | let watchResult = "全部售罄"; |
| 77 | let stockInContent = ""; // 有库存的型号与店铺 |
| 78 | let soldOutContent = ""; // 售罄的型号与店铺 |
| 79 | let unchangContent = ""; // 没有变化的型号与店铺 |
| 80 | let content = ""; |
| 81 | |
| 82 | // 整理通知内容 |
| 83 | for (let storeStock of Object.values(stock[parts]["stores"])) { |
| 84 | subObj["watch"] += 1; |
| 85 | // 有货 |
| 86 | if (storeStock["pickup"]) { |
| 87 | subObj["pickup"] += 1; |
| 88 | if (watchResult == "全部售罄") watchResult = `${storeStock["city"]} ${storeStock["name"]}`; |
| 89 | if (storeStock["notify"] === true) { |
| 90 | subObj["changed"] += 1; |
| 91 | if (!!stockInContent) stockInContent += "\n"; |
| 92 | stockInContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}↑`; |
| 93 | } else { |
| 94 | if (!!unchangContent) unchangContent += "\n"; |
| 95 | unchangContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}● `; |
| 96 | } |
| 97 | logStr += `${storeStock["name"]} - ${storeStock["msg"]}\n`; |
no test coverage detected