@@ -29,7 +29,7 @@ func TaskList(c *gin.Context) {
if store.Pid > 0 {
if store.Pid > 0 {
contact = append(contact, utils.IntToStr(store.Id))
contact = append(contact, utils.IntToStr(store.Id))
}
}
sess := svc.MasterDb(c).Where("store_id=?", storeId).In("contact", contact)
sess := svc.MasterDb(c).Where("store_id=? and is_delete=0 ", storeId).In("contact", contact)
if args.TaskType != "" {
if args.TaskType != "" {
sess.And("first_cid=?", args.TaskType)
sess.And("first_cid=?", args.TaskType)
}
}
@@ -233,12 +233,6 @@ func TaskSave(c *gin.Context) {
return
return
}
}
sql := `select SUM(price*num) as amount from camp_task_list where store_id=? and state=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
if userAmount == nil {
if userAmount == nil {
@@ -264,7 +258,6 @@ func TaskSave(c *gin.Context) {
var task *models.CampTaskList
var task *models.CampTaskList
var taskDetail *models.CampTaskDetail
var taskDetail *models.CampTaskDetail
var taskNotice *models.CampTaskNotice
var taskNotice *models.CampTaskNotice
isFirst := 0
if utils.StrToInt(args.Id) > 0 {
if utils.StrToInt(args.Id) > 0 {
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
task, _ = taskDb.GetCampTaskByIdSess(sess, args.Id)
task, _ = taskDb.GetCampTaskByIdSess(sess, args.Id)
@@ -273,13 +266,11 @@ func TaskSave(c *gin.Context) {
taskNoticeDb := implement.NewCampTaskNoticeDb(svc.MasterDb(c))
taskNoticeDb := implement.NewCampTaskNoticeDb(svc.MasterDb(c))
taskNotice, _ = taskNoticeDb.GetCampTaskNoticeByTaskIdSess(sess, args.Id)
taskNotice, _ = taskNoticeDb.GetCampTaskNoticeByTaskIdSess(sess, args.Id)
} else {
} else {
isFirst = 1
task = &models.CampTaskList{
task = &models.CampTaskList{
CreateTime: time.Now(),
CreateTime: time.Now(),
UpdateTime: time.Now(),
UpdateTime: time.Now(),
StoreId: storeId,
StoreId: storeId,
Contact: "0",
Contact: "0",
AuditNum: utils.StrToInt(args.Num),
Sum: utils.StrToInt(args.Num),
Sum: utils.StrToInt(args.Num),
Num: utils.StrToInt(args.Num),
Num: utils.StrToInt(args.Num),
}
}
@@ -319,23 +310,12 @@ func TaskSave(c *gin.Context) {
task.UpDownState = 0 //要先下架
task.UpDownState = 0 //要先下架
task.AuditType = 2
task.AuditType = 2
//判断下要不要改数量
//判断下要不要改数量
num := 0
if isFirst == 1 {
num = task.Num
}
if task.Num != utils.StrToInt(args.Num) {
if task.Num != utils.StrToInt(args.Num) {
leave := task.Num - utils.StrToInt(args.Num)
task.AuditType = 3
task.AuditType = 3
if leave < 0 {
leave = utils.StrToInt(args.Num) - task.Num
num = leave
}
task.AuditNum = leave //正负数 负数是减少的 要补钱 正数是加多的要扣钱
}
if utils.StrToFloat64(userAmount.Amount) < amount+(utils.StrToFloat64(args.Price)*float64(num)) && (num > 0 || isFirst == 1) {
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
task.OldNum = task.Num
}
}
task.Num = utils.StrToInt(args.Num)
task.UpdateTime = time.Now()
task.UpdateTime = time.Now()
task.Price = args.Price
task.Price = args.Price
task.Name = args.Name
task.Name = args.Name
@@ -375,6 +355,20 @@ func TaskSave(c *gin.Context) {
e.OutErr(c, 400, e.NewErr(400, "发布失败"))
e.OutErr(c, 400, e.NewErr(400, "发布失败"))
return
return
}
}
if task.SettleType == 0 {
sql := `select SUM(price*num) as amount from camp_task_list where is_delete=0 and store_id=? and state in(0,1) and settle_type=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeStringWithSession(sess, sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
if utils.StrToFloat64(userAmount.Amount) < amount {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
}
sess.Commit()
sess.Commit()
e.OutSuc(c, "success", nil)
e.OutSuc(c, "success", nil)
return
return
@@ -386,32 +380,6 @@ func TaskUp(c *gin.Context) {
return
return
}
}
storeId := svc.GetCampStoreId(c)
storeId := svc.GetCampStoreId(c)
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
task, _ := taskDb.GetCampTaskById(args["id"])
if task.UpDownState == 1 {
e.OutErr(c, 400, e.NewErr(400, "该任务已上架"))
return
}
if task.State == 0 {
e.OutErr(c, 400, e.NewErr(400, "该任务正在审核"))
return
}
sql := `select SUM(price*num) as amount from camp_task_list where store_id=? and state=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
if userAmount == nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
if utils.StrToFloat64(userAmount.Amount) < amount+(utils.StrToFloat64(task.Price)*float64(task.Num)) {
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
// 加锁 防止并发提取
// 加锁 防止并发提取
mutexKey := fmt.Sprintf("%s:camp_task_up:%d", c.GetString("mid"), storeId)
mutexKey := fmt.Sprintf("%s:camp_task_up:%d", c.GetString("mid"), storeId)
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
@@ -423,15 +391,53 @@ func TaskUp(c *gin.Context) {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
return
}
}
sess := svc.MasterDb(c).NewSession()
defer sess.Close()
sess.Begin()
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
task, _ := taskDb.GetCampTaskByIdSess(sess, args["id"])
if task.UpDownState == 1 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "该任务已上架"))
return
}
if task.State == 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "该任务正在审核"))
return
}
task.State = 0
task.State = 0
task.AuditType = 2
task.AuditType = 2
task.ApplyTime = time.Now()
task.ApplyTime = time.Now()
task.UpdateTime = time.Now()
task.UpdateTime = time.Now()
update, _ := svc.MasterDb(c).Where("id=?", task.Id).Cols("state,audit_type,apply_time,update_time").Update(task)
update, _ := sess .Where("id=?", task.Id).Cols("state,audit_type,apply_time,update_time").Update(task)
if update == 0 {
if update == 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "上架申请失败"))
e.OutErr(c, 400, e.NewErr(400, "上架申请失败"))
return
return
}
}
if task.SettleType == 0 {
sql := `select SUM(price*num) as amount from camp_task_list where is_delete=0 and store_id=? and state in(0,1) and settle_type=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeStringWithSession(sess, sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
if userAmount == nil {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
if utils.StrToFloat64(userAmount.Amount) < amount {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
}
sess.Commit()
e.OutSuc(c, "success", nil)
e.OutSuc(c, "success", nil)
return
return
}
}
@@ -484,7 +490,7 @@ func TaskUpList(c *gin.Context) {
storeId := svc.GetCampStoreId(c)
storeId := svc.GetCampStoreId(c)
list := make([]map[string]string, 0)
list := make([]map[string]string, 0)
var data = make([]models.CampTaskList, 0)
var data = make([]models.CampTaskList, 0)
sess := svc.MasterDb(c).Where("store_id=?", storeId)
sess := svc.MasterDb(c).Where("store_id=? and is_delete=0 ", storeId)
sess.And("up_down_state=?", 1)
sess.And("up_down_state=?", 1)
count, _ := sess.Limit(utils.StrToInt(args.Size), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("apply_time desc,id desc").FindAndCount(&data)
count, _ := sess.Limit(utils.StrToInt(args.Size), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("apply_time desc,id desc").FindAndCount(&data)
for _, v := range data {
for _, v := range data {
@@ -494,7 +500,7 @@ func TaskUpList(c *gin.Context) {
"id": utils.IntToStr(v.Id),
"id": utils.IntToStr(v.Id),
"name": v.Name,
"name": v.Name,
"num": utils.IntToStr(v.Num),
"num": utils.IntToStr(v.Num),
"sum": utils.IntToStr(v.Sum ),
"sum": utils.IntToStr(v.Num + int(orderCount) ),
"success_num": utils.Int64ToStr(orderCount),
"success_num": utils.Int64ToStr(orderCount),
"wait_num": utils.Int64ToStr(orderWaitCount),
"wait_num": utils.Int64ToStr(orderWaitCount),
"up_time": v.AuditTime.Format("2006-01-02 15:04:05"),
"up_time": v.AuditTime.Format("2006-01-02 15:04:05"),
@@ -518,40 +524,6 @@ func TaskChangeNum(c *gin.Context) {
return
return
}
}
storeId := svc.GetCampStoreId(c)
storeId := svc.GetCampStoreId(c)
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
task, _ := taskDb.GetCampTaskById(args["id"])
if task.State == 0 {
e.OutErr(c, 400, e.NewErr(400, "该任务正在审核,提交的调整数量为"+utils.IntToStr(task.AuditNum)+"个"))
return
}
if task.AuditNum == utils.StrToInt(args["num"]) {
e.OutErr(c, 400, e.NewErr(400, "数量未变化,修改失败"))
return
}
leave := task.Num - utils.StrToInt(args["num"])
num := 0
if leave < 0 {
leave = utils.StrToInt(args["num"]) - task.Num
num = leave
}
task.Num = utils.StrToInt(args["num"])
task.AuditNum = leave //正负数 负数是减少的 要补钱 正数是加多的要扣钱
sql := `select SUM(price*num) as amount from camp_task_list where store_id=? and state=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
if userAmount == nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
if utils.StrToFloat64(userAmount.Amount) < amount+(utils.StrToFloat64(task.Price)*float64(num)) && num > 0 {
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
// 加锁 防止并发提取
// 加锁 防止并发提取
mutexKey := fmt.Sprintf("%s:camp_task_change_num:%d", c.GetString("mid"), storeId)
mutexKey := fmt.Sprintf("%s:camp_task_change_num:%d", c.GetString("mid"), storeId)
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
@@ -563,16 +535,57 @@ func TaskChangeNum(c *gin.Context) {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
return
}
}
sess := svc.MasterDb(c).NewSession()
defer sess.Close()
sess.Begin()
taskDb := implement.NewCampTaskListDb(svc.MasterDb(c))
task, _ := taskDb.GetCampTaskByIdSess(sess, args["id"])
if task.State == 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "该任务正在审核"))
return
}
if task.Num == utils.StrToInt(args["num"]) {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "数量未变化,修改失败"))
return
}
task.OldNum = task.Num
task.Num = utils.StrToInt(args["num"])
task.State = 0
task.State = 0
task.UpDownState = 0
task.UpDownState = 0
task.AuditType = 3
task.AuditType = 3
task.ApplyTime = time.Now()
task.ApplyTime = time.Now()
task.UpdateTime = time.Now()
task.UpdateTime = time.Now()
update, _ := svc.MasterDb(c).Where("id=?", task.Id).Cols("state,audit_type,apply_time,update_time,audit_num").Update(task)
update, _ := sess.Where("id=?", task.Id).Cols("state,audit_type,apply_time,update_time,old _num").Update(task)
if update == 0 {
if update == 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "上架申请失败"))
e.OutErr(c, 400, e.NewErr(400, "上架申请失败"))
return
return
}
}
if task.SettleType == 0 {
sql := `select SUM(price*num) as amount from camp_task_list where is_delete=0 and store_id=? and state in(0,1) and settle_type=0 and audit_type in(2,3)`
nativeString, _ := db.QueryNativeStringWithSession(sess, sql, storeId)
var amount float64 = 0
for _, v := range nativeString {
amount = utils.StrToFloat64(v["amount"])
}
amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
userAmount, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(storeId))
if userAmount == nil {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
if utils.StrToFloat64(userAmount.Amount) < amount {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "预存余额不足"))
return
}
}
sess.Commit()
e.OutSuc(c, "success", nil)
e.OutSuc(c, "success", nil)
return
return
}
}
@@ -584,7 +597,7 @@ func TaskAllList(c *gin.Context) {
}
}
list := make([]map[string]string, 0)
list := make([]map[string]string, 0)
var data = make([]models.CampTaskList, 0)
var data = make([]models.CampTaskList, 0)
sess := svc.MasterDb(c).Where("up_down_state=?", 1)
sess := svc.MasterDb(c).Where("up_down_state=? and is_delete=0 ", 1)
if args.TaskType != "" {
if args.TaskType != "" {
sess.And("first_cid=?", args.TaskType)
sess.And("first_cid=?", args.TaskType)
}
}