df1有两列分别是E2和E2new, df2有一列是‘名称’,代码要求如果E2的值 存在于df2列‘名称'中,则E2new=E2,否则E2NEW=0

时间: 2024-12-14 17:24:39 AIGC 浏览: 37
你可以使用pandas的`isin()`函数来检查`df1`的`E2`列是否存在于`df2`的`名称`列中,然后基于这个条件更新`df1`的`E2new`列。以下是相应的代码示例: ```python import pandas as pd # 假设df1和df2的结构如下: df1 = pd.DataFrame({'E2': ['value1', 'value2', 'value3'], 'E2new': [0, 0, 0]}) df2 = pd.DataFrame({'名称': ['name1', 'name2', 'name4']}) # 检查df1的E2是否在df2的名称列中,得到布尔系列 lookup_series = df1['E2'].isin(df2['名称']) # 根据lookup_series创建新的df1,将E2new设置为相应的E2或0 df1['E2new'] = df1.apply(lambda row: row['E2'] if lookup_series[row.name] else 0, axis=1) ``` 这会把`df1`中`E2`存在的值赋给`E2new`,如果不存在则设置为0。
相关问题

pandas 已知有df1,df2,要求df1中E2这一列的值如果在df2的名称这一列中存在,则df1对应的E2new的值与E2相同,如果不存在则对应的E2new的值为oldE2

在pandas中,你可以使用`merge`函数结合条件操作来实现这个需求。假设你的数据结构如下: ```python df1 = { 'A': [1, 2, 3], 'E2': ['value1', 'value2', 'value3'], 'E2new': [np.nan] * len(df1) } df2 = { '名称': ['name1', 'name2', 'name4'], '其他列': ... # 这里可以忽略 } ``` 你可以使用下面的代码将`df1`中的`E2`列与`df2`的`名称`列合并,并根据匹配的情况更新`df1`的`E2new`列: ```python # 先通过连接两数据框并查找匹配项 merged_df = pd.merge(df1, df2, left_on='E2', right_on='名称', how='left') # 如果找到了匹配,取`df2`的`名称`列;如果没有找到,保留原始的`E2`值 df1['E2new'] = merged_df[['名称']].fillna(df1['E2']) ``` 这里假设`name1`对应`value1`,`name2`对应`value2`,而`name3`或`name4`不在`df2`中,所以`value3`将保持不变。

df1有列match,E2,E3.df2也有列match,E2,E3,将df1df2按照match匹配的E2E3值赋予给df1的E2E3,并且df2中的其他列不会保留到df1中

在Pandas中,你可以使用`merge`或者`update`函数来合并两个DataFrame并只保留匹配条件下的列。假设你的数据框名为df1和df2,它们都有'match', 'E2', 'E3'这三个共同的列。如果你想更新df1的数据,可以按'match'键进行连接,然后选择需要的列。这里是一个简单的例子: ```python # 首先确保两个数据框的'match'列是唯一的 df1 = df1.set_index('match') df2 = df2.set_index('match') # 使用 merge 或 update 函数 df1.update(df2[['E2', 'E3']]) # 如果你想直接修改df1 # 或者 result = df1.merge(df2[['E2', 'E3']], left_index=True, right_index=True, how='left') # 结果保存到一个新的dataframe result # 结果df1 (或result) 将会包含df2的'E2'和'E3'列,而df2的其他列不会出现在结果中 ``` 这将保证df1中'match'对应的'E2'和'E3'值替换为df2的相应值,同时df1原有的其他列保持不变。
阅读全文

相关推荐

import cx_Oracle import pandas as pd from reportlab.lib import colors from reportlab.lib.pagesizes import landscape, letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, PageBreak, Spacer from reportlab.lib.units import inch import matplotlib.pyplot as plt from reportlab.platypus import Image from io import BytesIO import numpy as np from sqlalchemy import create_engine from sqlalchemy.exc import SQLAlchemyError import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 mpl.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 def fetch_store_data(store_id): """从数据库获取门店数据""" engine = create_engine('oracle+cx_oracle://admin:[email protected]:1521/?service_name=zzjdata') # 执行四个SQL查询 QUERIES = [ # 整体销售数据 """ ------整体销售数据 select e.c_mdfq 大区,e.c_dq 地市,e.c_mdfq1 地区,e.tjbh 编码,e.mc 门店, nvl(a1.jshj,0) 本周总销售,case when nvl(a1.jshj,0)<>0 then round(nvl(a1.zhml,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周综合毛利率,nvl(a1.kds,0) 本周总客单,case when nvl(a1.kds,0)=0 then 0 else round(nvl(a1.jshj,0)/nvl(a1.kds,0),2) end 本周客单价, nvl(a1.dsxse,0) 本周线上销售,nvl(a1.dskds,0) 本周线上客单,nvl(a1.jshj,0)-nvl(a1.dsxse,0) 本周线下销售,nvl(a1.kds,0)-nvl(a1.dskds,0) 本周线下客单, nvl(a1.dtp,0) 本周DTP销售,case when nvl(a1.jshj,0)<>0 then round(nvl(a1.dtp,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周DTP销售占比, nvl(b1.jshj,0) 本周排除DTP销售,case when nvl(b1.jshj,0)<>0 then round(nvl(b1.ml,0)*100/nvl(b1.jshj,0),2) else 0 end || '%' 本周排除DTP综合毛利率,nvl(b1.kds,0) 本周排除DTP客单,case when nvl(b1.kds,0)=0 then 0 else round(nvl(b1.jshj,0)/nvl(b1.kds,0),2) end 本周排除DTP客单价, nvl(a1.cyxse,0) 本周中药销售,case when nvl(a1.jshj,0)<>0 then round(nvl(a1.cyxse,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周中药销售占比, nvl(a1.nf,0) 本周内方销售,case when nvl(a1.jshj,0)<>0 then round(nvl(a1.nf,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周内方销售占比, nvl(a1.gf,0) 本周膏方销售,case when nvl(a1.jshj,0)<>0 then round(nvl(a1.gf,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周膏方销售占比, nvl(c1.jshj,0) 本周会员销售,case when nvl(a1.jshj,0)<>0 then round(nvl(c1.jshj,0)*100/nvl(a1.jshj,0),2) else 0 end || '%' 本周会员销售占比, nvl(c1.kds,0) 本周会员客单,nvl(c1.hys,0) 本周会员数,case when nvl(c1.kds,0)=0 then 0 else round(nvl(c1.jshj,0)/nvl(c1.kds,0),2) end 本周会员客单价, case when nvl(c1.hys,0)=0 then 0 else round(nvl(c1.jshj,0)/nvl(c1.hys,0),2) end 本周会员人均消费,case when nvl(c1.hys,0)=0 then 0 else round(nvl(c1.kds,0)/nvl(c1.hys,0),2) end 本周会员消费频次, nvl(d1.jshj,0) 本周医保会员销售,case when nvl(c1.jshj,0)<>0 then round(nvl(d1.jshj,0)*100/nvl(c1.jshj,0),2) else 0 end || '%' 本周医保会员销售占比, nvl(d1.kds,0) 本周医保会员客单,nvl(d1.hys,0) 本周医保会员数,case when nvl(d1.kds,0)=0 then 0 else round(nvl(d1.jshj,0)/nvl(d1.kds,0),2) end 本周医保会员客单价, case when nvl(d1.hys,0)=0 then 0 else round(nvl(d1.jshj,0)/nvl(d1.hys,0),2) end 本周医保会员人均消费,case when nvl(d1.hys,0)=0 then 0 else round(nvl(d1.kds,0)/nvl(d1.hys,0),2) end 本周医保会员消费频次, nvl(a2.jshj,0) 上周总销售,case when nvl(a2.jshj,0)<>0 then round(nvl(a2.zhml,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周综合毛利率,nvl(a2.kds,0) 上周总客单,case when nvl(a2.kds,0)=0 then 0 else round(nvl(a2.jshj,0)/nvl(a2.kds,0),2) end 上周客单价, nvl(a2.dsxse,0) 上周线上销售,nvl(a2.dskds,0) 上周线上客单,nvl(a2.jshj,0)-nvl(a2.dsxse,0) 上周线下销售,nvl(a2.kds,0)-nvl(a2.dskds,0) 上周线下客单, nvl(a2.dtp,0) 上周DTP销售,case when nvl(a2.jshj,0)<>0 then round(nvl(a2.dtp,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周DTP销售占比, nvl(b2.jshj,0) 上周排除DTP销售,case when nvl(b2.jshj,0)<>0 then round(nvl(b2.ml,0)*100/nvl(b2.jshj,0),2) else 0 end || '%' 上周排除DTP综合毛利率,nvl(b2.kds,0) 上周排除DTP客单,case when nvl(b2.kds,0)=0 then 0 else round(nvl(b2.jshj,0)/nvl(b2.kds,0),2) end 上周排除DTP客单价, nvl(a2.cyxse,0) 上周中药销售,case when nvl(a2.jshj,0)<>0 then round(nvl(a2.cyxse,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周中药销售占比, nvl(a2.nf,0) 上周内方销售,case when nvl(a2.jshj,0)<>0 then round(nvl(a2.nf,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周内方销售占比, nvl(a2.gf,0) 上周膏方销售,case when nvl(a2.jshj,0)<>0 then round(nvl(a2.gf,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周膏方销售占比, nvl(c2.jshj,0) 上周会员销售,case when nvl(a2.jshj,0)<>0 then round(nvl(c2.jshj,0)*100/nvl(a2.jshj,0),2) else 0 end || '%' 上周会员销售占比, nvl(c2.kds,0) 上周会员客单,nvl(c2.hys,0) 上周会员数,case when nvl(c2.kds,0)=0 then 0 else round(nvl(c2.jshj,0)/nvl(c2.kds,0),2) end 上周会员客单价, case when nvl(c2.hys,0)=0 then 0 else round(nvl(c2.jshj,0)/nvl(c2.hys,0),2) end 上周会员人均消费,case when nvl(c2.hys,0)=0 then 0 else round(nvl(c2.kds,0)/nvl(c2.hys,0),2) end 上周会员消费频次, nvl(d2.jshj,0) 上周医保会员销售,case when nvl(c2.jshj,0)<>0 then round(nvl(d2.jshj,0)*100/nvl(c2.jshj,0),2) else 0 end || '%' 上周医保会员销售占比, nvl(d2.kds,0) 上周医保会员客单,nvl(d2.hys,0) 上周医保会员数,case when nvl(d2.kds,0)=0 then 0 else round(nvl(d2.jshj,0)/nvl(d2.kds,0),2) end 上周医保会员客单价, case when nvl(d2.hys,0)=0 then 0 else round(nvl(d2.jshj,0)/nvl(d2.hys,0),2) end 上周医保会员人均消费,case when nvl(d2.hys,0)=0 then 0 else round(nvl(d2.kds,0)/nvl(d2.hys,0),2) end 上周医保会员消费频次, round(nvl(a3.jshj,0)/10000 ,2) 今年总销售,case when nvl(a3.jshj,0)<>0 then round(nvl(a3.zhml,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年综合毛利率,nvl(a3.kds,0) 今年总客单,case when nvl(a3.kds,0)=0 then 0 else round(nvl(a3.jshj,0)/nvl(a3.kds,0),2) end 今年客单价, round(nvl(a3.dsxse,0)/10000 ,2) 今年线上销售,nvl(a3.dskds,0) 今年线上客单,round((nvl(a3.jshj,0)-nvl(a3.dsxse,0))/10000 ,2) 今年线下销售,nvl(a3.kds,0)-nvl(a3.dskds,0) 今年线下客单, round(nvl(a3.dtp,0)/10000 ,2) 今年DTP销售,case when nvl(a3.jshj,0)<>0 then round(nvl(a3.dtp,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年DTP销售占比, round(nvl(b3.jshj,0)/10000 ,2) 今年排除DTP销售,case when nvl(b3.jshj,0)<>0 then round(nvl(b3.ml,0)*100/nvl(b3.jshj,0),2) else 0 end || '%' 今年排除DTP综合毛利率,nvl(b3.kds,0) 今年排除DTP客单,case when nvl(b3.kds,0)=0 then 0 else round(nvl(b3.jshj,0)/nvl(b3.kds,0),2) end 今年排除DTP客单价, round(nvl(a3.cyxse,0)/10000 ,2) 今年中药销售,case when nvl(a3.jshj,0)<>0 then round(nvl(a3.cyxse,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年中药销售占比, round(nvl(a3.nf,0)/10000 ,2) 今年内方销售,case when nvl(a3.jshj,0)<>0 then round(nvl(a3.nf,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年内方销售占比, round(nvl(a3.gf,0)/10000 ,2) 今年膏方销售,case when nvl(a3.jshj,0)<>0 then round(nvl(a3.gf,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年膏方销售占比, round(nvl(c3.jshj,0)/10000 ,2) 今年会员销售,case when nvl(a3.jshj,0)<>0 then round(nvl(c3.jshj,0)*100/nvl(a3.jshj,0),2) else 0 end || '%' 今年会员销售占比, nvl(c3.kds,0) 今年会员客单,nvl(c3.hys,0) 今年会员数,case when nvl(c3.kds,0)=0 then 0 else round(nvl(c3.jshj,0)/nvl(c3.kds,0),2) end 今年会员客单价, case when nvl(c3.hys,0)=0 then 0 else round(nvl(c3.jshj,0)/nvl(c3.hys,0),2) end 今年会员人均消费,case when nvl(c3.hys,0)=0 then 0 else round(nvl(c3.kds,0)/nvl(c3.hys,0),2) end 今年会员消费频次, round(nvl(d3.jshj,0)/10000 ,2) 今年医保会员销售,case when nvl(c3.jshj,0)<>0 then round(nvl(d3.jshj,0)*100/nvl(c3.jshj,0),2) else 0 end || '%' 今年医保会员销售占比, nvl(d3.kds,0) 今年医保会员客单,nvl(d3.hys,0) 今年医保会员数,case when nvl(d3.kds,0)=0 then 0 else round(nvl(d3.jshj,0)/nvl(d3.kds,0),2) end 今年医保会员客单价, case when nvl(d3.hys,0)=0 then 0 else round(nvl(d3.jshj,0)/nvl(d3.hys,0),2) end 今年医保会员人均消费,case when nvl(d3.hys,0)=0 then 0 else round(nvl(d3.kds,0)/nvl(d3.hys,0),2) end 今年医保会员消费频次, round(nvl(a4.jshj,0)/10000 ,2) 去年总销售,case when nvl(a4.jshj,0)<>0 then round(nvl(a4.zhml,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年综合毛利率,nvl(a4.kds,0) 去年总客单,case when nvl(a4.kds,0)=0 then 0 else round(nvl(a4.jshj,0)/nvl(a4.kds,0),2) end 去年客单价, round(nvl(a4.dsxse,0)/10000 ,2) 去年线上销售,nvl(a4.dskds,0) 去年线上客单,round((nvl(a4.jshj,0)-nvl(a4.dsxse,0))/10000 ,2) 去年线下销售,nvl(a4.kds,0)-nvl(a4.dskds,0) 去年线下客单, round(nvl(a4.dtp,0)/10000 ,2) 去年DTP销售,case when nvl(a4.jshj,0)<>0 then round(nvl(a4.dtp,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年DTP销售占比, round(nvl(b4.jshj,0)/10000 ,2) 去年排除DTP销售,case when nvl(b4.jshj,0)<>0 then round(nvl(b4.ml,0)*100/nvl(b4.jshj,0),2) else 0 end || '%' 去年排除DTP综合毛利率,nvl(b4.kds,0) 去年排除DTP客单,case when nvl(b4.kds,0)=0 then 0 else round(nvl(b4.jshj,0)/nvl(b4.kds,0),2) end 去年排除DTP客单价, round(nvl(a4.cyxse,0)/10000 ,2) 去年中药销售,case when nvl(a4.jshj,0)<>0 then round(nvl(a4.cyxse,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年中药销售占比, round(nvl(a4.nf,0)/10000 ,2) 去年内方销售,case when nvl(a4.jshj,0)<>0 then round(nvl(a4.nf,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年内方销售占比, round(nvl(a4.gf,0)/10000 ,2) 去年膏方销售,case when nvl(a4.jshj,0)<>0 then round(nvl(a4.gf,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年膏方销售占比, round(nvl(c4.jshj,0)/10000 ,2) 去年会员销售,case when nvl(a4.jshj,0)<>0 then round(nvl(c4.jshj,0)*100/nvl(a4.jshj,0),2) else 0 end || '%' 去年会员销售占比, nvl(c4.kds,0) 去年会员客单,nvl(c4.hys,0) 去年会员数,case when nvl(c4.kds,0)=0 then 0 else round(nvl(c4.jshj,0)/nvl(c4.kds,0),2) end 去年会员客单价, case when nvl(c4.hys,0)=0 then 0 else round(nvl(c4.jshj,0)/nvl(c4.hys,0),2) end 去年会员人均消费,case when nvl(c4.hys,0)=0 then 0 else round(nvl(c4.kds,0)/nvl(c4.hys,0),2) end 去年会员消费频次, round(nvl(d4.jshj,0)/10000 ,2) 去年医保会员销售,case when nvl(c4.jshj,0)<>0 then round(nvl(d4.jshj,0)*100/nvl(c4.jshj,0),2) else 0 end || '%' 去年医保会员销售占比, nvl(d4.kds,0) 去年医保会员客单,nvl(d4.hys,0) 去年医保会员数,case when nvl(d4.kds,0)=0 then 0 else round(nvl(d4.jshj,0)/nvl(d4.kds,0),2) end 去年医保会员客单价, case when nvl(d4.hys,0)=0 then 0 else round(nvl(d4.jshj,0)/nvl(d4.hys,0),2) end 去年医保会员人均消费,case when nvl(d4.hys,0)=0 then 0 else round(nvl(d4.kds,0)/nvl(d4.hys,0),2) end 去年医保会员消费频次 from (select * from gl_custom where tjbh='03711033')e left join (select a.subbh,sum(a.jshj) jshj,sum(a.zhml) zhml,sum(a.kds) kds,sum(a.dsxse) dsxse,sum(a.dskds) dskds,sum(a.cyxse) cyxse,sum(a.nfxs) nf,sum(nvl(a.gfxs,0)+nvl(a.spgf,0)+nvl(a.gfxsa,0)) gf,sum(a.dtp) dtp,sum(a.dtpzhml) dtpzhml from c_zkmdxshzb a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' group by a.subbh)a1 on a1.subbh= e.tjbh----整体 left join (select a.subbh,sum(a.jshj) jshj,sum(a.zhml) zhml,sum(a.kds) kds,sum(a.dsxse) dsxse,sum(a.dskds) dskds,sum(a.cyxse) cyxse,sum(a.nfxs) nf,sum(nvl(a.gfxs,0)+nvl(a.spgf,0)+nvl(a.gfxsa,0)) gf,sum(a.dtp) dtp,sum(a.dtpzhml) dtpzhml from c_zkmdxshzb a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' group by a.subbh)a2 on a2.subbh= e.tjbh----整体 left join (select a.subbh,sum(a.jshj) jshj,sum(a.zhml) zhml,sum(a.kds) kds,sum(a.dsxse) dsxse,sum(a.dskds) dskds,sum(a.cyxse) cyxse,sum(a.nfxs) nf,sum(nvl(a.gfxs,0)+nvl(a.spgf,0)+nvl(a.gfxsa,0)) gf,sum(a.dtp) dtp,sum(a.dtpzhml) dtpzhml from c_zkmdxshzb a where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.subbh ='03711033' group by a.subbh)a3 on a3.subbh= e.tjbh----整体 left join (select a.subbh,sum(a.jshj) jshj,sum(a.zhml) zhml,sum(a.kds) kds,sum(a.dsxse) dsxse,sum(a.dskds) dskds,sum(a.cyxse) cyxse,sum(a.nfxs) nf,sum(nvl(a.gfxs,0)+nvl(a.spgf,0)+nvl(a.gfxsa,0)) gf,sum(a.dtp) dtp,sum(a.dtpzhml) dtpzhml from c_zkmdxshzb a where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.subbh ='03711033' group by a.subbh)a4 on a4.subbh= e.tjbh----整体 left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(b.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) b on a.subbh=b.subbh and a.hedgehh=b.hh and a.ph1=b.ph and a.pcdh=b.dh left join yw_kck d on a.hh=d.hh left join (select * from spjxlbz where lbz='1' ) e on e.hh=d.hh where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(e.sx,' ') <> 'D' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)b1 on b1.subbh=e.tjbh ---非dtp left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(b.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) b on a.subbh=b.subbh and a.hedgehh=b.hh and a.ph1=b.ph and a.pcdh=b.dh left join yw_kck d on a.hh=d.hh left join (select * from spjxlbz where lbz='1' ) e on e.hh=d.hh where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(e.sx,' ') <> 'D' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)b2 on b2.subbh=e.tjbh ---非dtp left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(b.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) b on a.subbh=b.subbh and a.hedgehh=b.hh and a.ph1=b.ph and a.pcdh=b.dh left join yw_kck d on a.hh=d.hh left join (select * from spjxlbz where lbz='1' ) e on e.hh=d.hh where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.subbh ='03711033' and nvl(e.sx,' ') <> 'D' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)b3 on b3.subbh=e.tjbh ---非dtp left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(b.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) b on a.subbh=b.subbh and a.hedgehh=b.hh and a.ph1=b.ph and a.pcdh=b.dh left join yw_kck d on a.hh=d.hh left join (select * from spjxlbz where lbz='1' ) e on e.hh=d.hh where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.subbh ='03711033' and nvl(e.sx,' ') <> 'D' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)b4 on b4.subbh=e.tjbh ---非dtp left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.yhkh) hys,count(distinct a.lsh) kds from subfhd a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' 'and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)c1 on c1.subbh=e.tjbh ---会员 left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.yhkh) hys,count(distinct a.lsh) kds from subfhd a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' 'and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)c2 on c2.subbh=e.tjbh ---会员 left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.yhkh) hys,count(distinct a.lsh) kds from subfhd a where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' 'and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)c3 on c3.subbh=e.tjbh ---会员 left join (select a.subbh,sum(a.jshj) jshj,count(distinct a.yhkh) hys,count(distinct a.lsh) kds from subfhd a where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' 'and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)c4 on c4.subbh=e.tjbh ---会员 left join (select a.subbh,count(distinct a.yhkh) hys,count(distinct a.lsh) kds,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and fkfsname like '%医保%')b on b.lsh=a.lsh where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)d1 on d1.subbh=e.tjbh ---医保会员 left join (select a.subbh,count(distinct a.yhkh) hys,count(distinct a.lsh) kds,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and fkfsname like '%医保%')b on b.lsh=a.lsh where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)d2 on d2.subbh=e.tjbh ---医保会员 left join (select a.subbh,count(distinct a.yhkh) hys,count(distinct a.lsh) kds,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and fkfsname like '%医保%')b on b.lsh=a.lsh where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)d3 on d3.subbh=e.tjbh ---医保会员 left join (select a.subbh,count(distinct a.yhkh) hys,count(distinct a.lsh) kds,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and fkfsname like '%医保%')b on b.lsh=a.lsh where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh)d4 on d4.subbh=e.tjbh ---医保会员 """, # 医保付款数据 """ -----二、医保付款数据 select e.c_mdfq 大区,e.c_dq 地市,e.c_mdfq1 地区,e.tjbh 编码,e.mc 门店, fk.fkfsname 付款方式,nvl(a1.je,0) 本周付款金额,nvl(a2.je,0) 上周付款金额,nvl(a3.je,0) 今年付款金额,nvl(a4.je,0) 去年付款金额 from (select * from gl_custom where tjbh='03711033')e cross join (select distinct a.fkfsname from subdfkfs a where a.fkfsname like '%医保%'and a.subbh ='03711033' and ((a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 ) or (a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1))) ) fk left join (select a.subbh,a.fkfsname ,sum(a.fkje) je from subdfkfs a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.fkfsname like '%医保%' and a.subbh ='03711033' group by a.subbh,a.fkfsname)a1 on a1.subbh= e.tjbh and a1.fkfsname = fk.fkfsname left join (select a.subbh,a.fkfsname ,sum(a.fkje) je from subdfkfs a where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.fkfsname like '%医保%' and a.subbh ='03711033' group by a.subbh,a.fkfsname)a2 on a2.subbh= e.tjbh and a2.fkfsname = fk.fkfsname left join (select a.subbh,a.fkfsname ,sum(a.fkje) je from subdfkfs a where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.fkfsname like '%医保%' and a.subbh ='03711033' group by a.subbh,a.fkfsname)a3 on a3.subbh= e.tjbh and a3.fkfsname = fk.fkfsname left join (select a.subbh,a.fkfsname ,sum(a.fkje) je from subdfkfs a where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.fkfsname like '%医保%' and a.subbh ='03711033' group by a.subbh,a.fkfsname)a4 on a4.subbh= e.tjbh and a4.fkfsname = fk.fkfsname """, # 品类数据 """ -------品类数据 select a.c_mdfq 大区,a.c_dq 地市,a.c_mdfq1 地区,a.tjbh 编码,a.mc 门店,a.name 类别, nvl(b.jshj,0) 本周销售,nvl(b.jshj,0)-nvl(c.jshj,0) 周销售环比,nvl(b.kds,0) 本周客流,nvl(b.kds,0)-nvl(c.kds,0) 周客流环比, case when nvl(b.jshj,0)<>0 and nvl(c.jshj,0)<>0 then round(nvl(b.ml,0)*100/nvl(b.jshj,0),2)- round(nvl(c.ml,0)*100/nvl(c.jshj,0),2) else 0 end || '%' 周毛利率环比, nvl(d1.jshj,0)-nvl(d2.jshj,0) 医保会员销售周销售环比,nvl(d3.jshj,0)-nvl(d4.jshj,0) 非医保会员周销售环比,nvl(d5.jshj,0)-nvl(d6.jshj,0) 非会员周销售环比, nvl(b1.jshj,0) 今年销售,nvl(b1.jshj,0)-nvl(c1.jshj,0) 年销售同比,nvl(b1.kds,0) 今年客流,nvl(b1.kds,0)-nvl(c1.kds,0) 年客流同比, case when nvl(b1.jshj,0)<>0 and nvl(c1.jshj,0)<>0 then round(nvl(b1.ml,0)*100/nvl(b1.jshj,0),2)- round(nvl(c1.ml,0)*100/nvl(c1.jshj,0),2) else 0 end || '%' 年毛利率同比, nvl(e1.jshj,0)-nvl(e2.jshj,0) 医保会员销售年销售同比,nvl(e3.jshj,0)-nvl(e4.jshj,0) 非医保会员年销售同比,nvl(e5.jshj,0)-nvl(e6.jshj,0) 非会员年销售同比 from (select a.c_mdfq,a.c_dq,a.c_mdfq1,a.tjbh,a.mc,b.name from gl_custom a cross join (select distinct name from dataitem where dataitemtypeguid='313') b where a.tjbh='03711033') a left join (select a.subbh,nvl(c.name,'未分类') name,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(d.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) d on a.subbh=d.subbh and a.hedgehh=d.hh and a.ph1=d.ph and a.pcdh=d.dh left join yw_kck b on a.hedgehh=b.hh left join (select * from dataitem where dataitemtypeguid='313') c on b.fzflsx2=c.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(c.name,'未分类')) b on a.tjbh=b.subbh and a.name=b.name left join (select a.subbh,nvl(c.name,'未分类') name,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(d.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) d on a.subbh=d.subbh and a.hedgehh=d.hh and a.ph1=d.ph and a.pcdh=d.dh left join yw_kck b on a.hedgehh=b.hh left join (select * from dataitem where dataitemtypeguid='313') c on b.fzflsx2=c.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(c.name,'未分类')) c on a.tjbh=c.subbh and a.name=c.name left join (select a.subbh,nvl(c.name,'未分类') name,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(d.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) d on a.subbh=d.subbh and a.hedgehh=d.hh and a.ph1=d.ph and a.pcdh=d.dh left join yw_kck b on a.hedgehh=b.hh left join (select * from dataitem where dataitemtypeguid='313') c on b.fzflsx2=c.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.subbh ='03711033' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(c.name,'未分类')) b1 on a.tjbh=b1.subbh and a.name=b1.name left join (select a.subbh,nvl(c.name,'未分类') name,sum(a.jshj) jshj,count(distinct a.lsh) kds,sum(a.je-a.sl*nvl(d.dyfjj,0)) ml from subfhd a left join (select subbh,hh,ph,dh,jhdj,c_dyfjj,(case when c_dyfjj is not null then c_dyfjj else jhdj end) dyfjj from subphk) d on a.subbh=d.subbh and a.hedgehh=d.hh and a.ph1=d.ph and a.pcdh=d.dh left join yw_kck b on a.hedgehh=b.hh left join (select * from dataitem where dataitemtypeguid='313') c on b.fzflsx2=c.code where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.subbh ='03711033' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(c.name,'未分类')) c1 on a.tjbh=c1.subbh and a.name=c1.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and fkfsname like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d1 on a.tjbh=d1.subbh and a.name=d1.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and fkfsname like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d2 on a.tjbh=d2.subbh and a.name=d2.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and fkfsname not like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d3 on a.tjbh=d3.subbh and a.name=d3.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and fkfsname not like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d4 on a.tjbh=d4.subbh and a.name=d4.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and a.subbh ='03711033' and nvl(a.yhkh,' ')=' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d5 on a.tjbh=d5.subbh and a.name=d5.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and a.subbh ='03711033' and nvl(a.yhkh,' ')=' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))d6 on a.tjbh=d6.subbh and a.name=d6.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and fkfsname like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e1 on a.tjbh=e1.subbh and a.name=e1.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and fkfsname like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e2 on a.tjbh=e2.subbh and a.name=e2.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and fkfsname not like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e3 on a.tjbh=e3.subbh and a.name=e3.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a inner join (select distinct xhlsh lsh from subdfkfs where kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and fkfsname not like '%医保%')d on d.lsh=a.lsh left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.subbh ='03711033' and nvl(a.yhkh,' ')<>' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e4 on a.tjbh=e4.subbh and a.name=e4.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and a.subbh ='03711033' and nvl(a.yhkh,' ')=' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e5 on a.tjbh=e5.subbh and a.name=e5.name left join (select a.subbh,nvl(e.name,'未分类') name,sum(a.jshj) jshj from subfhd a left join yw_kck b on a.hh=b.hh left join (select code,name from dataitem where dataitemtypeguid='313') e on b.fzflsx2=e.code where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and a.subbh ='03711033' and nvl(a.yhkh,' ')=' ' and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' group by a.subbh,nvl(e.name,'未分类'))e6 on a.tjbh=e6.subbh and a.name=e6.name order by 周销售环比 """, # 销售能力 """ ------销售能力 with subfhdls as (select a.subbh,a.lsh,a.hedgehh,a.jshj,a.xsr,a.sl from subfhd a left join yw_kck b on b.hh=a.hedgehh left join gl_custom d on a.subbh=d.tjbh where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') AND TRUNC(SYSDATE-1) and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' and nvl(a.posguid,' ')<>'10000' and b.fzflsx1<>'14'and b.fzflsx2<>'08031' and a.subbh ='03711033' and b.fzflsx2<>'08032' and b.fzflsx2<>'08034' and b.fzflsx2<>'08035' and b.fzflsx2<>'08038' and b.fzflsx2<>'08039' and b.fzflsx2<>'08040' and b.fzflsx2<>'08041' ), a1 as (select a.subbh,nvl(a.jshj,0) jshj,nvl(a.pzs,0) zkds,nvl(b.lsh,0) dpkds,case when nvl(a.pzs,0)<>0 then round(b.lsh/a.pzs,4) else 0 end dpl,c.kps kps,d.kp kpc from (select a.subbh,count(distinct a.lsh) pzs,sum(a.jshj) jshj from subfhdls a group by a.subbh) a left join (select subbh,count(distinct lsh) lsh from (select a.subbh,a.lsh,count(a.hedgehh) pzs from subfhdls a group by a.subbh,a.lsh having count(a.hedgehh)=1) group by subbh) b on b.subbh=a.subbh left join (select subbh,round(sum(sl)/count(distinct lsh),2) kps from subfhdls group by subbh) c on c.subbh=a.subbh left join (select subbh,round(sum(kpc)/count(distinct lsh),2) kp from (select a.subbh,a.lsh,count(distinct a.hedgehh) kpc from subfhdls a group by a.subbh,a.lsh) group by subbh) d on d.subbh=a.subbh), subfhdls1 as (select a.subbh,a.lsh,a.hedgehh,a.jshj,a.xsr,a.sl from subfhd a left join yw_kck b on b.hh=a.hedgehh left join gl_custom d on a.subbh=d.tjbh where a.kdrq BETWEEN TRUNC(SYSDATE, 'IW') - 7 AND TRUNC(SYSDATE) - 1 - 7 and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' and nvl(a.posguid,' ')<>'10000' and b.fzflsx1<>'14'and b.fzflsx2<>'08031' and a.subbh ='03711033' and b.fzflsx2<>'08032' and b.fzflsx2<>'08034' and b.fzflsx2<>'08035' and b.fzflsx2<>'08038' and b.fzflsx2<>'08039' and b.fzflsx2<>'08040' and b.fzflsx2<>'08041' ), a2 as (select a.subbh,nvl(a.jshj,0) jshj,nvl(a.pzs,0) zkds,nvl(b.lsh,0) dpkds,case when nvl(a.pzs,0)<>0 then round(b.lsh/a.pzs,4) else 0 end dpl,c.kps kps,d.kp kpc from (select a.subbh,count(distinct a.lsh) pzs,sum(a.jshj) jshj from subfhdls1 a group by a.subbh) a left join (select subbh,count(distinct lsh) lsh from (select a.subbh,a.lsh,count(a.hedgehh) pzs from subfhdls1 a group by a.subbh,a.lsh having count(a.hedgehh)=1) group by subbh) b on b.subbh=a.subbh left join (select subbh,round(sum(sl)/count(distinct lsh),2) kps from subfhdls1 group by subbh) c on c.subbh=a.subbh left join (select subbh,round(sum(kpc)/count(distinct lsh),2) kp from (select a.subbh,a.lsh,count(distinct a.hedgehh) kpc from subfhdls1 a group by a.subbh,a.lsh) group by subbh) d on d.subbh=a.subbh), subfhdls2 as (select a.subbh,a.lsh,a.hedgehh,a.jshj,a.xsr,a.sl from subfhd a left join yw_kck b on b.hh=a.hedgehh left join gl_custom d on a.subbh=d.tjbh where a.kdrq BETWEEN TRUNC(SYSDATE, 'YEAR') AND TRUNC(SYSDATE- 1) and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' and nvl(a.posguid,' ')<>'10000' and b.fzflsx1<>'14'and b.fzflsx2<>'08031' and a.subbh ='03711033' and b.fzflsx2<>'08032' and b.fzflsx2<>'08034' and b.fzflsx2<>'08035' and b.fzflsx2<>'08038' and b.fzflsx2<>'08039' and b.fzflsx2<>'08040' and b.fzflsx2<>'08041' ), a3 as (select a.subbh,nvl(a.jshj,0) jshj,nvl(a.pzs,0) zkds,nvl(b.lsh,0) dpkds,case when nvl(a.pzs,0)<>0 then round(b.lsh/a.pzs,4) else 0 end dpl,c.kps kps,d.kp kpc from (select a.subbh,count(distinct a.lsh) pzs,sum(a.jshj) jshj from subfhdls1 a group by a.subbh) a left join (select subbh,count(distinct lsh) lsh from (select a.subbh,a.lsh,count(a.hedgehh) pzs from subfhdls2 a group by a.subbh,a.lsh having count(a.hedgehh)=1) group by subbh) b on b.subbh=a.subbh left join (select subbh,round(sum(sl)/count(distinct lsh),2) kps from subfhdls1 group by subbh) c on c.subbh=a.subbh left join (select subbh,round(sum(kpc)/count(distinct lsh),2) kp from (select a.subbh,a.lsh,count(distinct a.hedgehh) kpc from subfhdls1 a group by a.subbh,a.lsh) group by subbh) d on d.subbh=a.subbh), subfhdls3 as (select a.subbh,a.lsh,a.hedgehh,a.jshj,a.xsr,a.sl from subfhd a left join yw_kck b on b.hh=a.hedgehh left join gl_custom d on a.subbh=d.tjbh where a.kdrq BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) AND ADD_MONTHS(TRUNC(SYSDATE), -12) - 1 and nvl(a.bz,' ')<>'会员礼品成本调整单' and nvl(a.bz,' ')<>'¥' and nvl(a.bm,' ')<>'积分兑换' and nvl(a.posguid,' ')<>'10000' and b.fzflsx1<>'14'and b.fzflsx2<>'08031' and a.subbh ='03711033' and b.fzflsx2<>'08032' and b.fzflsx2<>'08034' and b.fzflsx2<>'08035' and b.fzflsx2<>'08038' and b.fzflsx2<>'08039' and b.fzflsx2<>'08040' and b.fzflsx2<>'08041' ), a4 as (select a.subbh,nvl(a.jshj,0) jshj,nvl(a.pzs,0) zkds,nvl(b.lsh,0) dpkds,case when nvl(a.pzs,0)<>0 then round(b.lsh/a.pzs,4) else 0 end dpl,c.kps kps,d.kp kpc from (select a.subbh,count(distinct a.lsh) pzs,sum(a.jshj) jshj from subfhdls1 a group by a.subbh) a left join (select subbh,count(distinct lsh) lsh from (select a.subbh,a.lsh,count(a.hedgehh) pzs from subfhdls3 a group by a.subbh,a.lsh having count(a.hedgehh)=1) group by subbh) b on b.subbh=a.subbh left join (select subbh,round(sum(sl)/count(distinct lsh),2) kps from subfhdls1 group by subbh) c on c.subbh=a.subbh left join (select subbh,round(sum(kpc)/count(distinct lsh),2) kp from (select a.subbh,a.lsh,count(distinct a.hedgehh) kpc from subfhdls1 a group by a.subbh,a.lsh) group by subbh) d on d.subbh=a.subbh) select a.subbh 编码,e.mc 门店,a.dpl "本周一单一品率",a.kps "本周客品数",a.kpc "本周客品次",b.dpl "上周一单一品率",b.kps "上周客品数",b.kpc "上周客品次", c.dpl "今年一单一品率",c.kps "今年客品数",c.kpc "今年客品次",d.dpl "去年一单一品率",d.kps "去年客品数",d.kpc "去年客品次" from a1 a left join a2 b on a.subbh=b.subbh left join a3 c on a.subbh=c.subbh left join a4 d on a.subbh=d.subbh left join gl_custom e on a.subbh=e.tjbh """ ] results = [] for query in QUERIES: formatted_query = query.replace("'03711033'", f"'{store_id}'") with engine.connect() as conn: df = pd.read_sql(formatted_query, conn) results.append(df) return results def create_pdf_report(store_id, store_name, data, filename): """创建PDF报告""" doc = SimpleDocTemplate( filename, pagesize=landscape(letter), rightMargin=30, leftMargin=30, topMargin=30, bottomMargin=30 ) styles = getSampleStyleSheet() elements = [] # 标题 title_style = ParagraphStyle( 'Title', parent=styles['Heading1'], alignment=1, spaceAfter=12 ) elements.append(Paragraph(f"{store_name}销售分析报告", title_style)) # 表格1: 整体周销售数据 df1 = data[0] weekly_columns = ['指标', '本周', '本周占比', '上周', '上周占比', '环比'] weekly_data = [ ['总销售', df1['本周总销售'][0], '', df1['上周总销售'][0], '', df1['本周总销售'][0] - df1['上周总销售'][0]], ['综合毛利率', df1['本周综合毛利率'][0], '', df1['上周综合毛利率'][0], '', ''], ['总客单', df1['本周总客单'][0], '', df1['上周总客单'][0], '', df1['本周总客单'][0] - df1['上周总客单'][0]], ['客单价', df1['本周客单价'][0], '', df1['上周客单价'][0], '', ''], ['线上销售', df1['本周线上销售'][0], '', df1['上周线上销售'][0], '', df1['本周线上销售'][0] - df1['上周线上销售'][0]], ['线上客单', df1['本周线上客单'][0], '', df1['上周线上客单'][0], '', ''], ['线下销售', df1['本周线下销售'][0], '', df1['上周线下销售'][0], '', df1['本周线下销售'][0] - df1['上周线下销售'][0]], ['线下客单', df1['本周线下客单'][0], '', df1['上周线下客单'][0], '', ''], ['DTP销售', df1['本周DTP销售'][0], df1['本周DTP销售占比'][0], df1['上周DTP销售'][0], df1['上周DTP销售占比'][0], df1['本周DTP销售'][0] - df1['上周DTP销售'][0]], ['排除DTP销售', df1['本周排除DTP销售'][0], '', df1['上周排除DTP销售'][0], '', df1['本周排除DTP销售'][0] - df1['上周排除DTP销售'][0]], ['排除DTP综合毛利率', df1['本周排除DTP综合毛利率'][0], '', df1['上周排除DTP综合毛利率'][0], '', ''], ['排除DTP客单', df1['本周排除DTP客单'][0], '', df1['上周排除DTP客单'][0], '', df1['本周排除DTP客单'][0] - df1['上周排除DTP客单'][0]], ['排除DTP客单价', df1['本周排除DTP客单价'][0], '', df1['上周排除DTP客单价'][0], '', ''], ['中药销售', df1['本周中药销售'][0], df1['本周中药销售占比'][0], df1['上周中药销售'][0], df1['上周中药销售占比'][0], df1['本周中药销售'][0] - df1['上周中药销售'][0]], ['内方销售', df1['本周内方销售'][0], df1['本周内方销售占比'][0], df1['上周内方销售'][0], df1['上周内方销售占比'][0], df1['本周内方销售'][0] - df1['上周内方销售'][0]], ['膏方销售', df1['本周膏方销售'][0], df1['本周膏方销售占比'][0], df1['上周膏方销售'][0], df1['上周膏方销售占比'][0], df1['本周膏方销售'][0] - df1['上周膏方销售'][0]], ['会员销售', df1['本周会员销售'][0], df1['本周会员销售占比'][0], df1['上周会员销售'][0], df1['上周会员销售占比'][0], df1['本周会员销售'][0] - df1['上周会员销售'][0]], ['会员客单', df1['本周会员客单'][0], '', df1['上周会员客单'][0], '', df1['本周会员客单'][0] - df1['上周会员客单'][0]], ['会员数', df1['本周会员数'][0], '', df1['上周会员数'][0], '', df1['本周会员数'][0] - df1['上周会员数'][0]], ['会员客单价', df1['本周会员客单价'][0], '', df1['上周会员客单价'][0], '', ''], ['会员人均消费', df1['本周会员人均消费'][0], '', df1['上周会员人均消费'][0], '', ''], ['会员消费频次', df1['本周会员消费频次'][0], '', df1['上周会员消费频次'][0], '', ''], ['医保会员销售', df1['本周医保会员销售'][0], df1['本周医保会员销售占比'][0], df1['上周医保会员销售'][0], df1['上周医保会员销售占比'][0], df1['本周医保会员销售'][0] - df1['上周医保会员销售'][0]], ['医保会员客单', df1['本周医保会员客单'][0], '', df1['上周医保会员客单'][0], '', df1['本周医保会员客单'][0] - df1['上周医保会员客单'][0]], ['医保会员数', df1['本周医保会员数'][0], '', df1['上周医保会员数'][0], '', df1['本周医保会员数'][0] - df1['上周医保会员数'][0]], ['医保会员客单价', df1['本周医保会员客单价'][0], '', df1['上周医保会员客单价'][0], '', ''], ['医保会员人均消费', df1['本周医保会员人均消费'][0], '', df1['上周医保会员人均消费'][0], '', ''], ['医保会员消费频次', df1['本周医保会员消费频次'][0], '', df1['上周医保会员消费频次'][0], '', ''], ] # 创建表格1 weekly_table = Table([weekly_columns] + weekly_data) weekly_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#4F81BD')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#DCE6F1')), ('GRID', (0, 0), (-1, -1), 1, colors.black), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE') ])) elements.append(Paragraph("表1: 整体周销售数据", styles['Heading2'])) elements.append(weekly_table) elements.append(Spacer(1, 0.2 * inch)) # 表格2: 医保付款周数据 df2 = data[1] payment_columns = ['付款方式', '本周付款金额', '上周付款金额', '环比'] payment_data = [] for _, row in df2.iterrows(): payment_data.append([ row['付款方式'], row['本周付款金额'], row['上周付款金额'], row['本周付款金额'] - row['上周付款金额'] ]) payment_table = Table([payment_columns] + payment_data) payment_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#C0504D')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#F2DCDB')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表2: 医保付款周数据", styles['Heading2'])) elements.append(payment_table) elements.append(Spacer(1, 0.2 * inch)) # 表格3: 品类周数据 df3 = data[2] category_columns = ['类别', '本周销售', '本周占比', '周销售环比', '本周客流', '周客流环比', '医保会员销售周销售环比', '非医保会员周销售环比', '非会员周销售环比'] category_data = [] for _, row in df3.iterrows(): total_sales = df1['本周总销售'][0] category_data.append([ row['类别'], row['本周销售'], f"{row['本周销售'] / total_sales:.2%}" if total_sales > 0 else "0.00%", row['周销售环比'], row['本周客流'], row['周客流环比'], row['医保会员销售周销售环比'], row['非医保会员周销售环比'], row['非会员周销售环比'] ]) category_table = Table([category_columns] + category_data) category_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#9BBB59')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 9), ('BOTTOMPADDING', (0, 0), (-1, 0), 10), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#EBF1DE')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表3: 品类周数据", styles['Heading2'])) elements.append(category_table) elements.append(Spacer(1, 0.2 * inch)) # 表格4: 销售能力环比 df4 = data[3] capability_columns = ['时间', '一单一品率', '客品数', '客品次'] capability_data = [ ['本周', df4['本周一单一品率'][0], df4['本周客品数'][0], df4['本周客品次'][0]], ['上周', df4['上周一单一品率'][0], df4['上周客品数'][0], df4['上周客品次'][0]], ['环比', df4['本周一单一品率'][0] - df4['上周一单一品率'][0], df4['本周客品数'][0] - df4['上周客品数'][0], df4['本周客品次'][0] - df4['上周客品次'][0]] ] capability_table = Table([capability_columns] + capability_data) capability_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#8064A2')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#E5E0EC')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表4: 销售能力环比", styles['Heading2'])) elements.append(capability_table) elements.append(PageBreak()) # 表格5: 整体销售数据(年度) annual_columns = ['指标', '今年', '今年占比', '去年', '去年占比', '同比'] annual_data = [ ['总销售', df1['今年总销售'][0], '', df1['去年总销售'][0], '', df1['今年总销售'][0] - df1['去年总销售'][0]], ['综合毛利率', df1['今年综合毛利率'][0], '', df1['去年综合毛利率'][0], '', ''], ['总客单', df1['今年总客单'][0], '', df1['去年总客单'][0], '', df1['今年总客单'][0] - df1['去年总客单'][0]], # 其他行...(类似表格1的结构) ] annual_table = Table([annual_columns] + annual_data) annual_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#4F81BD')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#DCE6F1')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表5: 整体销售数据(年度)", styles['Heading2'])) elements.append(annual_table) elements.append(Spacer(1, 0.2 * inch)) # 表格6: 医保付款数据(年度) payment_annual_columns = ['付款方式', '今年付款金额', '去年付款金额', '同比'] payment_annual_data = [] for _, row in df2.iterrows(): payment_annual_data.append([ row['付款方式'], row['今年付款金额'], row['去年付款金额'], row['今年付款金额'] - row['去年付款金额'] ]) payment_annual_table = Table([payment_annual_columns] + payment_annual_data) payment_annual_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#C0504D')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#F2DCDB')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表6: 医保付款数据(年度)", styles['Heading2'])) elements.append(payment_annual_table) elements.append(Spacer(1, 0.2 * inch)) # 表格7: 品类数据(年度) category_annual_columns = ['类别', '今年销售', '今年占比', '年销售同比', '今年客流', '年客流同比', '医保会员销售年销售同比', '非医保会员年销售同比', '非会员年销售同比'] category_annual_data = [] for _, row in df3.iterrows(): total_annual_sales = df1['今年总销售'][0] category_annual_data.append([ row['类别'], row['今年销售'], f"{row['今年销售'] / total_annual_sales:.2%}" if total_annual_sales > 0 else "0.00%", row['年销售同比'], row['今年客流'], row['年客流同比'], row['医保会员销售年销售同比'], row['非医保会员年销售同比'], row['非会员年销售同比'] ]) category_annual_table = Table([category_annual_columns] + category_annual_data) category_annual_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#9BBB59')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 9), ('BOTTOMPADDING', (0, 0), (-1, 0), 10), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#EBF1DE')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表7: 品类数据(年度)", styles['Heading2'])) elements.append(category_annual_table) elements.append(Spacer(1, 0.2 * inch)) # 表格8: 销售能力同比 capability_annual_columns = ['时间', '一单一品率', '客品数', '客品次'] capability_annual_data = [ ['今年', df4['今年一单一品率'][0], df4['今年客品数'][0], df4['今年客品次'][0]], ['去年', df4['去年一单一品率'][0], df4['去年客品数'][0], df4['去年客品次'][0]], ['同比', df4['今年一单一品率'][0] - df4['去年一单一品率'][0], df4['今年客品数'][0] - df4['去年客品数'][0], df4['今年客品次'][0] - df4['去年客品次'][0]] ] capability_annual_table = Table([capability_annual_columns] + capability_annual_data) capability_annual_table.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#8064A2')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), ('ALIGN', (0, 0), (-1, -1), 'CENTER'), ('FONTSIZE', (0, 0), (-1, 0), 10), ('BOTTOMPADDING', (0, 0), (-1, 0), 12), ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#E5E0EC')), ('GRID', (0, 0), (-1, -1), 1, colors.black) ])) elements.append(Paragraph("表8: 销售能力同比", styles['Heading2'])) elements.append(capability_annual_table) # 分析页 elements.append(PageBreak()) analysis_title = Paragraph("销售数据分析报告", styles['Heading1']) elements.append(analysis_title) # 添加分析内容 analysis_content = [ "1. 总体销售趋势: 本周总销售额为¥{:.2f},环比{:.2%}。今年累计销售额¥{:.2f},同比{:.2%}。".format( df1['本周总销售'][0], (df1['本周总销售'][0] - df1['上周总销售'][0]) / df1['上周总销售'][0] if df1['上周总销售'][0] > 0 else 0, df1['今年总销售'][0], (df1['今年总销售'][0] - df1['去年总销售'][0]) / df1['去年总销售'][0] if df1['去年总销售'][0] > 0 else 0 ), "2. 会员分析: 会员销售占比{},较上周{}。医保会员贡献率{},人均消费¥{:.2f}。".format( df1['本周会员销售占比'][0], "上升" if float(df1['本周会员销售占比'][0].strip('%')) > float( df1['上周会员销售占比'][0].strip('%')) else "下降", df1['本周医保会员销售占比'][0], df1['本周医保会员人均消费'][0] ), "3. 渠道表现: 线上销售占比{:.2%},线下销售占比{:.2%}。DTP渠道占比{},环比{}。".format( df1['本周线上销售'][0] / df1['本周总销售'][0] if df1['本周总销售'][0] > 0 else 0, (df1['本周总销售'][0] - df1['本周线上销售'][0]) / df1['本周总销售'][0] if df1['本周总销售'][0] > 0 else 0, df1['本周DTP销售占比'][0], "上升" if float(df1['本周DTP销售占比'][0].strip('%')) > float( df1['上周DTP销售占比'][0].strip('%')) else "下降" ), "4. 品类表现: 销售最好的品类是{},贡献率{:.2%}。增长最快的品类是{},环比增长{:.2%}。".format( df3.loc[df3['本周销售'].idxmax()]['类别'], df3['本周销售'].max() / df1['本周总销售'][0] if df1['本周总销售'][0] > 0 else 0, df3.loc[df3['周销售环比'].idxmax()]['类别'], df3['周销售环比'].max() / df3['本周销售'].max() if df3['本周销售'].max() > 0 else 0 ), "5. 销售能力: 客品数{}件/单,客品次{}次/单。一单一品率{:.2%},较上周{}。".format( df4['本周客品数'][0], df4['本周客品次'][0], df4['本周一单一品率'][0], "上升" if df4['本周一单一品率'][0] > df4['上周一单一品率'][0] else "下降" ) ] for content in analysis_content: elements.append(Paragraph(content, styles['Normal'])) elements.append(Spacer(1, 0.1 * inch)) # 生成图表 #fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 生成图表 plt.figure(figsize=(12, 6)) # 准备同比数据 comparison_data = [ ('年销售同比', df1['今年总销售'][0] - df1['去年总销售'][0]), ('医保会员销售同比', df1['今年医保会员销售'][0] - df1['去年医保会员销售'][0]), ('非医保会员销售同比', (df1['今年会员销售'][0] - df1['今年医保会员销售'][0]) - (df1['去年会员销售'][0] - df1['去年医保会员销售'][0])), ('非会员销售同比', (df1['今年总销售'][0] - df1['今年会员销售'][0]) - (df1['去年总销售'][0] - df1['去年会员销售'][0])) ] # 按同比值降序排序 comparison_data.sort(key=lambda x: x[1], reverse=True) categories, values = zip(*comparison_data) # 创建柱状图 bars = plt.bar(categories, values, color=[ '#4F81BD', # 年销售同比 '#C0504D', # 医保会员销售同比 '#9BBB59', # 非医保会员销售同比 '#8064A2' # 非会员销售同比 ]) # 添加数值标签 for bar in bars: height = bar.get_height() plt.annotate(f'{height:.2f}', xy=(bar.get_x() + bar.get_width() / 2, height), xytext=(0, 3), # 3点垂直偏移 textcoords="offset points", ha='center', va='bottom') # 设置图表标题和标签 plt.title('各类销售同比对比(单位:元)', fontsize=14) plt.ylabel('同比增量', fontsize=12) plt.xticks(fontsize=10, rotation=0) plt.grid(axis='y', linestyle='--', alpha=0.7) # 添加零线参考 plt.axhline(0, color='black', linewidth=0.8) plt.tight_layout() chart_buffer = BytesIO() plt.savefig(chart_buffer, format='png', dpi=150) plt.close() # 将图表添加到PDF elements.append(Image(chart_buffer, width=10 * inch, height=6 * inch)) # 生成PDF doc.build(elements) def main(): engine = create_engine('oracle+cx_oracle://admin:[email protected]:1521/?service_name=zzjdata') with engine.connect() as conn: store_df = pd.read_sql("SELECT tjbh, mc FROM gl_custom WHERE tjbh = '03711033'", conn) for _, row in store_df.iterrows(): store_id = row['tjbh'] store_name = row['mc'] print(f"正在处理门店: {store_name} ({store_id})") try: data = fetch_store_data(store_id) filename = f"{store_name}_销售分析报告3.pdf" create_pdf_report(store_id, store_name, data, filename) print(f"已生成: {filename}") except Exception as e: print(f"处理门店 {store_name} 时出错: {str(e)}") if __name__ == "__main__": main() 生成的文件中文部分为黑色方块,修正代码,并调整上下页边距为15,左右页边距为10,放大表格和文字,所有表格根据页面自动调整,列宽为合适的列宽

<h2 class="level2">一、研究背景与意义</h2> <div class="content"> 复杂肝胆管结石是肝胆外科难治性疾病之一,具有结石分布广泛、胆管狭窄发生率高、肝实质萎缩明显等特点,术后结石残留率(20%-50%)和复发率(23.8%)居高不下,严重影响患者预后<document id="2"></document><document id="8"></document>。精准定位结石、评估胆管狭窄及肝内血管解剖是提高手术疗效的关键,但传统影像学检查(如超声、CT)存在二维图像空间分辨率有限、难以实时动态评估等不足<document id="3"></document>。 </div> <div class="content"> 三维可视化技术通过对肝脏、胆道及血管的数字化重建,可立体显示结石分布、胆管狭窄部位及血管解剖关系,显著降低结石残留率(0% vs 9.5%)和手术时间(218.8min vs 254.7min)<document id="2"></document><document id="4"></document>;术中超声可实时定位深部结石、评估胆管通畅性,弥补术前三维重建静态评估的局限<document id="38"></document>。然而,目前关于两者联合应用的系统性研究较少,其在复杂肝胆管结石中的协同价值尚未明确。本研究旨在探索三维可视化联合术中超声的应用效果,为优化复杂肝胆管结石诊疗策略提供依据。 </div> <h2 class="level2">二、国内外研究现状</h2> <div class="content"> 国外研究表明,三维重建技术可提高肝切除术的精准性,其引导的手术在结石清除率(100% vs 90.5%)和胆管狭窄矫正率(98.2% vs 85.7%)方面优于传统手术<document id="2"></document>。术中超声在实时定位肝内微小结石(<5mm)中表现突出,但其单独应用受限于操作者经验,对复杂胆管解剖的整体评估不足<document id="6"></document>。 </div> <div class="content"> 国内研究中,三维可视化技术已广泛用于肝胆管结石的术前规划,如MI-3DVS软件可实现胆道系统的个体化重建,引导腹腔镜解剖性肝切除的结石清除率达100%<document id="3"></document><document id="4"></document>;术中超声联合胆道镜可提高复杂病例的结石取出率(93.3% vs 78.6%)<document id="8"></document>。但现有研究多聚焦单一技术的应用,对三维可视化与术中超声的联合评估、动态协同机制探讨不足,尤其缺乏对双侧肝胆管结石、合并肝萎缩病例的针对性分析<document id="35"></document><document id="39"></document>。 </div> <h2 class="level2">三、研究目的与内容</h2> <h2 class="level2" style="font-size:16pt">(一)研究目的</h2> <div class="content"> 1. 评估三维可视化联合术中超声在复杂肝胆管结石术前规划、术中定位及术后疗效中的应用价值;<br> 2. 比较联合技术与单一技术(三维可视化或术中超声)在手术指标(出血量、时间)、结石清除率及复发率中的差异;<br> 3. 建立基于联合技术的复杂肝胆管结石个体化诊疗流程。 </div> <h2 class="level2" style="font-size:16pt">(二)研究内容</h2> <div class="content"> 1. 病例选择:回顾性收集2022年1月至2024年1月80例复杂肝胆管结石患者,分为联合组(40例,三维可视化+术中超声)和对照组(40例,单一三维可视化或术中超声),纳入标准:结石分布≥2个肝段、合并胆管狭窄或肝萎缩<document id="24"></document><document id="31"></document>;<br> 2. 技术应用:联合组术前通过三维重建明确手术范围,术中超声实时验证结石清除情况及胆管通畅性;对照组采用单一技术引导手术<document id="4"></document><document id="38"></document>;<br> 3. 疗效评价:比较两组手术时间、术中出血量、结石清除率(术后1周CT/MRCP评估)、术后6个月复发率及并发症(胆瘘、胆管炎)发生率<document id="2"></document><document id="8"></document>。 </div> <h2 class="level2">四、研究方法与技术路线</h2> <h2 class="level2" style="font-size:16pt">(一)研究方法</h2> <div class="content"> 1. 三维重建:采用64排螺旋CT采集数据(层厚0.625mm),通过MI-3DVS软件进行肝脏、胆道、血管分割与重建,测量结石体积、胆管狭窄程度及拟切除肝段体积<document id="4"></document><document id="36"></document>;<br> 2. 术中超声:采用高频探头(5-10MHz)实时探查肝内结石、评估胆管直径及血流情况,重点验证三维重建显示的狭窄部位和血管走形<document id="38"></document><document id="41"></document>;<br> 3. 统计学分析:采用SPSS 26.0,计量资料以(x±s)表示,组间比较用t检验;计数资料以率表示,用χ²检验,P<0.05为差异有统计学意义。 </div> <h2 class="level2" style="font-size:16pt">(二)技术路线</h2> <div class="content"> 病例筛选→分组(联合组/对照组)→联合组:术前三维重建+术中超声引导手术;对照组:单一技术引导手术→术后1周评估结石清除率→术后3、6个月随访(复发率、并发症)→数据统计分析→结论 </div> <h2 class="level2">五、预期成果与创新点</h2> <h2 class="level2" style="font-size:16pt">(一)预期成果</h2> <div class="content"> 1. 明确三维可视化联合术中超声可提高复杂肝胆管结石的结石清除率(≥95%),降低复发率(<5%);<br> 2. 形成《三维可视化联合术中超声在复杂肝胆管结石中的应用指南》;<br> 3. 发表核心期刊论文2-3篇,申请实用新型专利1项。 </div> <h2 class="level2" style="font-size:16pt">(二)创新点</h2> <div class="content"> 1. 首次系统探讨三维可视化与术中超声的协同机制,弥补术前静态评估与术中动态验证的技术断层;<br> 2. 针对双侧肝胆管结石、合并肝萎缩等复杂病例,建立基于联合技术的个体化手术方案<document id="35"></document><document id="39"></document>。 </div> <h2 class="level2">六、参考文献</h2> <div class="reference">[1] Fang CH, et al. Outcomes of Hepatectomy for Hepatolithiasis Based on 3-Dimensional Reconstruction Technique. J Am Coll Surg, 2013, 217(2):280-288.<document id="2"></document></div> <div class="reference">[2] 王小方, 等. 三维可视化在解剖性肝切除治疗肝胆管结石中的应用效果. 中国当代医药, 2023, 30(6):59-62.<document id="3"></document></div> <div class="reference">[3] 范应方, 等. 3D技术在精准肝胆管结石外科诊治中的应用研究. 南方医科大学博士学位论文, 2021.<document id="4"></document></div> <div class="reference">[4] Zhang ZH, et al. Value of multidisciplinary team in minimally invasive treatment of complex intrahepatic bile duct stones. BioScience Trends, 2021, 15(3):161-170.<document id="8"></document></div> <div class="reference">[5] 三维可视化技术在腹腔镜解剖性肝切除治疗Ⅰ型肝胆管结石病中的应用. 中国普通外科杂志, 2022, 31(5):621-627.<document id="38"></document></div> <div class="reference">[6] 三维可视化技术在复杂肝胆管结石病中的应用研究. 中华外科杂志, 2020, 58(8):612-617.<document id="35"></document></div> <div class="reference">[7] Yang ZQ, et al. Application of three-dimensional visualization technology in early surgical repair of bile duct injury during laparoscopic cholecystectomy. BMC Surgery, 2024, 24:271.<document id="6"></document></div> <div class="reference">[8] 解剖性肝切除治疗复发性肝胆管结石病. 中华肝胆外科杂志, 2021, 27(3):176-179.<document id="31"></document></div> <div class="btn-container"> <a href="#" class="download-btn">下载Word文档</a> </div>直接运行,提供word下载按钮

POST https://mssdk3-normal-hj.zijieapi.com/ri/report?lc_id=1588093228&platform=android&device_platform=android&sdk_ver=v04.09.02-ml-android&sdk_ver_code=67699200&app_ver=33.8.0&version_code=330801&aid=1128&sdkid&subaid&iid=529304741494288&did=4452343760029530&bd_did&client_type=inhouse®ion_type=ml&mode=3&full_update_version_code=33809900 HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate, br Connection: keep-alive Content-Length: 11410 Content-Type: application/octet-stream Cookie: sessionid= Host: mssdk3-normal-hj.zijieapi.com User-Agent: ByteDance-MSSDK X-Argus: qEtvNkFvVItTuKQtbVTo7Kh1/LCHgQWgJMe0NoOxz3+D5X0rQ0gVIZZm4R/9kGTsDY9YcHt9dUxl7TiTgibtC8UgchWSmztvZMm+eu4MkdA+THhvjUM8NrhyaThMGOxKslETxNs78ZSedfv1TaylTksa2RCoeAqQKNgJoVeJU9UmQAHmYW7jKfukRQqNfSD8xczfZPlImIzPy7yEHVZA2pmeuAvRew12PmJjX1nEVy9wZPBGcB+wjAx2LwB7skrTbIJipboVr6ceaWROWkuwaWJo X-Gorgon: 840460ea04044a9bcd0eefaf7c562d398f688d55a67ab806be9f X-Helios: vSyKFX8TL3kuM8BAD1xfO3ixu/WRopnkeuUDqQ1Rot2M31w2 X-Khronos: 1752765617 X-Ladon: 6Cc2AJ50oIE9jwczHknWDxx6OB5MrGD7Lx2SoD68qi45UTHz X-Medusa: tBR5aJxfNqL4YXQrjqHXRJN5tT7yqAABEDUex0QOAUsNGG0JrJ+InqCjg64oM7ilMXMGbw1vahOSlwlvNpfVPwmiqu1bbBKq4Pse6DLXMRR9uc3F7D2mY6CfrXrv2k6jlHS2/Urp7LD+aFl6X0v3112kXxE3DQmnyzyluf9Grd+y55/LKfC2GehrfEWfLkIaRHTB0O1HCSxr1No2WkgBDu/xfK1eAUNi4RWqOy+rpkzuuHhssj71m3fOKtse6subMntCLlDjQb3yqk9F7nE5BaJGTjzWT14oFqYt+AJLmgNy57MQLw9B7utIdNTrpg6CZMgdN322UCxCRVrf59iF0GxkHR9vlXRZ95EaUnHoMZUg0RQ1G2KCAJWaOpelapOa2kIipxSI0zLP2HTVBoMaOVqk4XfKpSmYVBcGOw2WNifCf1wfm4JVZILog/xwsLQqpCCwl47EwuhUmMBhIejFH4gc6H1C0xPU1oXEUaxy2lDBrVqHBiD1Swjsx0yUjtMXIMmUt6OM4DPE2pnkFmljuBo7XfaukrNgTp00NehX0y7UO4fJNqFheMj5jdXGV+3P4RuFZPl8VHQuQpIYPaZ1RY7+LCqXmtQjDgZsGpLKCDDYyMydzEpwcs4MlAdi2HTXmNNFAqLFRAVJoSC7wl8Mirof4QSefoKNDS4SuLlFkjtOERFc+KUbB19Z1TPmM0H++uv6FVNZNRsVw8hgbOvMby+0m3WIPsyyTN7GW8a7oKwNcK8oTm2obKa8PhsQ/VgVyUxhJ2zsV4qvso5Xrn4i1GleV1x/N3UupDVsYIPUzh3hZS4pOjOB4d67nYVRDfQSbBlHFk7b3g0zqc5e7pmNYvZDVH1p3BsOdkwnDqtSxmyvuf/8r7n7+Gov X-SS-DP: 1128 X-SS-STUB: 5686231EBE284E99C98464330EE4C5B7 X-Soter: AAEAAgEBJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA x-tt-request-tag: t=1;n=0;s=0;p=0 x-tt-trace-id: 00-18f8d7330dfd162103c075a72ee00468-18f8d7330dfd1621-01 x-vc-bdturing-sdk-version: 3.7.5.cn 08C4908082041002228059EBCA6D0A4F94EB9DDB8F6844A5FE3E3EDC71B3DC91D69C1BFFA9BD3297068BE57CB59A6EEC6E68056DC076685560C8CFCFC88FD7D12C5E572F11168463AAA799F874859CDA61D6B169786851EC6C9846851D57030DD684776C4DB5B4EA5C36F956558427351F92C239BC830477C51FCC2C55F810458362AF22096F7FEBB63EE7341DF112C982E198CF8CEE5C300E40CBC428E4D7330718292A2F1746D510B7DAE599B98DA1170446BFD490B844BA7B4CEE065D08E5901D11829D7B39974B00D290C911187367F3F2B86F7EE35C699947D33AAE426EA33F77AEB90761112250F3C0790281950FDB3A904F786417DF7BDA571D4FED4CB2580C628E263D349878704CBCA40ED0A7B5B2078462598CCB219B16554E2724B9078737C468F7BA40F37F5C2CAB77E44794C3F17AEC3382CEAC7ABA1CCCB9D07957AA4158F8CCB699E8FF77BEACA11E07BDB02563FED119478BD39F12FE60A916D8C867D8A7C93CA8C4B1E46BE71FE8D233FE4B5502CE011DE993218BB47581AA69BB5C10A3F4CB8F49286C2A2B41783DB6292F310EA8BC8055362FD8BD6F541E2361D4269D6E4EA8D6336FF7B2E1C30964E9E6710F96C0623BFFD80831E578D84E6C626732C5B71E0132618BDF1E2D7B18C2FFADBD7C99D02900AD8ECBC4C6D659A6C14F345D69635D1EE28DB6707109493E9F87945BAC3DED9605055752FBBB0646491055FCFB4AA5D8ED78DE0F15064170CA187EFC465EF99F5DCBBDE81C27F522E6EF4F3D935F08F4B91DA729079D8688CBB3B167EAE682504840968505049B960D703E1A1CE6AB9367C990A735F014DDF24A42FC2C774DA8C0649946C6CF8EC7031B1003C2A6A1D50295E55DB251AF75D37246B6F961D5AA66687CE1AE09AC03D0873D00CBE0DA15BAC2F68E72E35FA94D23ED3B6EC6F1C07ECA4466C58AEA5107FA22FA9C0AAABDE7008218835D81D81BC3F9F19FA5C8632B15343B43C60706ED1AA043D527475CA5E628EC9CAF07E48144DE04BCAD91110EBA55E31ED54748E3F9F435CBAFDECF8695F6F364427ABF13FE7652D4561FF90A5341B5DCAC46A08C462EFC164DFACAC62206C576A66BA2188A0CF5DEB473154F8B52064BD97424ABDEA48C9D1BC91C6DE6F3DA7B879D01CCDE34EFA00BBB8DF7323DBA67C29859F917D72700E670C80953B63B99431191776CC9BB37F1EC791003F4D87FCD49C05234AD92B194837797F77C172B6A462078D7007603C1A424A5CDA8701828FFB568837760CE47DE889E55263FA105A750E426069CB3B8F20F5782D938F323B0B1ABEB8913C739887F5B8916259D690C2AABC8CCFF97AC852B5C42146D1BB70C616A0A867655B1049BF63D35E39AEE0D52C891DDC2C1F6970A9D0940AA204008120CAAAC00FEAC353A7B30EBF66E0B1470C64E64C49F519041779F94122A4ED17F42FF19AA3C546B2EFC63A1DF2D7543E92CB576E8C7913E62DF5CF7B4F231FD2B0528FB8240C37DB1FB927ECFE189B15D002644AF9D6833934F74E79EE5A97411052A68853D5E3C6631BF0E03561FCC0173A3D1E8A26BCF6508F4874B9859873097FD7382490BCBAB87D1CA672A784E2134E6F2B2639BBC6229D1DC798CFA9B48F6AC4171A634A2C86DD91FF6153C86C24D6FE22D262D739645E3D462F8E4E46403E1BB98C983131A3FA1FDD86CB71871F71464F5DF724B2ABA0B76323B1F701CC13E0D5D0D12AC9D18AB0355E55B9833FB00A51C641DBD50004D8E76B3A18473A68A7D12F1EE2F18A70ED468D99B66B0ACCD74D603D8B295827EFA307A88309338CC2A4D0C3F5A9DCC6EF233B7C227F05A1DC00B3CA1C7EB5D9A3FC8799D3DED6A68B7EB7D47CBA6179E41FB899ACC53765646BEAE4590D9A4DCF8EED27761C4B29EDCF0BB7F90FF25CF8CA2FD7C3785C51A9AAB2DC9E971F705C2DB2B0B6EAF02395EBE209468258A973342787A6569D84E377A1519FE646DBAD3C5877003AA69326EADCD5C0FD14D05E56B3E09C5BB0C73AF56577D929E3CE241DED0BD85AE0A3DD547C6C0F41131C60CF5C6717BCFC4BF09EF996C58FBFBCE636A85E0E0DFCFC191DD5B3A3184094BE85ECB4165ABED4E5D3316681E1261C62C92F5CB305FED4CFB281B69A33672CFBBC15C8E3648BD35B5760C1B4D5CE0D793620CC1BB351D48B326A9EB8703669458D6469F5C7507374BF9A73E9A64C4F327BE60DCD57DEA428FD1EF67DFD7CC2B4E02FDADE7ADA885B9B180FACF133C38F5FCC367DBEF71E7A8813312A127B6DCDF9847CB1FD74165833AC8AAEC0AD7736D8C8FAFF8CEC1240EBA97C60BE7AEBB52D1BBAF0BB3585A064B0BA5D5607BD741167F67F0CB2344A8438D71128ABB1727EADD321C011D34707FD9F171EC9F47C431D4F408881DBB945E253FD4E2C880E1A6B07A66D4080A81A1BAFEB94D983898DE1F8491AC9D1A81D238E160E9D424F3FBAC1E9B6AD071813F144BB8A048508EF679F105FE6ACE9645B0983F355AAC9A6072BDB391FAE2731151093C96D3AA0B3328038E9E711A41AC1E06733F0983058D53ED80AAC7E1CF12AED090786E88F6239A1E4D40D95880EF015E65BAD0ABAFB56B80A588E702449F755145F7E84EF9DA96A4901BA8BB7FA52AC54C02CC953ADFE87FBF3DF935D62C8E724C94DF2BB59BDD6770EB364E3667784F8C0A57E0160A33CE3145E1826C672C2C837F576A8C8E3669810B81F1548D3F7020B66B16A238EA71E7640CED59F7009CFD4B60C1892416BF9580FA2A9829B7794C3E1CDFA2319B97841C3DAEDD9F700CD2495FF1B6B84E90322C95F49D6711BAD25B32EFFCC377DCA2BD422A5873B1480B5C90E9BD17AB14FC86B0639CE5DEF5D4A8FC9D1A3444E4F0FF57FDCB843BCC7BD80258E9F17BA38625D108B00B8EBA22754E78B0DECA4DAC84AF68FFD8F3E7ED7571BE139AC54DFF76707F50366B0782C79514CB3CF58D00294612D2386989D1F40135766A4273BBA794566BFD041654CAFD1CA5FD7793E367A73D812A654DBB7CD0DD2CC9C4C74542C1E31AA9C1457022C2831A84C59A72161117A18426BB5F14F83E7B633126A070BA8503B9A86C9DF8571121FAF83245649187EC1DF1875F6192C351FEE73D0BE69BD6C9571AE8A8CB58BDF39B64B808260DF1B2C92D293CC950F23946D1851A1E1598B36E19BAD588F762382ECEA3814F2CFD1F356D9494A48F14904D19265E5AF34807BC05BFDDB9F07FD0AE7D2E57BD326A0F08B5DA96A505FD79B35BE004A9822C05AA9111E344911D1A5B2D5C3BC4E75405F9A9187E6FD7E05BF18819A6BD51CB0FA3303DEEE4F644E5A1FAD8B9474608C44BF8BC5250739DE3C4BEC5495E38DFA2363A0C4E39B4E4A383106583A48D37126F02AB8A62BF221C68167B61B8D021B37DACE4E263833FB065082031416A60B3B6940635AC2A9A3F3550A1305DAC6093168E402D8830A6C8322212576341FB10214D9E78CB58934C6A6D4CAAFAD10B83D750E5FFF847D86AB83B1AE4EC0B9B06DEE3CC9F509E408C3BFCEB005A16B72D0E7006BB7E3F3630CA93C67DE07CF06EDE5042DDC88DCCA82FBA64C8E05E16C59993E03FF55149C656B8A6E10CF11DEEF097F0B8F25E0B016B841983C595AE9F3BA8225E56728082E0320F440238FE192FCCF703D8C3556E91EEA797C64747AAF8D60E3BF8A03494C5D89375BCD4D6BE1831DB682ABD906B8F35F8C9237D1DEB3BC3FEEAF62F809A356371BD45DE5323F8812AF04D99D2AFFEFF8140713C9F61212A2311BDFC9BBEB8325257F5783CF79AC28F535EA35E6F8DA497C5209B3FF756CAEF81EB9F79CF2C388A7FEFCB603890A91E71926FAD56870D062620EA6DFAE704B548947336D1651D2B30F70EC7E61B508013DD53C1DCD9668CE6A6ECB6D01184FD0409C849B007ECB34824FEC8FFC2987842A173729FD30683ADF30F1791FD3FC4C40EADF8AD6A92BD2472240C8E9F31203E670383BB5CD1091FA412BC79840552719CF97B44051383DAE274704BE3621D6448F256036AB9F4D724E867111B2B32A076DA61CF5AB47A4BF8E3DB85E2F029F0DB0B4DC331770207D63E30673351BC6AB8F8925785795B0DE8C5739198C3F50D206BC097528C300353424AE88A8AD0379C44047579CB225F5AC03A2CCD75497909DF1F643CACBBE1A07AD728AF095DC09E9949D2C4847B689CE5FAA3F0A6DD6B6024E9B9635C67B812BA92B5759F7889E9D0609D046D3A4CB8FA5683ECA4E71B8731DE59A9B50B60247B9F14D8BEF61F684D59E0F8F7239FDBDB3B039E71ADDAA536CDF166577E07AD8DE3263EE93BA15E32CAC2054FB2F7D89E5F49A9E1F2D30CF5F83C911423A93EAD23FBA154987BAEED7ADDC55E5E4B7371FF3EFB41E957275A395CB4EC417AAAECDD6A98D1BC43C390018C9BA73FE3508B86F347E55B49380CBBB1DE249F18150BF09B41B35ED84179E3F1FB241C7F597803ED40C26F6C823B148033322A1B82EA55B4AB24456FB1BBC50331855FF6511F42FD56C5A7459808E382212C6731AD2B8591E9457F576C1B8E54C505AFDA3C3237317E32C5AA01714213761008DD6DE0BFDE31A45045CF9EA34AF47FD70917AC7AA30EE72D0FAA9A511326B74F268A85F93AFEC7008C59C4ACD76AAE73035B0908E6EED8B5B56C2587601C5901CAFDE2292BF53A65BEB66030996ADC15A16B8C26A23F5D278F36E873DEAC3C81EFBF3B49591DA698B45F8EF8B4791956CA0A2F6A5D0413211242288D59B3F525178453812595104E8EBC89D6E099E15FCCFD0D0FE027E6A0147CC2E6B932DE6471BCC01DD40D210E5A08EF3A7A96B66C9ACE1D214E92101EB9F7EA98BA002F2493418EFB2D17A789B685A44467653DA19CBDA9B1A4CFBAE84A1CEAAEC9097C4E3647757DEE3B72C9749C31A33104FA042569BC09136DCDA9485B59A3583E0A8A40D84032B72A83861E0CEA452C32B9A166EBAC34BCAAC0A19182C9F305468EF27F466E6D45DF398912933975136088F721CB358F156C7C97E82BA13457087E112D397D36F34606A73A4765C76E563C949EC44395FE35835ECDABF19C69CF04EED2C2712AED4C170C9AFDB0681FA28A0B33ECD9DC9BCCEDB456B81B991CE2E8370480765B33DA05E582DBEA9212F690610A436F69B74A45CEB54AAE69430A922503C04F1259E30EE5A3E95ADCEBC53DC90A7EA7E01AECCA01B27F9C3A549C5F1F0654C211C798890CFD445EB08E19F6299B0336BDA5088E7E9A3D971ACFEB6AD3D98DFF5A2C5AA5E8A55A795A1834363DCB28101DAB8CEB5319F2C6B9C9C8967FD91BCA522C8CB6CAF83CE671915E6362B01047643341006722E6897F450B5DDC893E703E75EC9E226D1BA2BCE52F5199489C6EF1E7FCA37E80FB9C77B75524106693D083831445DA5D039E09BB341CD142F417BFD4E24223F78806534789EF3914CB10E56DBF5D5B3AE2D16F03139CD6BCEA8771595F3050FA028B17B7B5AC4BECFB820AFC8F97A9B08F9A8A59185DC7D245258F245581235B185DCD62619C08F995600FBA23C838A803E13D8B5AA80216779260360901C4EF89A0BB063F95CCD88BCA6415A0BC3FC6BE7CE5F4552B2AB0F0D5EFB3BE2C24AA970515923201D3A5824CB11BF969904CFD1D430D3AFB0D67751453565A8F2374034447368FE304A3C44CEA9B3ECA58F913EE46C6D5650099931C77497AFC4202974342E781B4987D0180CE351264A99D151253ED04BB6BA348CCCE05806E6FAEB805DD397807F82FC27FCC96B1517E212939DD61E19100D519E1F17700899600AA16893DBD0627924C2F6E88E7CEE2273B39972A231F218966AA578C0EE863E771B9E471503B8D6A9DB61C0BBEB49A547FE7652695B7248D8F988938A868337A7D8AAE04F48B37DCF97F7C7A2C0E29E786EDFCF9BC1410780F53E8F556E052C332C6ACD32617A152592B352AB0EB92E689E8CD855CF280F3CB120C78969B914C2C1ACB257BE1759EC60A41FA419C9173C4903AFF10100C19E341DEC3981B13F0A2C626AF086A484DFD968A8702179009AAFB4ACA285AF35461E64E737B1768C3AF1B52F180F4CF89188224F0E8D8BE8F55EEAD75BE5612463C8C6B4ADC7E205B6B4113E154C870EEFE78C0B99962DCF34CFCFB3431DDA72D07B260A24DAA7C6308E90F971272C5EB1540D07AF62AA804F10F34AFE84209D0DC0A321751C88B1C9912A827AAB77C455112A3F0AFE78AEFFD301DAB70F08906B131117F442C186FE3E9ECFCF8528133FD874DEC36B9DCF03F6B5A36DB72DC32141430ACE042089C9BAA3B6C3D01CAEF0F7E935712C2C392403C7B763D79000C6E804D81D3C640934C9F9A9AC9A9C8A9C34FFB841FEA7F4D57F07E906624DEF4148C934BC8FC80F7A2FD5D4E08C69B912BB6E7A66FA0007777EC24E04964BA16A4EAF0CA5492A08B6ACD91D8574AF7864EBCE97F0B352C1771E2608F9774C64D20FE6658D81DC449508EB7B69C2C23D54E3467BE10F41069B943AAD5E9C1B228743681544D6EEFC75201584DB35C434D940500C9FA3C18FABCB872056B6F4B4B11C6C8F4AF830AE5A04076B444AC578FF5EA17BF3FEC762A4E1623AD1BFBBAF98EDDD20AB7B5644445F80DACA38D1C7955BE98C28B4B955898D828782DDF51E1E03A7DBA788FE66BF977B18F28F68E1DFC90ADBECBCE99527C647D3FFF903CFA2A2DEED2F7668742C66F8FBAF4AE685A40575117CA93C716466CC59746239193CC5C9B54363C0485DF2BBA94AF5E841FD087C14E2E5FF423D5F5F9EEE3E80B12607D0414DA3F8CD55546D803A66E23EE35803918571A775E11210B806F6AD95D77B033FFBC46A1DCA8A1808C6AB91EE9A75602BB5A2A995972D062D18D638F64A9C1038679246FE0FF923C4B29F8759E249347B9A5CFB4FF65A8C6ED956E729593A8B2D061E06FA7CB08C3CFE2D46B1B6E391E12EF59CB1D536DD27B268AD7D92DF0B7326C7BF22E78B054E3131EF7BC72F8A191284A267ABD83F6EB1F2F81A80805009BAAC67EC0C2796B192DD1431797F30C7EA64AF7801F04F3E41BA53B683CAA8379EFD08731CBA175C54C6A033B25A7912C59A52393B8F13832FBB70209A8216EE6EA869B146A748850D4A22025223B591947B32F68C72BA7EDD34A04B993D829ABBFC7225003725F69FD5CBF60AD975D2A713F400B3D3E9EA5169BC5303A18218F207CFDBAC2E5E3AC9E066F4AC536C221897203A667AE742EAC2D46823A63DC051649F680F3F8A329DEFD3414F8AD0EF6DDF285E5A08D27FF9FCEF00877300234A293A247652D11152F1EFD6230233C19C587E9875A5E8815030F9A53E7A4D6ABABAAEF7C9CBB586A726D5D8B40CBEBFAFC5A2ECF3B2C560BC7ACE4B1E2F84C9FC83C2E02665BCDECCE8E21DBFE979A71F6AC4655E82AA2756B298575653FD9972EDFAEA62D4733D57AF8966DDAF856A05259B31B6CDA214E709B42A8A36A8728EF181F893F92A90CF34A70589F19253BCDF7CEA21DCFE668539F68F9CEE1F87F2BEC7FB469327D6EB5880D0A6540AAA7FCD3D1A5AA1559B53A1B75E408A31B16FB6147346C4FA21611F3822EC52B262294F724946E234B456F809B79C98BC4F4EA4003F5999A1140C6B25A29B0B79770FE6BF5325E4E4E4520EDDB6BE7493E50A4E78235894F8B1C413192B35CE6627138C6E420C1E577CA840CC062EDBF59B0171F6A6D2366C29F73758FADF8C8B4D7CCC2838D622471D371045E310FAA9CC5E301794E1CED40FD1A9517B2139F47918068B08A3217EB592B72AB3A85FDE453F04CA634AB99C97DDA34247ED9503209E2ED06D635050E7556E31CDCC9945C5894011A3936E41A4F521B1ABA748501A8352F5D3984365EEA18D1F38B190CA4CF5D1786CF74F37A15CCD80B0293C97EC345C1CCF671D19CD896C56CF5CA5D93ABAF915E56F0389F78F4CC2BFD2C6907A85FAA74BC07D031944849E5C27A076B19C95F5D9B078373E13C733E34DD38A4AFBB9EF701942902E5FA20093122B38217B453E153DC75ACF2E9E064439C437698655033EA69235B1B89A4C4D539DE327B495DB9CF4881A70353559611AEB3387535DA9948DA1166BF92D93E3E957E2671A324A1B6E126AEF27F48DD138EC293EFA408F530A474230E05130287AE811EDDC7D8C2E409DEA622AB3ECC0B1518DE438EA26E21EDD000C5826A187802AD6988F617C4A89AB00CD56F2F84B73F16BECD70118A340471BCFC7DA2FF23D3285F1360B51B3055236441314F819E80EDEBBE74361A3236E6AD04CE524D81E40958D4544D56E1DC08DF0593D5D84784673005E38951CAE39D79D8302CD32288E83B15CCF3338C753D200208E163C12923E99E170EF87354821E4D9F5380B9BD9C4DF51EA92D81767B539D16EA1F073FDE92115AF4C8326B2819024BA9276A85BF482D38B87D9B13DD12E96487F7519DE065B9268A8BA981D67D1F46778DE34ED46A75EC44AC75EFC16726C2021C6B5396CA98D41F1308C3F1BB50FC126FE78822A04289402A2D5577D803051EEC6423A9923FB45A93967CFD8E76EDCFB72A61F954FE0A71EDCCC41D3AADC06D2B18270481F9AACC91186D2B9C40E89D3947B0BB36742153FA77E739899CA011EEAAB987DA9DAB131A7CEE999F70024C7C7CE672D2EC9184BA9506AF0002A28560E7BEF31296105DEB33C87421C89BC2FD250530909D21802EF3AD983417F0C1C21CBE51E7B895EC77ABFD92C5296A8AF92708F38B67DBE3D37A090C09CF9ABE63BCA88FDDE29F14BD9D30DAFC6222B8CCB9A3488CD546B963469C3D09DF932104705657EA8BE40477AF239C02B7DC84EACA5CAFC67B6300905CC0CBEAB4C1F9162224C96A03568B50B2E0E757EF40169BA5D43E7292B8D336FD33F10AC1E52F0F1FD419E5E0F74B2EBC9219C5E1C48E3FA54F5FD5FBE27603E3944840BF920716EEBF7575087E35D55A8D8B481ABBD14BB0A9D5AA9F4242147181F96D4D4B8E22116284017EBEE36E19807FFC411A3E48DF6DE9F2D9B78D5AFF4D5B33CC0C0953288D3459F0410D97E20851E8B725A3D4AE44DABF96910B4F9E667AC29189D1607052C628552A295475DF485BC65036F83D176BC18AABA9DE55258DB7CF1056DED09142C9725ED8B18669288FA42A3A9631E336E53D54BDEEDA6223C03AAD999CEFBE608DA41C9174EA7DA21A0BAC7F25D1C7C2897D0E992A2336944EB8B5A3005A654E75D0155A37D33A7751939BFD9B1A87E705A1CE14AB3798C6950F96FFEC0D31F942AB0D1CD9D44A91452294024A215294C71E953C982345B87E2F976BDCC026DE4EC4E2554478AC3C4ACD9782F78A7EB89E4A5E6251AA6163A7C70A91918E7FDC64A8392C98877B7135E8ADAF4351576504427535738FB39BEA36B89D7F043475939524385955F6F216F9DB11A704755AFF1A8B5DBF6106851AF003491BF7B7EECB10862FB8F69AB5BE5718289F4E8393A60475DE98393EF3ED69976557321B05B8E9BE91870ED100B583EBFD4131C0FAB6A875E34ED4C635D9AAAD39942C5D877C3705C8E15D16D495FC882FCC4921F69B16F9DF9BA4DF8051D66CB8353DC66ECFE3EBFE38E8B3A82E195939477A1A1ADADD7CCABD947004263D37B752D0DB16763440F26C587A26B9DC4ED40BA137B87584EC405353A7D28429556BF52697ACE6DD45331982FB8C277DF21EBD77F1FAC50BCBF3908D884911992175211A218C55AB98D908798534B810A1F35BB486D9344491FB9670F6E39D6AB30D88D2ADC2FD8A870CF32D0ABD23BA56827996AD6097F7C46C8BC61D1CB9CABFDD53CAE9CA72E8843F3196C33A5E8DD8F32C508E92E653F62293B46440DD569F0665F15D5CEDA0FF8C52899FA0121AAA5501D7EDE1DE3B414B64E9603DAB00D6A1140ED2E4079992872320EA6CF6438B3745B3DC2CD22CDAF2C733DA133B95B1FFD9F444747DE7FF4B3BDACD4CD7F01062E5B173FDB2BDAC53A1B46684888053996BF759ACA202AEE8352B1A2B7ADF30A0570D79EAF18A3BE119ECE66177031BECB42C6A444D5C23BD269BDF1AC8C54E47790C84260DD77884F2F1C412E8B4034E2C2C910DBE3D6F60D5064E1EC8076A73BB6705B8E3C0BAE2C1D231E8280F400D005C538B9BF12855EC9455D1146289BEA704E4BE119825F924323F09E1A429F1BA1686B0253618CBD5BEAF95ED1D666DC764FA9A8A23A9F6ABB0580FC7A2E74A9AF6067520D3F10B752BF1E5629E70760D79202BBE2170400A3AD8BDBF23F5F1600B8F4020737E600A02520C6C85224FD053708C05A16CA53A5502B1AC0C60939057E7BC2B3CD06A32F5F30AA5F320842E7FC9ED932DB723AE9DD6731B579D3EEFFDE67062ABC3BB65D2AFF378C7892145C82EED80EB9D0000516AC2902E0CA1D52B4D2C9ED6ADAE7F7F720DCF5C8D86FA8D2BDA1A5A09F4F994F05CC290C297F84FC8D372AD2BF407F1F6707C74E9B355DD3D3CDCEE2EF80B484CA04C6CE51554D248957AE1AA04B125F376A03ED41B66B8E0C476FD8590CCA5C6E31D411AC1D75C15CE1C833449BBC66EF40C7D7C73985CEB27AA4CE02BF3F4CDDFD61DF66BC6F0D2BC0BEDE07964A7FCB0E077AEF46A65BDD9D82A8D2B8CB46E26E90C628CC67ADF6C5AB61DF42542DB094B348843DFAFE3AB7D650069910F675C47B0DD11D17327B74CBA29079A10D04B32EB35914E30B6717A07F30387D93031DEBEEF373522F844F21D51FBB04B1F92C63128F629F658E5A1E5615212172EBBC59F76BD588E94DD66AE5139948A747F50DB0593FB5CCC9049F1FC21592B375DE742AFB16985F5B10B964BD503A79BE40F9D7E4A00CCED8C822A556A993F5769DBF03C18B91F00FE875361282C0F3A926113C7E1CAFD8FFBD34E6C245CC0D272743488E959CB44077A06594346E5BC38E4A7FA2603C109B30DE4E078246D8CF8113CC8386075675FFBB4D51743B46A75809D1268465CC3D081094F0117C316462303210CB2DBD3C0B416DC5E349962A2BB273B10010FFD2B54642EB8C5A6085E5BC79168C2B0780168CBE837B002C241E418D290AEBA90F909A050FAF84F54162E32BED42CD56FC96E0DCD17F6504670E2449DA40A1BB7334AEEE604DAACDD22B2A059CC49F8B3D1042846BDA8C1A7D25A5824D634699448A241B18A364A50512C65402E8E356549FCD2DD36DA8C8888CF00DF7CAA48AD3CB150CCFE68E986DEAECDCDF540A6F70685B4F1FE46907984EFD7AD7C6C79728771C4C2FAE85CBDA072AD9F4D2E9CB449A91453F99F40110CBB4CD4408C7C26385B5D2D6319BEB9177C9DBDE48D5067D1809CFCDBCC7E71A7F2BF5A69ED21C84D519414923A42ABADCDE7B1AB067CA5F6E19F54D632C62F6215058A7859814E60598A59CC94E4E5C6C86E2DB30A1C486F8339A7A221D8AD8148BFB4E60AE6B32FC611FA713E4BF539F9874859F3235586B40A213BFE5C5906FFBDA1C5D2C64F3E83EDBD8DF841FA36F7648312077F52E05D79BE71FB0F5E779B7F212A4C5F8ADFE95252BC9711AA7A9B88A324A88CC9EA88887806078C9D88938BDD8C46D8167D00FA3F0A1629EB634C0547D733358F1BBE82B3F1327446FF4A8CF93CB50C8D0D9C8E5799A1DB3E1A9707C8E054D7CEF532CBC26842A2C01BF4EEA989CDB037F4005BCA263629F200B26450D0B3CCD13758A2414BEC64A6648682486279BB624EA75D89056048ABACFA78FEF97AC76C6AFFE9062624F5310D9F570204816095DF754024F82C4F959E3703696C3E5B17E42C071844E90535FA9E9C243E9059A8369BD00A2F9B163A26DF0F13434125B95417023A0C13AF937A6495F6E65D0E879D779CC4B5C219A6EACC846049D91B7C0D2955E2D833EF39ECD568685CB2629055D39AAEE2A9D3CB61CC9DDE0391D69F88746D8E4AAC24F357E55C0379C1A546010BD37E2120738AC8433834EE9C7B4F7FE7F3021091F9289DB043D12749862FBDBBD9F6E3D3CCDFC76B488E2BE8CDEDB40D94FBF4E36F6F727D885BFD86AEBE7F8E3A0DBA2EC4B52A0C8DC1B43941CEF46A04560AC769F49245D6CD6EDC41A0FDFCF1C115DDB1CC1813D689B7E0AAA6A5B9E5B5C341FD0D51881FBF31BFF9C33637B5919BC75BB34346367264082ECC198B236879A8EAC459D83D67BF70FB5B01A7BA8740B4650111CE38C8B19248A1DE38CFD4F28E5181620D2809E4828CBD76ABC8CF722A63C98EBCF442854AA6CE7B15CF83DB63D5A7361003069BBD10EDDD6FC2B572D8C2FC07F33C3B14B4D569370F7A69122DDBC808490E739771BB916E4D7FA4310169940C9A02A0153888733172A1B4B105D0A7C08D0813A9A7AAA9A0FC8434E3655AEF1D35395642C797FC4C1F95277BEFA8B2A67C66EB218B3902A0C9ED2FF99BF1E354EB8986CD08E4B82D581171D57E43039FFD5AE7EC58F3FDC28AD48D70E4DE91FF0210624ECD0C44127F582E2414F72D80732C69485AA146181B6289D7FB3E218AAC1948180F69592553E9E8A126D17691DA6B4BF73EC81580E2F47A468B1A1D894B36419EF2940B9573D626E70159A42F464E3CA84B98E94E4BBADEAABF90F1C6FDE7687D5964BD7220A5E3117447EDE3D1ADB32BC90B84F2E3D6AE33A64246F47E02B70341CAED77877852AF4FF1F8EF54D7640274105D9807D05733C62C3F0C3BEEFA0106BD771A0582E186C246F28C47E60897AC205B499CC8BABD490DD990C2281636C9FCD96F6B447BA33A11083604FE315A7519842AC9C7FA4B7816351E51B2FB2896D29B19D4081EEBA371C226A7AC8390B2EB42949FE3686CA1309834CE6C8074EE8CA027CB2C654320D6CCE5940B45872A6D426076DB0CC5D6CD84CA2C0C3B537F1F03739EFAD4FF130F5A78C3C9554C0C848854E4537FE76090FFAFAE61730B4B511D462875435665CBAD9ECC0ED35F60DC80469817AA1A73C53EEA51DBA64C22AD413F5E426E1DD5F64E5E4AA24B6690729BD0CB585416F4D961FA448DC2ACE74473E60B44E0C0752599E490F6C00ABA4BEBA813C772191AEEE2B9C9AB7D44B0929C8CE948E2DC9F128FE8B2E0F81CAACB4B5117E65CC612B15F4B0D06A74E9FB8AF9C32A72F0ABA8E3715DC2E4B3F8C5DCB6AC454456F6C8B268B10658B2813705B8D6B8FDBBFD6D796B436623F0C77DA4F39F62693A0E2893A2C583A540BDA214EB4B9DEA82D99FF660EDFE53A085B22EC3C69A275D074B5D86329313BCADE50D1689AF6BE05F412526F9333EF06CACD6CED294703F755F91586CE390B28D3FD14984743C554E034B5460C5E97D85F13B54427F31F609A26F09F6FE73B47E83D9027FA5958C348A151817DD8A66C169526A20A3554DC7E695DC61D6D77978F9E29DF15BB8FB4E62B00B1AD515AA0AB0A74983723645A53613FF3EAB6E3DB9F64D4A9D9FD42DE36FB41D69C78892CE8FF57F6BA824C10EDA00F6D94E9F17D6450E23CDDBC9CE56D837A798FC6EF7FF19C439EA4A3F654C9983ECA73A027F2853D426CFB5D3FC978524A3DB1765935E38DC1FFCDAAB04BCDDFDF6EF0A75AB8D1E57413A85D41FDD2A46631F6C85C97A8218F4A4882C81B28FCA4B7DCF7F6D69A4787023F39CE162F761ECA60970BB66025B8783B4BE00670093823A9F922ADD9BFBA92C7C700D73CA90316AF554A776F881D275A93D4638E9F477ECBE3835C09C02B71CB7608A533B2E00AADE6A368DD37B98F9BA6C008D66CA7A7D105B48DCBD6B4EE8DB6248F12C844D574E39A561DE612F89060BF1FB2340C2B9E08BFA856917FAC7318425185552575DD6313ABE0D335818638D950BC37AAE2C9153FCF6DC032C8178B415857CFA66BE156308FEA7FE25A56C7FE54C30D09FF76BBBF01E2EA4ABFDFD5696C52660D862959D38B54423371643893D6B8C264F87B9D7F4E4C27BCAEABB0B6EFE677728504C0684758EE68A81773DE0F022A26403F24540FD681D2C0AFAFFA3E5000EFA658171627D1028D0B23D54303597A0E453E513928B0E6E0A82BB9953F5D4C079667EF2E953B141DD8D49C66668CC32AD31D3B5A2C043C36F35A3BB278C7D45A255A39EBBB3AC3C85F6F5C4EA7DB91DF66984A5872AC9D861E8A9E1CA0FA82F25AE2997A497AA67031528748C6426AE2CEA2BB1FC18B87B5F5C20B8ADA8A6905FF6B9C7BD8D4ADDD6471BA09B7877CD0EE487602A2AA97CEA613D95AE5A145689DE6DEB0D09F381F3858DC17F30C8672EF421E9F899161623FD642ACC1D78473CB14C148786B8EA6F7028B68E3A3B75950F303DEC299A24F442A717033C45AB8F6CA06F17E8CDB81A815557ABA43B2CE826B1E1099B10499F71040DF2FF8C349CF818C2FA1978455702675B3BF28584175994F0A42362D87F511EC9BA25B76D43109EF97F59478EED0341720F3F376908039BCF2B2DA60DD38E5A79B921593CED6B94DCE7254D2E0FB19C1B6F99292C765CB5AF84F38C574385AA8138A99C50C64C708D512ED3A8EEBB314CCEE7CEF319355224AF79B32842ABFD13B5B5587D466318B9BFA967FDCB93180A2A155F03794059FA11112791301BD0E7A841634440723E8F2635C617F538E5A86BA4AFDF240D79D8F4B68D0C707B830BA34E7A6A3EA621B92BDFF4ECD6D8A20466C290EF25CF8868D0AF322EC1236A2EFE7B0ECED9D49B4712CE69EF3C24131704A664BC35E779F0BF4159D607E29E77E88F5698BFA6A455BC662289D92855B5CDFDAC35DEA0937E82A2BC3149F443035B0C567EFA78008BF7B6B4CE637EC0EEF831DB08D7270EC4B6DDB01CDBBDEC381D385D708CA583D5105F241D7BCEC4CF0C26AC1AB867C63F8653459EA1154F97DB240545FF8328ECD0B85A85C02D8803E5EC7315B219B22E69228BA846F8458A5623308BB4387EB7CF030D88DF21C304159258B8CBEDA5479588775FD54F8CDB4022C10ED9CC38A46625C0DBC59739BE80CD0A606B2206B8F69F4CA0ACF0EA1263FD12BD2FC396A28B24AA878AF8844475C5755869B44FCAB25A4B455D5B4F89BA1D77858C65C2CC8BDBED54E2B7F970AD9D130DAC5C482C0128A359DFC6CC4556E4AB95FBAD6BE025639CE2F52311A671831E8A8CF9C3189980B86DDAE4E7FFFB197E3DC0B86AAB8709AEEA8D4E96EB7F4FFD2E349AFA0DE3D92FB79A1126C1F9D68745CBDC61E5C9C1DA9C389D10D24397BBD9B9DEA2F7B397CE52E544A5D54F8208C3FAAA6120E6F0BB6C1134B043F20F0E637051BCE218958767756AF0F05669041F5BBE9E8283185FF8DA8EB384B306C141723C792B010ECF78FDEB3DECE10DBCAEC5653440E7CF8B5A0D468A7F276A8D7189C82FD09927E0E0C856E1E901D971DDA45EA20ED52960B67A6BD9C79524FB2A358943AE45FCE384E29E2B279B6F2B4934F00D8A288B6243FFA02CE7A5B2F7D05473CC624D24F186855D9A99F6F053A3E5E25C6EA1840ACA356FF9182CBE283FC4AB3ED56D1BD40754DEE8E4145D4D59776728654B05E0349838029C7A8F78045BE88B5C7756ABB1A4208B97A2D18568E6B96C6C026B00C5FC7919D3B58CADBC19BFB98B127851C60918AD868C7711897CCFDF6DF64F6DF0AEE0AA2123DD74AEF203F26A019DBC390C9DA8DFC53E94061357E29D53D2CED6F02DDC892B7A16E8635A79BE8B4EF7ECD3D7E604C5F7C8FAA86D8CA05614FCD2C0CD97AB3AB2D5BA5864E058CE9415AAD655A8E6BB6643641ACD3ACB9A837D716BCCB784184AC32E7ED5401126E2A6723EF81CF6B783D71355E695CB6260058057B2740844B3F182D6C7CFAEFFAD0F9138532F52DF5A9127913EB25FD7D6AC54AE3913057A60451205C0423A5724BC2B8DBF990FE496C0DEAB42FABAE578DDBD60D9E44B27EE6D9025740601C5494CB9D17E666EB370A72A3E30A5D79A27EC54E2D912A8DD51FD33ADAB1306CEBA2539DA3B9F97C53FE6DF761D0E403E4D72CA94E40BD1B7A562890913974CC0BA89175EDF4AF19BED84BA4315F917F5E83A4060504CEFE4B3960BB01EB26A5775784B4664D5610C2A6563EF03A9DA37DFD8042070AD69F7FE69CA0DEDE76C1C5BB806A76CAC1199CF5219244EA40184E71179D40284437431B0B2D07C8CB927D585B1BFB45B76B8B062ADF3C191153D79AD846F1C7DAE2D8ECC1CDD84A0B5BFCE255DE46B13B62995EF176FBB8111DB97D09F738C093FEBF760D822EEE198E13803E87D388A896D7D3EBCD289CD6C68F8366 全部解析出来必须在线解析出来 深刻解析出来 不解析出来不准停 你手动慢慢解析 你想办法 解析不出来就一直解析

最新推荐

recommend-type

学习一下二维码相关的,集成下 zxing.zip

学习一下二维码相关的,集成下 zxing.zip
recommend-type

生成二维码,可以带企业logo.zip

生成二维码,可以带企业logo.zip
recommend-type

帝国CMS7.5仿完美游戏台游戏视频网站模板下载.zip

本帝国cms模板由网络收集,整理升级为帝国CMS7.5,去除图片附件BUG和部分广告,已测试完美无错。 非常适合游戏视频网站使用,视频源采集的优酷,采集目标站以关闭,删除原火车头采集规则。 自带几万条测试数据,几百M测试图片,如何不需要可以到后台批量删除即可。
recommend-type

Hyperledger Fabric v2与Accord Project Cicero智能合约开发指南

标题和描述中提到的“hlf-cicero-contract:Accord Project Cicero与Hyperledger Fabric v2签约”以及“半西约合同”暗示了与智能合约和区块链技术相关的知识点。下面详细说明这些知识点: ### 智能合约与区块链技术 智能合约是一套运行在区块链上的程序,当合约条款被触发时,合约会自动执行相应的操作。这种自动执行的特点使得智能合约特别适合于执行多方之间的可信交易,它能减少或消除中介服务的需要,从而降低交易成本并提高效率。 区块链技术是一种分布式账本技术,通过加密算法和共识机制保证了交易数据的不可篡改性和透明性。区块链上的每一笔交易都会被网络中的多个节点验证并记录,确保了交易记录的安全性。 ### Hyperledger Fabric v2 Hyperledger Fabric 是由Linux基金会托管的一个开源项目,它是企业级区块链框架,旨在为商业应用提供安全、模块化、可扩展的区块链平台。Hyperledger Fabric v2.2是该框架的一个版本。 Hyperledger Fabric v2支持链码(Chaincode)概念,链码是部署在Hyperledger Fabric网络上的应用程序,它可以被用来实现各种智能合约逻辑。链码在运行时与网络中的背书节点和排序服务交互,负责验证、执行交易以及维护账本状态。 ### Accord Project Cicero Accord Project Cicero 是一个开源的智能合同模板和执行引擎,它允许开发者使用自然语言来定义合同条款,并将这些合同转换为可以在区块链上执行的智能合约。CiceroMark是基于Markdown格式的一种扩展,它允许在文档中嵌入智能合约逻辑。 通过Accord Project Cicero,可以创建出易于理解、可执行的智能合约。这些合同可以与Hyperledger Fabric集成,利用其提供的安全、透明的区块链网络环境,从而使得合同条款的执行更加可靠。 ### 智能合约的安装与部署 描述中提到了“安装”和“启动”的步骤,这意味着为了使用HLF v2.2和Accord Project Cicero,需要先进行一系列的配置和安装工作。这通常包括设置环境变量(例如HLF_INSTALL_DIR)、安装区块链网络(Test-Net)以及安装其他必需的软件工具(如jq)。 jq是一个轻量级且灵活的命令行JSON处理器,常用于处理JSON数据。在区块链项目中,jq可以帮助开发者处理链码或智能合约的数据,特别是在与网络节点交互时。 ### JavaScript 标签 标签“JavaScript”表明本项目或相关文档中会涉及到JavaScript编程语言。Hyperledger Fabric v2支持多种智能合约语言,其中JavaScript是一个广泛使用的选项。JavaScript在编写链码时提供了灵活的语法和强大的库支持,是进行区块链开发的一个流行选择。 ### 文件结构 文件名称列表“hlf-cicero-contract-master”暗示这是一个包含所有相关文件和资源的项目源代码目录。这个名称通常表明开发者可以从该目录开始探索、安装和配置项目的所有组件。 ### 综合知识点 1. 智能合约与区块链技术可以自动化执行多方面可信交易,降低交易成本并提高效率。 2. Hyperledger Fabric v2为企业提供一个安全、模块化、可扩展的区块链平台。 3. Accord Project Cicero结合Markdown格式的CiceroMark,将自然语言定义的合同条款转换为可执行的智能合约。 4. 智能合约的安装和部署涉及到一系列配置步骤,包括设置环境变量、安装必要的软件工具等。 5. JavaScript是编写智能合约的流行语言之一,为区块链开发提供灵活性和强大的库支持。 6. 项目文件结构表明从一个主目录可以探索和配置所有项目相关文件和资源。 以上是根据文件标题、描述、标签以及文件名称列表所提取的相关知识点。这些知识点对于理解Hyperledger Fabric v2和Accord Project Cicero在智能合约中的应用尤为重要。
recommend-type

深度神经网络优化技巧全解析

# 深度神经网络优化技巧全解析 ## 1 超越 Sigmoid 函数 在神经网络中,Sigmoid 函数曾被广泛使用,但它存在一些问题,如梯度消失。研究人员一直在寻找更好的激活函数,且不同的激活函数在不同场景下表现各异。 ### 1.1 ReLU 函数登场 如今,修正线性单元(ReLU)成为了 Sigmoid 的常用替代函数。与 Sigmoid 相比,ReLU 非常简单,以下是其 Python 实现: ```python def relu(z): if z <= 0: return 0 else: return z ``` ReLU 由两段直
recommend-type

什么是噪声功率密度

<think> 嗯,用户这次问的是噪声功率密度的定义,结合之前的系统指令和站内引用,需要给出清晰准确的中文解释。用户可能是电子工程或通信专业的学生,正在学习噪声相关的理论基础,也可能是工程师需要实际应用概念。从引用来[^1]看,用户对相位噪声的定义有基础认知,但需要系统梳理核心概念。 噪声功率密度最本质的定义应该是单位带宽内的噪声功率。引用[^2]提到电阻热噪声的例子很典型,50Ω电阻在300K环境下功率谱密度是定值(0.9nV/√Hz)²,这说明: 1. 它描述的是噪声功率随频率分布的密度 2. 与带宽强相关(带宽加倍则总功率加倍) 3. 单位通常用W/Hz或V²/Hz 维纳-辛钦定理(
recommend-type

Libshare: Salesforce的高效可重用模块集合

Salesforce是一个云基础的CRM平台,它允许用户构建定制应用程序来满足特定的业务需求。Apex是Salesforce平台上的一个强类型编程语言,用于开发复杂的业务逻辑,通过触发器、类和组件等实现。这些组件使得开发者可以更高效地构建应用程序和扩展Salesforce的功能。 在提到的"libshare:经过测试的Salesforce可重用模块"文件中,首先介绍了一个名为Libshare的工具包。这个工具包包含了一系列已经过测试的可重用模块,旨在简化和加速Salesforce应用程序的开发。 Libshare的各个组成部分的知识点如下: 1. 设置模块:在Salesforce应用程序中,应用程序设置的管理是必不可少的一部分。设置模块提供了一种简便的方式存储应用程序的设置,并提供了一个易用的API来与之交互。这样,开发者可以轻松地为不同的环境配置相同的设置,并且可以快速地访问和修改这些配置。 2. Fluent断言模块:断言是单元测试中的关键组成部分,它们用于验证代码在特定条件下是否表现预期。Fluent断言模块受到Java世界中Assertj的启发,提供了一种更流畅的方式来编写断言。通过这种断言方式,可以编写更易于阅读和维护的测试代码,提高开发效率和测试质量。 3. 秒表模块:在性能调优和效率测试中,记录方法的执行时间是常见的需求。秒表模块为开发者提供了一种方便的方式来记录总时间,并跟踪每种方法所花费的时间。这使得开发者能够识别瓶颈并优化代码性能。 4. JsonMapper模块:随着Web API的广泛应用,JSON数据格式在应用程序开发中扮演了重要角色。JsonMapper模块为开发者提供了一个更高级别的抽象,用于读取和创建JSON内容。这能够大幅简化与JSON数据交互的代码,并提高开发效率。 5. utils模块:在软件开发过程中,经常会遇到需要重复实现一些功能的情况,这些功能可能是通用的,例如日期处理、字符串操作等。utils模块提供了一系列已经编写好的实用工具函数,可以用于节省时间,避免重复劳动,提高开发效率。 6. 记录器模块:记录器通常用于记录应用程序的运行日志,以便于问题诊断和性能监控。系统提供的System.debug功能虽然强大,但在大型应用中,统一的记录器包装器可以使得日志管理更加高效。记录器模块支持记录器名称,并且可以对日志进行适当的封装。 7. App Logger模块:App Logger模块扩展了记录器模块的功能,它允许开发者将日志语句保存到一个精心设计的App Log对象中。此外,App Logger模块支持存储长达56k字符的日志内容,这对于复杂应用的监控和调试非常有用。 8. 应用程序任务模块:在处理异步作业时,例如批量数据处理或定时任务,需要有一个框架来管理和跟踪这些任务。应用程序任务模块提供了一个框架,用于处理可排队的作业,并能够跟踪这些任务的执行情况。 通过Libshare提供的这些模块,Salesforce的开发者能够减少开发工作量,加快开发速度,并提高代码质量。这些模块能够帮助开发者避免重复的“造轮子”工作,专注于核心业务逻辑的实现。同时,由于Libshare作为托管程序包发布,开发者无需担心代码的维护和管理,只需将其添加到自己的Salesforce组织中即可使用。 Libshare的发布也强调了可重用性的重要性,这是软件工程领域中长期提倡的一个原则。通过使用可重用的组件,开发者能够遵循DRY(Don't Repeat Yourself)原则,从而减少代码的冗余,提高生产效率,同时降低因重复编写相同代码而导致错误的风险。 总之,Libshare是一个有价值的资源,对于那些希望在Salesforce平台上快速构建高效、可靠应用程序的开发者来说,这些预置的、经过测试的模块无疑是一个强大的助手。
recommend-type

机器学习技术要点与应用解析

# 机器学习技术要点与应用解析 ## 1. 机器学习基础概念 ### 1.1 数据类型与表示 在编程中,数据类型起着关键作用。Python 具有动态类型特性,允许变量在运行时改变类型。常见的数据类型转换函数包括 `bool()`、`int()`、`str()` 等。例如,`bool()` 函数可将值转换为布尔类型,`int()` 用于将值转换为整数类型。数据类型还包括列表(`lists`)、字典(`dictionaries`)、元组(`tuples`)等集合类型,其中列表使用方括号 `[]` 表示,字典使用花括号 `{}` 表示,元组使用圆括号 `()` 表示。 ### 1.2 变量与命名
recommend-type

点击歌曲没反应

<think> 我们之前已经讨论了如何将音频文件显示在QListView中,并希望实现点击播放。现在遇到的问题是点击列表项没有反应。 原因分析: 1. 我们没有将点击信号连接到播放槽函数。 2. 播放列表(QMediaPlaylist)可能没有正确添加媒体。 3. 媒体路径可能不正确。 解决方案: 按照之前的思路,我们需要做以下几步: 步骤1:确保已经创建了QMediaPlayer和QMediaPlaylist对象,并且播放器设置了播放列表。 步骤2:将QListView的点击信号(clicked)连接到自定义的槽函数,在该槽函数中设置播放列表的当前索引并播放。 步骤3:
recommend-type

SM-CNN-Torch: Torch实现短文本对排名的CNN模型

标题中提到的“SM-CNN-Torch”是一个深度学习框架Torch的实现版本,它基于Severyn和Moschitti在2015年SIGIR会议上发表的一篇论文所描述的卷积神经网络(CNN)模型。这篇论文的内容主要关注的是如何利用CNN对短文本对进行有效的排名,这一点对于问题回答(question-answering, QA)系统来说至关重要。实施该CNN模型的目标是为了更好地处理问答系统中的文本对比较问题,例如,在搜索引擎中确定哪些文档与用户的查询更加相关。 在描述中提到了如何使用该仓库中的代码。首先,用户需要安装Torch库,这是实现和运行SM-CNN-Torch模型的前提条件。接着,用户需要使用提供的脚本(fetch_and_preprocess.sh)下载并预处理GloVe(Global Vectors for Word Representation)字嵌入数据。这一数据集是预先训练好的词向量,能够将单词转换为连续的向量表示,这在深度学习模型中是处理文本的基本步骤。 在模型准备工作中,还需要注意的是Python版本,因为模型运行依赖于Python环境,建议的版本为2.7或更高版本。此外,描述中还提到了并行处理的线程数设置,这表明模型在运行过程中可能会涉及到并行计算,以加速计算过程。通过设置环境变量OMP_NUM_THREADS,可以指定并行计算时的线程数。 文件名称列表中的“SM-CNN-Torch-master”表示这是该仓库的主目录,包含了所有实现Severyn和Moschitti CNN模型的相关文件。 该存储库还包含了一些附加信息,例如,原始Torch实现已经被PyTorch版本所取代。PyTorch是Torch的一个分支,它提供了更多的功能和更易于使用的接口,对研究人员和开发者来说更加友好。此外,该仓库目前仅用于存档目的,这意味着原始的Torch代码不再被积极维护,而是作为一种历史记录保留下来。 标签“deep-learning”表明该项目是一个深度学习项目,所使用的模型是深度神经网络,特别是卷积神经网络。标签“question-answering”则直接指向了问题回答系统,这是深度学习的一个重要应用领域。标签“convolutional-neural-networks”指明了所使用的网络类型是卷积神经网络,它在图像处理和自然语言处理中都有广泛应用。而“Lua”标签则是因为Torch是用Lua语言编写的,尽管它通常与Python一起使用,但也有一个使用Lua的版本。 总的来说,SM-CNN-Torch是一个专门针对短文本对排名的深度学习模型的实现,它允许研究人员和开发者利用已经发表的研究成果来搭建和测试自己的模型,同时为了解其背后原理和实现细节提供了具体的代码和数据处理流程。