|
@@ -15,6 +15,7 @@ import (
|
|
|
"util"
|
|
|
)
|
|
|
|
|
|
+//ServiceOpen 订单详情开通权益
|
|
|
func ServiceOpen(context *admin.Context) (interface{}, error) {
|
|
|
param := new(struct {
|
|
|
OrderCode string `form:"orderCode"`
|
|
@@ -96,9 +97,18 @@ func ServiceOpen(context *admin.Context) (interface{}, error) {
|
|
|
util.MQFW.UpdateById("user", cm.ObjToString((*order)["user_id"]), bson.M{
|
|
|
"$set": set,
|
|
|
})
|
|
|
- util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": cm.ObjToString(param.OrderCode)}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
|
|
|
+ //util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": cm.ObjToString(param.OrderCode)}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
|
|
|
+ }
|
|
|
+ filterMap := map[string]interface{}{}
|
|
|
+ if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ filterMap["isServiceOpen"] = 1 //是否已开通权益 1开通
|
|
|
+ updateMap := map[string]interface{}{
|
|
|
+ "user_phone": param.Phone,
|
|
|
+ "user_id": userId,
|
|
|
+ "filter": fmt.Sprintf("%v", filterMap),
|
|
|
}
|
|
|
-
|
|
|
if productType == "VIP订阅" {
|
|
|
if cm.IntAll(userData["i_vip_status"]) > 0 {
|
|
|
return nil, errors.New(fmt.Sprintf("手机号:%s已有vip订阅权限,无法开通权益!", param.Phone))
|
|
@@ -152,12 +162,10 @@ func ServiceOpen(context *admin.Context) (interface{}, error) {
|
|
|
}, param.Phone)
|
|
|
ClearBigVipUserPower(userId)
|
|
|
}
|
|
|
+ updateMap["vip_starttime"] = vipStartTime.Format(cm.Date_Full_Layout)
|
|
|
+ updateMap["vip_endtime"] = vipEndTime.Format(cm.Date_Full_Layout)
|
|
|
|
|
|
} else if productType == "大会员" {
|
|
|
- filterMap := map[string]interface{}{}
|
|
|
- if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
createType := cm.IntAll(filterMap["createType"])
|
|
|
if createType == 1 { //1-新建 2-补充 3-延期
|
|
|
bigStartTime := time.Unix(param.StartTime, 0)
|
|
@@ -172,6 +180,10 @@ func ServiceOpen(context *admin.Context) (interface{}, error) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //更新订单
|
|
|
+ if !util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, updateMap) {
|
|
|
+ return nil, errors.New("权益已开通,更新订单出错")
|
|
|
+ }
|
|
|
return map[string]interface{}{
|
|
|
"status": 1,
|
|
|
}, nil
|
|
@@ -310,6 +322,23 @@ func GetStartAndEndTime(startTime string, cycleCount, cycleUnit int) (vipStartTi
|
|
|
return vipStartTime, endTime
|
|
|
}
|
|
|
|
|
|
+func GetReturnTimeAndCheckTime(orderCode string) (newReturnMoneyTime, checkPassTime time.Time, err error) {
|
|
|
+ returnMoneyRecord := util.JysqlDB.FindOne("return_money_record", map[string]interface{}{"order_code": orderCode}, `"return_time"`, "return_time DESC")
|
|
|
+ if returnMoneyRecord != nil && len(*returnMoneyRecord) > 0 {
|
|
|
+ newReturnMoneyTime, _ = time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*returnMoneyRecord)["return_time"]), time.Local)
|
|
|
+ } else {
|
|
|
+ return time.Time{}, time.Time{}, errors.New("查询回款记录表没有数据")
|
|
|
+ }
|
|
|
+ //查询审核通过时间
|
|
|
+ checkInfo := util.JysqlDB.FindOne("audit_records", map[string]interface{}{"order_code": orderCode, "audit_status": 3}, "", "")
|
|
|
+ if checkInfo != nil && len(*checkInfo) > 0 {
|
|
|
+ checkPassTime, _ = time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*checkInfo)["create_time"]), time.Local)
|
|
|
+ } else {
|
|
|
+ return time.Time{}, time.Time{}, errors.New("查询回款记录表没有数据")
|
|
|
+ }
|
|
|
+ return newReturnMoneyTime, checkPassTime, nil
|
|
|
+}
|
|
|
+
|
|
|
// OpenUserService 全额回款后开通权益
|
|
|
func OpenUserService(orderCode string, orderInfo map[string]interface{}) error {
|
|
|
var err error
|
|
@@ -319,52 +348,40 @@ func OpenUserService(orderCode string, orderInfo map[string]interface{}) error {
|
|
|
return err
|
|
|
}
|
|
|
userId, userData := FindUserDataByPhone(cm.ObjToString(orderInfo["user_phone"]))
|
|
|
-
|
|
|
if productType == "VIP订阅" {
|
|
|
vipType := cm.IntAll(orderInfo["vip_type"])
|
|
|
if vipType != 0 {
|
|
|
- vipEndTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString(orderInfo["vip_endtime"]), time.Local)
|
|
|
+ //用户原服务结束日期
|
|
|
+ vipEndTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString(userData["l_vip_endtime"]), time.Local)
|
|
|
+ //最近回款流水时间
|
|
|
if vipType == 1 { //超级订阅续费
|
|
|
- //需要判断续费开始日期小于审核日期,开始日期改为审核日期,结束日期根据开始日期往后延
|
|
|
- vipStartTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString(orderInfo["vip_starttime"]), time.Local)
|
|
|
+ var newStartTime, newEndTime time.Time
|
|
|
set := map[string]interface{}{
|
|
|
- //"l_vip_endtime": vipEndTime.Unix(),
|
|
|
"i_vip_expire_tip": 0,
|
|
|
"i_vip_status": 2,
|
|
|
}
|
|
|
- if vipStartTime.Unix() < time.Now().Unix() {
|
|
|
- vipStartTime = time.Now().Local()
|
|
|
- //结束日期计算
|
|
|
- month := 0
|
|
|
- cycleUnit := cm.IntAll(filterMap["cycleunit"])
|
|
|
- cycleCount := cm.IntAll(filterMap["cyclecount"])
|
|
|
- if cm.ObjToString(orderInfo["vip_endtime"]) != "" {
|
|
|
- if cycleUnit == 1 {
|
|
|
- month = cycleCount * 12
|
|
|
- } else if cycleUnit == 2 {
|
|
|
- month = cycleCount
|
|
|
- } else if cycleUnit == 4 {
|
|
|
- month = cycleCount * 3
|
|
|
- }
|
|
|
+ if vipEndTime.Unix() < time.Now().Unix() { //原服务已过期
|
|
|
+ //查询回款记录,最近一笔回款时间
|
|
|
+ newReturnMoneyTime, checkPassTime, err := GetReturnTimeAndCheckTime(orderCode)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
- if cycleUnit == 3 {
|
|
|
- _endTime := vipStartTime.AddDate(0, 0, cycleCount)
|
|
|
- t := _endTime.Format(cm.Date_Short_Layout) + " 23:59:59"
|
|
|
- vipEndTime, _ = time.ParseInLocation(cm.Date_Full_Layout, t, time.Local)
|
|
|
+ if newReturnMoneyTime.Unix() > checkPassTime.Unix() {
|
|
|
+ newStartTime = newReturnMoneyTime
|
|
|
} else {
|
|
|
- vipEndTime = GetDATE1(month, vipStartTime.Unix())
|
|
|
- }
|
|
|
- set["l_vip_starttime"] = vipStartTime.Unix()
|
|
|
- //更新订单信息
|
|
|
- ok := util.JysqlDB.Update(DataExportOrder, map[string]interface{}{"order_code": orderCode}, map[string]interface{}{"vip_starttime": vipStartTime.Format(cm.Date_Full_Layout), "vip_endtime": vipEndTime.Format(cm.Date_Full_Layout)})
|
|
|
- if !ok {
|
|
|
- return errors.New("更新订单信息出错")
|
|
|
+ newStartTime = checkPassTime
|
|
|
}
|
|
|
+ set["l_vip_starttime"] = newStartTime.Unix()
|
|
|
+
|
|
|
+ } else { //原服务未过期
|
|
|
+ //开始时间为:原服务结束日期+1天
|
|
|
+ newStartTime = vipEndTime.AddDate(0, 0, 1)
|
|
|
}
|
|
|
- set["l_vip_endtime"] = vipEndTime.Unix()
|
|
|
+ set["l_vip_endtime"] = newEndTime.Unix()
|
|
|
+ _, newEndTime = GetStartAndEndTime(newStartTime.Format(cm.Date_Full_Layout), cm.IntAll(filterMap["cyclecount"]), cm.IntAll(filterMap["cycleunit"]))
|
|
|
if !util.MQFW.UpdateById("user", userId,
|
|
|
bson.M{"$set": set}) {
|
|
|
- log.Printf("%s更新结束%d日期出错\n", userId, vipEndTime.Unix())
|
|
|
+ return errors.New(fmt.Sprintf("%s更新结束%d日期出错", userId, vipEndTime.Unix()))
|
|
|
}
|
|
|
} else if vipType == 2 { //升级
|
|
|
//先判断审核通过日期是否再超级订阅有效期内
|
|
@@ -379,7 +396,7 @@ func OpenUserService(orderCode string, orderInfo map[string]interface{}) error {
|
|
|
"i_isvalid": 1,
|
|
|
},
|
|
|
}, false, true) {
|
|
|
- log.Printf("%s vip_upgrade 更新失败 时间:%d\n", userId, vipEndTime.Unix())
|
|
|
+ return errors.New(fmt.Sprintf("%s vip_upgrade 更新失败 订单编号:%s", userId, orderCode))
|
|
|
}
|
|
|
updata := map[string]interface{}{
|
|
|
"o_vipjy.o_buyset": filterMap["newBuyset"],
|
|
@@ -392,16 +409,14 @@ func OpenUserService(orderCode string, orderInfo map[string]interface{}) error {
|
|
|
if filterMap["industry"] != nil {
|
|
|
updata["o_vipjy.a_buyerclass"] = filterMap["industry"] //设置行业
|
|
|
}
|
|
|
- if ok := util.MQFW.UpdateById("user", userId, map[string]interface{}{
|
|
|
+ if !util.MQFW.UpdateById("user", userId, map[string]interface{}{
|
|
|
"$set": updata,
|
|
|
- }); !ok {
|
|
|
- log.Printf("%s更新用户出错 %+v\n", userId, updata)
|
|
|
- return errors.New("更新user用户信息出错")
|
|
|
+ }) {
|
|
|
+ return errors.New(fmt.Sprintf("%s更新用户出错 %+v", userId, updata))
|
|
|
} else {
|
|
|
//清理缓存
|
|
|
go ClearBigVipUserPower(userId)
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -429,21 +444,29 @@ func OpenUserService(orderCode string, orderInfo map[string]interface{}) error {
|
|
|
ok1, err = BigMemberSupple(freeSubNum, paySubNum, startTime, endTime, userId, filterMap, serverArr)
|
|
|
|
|
|
} else if createType == 3 { //大会员延长服务
|
|
|
- //判断开始时间小于审核时间,开始时间改为审核时间
|
|
|
- lastEndTime := cm.Int64All(userData["i_member_endtime"])
|
|
|
- //newBigStartTime := time.Now().Unix()
|
|
|
- startTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location())
|
|
|
+ bmEndTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString(userData["i_member_endtime"]), time.Local)
|
|
|
+ var newStartTime, newEndTime time.Time
|
|
|
effectState := true
|
|
|
- var endTime time.Time
|
|
|
- if lastEndTime < time.Now().Unix() {
|
|
|
- //计算大会员结束时间
|
|
|
+ if bmEndTime.Unix() < time.Now().Unix() || cm.IntAll(userData["i_member_status"]) < 0 { //原服务已过期
|
|
|
+ //查询回款记录,最近一笔回款时间
|
|
|
+ newReturnMoneyTime, checkPassTime, err := GetReturnTimeAndCheckTime(orderCode)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if newReturnMoneyTime.Unix() > checkPassTime.Unix() {
|
|
|
+ newStartTime = newReturnMoneyTime
|
|
|
+ } else {
|
|
|
+ newStartTime = checkPassTime
|
|
|
+ }
|
|
|
effectState = false
|
|
|
cycleCount := cm.IntAll(filterMap["cycle"])
|
|
|
cycleType := cm.IntAll(filterMap["cycleType"])
|
|
|
- nowTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local)
|
|
|
- endTime = GetDATE(cycleCount, cycleType, nowTime.Unix())
|
|
|
+ newEndTime = GetDATE(cycleCount, cycleType, newStartTime.Unix())
|
|
|
+ } else { //原服务未过期
|
|
|
+ //开始时间为:原服务结束日期+1天
|
|
|
+ newStartTime = bmEndTime.AddDate(0, 0, 1)
|
|
|
}
|
|
|
- ok1, err = BigMemberExtend(filterMap, userId, orderCode, effectState, startTime, endTime, cm.IntAll(userData["i_member_status"]))
|
|
|
+ ok1, err = BigMemberExtend(filterMap, userId, orderCode, effectState, newStartTime, newEndTime, cm.IntAll(userData["i_member_status"]))
|
|
|
}
|
|
|
if !ok1 && err != nil {
|
|
|
return err
|