出口业务订单管理系统—— 搞定外贸接单 出口业务订单管理系统—— 搞定外贸接单前言这篇带你从零看懂一个紧扣外贸实际场景的出口订单管理系统面向对象 JSON持久化 状态机一、基本版 6 大功能一览序号功能出口业务关联技术要点1出口客户管理国外买家档案增、查、列表2出口产品管理HS 编码报关必备增、查、列表含美元单价3出口订单管理外贸合同核心含 FOB/CIF 贸易术语 T/T L/C 付款方式4订单状态追踪跟单流程5 阶段可视化进度条▓●░5出口收汇管理收款对账登记收款自动计算待收/已收6JSON 持久化数据留存to_dict / from_dict 序列化模式二、核心架构 —— 三层分离┌─────────────────────────────────────┐ │ main() 控制器 │ │ 登录 → 菜单 → 分发 → 循环 │ └──────┬──────────┬──────────┬─────────┘ │ │ │ ┌────▼───┐ ┌───▼────┐ ┌──▼──────┐ │Customer│ │Product │ │Order │ ← 数据模型层 (Model) │Manager │ │Manager │ │Manager │ └────┬───┘ └───┬────┘ └──┬──────┘ │ │ │ ┌────▼─────────▼─────────▼──────┐ │ JSON 文件持久化 │ ← 存储层 │ customers.json products.json│ │ orders.json payments.json│ └───────────────────────────────┘设计思想数据模型类只管是什么Manager管理类管怎么操作main() 管流程控制。修改菜单不影响数据改数据不影响菜单——这就是面向对象的关注点分离。三、四个数据模型3.1 Customer —— 出口客户classCustomer:def__init__(self,cid,name,country,contact,email):self.customer_idcid# 编号self.namename# 客户名称self.countrycountry# 所在国家出口必需self.contactcontact# 联系人self.emailemail# 邮箱出口特色country字段不是摆设——出口到不同国家涉及不同的关税政策、物流成本。3.2 Product —— 出口产品含 HS 编码classProduct:def__init__(self,pid,name,hs_code,unit,unit_price_usd):self.product_idpid self.namename self.hs_codehs_code# 海关商品编码 ⭐self.unitunit# 计量单位self.unit_price_usdunit_price_usd# 美元单价出口特色hs_codeHarmonized System Code是出口报关的必备字段每类产品有唯一的 8-10 位编码。这是本系统和普通进销存系统的本质区别。3.3 Order —— 出口订单核心模型classOrder:def__init__(self,oid,customer_name,product_name,quantity,unit_price,amount_usd,trade_term,payment_term,status待确认):self.trade_termtrade_term# FOB / CIF / CFR / EXWself.payment_termpayment_term# T/T / L/C / D/Pself.statusstatus# 状态5阶段self.history[]# 状态变更记录出口特色trade_term贸易术语决定谁付运费保险费——FOB卖方送到船上、CIF卖方包运费保险费送到目的港payment_termT/T 是电汇最常用L/C 是信用证金额大时用history记录每次状态变更的人和时间可以追溯谁在什么时候把订单从待发货改成了已发货3.4 Payment —— 出口收汇classPayment:def__init__(self,pid,order_id,amount_usd,ptype预付款):self.payment_idpid self.order_idorder_id# 关联哪个订单self.amount_usdamount_usd# 收款金额美元self.ptypeptype# 预付款 / 尾款 / 全额出口特色出口贸易通常分两次收款——签约时收 30% 预付款发货后收 70% 尾款。我们的系统用ptype区分这两种。四、to_dict / from_dict —— 数据存取的标准模式每个模型都实现了这两个方法这是本系统的灵魂设计# 保存对象 → 字典 → JSON文件defto_dict(self):returnself.__dict__.copy()# 读取JSON文件 → 字典 → 对象staticmethoddeffrom_dict(d):returnCustomer(d[customer_id],d[name],d.get(country,),d.get(contact,))为什么这么做对比好处不用 to_dict()每次存数据要手动拼字段容易漏不用 from_dict()JSON 读出来是字典操作起来不直观用这套模式存和取都是一行代码将来换数据库只改这两个方法五、5 阶段状态机 —— 订单只能按流程走STATUS_LIST[待确认,生产中,待发货,已发货,已完成]defchange_status(self,new_status,operator管理员):ifnew_statusnotinSTATUS_LIST:returnFalse# 不合法的状态拒绝self._log(new_status,operator)# 记录谁在什么时候改的self.statusnew_statusreturnTrue状态进度条展示状态进度[▓▓░░░] 流程节点待确认 → 生产中 → 待发货 → 已发货 → 已完成 当前状态生产中▓ 已完成阶段已过待确认正在生产中● 当前阶段░ 未完成阶段一行代码搞定进度条bar.join(▓ifiidxelse(●ifiidxelse░)foriinrange(5))六、订单创建 —— 系统核心交互流程defcreate(self):# 1. 选客户先展示所有客户self.cust_mgr.show()cidinput(客户编号).strip()# 2. 选产品先展示所有产品含 HS 编码self.prod_mgr.show()pidinput(产品编号).strip()# 3. 输入数量qtyint(input(f数量{prod.unit}))# 4. 贸易术语 付款方式出口特有字段tradeinput(贸易术语(FOB/CIF/CFR/EXW)).upper()orFOBpayinput(付款方式(T/T/L/C/D/P)).upper()orT/T# 5. 生成订单号 保存oidgen_id(ORD,self.data)self.data[oid]Order(oid,cust.name,prod.name,qty,uprice,amount,trade,pay)self.save()交互设计巧思先展示后选择不要求用户记住编号降低操作门槛默认值兜底or FOB直接回车就选默认值防御性验证get() 代替 []客户不存在返回 None 而不是崩溃七、JSON 持久化 —— 关程序数据不丢defsave_json(filename,data):ensure_dir()withopen(os.path.join(DATA_DIR,filename),w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)ensure_asciiFalse中文客户名不会变成乱码indent2JSON 文件格式化人工也能直接看懂ensure_dir()首次运行自动创建 data 文件夹每次操作完立即调save()确保关了程序再打开数据还在。八、运行演示# 直接运行无需 pip install 任何东西python 出口订单管理系统.py账号admin 密码123456 │ 1.客户管理 2.产品管理 3.创建订单 4.查询订单 │ │ 5.变更状态 6.订单列表 7.登记收款 8.收款记录 │ │ 0.退出 │ 十、总结这个系统虽然只有 280 行但麻雀虽小五脏俱全面向对象的三层架构JSON 序列化的标准模式状态机的流程控制防御性输入验证紧扣出口业务的字段设计