|
@@ -8,15 +8,16 @@ import (
|
|
|
"hongze/fms_api/controller/resp"
|
|
|
"hongze/fms_api/global"
|
|
|
"hongze/fms_api/models"
|
|
|
+ "hongze/fms_api/models/fms"
|
|
|
"hongze/fms_api/services/alarm_msg"
|
|
|
"hongze/fms_api/utils"
|
|
|
+ "strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
// // StatisticController 统计报告
|
|
|
type StatisticController struct{}
|
|
|
|
|
|
-
|
|
|
// Home
|
|
|
// @Title 获取首页工作台数据
|
|
|
// @Description 获取首页工作台数据接口
|
|
@@ -27,7 +28,7 @@ func (this *StatisticController) Statistic(c *gin.Context) {
|
|
|
//近6收入统计
|
|
|
var incomeList models.IncomeChartResp
|
|
|
ch := make(chan models.IncomeChartResp, 1)
|
|
|
- go getIncomeList(ch)
|
|
|
+ go getIncomeListV2(ch)
|
|
|
|
|
|
for v := range ch {
|
|
|
incomeList = v
|
|
@@ -37,7 +38,7 @@ func (this *StatisticController) Statistic(c *gin.Context) {
|
|
|
resp.OkData("获取成功", incomeList, c)
|
|
|
}
|
|
|
|
|
|
-//获取收入统计
|
|
|
+// 获取收入统计
|
|
|
func getIncomeList(ch chan models.IncomeChartResp) (incomeChart models.IncomeChartResp, err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
@@ -77,7 +78,7 @@ func getIncomeList(ch chan models.IncomeChartResp) (incomeChart models.IncomeCha
|
|
|
// endDate = fmt.Sprint(endDate, "-01")
|
|
|
//}
|
|
|
endDate = fmt.Sprint(endDate, "-01")
|
|
|
- cond := ` AND create_time >= '`+startDate +`' AND create_time < '`+endDate +`' `
|
|
|
+ cond := ` AND create_time >= '` + startDate + `' AND create_time < '` + endDate + `' `
|
|
|
|
|
|
item, countErr := models.GetIncomeListCount(cond)
|
|
|
if countErr != nil && countErr != utils.ErrNoRow {
|
|
@@ -105,3 +106,97 @@ func getIncomeList(ch chan models.IncomeChartResp) (incomeChart models.IncomeCha
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func getIncomeListV2(ch chan models.IncomeChartResp) (incomeChart models.IncomeChartResp, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ global.LOG.Error(err)
|
|
|
+ go alarm_msg.SendAlarmMsg("获取近两年的收入统计数据异常,Err:"+err.Error(), 3)
|
|
|
+ //go utils.SendEmail(utils.APPNAME+"获取近12个月的收入统计数据异常:"+time.Now().Format("2006-01-02 15:04:05"), err.Error(), utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ ch <- incomeChart
|
|
|
+ }()
|
|
|
+ todayStr := utils.GetToday("20060102")
|
|
|
+ key := "admin:home:fmsIncomeList:" + todayStr
|
|
|
+
|
|
|
+ redisJsonData, redisErr := global.Redis.Get(context.TODO(), key).Result()
|
|
|
+ if redisErr != nil {
|
|
|
+ var dateSlice []string
|
|
|
+ var contractMoneySlice []float64
|
|
|
+ var ArrivalMoneySlice []float64
|
|
|
+
|
|
|
+ yearNum := time.Now().Year() - time.Now().AddDate(-2, 0, 0).Year()
|
|
|
+ monthNum := time.Now().Month() - 1
|
|
|
+ numMonth := yearNum*12 + int(monthNum) //距离2021-01存在多少个月
|
|
|
+
|
|
|
+ for i := numMonth; i >= 0; i-- {
|
|
|
+ timeNow, _ := time.Parse("2006-01", time.Now().Format("2006-01"))
|
|
|
+ dateSlice = append(dateSlice, timeNow.AddDate(0, -i, 0).Format("06/01"))
|
|
|
+ //开始日期
|
|
|
+ startDate := timeNow.AddDate(0, -i, 0).Format("2006-01")
|
|
|
+ startDate = fmt.Sprint(startDate, "-01")
|
|
|
+
|
|
|
+ //结束日期
|
|
|
+ endDateTime := timeNow.AddDate(0, -i+1, -1)
|
|
|
+ endDate := endDateTime.Format(utils.FormatDate)
|
|
|
+
|
|
|
+ //因为就算是当月的后续事件还没到,也要计入数据统计,所以不做限制到当天处理
|
|
|
+ //if endDateTime.After(time.Now()) {
|
|
|
+ // endDate = time.Now().AddDate(0, 0, 1).Format(utils.FormatDate)
|
|
|
+ //} else {
|
|
|
+ // endDate = fmt.Sprint(endDate, "-01")
|
|
|
+ //}
|
|
|
+
|
|
|
+ cond := `1 = 1`
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+
|
|
|
+ st := fmt.Sprint(startDate, " 00:00:00")
|
|
|
+ ed := fmt.Sprint(endDate, " 23:59:59")
|
|
|
+ cond += ` AND ((c.invoice_time BETWEEN ? AND ?) or (d.invoice_time BETWEEN ? AND ?))`
|
|
|
+ pars = append(pars, st, ed, st, ed)
|
|
|
+
|
|
|
+ summaryIds, e := fms.GetInvoicePaymentCensusSummaryDataIds(cond, pars)
|
|
|
+ if e != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开票到款金额合计(换算后)
|
|
|
+ var invoiceTotal, paymentTotal float64
|
|
|
+
|
|
|
+ if len(summaryIds) > 0 {
|
|
|
+ amountTotalCond := `a.id IN ?`
|
|
|
+ amountTotalPars := make([]interface{}, 0)
|
|
|
+ amountTotalPars = append(amountTotalPars, summaryIds)
|
|
|
+ invoiceSum, e := fms.GetContractSummaryInvoicePaymentAmountTotal(amountTotalCond, amountTotalPars, 1)
|
|
|
+ if e != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ invoiceTotal, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", invoiceSum), 64)
|
|
|
+ paymentSum, e := fms.GetContractSummaryInvoicePaymentAmountTotal(amountTotalCond, amountTotalPars, 2)
|
|
|
+ if e != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ paymentTotal, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", paymentSum), 64)
|
|
|
+ }
|
|
|
+
|
|
|
+ contractMoneySlice = append(contractMoneySlice, invoiceTotal)
|
|
|
+ ArrivalMoneySlice = append(ArrivalMoneySlice, paymentTotal)
|
|
|
+ }
|
|
|
+ incomeChart.Title = "开票到款统计图"
|
|
|
+ incomeChart.Date = dateSlice
|
|
|
+ incomeChart.ContractMoney = contractMoneySlice
|
|
|
+ incomeChart.ArrivalMoney = ArrivalMoneySlice
|
|
|
+
|
|
|
+ redisJsonData, err := json.Marshal(incomeChart)
|
|
|
+ if err == nil {
|
|
|
+ global.Redis.SetEX(context.TODO(), key, string(redisJsonData), time.Minute*30)
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ err = json.Unmarshal([]byte(redisJsonData), &incomeChart)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("近两年的收入统计数据,json转换失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|