package service import ( "github.com/gin-gonic/gin" "gorm.io/gorm" "log" "sfis/db" "sfis/model" "sfis/model/response" "strconv" "strings" "time" ) func UserProject(projectIds, appId, startTime, endTime string, leftNum, costModel, interfaceStatus, callTimesLimitDay, dataNumOneTimes, tradeMoney, buyType, historyUnitPrice int, c *gin.Context) { projectIdsArr := strings.Split(projectIds, ",") if len(projectIdsArr) > 0 { var errs error for _, v := range projectIdsArr { userProject := &model.UserProduct{} userProject.AppID = appId userProject.StartAt, _ = time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local) userProject.EndAt, _ = time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local) userProject.LeftNum = leftNum userProject.CostModel = costModel userProject.InterfaceStatus = interfaceStatus userProject.CallTimesLimitDay = callTimesLimitDay userProject.DataNumLimitOneTimes = dataNumOneTimes id, _ := strconv.Atoi(v) userProject.ProductID = id userProjectInfo := []model.UserProduct{} err := db.GetSFISDB().Where("product_id = ? and app_id = ?", id, appId).Find(&userProjectInfo).Error if err != nil { response.FailWithMessage("查询用户产品信息出错", c) return } if len(userProjectInfo) > 0 { before := userProjectInfo[0].LeftNum after := userProjectInfo[0].LeftNum + leftNum userProjectId := userProjectInfo[0].ID errs = db.GetSFISDB().Transaction(func(tx *gorm.DB) error { //更新用户产品信息 userProject.LeftNum = userProjectInfo[0].LeftNum + leftNum err := tx.Exec("update user_product set left_num = left_num + ?, start_at = ?,end_at = ?,cost_model = ?,interface_status = ?,call_times_limit_day=?,data_num_limit_one_times=? where product_id = ? and app_id = ?", leftNum, startTime, endTime, costModel, interfaceStatus, callTimesLimitDay, dataNumOneTimes, id, appId).Error if err != nil { log.Printf("appID:[%s],projectId:[%d] execute cost user_account error:[%v]", appId, id, err) tx.Rollback() return err } //生成购买产品记录 err = tx.Exec("insert into user_buy_record (`app_id`,`product_id`,`user_product_id`,`before`,`after`,`trade_money`,`buy_type`,`history_unit_price`) values (?,?,?,?,?,?,?,?)", appId, id, userProjectId, before, after, tradeMoney, buyType, historyUnitPrice).Error if err != nil { log.Printf("appID:[%s],projectId[%d],trade_money:[%d] execute insert into user_buy_record error:[%v]", appId, id, tradeMoney, err) tx.Rollback() return err } return nil }) } else { errs = db.GetSFISDB().Transaction(func(tx *gorm.DB) error { //生用户产品 err := tx.Create(userProject).Error if err != nil { log.Printf("appID:[%s],projectId:[%d] insert user_project error:[%v]", appId, id, err) tx.Rollback() return tx.Error } userProjectId := userProject.ID //生成购买产品记录 err = tx.Exec("insert into user_buy_record (`app_id`,`product_id`,`user_product_id`,`before`,`after`,`trade_money`,`buy_type`,`history_unit_price`) values (?,?,?,?,?,?,?,?)", appId, id, userProjectId, 0, leftNum, tradeMoney, buyType, historyUnitPrice).Error if err != nil { log.Printf("appID:[%s],projectId[%d],trade_money:[%d] execute insert into user_buy_record error:[%v]", appId, id, tradeMoney, err) tx.Rollback() return err } return nil }) } } if errs == nil { response.Ok(c) return } else { response.FailWithMessage("购买产品失败", c) return } } response.FailWithMessage("缺少参数", c) } func UserProjectList(appId string, c *gin.Context) { userProject := []model.UserProduct{} err := db.GetSFISDB().Where("app_id = ? and ", appId).Find(&userProject).Error if err != nil { log.Printf("appID:[%s] find into user_project error:[%v]", appId, err) response.FailWithMessage("查询出错", c) } else { response.OkWithData(userProject, c) } }