编写程序生成发票的标准方法是啥?

Posted

技术标签:

【中文标题】编写程序生成发票的标准方法是啥?【英文标题】:What is the standard way to write a program to generate invoices?编写程序生成发票的标准方法是什么? 【发布时间】:2011-03-15 08:38:40 【问题描述】:

我正在构建一个计费系统。系统需要为客户生成月度发票。

我现在正在做的是使用 For 循环来检查所有客户他们以前的发票,并决定是否是时候为客户生成发票了。

如果数据库中有大量客户端,我认为这样做可能会非常繁重。

生成发票的标准方法是什么?是否可以制作记录客户下一个发票日期的 cron 作业,并且只在需要生成发票时检查特定客户。

谢谢一百万

【问题讨论】:

通过阅读您的问题,我想说您远没有资格这样做。您似乎缺少业务流程和应用程序编程方面的背景。这可能比一些关于 SO 的问题更能解决。 数据库 101:不要使用 for 循环来处理数据库中的大量数据。这就是 SELECT/INSERT/UPDATE/DELETE 的用途。 @Marcelo Cantos 我使用 hibernate 来获取数据并使用 for 循环来操作本地机器中的返回数据 除非在 for 循环中发生了一些不能用数据库逻辑表达的事情,否则您不想使用这种效率极低的解决方案。尽可能使用基于集合的操作,当你使用它时,转储 Hibernate(请参阅 here 了解我的基本原理的冗长版本;另请参阅 @Evgeny 对同一问题的回答以获得更具体的批评NHibernate 也适用于 Hibernate)。 有趣的是,Leon 的“尖头发老板”不知道怎么做,Leon 也不知道,但他们都知道软件应该用什么语言编写。 【参考方案1】:

你提到了一个数据库。你为什么不使用它?

在“上一次无效的日期”列上添加索引,添加 WHERE 子句以仅返回最后一张发票是在一个多月前发送的客户。

【讨论】:

【参考方案2】:

leon,我不确定是否真的有这样的标准方式。每个公司文化都会在一定程度上定义如何最好地运行流程以满足他们的要求。您会发现一些应用程序既可以进行按需处理的极端处理,也可以将其他一些应用程序作为批处理运行发票。一般来说,构建你的接口来适应两者都是很好的。您可能还必须考虑第 3 方在某些时候通过网络服务等要求您的 API 的可能性。(为了节省成本,有问题的公司实际上可能使用局服务来“发布”发票 - 我从一开始就知道这一点手经验)。您的数据库结构还必须相当健壮,并且有足够的回退点,以防任何进程失败等等。

无论如何 - 辩论... :)

吉姆

【讨论】:

【参考方案3】:

生成发票的标准方法是什么?是否可以制作记录客户下一个发票日期的 cron 作业,并且只在需要生成发票时检查特定客户。

没有标准的方法。但这个任务确实是批处理作业的典型候选。如果您在同一时间或每天对所有客户进行计费并仅选择根据某些日期标准计费的客户,请在月底运行它。对于每个客户,做你必须做的。根据您的数据大小,JPA 可能不合适(或者考虑 Hibernate 的 StatelessSession 甚至忘记它)。

对于调度程序部分,我经常看到像 Quartz 这样的企业调度程序,甚至是 Control-M、Dollar-U、TNG Workload 等更大的专用解决方案。

我强烈建议不要为每个客户创建一份工作。这确实不是一个好的解决方案(管理地狱,无法扩展等)。

【讨论】:

以上是关于编写程序生成发票的标准方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用Java语言编写的源程序保存时的文件扩展名是啥

使用Java语言编写的源程序保存时的文件扩展名是啥

为clojure编写嵌套定义语句(如在方案中)的标准方法是啥?

编写和运行Java程序的步骤是啥?每一步的结果是啥?在JDK中,Java语言的编译命令是啥?急需答案啊。

在用 Actionscript 和 MXML 编写的 Flex 程序中调试内存泄漏的最佳方法是啥?

编写伪装成 TTY 的程序