generate_november_customer_excel.py 4.71 KB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成2025年12月客户开单数据Excel文件
包含字段:客户档案号、姓名、注册时间、来源、开单业绩、时间、归属门店
"""

import pymysql
import pandas as pd
from datetime import datetime
import os

# 数据库配置(从appsettings.json读取)
DB_CONFIG = {
    'host': 'rm-2vccze142rc9a8f58bo.mysql.cn-chengdu.rds.aliyuncs.com',
    'port': 3306,
    'user': 'lvqiansql',
    'password': 'LvQ1@n!20251211',
    'database': 'lqerp_dev',
    'charset': 'utf8mb4'
}

def query_data():
    """查询2025年12月的客户开单数据"""
    connection = None
    try:
        connection = pymysql.connect(**DB_CONFIG)
        
        sql = """
        SELECT 
            COALESCE(kh.dah, '') AS 客户档案号,
            COALESCE(kh.khmc, '') AS 姓名,
            kh.zcsj AS 注册时间,
            COALESCE(kd.khly, '') AS 来源,
            CAST(kd.sfyj AS DECIMAL(18,2)) AS 开单业绩,
            kd.kdrq AS 时间,
            COALESCE(md.dm, '') AS 归属门店
        FROM lq_kd_kdjlb kd
        INNER JOIN lq_khxx kh ON kd.kdhy = kh.F_Id
        LEFT JOIN lq_mdxx md ON kh.gsmd = md.F_Id
        WHERE kd.F_IsEffective = 1
            AND kh.F_IsEffective = 1
            AND YEAR(kd.kdrq) = 2025
            AND MONTH(kd.kdrq) = 12
        ORDER BY kd.kdrq DESC
        """
        
        df = pd.read_sql(sql, connection)
        
        # 格式化时间字段
        if '注册时间' in df.columns:
            df['注册时间'] = pd.to_datetime(df['注册时间']).dt.strftime('%Y-%m-%d %H:%M:%S')
            df['注册时间'] = df['注册时间'].replace('NaT', '')
        
        if '时间' in df.columns:
            df['时间'] = pd.to_datetime(df['时间']).dt.strftime('%Y-%m-%d %H:%M:%S')
        
        # 确保开单业绩为数值类型
        df['开单业绩'] = pd.to_numeric(df['开单业绩'], errors='coerce').fillna(0)
        
        return df
        
    except Exception as e:
        print(f"查询数据时发生错误: {e}")
        raise
    finally:
        if connection:
            connection.close()

def generate_excel(df, output_file='2025年12月客户开单数据.xlsx'):
    """生成Excel文件"""
    try:
        # 创建Excel写入器
        with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
            df.to_excel(writer, sheet_name='客户开单数据', index=False)
            
            # 获取工作表对象进行格式设置
            worksheet = writer.sheets['客户开单数据']
            
            # 设置列宽
            column_widths = {
                'A': 20,  # 客户档案号
                'B': 15,  # 姓名
                'C': 20,  # 注册时间
                'D': 15,  # 来源
                'E': 15,  # 开单业绩
                'F': 20,  # 时间
                'G': 20   # 归属门店
            }
            
            for col, width in column_widths.items():
                worksheet.column_dimensions[col].width = width
            
            # 设置表头样式
            from openpyxl.styles import Font, Alignment, PatternFill
            
            header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
            header_font = Font(bold=True, color='FFFFFF', size=11)
            
            for cell in worksheet[1]:
                cell.fill = header_fill
                cell.font = header_font
                cell.alignment = Alignment(horizontal='center', vertical='center')
            
            # 设置数据对齐方式
            for row in worksheet.iter_rows(min_row=2, max_row=worksheet.max_row):
                for cell in row:
                    if cell.column_letter == 'E':  # 开单业绩列右对齐
                        cell.alignment = Alignment(horizontal='right', vertical='center')
                    else:
                        cell.alignment = Alignment(horizontal='left', vertical='center')
        
        print(f"Excel文件已生成: {output_file}")
        print(f"共 {len(df)} 条记录")
        return output_file
        
    except Exception as e:
        print(f"生成Excel文件时发生错误: {e}")
        raise

def main():
    """主函数"""
    print("开始查询2025年12月客户开单数据...")
    df = query_data()
    
    if df.empty:
        print("未查询到数据")
        return
    
    print(f"查询到 {len(df)} 条记录")
    print("\n前5条数据预览:")
    print(df.head())
    
    # 生成Excel文件
    output_file = f"2025年12月客户开单数据_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
    generate_excel(df, output_file)
    
    print(f"\n文件保存路径: {os.path.abspath(output_file)}")

if __name__ == '__main__':
    main()