{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "import json\n",
    "import xlrd\n",
    "import xlwt\n",
    "from datetime import datetime, timedelta \n",
    "import time\n",
    "import pandas as pd\n",
    "pd.set_option('display.max_columns', None)\n",
    "\n",
    "import numpy as np\n",
    "# 变量定义\n",
    "login_url = \"http://10.200.32.39/jingbo-api/api/server/login\"\n",
    "search_url = \"http://10.200.32.39/jingbo-api/api/warehouse/dwDataItem/queryByItemNos\"\n",
    "upload_url = \"http://10.200.32.39/jingbo-api/api/dw/dataValue/pushDataValueList\"\n",
    "\n",
    "\n",
    "login_data = {\n",
    "    \"data\": {\n",
    "        \"account\": \"api_dev\",\n",
    "        \"password\": \"ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U=\",\n",
    "        \"tenantHashCode\": \"8a4577dbd919675758d57999a1e891fe\",\n",
    "        \"terminal\": \"API\"\n",
    "    },\n",
    "    \"funcModule\": \"API\",\n",
    "    \"funcOperation\": \"获取token\"\n",
    "}\n",
    "\n",
    "\n",
    "read_file_path_name = \"定性模型数据项12-11.xlsx\"\n",
    "one_cols = []\n",
    "two_cols = []\n",
    "\n",
    "\n",
    "def update_e_value(file_path, column_index, threshold):\n",
    "    \"\"\"\n",
    "    数据修正需求:2025年1月8日\n",
    "        如果如果今天的成本即期价跟昨天的成本价差正负1000以上,就按照昨天的成本价计算\n",
    "\n",
    "    更新Excel文件中指定列的值,如果新值与前一天的值变化大于阈值,则将新值改为前一天的值。\n",
    "\n",
    "    :param file_path: Excel文件路径\n",
    "    :param column_index: 需要更新的列索引\n",
    "    :param threshold: 变化阈值\n",
    "    \"\"\"\n",
    "    # 读取Excel文件\n",
    "    # try:\n",
    "    #     df = pd.read_excel(file_path, engine='openpyxl')\n",
    "    # except:\n",
    "    #     df = pd.read_excel(file_path, engine='xlrd')\n",
    "        \n",
    "    df = pd.read_excel(file_path)\n",
    "    # 所有列列统一数据格式为float\n",
    "    df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
    "    \n",
    "    # print(df.tail())\n",
    "    # 填充缺失值\n",
    "    df = df.fillna(method='ffill')\n",
    "\n",
    "    # 获取最后两行数据\n",
    "    df1 = df.tail(2)\n",
    "    # print(df1)\n",
    "    # 获取前一天的指定列值\n",
    "    previous_value = df1.iloc[0, column_index]\n",
    "    print('前一天的',previous_value,type(previous_value))\n",
    "    # 获取当前的指定列值\n",
    "    current_value = df1.iloc[1, column_index]\n",
    "    print('现在的',current_value,type(current_value))\n",
    "    # 判断指定列值的变化是否大于阈值\n",
    "    if abs(current_value - previous_value) > threshold:\n",
    "        # 如果变化大于阈值,将当前的指定列值改为前一天的值\n",
    "        df.iloc[-1, column_index] = previous_value\n",
    "        print('修改了')\n",
    "    # print(df.tail())\n",
    "    # 将修改后的数据写回Excel文件\n",
    "    df.to_excel(file_path, index=False,engine='openpyxl')\n",
    "\n",
    "def getLogToken():\n",
    "    login_res = requests.post(url=login_url, json=login_data, timeout=(3, 5))\n",
    "    text = json.loads(login_res.text)\n",
    "    if text[\"status\"]:\n",
    "        token = text[\"data\"][\"accessToken\"]\n",
    "    else:\n",
    "        print(\"获取认证失败\")\n",
    "        token =  None\n",
    "    return token\n",
    "\n",
    "def updateExcelDatabak(date='',token=None):\n",
    "    workbook = xlrd.open_workbook(read_file_path_name)\n",
    "\n",
    "    # 选择第一个表格\n",
    "    sheet = workbook.sheet_by_index(0)\n",
    "\n",
    "    row_data = sheet.row_values(1)\n",
    "    one_cols = row_data\n",
    "\n",
    "    cur_time,cur_time2 = getNow(date)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "#     datas = search_value\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else :\n",
    "        datas = None\n",
    "   \n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "#     for data_value in datas:\n",
    "#         dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    workbook = xlrd.open_workbook('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    # 获取所有sheet的个数\n",
    "    sheet_count = len(workbook.sheet_names())\n",
    "\n",
    "    # 获取所有sheet的名称\n",
    "    sheet_names = workbook.sheet_names()\n",
    "\n",
    "    new_workbook = xlwt.Workbook()\n",
    "    for i in range(sheet_count):\n",
    "        # 获取当前sheet\n",
    "        sheet = workbook.sheet_by_index(i)\n",
    "\n",
    "        # 获取sheet的行数和列数\n",
    "        row_count = sheet.nrows\n",
    "        col_count = sheet.ncols\n",
    "        # 获取原有数据\n",
    "        data = []\n",
    "        for row in range(row_count):\n",
    "            row_data = []\n",
    "            for col in range(col_count):\n",
    "                row_data.append(sheet.cell_value(row, col))\n",
    "            data.append(row_data)\n",
    "        # 创建xlwt的Workbook对象\n",
    "        # 创建sheet\n",
    "        new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
    "\n",
    "        # 将原有的数据写入新的sheet\n",
    "        for row in range(row_count):\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row, col, data[row][col])\n",
    "\n",
    "        if i == 0:\n",
    "            \n",
    "            # 在新的sheet中添加数据\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row_count, col, append_rows[col])\n",
    "\n",
    "    # 保存新的xls文件\n",
    "    new_workbook.save(\"定性模型数据项12-11.xlsx\")\n",
    "\n",
    "def updateYesterdayExcelData(date='', token=None):\n",
    "    # 使用pandas读取Excel文件\n",
    "    df = pd.read_excel(read_file_path_name, engine='openpyxl')\n",
    "\n",
    "    # 获取第二行的数据作为列名\n",
    "    one_cols = df.iloc[0,:].tolist()\n",
    "\n",
    "    # 获取当前日期的前一天\n",
    "    if date == '':\n",
    "        previous_date = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')\n",
    "    else:\n",
    "        # 字符串转日期\n",
    "        previous_date = (datetime.strptime(date, \"%Y-%m-%d\")-timedelta(days=1)).strftime('%Y-%m-%d')\n",
    "    \n",
    "\n",
    "    cur_time, cur_time2 = getNow(previous_date)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else:\n",
    "        datas = None\n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    print('更新数据前')\n",
    "    print(df.tail(1))\n",
    "    # 检查日期是否已存在于数据中\n",
    "    if previous_date not in df['日期'].values:\n",
    "        # 将新的数据添加到DataFrame中\n",
    "        new_row = pd.DataFrame([append_rows], columns=df.columns.tolist())\n",
    "        df = pd.concat([df, new_row], ignore_index=True)\n",
    "    else:\n",
    "        # 更新现有数据\n",
    "        print('日期存在,即将更新')\n",
    "        print('新数据',append_rows[1:])\n",
    "        df.loc[df['日期'] == previous_date, df.columns.tolist()[1:]] = append_rows[1:]\n",
    "\n",
    "    print('更新数据后')\n",
    "    print(df.tail(1))\n",
    "    # 使用pandas保存Excel文件\n",
    "    df.to_excel(\"定性模型数据项12-11.xlsx\", index=False, engine='openpyxl')\n",
    "\n",
    "\n",
    "def updateExcelData(date='', token=None):\n",
    "    # 使用pandas读取Excel文件\n",
    "    df = pd.read_excel(read_file_path_name, engine='openpyxl')\n",
    "\n",
    "    # 获取第一行的数据作为列名\n",
    "    # one_cols = df.columns.tolist()\n",
    "    \n",
    "    # 获取第二行的数据作为列名\n",
    "    one_cols = df.iloc[0,:].tolist()\n",
    "\n",
    "    cur_time, cur_time2 = getNow(date)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else:\n",
    "        datas = None\n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    # 将新的数据添加到DataFrame中\n",
    "    new_row = pd.DataFrame([append_rows], columns=df.columns.tolist())\n",
    "    df = pd.concat([df, new_row], ignore_index=True)\n",
    "    # df = df.append(pd.Series(append_rows), ignore_index=True)\n",
    "\n",
    "    # 使用pandas保存Excel文件\n",
    "    df.to_excel(\"定性模型数据项12-11.xlsx\", index=False, engine='openpyxl')\n",
    "\n",
    "\n",
    "def qualitativeModel():\n",
    "    df = pd.read_excel('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    df=df.fillna(df.ffill())\n",
    "    df1 = df[-2:].reset_index()\n",
    "    '''\n",
    "    # if df1.loc[1,'70号沥青开工率'] > 0.3:   \n",
    "    2025年1月8日 修改:\n",
    "        复盘分析后发现2024-7月开始,开工率数据从0.28 变为了28 ,改为下面的判断规则\n",
    "    '''\n",
    "    if df1.loc[1,'70号沥青开工率'] / 100  > 0.3:\n",
    "        a = (df1.loc[1,'70号沥青开工率'] / 100 -0.2)*5/0.1\n",
    "    else :\n",
    "        a = 0\n",
    "    b = df1.loc[1,'资金因素']\n",
    "    \n",
    "    print('昨日计划提货偏差改之前',df1.loc[1,'昨日计划提货偏差'])\n",
    "    # 昨日计划提货偏差 = 京博产量 - 计划产量\n",
    "    df1.loc[1,'昨日计划提货偏差'] = df1.loc[1,'京博产量'] - df1.loc[1,'计划产量']\n",
    "    \n",
    "    print('昨日计划提货偏差改之后',df1.loc[1,'昨日计划提货偏差'])\n",
    "    if df1.loc[1,'昨日计划提货偏差']>0:\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/2000\n",
    "    else :\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/3000\n",
    "        \n",
    "    # 生产情况 = (京博产量 - 计划产量)/500*5\n",
    "    d = (df1.loc[1,'京博产量'] - df1.loc[1,'计划产量']) / 500 * 5\n",
    "    \n",
    "    if df1.loc[1,'基质沥青库存']/265007 >0.8:\n",
    "        e = (df1.loc[1,'基质沥青库存'] - df1.loc[0,'基质沥青库存'])*10/-5000\n",
    "    else : \n",
    "        e = 0\n",
    "#     f = df1.loc[1,'下游客户价格预期']\n",
    "    f = 1 # 2025年1月23日修改:价格预期都按1计算\n",
    "    if abs(df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])>=100:\n",
    "        g = (df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])*50/100\n",
    "    else :\n",
    "        g = 0\n",
    "    h = df1.loc[1,'订单结构']\n",
    "    x = round(0.08*a+0*b+0.15*c+0.08*d +0.03*e +0.08*f +0.4*g+0.18*h+df1.loc[0,'京博指导价'],2)\n",
    "    return x\n",
    "\n",
    "\n",
    "def getNow(date='',offset=0):\n",
    "    if date == '':\n",
    "        now = datetime.now() - timedelta(days=offset)\n",
    "    else:\n",
    "        try:\n",
    "            date = datetime.strptime(date, \"%Y-%m-%d\")\n",
    "        except:\n",
    "            date = datetime.strptime(date, \"%Y%m%d\")\n",
    "        now = date\n",
    "\n",
    "    year = now.year\n",
    "    month = now.month\n",
    "    day = now.day\n",
    "\n",
    "    if month < 10:\n",
    "        month = \"0\" + str(month)\n",
    "    if day < 10:\n",
    "        day = \"0\" + str(day)\n",
    "    cur_time = str(year) + str(month) + str(day)\n",
    "    cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
    "    return cur_time,cur_time2\n",
    "\n",
    "def pushData(cur_time,x,token_push):\n",
    "    data1 = {\n",
    "        \"funcModule\": \"数据表信息列表\",\n",
    "        \"funcOperation\": \"新增\",\n",
    "        \"data\": [\n",
    "            {\"dataItemNo\": \"C01100036|Forecast_Price|DX|ACN\",\n",
    "             \"dataDate\": cur_time,\n",
    "             \"dataStatus\": \"add\",\n",
    "             \"dataValue\": x\n",
    "             }\n",
    "        ]\n",
    "    }\n",
    "    headers1 = {\"Authorization\": token_push}\n",
    "    res = requests.post(url=upload_url, headers=headers1, json=data1, timeout=(3, 5))\n",
    "    \n",
    "def start_2(date='',token=None):\n",
    "    workbook = xlrd.open_workbook(read_file_path_name)\n",
    "\n",
    "    # 选择第一个表格\n",
    "    sheet = workbook.sheet_by_index(0)\n",
    "\n",
    "    # 获取行数和列数\n",
    "    num_rows = sheet.nrows\n",
    "    \n",
    "    row_data = sheet.row_values(1)\n",
    "    one_cols = row_data\n",
    "\n",
    "    cur_time,cur_time2 = getNow(date)\n",
    "    \n",
    "    \n",
    "    \n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "#     datas = search_value\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else :\n",
    "        datas = None\n",
    "   \n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "#     for data_value in datas:\n",
    "#         dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    workbook = xlrd.open_workbook('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    # 获取所有sheet的个数\n",
    "    sheet_count = len(workbook.sheet_names())\n",
    "\n",
    "    # 获取所有sheet的名称\n",
    "    sheet_names = workbook.sheet_names()\n",
    "\n",
    "    new_workbook = xlwt.Workbook()\n",
    "    for i in range(sheet_count):\n",
    "        # 获取当前sheet\n",
    "        sheet = workbook.sheet_by_index(i)\n",
    "\n",
    "        # 获取sheet的行数和列数\n",
    "        row_count = sheet.nrows\n",
    "        col_count = sheet.ncols\n",
    "        # 获取原有数据\n",
    "        data = []\n",
    "        for row in range(row_count):\n",
    "            row_data = []\n",
    "            for col in range(col_count):\n",
    "                row_data.append(sheet.cell_value(row, col))\n",
    "            data.append(row_data)\n",
    "        # 创建xlwt的Workbook对象\n",
    "        # 创建sheet\n",
    "        new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
    "\n",
    "        # 将原有的数据写入新的sheet\n",
    "        for row in range(row_count):\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row, col, data[row][col])\n",
    "\n",
    "        if i == 0:\n",
    "            \n",
    "            # 在新的sheet中添加数据\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row_count, col, append_rows[col])\n",
    "\n",
    "    # 保存新的xls文件\n",
    "    new_workbook.save(\"定性模型数据项12-11.xlsx\")\n",
    "\n",
    "    update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "\n",
    "    df = pd.read_excel('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    df=df.fillna(df.ffill())\n",
    "    df1 = df[-2:].reset_index()\n",
    "    '''\n",
    "    # if df1.loc[1,'70号沥青开工率'] > 0.3:   \n",
    "    2025年1月8日 修改:\n",
    "        复盘分析后发现2024-7月开始,开工率数据从0.28 变为了28 ,改为下面的判断规则\n",
    "    '''\n",
    "    if df1.loc[1,'70号沥青开工率'] > 30:\n",
    "        a = (df1.loc[1,'70号沥青开工率']-0.2)*5/0.1\n",
    "    else :\n",
    "        a = 0\n",
    "    b = df1.loc[1,'资金因素']\n",
    "    if df1.loc[1,'昨日计划提货偏差']>0:\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/2000\n",
    "    else :\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/3000\n",
    "    d = df1.loc[1,'生产情况']\n",
    "    if df1.loc[1,'基质沥青库存']/265007 >0.8:\n",
    "        e = (df1.loc[1,'基质沥青库存'] - df1.loc[0,'基质沥青库存'])*10/-5000\n",
    "    else : \n",
    "        e = 0\n",
    "#     f = df1.loc[1,'下游客户价格预期']\n",
    "    f = 1 # 2025年1月23日修改:价格预期都按1计算\n",
    "    if abs(df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])>=100:\n",
    "        g = (df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])*50/100\n",
    "    else :\n",
    "        g = 0\n",
    "    h = df1.loc[1,'订单结构']\n",
    "    x = round(0.08*a+0*b+0.15*c+0.08*d +0.03*e +0.08*f +0.4*g+0.18*h+df1.loc[0,'京博指导价'],2)\n",
    "\n",
    "    login_res1 = requests.post(url=login_push_url, json=login_push_data, timeout=(3, 5))\n",
    "    text1 = json.loads(login_res1.text)\n",
    "    token_push = text1[\"data\"][\"accessToken\"]\n",
    "\n",
    "\n",
    "    data1 = {\n",
    "        \"funcModule\": \"数据表信息列表\",\n",
    "        \"funcOperation\": \"新增\",\n",
    "        \"data\": [\n",
    "            {\"dataItemNo\": \"C01100036|Forecast_Price|DX|ACN\",\n",
    "             \"dataDate\": cur_time,\n",
    "             \"dataStatus\": \"add\",\n",
    "             \"dataValue\": x\n",
    "             }\n",
    "\n",
    "        ]\n",
    "    }\n",
    "    headers1 = {\"Authorization\": token_push}\n",
    "    # res = requests.post(url=upload_url, headers=headers1, json=data1, timeout=(3, 5))\n",
    "    \n",
    "\n",
    "def start():\n",
    "    workbook = xlrd.open_workbook(read_file_path_name)\n",
    "\n",
    "\n",
    "\n",
    "    # 选择第一个表格\n",
    "    sheet = workbook.sheet_by_index(0)\n",
    "\n",
    "    # 获取行数和列数\n",
    "    num_rows = sheet.nrows\n",
    "\n",
    "\n",
    "\n",
    "    row_data = sheet.row_values(1)\n",
    "    one_cols = row_data\n",
    "\n",
    "\n",
    "    login_res = requests.post(url=login_url, json=login_data, timeout=(3, 5))\n",
    "    text = json.loads(login_res.text)\n",
    "    if text[\"status\"]:\n",
    "        token = text[\"data\"][\"accessToken\"]\n",
    "    else:\n",
    "        print(\"获取认证失败\")\n",
    "        token =  None\n",
    "\n",
    "\n",
    "    now = datetime.now()\n",
    "    year = now.year\n",
    "    month = now.month\n",
    "    day = now.day\n",
    "\n",
    "    if month < 10:\n",
    "        month = \"0\" + str(month)\n",
    "    if day < 10:\n",
    "        day = \"0\" + str(day)\n",
    "    cur_time = str(year) + str(month) + str(day)\n",
    "    cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "#     datas = search_value\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else :\n",
    "        datas = None\n",
    "   \n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "#     for data_value in datas:\n",
    "#         dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    workbook = xlrd.open_workbook('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    # 获取所有sheet的个数\n",
    "    sheet_count = len(workbook.sheet_names())\n",
    "\n",
    "    # 获取所有sheet的名称\n",
    "    sheet_names = workbook.sheet_names()\n",
    "\n",
    "    new_workbook = xlwt.Workbook()\n",
    "    for i in range(sheet_count):\n",
    "        # 获取当前sheet\n",
    "        sheet = workbook.sheet_by_index(i)\n",
    "\n",
    "        # 获取sheet的行数和列数\n",
    "        row_count = sheet.nrows\n",
    "        col_count = sheet.ncols\n",
    "        # 获取原有数据\n",
    "        data = []\n",
    "        for row in range(row_count):\n",
    "            row_data = []\n",
    "            for col in range(col_count):\n",
    "                row_data.append(sheet.cell_value(row, col))\n",
    "            data.append(row_data)\n",
    "        # 创建xlwt的Workbook对象\n",
    "        # 创建sheet\n",
    "        new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
    "\n",
    "        # 将原有的数据写入新的sheet\n",
    "        for row in range(row_count):\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row, col, data[row][col])\n",
    "\n",
    "        if i == 0:\n",
    "            # 在新的sheet中添加数据\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row_count, col, append_rows[col])\n",
    "\n",
    "    # 保存新的xls文件\n",
    "    new_workbook.save(\"定性模型数据项12-11.xlsx\")\n",
    "    \n",
    "    update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "\n",
    "    df = pd.read_excel('定性模型数据项12-11.xlsx')\n",
    "    df=df.fillna(df.ffill())\n",
    "    df1 = df[-2:].reset_index()\n",
    "    # if df1.loc[1,'70号沥青开工率'] > 0.3:   -- 2025年1月9日 发版更改\n",
    "    if df1.loc[1,'70号沥青开工率'] / 100  > 0.3:\n",
    "        a = (df1.loc[1,'70号沥青开工率'] / 100 -0.2)*5/0.1\n",
    "    else :\n",
    "        a = 0\n",
    "    b = df1.loc[1,'资金因素']\n",
    "    if df1.loc[1,'昨日计划提货偏差']>0:\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/2000\n",
    "    else :\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/3000\n",
    "    d = df1.loc[1,'生产情况']\n",
    "    if df1.loc[1,'基质沥青库存']/265007 >0.8:\n",
    "        e = (df1.loc[1,'基质沥青库存'] - df1.loc[0,'基质沥青库存'])*10/-5000\n",
    "    else : \n",
    "        e = 0\n",
    "#     f = df1.loc[1,'下游客户价格预期']\n",
    "    f = 1 # 2025年1月23日修改:价格预期都按1计算\n",
    "    if abs(df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])>=100:\n",
    "        g = (df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])*50/100\n",
    "    else :\n",
    "        g = 0\n",
    "    h = df1.loc[1,'订单结构']\n",
    "    x = round(0.08*a+0*b+0.15*c+0.08*d +0.03*e +0.08*f +0.4*g+0.18*h+df1.loc[0,'京博指导价'],2)\n",
    "    \n",
    "\n",
    "    # login_res1 = requests.post(url=login_url, json=login_data, timeout=(3, 30))\n",
    "    # text1 = json.loads(login_res1.text)\n",
    "    # token_push = text1[\"data\"][\"accessToken\"]\n",
    "\n",
    "\n",
    "    # data1 = {\n",
    "    #     \"funcModule\": \"数据表信息列表\",\n",
    "    #     \"funcOperation\": \"新增\",\n",
    "    #     \"data\": [\n",
    "    #         {\"dataItemNo\": \"C01100036|Forecast_Price|DX|ACN\",\n",
    "    #          \"dataDate\": cur_time,\n",
    "    #          \"dataStatus\": \"add\",\n",
    "    #          \"dataValue\": x\n",
    "    #          }\n",
    "\n",
    "    #     ]\n",
    "    # }\n",
    "    # headers1 = {\"Authorization\": token_push}\n",
    "    # res = requests.post(url=upload_url, headers=headers1, json=data1, timeout=(3, 5))\n",
    "    \n",
    "    \n",
    "\n",
    "\n",
    "def start_test():\n",
    "    workbook = xlrd.open_workbook(read_file_path_name)\n",
    "\n",
    "\n",
    "\n",
    "    # 选择第一个表格\n",
    "    sheet = workbook.sheet_by_index(0)\n",
    "\n",
    "    # 获取行数和列数\n",
    "    num_rows = sheet.nrows\n",
    "\n",
    "\n",
    "\n",
    "    row_data = sheet.row_values(1)\n",
    "    one_cols = row_data\n",
    "\n",
    "\n",
    "    login_res = requests.post(url=login_url, json=login_data, timeout=(3, 5))\n",
    "    text = json.loads(login_res.text)\n",
    "    if text[\"status\"]:\n",
    "        token = text[\"data\"][\"accessToken\"]\n",
    "    else:\n",
    "        print(\"获取认证失败\")\n",
    "        token =  None\n",
    "\n",
    "\n",
    "    now = datetime.now()\n",
    "    year = now.year\n",
    "    month = now.month\n",
    "    day = now.day\n",
    "\n",
    "    if month < 10:\n",
    "        month = \"0\" + str(month)\n",
    "    if day < 10:\n",
    "        day = \"0\" + str(day)\n",
    "    cur_time = str(year) + str(month) + str(day)\n",
    "    cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "#     datas = search_value\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else :\n",
    "        datas = None\n",
    "   \n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "#     for data_value in datas:\n",
    "#         dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    workbook = xlrd.open_workbook('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    # 获取所有sheet的个数\n",
    "    sheet_count = len(workbook.sheet_names())\n",
    "\n",
    "    # 获取所有sheet的名称\n",
    "    sheet_names = workbook.sheet_names()\n",
    "\n",
    "    new_workbook = xlwt.Workbook()\n",
    "    for i in range(sheet_count):\n",
    "        # 获取当前sheet\n",
    "        sheet = workbook.sheet_by_index(i)\n",
    "\n",
    "        # 获取sheet的行数和列数\n",
    "        row_count = sheet.nrows\n",
    "        col_count = sheet.ncols\n",
    "        # 获取原有数据\n",
    "        data = []\n",
    "        for row in range(row_count):\n",
    "            row_data = []\n",
    "            for col in range(col_count):\n",
    "                row_data.append(sheet.cell_value(row, col))\n",
    "            data.append(row_data)\n",
    "        # 创建xlwt的Workbook对象\n",
    "        # 创建sheet\n",
    "        new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
    "\n",
    "        # 将原有的数据写入新的sheet\n",
    "        for row in range(row_count):\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row, col, data[row][col])\n",
    "\n",
    "        if i == 0:\n",
    "            # 在新的sheet中添加数据\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row_count, col, append_rows[col])\n",
    "\n",
    "    # 保存新的xls文件\n",
    "    new_workbook.save(\"定性模型数据项12-11.xlsx\")\n",
    "    \n",
    "    update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "\n",
    "    df = pd.read_excel('定性模型数据项12-11.xlsx')\n",
    "    df=df.fillna(df.ffill())\n",
    "    df1 = df[-2:].reset_index()\n",
    "    # if df1.loc[1,'70号沥青开工率'] > 0.3:   -- 2025年1月9日 发版更改\n",
    "    if df1.loc[1,'70号沥青开工率'] / 100  > 0.3:\n",
    "        a = (df1.loc[1,'70号沥青开工率'] / 100 -0.2)*5/0.1\n",
    "    else :\n",
    "        a = 0\n",
    "    b = df1.loc[1,'资金因素']\n",
    "    if df1.loc[1,'昨日计划提货偏差']>0:\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/2000\n",
    "    else :\n",
    "        c = df1.loc[1,'昨日计划提货偏差']*10/3000\n",
    "    d = df1.loc[1,'生产情况']\n",
    "    if df1.loc[1,'基质沥青库存']/265007 >0.8:\n",
    "        e = (df1.loc[1,'基质沥青库存'] - df1.loc[0,'基质沥青库存'])*10/-5000\n",
    "    else : \n",
    "        e = 0\n",
    "#     f = df1.loc[1,'下游客户价格预期']\n",
    "    f = 1 # 2025年1月23日修改:价格预期都按1计算\n",
    "    if abs(df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])>=100:\n",
    "        g = (df1.loc[1,'即期成本'] - df1.loc[0,'即期成本'])*50/100\n",
    "    else :\n",
    "        g = 0\n",
    "    h = df1.loc[1,'订单结构']\n",
    "    x = round(0.08*a+0*b+0.15*c+0.08*d +0.03*e +0.08*f +0.4*g+0.18*h+df1.loc[0,'京博指导价'],2)\n",
    "    \n",
    "\n",
    "    # login_res1 = requests.post(url=login_url, json=login_data, timeout=(3, 30))\n",
    "    # text1 = json.loads(login_res1.text)\n",
    "    # token_push = text1[\"data\"][\"accessToken\"]\n",
    "\n",
    "\n",
    "    # data1 = {\n",
    "    #     \"funcModule\": \"数据表信息列表\",\n",
    "    #     \"funcOperation\": \"新增\",\n",
    "    #     \"data\": [\n",
    "    #         {\"dataItemNo\": \"C01100036|Forecast_Price|DX|ACN\",\n",
    "    #          \"dataDate\": cur_time,\n",
    "    #          \"dataStatus\": \"add\",\n",
    "    #          \"dataValue\": x\n",
    "    #          }\n",
    "\n",
    "    #     ]\n",
    "    # }\n",
    "    # headers1 = {\"Authorization\": token_push}\n",
    "    # res = requests.post(url=upload_url, headers=headers1, json=data1, timeout=(3, 5))\n",
    "    \n",
    "    \n",
    "\n",
    "\n",
    "\n",
    "def start_1():\n",
    "    workbook = xlrd.open_workbook(read_file_path_name)\n",
    "\n",
    "\n",
    "\n",
    "    # 选择第一个表格\n",
    "    sheet = workbook.sheet_by_index(0)\n",
    "\n",
    "    # 获取行数和列数\n",
    "    num_rows = sheet.nrows\n",
    "\n",
    "\n",
    "\n",
    "    row_data = sheet.row_values(1)\n",
    "    one_cols = row_data\n",
    "\n",
    "\n",
    "    login_res = requests.post(url=login_url, json=login_data, timeout=(3, 5))\n",
    "    text = json.loads(login_res.text)\n",
    "    if text[\"status\"]:\n",
    "        token = text[\"data\"][\"accessToken\"]\n",
    "    else:\n",
    "        print(\"获取认证失败\")\n",
    "        token =  None\n",
    "\n",
    "\n",
    "    now = datetime.now()  - timedelta(days=1)  \n",
    "    year = now.year\n",
    "    month = now.month\n",
    "    day = now.day\n",
    "\n",
    "    if month < 10:\n",
    "        month = \"0\" + str(month)\n",
    "    if day < 10:\n",
    "        day = \"0\" + str(day)\n",
    "    cur_time = str(year) + str(month) + str(day)\n",
    "    cur_time2 = str(year) + \"-\" + str(month) + \"-\" + str(day)\n",
    "    search_data = {\n",
    "        \"data\": {\n",
    "            \"date\": cur_time,\n",
    "            \"dataItemNoList\": one_cols[1:]\n",
    "        },\n",
    "        \"funcModule\": \"数据项\",\n",
    "        \"funcOperation\": \"查询\"\n",
    "    }\n",
    "    headers = {\"Authorization\": token}\n",
    "    search_res = requests.post(url=search_url, headers=headers, json=search_data, timeout=(3, 5))\n",
    "    search_value = json.loads(search_res.text)[\"data\"]\n",
    "#     datas = search_value\n",
    "    if search_value:\n",
    "        datas = search_value\n",
    "    else :\n",
    "        datas = None\n",
    "    \n",
    "   \n",
    "\n",
    "    append_rows = [cur_time2]\n",
    "    dataItemNo_dataValue = {}\n",
    "#     for data_value in datas:\n",
    "#         dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for data_value in datas:\n",
    "        if \"dataValue\" not in data_value:\n",
    "            print(data_value)\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = \"\"\n",
    "        else:\n",
    "            dataItemNo_dataValue[data_value[\"dataItemNo\"]] = data_value[\"dataValue\"]\n",
    "    for value in one_cols[1:]:\n",
    "        if value in dataItemNo_dataValue:\n",
    "            append_rows.append(dataItemNo_dataValue[value])\n",
    "        else:\n",
    "            append_rows.append(\"\")\n",
    "\n",
    "    workbook = xlrd.open_workbook('定性模型数据项12-11.xlsx')\n",
    "\n",
    "    # 获取所有sheet的个数\n",
    "    sheet_count = len(workbook.sheet_names())\n",
    "\n",
    "    # 获取所有sheet的名称\n",
    "    sheet_names = workbook.sheet_names()\n",
    "\n",
    "    new_workbook = xlwt.Workbook()\n",
    "    for i in range(sheet_count):\n",
    "        # 获取当前sheet\n",
    "        sheet = workbook.sheet_by_index(i)\n",
    "\n",
    "        # 获取sheet的行数和列数\n",
    "        row_count = sheet.nrows - 1\n",
    "        col_count = sheet.ncols\n",
    "        # 获取原有数据\n",
    "        data = []\n",
    "        for row in range(row_count):\n",
    "            row_data = []\n",
    "            for col in range(col_count):\n",
    "                row_data.append(sheet.cell_value(row, col))\n",
    "            data.append(row_data)\n",
    "        # 创建xlwt的Workbook对象\n",
    "        # 创建sheet\n",
    "        new_sheet = new_workbook.add_sheet(sheet_names[i])\n",
    "\n",
    "        # 将原有的数据写入新的sheet\n",
    "        for row in range(row_count):\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row, col, data[row][col])\n",
    "\n",
    "        if i == 0:\n",
    "            # 在新的sheet中添加数据\n",
    "            for col in range(col_count):\n",
    "                new_sheet.write(row_count, col, append_rows[col])\n",
    "\n",
    "    # 保存新的xls文件\n",
    "    new_workbook.save(\"定性模型数据项12-11.xlsx\")\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 原始代码备份\n",
    "\n",
    "# if __name__ == \"__main__\":\n",
    "\n",
    "    # 需要单独运行放开\n",
    "#      start_1()\n",
    "\n",
    "    # # 每天定时12点运行\n",
    "    # while True:\n",
    "    #     # 获取当前时间\n",
    "    #     current_time = time.strftime(\"%H:%M:%S\", time.localtime())\n",
    "    #     current_time_1 = time.strftime(\"%H:%M:%S\", time.localtime())\n",
    "\n",
    "    #     # 判断当前时间是否为执行任务的时间点\n",
    "    #     if current_time == \"12:00:00\":\n",
    "    #         print(\"执行定时任务\")\n",
    "    #         start()\n",
    "\n",
    "    #     # 休眠1秒钟,避免过多占用CPU资源\n",
    "    #         time.sleep(1)\n",
    "        \n",
    "    #     elif current_time_1 == \"20:00:00\":\n",
    "    #         print(\"更新数据\")\n",
    "    #         start_1()\n",
    "    #     time.sleep(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# if __name__ == \"__main__\":\n",
    "#     def main():\n",
    "#         # 获取当前日期\n",
    "#         date = datetime.now().date()\n",
    "#         date = date.strftime('%Y%m%d')\n",
    "#         # 获取登录token\n",
    "#         token = getLogToken()\n",
    "#         updateExcelData(date,token)\n",
    "#         update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "#         x = qualitativeModel()\n",
    "#         print('预测结果:',x)\n",
    "#         cur_time,cur_time2 = getNow(date)\n",
    "#         pushData(cur_time,x,token)\n",
    "\n",
    "#     print(\"运行中...\")\n",
    "#     # 每天定时12点运行\n",
    "#     while True:\n",
    "#         # 获取当前时间\n",
    "#         current_time = time.strftime(\"%H:%M:%S\", time.localtime())\n",
    "#         try:\n",
    "#             # 判断当前时间是否为执行任务的时间点\n",
    "#             if current_time == \"12:00:00\":\n",
    "#                 try:\n",
    "#                     main()\n",
    "#                 except Exception as e:\n",
    "#                     print(f\"12点执行失败: {e}\")\n",
    "#                     # 等待到12点30分再次执行\n",
    "#                     while current_time != \"12:30:00\":\n",
    "#                         current_time = time.strftime(\"%H:%M:%S\", time.localtime())\n",
    "#                         time.sleep(1)\n",
    "#                     try:\n",
    "#                         main()\n",
    "#                     except Exception as e:\n",
    "#                         print(f\"12点30分也执行失败: {e}\")\n",
    "#             elif current_time == \"20:00:00\":\n",
    "#                 print(\"更新前一天数据\")\n",
    "#                 token = getLogToken()\n",
    "#                 updateYesterdayExcelData(token=token)\n",
    "                \n",
    "#             time.sleep(1)\n",
    "#         except Exception as e:\n",
    "#             print(f\"执行失败: {e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20250201\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3587.7887 <class 'float'>\n",
      "现在的 3619.0713 <class 'float'>\n",
      "昨日计划提货偏差改之前 162.28\n",
      "昨日计划提货偏差改之后 520.4207999999999\n",
      "**************************************************预测结果: 3651.07\n",
      "20250202\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3619.0713 <class 'float'>\n",
      "现在的 3624.724 <class 'float'>\n",
      "昨日计划提货偏差改之前 162.28\n",
      "昨日计划提货偏差改之后 -75.01419999999962\n",
      "**************************************************预测结果: 3650.16\n",
      "20250203\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3624.724 <class 'float'>\n",
      "现在的 3698.7029 <class 'float'>\n",
      "昨日计划提货偏差改之前 162.28\n",
      "昨日计划提货偏差改之后 -68.52419999999984\n",
      "**************************************************预测结果: 3650.17\n",
      "20250204\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3698.7029 <class 'float'>\n",
      "现在的 3671.4625 <class 'float'>\n",
      "昨日计划提货偏差改之前 162.28\n",
      "昨日计划提货偏差改之后 -117.01919999999973\n",
      "**************************************************预测结果: 3650.11\n",
      "20250205\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3671.4625 <class 'float'>\n",
      "现在的 3622.508 <class 'float'>\n",
      "昨日计划提货偏差改之前 -817.76\n",
      "昨日计划提货偏差改之后 -81.05919999999969\n",
      "**************************************************预测结果: 3650.15\n",
      "20250206\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3622.508 <class 'float'>\n",
      "现在的 3513.5033 <class 'float'>\n",
      "昨日计划提货偏差改之前 578.78\n",
      "昨日计划提货偏差改之后 -33.19920000000002\n",
      "**************************************************预测结果: 3678.42\n",
      "20250207\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3513.5033 <class 'float'>\n",
      "现在的 3631.0462 <class 'float'>\n",
      "昨日计划提货偏差改之前 1303\n",
      "昨日计划提货偏差改之后 -53.10919999999987\n",
      "**************************************************预测结果: 3773.7\n",
      "20250208\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3631.0462 <class 'float'>\n",
      "现在的 3664.8865 <class 'float'>\n",
      "昨日计划提货偏差改之前 215.92\n",
      "昨日计划提货偏差改之后 -71.42919999999958\n",
      "**************************************************预测结果: 3750.17\n",
      "20250209\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3664.8865 <class 'float'>\n",
      "现在的 3680.6229 <class 'float'>\n",
      "昨日计划提货偏差改之前 -337.98\n",
      "昨日计划提货偏差改之后 -116.51919999999973\n",
      "**************************************************预测结果: 3750.11\n",
      "20250210\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3680.6229 <class 'float'>\n",
      "现在的 3719.1501 <class 'float'>\n",
      "昨日计划提货偏差改之前 1105.3\n",
      "昨日计划提货偏差改之后 -118.21919999999955\n",
      "**************************************************预测结果: 3750.11\n",
      "20250211\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3719.1501 <class 'float'>\n",
      "现在的 3806.0186 <class 'float'>\n",
      "昨日计划提货偏差改之前 776.6\n",
      "昨日计划提货偏差改之后 -111.46919999999955\n",
      "**************************************************预测结果: 3750.12\n",
      "20250212\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3806.0186 <class 'float'>\n",
      "现在的 3870.8876 <class 'float'>\n",
      "昨日计划提货偏差改之前 -543.94\n",
      "昨日计划提货偏差改之后 -77.78920000000016\n",
      "**************************************************预测结果: 3800.16\n",
      "20250213\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3870.8876 <class 'float'>\n",
      "现在的 3669.5691 <class 'float'>\n",
      "昨日计划提货偏差改之前 319.6\n",
      "昨日计划提货偏差改之后 9.210799999999836\n",
      "**************************************************预测结果: 3760.01\n",
      "20250214\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3669.5691 <class 'float'>\n",
      "现在的 3727.5257 <class 'float'>\n",
      "昨日计划提货偏差改之前 811.66\n",
      "昨日计划提货偏差改之后 14.500800000000709\n",
      "**************************************************预测结果: 3750.28\n",
      "20250215\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3727.5257 <class 'float'>\n",
      "现在的 3653.1038 <class 'float'>\n",
      "昨日计划提货偏差改之前 3093.54\n",
      "昨日计划提货偏差改之后 79.19080000000031\n",
      "**************************************************预测结果: 3750.38\n",
      "20250216\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3653.1038 <class 'float'>\n",
      "现在的 3690.2938 <class 'float'>\n",
      "昨日计划提货偏差改之前 448.52\n",
      "昨日计划提货偏差改之后 -50.14919999999984\n",
      "**************************************************预测结果: 3750.19\n",
      "20250217\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3690.2938 <class 'float'>\n",
      "现在的 3666.4264 <class 'float'>\n",
      "昨日计划提货偏差改之前 -1512.9\n",
      "昨日计划提货偏差改之后 -138.7491999999993\n",
      "**************************************************预测结果: 3750.08\n",
      "20250218\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3666.4264 <class 'float'>\n",
      "现在的 3710.5143 <class 'float'>\n",
      "昨日计划提货偏差改之前 1736.44\n",
      "昨日计划提货偏差改之后 -120.28920000000016\n",
      "**************************************************预测结果: 3800.53\n",
      "20250219\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3710.5143 <class 'float'>\n",
      "现在的 3786.9784 <class 'float'>\n",
      "昨日计划提货偏差改之前 449.02\n",
      "昨日计划提货偏差改之后 -205.32920000000013\n",
      "**************************************************预测结果: 3800.41\n",
      "20250220\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3786.9784 <class 'float'>\n",
      "现在的 3766.1403 <class 'float'>\n",
      "昨日计划提货偏差改之前 1284.6\n",
      "昨日计划提货偏差改之后 -186.1891999999998\n",
      "**************************************************预测结果: 3830.46\n",
      "20250221\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3766.1403 <class 'float'>\n",
      "现在的 3747.6395 <class 'float'>\n",
      "昨日计划提货偏差改之前 2301.56\n",
      "昨日计划提货偏差改之后 -186.66919999999936\n",
      "**************************************************预测结果: 3850.48\n",
      "20250222\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3747.6395 <class 'float'>\n",
      "现在的 3564.5329 <class 'float'>\n",
      "昨日计划提货偏差改之前 3639.18\n",
      "昨日计划提货偏差改之后 -204.83919999999944\n",
      "**************************************************预测结果: 3813.85\n",
      "20250223\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3564.5329 <class 'float'>\n",
      "现在的 3585.6018 <class 'float'>\n",
      "昨日计划提货偏差改之前 2779.86\n",
      "昨日计划提货偏差改之后 -191.76919999999973\n",
      "**************************************************预测结果: 3850.49\n",
      "20250224\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3585.6018 <class 'float'>\n",
      "现在的 3668.5404 <class 'float'>\n",
      "昨日计划提货偏差改之前 787.18\n",
      "昨日计划提货偏差改之后 -169.46919999999955\n",
      "**************************************************预测结果: 3850.04\n",
      "20250225\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3668.5404 <class 'float'>\n",
      "现在的 3791.3805 <class 'float'>\n",
      "昨日计划提货偏差改之前 -2220.81\n",
      "昨日计划提货偏差改之后 284.0117\n",
      "**************************************************预测结果: 3825.27\n",
      "20250226\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3791.3805 <class 'float'>\n",
      "现在的 3553.9243 <class 'float'>\n",
      "昨日计划提货偏差改之前 1969.52\n",
      "昨日计划提货偏差改之后 347.3217000000004\n",
      "**************************************************预测结果: 3753.31\n",
      "20250227\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3553.9243 <class 'float'>\n",
      "现在的 3576.4854 <class 'float'>\n",
      "昨日计划提货偏差改之前 4503.35\n",
      "昨日计划提货偏差改之后 302.53169999999955\n",
      "**************************************************预测结果: 3800.73\n",
      "20250228\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3576.4854 <class 'float'>\n",
      "现在的 3645.4569 <class 'float'>\n",
      "昨日计划提货偏差改之前 4517.04\n",
      "昨日计划提货偏差改之后 -363.1983\n",
      "**************************************************预测结果: 3799.79\n",
      "20250301\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3645.4569 <class 'float'>\n",
      "现在的 3615.0332 <class 'float'>\n",
      "昨日计划提货偏差改之前 993.87\n",
      "昨日计划提货偏差改之后 1276.8767999999995\n",
      "**************************************************预测结果: 3802.24\n",
      "20250302\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3615.0332 <class 'float'>\n",
      "现在的 3615.0995 <class 'float'>\n",
      "昨日计划提货偏差改之前 1499.46\n",
      "昨日计划提货偏差改之后 663.4968000000003\n",
      "**************************************************预测结果: 3801.29\n",
      "20250303\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:53: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n",
      "  df = df.applymap(lambda x: float(x) if isinstance(x, (int, float)) else x)\n",
      "C:\\Users\\EDY\\AppData\\Local\\Temp\\ipykernel_12764\\1472055096.py:57: FutureWarning: DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n",
      "  df = df.fillna(method='ffill')\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "前一天的 3615.0995 <class 'float'>\n",
      "现在的 3657.0767 <class 'float'>\n",
      "昨日计划提货偏差改之前 1499.46\n",
      "昨日计划提货偏差改之后 663.4968000000003\n",
      "**************************************************预测结果: 3801.29\n"
     ]
    }
   ],
   "source": [
    "# 重新上传定性数据\n",
    "\n",
    "def main(date='',token=None):\n",
    "    updateExcelData(date,token)\n",
    "    update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "    x = qualitativeModel()\n",
    "    print('**************************************************预测结果:',x)\n",
    "    cur_time,cur_time2 = getNow(date)\n",
    "    pushData(cur_time,x,token)\n",
    "\n",
    "\n",
    "start_date = datetime(2025, 2, 1)\n",
    "end_date = datetime(2025, 3, 4)\n",
    "token = getLogToken()\n",
    "while start_date < end_date:\n",
    "    print(start_date.strftime('%Y%m%d'))\n",
    "    main(start_date.strftime('%Y%m%d'),token)\n",
    "    start_date += timedelta(days=1)\n",
    "    time.sleep(5)\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# # 调试更新数据\n",
    "# date = '2025-01-24'\n",
    "# token = getLogToken()\n",
    "# updateYesterdayExcelData(date=date,token=token)\n",
    "# print('更新完了')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# # 快速调试线上\n",
    "# def main():\n",
    "#     # 获取当前日期\n",
    "#     date = datetime.now().date()\n",
    "#     date = date.strftime('%Y%m%d')\n",
    "#     # 获取登录token\n",
    "#     token = getLogToken()\n",
    "#     updateExcelData(date,token)\n",
    "#     update_e_value('定性模型数据项12-11.xlsx', 8, 1000)\n",
    "#     x = qualitativeModel()\n",
    "#     print('预测结果:',x)\n",
    "#     cur_time,cur_time2 = getNow(date)\n",
    "#     pushData(cur_time,x,token)\n",
    "\n",
    "# current_time = time.strftime(\"%H:%M:%S\", time.localtime())\n",
    "# main()\n",
    "# token = getLogToken()\n",
    "# updateYesterdayExcelData(token=token)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}