models.py 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555
  1. """数据模型"""
  2. from datetime import datetime
  3. from sqlalchemy import Column, String, DateTime, Integer, Boolean, Text, Numeric, PrimaryKeyConstraint
  4. from sqlalchemy.orm import relationship
  5. from app.core.database import Base
  6. import enum
  7. class UserRole(str, enum.Enum):
  8. """用户角色"""
  9. ADMIN = "admin" # 运营人员
  10. SUPPLIER = "supplier" # 供应商
  11. CLIENT = "client" # 客户
  12. DELIVER = "deliver" # 配送人员
  13. # =========================================
  14. # 系统模块
  15. # =========================================
  16. class SysUser(Base):
  17. """用户表"""
  18. __tablename__ = "sys_user"
  19. id = Column(String(32), primary_key=True, comment="主键ID")
  20. username = Column(String(50), unique=True, nullable=False, comment="用户名")
  21. password_hash = Column(String(255), nullable=False, comment="密码哈希")
  22. real_name = Column(String(100), nullable=True, comment="真实姓名")
  23. phone = Column(String(20), nullable=True, comment="联系电话")
  24. avatar_url = Column(String(512), nullable=True, comment="头像URL")
  25. wx_mini_openid = Column(String(64), nullable=True, unique=True, comment="微信小程序openid")
  26. role = Column(String(20), nullable=False, comment="角色")
  27. region_id = Column(String(32), nullable=True, comment="所属区域ID")
  28. is_active = Column(Boolean, default=True, comment="是否激活")
  29. is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是")
  30. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  31. create_by = Column(String(32), nullable=True, comment="创建人ID")
  32. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  33. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  34. update_by = Column(String(32), nullable=True, comment="修改人ID")
  35. class SysUserHis(Base):
  36. """用户历史表"""
  37. __tablename__ = "sys_user_his"
  38. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  39. username = Column(String(50), nullable=False, comment="用户名")
  40. password_hash = Column(String(255), nullable=False, comment="密码哈希")
  41. real_name = Column(String(100), nullable=True, comment="真实姓名")
  42. phone = Column(String(20), nullable=True, comment="联系电话")
  43. avatar_url = Column(String(512), nullable=True, comment="头像URL")
  44. wx_mini_openid = Column(String(64), nullable=True, comment="微信小程序openid")
  45. role = Column(String(20), nullable=False, comment="角色")
  46. region_id = Column(String(32), nullable=True, comment="所属区域ID")
  47. is_active = Column(Boolean, default=True, comment="是否激活")
  48. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  49. create_by = Column(String(32), nullable=True, comment="创建人ID")
  50. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  51. update_at = Column(DateTime, nullable=True, comment="修改时间")
  52. update_by = Column(String(32), nullable=True, comment="修改人ID")
  53. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  54. class SysRegion(Base):
  55. """区域表"""
  56. __tablename__ = "sys_region"
  57. id = Column(String(32), primary_key=True, comment="主键ID")
  58. name = Column(String(100), nullable=False, comment="区域名称")
  59. code = Column(String(50), unique=True, nullable=False, comment="区域编码")
  60. description = Column(String(500), nullable=True, comment="区域描述")
  61. sort_order = Column(Integer, default=0, comment="排序")
  62. expected_delivery_minutes = Column(Integer, nullable=True, comment="预计配送时长(分钟)")
  63. delivery_warn_advance_minutes = Column(
  64. Integer, nullable=True, comment="计划到货前未送达时预警提前时间(分钟)"
  65. )
  66. is_active = Column(Boolean, default=True, comment="是否启用")
  67. is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是")
  68. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  69. create_by = Column(String(32), nullable=True, comment="创建人ID")
  70. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  71. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  72. update_by = Column(String(32), nullable=True, comment="修改人ID")
  73. class SysRegionHis(Base):
  74. """区域历史表"""
  75. __tablename__ = "sys_region_his"
  76. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  77. name = Column(String(100), nullable=False, comment="区域名称")
  78. code = Column(String(50), nullable=False, comment="区域编码")
  79. description = Column(String(500), nullable=True, comment="区域描述")
  80. sort_order = Column(Integer, default=0, comment="排序")
  81. expected_delivery_minutes = Column(Integer, nullable=True, comment="预计配送时长(分钟)")
  82. delivery_warn_advance_minutes = Column(
  83. Integer, nullable=True, comment="计划到货前未送达时预警提前时间(分钟)"
  84. )
  85. is_active = Column(Boolean, default=True, comment="是否启用")
  86. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  87. create_by = Column(String(32), nullable=True, comment="创建人ID")
  88. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  89. update_at = Column(DateTime, nullable=True, comment="修改时间")
  90. update_by = Column(String(32), nullable=True, comment="修改人ID")
  91. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  92. class BasChinaRegion(Base):
  93. """中国行政区划(GB/T 2260),见 docs/sql/bas_china_region.sql"""
  94. __tablename__ = "bas_china_region"
  95. id = Column(String(32), primary_key=True, comment="主键,与 region_code 一致")
  96. parent_id = Column(String(32), nullable=True, comment="父级 region_code,省级为 NULL")
  97. region_code = Column(String(6), nullable=False, comment="六位行政区划码")
  98. region_name = Column(String(100), nullable=False, comment="区划名称")
  99. level = Column(Integer, nullable=False, comment="层级:1省 2市 3区县")
  100. sort_order = Column(Integer, nullable=False, default=0, comment="排序")
  101. is_del = Column(Integer, default=0, nullable=False, comment="是否删除")
  102. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  103. create_by = Column(String(32), nullable=True, comment="创建人ID")
  104. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  105. update_at = Column(DateTime, nullable=True, onupdate=datetime.now, comment="修改时间")
  106. update_by = Column(String(32), nullable=True, comment="修改人ID")
  107. class SysApiRequestLog(Base):
  108. """API 请求日志(统一记录请求/响应出入参)"""
  109. __tablename__ = "sys_api_request_log"
  110. id = Column(String(32), primary_key=True, comment="主键ID")
  111. http_method = Column(String(10), nullable=False, comment="HTTP 方法")
  112. path = Column(String(500), nullable=False, comment="请求路径")
  113. query_string = Column(String(2000), nullable=True, comment="Query 字符串")
  114. request_body = Column(Text, nullable=True, comment="请求体(截断)")
  115. response_body = Column(Text, nullable=True, comment="响应体(截断)")
  116. status_code = Column(Integer, nullable=False, comment="HTTP 状态码")
  117. duration_ms = Column(Integer, nullable=False, comment="耗时(ms)")
  118. user_id = Column(String(32), nullable=True, comment="用户ID(JWT 解析)")
  119. username = Column(String(100), nullable=True, comment="用户名")
  120. role = Column(String(20), nullable=True, comment="角色")
  121. ip_address = Column(String(50), nullable=True, comment="IP地址")
  122. user_agent = Column(String(500), nullable=True, comment="User-Agent")
  123. is_del = Column(Integer, default=0, comment="是否删除")
  124. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  125. create_by = Column(String(32), nullable=True, comment="创建人ID")
  126. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  127. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  128. update_by = Column(String(32), nullable=True, comment="修改人ID")
  129. class SysMenu(Base):
  130. """菜单表"""
  131. __tablename__ = "sys_menu"
  132. id = Column(String(32), primary_key=True, comment="主键ID")
  133. name = Column(String(100), nullable=False, comment="菜单名称")
  134. code = Column(String(100), nullable=False, comment="菜单编码(唯一标识)")
  135. path = Column(String(500), nullable=False, comment="路由路径")
  136. component = Column(String(500), nullable=True, comment="组件路径")
  137. icon = Column(String(100), nullable=True, comment="菜单图标")
  138. parent_id = Column(String(32), nullable=True, comment="父菜单ID")
  139. sort_order = Column(Integer, default=0, comment="排序(数字越小越靠前)")
  140. redirect = Column(String(500), nullable=True, comment="重定向路径")
  141. menu_type = Column(String(20), default="menu", comment="菜单类型: menu-菜单, button-按钮")
  142. is_visible = Column(Integer, default=1, comment="是否显示: 0-隐藏, 1-显示")
  143. is_cache = Column(Integer, default=0, comment="是否缓存: 0-不缓存, 1-缓存")
  144. is_active = Column(Integer, default=1, comment="是否启用: 0-禁用, 1-启用")
  145. is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是")
  146. remark = Column(String(500), nullable=True, comment="备注")
  147. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  148. create_by = Column(String(32), nullable=True, comment="创建人ID")
  149. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  150. update_at = Column(DateTime, nullable=True, onupdate=datetime.now, comment="修改时间")
  151. update_by = Column(String(32), nullable=True, comment="修改人ID")
  152. class SysUserRegionScope(Base):
  153. """用户区域权限表"""
  154. __tablename__ = "sys_user_region_scope"
  155. id = Column(String(32), primary_key=True, comment="主键ID")
  156. user_id = Column(String(32), nullable=False, comment="用户ID")
  157. region_id = Column(String(32), nullable=False, comment="区域ID")
  158. is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是")
  159. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  160. create_by = Column(String(32), nullable=True, comment="创建人ID")
  161. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  162. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  163. update_by = Column(String(32), nullable=True, comment="修改人ID")
  164. class SysUserRegionScopeHis(Base):
  165. """用户区域权限历史表"""
  166. __tablename__ = "sys_user_region_scope_his"
  167. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  168. user_id = Column(String(32), nullable=False, comment="用户ID")
  169. region_id = Column(String(32), nullable=False, comment="区域ID")
  170. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  171. create_by = Column(String(32), nullable=True, comment="创建人ID")
  172. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  173. update_at = Column(DateTime, nullable=True, comment="修改时间")
  174. update_by = Column(String(32), nullable=True, comment="修改人ID")
  175. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  176. class SysUserMenuScope(Base):
  177. """用户菜单权限表(按菜单 code 授权)"""
  178. __tablename__ = "sys_user_menu_scope"
  179. id = Column(String(32), primary_key=True, comment="主键ID")
  180. user_id = Column(String(32), nullable=False, comment="用户ID")
  181. menu_code = Column(String(100), nullable=False, comment="菜单编码")
  182. is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是")
  183. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  184. create_by = Column(String(32), nullable=True, comment="创建人ID")
  185. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  186. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  187. update_by = Column(String(32), nullable=True, comment="修改人ID")
  188. class SysUserMenuScopeHis(Base):
  189. """用户菜单权限历史表"""
  190. __tablename__ = "sys_user_menu_scope_his"
  191. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  192. user_id = Column(String(32), nullable=False, comment="用户ID")
  193. menu_code = Column(String(100), nullable=False, comment="菜单编码")
  194. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  195. create_by = Column(String(32), nullable=True, comment="创建人ID")
  196. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  197. update_at = Column(DateTime, nullable=True, comment="修改时间")
  198. update_by = Column(String(32), nullable=True, comment="修改人ID")
  199. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  200. class SysPasswordHistory(Base):
  201. """密码修改历史表"""
  202. __tablename__ = "sys_password_history"
  203. id = Column(String(32), primary_key=True, comment="主键ID")
  204. user_id = Column(String(32), nullable=False, comment="用户ID")
  205. operation_type = Column(String(20), nullable=False, comment="操作类型")
  206. operator_id = Column(String(32), nullable=True, comment="操作人ID")
  207. operator_name = Column(String(100), nullable=True, comment="操作人姓名")
  208. ip_address = Column(String(50), nullable=True, comment="IP地址")
  209. is_del = Column(Integer, default=0, comment="是否删除")
  210. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  211. create_by = Column(String(32), nullable=True, comment="创建人ID")
  212. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  213. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  214. update_by = Column(String(32), nullable=True, comment="修改人ID")
  215. # =========================================
  216. # 基础模块
  217. # =========================================
  218. class BasProductCategory(Base):
  219. """商品分类表"""
  220. __tablename__ = "bas_product_category"
  221. id = Column(String(32), primary_key=True, comment="主键ID")
  222. name = Column(String(100), nullable=False, comment="分类名称")
  223. image_url = Column(String(500), nullable=True, comment="图片URL")
  224. parent_id = Column(String(32), nullable=True, comment="父分类ID")
  225. sort_order = Column(Integer, default=0, comment="排序")
  226. price_coefficient = Column(
  227. Numeric(6, 2), default=0, nullable=False, comment="价格系数(百分比点数,5表示5%)"
  228. )
  229. is_active = Column(Boolean, default=True, comment="是否启用")
  230. is_del = Column(Integer, default=0, comment="是否删除")
  231. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  232. create_by = Column(String(32), nullable=True, comment="创建人ID")
  233. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  234. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  235. update_by = Column(String(32), nullable=True, comment="修改人ID")
  236. class BasProductCategoryHis(Base):
  237. """商品分类历史表"""
  238. __tablename__ = "bas_product_category_his"
  239. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  240. name = Column(String(100), nullable=False, comment="分类名称")
  241. image_url = Column(String(500), nullable=True, comment="图片URL")
  242. parent_id = Column(String(32), nullable=True, comment="父分类ID")
  243. sort_order = Column(Integer, default=0, comment="排序")
  244. price_coefficient = Column(
  245. Numeric(6, 2), default=0, nullable=False, comment="价格系数(百分比点数,5表示5%)"
  246. )
  247. is_active = Column(Boolean, default=True, comment="是否启用")
  248. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  249. create_by = Column(String(32), nullable=True, comment="创建人ID")
  250. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  251. update_at = Column(DateTime, nullable=True, comment="修改时间")
  252. update_by = Column(String(32), nullable=True, comment="修改人ID")
  253. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  254. class BasProductUnit(Base):
  255. """商品单位码表"""
  256. __tablename__ = "bas_product_unit"
  257. id = Column(String(32), primary_key=True, comment="主键ID")
  258. name = Column(String(50), nullable=False, comment="单位名称")
  259. code = Column(String(20), unique=True, nullable=False, comment="单位编码")
  260. is_active = Column(Boolean, default=True, comment="是否启用")
  261. sort_order = Column(Integer, default=0, comment="排序字段,数值越小越靠前")
  262. is_del = Column(Integer, default=0, comment="是否删除")
  263. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  264. create_by = Column(String(32), nullable=True, comment="创建人ID")
  265. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  266. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  267. update_by = Column(String(32), nullable=True, comment="修改人ID")
  268. class BasProductUnitHis(Base):
  269. """商品单位历史表"""
  270. __tablename__ = "bas_product_unit_his"
  271. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  272. name = Column(String(50), nullable=False, comment="单位名称")
  273. code = Column(String(20), nullable=False, comment="单位编码")
  274. is_active = Column(Boolean, default=True, comment="是否启用")
  275. sort_order = Column(Integer, default=0, comment="排序字段,数值越小越靠前")
  276. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  277. create_by = Column(String(32), nullable=True, comment="创建人ID")
  278. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  279. update_at = Column(DateTime, nullable=True, comment="修改时间")
  280. update_by = Column(String(32), nullable=True, comment="修改人ID")
  281. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  282. class BasProduct(Base):
  283. """商品表"""
  284. __tablename__ = "bas_product"
  285. id = Column(String(32), primary_key=True, comment="主键ID")
  286. name = Column(String(200), nullable=False, comment="商品名称")
  287. sku_code = Column(String(50), nullable=True, unique=True, comment="商品SKU编码")
  288. category_id = Column(String(32), nullable=True, comment="分类ID")
  289. unit_id = Column(String(32), nullable=True, comment="单位ID")
  290. measure_value = Column(Numeric(12, 3), nullable=True, comment="计量数量(与单位组合表示售卖规格,如500克、1个)")
  291. spec = Column(String(100), nullable=True, comment="商品规格(自由文本,非必填)")
  292. description = Column(String(1000), nullable=True, comment="商品描述")
  293. detail_content = Column(Text, nullable=True, comment="商品详情富文本内容")
  294. image_url = Column(String(500), nullable=True, comment="图片URL")
  295. price_coefficient = Column(
  296. Numeric(6, 2), default=0, nullable=False, comment="调价系数(百分比点数,5表示5%)"
  297. )
  298. suggested_supplier_price = Column(Numeric(10, 2), nullable=True, comment="供应商建议报价(元)")
  299. is_active = Column(Boolean, default=True, comment="是否启用")
  300. is_del = Column(Integer, default=0, comment="是否删除")
  301. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  302. create_by = Column(String(32), nullable=True, comment="创建人ID")
  303. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  304. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  305. update_by = Column(String(32), nullable=True, comment="修改人ID")
  306. category = relationship(
  307. "BasProductCategory",
  308. foreign_keys=[category_id],
  309. primaryjoin="BasProduct.category_id==BasProductCategory.id",
  310. lazy="select",
  311. )
  312. unit = relationship(
  313. "BasProductUnit",
  314. foreign_keys=[unit_id],
  315. primaryjoin="BasProduct.unit_id==BasProductUnit.id",
  316. lazy="select",
  317. )
  318. class BasProductHis(Base):
  319. """商品历史表"""
  320. __tablename__ = "bas_product_his"
  321. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  322. name = Column(String(200), nullable=False, comment="商品名称")
  323. sku_code = Column(String(50), nullable=True, comment="商品SKU编码")
  324. category_id = Column(String(32), nullable=True, comment="分类ID")
  325. unit_id = Column(String(32), nullable=True, comment="单位ID")
  326. measure_value = Column(Numeric(12, 3), nullable=True, comment="计量数量(与单位组合表示售卖规格,如500克、1个)")
  327. spec = Column(String(100), nullable=True, comment="商品规格(自由文本,非必填)")
  328. description = Column(String(1000), nullable=True, comment="商品描述")
  329. detail_content = Column(Text, nullable=True, comment="商品详情富文本内容")
  330. image_url = Column(String(500), nullable=True, comment="图片URL")
  331. price_coefficient = Column(
  332. Numeric(6, 2), default=0, nullable=False, comment="调价系数(百分比点数,5表示5%)"
  333. )
  334. suggested_supplier_price = Column(Numeric(10, 2), nullable=True, comment="供应商建议报价(元)")
  335. is_active = Column(Boolean, default=True, comment="是否启用")
  336. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  337. create_by = Column(String(32), nullable=True, comment="创建人ID")
  338. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  339. update_at = Column(DateTime, nullable=True, comment="修改时间")
  340. update_by = Column(String(32), nullable=True, comment="修改人ID")
  341. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  342. class BasAddress(Base):
  343. """地址表"""
  344. __tablename__ = "bas_address"
  345. id = Column(String(32), primary_key=True, comment="主键ID")
  346. user_id = Column(String(32), nullable=False, comment="用户ID")
  347. address_type = Column(String(20), nullable=False, comment="地址类型")
  348. contact_person = Column(String(100), nullable=False, comment="联系人")
  349. contact_phone = Column(String(20), nullable=False, comment="联系电话")
  350. province = Column(String(50), nullable=True, comment="省份")
  351. city = Column(String(50), nullable=True, comment="城市")
  352. district = Column(String(50), nullable=True, comment="区县")
  353. detail_address = Column(String(500), nullable=False, comment="详细地址")
  354. is_default = Column(Boolean, default=False, comment="是否默认地址")
  355. latitude = Column(String(20), nullable=True, comment="纬度")
  356. longitude = Column(String(20), nullable=True, comment="经度")
  357. is_del = Column(Integer, default=0, comment="是否删除")
  358. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  359. create_by = Column(String(32), nullable=True, comment="创建人ID")
  360. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  361. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  362. update_by = Column(String(32), nullable=True, comment="修改人ID")
  363. class BasAddressHis(Base):
  364. """地址历史表"""
  365. __tablename__ = "bas_address_his"
  366. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  367. user_id = Column(String(32), nullable=False, comment="用户ID")
  368. address_type = Column(String(20), nullable=False, comment="地址类型")
  369. contact_person = Column(String(100), nullable=False, comment="联系人")
  370. contact_phone = Column(String(20), nullable=False, comment="联系电话")
  371. province = Column(String(50), nullable=True, comment="省份")
  372. city = Column(String(50), nullable=True, comment="城市")
  373. district = Column(String(50), nullable=True, comment="区县")
  374. detail_address = Column(String(500), nullable=False, comment="详细地址")
  375. is_default = Column(Boolean, default=False, comment="是否默认地址")
  376. latitude = Column(String(20), nullable=True, comment="纬度")
  377. longitude = Column(String(20), nullable=True, comment="经度")
  378. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  379. create_by = Column(String(32), nullable=True, comment="创建人ID")
  380. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  381. update_at = Column(DateTime, nullable=True, comment="修改时间")
  382. update_by = Column(String(32), nullable=True, comment="修改人ID")
  383. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  384. # =========================================
  385. # 业务模块
  386. # =========================================
  387. class BizInquiry(Base):
  388. """询价单表"""
  389. __tablename__ = "biz_inquiry"
  390. id = Column(String(32), primary_key=True, comment="主键ID")
  391. region_id = Column(String(32), nullable=False, comment="区域ID")
  392. title = Column(String(200), nullable=False, comment="询价单标题")
  393. status = Column(String(20), default="draft", comment="状态")
  394. publish_time = Column(DateTime, nullable=True, comment="发布时间")
  395. close_time = Column(DateTime, nullable=True, comment="关闭时间")
  396. remark = Column(String(1000), nullable=True, comment="备注")
  397. is_del = Column(Integer, default=0, comment="是否删除")
  398. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  399. create_by = Column(String(32), nullable=True, comment="创建人ID")
  400. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  401. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  402. update_by = Column(String(32), nullable=True, comment="修改人ID")
  403. class BizInquiryItem(Base):
  404. """询价单项表"""
  405. __tablename__ = "biz_inquiry_item"
  406. id = Column(String(32), primary_key=True, comment="主键ID")
  407. inquiry_id = Column(String(32), nullable=False, comment="询价单ID")
  408. product_id = Column(String(32), nullable=False, comment="商品ID")
  409. is_del = Column(Integer, default=0, comment="是否删除")
  410. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  411. create_by = Column(String(32), nullable=True, comment="创建人ID")
  412. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  413. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  414. update_by = Column(String(32), nullable=True, comment="修改人ID")
  415. class BizInquiryHis(Base):
  416. """询价单历史表"""
  417. __tablename__ = "biz_inquiry_his"
  418. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  419. region_id = Column(String(32), nullable=False, comment="区域ID")
  420. title = Column(String(200), nullable=False, comment="询价单标题")
  421. status = Column(String(20), default="draft", comment="状态")
  422. publish_time = Column(DateTime, nullable=True, comment="发布时间")
  423. close_time = Column(DateTime, nullable=True, comment="关闭时间")
  424. remark = Column(String(1000), nullable=True, comment="备注")
  425. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  426. create_by = Column(String(32), nullable=True, comment="创建人ID")
  427. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  428. update_at = Column(DateTime, nullable=True, comment="修改时间")
  429. update_by = Column(String(32), nullable=True, comment="修改人ID")
  430. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  431. class BizInquiryItemHis(Base):
  432. """询价单项历史表"""
  433. __tablename__ = "biz_inquiry_item_his"
  434. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  435. inquiry_id = Column(String(32), nullable=False, comment="询价单ID")
  436. product_id = Column(String(32), nullable=False, comment="商品ID")
  437. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  438. create_by = Column(String(32), nullable=True, comment="创建人ID")
  439. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  440. update_at = Column(DateTime, nullable=True, comment="修改时间")
  441. update_by = Column(String(32), nullable=True, comment="修改人ID")
  442. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  443. class BizQuotation(Base):
  444. """报价单表"""
  445. __tablename__ = "biz_quotation"
  446. id = Column(String(32), primary_key=True, comment="主键ID")
  447. inquiry_id = Column(String(32), nullable=False, comment="询价单ID")
  448. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  449. region_id = Column(String(32), nullable=False, comment="区域ID")
  450. # 报价无需审核:仅使用 submitted / selected
  451. status = Column(String(20), default="submitted", comment="状态")
  452. total_amount = Column(Numeric(12, 2), default=0, comment="报价总金额")
  453. submit_time = Column(DateTime, nullable=True, comment="提交时间")
  454. is_del = Column(Integer, default=0, comment="是否删除")
  455. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  456. create_by = Column(String(32), nullable=True, comment="创建人ID")
  457. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  458. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  459. update_by = Column(String(32), nullable=True, comment="修改人ID")
  460. class BizQuotationItem(Base):
  461. """报价单项表"""
  462. __tablename__ = "biz_quotation_item"
  463. id = Column(String(32), primary_key=True, comment="主键ID")
  464. quotation_id = Column(String(32), nullable=False, comment="报价单ID")
  465. product_id = Column(String(32), nullable=False, comment="商品ID")
  466. unit_id = Column(String(32), nullable=False, comment="单位ID")
  467. price = Column(Numeric(10, 2), nullable=False, comment="单价")
  468. is_del = Column(Integer, default=0, comment="是否删除")
  469. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  470. create_by = Column(String(32), nullable=True, comment="创建人ID")
  471. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  472. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  473. update_by = Column(String(32), nullable=True, comment="修改人ID")
  474. class BizQuotationHis(Base):
  475. """报价单历史表"""
  476. __tablename__ = "biz_quotation_his"
  477. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  478. inquiry_id = Column(String(32), nullable=False, comment="询价单ID")
  479. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  480. region_id = Column(String(32), nullable=False, comment="区域ID")
  481. status = Column(String(20), default="submitted", comment="状态")
  482. total_amount = Column(Numeric(12, 2), default=0, comment="报价总金额")
  483. submit_time = Column(DateTime, nullable=True, comment="提交时间")
  484. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  485. create_by = Column(String(32), nullable=True, comment="创建人ID")
  486. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  487. update_at = Column(DateTime, nullable=True, comment="修改时间")
  488. update_by = Column(String(32), nullable=True, comment="修改人ID")
  489. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  490. class BizQuotationItemHis(Base):
  491. """报价单项历史表"""
  492. __tablename__ = "biz_quotation_item_his"
  493. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  494. quotation_id = Column(String(32), nullable=False, comment="报价单ID")
  495. product_id = Column(String(32), nullable=False, comment="商品ID")
  496. unit_id = Column(String(32), nullable=False, comment="单位ID")
  497. price = Column(Numeric(10, 2), nullable=False, comment="单价")
  498. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  499. create_by = Column(String(32), nullable=True, comment="创建人ID")
  500. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  501. update_at = Column(DateTime, nullable=True, comment="修改时间")
  502. update_by = Column(String(32), nullable=True, comment="修改人ID")
  503. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  504. class BizPriceList(Base):
  505. """价格清单表"""
  506. __tablename__ = "biz_price_list"
  507. id = Column(String(32), primary_key=True, comment="主键ID")
  508. region_id = Column(String(32), nullable=False, comment="区域ID")
  509. supplier_id = Column(String(32), nullable=False, comment="选用供应商ID")
  510. inquiry_id = Column(String(32), nullable=True, comment="来源询价单ID")
  511. quotation_id = Column(String(32), nullable=True, comment="来源报价单ID")
  512. source_type = Column(String(20), nullable=True, comment="来源类型")
  513. version = Column(Integer, default=1, comment="版本号")
  514. status = Column(String(20), default="draft", comment="状态")
  515. effective_time = Column(DateTime, nullable=True, comment="生效时间")
  516. published_by = Column(String(32), nullable=True, comment="发布人ID")
  517. published_time = Column(DateTime, nullable=True, comment="发布时间")
  518. remark = Column(String(500), nullable=True, comment="备注")
  519. is_del = Column(Integer, default=0, comment="是否删除")
  520. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  521. create_by = Column(String(32), nullable=True, comment="创建人ID")
  522. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  523. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  524. update_by = Column(String(32), nullable=True, comment="修改人ID")
  525. class BizPriceListHis(Base):
  526. """价格清单历史表"""
  527. __tablename__ = "biz_price_list_his"
  528. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  529. region_id = Column(String(32), nullable=False, comment="区域ID")
  530. supplier_id = Column(String(32), nullable=False, comment="选用供应商ID")
  531. inquiry_id = Column(String(32), nullable=True, comment="来源询价单ID")
  532. quotation_id = Column(String(32), nullable=True, comment="来源报价单ID")
  533. source_type = Column(String(20), nullable=True, comment="来源类型")
  534. version = Column(Integer, default=1, comment="版本号")
  535. status = Column(String(20), default="draft", comment="状态")
  536. effective_time = Column(DateTime, nullable=True, comment="生效时间")
  537. published_by = Column(String(32), nullable=True, comment="发布人ID")
  538. published_time = Column(DateTime, nullable=True, comment="发布时间")
  539. remark = Column(String(500), nullable=True, comment="备注")
  540. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  541. create_by = Column(String(32), nullable=True, comment="创建人ID")
  542. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  543. update_at = Column(DateTime, nullable=True, comment="修改时间")
  544. update_by = Column(String(32), nullable=True, comment="修改人ID")
  545. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  546. class BizPriceListItem(Base):
  547. """价格清单项表"""
  548. __tablename__ = "biz_price_list_item"
  549. id = Column(String(32), primary_key=True, comment="主键ID")
  550. price_list_id = Column(String(32), nullable=False, comment="价格清单ID")
  551. product_id = Column(String(32), nullable=False, comment="商品ID")
  552. unit_id = Column(String(32), nullable=False, comment="单位ID")
  553. price = Column(Numeric(10, 2), nullable=False, comment="单价")
  554. pricing_coefficient = Column(Numeric(8, 2), nullable=True, comment="本次发布使用的调价系数(%)")
  555. is_del = Column(Integer, default=0, comment="是否删除")
  556. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  557. create_by = Column(String(32), nullable=True, comment="创建人ID")
  558. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  559. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  560. update_by = Column(String(32), nullable=True, comment="修改人ID")
  561. class BizOrder(Base):
  562. """订单主表"""
  563. __tablename__ = "biz_order"
  564. id = Column(String(32), primary_key=True, comment="主键ID")
  565. order_no = Column(String(50), unique=True, nullable=False, comment="订单编号")
  566. region_id = Column(String(32), nullable=False, comment="区域ID")
  567. client_id = Column(String(32), nullable=False, comment="客户ID")
  568. price_list_id = Column(String(32), nullable=False, comment="价格清单ID")
  569. price_version = Column(Integer, nullable=False, comment="价格版本号")
  570. status = Column(String(30), nullable=False, default="pending_payment", comment="订单状态")
  571. # 三字段状态(已统一为新模型)
  572. order_status = Column(String(20), nullable=False, default="pending_payment", comment="订单主状态: pending_payment/pending_confirm/completed/cancelled")
  573. delivery_status = Column(String(20), nullable=False, default="pending_dispatch", comment="配送状态: pending_dispatch/delivering/delivered")
  574. pay_status = Column(String(20), nullable=False, default="pending_payment", comment="支付状态: pending_payment/paid/refunding/refunded")
  575. cancel_status = Column(String(20), nullable=False, default="none", comment="取消审核状态: none/pending_review/approved/rejected")
  576. payment_method = Column(String(20), nullable=True, comment="支付渠道: online=线上(微信等), offline=线下结算(与 pay_status 独立)")
  577. client_settlement_status = Column(String(20), nullable=False, default="pending", comment="客户结算状态: pending/settled")
  578. supplier_settlement_status = Column(String(20), nullable=False, default="pending", comment="供应商结算状态: pending/settled")
  579. client_settlement_at = Column(DateTime, nullable=True, comment="客户结算时间")
  580. supplier_settlement_at = Column(DateTime, nullable=True, comment="供应商结算时间")
  581. total_amount = Column(Numeric(12, 2), default=0, comment="订单总金额")
  582. paid_amount = Column(Numeric(12, 2), default=0, comment="已付金额")
  583. receivable_amount = Column(Numeric(12, 2), default=0, comment="应收金额")
  584. refund_amount = Column(Numeric(12, 2), default=0, comment="退款金额")
  585. contact_person = Column(String(100), nullable=True, comment="联系人")
  586. contact_phone = Column(String(20), nullable=True, comment="联系电话")
  587. delivery_address = Column(String(500), nullable=True, comment="配送地址")
  588. cancel_reason = Column(String(500), nullable=True, comment="取消原因")
  589. cancel_review_time = Column(DateTime, nullable=True, comment="取消审核时间")
  590. cancel_reviewed_by = Column(String(32), nullable=True, comment="取消审核人ID")
  591. cancel_review_note = Column(String(500), nullable=True, comment="取消审核备注")
  592. completed_time = Column(DateTime, nullable=True, comment="完结时间")
  593. completed_by = Column(String(32), nullable=True, comment="完结人ID")
  594. remark = Column(Text, nullable=True, comment="订单备注")
  595. payment_time = Column(DateTime, nullable=True, comment="支付时间")
  596. delivery_assign_time = Column(DateTime, nullable=True, comment="配送分配时间")
  597. delivered_time = Column(DateTime, nullable=True, comment="配送完成时间(待客户确认收货起算点)")
  598. lock_operator_id = Column(String(32), nullable=True, comment="锁定操作人ID")
  599. lock_time = Column(DateTime, nullable=True, comment="锁定时间")
  600. is_del = Column(Integer, default=0, comment="是否删除")
  601. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  602. create_by = Column(String(32), nullable=True, comment="创建人ID")
  603. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  604. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  605. update_by = Column(String(32), nullable=True, comment="修改人ID")
  606. class BizOrderItem(Base):
  607. """订单项表"""
  608. __tablename__ = "biz_order_item"
  609. id = Column(String(32), primary_key=True, comment="主键ID")
  610. order_id = Column(String(32), nullable=False, comment="订单ID")
  611. product_id = Column(String(32), nullable=False, comment="商品ID")
  612. unit_id = Column(String(32), nullable=False, comment="单位ID")
  613. quantity = Column(Numeric(12, 4), default=0, comment="数量")
  614. unit_price = Column(Numeric(10, 2), nullable=False, comment="单价")
  615. amount = Column(Numeric(12, 2), default=0, comment="金额")
  616. delivered_quantity = Column(Numeric(12, 4), default=0, comment="已配送数量")
  617. status = Column(String(20), default="normal", comment="项状态")
  618. note = Column(String(500), nullable=True, comment="备注")
  619. is_del = Column(Integer, default=0, comment="是否删除")
  620. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  621. create_by = Column(String(32), nullable=True, comment="创建人ID")
  622. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  623. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  624. update_by = Column(String(32), nullable=True, comment="修改人ID")
  625. class BizOrderHis(Base):
  626. """订单主表历史表"""
  627. __tablename__ = "biz_order_his"
  628. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  629. order_no = Column(String(50), nullable=False, comment="订单编号")
  630. region_id = Column(String(32), nullable=False, comment="区域ID")
  631. client_id = Column(String(32), nullable=False, comment="客户ID")
  632. price_list_id = Column(String(32), nullable=False, comment="价格清单ID")
  633. price_version = Column(Integer, nullable=False, comment="价格版本号")
  634. status = Column(String(30), nullable=False, default="pending_payment", comment="订单状态")
  635. # 三字段状态(历史表同步保留新模型)
  636. order_status = Column(String(20), nullable=False, default="pending_payment", comment="订单主状态: pending_payment/pending_confirm/completed/cancelled")
  637. delivery_status = Column(String(20), nullable=False, default="pending_dispatch", comment="配送状态: pending_dispatch/delivering/delivered")
  638. pay_status = Column(String(20), nullable=False, default="pending_payment", comment="支付状态: pending_payment/paid/refunding/refunded")
  639. cancel_status = Column(String(20), nullable=False, default="none", comment="取消审核状态: none/pending_review/approved/rejected")
  640. payment_method = Column(String(20), nullable=True, comment="支付渠道: online=线上(微信等), offline=线下结算(与 pay_status 独立)")
  641. client_settlement_status = Column(String(20), nullable=False, default="pending", comment="客户结算状态: pending/settled")
  642. supplier_settlement_status = Column(String(20), nullable=False, default="pending", comment="供应商结算状态: pending/settled")
  643. client_settlement_at = Column(DateTime, nullable=True, comment="客户结算时间")
  644. supplier_settlement_at = Column(DateTime, nullable=True, comment="供应商结算时间")
  645. total_amount = Column(Numeric(12, 2), default=0, comment="订单总金额")
  646. paid_amount = Column(Numeric(12, 2), default=0, comment="已付金额")
  647. receivable_amount = Column(Numeric(12, 2), default=0, comment="应收金额")
  648. refund_amount = Column(Numeric(12, 2), default=0, comment="退款金额")
  649. contact_person = Column(String(100), nullable=True, comment="联系人")
  650. contact_phone = Column(String(20), nullable=True, comment="联系电话")
  651. delivery_address = Column(String(500), nullable=True, comment="配送地址")
  652. cancel_reason = Column(String(500), nullable=True, comment="取消原因")
  653. cancel_review_time = Column(DateTime, nullable=True, comment="取消审核时间")
  654. cancel_reviewed_by = Column(String(32), nullable=True, comment="取消审核人ID")
  655. cancel_review_note = Column(String(500), nullable=True, comment="取消审核备注")
  656. completed_time = Column(DateTime, nullable=True, comment="完结时间")
  657. completed_by = Column(String(32), nullable=True, comment="完结人ID")
  658. remark = Column(Text, nullable=True, comment="订单备注")
  659. payment_time = Column(DateTime, nullable=True, comment="支付时间")
  660. delivery_assign_time = Column(DateTime, nullable=True, comment="配送分配时间")
  661. delivered_time = Column(DateTime, nullable=True, comment="配送完成时间(待客户确认收货起算点)")
  662. lock_operator_id = Column(String(32), nullable=True, comment="锁定操作人ID")
  663. lock_time = Column(DateTime, nullable=True, comment="锁定时间")
  664. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  665. create_by = Column(String(32), nullable=True, comment="创建人ID")
  666. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  667. update_at = Column(DateTime, nullable=True, comment="修改时间")
  668. update_by = Column(String(32), nullable=True, comment="修改人ID")
  669. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  670. class BizOrderStatusLog(Base):
  671. """订单状态变更日志表"""
  672. __tablename__ = "biz_order_status_log"
  673. id = Column(String(32), primary_key=True, comment="主键ID")
  674. order_id = Column(String(32), nullable=False, comment="订单ID")
  675. from_status = Column(String(30), nullable=True, comment="变更前状态")
  676. to_status = Column(String(30), nullable=False, comment="变更后状态")
  677. operator_id = Column(String(32), nullable=False, comment="操作人ID")
  678. operator_role = Column(String(20), nullable=False, comment="操作人角色")
  679. reason = Column(String(500), nullable=True, comment="变更原因")
  680. note = Column(String(1000), nullable=True, comment="备注")
  681. is_del = Column(Integer, default=0, comment="是否删除")
  682. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  683. create_by = Column(String(32), nullable=True, comment="创建人ID")
  684. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  685. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  686. update_by = Column(String(32), nullable=True, comment="修改人ID")
  687. class BizDeliveryTask(Base):
  688. """配送任务表"""
  689. __tablename__ = "biz_delivery_task"
  690. id = Column(String(32), primary_key=True, comment="主键ID")
  691. task_no = Column(String(50), unique=True, nullable=False, comment="配送单编号")
  692. order_id = Column(String(32), nullable=False, comment="订单ID")
  693. region_id = Column(String(32), nullable=False, comment="区域ID")
  694. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  695. deliver_id = Column(String(32), nullable=True, comment="配送员ID")
  696. status = Column(String(20), default="pending", comment="状态")
  697. deliverer_status = Column(String(20), default="pending_pickup", comment="配送员状态: pending_pickup/delivering/delivered")
  698. supplier_prepare_status = Column(String(20), default="pending_prepare", comment="供应商备货状态: pending_prepare/prepared/picked_up")
  699. pickup_time = Column(DateTime, nullable=True, comment="取货时间")
  700. pickup_remark = Column(String(500), nullable=True, comment="取货备注")
  701. pickup_image_url = Column(String(500), nullable=True, comment="取货凭证图片")
  702. delivery_time = Column(DateTime, nullable=True, comment="送达时间")
  703. delivery_remark = Column(String(500), nullable=True, comment="送达备注")
  704. delivery_image_url = Column(String(500), nullable=True, comment="送达凭证图片")
  705. expire_warning_sent = Column(Boolean, default=False, comment="是否已发送过期预警")
  706. effective_time = Column(DateTime, nullable=True, comment="生效时间")
  707. dispatch_remark = Column(String(500), nullable=True, comment="运营分配配送备注")
  708. is_del = Column(Integer, default=0, comment="是否删除")
  709. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  710. create_by = Column(String(32), nullable=True, comment="创建人ID")
  711. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  712. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  713. update_by = Column(String(32), nullable=True, comment="修改人ID")
  714. class BizDeliveryTaskItem(Base):
  715. """配送任务明细表"""
  716. __tablename__ = "biz_delivery_task_item"
  717. id = Column(String(32), primary_key=True, comment="主键ID")
  718. task_id = Column(String(32), nullable=False, comment="配送任务ID")
  719. order_id = Column(String(32), nullable=False, comment="订单ID")
  720. order_item_id = Column(String(32), nullable=False, comment="订单项ID")
  721. product_id = Column(String(32), nullable=False, comment="商品ID")
  722. client_id = Column(String(32), nullable=False, comment="客户ID")
  723. delivery_address = Column(String(500), nullable=False, comment="配送地址")
  724. contact_person = Column(String(100), nullable=False, comment="联系人")
  725. contact_phone = Column(String(20), nullable=False, comment="联系电话")
  726. quantity = Column(Numeric(12, 4), default=0, comment="配送数量")
  727. delivered_quantity = Column(Numeric(12, 4), default=0, comment="已送达数量")
  728. status = Column(String(20), default="pending", comment="状态")
  729. pickup_time = Column(DateTime, nullable=True, comment="取货时间")
  730. delivery_time = Column(DateTime, nullable=True, comment="送达时间")
  731. is_del = Column(Integer, default=0, comment="是否删除")
  732. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  733. create_by = Column(String(32), nullable=True, comment="创建人ID")
  734. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  735. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  736. update_by = Column(String(32), nullable=True, comment="修改人ID")
  737. class BizDeliveryTaskHis(Base):
  738. """配送任务历史表"""
  739. __tablename__ = "biz_delivery_task_his"
  740. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  741. task_no = Column(String(50), nullable=False, comment="配送单编号")
  742. order_id = Column(String(32), nullable=False, comment="订单ID")
  743. region_id = Column(String(32), nullable=False, comment="区域ID")
  744. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  745. deliver_id = Column(String(32), nullable=True, comment="配送员ID")
  746. status = Column(String(20), default="pending", comment="状态")
  747. deliverer_status = Column(String(20), default="pending_pickup", comment="配送员状态: pending_pickup/delivering/delivered")
  748. supplier_prepare_status = Column(String(20), default="pending_prepare", comment="供应商备货状态: pending_prepare/prepared/picked_up")
  749. pickup_time = Column(DateTime, nullable=True, comment="取货时间")
  750. pickup_remark = Column(String(500), nullable=True, comment="取货备注")
  751. pickup_image_url = Column(String(500), nullable=True, comment="取货凭证图片")
  752. delivery_time = Column(DateTime, nullable=True, comment="送达时间")
  753. delivery_remark = Column(String(500), nullable=True, comment="送达备注")
  754. delivery_image_url = Column(String(500), nullable=True, comment="送达凭证图片")
  755. expire_warning_sent = Column(Boolean, default=False, comment="是否已发送过期预警")
  756. effective_time = Column(DateTime, nullable=True, comment="生效时间")
  757. dispatch_remark = Column(String(500), nullable=True, comment="运营分配配送备注")
  758. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  759. create_by = Column(String(32), nullable=True, comment="创建人ID")
  760. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  761. update_at = Column(DateTime, nullable=True, comment="修改时间")
  762. update_by = Column(String(32), nullable=True, comment="修改人ID")
  763. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  764. class BizSettlement(Base):
  765. """结算记录表"""
  766. __tablename__ = "biz_settlement"
  767. id = Column(String(32), primary_key=True, comment="主键ID")
  768. order_id = Column(String(32), nullable=False, comment="订单ID")
  769. client_id = Column(String(32), nullable=False, comment="客户ID")
  770. region_id = Column(String(32), nullable=False, comment="区域ID")
  771. amount = Column(Numeric(12, 2), nullable=False, comment="结算金额")
  772. settlement_method = Column(String(20), nullable=False, comment="结算方式")
  773. settlement_time = Column(DateTime, nullable=True, comment="结算时间")
  774. settlement_file_url = Column(String(500), nullable=True, comment="结算凭证文件URL")
  775. settlement_note = Column(String(500), nullable=True, comment="结算备注")
  776. status = Column(String(20), default="pending", comment="状态")
  777. reviewed_by = Column(String(32), nullable=True, comment="审核人ID")
  778. reviewed_time = Column(DateTime, nullable=True, comment="审核时间")
  779. is_del = Column(Integer, default=0, comment="是否删除")
  780. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  781. create_by = Column(String(32), nullable=True, comment="创建人ID")
  782. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  783. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  784. update_by = Column(String(32), nullable=True, comment="修改人ID")
  785. class OrdClientSettlement(Base):
  786. """客户结算主表"""
  787. __tablename__ = "ord_client_settlement"
  788. id = Column(String(32), primary_key=True, comment="主键ID")
  789. settlement_no = Column(String(50), nullable=False, unique=True, comment="结算单号")
  790. client_id = Column(String(32), nullable=False, comment="客户ID")
  791. client_name = Column(String(100), nullable=True, comment="客户名称快照")
  792. order_count = Column(Integer, nullable=False, default=0, comment="订单数量")
  793. total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额")
  794. voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)")
  795. remark = Column(String(500), nullable=True, comment="结算备注")
  796. settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间")
  797. status = Column(String(20), nullable=False, default="done", comment="结算单状态")
  798. is_del = Column(Integer, default=0, comment="是否删除")
  799. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  800. create_by = Column(String(32), nullable=True, comment="创建人ID")
  801. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  802. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  803. update_by = Column(String(32), nullable=True, comment="修改人ID")
  804. class OrdClientSettlementHis(Base):
  805. """客户结算主表历史"""
  806. __tablename__ = "ord_client_settlement_his"
  807. __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_client_settlement_his"),)
  808. id = Column(String(32), nullable=False, comment="主键ID")
  809. settlement_no = Column(String(50), nullable=False, comment="结算单号")
  810. client_id = Column(String(32), nullable=False, comment="客户ID")
  811. client_name = Column(String(100), nullable=True, comment="客户名称快照")
  812. order_count = Column(Integer, nullable=False, default=0, comment="订单数量")
  813. total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额")
  814. voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)")
  815. remark = Column(String(500), nullable=True, comment="结算备注")
  816. settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间")
  817. status = Column(String(20), nullable=False, default="done", comment="结算单状态")
  818. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  819. create_by = Column(String(32), nullable=True, comment="创建人ID")
  820. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  821. update_at = Column(DateTime, nullable=True, comment="修改时间")
  822. update_by = Column(String(32), nullable=True, comment="修改人ID")
  823. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  824. class OrdClientSettlementItem(Base):
  825. """客户结算明细表"""
  826. __tablename__ = "ord_client_settlement_item"
  827. id = Column(String(32), primary_key=True, comment="主键ID")
  828. settlement_id = Column(String(32), nullable=False, comment="结算主表ID")
  829. order_id = Column(String(32), nullable=False, comment="订单ID")
  830. order_no = Column(String(50), nullable=False, comment="订单号")
  831. client_id = Column(String(32), nullable=False, comment="客户ID")
  832. order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额")
  833. is_del = Column(Integer, default=0, comment="是否删除")
  834. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  835. create_by = Column(String(32), nullable=True, comment="创建人ID")
  836. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  837. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  838. update_by = Column(String(32), nullable=True, comment="修改人ID")
  839. class OrdClientSettlementItemHis(Base):
  840. """客户结算明细历史表"""
  841. __tablename__ = "ord_client_settlement_item_his"
  842. __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_client_settlement_item_his"),)
  843. id = Column(String(32), nullable=False, comment="主键ID")
  844. settlement_id = Column(String(32), nullable=False, comment="结算主表ID")
  845. order_id = Column(String(32), nullable=False, comment="订单ID")
  846. order_no = Column(String(50), nullable=False, comment="订单号")
  847. client_id = Column(String(32), nullable=False, comment="客户ID")
  848. order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额")
  849. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  850. create_by = Column(String(32), nullable=True, comment="创建人ID")
  851. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  852. update_at = Column(DateTime, nullable=True, comment="修改时间")
  853. update_by = Column(String(32), nullable=True, comment="修改人ID")
  854. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  855. class OrdSupplierSettlement(Base):
  856. """供应商结算主表"""
  857. __tablename__ = "ord_supplier_settlement"
  858. id = Column(String(32), primary_key=True, comment="主键ID")
  859. settlement_no = Column(String(50), nullable=False, unique=True, comment="结算单号")
  860. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  861. supplier_name = Column(String(100), nullable=True, comment="供应商名称快照")
  862. order_count = Column(Integer, nullable=False, default=0, comment="订单数量")
  863. total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额")
  864. voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)")
  865. remark = Column(String(500), nullable=True, comment="结算备注")
  866. settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间")
  867. status = Column(String(20), nullable=False, default="done", comment="结算单状态")
  868. is_del = Column(Integer, default=0, comment="是否删除")
  869. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  870. create_by = Column(String(32), nullable=True, comment="创建人ID")
  871. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  872. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  873. update_by = Column(String(32), nullable=True, comment="修改人ID")
  874. class OrdSupplierSettlementHis(Base):
  875. """供应商结算主表历史"""
  876. __tablename__ = "ord_supplier_settlement_his"
  877. __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_supplier_settlement_his"),)
  878. id = Column(String(32), nullable=False, comment="主键ID")
  879. settlement_no = Column(String(50), nullable=False, comment="结算单号")
  880. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  881. supplier_name = Column(String(100), nullable=True, comment="供应商名称快照")
  882. order_count = Column(Integer, nullable=False, default=0, comment="订单数量")
  883. total_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="结算总金额")
  884. voucher_urls = Column(Text, nullable=True, comment="结算凭证URL(JSON数组)")
  885. remark = Column(String(500), nullable=True, comment="结算备注")
  886. settlement_at = Column(DateTime, nullable=False, default=datetime.now, comment="结算时间")
  887. status = Column(String(20), nullable=False, default="done", comment="结算单状态")
  888. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  889. create_by = Column(String(32), nullable=True, comment="创建人ID")
  890. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  891. update_at = Column(DateTime, nullable=True, comment="修改时间")
  892. update_by = Column(String(32), nullable=True, comment="修改人ID")
  893. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  894. class OrdSupplierSettlementItem(Base):
  895. """供应商结算明细表"""
  896. __tablename__ = "ord_supplier_settlement_item"
  897. id = Column(String(32), primary_key=True, comment="主键ID")
  898. settlement_id = Column(String(32), nullable=False, comment="结算主表ID")
  899. order_id = Column(String(32), nullable=False, comment="订单ID")
  900. order_no = Column(String(50), nullable=False, comment="订单号")
  901. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  902. order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额")
  903. is_del = Column(Integer, default=0, comment="是否删除")
  904. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  905. create_by = Column(String(32), nullable=True, comment="创建人ID")
  906. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  907. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  908. update_by = Column(String(32), nullable=True, comment="修改人ID")
  909. class OrdSupplierSettlementItemHis(Base):
  910. """供应商结算明细历史表"""
  911. __tablename__ = "ord_supplier_settlement_item_his"
  912. __table_args__ = (PrimaryKeyConstraint("id", "his_create_at", name="pk_ord_supplier_settlement_item_his"),)
  913. id = Column(String(32), nullable=False, comment="主键ID")
  914. settlement_id = Column(String(32), nullable=False, comment="结算主表ID")
  915. order_id = Column(String(32), nullable=False, comment="订单ID")
  916. order_no = Column(String(50), nullable=False, comment="订单号")
  917. supplier_id = Column(String(32), nullable=False, comment="供应商ID")
  918. order_amount = Column(Numeric(12, 2), nullable=False, default=0, comment="订单结算金额")
  919. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  920. create_by = Column(String(32), nullable=True, comment="创建人ID")
  921. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  922. update_at = Column(DateTime, nullable=True, comment="修改时间")
  923. update_by = Column(String(32), nullable=True, comment="修改人ID")
  924. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  925. class BizRefund(Base):
  926. """退款记录表"""
  927. __tablename__ = "biz_refund"
  928. id = Column(String(32), primary_key=True, comment="主键ID")
  929. order_id = Column(String(32), nullable=False, comment="订单ID")
  930. refund_no = Column(String(50), unique=True, nullable=False, comment="退款单编号")
  931. refund_amount = Column(Numeric(12, 2), nullable=False, comment="退款金额")
  932. refund_method = Column(String(20), nullable=False, comment="退款方式")
  933. refund_no_wechat = Column(String(100), nullable=True, comment="微信退款单号")
  934. refund_time = Column(DateTime, nullable=True, comment="退款时间")
  935. refund_result = Column(String(20), default="success", comment="退款结果")
  936. refund_fail_reason = Column(String(500), nullable=True, comment="退款失败原因")
  937. status = Column(String(20), default="pending", comment="状态")
  938. is_del = Column(Integer, default=0, comment="是否删除")
  939. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  940. create_by = Column(String(32), nullable=True, comment="创建人ID")
  941. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  942. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  943. update_by = Column(String(32), nullable=True, comment="修改人ID")
  944. class BizSettlementHis(Base):
  945. """结算记录历史表"""
  946. __tablename__ = "biz_settlement_his"
  947. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  948. order_id = Column(String(32), nullable=False, comment="订单ID")
  949. client_id = Column(String(32), nullable=False, comment="客户ID")
  950. region_id = Column(String(32), nullable=False, comment="区域ID")
  951. amount = Column(Numeric(12, 2), nullable=False, comment="结算金额")
  952. settlement_method = Column(String(20), nullable=False, comment="结算方式")
  953. settlement_time = Column(DateTime, nullable=True, comment="结算时间")
  954. settlement_file_url = Column(String(500), nullable=True, comment="结算凭证文件URL")
  955. settlement_note = Column(String(500), nullable=True, comment="结算备注")
  956. status = Column(String(20), default="pending", comment="状态")
  957. reviewed_by = Column(String(32), nullable=True, comment="审核人ID")
  958. reviewed_time = Column(DateTime, nullable=True, comment="审核时间")
  959. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  960. create_by = Column(String(32), nullable=True, comment="创建人ID")
  961. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  962. update_at = Column(DateTime, nullable=True, comment="修改时间")
  963. update_by = Column(String(32), nullable=True, comment="修改人ID")
  964. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  965. class BizRefundHis(Base):
  966. """退款记录历史表"""
  967. __tablename__ = "biz_refund_his"
  968. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  969. order_id = Column(String(32), nullable=False, comment="订单ID")
  970. refund_no = Column(String(50), nullable=False, comment="退款单编号")
  971. refund_amount = Column(Numeric(12, 2), nullable=False, comment="退款金额")
  972. refund_method = Column(String(20), nullable=False, comment="退款方式")
  973. refund_no_wechat = Column(String(100), nullable=True, comment="微信退款单号")
  974. refund_time = Column(DateTime, nullable=True, comment="退款时间")
  975. refund_result = Column(String(20), default="success", comment="退款结果")
  976. refund_fail_reason = Column(String(500), nullable=True, comment="退款失败原因")
  977. status = Column(String(20), default="pending", comment="状态")
  978. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  979. create_by = Column(String(32), nullable=True, comment="创建人ID")
  980. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  981. update_at = Column(DateTime, nullable=True, comment="修改时间")
  982. update_by = Column(String(32), nullable=True, comment="修改人ID")
  983. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  984. class BizWechatPay(Base):
  985. """微信支付订单表"""
  986. __tablename__ = "biz_wechat_pay"
  987. id = Column(String(32), primary_key=True, comment="主键ID")
  988. order_id = Column(String(32), nullable=False, comment="订单ID")
  989. out_trade_no = Column(String(64), unique=True, nullable=False, comment="商户订单号")
  990. transaction_id = Column(String(64), nullable=True, comment="微信支付订单号")
  991. payer_openid = Column(String(64), nullable=True, comment="付款人小程序openid")
  992. total_fee = Column(Integer, nullable=False, comment="支付金额(分)")
  993. cash_fee = Column(Integer, nullable=True, comment="现金支付金额(分)")
  994. pay_time = Column(DateTime, nullable=True, comment="支付时间")
  995. trade_state = Column(String(20), nullable=True, comment="交易状态")
  996. trade_state_desc = Column(String(200), nullable=True, comment="交易状态描述")
  997. is_del = Column(Integer, default=0, comment="是否删除")
  998. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  999. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1000. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1001. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1002. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1003. class BizAttachment(Base):
  1004. """附件表"""
  1005. __tablename__ = "biz_attachment"
  1006. id = Column(String(32), primary_key=True, comment="主键ID")
  1007. business_type = Column(String(50), nullable=False, comment="业务类型")
  1008. business_id = Column(String(32), nullable=False, comment="业务ID")
  1009. file_name = Column(String(200), nullable=False, comment="文件名称")
  1010. file_url = Column(String(500), nullable=False, comment="文件URL")
  1011. file_size = Column(Integer, nullable=True, comment="文件大小")
  1012. file_type = Column(String(50), nullable=True, comment="文件类型")
  1013. upload_by = Column(String(32), nullable=True, comment="上传人ID")
  1014. upload_by_name = Column(String(100), nullable=True, comment="上传人姓名")
  1015. is_del = Column(Integer, default=0, comment="是否删除")
  1016. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1017. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1018. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1019. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1020. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1021. class BizOrderAdjust(Base):
  1022. """订单调整记录表"""
  1023. __tablename__ = "biz_order_adjust"
  1024. id = Column(String(32), primary_key=True, comment="主键ID")
  1025. order_id = Column(String(32), nullable=False, comment="订单ID")
  1026. order_item_id = Column(String(32), nullable=True, comment="订单项ID")
  1027. adjust_type = Column(String(20), nullable=False, comment="调整类型")
  1028. before_quantity = Column(Numeric(12, 4), nullable=True, comment="调整前数量")
  1029. after_quantity = Column(Numeric(12, 4), nullable=True, comment="调整后数量")
  1030. before_amount = Column(Numeric(12, 2), nullable=True, comment="调整前金额")
  1031. after_amount = Column(Numeric(12, 2), nullable=True, comment="调整后金额")
  1032. difference_amount = Column(Numeric(12, 2), default=0, comment="差异金额")
  1033. reason = Column(String(500), nullable=False, comment="调整原因")
  1034. snapshot_items_json = Column(Text, nullable=True, comment="调整后订单商品快照(JSON)")
  1035. substitute_product_id = Column(String(32), nullable=True, comment="替代商品ID")
  1036. operator_id = Column(String(32), nullable=False, comment="操作人ID")
  1037. operator_name = Column(String(100), nullable=False, comment="操作人姓名")
  1038. is_del = Column(Integer, default=0, comment="是否删除")
  1039. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1040. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1041. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1042. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1043. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1044. class BizOrderAdjustHis(Base):
  1045. """订单调整记录历史表"""
  1046. __tablename__ = "biz_order_adjust_his"
  1047. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1048. order_id = Column(String(32), nullable=False, comment="订单ID")
  1049. order_item_id = Column(String(32), nullable=True, comment="订单项ID")
  1050. adjust_type = Column(String(20), nullable=False, comment="调整类型")
  1051. before_quantity = Column(Numeric(12, 4), nullable=True, comment="调整前数量")
  1052. after_quantity = Column(Numeric(12, 4), nullable=True, comment="调整后数量")
  1053. before_amount = Column(Numeric(12, 2), nullable=True, comment="调整前金额")
  1054. after_amount = Column(Numeric(12, 2), nullable=True, comment="调整后金额")
  1055. difference_amount = Column(Numeric(12, 2), default=0, comment="差异金额")
  1056. reason = Column(String(500), nullable=False, comment="调整原因")
  1057. snapshot_items_json = Column(Text, nullable=True, comment="调整后订单商品快照(JSON)")
  1058. substitute_product_id = Column(String(32), nullable=True, comment="替代商品ID")
  1059. operator_id = Column(String(32), nullable=False, comment="操作人ID")
  1060. operator_name = Column(String(100), nullable=False, comment="操作人姓名")
  1061. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1062. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1063. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1064. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1065. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1066. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1067. class BizInvoice(Base):
  1068. """发票表"""
  1069. __tablename__ = "biz_invoice"
  1070. id = Column(String(32), primary_key=True, comment="主键ID")
  1071. invoice_no = Column(String(50), nullable=False, unique=True, comment="发票号")
  1072. order_id = Column(String(32), nullable=False, comment="订单ID")
  1073. order_no = Column(String(50), nullable=False, comment="订单号")
  1074. client_id = Column(String(32), nullable=False, comment="客户ID")
  1075. client_name = Column(String(100), nullable=False, comment="客户名称")
  1076. invoice_type = Column(String(20), nullable=False, comment="发票类型: normal-普通发票, vat-增值税发票")
  1077. invoice_amount = Column(Numeric(12, 2), nullable=False, comment="发票金额")
  1078. tax_rate = Column(Numeric(5, 2), default=0, comment="税率")
  1079. tax_amount = Column(Numeric(12, 2), default=0, comment="税额")
  1080. title = Column(String(200), nullable=False, comment="发票抬头")
  1081. tax_no = Column(String(50), nullable=True, comment="税号")
  1082. address = Column(String(500), nullable=True, comment="开票地址")
  1083. phone = Column(String(20), nullable=True, comment="电话")
  1084. bank = Column(String(100), nullable=True, comment="开户银行")
  1085. bank_account = Column(String(50), nullable=True, comment="银行账号")
  1086. status = Column(String(20), nullable=False, default="pending", comment="状态: pending-待开票, issued-已开票, void-已作废")
  1087. invoice_url = Column(String(500), nullable=True, comment="发票文件URL")
  1088. issued_at = Column(DateTime, nullable=True, comment="开票时间")
  1089. issued_by = Column(String(32), nullable=True, comment="开票人ID")
  1090. issued_by_name = Column(String(100), nullable=True, comment="开票人姓名")
  1091. remark = Column(String(500), nullable=True, comment="备注")
  1092. is_del = Column(Integer, default=0, comment="是否删除")
  1093. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1094. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1095. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1096. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1097. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1098. class BizSystemConfig(Base):
  1099. """系统配置表"""
  1100. __tablename__ = "biz_system_config"
  1101. id = Column(String(32), primary_key=True, comment="主键ID")
  1102. config_key = Column(String(100), nullable=False, unique=True, comment="配置键")
  1103. config_value = Column(Text, nullable=True, comment="配置值")
  1104. config_type = Column(String(50), default="string", comment="配置类型: string, number, boolean, json")
  1105. config_name = Column(String(100), nullable=False, comment="配置名称")
  1106. config_group = Column(String(50), nullable=True, comment="配置分组")
  1107. description = Column(String(500), nullable=True, comment="描述")
  1108. is_active = Column(Integer, default=1, comment="是否启用")
  1109. is_del = Column(Integer, default=0, comment="是否删除")
  1110. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1111. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1112. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1113. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1114. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1115. class BizDelivererReview(Base):
  1116. """配送员评价表"""
  1117. __tablename__ = "biz_deliverer_review"
  1118. id = Column(String(32), primary_key=True, comment="主键ID")
  1119. order_id = Column(String(32), nullable=False, comment="订单ID")
  1120. task_id = Column(String(32), nullable=True, comment="配送任务ID")
  1121. client_id = Column(String(32), nullable=False, comment="客户ID")
  1122. deliverer_id = Column(String(32), nullable=False, comment="配送员ID")
  1123. score = Column(Integer, nullable=False, comment="评分(1-5)")
  1124. tags = Column(String(500), nullable=True, comment="评价标签,逗号分隔")
  1125. content = Column(String(1000), nullable=True, comment="评价内容")
  1126. is_anonymous = Column(Boolean, default=False, comment="是否匿名")
  1127. is_del = Column(Integer, default=0, comment="是否删除")
  1128. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1129. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1130. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1131. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1132. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1133. class BizDelivererReviewHis(Base):
  1134. """配送员评价历史表"""
  1135. __tablename__ = "biz_deliverer_review_his"
  1136. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1137. order_id = Column(String(32), nullable=False, comment="订单ID")
  1138. task_id = Column(String(32), nullable=True, comment="配送任务ID")
  1139. client_id = Column(String(32), nullable=False, comment="客户ID")
  1140. deliverer_id = Column(String(32), nullable=False, comment="配送员ID")
  1141. score = Column(Integer, nullable=False, comment="评分(1-5)")
  1142. tags = Column(String(500), nullable=True, comment="评价标签,逗号分隔")
  1143. content = Column(String(1000), nullable=True, comment="评价内容")
  1144. is_anonymous = Column(Boolean, default=False, comment="是否匿名")
  1145. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1146. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1147. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1148. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1149. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1150. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1151. class BizDeliveryWarning(Base):
  1152. """配送时效预警表"""
  1153. __tablename__ = "biz_delivery_warning"
  1154. id = Column(String(32), primary_key=True, comment="主键ID")
  1155. task_id = Column(String(32), nullable=False, comment="配送任务ID")
  1156. order_id = Column(String(32), nullable=True, comment="订单ID")
  1157. warning_type = Column(String(20), nullable=False, comment="预警类型")
  1158. urgency_level = Column(String(20), nullable=False, comment="紧急程度")
  1159. remaining_minutes = Column(Integer, nullable=True, comment="剩余分钟数")
  1160. message = Column(String(500), nullable=True, comment="预警消息")
  1161. is_sent = Column(Integer, default=0, comment="是否已发送通知")
  1162. sent_time = Column(DateTime, nullable=True, comment="发送时间")
  1163. is_resolved = Column(Integer, default=0, comment="是否已解决")
  1164. resolved_time = Column(DateTime, nullable=True, comment="解决时间")
  1165. resolved_by = Column(String(32), nullable=True, comment="解决人ID")
  1166. resolved_note = Column(String(500), nullable=True, comment="解决备注")
  1167. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1168. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1169. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1170. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1171. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1172. is_del = Column(Integer, default=0, comment="是否删除")
  1173. class BizDeliveryWarningHis(Base):
  1174. """配送时效预警历史表"""
  1175. __tablename__ = "biz_delivery_warning_his"
  1176. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1177. task_id = Column(String(32), nullable=False, comment="配送任务ID")
  1178. order_id = Column(String(32), nullable=True, comment="订单ID")
  1179. warning_type = Column(String(20), nullable=False, comment="预警类型")
  1180. urgency_level = Column(String(20), nullable=False, comment="紧急程度")
  1181. remaining_minutes = Column(Integer, nullable=True, comment="剩余分钟数")
  1182. message = Column(String(500), nullable=True, comment="预警消息")
  1183. is_sent = Column(Integer, default=0, comment="是否已发送通知")
  1184. sent_time = Column(DateTime, nullable=True, comment="发送时间")
  1185. is_resolved = Column(Integer, default=0, comment="是否已解决")
  1186. resolved_time = Column(DateTime, nullable=True, comment="解决时间")
  1187. resolved_by = Column(String(32), nullable=True, comment="解决人ID")
  1188. resolved_note = Column(String(500), nullable=True, comment="解决备注")
  1189. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1190. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1191. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1192. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1193. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1194. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1195. class BizOrderStatusLogHis(Base):
  1196. """订单状态变更日志历史表"""
  1197. __tablename__ = "biz_order_status_log_his"
  1198. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1199. order_id = Column(String(32), nullable=False, comment="订单ID")
  1200. from_status = Column(String(30), nullable=True, comment="变更前状态")
  1201. to_status = Column(String(30), nullable=False, comment="变更后状态")
  1202. operator_id = Column(String(32), nullable=False, comment="操作人ID")
  1203. operator_role = Column(String(20), nullable=False, comment="操作人角色")
  1204. reason = Column(String(500), nullable=True, comment="变更原因")
  1205. note = Column(String(1000), nullable=True, comment="备注")
  1206. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1207. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1208. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1209. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1210. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1211. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1212. class SysApiRequestLogHis(Base):
  1213. """API 请求日志历史表"""
  1214. __tablename__ = "sys_api_request_log_his"
  1215. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1216. http_method = Column(String(10), nullable=False, comment="HTTP 方法")
  1217. path = Column(String(500), nullable=False, comment="请求路径")
  1218. query_string = Column(String(2000), nullable=True, comment="Query 字符串")
  1219. request_body = Column(Text, nullable=True, comment="请求体(截断)")
  1220. response_body = Column(Text, nullable=True, comment="响应体(截断)")
  1221. status_code = Column(Integer, nullable=False, comment="HTTP 状态码")
  1222. duration_ms = Column(Integer, nullable=False, comment="耗时(ms)")
  1223. user_id = Column(String(32), nullable=True, comment="用户ID")
  1224. username = Column(String(100), nullable=True, comment="用户名")
  1225. role = Column(String(20), nullable=True, comment="角色")
  1226. ip_address = Column(String(50), nullable=True, comment="IP地址")
  1227. user_agent = Column(String(500), nullable=True, comment="User-Agent")
  1228. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1229. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1230. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1231. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1232. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1233. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1234. class SysPasswordHistoryHis(Base):
  1235. """密码修改历史表(历史)"""
  1236. __tablename__ = "sys_password_history_his"
  1237. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1238. user_id = Column(String(32), nullable=False, comment="用户ID")
  1239. operation_type = Column(String(20), nullable=False, comment="操作类型")
  1240. operator_id = Column(String(32), nullable=True, comment="操作人ID(重置时)")
  1241. operator_name = Column(String(100), nullable=True, comment="操作人姓名")
  1242. ip_address = Column(String(50), nullable=True, comment="IP地址")
  1243. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1244. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1245. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1246. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1247. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1248. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1249. # =========================================
  1250. # 扩展模块
  1251. # =========================================
  1252. class SysUpgradeLog(Base):
  1253. """系统更新日志表"""
  1254. __tablename__ = "sys_upgrade_log"
  1255. id = Column(String(32), primary_key=True, comment="主键ID")
  1256. version = Column(String(50), nullable=False, comment="版本号")
  1257. title = Column(String(200), nullable=False, comment="更新标题")
  1258. date = Column(DateTime, nullable=False, comment="更新日期")
  1259. detail = Column(Text, nullable=True, comment="更新详情(JSON数组)")
  1260. require_re_login = Column(Integer, default=0, comment="是否需要重新登录: 0-否, 1-是")
  1261. remark = Column(String(500), nullable=True, comment="备注")
  1262. is_del = Column(Integer, default=0, comment="是否删除")
  1263. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1264. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1265. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1266. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1267. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1268. class SysUpgradeLogHis(Base):
  1269. """系统更新日志历史表"""
  1270. __tablename__ = "sys_upgrade_log_his"
  1271. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1272. version = Column(String(50), nullable=False, comment="版本号")
  1273. title = Column(String(200), nullable=False, comment="更新标题")
  1274. date = Column(DateTime, nullable=False, comment="更新日期")
  1275. detail = Column(Text, nullable=True, comment="更新详情(JSON数组)")
  1276. require_re_login = Column(Integer, default=0, comment="是否需要重新登录: 0-否, 1-是")
  1277. remark = Column(String(500), nullable=True, comment="备注")
  1278. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1279. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1280. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1281. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1282. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1283. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")
  1284. class SysComment(Base):
  1285. """系统评论表"""
  1286. __tablename__ = "sys_comment"
  1287. id = Column(String(32), primary_key=True, comment="主键ID")
  1288. parent_id = Column(String(32), nullable=True, comment="父评论ID")
  1289. author = Column(String(100), nullable=False, comment="评论者")
  1290. author_id = Column(String(32), nullable=True, comment="评论者ID")
  1291. content = Column(String(1000), nullable=False, comment="评论内容")
  1292. target_type = Column(String(50), nullable=True, comment="目标类型")
  1293. target_id = Column(String(32), nullable=True, comment="目标ID")
  1294. is_del = Column(Integer, default=0, comment="是否删除")
  1295. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1296. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1297. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1298. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1299. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1300. class BizClientCart(Base):
  1301. """客户购物车"""
  1302. __tablename__ = "biz_client_cart"
  1303. id = Column(String(32), primary_key=True, comment="主键ID")
  1304. client_id = Column(String(32), nullable=False, comment="客户用户ID")
  1305. price_list_id = Column(String(32), nullable=False, comment="价格清单ID")
  1306. product_id = Column(String(32), nullable=False, comment="商品ID")
  1307. unit_id = Column(String(32), nullable=False, comment="单位ID")
  1308. quantity = Column(Numeric(12, 4), nullable=False, default=0, comment="数量")
  1309. unit_price = Column(Numeric(12, 2), nullable=False, default=0, comment="单价(元)")
  1310. amount = Column(Numeric(12, 2), nullable=False, default=0, comment="行金额(元)")
  1311. product_name = Column(String(200), nullable=True, comment="商品名称快照")
  1312. unit_name = Column(String(50), nullable=True, comment="单位名称快照")
  1313. category_name = Column(String(100), nullable=True, comment="分类名称快照")
  1314. image_url = Column(String(500), nullable=True, comment="图片")
  1315. is_del = Column(Integer, default=0, comment="是否删除")
  1316. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1317. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1318. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1319. update_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="修改时间")
  1320. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1321. class BizClientCartHis(Base):
  1322. """客户购物车历史"""
  1323. __tablename__ = "biz_client_cart_his"
  1324. id = Column(String(32), primary_key=True, nullable=False, comment="主键ID")
  1325. client_id = Column(String(32), nullable=False, comment="客户用户ID")
  1326. price_list_id = Column(String(32), nullable=False, comment="价格清单ID")
  1327. product_id = Column(String(32), nullable=False, comment="商品ID")
  1328. unit_id = Column(String(32), nullable=False, comment="单位ID")
  1329. quantity = Column(Numeric(12, 4), nullable=False, default=0, comment="数量")
  1330. unit_price = Column(Numeric(12, 2), nullable=False, default=0, comment="单价(元)")
  1331. amount = Column(Numeric(12, 2), nullable=False, default=0, comment="行金额(元)")
  1332. product_name = Column(String(200), nullable=True, comment="商品名称快照")
  1333. unit_name = Column(String(50), nullable=True, comment="单位名称快照")
  1334. category_name = Column(String(100), nullable=True, comment="分类名称快照")
  1335. image_url = Column(String(500), nullable=True, comment="图片")
  1336. create_at = Column(DateTime, default=datetime.now, comment="创建时间")
  1337. create_by = Column(String(32), nullable=True, comment="创建人ID")
  1338. create_name = Column(String(100), nullable=True, comment="创建人姓名")
  1339. update_at = Column(DateTime, nullable=True, comment="修改时间")
  1340. update_by = Column(String(32), nullable=True, comment="修改人ID")
  1341. his_create_at = Column(DateTime, default=datetime.now, comment="历史记录创建时间")