package repository import ( "database/sql" "errors" "fmt" "gin-vue-admin/models" "time" "github.com/uniplaces/carbon" ) func QueryBusinessTrendList(db *sql.DB, t string, employeeId int, chainCode string) (interface{}, error) { hospitalLocalId, err := QueryHospitalLocalIDByEmployeeLocalID(db, employeeId) if err != nil { return nil, err } // 计算时间 及格式化的模板 var formatSQL, formatTime string var sub int if len(t) == 10 { formatSQL = "%Y-%m-%d" formatTime = "2006-01-02" sub = 6 } else if len(t) == 7 { formatSQL = "%Y-%m" formatTime = "2006-01" sub = 6 } else if len(t) == 4 { formatSQL = "%Y" formatTime = "2006" sub = 3 } else { return nil, errors.New("time error") } c, err := carbon.Parse(formatTime, t, "UTC") if err != nil { return nil, err } var endT *carbon.Carbon if len(t) == 10 { endT = c.SubDays(sub) } else if len(t) == 7 { endT = c.SubMonths(sub) } else if len(t) == 4 { endT = c.SubYears(sub) } else { return nil, errors.New("time error") } var response models.BusinessTrend response.List = make([]models.BusinessTrendList, 0) response.Chart = make([]models.LineChart, 0) // 构造list 数据 for i := 0; i <= sub; i++ { var str string if len(t) == 10 { str = endT.AddDays(i).Format(formatTime) } else if len(t) == 7 { str = endT.AddMonths(i).Format(formatTime) } else { str = endT.AddYears(i).Format(formatTime) } var temp models.BusinessTrendList temp.Time = str //1 - 首页营业额: //按已结账单 + 次卡充值+赠送金额结算 (不计算次卡消费) billOfSettlement, err := BillOfSettlement(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } meterCardRecharge, err := MeterCardRecharge(db, str, formatSQL, 0, hospitalLocalId) if err != nil { return nil, err } temp.Turnover = billOfSettlement + meterCardRecharge //3、毛利 //毛利=营业额-成本 billByCost, err := BillByCost(db, str, formatSQL, hospitalLocalId, chainCode) if err != nil { return nil, err } temp.Grossprofit = temp.Turnover - billByCost //2 - 首页支出: //1. 退押金 retreatDepositMoney, err := RetreatDepositMoney(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } //2. 退会员卡 retreatConsumerCard, err := RetreatConsumerCard(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } //3. 退次卡 retreatMeterCard, err := RetreatMeterCard(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } //4. 支出管理中的 outChargeBill, err := OutChargeBill(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } //5. 预付款 preOutFundBill, err := PreOutFundBill(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } //6. 入库结算 stockInBill, err := StockInBill(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } temp.Expend = retreatDepositMoney + retreatConsumerCard + retreatMeterCard + outChargeBill + preOutFundBill + stockInBill // 支出减掉 退预付款的金额 //RetreatPreOutFundBill retreatPreOutFundBill, err := RetreatPreOutFundBill(db, str, formatSQL, hospitalLocalId) if err != nil { return nil, err } temp.Expend -= retreatPreOutFundBill response.List = append(response.List, temp) // 当天 if t == str { response.Turnover = temp.Turnover response.Grossprofit = temp.Grossprofit response.Expend = temp.Expend } var c1 models.LineChart var c2 models.LineChart var c3 models.LineChart c1.Year = str c1.Type = "营业额" c1.Value = fmt.Sprintf("%.2f", temp.Turnover) c2.Year = str c2.Type = "毛利" c2.Value = fmt.Sprintf("%.2f", temp.Grossprofit) c3.Year = str c3.Type = "支出" c3.Value = fmt.Sprintf("%.2f", temp.Expend) response.Chart = append(response.Chart, c1, c2, c3) } fmt.Println(time.Now()) return response, nil }