|
|
@@ -924,61 +924,23 @@ func (r *Ermcp3AreaSpotPLReport) calc() {
|
|
|
r.UNITIDNAME = mtpcache.GetEnumDicitemName(r.UNITID)
|
|
|
r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
|
|
|
r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
|
|
|
-
|
|
|
- if r.ORIQTY >= 0 && r.CURQTY >= 0 {
|
|
|
- // 1.当期初量大于等于0时:期末量也大于等于0时:
|
|
|
- // 期末均价 CurAveragePrice=(今采购额+期初额)/(今采购量+期初量)
|
|
|
- // 期末额 CurAmoun =(今采购额 + 期初额)- 今销售量 * 期末均价
|
|
|
- // 现货损益 ActualPL = 今销售额 - 今销售量 * 期末均价
|
|
|
- // 浮动损益 = 期末市值 - 期末额
|
|
|
- r.CURAVERAGEPRICE = (r.TODAYBUYAMOUNT + r.ORIAMOUNT) / (r.TODAYBUYQTY + r.ORIQTY)
|
|
|
- r.CURAMOUNT = (r.TODAYBUYAMOUNT + r.ORIAMOUNT) - r.TODAYSELLQTY*r.CURAVERAGEPRICE
|
|
|
- r.ACTUALPL = r.TODAYSELLAMOUNT - r.TODAYSELLQTY*r.CURAVERAGEPRICE
|
|
|
- r.FLOATPL = r.CURMARKETVALUE - r.CURAMOUNT
|
|
|
-
|
|
|
- } else if r.ORIQTY >= 0 && r.CURQTY < 0 {
|
|
|
- // 2.当期初量大于等于0时:期末量也小于0时:
|
|
|
- //期末均价=今销售额/今销售量
|
|
|
- //期末额=(今采购量+期初量)*期末均价-今销售额
|
|
|
- //现货损益=(今采购量+期初量)*期末均价-(今采购额+期初额)
|
|
|
- //浮动损益 =期末市值 - 期末额
|
|
|
- if r.TODAYSELLQTY > 0 {
|
|
|
- r.CURAVERAGEPRICE = r.TODAYSELLAMOUNT / r.TODAYSELLQTY
|
|
|
- } else {
|
|
|
- r.CURAVERAGEPRICE = 0
|
|
|
- }
|
|
|
- r.CURAMOUNT = (r.TODAYBUYQTY+r.ORIQTY)*r.CURAVERAGEPRICE - r.TODAYSELLAMOUNT
|
|
|
- r.ACTUALPL = (r.TODAYBUYQTY+r.ORIQTY)*r.CURAVERAGEPRICE - (r.TODAYBUYAMOUNT + r.ORIAMOUNT)
|
|
|
- r.FLOATPL = r.CURMARKETVALUE - r.CURAMOUNT
|
|
|
- } else if r.ORIQTY < 0 && r.CURQTY >= 0 {
|
|
|
- // 3.当期初量小于0时:期末量也大于等于0时:
|
|
|
- //期末均价=今采购额/今采购量
|
|
|
- //期末额=今采购额-(今销售量-期初量)*期末均价
|
|
|
- //现货损益=(今销售额-期初额)-(今销售量-期初量)*期末均价
|
|
|
- //浮动损益 =期末市值 - 期末额
|
|
|
- if r.TODAYBUYQTY > 0 {
|
|
|
- r.CURAVERAGEPRICE = r.TODAYBUYAMOUNT / r.TODAYBUYQTY
|
|
|
- } else {
|
|
|
- r.CURAVERAGEPRICE = 0
|
|
|
- }
|
|
|
- r.CURAMOUNT = r.TODAYBUYAMOUNT - (r.TODAYSELLQTY-r.ORIQTY)*r.CURAVERAGEPRICE
|
|
|
- r.ACTUALPL = (r.TODAYSELLAMOUNT - r.ORIAMOUNT) - (r.TODAYSELLQTY-r.ORIQTY)*r.CURAVERAGEPRICE
|
|
|
- r.FLOATPL = r.CURMARKETVALUE - r.CURAMOUNT
|
|
|
- } else if r.ORIQTY < 0 && r.CURQTY < 0 {
|
|
|
- // 4.当期初量小于0时:期末量也小于0时:
|
|
|
- //期末均价=(今销售额-期初额)/(今销售量-期初量)
|
|
|
- //期末额=今采购量*期末均价-(今销售额-期初额)
|
|
|
- //现货损益=今采购量*期末均价-今采购额
|
|
|
- //浮动损益 =期末市值 - 期末额
|
|
|
- if r.TODAYSELLQTY-r.ORIQTY != 0 {
|
|
|
- r.CURAVERAGEPRICE = (r.TODAYSELLAMOUNT - r.ORIAMOUNT) / (r.TODAYSELLQTY - r.ORIQTY)
|
|
|
+ fCalcAvePrice := func(avePrice *float64, amount, qty float64) {
|
|
|
+ if qty > 1e-10 {
|
|
|
+ *avePrice = amount / qty
|
|
|
+ } else if qty < -1e-10 {
|
|
|
+ *avePrice = amount / qty
|
|
|
} else {
|
|
|
- r.CURAVERAGEPRICE = 0
|
|
|
+ *avePrice = 0
|
|
|
}
|
|
|
- r.CURAMOUNT = r.TODAYBUYQTY*r.CURAVERAGEPRICE - (r.TODAYSELLAMOUNT - r.ORIAMOUNT)
|
|
|
- r.ACTUALPL = r.TODAYBUYQTY*r.CURAVERAGEPRICE - r.TODAYBUYAMOUNT
|
|
|
- r.FLOATPL = r.CURMARKETVALUE - r.CURAVERAGEPRICE
|
|
|
}
|
|
|
+ // 期初均价
|
|
|
+ fCalcAvePrice(&r.ORIAVERAGEPRICE, r.ORIAMOUNT, r.ORIQTY)
|
|
|
+ // 期末均价
|
|
|
+ fCalcAvePrice(&r.CURAVERAGEPRICE, r.CURAMOUNT, r.CURQTY)
|
|
|
+ // 今采购均价
|
|
|
+ fCalcAvePrice(&r.TODAYBUYAVERAGEPRICE, r.TODAYBUYAMOUNT, r.TODAYBUYQTY)
|
|
|
+ // 今销售均价
|
|
|
+ fCalcAvePrice(&r.TODAYSELLAVERAGEPRICE, r.TODAYSELLAMOUNT, r.TODAYSELLQTY)
|
|
|
}
|
|
|
|
|
|
func (r *Ermcp3AreaSpotPLReport) buildSql() string {
|
|
|
@@ -1018,8 +980,11 @@ func (r *Ermcp3AreaSpotPLReport) buildSqlDay() string {
|
|
|
" sum(t.CURSELLQTY) CURSELLQTY," +
|
|
|
" sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
|
|
|
" sum(t.CURQTY) CURQTY," +
|
|
|
+ " sum(t.CURAMOUNT) CURAMOUNT," +
|
|
|
" max(t.CURSPOTPRICE) CURSPOTPRICE," +
|
|
|
" sum(t.CURMARKETVALUE) CURMARKETVALUE," +
|
|
|
+ " sum(t.ACTUALPL) ACTUALPL," +
|
|
|
+ " sum(t.FLOATPL) FLOATPL," +
|
|
|
" sum(t.TODAYINQTY) TODAYINQTY," +
|
|
|
" sum(t.TODAYOUTQTY) TODAYOUTQTY" +
|
|
|
" FROM RECKON_ERMCP_AREASPOTPL t" +
|
|
|
@@ -1071,8 +1036,11 @@ func (r *Ermcp3AreaSpotPLReport) buildSqlDayDetail() string {
|
|
|
" sum(t.CURSELLQTY) CURSELLQTY," +
|
|
|
" sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
|
|
|
" sum(t.CURQTY) CURQTY," +
|
|
|
+ " sum(t.CURAMOUNT) CURAMOUNT," +
|
|
|
" max(t.CURSPOTPRICE) CURSPOTPRICE," +
|
|
|
" sum(t.CURMARKETVALUE) CURMARKETVALUE," +
|
|
|
+ " sum(t.ACTUALPL) ACTUALPL," +
|
|
|
+ " sum(t.FLOATPL) FLOATPL," +
|
|
|
" sum(t.TODAYINQTY) TODAYINQTY," +
|
|
|
" sum(t.TODAYOUTQTY) TODAYOUTQTY" +
|
|
|
" FROM RECKON_ERMCP_AREASPOTPL t" +
|
|
|
@@ -1127,8 +1095,11 @@ func (r *Ermcp3AreaSpotPLReport) buildSqlCycle() string {
|
|
|
" sum(t.CURSELLQTY) CURSELLQTY," +
|
|
|
" sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
|
|
|
" sum(t.CURQTY) CURQTY," +
|
|
|
+ " sum(t.CURAMOUNT) CURAMOUNT," +
|
|
|
" max(t.CURSPOTPRICE) CURSPOTPRICE," +
|
|
|
" sum(t.CURMARKETVALUE) CURMARKETVALUE," +
|
|
|
+ " sum(t.ACTUALPL) ACTUALPL," +
|
|
|
+ " sum(t.FLOATPL) FLOATPL," +
|
|
|
" sum(t.TODAYINQTY) TODAYINQTY," +
|
|
|
" sum(t.TODAYOUTQTY) TODAYOUTQTY" +
|
|
|
" FROM REPORT_ERMCP_AREASPOTPL t" +
|