123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- package service
- import (
- "strings"
- "time"
- "app.yhyue.com/moapp/jyResourcesCenter/entity"
- "app.yhyue.com/moapp/jyResourcesCenter/rpc/resourcesCenter"
- "app.yhyue.com/moapp/jybase/common"
- )
- // @Author jianghan
- // @Date 2025/2/7
- // @Description 查询可扣费方式
- func ChargeAccount(data *resourcesCenter.ChargeAccountReq) (resp *resourcesCenter.ChargeResp) {
- now := time.Now().Format("2006-01-02")
- jyOrm := entity.JyEngine.NewSession()
- centerOrm := entity.Engine.NewSession()
- var exportPower int
- _, err := jyOrm.Table("entniche_user").Cols("export_power").Where("id = ?", data.EntUserId).Get(&exportPower)
- if err != nil {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "人员数据定制权限查询失败"}
- }
- entInfo, b := entity.Mgo.FindOne("user", map[string]interface{}{"entid": data.EntId})
- var entNums int64
- if b && len(*entInfo) > 0 && (*entInfo)["plan"] != nil {
- plan := (*entInfo)["plan"].(map[string]interface{})
- entNums = common.Int64All(plan["current"])
- } else {
- return &resourcesCenter.ChargeResp{Code: entity.SuccessCode, Message: "未查询到企业数据流量"}
- }
- var personNums int64
- _, err = centerOrm.Table("account_resources").Select("sum(number) as number").
- Where("accountId = ? and endTime >= ? and resourceType = ?", data.UserId, now, "高级字段包").Get(&personNums)
- if err != nil {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "个人流量包查询失败"}
- }
- if exportPower == 1 && (entNums > 0 || personNums == 0) {
- // 企业流量包扣除
- var personLimit []*entity.PersonLimit
- err := jyOrm.SQL(`select a.* from jianyu.entniche_export_limit a inner join jianyu.entniche_user b on (a.user_id=? and a.user_id=b.id and b.export_power=1)`, data.EntUserId).Find(&personLimit)
- if err != nil || personLimit == nil || len(personLimit) == 0 {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "企业个人账号限额查询失败"}
- }
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 0,
- Num1: entNums,
- Num2: personLimit[0].DataLimit,
- Num3: common.Int64All(common.If(personLimit[0].DataLimit == 0, 0, personLimit[0].DataLimit-personLimit[0].ExportNums)),
- Num4: personLimit[0].MaxNums,
- Num5: common.Int64All(common.If(personLimit[0].MaxNums == 0, 0, personLimit[0].MaxNums-personLimit[0].AllExportNums)),
- },
- }
- } else {
- // 个人高级字段包扣除
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 1,
- Num1: personNums,
- },
- }
- }
- }
- // @Author jianghan
- // @Date 2025/2/7
- // @Description
- //
- // 剑鱼定制导出企业流量包扣费,优先使用企业流量包扣费(个人账号有权限且企业下有可导出数量)
- // 个人流量包扣费只使用 高级流量包余额
- func ChargeFunc(data *resourcesCenter.ChargeReq) (resp *resourcesCenter.ChargeResp) {
- if data.ChargeType == 0 {
- // 扣除企业数据包
- return entCharge(data)
- } else {
- // 扣除个人数据包
- return personCharge(data)
- }
- }
- func entCharge(data *resourcesCenter.ChargeReq) (resp *resourcesCenter.ChargeResp) {
- souceOrm := entity.Engine.NewSession()
- jyOrm := entity.JyEngine.NewSession()
- var personLimit []*entity.PersonLimit
- err := jyOrm.SQL(`select a.* from jianyu.entniche_export_limit a inner join jianyu.entniche_user b on (a.user_id=? and a.user_id=b.id and b.export_power=1)`, data.EntUserId).Find(&personLimit)
- if err != nil || personLimit == nil || len(personLimit) == 0 {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "企业个人账号限额查询失败"}
- }
- var entNums int64
- entInfo, b := entity.Mgo.FindOne("user", map[string]interface{}{"entid": data.EntId})
- if b && len(*entInfo) > 0 && (*entInfo)["plan"] != nil {
- plan := (*entInfo)["plan"].(map[string]interface{})
- entNums = common.Int64All(plan["current"])
- } else {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "未查询到企业数据流量"}
- }
- if data.DeductNum > 0 {
- if entNums < data.DeductNum {
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Message: "",
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 0,
- ChargeResult: 0,
- FailMsg: "企业数据流量包余额不足",
- Num1: entNums,
- Num2: personLimit[0].DataLimit,
- Num3: common.Int64All(common.If(personLimit[0].DataLimit == 0 && personLimit[0].MaxNums == 0, 0, personLimit[0].DataLimit-personLimit[0].ExportNums)),
- Num4: personLimit[0].MaxNums,
- Num5: common.Int64All(common.If(personLimit[0].DataLimit == 0 && personLimit[0].MaxNums == 0, 0, personLimit[0].MaxNums-personLimit[0].AllExportNums)),
- },
- }
- }
- // 先更新mgo企业数据总量
- query := map[string]interface{}{
- "entid": data.EntId,
- "plan.current": map[string]interface{}{
- "$gte": data.DeductNum,
- },
- }
- update := map[string]interface{}{
- "$inc": map[string]interface{}{
- "plan.current": -data.DeductNum,
- },
- }
- b = entity.Mgo.Update("user", query, update, false, false)
- if !b {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "企业余额操作失败"}
- }
- err = jyOrm.Begin()
- //更新限额
- if err != nil {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "操作失败," + err.Error()}
- }
- var updateNum = int64(0)
- updateNum, err = jyOrm.Table("entniche_export_limit").Where("id = ? and ((data_limit-export_nums>=? and max_nums-all_export_nums>=?) or (data_limit is null and max_nums is null) or (data_limit is null and max_nums-all_export_nums>=?) or (data_limit-export_nums>=? and max_nums is null))", personLimit[0].Id, data.DeductNum, data.DeductNum, data.DeductNum, data.DeductNum).
- Incr("export_nums", data.DeductNum).
- Incr("all_export_nums", data.DeductNum).
- Update(&entity.PersonLimit{})
- if err != nil {
- _ = jyOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "操作失败," + err.Error()}
- }
- if updateNum <= 0 {
- _ = jyOrm.Rollback()
- _ = jyOrm.Table("entniche_export_limit").Select("*").
- Where("ent_id = ? and user_id = ?", data.EntId, data.EntUserId).Find(&personLimit)
- var msg []string
- if personLimit[0].DataLimit < data.DeductNum {
- msg = append(msg, "超出您的每日导出限额")
- }
- if personLimit[0].MaxNums < data.DeductNum {
- msg = append(msg, "超出您的数据导出总量限额")
- }
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Message: "",
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 0,
- ChargeResult: 0,
- FailMsg: common.ObjToString(common.If(len(msg) > 0, strings.Join(msg, "、"), "")),
- Num1: entNums,
- Num2: personLimit[0].DataLimit,
- Num3: personLimit[0].DataLimit - personLimit[0].ExportNums,
- Num4: personLimit[0].MaxNums,
- Num5: personLimit[0].MaxNums - personLimit[0].AllExportNums,
- },
- }
- }
- //保存账号使用明细
- detailed := entity.Detailed{
- AccountId: data.UserId,
- CompanyId: data.EntId,
- ResourceType: "高级字段包",
- Number: data.ExportNum,
- DeductionNumb: data.DeductNum,
- Name: "数据流包",
- CreateTime: time.Now().Local(),
- Remarks: data.Remark,
- UserType: 0,
- UserId: data.UserId,
- AccountType: 1,
- EntId: data.EntId,
- EntUserId: data.EntUserId,
- Source: int(data.Source),
- }
- if detailed.EntUserId > 0 {
- _, _ = jyOrm.Table("entniche_user").Select("CONCAT(NAME,'(',phone,')')").Where("id=?", detailed.EntUserId).Get(&detailed.Operator)
- }
- updateNum, err = souceOrm.Table(ConsumeRecord).Insert(&detailed)
- if err != nil || updateNum <= 0 {
- _ = jyOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "账号使用明细保存失败"}
- }
- err = jyOrm.Commit()
- if err != nil {
- _ = jyOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "事务提交失败," + err.Error()}
- }
- }
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Message: "",
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 0,
- ChargeResult: 1,
- Num1: entNums,
- Num2: personLimit[0].DataLimit,
- Num3: personLimit[0].DataLimit - personLimit[0].ExportNums,
- Num4: personLimit[0].MaxNums,
- Num5: personLimit[0].MaxNums - personLimit[0].AllExportNums,
- },
- }
- }
- func personCharge(data *resourcesCenter.ChargeReq) (resp *resourcesCenter.ChargeResp) {
- now := time.Now().Format("2006-01-02")
- jyOrm := entity.JyEngine.NewSession()
- centerOrm := entity.Engine.NewSession()
- var personNums int64
- _, err := centerOrm.Table("account_resources").Select("sum(number) as number").
- Where("accountId = ? and endTime >= ? and resourceType = ?", data.UserId, now, "高级字段包").Get(&personNums)
- if err != nil {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "个人余额查询失败"}
- }
- if personNums == 0 || personNums < data.DeductNum {
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 1,
- ChargeResult: 0,
- Num1: personNums,
- },
- }
- }
- // 实际扣费条数
- if data.DeductNum > 0 {
- var updateNum int64
- err = centerOrm.Begin()
- if err != nil {
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "操作失败"}
- }
- //修改个人账户资源
- balanceList := []entity.Balance{}
- err = centerOrm.Table(AccountResources).
- Select("*").
- Where("accountId= ? and number > 0 and resourceType= ? and endTime >= ?", data.UserId, "高级字段包", now).
- OrderBy("endTime").
- Find(&balanceList)
- if err != nil {
- _ = centerOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "个人账号资源查询失败"}
- }
- var deductNum = data.DeductNum
- for _, value := range balanceList {
- if value.Number > data.DeductNum {
- value.Number = value.Number - data.DeductNum
- deductNum = 0
- } else {
- deductNum = deductNum - value.Number
- value.Number = 0
- }
- updateNum, err = centerOrm.Table(AccountResources).
- Cols("number").ID(value.Id).
- Update(&value)
- if err != nil || updateNum <= 0 {
- _ = centerOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "修改账户失败"}
- }
- if deductNum == 0 {
- break
- }
- }
- //保存账号使用明细
- detailed := entity.Detailed{
- AccountId: data.UserId,
- CompanyId: data.EntId,
- ResourceType: "高级字段包",
- Number: data.ExportNum,
- DeductionNumb: data.DeductNum,
- Name: "数据流包",
- CreateTime: time.Now().Local(),
- Remarks: data.Remark,
- UserType: 0,
- UserId: data.UserId,
- AccountType: 0,
- EntId: data.EntId,
- EntUserId: data.EntUserId,
- Source: int(data.Source),
- }
- if detailed.EntUserId > 0 {
- _, err = jyOrm.Table("entniche_user").Select("CONCAT(NAME,'(',phone,')')").Where("id=?", detailed.EntUserId).Get(&detailed.Operator)
- }
- if err != nil {
- _ = centerOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "操作人查询失败"}
- }
- updateNum, err = centerOrm.Table(ConsumeRecord).Insert(&detailed)
- if err != nil || updateNum <= 0 {
- _ = centerOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "账号使用明细保存失败"}
- }
- err = centerOrm.Commit()
- if err != nil {
- _ = centerOrm.Rollback()
- return &resourcesCenter.ChargeResp{Code: entity.ErrorCode, Message: "事务提交失败"}
- }
- }
- return &resourcesCenter.ChargeResp{
- Code: entity.SuccessCode,
- Message: "",
- Data: &resourcesCenter.SomeInfo{
- ChargeType: 1,
- ChargeResult: 1,
- Num1: personNums,
- },
- }
- }
|