def main_flow(plan_name, area_name): def count_notzero_rate(series): not_zero = series[series > 0] rate = (len(not_zero) / len(series)) * 1.00 return rate print('商品信息表 sku_info_df read over!') skudata = sku_info_1.skuData( file_path='../data/{}/sku信息:{}.xlsx'.format(plan_name, area_name)) RDC_period = 7 FDC_period = 2 service_level = 0.985 rdc_bp = 20 fdc_bp = 5 nrtk = 1.0 shop_period = 0 shop_service_level = 0 shop_bp = 0 shop_nrtk = 0 parameter = { 'RDC补货周期': RDC_period, 'FDC调拨周期': FDC_period, '服务水平': service_level, 'RDC_BP': rdc_bp, 'FDC_BP': fdc_bp, 'nrtk': nrtk, 'shop调拨周期': shop_period, 'shop服务水平': shop_service_level, 'shop_BP': shop_bp, 'shop_nrtk': shop_nrtk } # mlk duration_info = duration.dutation( file_path='../data/{}/仓网门店数据1:CDC-RDC.xlsx'.format(plan_name)) CDC_RDC_info = duration_info.cdc_rdc RDC_FDC_info = duration_info.rdc_fdc RDC_list = CDC_RDC_info['RDC'].drop_duplicates().tolist() FAC_CDC_info = duration_info.fac_cdc FAC_RDC_info = duration_info.fac_rdc # print('商品布局方案:{}'.format(goods_layout)) if not os.path.exists( 'E:/meilinkai/data/goods_layout_{}/'.format(plan_name)): os.mkdir('E:/meilinkai/data/goods_layout_{}/'.format(plan_name)) os.mkdir('E:/meilinkai/data/goods_layout_{}/sale/'.format(plan_name)) os.mkdir('E:/meilinkai/data/goods_layout_{}/stock/'.format(plan_name)) os.mkdir( 'E:/meilinkai/data/goods_layout_{}/repleshment/'.format(plan_name)) RDC_FDC_info.to_csv( '../data/goods_layout_{}/RDC_FDC.csv'.format(plan_name), index=False) print(parameter) saledata_toc = SaleData('../data/{}/覆盖范围.csv'.format(plan_name), '../data/{}/订单数据:{}.xlsx'.format( plan_name, area_name), plan_name, storeORshop='store_city') turnover_dict = {} shop_turnover_dict = {} xianhuo_day = pd.DataFrame(index=saledata_toc.get_daterange()) xianhuo_sku = pd.DataFrame(index=saledata_toc.get_sku()) accuracy_sku = pd.DataFrame(index=saledata_toc.get_sku()) # shopdata_toc = SaleData('../data/goods_layout_{}/shop_toc_statistic_match.csv'.format(goods_layout), # storeORshop='shop_id') # shop_xianhuo_day = pd.DataFrame(index=shopdata_toc.get_daterange()) # shop_xianhuo_sku = pd.DataFrame(index=shopdata_toc.get_sku()) # shop_accuracy_sku = pd.DataFrame(index=shopdata_toc.get_sku()) eclp_stock_sum = 0 sale_sum = 0 stock_sum = 0 data_cdc_hangzhou_toc = saledata_toc.get_sales( '杭州', storeORshop='store_city').fillna(0) # sale_sum += data_cdc_hangzhou_toc.values.sum() # print(sale_sum) if plan_name == '10、华中:杭州-武汉2': cdc_guangzhou_sale = data_cdc_hangzhou_toc else: cdc_guangzhou_sale = pd.DataFrame(index=data_cdc_hangzhou_toc.index) for RDC in RDC_list: data_rdc_toc = saledata_toc.get_sales( RDC, storeORshop='store_city').fillna(0) sale_sum += data_rdc_toc.values.sum() # print(sale_sum) rdc_sale = data_rdc_toc.copy() print('RDC:{} 销售统计!时间:{}'.format( RDC, datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) if RDC in RDC_FDC_info['RDC'].drop_duplicates().tolist(): for fdc_dic in RDC_FDC_info[RDC_FDC_info['RDC'] == RDC][[ 'FDC', 'vlt(hour)' ]].to_dict('records'): data_toc_1 = saledata_toc.get_sales( fdc_dic['FDC'], storeORshop='store_city').fillna(0) print('>>>>>>>{}对应FDC:{},模拟补货!时间:{}'.format( RDC, fdc_dic['FDC'], datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) stock_toc_1 = pd.DataFrame(index=data_toc_1.index) replenish_toc_1 = pd.DataFrame(index=data_toc_1.index) for sku in saledata_toc.get_sku(fdc_dic['FDC'], storeORshop='store_city'): if skudata.get_factory(sku) == '启东': print(fdc_dic['FDC'] + sku + '危险品') stock_toc_1[sku], replenish_toc_1[sku], accuracy_sku.loc[ sku, fdc_dic['FDC']] = inventoryCal.stock_simulation_2( data_toc_1[sku], FDC_period, math.ceil(fdc_dic['vlt(hour)'] / 24), k=service_level, bp=fdc_bp, nrtk=nrtk, min_except=1) stock_sum += stock_toc_1.values.sum() sale_sum += data_toc_1.values.sum() print(stock_sum, sale_sum) turnover_dict[fdc_dic['FDC']] = stock_toc_1.fillna( 0).values.sum() / data_toc_1.fillna(0).values.sum() data_toc_1.to_csv( '../data/goods_layout_{}/sale/FDC_{}.csv'.format( plan_name, fdc_dic['FDC'])) stock_toc_1.to_csv( '../data/goods_layout_{}/stock/FDC_{}.csv'.format( plan_name, fdc_dic['FDC'])) replenish_toc_1.to_csv( '../data/goods_layout_{}/repleshment/FDC_{}.csv'.format( plan_name, fdc_dic['FDC'])) print(' >>>>>>>{}对应FDC:{}计算完毕!平均周转天数为:{:.2f}'.format( RDC, fdc_dic['FDC'], turnover_dict[fdc_dic['FDC']])) xianhuo_day[fdc_dic['FDC']] = stock_toc_1.apply( count_notzero_rate, axis=1) xianhuo_sku[fdc_dic['FDC']] = stock_toc_1.apply( count_notzero_rate, axis=0) rdc_sale = rdc_sale.add(replenish_toc_1, fill_value=0) rdc_sale = rdc_sale.fillna(0) stock_df = pd.DataFrame(index=rdc_sale.index) replenish_df = pd.DataFrame(index=rdc_sale.index) print('RDC:{} 正在模拟库存!'.format(RDC)) for sku in list(rdc_sale.columns): # stock_df[sku], _, accuracy_sku.loc[sku, RDC] = inventoryCal.stock_simulation_2(rdc_sale[sku], # RDC_period, 4, # k=service_level, bp=bp, # nrtk=nrtk, min_except=1) vlt = CDC_RDC_info.set_index(['总仓', 'RDC']).loc[('杭州市', RDC), 'vlt(hour)'] stock_df[sku], replenish_df[sku], accuracy_sku.loc[ sku, RDC] = inventoryCal.stock_simulation_2(rdc_sale[sku], RDC_period, math.ceil(vlt / 24), k=service_level, bp=rdc_bp, nrtk=nrtk, min_except=1) cdc_guangzhou_sale = cdc_guangzhou_sale.add(replenish_df[[sku]], fill_value=0) print("开始保存") # if not os.path.exists('E:/DepartmentProject/mlk/data/goods_layout_{}/'.format(plan_name)): # os.mkdir('E:/DepartmentProject/mlk/data/goods_layout_{}/'.format(plan_name)) # os.mkdir('E:/DepartmentProject/mlk/data/goods_layout_{}/sale/'.format(plan_name)) # os.mkdir('E:/DepartmentProject/mlk/data/goods_layout_{}/stock/'.format(plan_name)) # os.mkdir('E:/DepartmentProject/mlk/data/goods_layout_{}/repleshment/'.format(plan_name)) rdc_sale.to_csv('../data/goods_layout_{}/sale/RDC_{}.csv'.format( plan_name, RDC)) stock_df.to_csv('../data/goods_layout_{}/stock/RDC_{}.csv'.format( plan_name, RDC)) replenish_df.to_csv( '../data/goods_layout_{}/repleshment/RDC_{}.csv'.format( plan_name, RDC)) stock_sum += int(stock_df.fillna(0).values.sum()) if RDC_FDC_info.empty == False: sale_sum += rdc_sale.values.sum() print(stock_df.fillna(0).values.sum(), rdc_sale.fillna(0).values.sum()) turnover_dict[RDC] = stock_df.fillna(0).values.sum() / rdc_sale.fillna( 0).values.sum() xianhuo_day[RDC] = stock_df.apply(count_notzero_rate, axis=1) xianhuo_sku[RDC] = stock_df.apply(count_notzero_rate, axis=0) print('{}模拟完成!平均周转天数为:{:.2f}'.format(RDC, turnover_dict[RDC])) del stock_df del replenish_df # cdc_guangzhou_sale = cdc_guangzhou_sale.fillna(0) # cdc_wuhan_sale = cdc_wuhan_sale.fillna(0) cdc_guangzhou_stock_df = pd.DataFrame(index=cdc_guangzhou_sale.index) # cdc_wuhan_stock_df = pd.DataFrame(index=cdc_wuhan_sale.index) cdc_guangzhou_replenish_df = pd.DataFrame(index=cdc_guangzhou_sale.index) # cdc_wuhan_replenish_df = pd.DataFrame(index=cdc_wuhan_sale.index) # print('CDC 武汉 正在模拟库存!') # cdc_wuhan_sale_use = pd.DataFrame(index=cdc_wuhan_sale.index) # for sku in list(cdc_wuhan_sale.columns): # cdc_wuhan_sale_use[sku] = cdc_wuhan_sale[sku] # cdc_wuhan_stock_df[sku], cdc_wuhan_replenish_df[sku], accuracy_sku.loc[ # sku, 'CDC武汉'] = inventoryCal.stock_simulation_2(cdc_wuhan_sale[sku], # RDC_period, # math.ceil( # 42 / 24), # k=service_level, # bp=bp, nrtk=nrtk, min_except=1) # # cdc_wuhan_sale_use.dropna().to_csv('../data/goods_layout_{}/sale/CDC_{}.csv'.format(goods_layout, '武汉')) # cdc_wuhan_stock_df.to_csv('../data/goods_layout_{}/stock/CDC_{}.csv'.format(goods_layout, '武汉')) # cdc_wuhan_replenish_df.to_csv('../data/goods_layout_{}/repleshment/CDC_{}.csv'.format(goods_layout, '武汉')) # stock_sum += cdc_wuhan_stock_df.values.sum() # # sale_sum += cdc_wuhan_sale_use.values.sum() # turnover_dict['cdc武汉'] = cdc_wuhan_stock_df.values.sum() / cdc_wuhan_sale_use.values.sum() # print('{}模拟完成!平均周转天数为:{:.2f}'.format('cdc武汉', turnover_dict['cdc武汉'])) if plan_name == '10、华中:杭州-武汉2': print('CDC 杭州 正在模拟库存!') cdc_guangzhou_sale_use = pd.DataFrame(index=cdc_guangzhou_sale.index) for sku in list(cdc_guangzhou_sale.columns): vlt = FAC_CDC_info.set_index( ['工厂', 'CDC']).loc[(skudata.get_factory(sku) + '市', '杭州市'), 'vlt(hour)'] cdc_guangzhou_sale_use[sku] = cdc_guangzhou_sale[sku] cdc_guangzhou_stock_df[sku], cdc_guangzhou_replenish_df[ sku], accuracy_sku.loc[ sku, 'CDC杭州市'] = inventoryCal.stock_simulation_2( cdc_guangzhou_sale[sku], RDC_period, math.ceil(vlt / 24), k=service_level, bp=rdc_bp, nrtk=nrtk, min_except=1) cdc_guangzhou_sale_use.dropna().to_csv( '../data/goods_layout_{}/sale/CDC_{}.csv'.format(plan_name, '杭州市')) cdc_guangzhou_stock_df.to_csv( '../data/goods_layout_{}/stock/CDC_{}.csv'.format( plan_name, '杭州市')) cdc_guangzhou_replenish_df.to_csv( '../data/goods_layout_{}/repleshment/CDC_{}.csv'.format( plan_name, '杭州市')) stock_sum += cdc_guangzhou_stock_df.values.sum() sale_sum += cdc_guangzhou_sale_use.values.sum() turnover_dict['cdc杭州市'] = cdc_guangzhou_stock_df.values.sum( ) / cdc_guangzhou_sale_use.values.sum() print('{}模拟完成!平均周转天数为:{:.2f}'.format('cdc杭州市', turnover_dict['cdc杭州市'])) print(stock_sum, sale_sum) turnover_dict['总体'] = stock_sum / sale_sum else: print(stock_sum, sale_sum) turnover_dict['总体'] = stock_sum / sale_sum writer = pd.ExcelWriter( '../data/goods_layout_{}/RDC_BP{}FDC_BP{}补货{}调拨{}服务水平{}NRTk{}.xlsx'. format(plan_name, rdc_bp, fdc_bp, RDC_period, FDC_period, service_level, nrtk)) pd.DataFrame(parameter, index=[ '0', ]).to_excel(writer, sheet_name='参数详情') xianhuo_day.to_excel(writer, sheet_name='现货率按天') xianhuo_sku.to_excel(writer, sheet_name='现货率按SKU') accuracy_sku.to_excel(writer, sheet_name='预测准确率按SKU') # shop_xianhuo_day.to_excel(writer, sheet_name='门店现货率按天') # shop_xianhuo_sku.to_excel(writer, sheet_name='门店现货率按SKU') # shop_accuracy_sku.to_excel(writer, sheet_name='门店预测准确率按SKU') pd.DataFrame.from_dict(turnover_dict, orient='index').to_excel(writer, sheet_name='仓库平均周转天数') pd.DataFrame.from_dict(shop_turnover_dict, orient='index').to_excel(writer, sheet_name='门店平均周转天数') print('模拟完成!!!时间:{}'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) # percent_dir1 = r'../data/cal_data/result/eclp/result{}'.format(percent) # split_pallet_num1 = 2.0 # anli = AnliSimulation.AnliSimulation(percent_dir=percent_dir1, split_pallet_num=split_pallet_num1) # anli.cal_storage_cost().to_excel(writer,sheet_name='仓储费用') # anli.cal_transport_cost_1().to_excel(writer,sheet_name='补货以及调拨费用') writer.save()
if shop_dic['shop_id'] in shopdata_toc.get_stores( storeORshop='shop_id'): data_toc_1 = shopdata_toc.get_sales( shop_dic['shop_id'], storeORshop='shop_id').fillna(0) print(' -------{}对应shop:{}开始计算'.format( RDC, shop_dic['shop_id'])) stock_toc_1 = pd.DataFrame(index=data_toc_1.index) replenish_toc_1 = pd.DataFrame(index=data_toc_1.index) for sku in shopdata_toc.get_sku(shop_dic['shop_id'], storeORshop='shop_id'): stock_toc_1[sku], replenish_toc_1[ sku], shop_accuracy_sku.loc[sku, shop_dic[ 'shop_id']] = inventoryCal.stock_simulation_2( data_toc_1[sku], shop_period, int(shop_dic['VLT']), k=shop_service_level, bp=shop_bp, nrtk=shop_nrtk) stock_sum += stock_toc_1.values.sum() sale_sum += data_toc_1.values.sum() shop_turnover_dict[shop_dic[ 'shop_id']] = stock_toc_1.fillna(0).values.sum( ) / data_toc_1.fillna(0).values.sum() data_toc_1.to_csv( '../data/goods_layout_{}/sale/shop_{}.csv'.format( goods_layout, shop_dic['shop_id'])) stock_toc_1.to_csv( '../data/goods_layout_{}/stock/shop_{}.csv'.format( goods_layout, shop_dic['shop_id'])) replenish_toc_1.to_csv(
fdc_dic['FDC'], storeORshop='store_city').fillna(0) print('>>>>>>>{}对应FDC:{},模拟补货!时间:{}'.format( RDC, fdc_dic['FDC'], datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) stock_toc_1 = pd.DataFrame(index=data_toc_1.index) replenish_toc_1 = pd.DataFrame(index=data_toc_1.index) for sku in saledata_toc.get_sku(fdc_dic['FDC'], storeORshop='store_city'): if skudata.get_factory(sku) == '启东': print(fdc_dic['FDC'] + sku + '危险品') stock_toc_1[sku], replenish_toc_1[sku], accuracy_sku.loc[ sku, fdc_dic['FDC']] = inventoryCal.stock_simulation_2( data_toc_1[sku], FDC_period, math.ceil(fdc_dic['vlt(hour)'] / 24), k=service_level, bp=bp, nrtk=nrtk, min_except=1) stock_sum += stock_toc_1.values.sum() sale_sum += data_toc_1.values.sum() turnover_dict[fdc_dic['FDC']] = stock_toc_1.fillna( 0).values.sum() / data_toc_1.fillna(0).values.sum() data_toc_1.to_csv( '../data/goods_layout_{}/sale/FDC_{}.csv'.format( plan_name, fdc_dic['FDC'])) stock_toc_1.to_csv( '../data/goods_layout_{}/stock/FDC_{}.csv'.format( plan_name, fdc_dic['FDC'])) replenish_toc_1.to_csv( '../data/goods_layout_{}/repleshment/FDC_{}.csv'.format(
data_rdc_toc = saledata_toc.get_sales(RDC, storeORshop='start_city').fillna(0) sale_sum += data_rdc_toc.values.sum() rdc_sale = data_rdc_toc.copy() print('RDC:{} 销售统计!时间:{}'.format(RDC, datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) if RDC in shop_info['RDC'].drop_duplicates().tolist(): print('门店销售统计,并模拟计算!') for shop_dic in shop_info[shop_info['RDC'] == RDC][['shop_id', 'VLT']].to_dict('records'): if shop_dic['shop_id'] in shopdata_toc.get_stores(storeORshop='shop_id'): data_toc_1 = shopdata_toc.get_sales(shop_dic['shop_id'], storeORshop='shop_id').fillna(0) print(' -------{}对应shop:{}开始计算'.format(RDC, shop_dic['shop_id'])) stock_toc_1 = pd.DataFrame(index=data_toc_1.index) replenish_toc_1 = pd.DataFrame(index=data_toc_1.index) for sku in shopdata_toc.get_sku(shop_dic['shop_id'], storeORshop='shop_id'): stock_toc_1[sku], replenish_toc_1[sku], shop_accuracy_sku.loc[ sku, shop_dic['shop_id']] = inventoryCal.stock_simulation_2(data_toc_1[sku], shop_period, math.ceil(shop_dic['VLT'] / 24), k=shop_service_level, bp=shop_bp, nrtk=shop_nrtk) stock_sum += stock_toc_1.values.sum() sale_sum += data_toc_1.values.sum() shop_turnover_dict[shop_dic['shop_id']] = stock_toc_1.fillna(0).values.sum() / data_toc_1.fillna( 0).values.sum() data_toc_1.to_csv( '../data/goods_layout_{}/sale/shop_{}.csv'.format(goods_layout, shop_dic['shop_id'])) stock_toc_1.to_csv( '../data/goods_layout_{}/stock/shop_{}.csv'.format(goods_layout, shop_dic['shop_id'])) replenish_toc_1.to_csv( '../data/goods_layout_{}/repleshment/shop_{}.csv'.format(goods_layout, shop_dic['shop_id'])) print(' -------{}对应shop:{}计算完毕!平均周转天数为:{:.2f}'.format(RDC, shop_dic['shop_id'], shop_turnover_dict[shop_dic['shop_id']])) shop_xianhuo_day[shop_dic['shop_id']] = stock_toc_1.apply(count_notzero_rate, axis=1) shop_xianhuo_sku[shop_dic['shop_id']] = stock_toc_1.apply(count_notzero_rate, axis=0)