Files
jx-print/services/sim.go
2021-07-23 14:11:59 +08:00

108 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package services
import (
"git.rosy.net.cn/baseapi/platformapi/tibiotapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/dao"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
putils "git.rosy.net.cn/jx-print/putils"
"git.rosy.net.cn/jx-print/services/api"
"time"
)
//每日流量卡流量结算
func SimFlowDaySettle() (err error) {
var (
db = globals.GetDB()
now = time.Now()
monthBegin = utils.Str2Time(now.Format("2006-01") + "-01 00:00:00")
monthEnd = utils.Str2Time(monthBegin.AddDate(0, 1, 0).AddDate(0, 0, -1).Format("2006-01-02") + " 23:59:59")
)
globals.SugarLogger.Debugf("SimFlowDaySettle Begin monthBegin %v, monthEnd %v", monthBegin, monthEnd)
//月末好像不用算超不超了
if now.Month().String() != now.AddDate(0, 0, -1).Month().String() {
return
}
//找出所有状态不为 超流量的打印机iccid卡
printers, _ := dao.GetPrinters(db, 0, "", 0, 0, 0)
for _, v := range printers {
//查询前一日使用的流量数
if v.IccID != "" {
flowExpend := &model.SimFlowExpend{
IccID: v.IccID,
CreatedAt: &now,
UpdatedAt: &now,
LastOperator: "jxadmin",
}
var (
getCardInfoResult *tibiotapi.IotDataResult
getCardInfoResultMonth *tibiotapi.IotDataMonthResult
)
if getCardInfoResult, err = api.TibiotAPI.IotData(v.IccID, now.AddDate(0, 0, -1).Format("2006-01-02")); err == nil {
//表示还没有同步前一天的流量,只能自己算了
if getCardInfoResult == nil || getCardInfoResult.SyncStatus == "1" || getCardInfoResult.CardFlow == "0KB" || getCardInfoResult.CardFlow == "" { //未同步
//先查当月用的总的, 减去当月已经用的总的,就是昨天用的
if getCardInfoResultMonth, err = api.TibiotAPI.IotDataMonth(v.IccID); err == nil {
//表示当月用的总的也还没同步。只有去查卡信息中的总流量使用,减去所有总使用,就是昨天用的。。太折磨了先不写
if getCardInfoResultMonth == nil || getCardInfoResultMonth.CardFlow == "" || getCardInfoResultMonth.CardFlow == "0KB" {
//api.TibiotAPI.BatchQueryCardInfo(1)
} else {
if sumExpend, err := dao.GetSimFlowExpendSum(db, v.IccID, monthBegin, monthEnd); err == nil {
cardFlow := putils.Flow2KB(putils.SplitFlowAndUnit(getCardInfoResultMonth.CardFlow))
flowExpend.Flow, flowExpend.FlowUnit = putils.FlowKB2Other(cardFlow - sumExpend.Flow)
}
}
}
} else {
flowExpend.Flow, flowExpend.FlowUnit = putils.SplitFlowAndUnit(getCardInfoResult.CardFlow)
}
}
//可能有精度误差
if flowExpend.Flow > 0.1 && flowExpend.FlowUnit != "" {
err = dao.Insert(db, flowExpend)
}
//算是否超了一个月的流量了
//一个月总的收入流量 - 一个月总的支出流量 <= 0
sumIncome, _ := dao.GetSimFlowIncomeSum(db, v.IccID, monthBegin, monthEnd)
sumExpend, _ := dao.GetSimFlowExpendSum(db, v.IccID, monthBegin, monthEnd)
if sumIncome != nil && sumExpend != nil {
if sumIncome.Flow-sumExpend.Flow <= 0 {
v.FlowFlag = 1
err = dao.Update(db, v, "flow_flag")
}
}
}
}
return err
}
//每月流量卡流量划转
func SimFlowMonthSettle() {
var (
db = globals.GetDB()
now = time.Now()
)
//..每月1号划转
if time.Now().Day() != 1 {
return
}
//找出所有有iccid 卡的
printers, _ := dao.GetPrinters(db, 0, "", 0, 0, 0)
for _, v := range printers {
if v.IccID != "" {
flowIncome := &model.SimFlowIncome{
IccID: v.IccID,
CreatedAt: &now,
UpdatedAt: &now,
LastOperator: "jxadmin",
IncomeType: model.FlowIncomeTypeJX,
Flow: 30,
FlowUnit: "MB",
}
dao.Insert(db, flowIncome)
}
}
}