php – 计算销售订单和采购订单的确切保证金

前端之家收集整理的这篇文章主要介绍了php – 计算销售订单和采购订单的确切保证金前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图生成一个报告,从下面的数据库计算边际.问题是产品的成本(存在于purchase_order_products表中)可能会发生变化.

2017-06-08的ID为4022的产品成本为1110,但2017-07-25的成本为1094.这令人困惑.我无法获得每种产品的确切成本.

我写了一个PHP算法,它循环遍历所有订单和采购订单,并使用最旧的成本到最新的成本.但该算法具有非常高的时间复杂度.这可以只使用mySQL查询吗?

请检查以下场景:

公司在第1天创建了产品X的采购订单:数量3,成本10.

客户购买2件产品X售价:第1天12件(库存中仍有1件,成本10件)

公司为产品X创建了采购订单:数量4,成本9.第2天

客户购买3件产品X售价:第2天12件

客户购买2件产品X售价:第3天12件

公司在第3天创建了产品X的采购订单:数量2,成本11.

客户购买2件产品X售价:第3天12件

那个报告:

第1天:
卖2件产品X买12,成本10,利润:2 *(12 – 10)

第2天:
出售3件产品X为12件,1件成本为10件,2件成本为9件,

利润:1 *(12 – 10)2 *(12 – 9)

第3天:
卖2件产品X买12,成本9,利润:2 *(12 – 9)

卖2件产品X买12,成本11,利润:2 *(12 – 11)

因此,新销售产品的利润使用其相应的成本计算.希望你明白我的意思.

数据库结构:

4个产品来自数据库

产品购买以上产品的订单

已售产品

Dump File Attached here

给定时间内物体的价格由公式给出:“库存总价/库存总数”.

要实现此目的,您需要执行两个查询

>第一个知道销售商品数量(总价格和数量):

sql

SELECT SUM(row_total) sale_total_cost,SUM(quantity_ordered) sale_total_number
    FROM sales_order_item soi
    JOIN sales_order so ON soi.sales_order_id=so.id
    WHERE so.purchase_date<'2017-06-07 15:03:30'
    AND soi.product_id=4160;

>第二个知道你买了多少产品

sql

SELECT SUM(pop.cost * pop.quantity) purchase_total_price,SUM(pop.quantity) purchase_total_number
    FROM purchase_order_products pop
    JOIN purchase_order po ON pop.purchase_order_id=po.id
    WHERE po.created_at<'2017-06-07 15:03:30'
        AND pop.product_id=4160;

>在2017-02-01 14:23:35,产品4160的价格是:

(purchase_total_price – sale_total_cost)/(purchase_total_number – sale_total_number)

问题是你的“sales_order”表在2017-02-01 14:23:35开始,而你的“purchase_order”表在2017-06-07 08:55:48开始.因此,只要您无法从一开始就跟踪所有购买,结果就会不连贯.

编辑:

如果您可以修改表结构,并且只对将来的销售感兴趣.

添加purchase_order_products表中销售的商品数量

您必须修改purchase_order_products以获得每种产品的消耗:

更改表`purchase_order_products`添加列sold_items INT DEFAULT 0;

初始化数据

为了使其工作,您必须使sold_items列反映您的真实库存

您应该使用以下请求初始化表
更新`purchase_order_products` SET sold_items =数量;

然后使用您的每个产品的确切库存手动更新表格(这意味着quantity_ordered-sold_items必须反映您的实际库存.

这只需要进行一次.

将购买价格添加到sales_order_item表

ALTER TABLE sales_order_item ADD total_purchase_price INT DEFAULT NULL

输入新的销售订单

输入新的销售订单时,您必须使用以下命令获取包含剩余项目的最早的采购订单:

SELECT * FROM`sourcing_order_products` WHERE quantity!= sold_items其中product_id = 4160 ORDER BY`seasure_order_id` LIMIT 1;

然后,您将增加sold_items值,并计算总购买价格(总和)以填充total_purchase_price列.

计算保证金

可以使用sales_order_item表中row_total和total_purchase_price之间的差异轻松计算保证金

原文链接:https://www.f2er.com/php/134731.html

猜你在找的PHP相关文章