You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
4.5 KiB

package service
import (
"encoding/json"
"errors"
"pure/global"
"pure/model"
"pure/model/request"
"pure/model/response"
)
func GetUserAddressList(userID string, info *request.ReqAddress) (error, any) {
var (
err error
list []model.Address
)
db := global.MG_DB.Model(&model.Address{}).Where("user_id=?", userID)
if info.ID != 0 {
db = db.Where("id=?", info.ID)
}
err = db.Find(&list).Error
if err != nil {
return errors.New("获取收货地址失败"), nil
}
return nil, list
}
func AddUserAddressList(userID string, data *model.Address) error {
var (
err error
)
data.UserID = userID
if data.FirstName == "" || data.LastName == "" || data.Bldg == "" || data.City == "" || data.Street == "" || data.State == "" || data.ZipCode == "" {
return errors.New("有必填项未填写")
}
if len(data.FirstName) > 255 {
return errors.New("FirstName长度超出限制")
}
if len(data.LastName) > 255 {
return errors.New("LastName长度超出限制")
}
if len(data.Street) > 255 {
return errors.New("Street长度超出限制")
}
if len(data.Bldg) > 255 {
return errors.New("Bldg长度超出限制")
}
if len(data.City) > 255 {
return errors.New("City长度超出限制")
}
if len(data.State) > 255 {
return errors.New("State长度超出限制")
}
if len(data.ZipCode) > 255 {
return errors.New("ZipCode长度超出限制")
}
if len(data.Phone) > 20 {
return errors.New("Phone长度超出限制")
}
if data.Default == 1 {
global.MG_DB.Model(&model.Address{}).Where("user_id=?", userID).Update("default", 2)
}
err = global.MG_DB.Model(&model.Address{}).Create(data).Error
if err != nil {
return errors.New("添加收货地址失败")
}
return nil
}
func UpdateAddress(userID string, data *model.Address) error {
var (
err error
)
if data.FirstName == "" || data.LastName == "" || data.Bldg == "" || data.City == "" || data.Street == "" || data.State == "" || data.ZipCode == "" {
return errors.New("有必填项未填写")
}
if len(data.FirstName) > 255 {
return errors.New("FirstName长度超出限制")
}
if len(data.LastName) > 255 {
return errors.New("LastName长度超出限制")
}
if len(data.Street) > 255 {
return errors.New("Street长度超出限制")
}
if len(data.Bldg) > 255 {
return errors.New("Bldg长度超出限制")
}
if len(data.City) > 255 {
return errors.New("City长度超出限制")
}
if len(data.State) > 255 {
return errors.New("State长度超出限制")
}
if len(data.ZipCode) > 255 {
return errors.New("ZipCode长度超出限制")
}
if len(data.Phone) > 20 {
return errors.New("Phone长度超出限制")
}
data.UserID = userID
if data.Default == 1 {
global.MG_DB.Model(&model.Address{}).Where("user_id=?", userID).Update("default", 2)
}
err = global.MG_DB.Model(&model.Address{}).Where("user_id=? and id=?", userID, data.ID).Updates(data).Error
if err != nil {
return errors.New("修改收货地址失败")
}
return nil
}
func DeleteAddress(userID string, ID *global.BASE_ID) error {
var (
err error
)
err = global.MG_DB.Model(&model.Address{}).Where("user_id=? and id=?", userID, ID.ID).Delete(&model.Address{}).Error
if err != nil {
return errors.New("删除收货地址失败")
}
return nil
}
func GetUsSelect() (error, any) {
var (
err error
list []model.UsSelect
data []model.UsCitys
)
err = global.MG_DB.Model(&model.UsStates{}).Find(&list).Error
if err != nil {
return errors.New("获取地址失败"), nil
}
err = global.MG_DB.Model(&model.UsCitys{}).Find(&data).Error
if err != nil {
return errors.New("获取地址失败"), nil
}
for v := range list {
for x := range data {
if data[x].IDState == list[v].ID {
list[v].Child = append(list[v].Child, data[x])
}
}
}
return nil, list
}
func GetTrack(trackId int64) ([]response.TrackItem, error) {
var list []response.TrackItem
var values []model.TrackValue
var track model.Track
err := global.MG_DB.Model(&model.Track{}).Where("id=?", trackId).First(&track).Error
if err != nil {
return list, err
}
err = json.Unmarshal([]byte(track.Value), &values)
if err != nil {
return list, err
}
for _, v := range values {
list = append(list, response.TrackItem{
CheckpointDate: v.CheckpointDate,
DeliveryStatus: v.CheckpointDeliveryStatus,
TrackingDetail: v.TrackingDetail,
DeliveryStatusCn: toDeliveryStatus(v.CheckpointDeliveryStatus),
})
}
return list, nil
}
func toDeliveryStatus(status string) string {
switch status {
case "transit":
return "运输途中"
case "pickup":
return "到达待取"
case "delivered":
return "已签收"
}
return ""
}