diff --git a/business/auth2/auth2.go b/business/auth2/auth2.go index a3716b77b..de4c0d243 100644 --- a/business/auth2/auth2.go +++ b/business/auth2/auth2.go @@ -340,18 +340,6 @@ func AddAuthBind(user IUser, newAuthInfo *AuthInfo) (err error) { return err } -func AddAuthBindWithMobile(authInfo *AuthInfo, mobile string) (err error) { - if handler := authers[authInfo.AuthBindInfo.Type]; handler != nil { - user, _ := dao.GetUserByID(dao.GetDB(), "mobile", mobile) - authInfo.AuthBindInfo.UserID = user.UserID - //handler.UnbindAuth(user.GetID(), newAuthInfo.GetAuthType(), newAuthInfo.GetAuthTypeID(), user.GetName()) - err = handler.AddAuthBind(authInfo.AuthBindInfo, user.GetName()) - } else { - err = ErrIllegalAuthType - } - return err -} - func UnbindAuth(userID, authType, authTypeID, userName string) (err error) { globals.SugarLogger.Debugf("UnbindAuth userID:%s, authType:%s, authTypeID:%s, userName:%s", userID, authType, authTypeID, userName) if handler := authers[authType]; handler != nil { diff --git a/business/authz/casbinauth/adapter.go b/business/authz/casbinauth/adapter.go deleted file mode 100644 index 60207b267..000000000 --- a/business/authz/casbinauth/adapter.go +++ /dev/null @@ -1,171 +0,0 @@ -package casbinauth - -import ( - jxmodel "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals" - "github.com/astaxie/beego/client/orm" - "github.com/casbin/casbin/model" - "github.com/casbin/casbin/persist" -) - -type Adapter struct { -} - -// finalizer is the destructor for Adapter. -func finalizer(a *Adapter) { -} - -func NewAdapter() *Adapter { - return &Adapter{} -} - -func loadPolicyLine(line jxmodel.CasbinRule, model model.Model) { - lineText := line.PType - if line.V0 != "" { - lineText += ", " + line.V0 - } - if line.V1 != "" { - lineText += ", " + line.V1 - } - if line.V2 != "" { - lineText += ", " + line.V2 - } - if line.V3 != "" { - lineText += ", " + line.V3 - } - if line.V4 != "" { - lineText += ", " + line.V4 - } - if line.V5 != "" { - lineText += ", " + line.V5 - } - - persist.LoadPolicyLine(lineText, model) -} - -func (a *Adapter) LoadPolicy(model model.Model) error { - var lines []jxmodel.CasbinRule - o := orm.NewOrm() - _, err := o.QueryTable("casbin_rule").Limit(-1).All(&lines) - if err != nil { - return err - } - - for _, line := range lines { - loadPolicyLine(line, model) - } - return nil -} - -func savePolicyLine(ptype string, rule []string) jxmodel.CasbinRule { - line := jxmodel.CasbinRule{} - - line.PType = ptype - if len(rule) > 0 { - line.V0 = rule[0] - } - if len(rule) > 1 { - line.V1 = rule[1] - } - if len(rule) > 2 { - line.V2 = rule[2] - } - if len(rule) > 3 { - line.V3 = rule[3] - } - if len(rule) > 4 { - line.V4 = rule[4] - } - if len(rule) > 5 { - line.V5 = rule[5] - } - - return line -} - -func (a *Adapter) clearAll(o orm.Ormer) (err error) { - _, err = o.Raw(` - DELETE t1 - FROM casbin_rule t1 - `).Exec() - return err -} - -// SavePolicy saves policy to database. -func (a *Adapter) SavePolicy(model model.Model) error { - globals.SugarLogger.Debugf("SavePolicy") - o := orm.NewOrm() - - a.clearAll(o) - var lines []jxmodel.CasbinRule - - for ptype, ast := range model["p"] { - for _, rule := range ast.Policy { - line := savePolicyLine(ptype, rule) - lines = append(lines, line) - } - } - - for ptype, ast := range model["g"] { - for _, rule := range ast.Policy { - line := savePolicyLine(ptype, rule) - lines = append(lines, line) - } - } - - _, err := o.InsertMulti(len(lines), lines) - return err -} - -// AddPolicy adds a policy rule to the storage. -func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error { - o := orm.NewOrm() - line := savePolicyLine(ptype, rule) - _, err := o.Insert(&line) - return err -} - -// RemovePolicy removes a policy rule from the storage. -func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error { - o := orm.NewOrm() - line := savePolicyLine(ptype, rule) - _, err := o.Delete(&line, "p_type", "v0", "v1", "v2", "v3", "v4", "v5") - return err -} - -// RemoveFilteredPolicy removes policy rules that match the filter from the storage. -func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error { - line := jxmodel.CasbinRule{} - - line.PType = ptype - filter := []string{} - filter = append(filter, "p_type") - if fieldIndex <= 0 && 0 < fieldIndex+len(fieldValues) { - line.V0 = fieldValues[0-fieldIndex] - filter = append(filter, "v0") - } - if fieldIndex <= 1 && 1 < fieldIndex+len(fieldValues) { - line.V1 = fieldValues[1-fieldIndex] - filter = append(filter, "v1") - } - if fieldIndex <= 2 && 2 < fieldIndex+len(fieldValues) { - line.V2 = fieldValues[2-fieldIndex] - filter = append(filter, "v2") - } - if fieldIndex <= 3 && 3 < fieldIndex+len(fieldValues) { - line.V3 = fieldValues[3-fieldIndex] - filter = append(filter, "v3") - } - if fieldIndex <= 4 && 4 < fieldIndex+len(fieldValues) { - line.V4 = fieldValues[4-fieldIndex] - filter = append(filter, "v4") - } - if fieldIndex <= 5 && 5 < fieldIndex+len(fieldValues) { - line.V5 = fieldValues[5-fieldIndex] - filter = append(filter, "v5") - } - - o := orm.NewOrm() - _, err := o.Delete(&line, filter...) - return err -} diff --git a/business/authz/casbinauth/casbinauth.go b/business/authz/casbinauth/casbinauth.go deleted file mode 100644 index 59d04f2c6..000000000 --- a/business/authz/casbinauth/casbinauth.go +++ /dev/null @@ -1,49 +0,0 @@ -package casbinauth - -import ( - "git.rosy.net.cn/jx-callback/business/authz" - "git.rosy.net.cn/jx-callback/business/authz/autils" - "github.com/casbin/casbin" - "github.com/casbin/casbin/errors" -) - -type CasbinAuthz struct { - enforcer *casbin.SyncedEnforcer -} - -func New(modelFile string) (authObj authz.IAuthz, err error) { - obj := &CasbinAuthz{} - obj.enforcer, err = casbin.NewSyncedEnforcer(modelFile, NewAdapter()) - return obj, err -} - -func (c *CasbinAuthz) AddRole4User(userID string, r *authz.RoleInfo) (err error) { - _, err = c.enforcer.AddRoleForUser(userID, r.GetFullName()) - return err -} - -func (c *CasbinAuthz) DeleteRole4User(userID string, r *authz.RoleInfo) (err error) { - _, err = c.enforcer.DeleteRoleForUser(userID, r.GetFullName()) - return err -} - -func (c *CasbinAuthz) GetUserRoleList(userID string) (roleList []*authz.RoleInfo, err error) { - roleNameList, err := c.enforcer.GetRolesForUser(userID) - if err == nil && len(roleNameList) > 0 { - roleList = autils.FullRoleName2RoleList(roleNameList) - } - return roleList, err -} - -func (c *CasbinAuthz) GetRoleUserList(r *authz.RoleInfo) (userIDList []string, err error) { - // globals.SugarLogger.Debug(roleFullName) - userIDList, err = c.enforcer.GetUsersForRole(r.GetFullName()) - if err == errors.ERR_NAME_NOT_FOUND { - err = nil - } - return userIDList, err -} - -// func (c *CasbinAuthz) GetAllRoleList() (roleList []*authz.RoleInfo) { -// return authz.FullRoleName2RoleList(c.enforcer.GetAllRoles()) -// } diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 3c1947341..9e98120de 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -1,7 +1,6 @@ package cms import ( - "encoding/json" "fmt" "git.rosy.net.cn/baseapi/platformapi/mtunionapi" "git.rosy.net.cn/baseapi/platformapi/tbunionapi" @@ -10,8 +9,6 @@ import ( "strconv" "time" - "git.rosy.net.cn/baseapi/platformapi/ejyapi" - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" @@ -67,24 +64,6 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "operateType": model.OperateTypeName, "apiFunctionName": model.ApiFunctionName, "vendorStatus": model.VendorStatus, - "jobLimitCountType": `[{ - "id":` + utils.Int2Str(model.JobLimitCountTypePO) + - `,"value": "每人一次" - },{ - "id":` + utils.Int2Str(model.JobLimitCountTypePDO) + - `,"value": "每人每天一次" - },{ - "id":` + utils.Int2Str(model.JobLimitCountTypePWO) + - `,"value": "每人每周一次" - },{ - "id":` + utils.Int2Str(model.JobLimitCountTypeNoLimit) + - `,"value": "不限次" - }]`, - "billTypeNames": model.BillTypeNames, - "deliveryStatusName": model.DeliveryStatusName, - "cashbackName": model.CashbackName, - "consumeName": model.ConsumeName, - "txWaybillNames": model.TxWaybillNames, "unionActTypeNames": map[int]map[int]interface{}{ model.VendorIDMTWM: map[int]interface{}{ mtunionapi.ActTypeQB: "券包推广", @@ -205,38 +184,3 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s func QueryConfigs(key, configType, keyword string) (configList []*model.NewConfig, err error) { return dao.QueryConfigs(dao.GetDB(), key, configType, keyword) } - -func EjyStationToStationInfo(station *ejyapi.GetStationListResult) (stationInfo *model.StationInfo) { - stationInfo = &model.StationInfo{ - StationID: station.StationID, - StationName: station.StationName, - ProvinceName: station.ProvinceName, - ProvinceID: station.ProvinceID, - CityName: station.CityName, - Latitude: utils.Str2Float64(station.Latitude), - Longitude: utils.Str2Float64(station.Longitude), - Location: station.Location, - StarNum: station.StarNum, - Phone: station.Phone, - StationPic: station.StationPic, - StationBannerPic: station.StationBannerPic, - District: station.District, - CityID: station.CityID, - StationType: station.StationType, - } - if station.Prices != nil { - if data, err := json.Marshal(station.Prices); err == nil { - stationInfo.Prices = string(data) - } - } - if station.Adverts != nil { - if data, err := json.Marshal(station.Adverts); err == nil { - stationInfo.Adverts = string(data) - } - } - return stationInfo -} - -func GetStationList(ctx *jxcontext.Context, stationName string, cityCode int, lat, lng float64, oilCode string, sortType, offset, pageSize int) (pageInfo *model.PagedInfo, err error) { - return dao.GetStationInfoList(dao.GetDB(), stationName, cityCode, lat, lng, oilCode, sortType, offset, pageSize) -} diff --git a/business/jxstore/cms/permission.go b/business/jxstore/cms/permission.go deleted file mode 100644 index 3c2317872..000000000 --- a/business/jxstore/cms/permission.go +++ /dev/null @@ -1,287 +0,0 @@ -package cms - -import ( - "fmt" - "time" - - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" -) - -func GetMenu(ctx *jxcontext.Context, userID string) (menus []*model.Menu, err error) { - if userID == "" { - return dao.GetMenu(dao.GetDB(), "", 0, userID) - } else { - return dao.GetMenuWithUser(dao.GetDB(), "", 0, userID) - } -} - -func AddMenu(ctx *jxcontext.Context, menu *model.Menu) (err error) { - var ( - db = dao.GetDB() - ) - if menu == nil { - return fmt.Errorf("添加失败!menu nil") - } - if menu.Name == "" || menu.Level == 0 { - return fmt.Errorf("添加失败!menu 名称和等级必须有值!") - } - menus, err := dao.GetMenu(db, menu.Name, menu.Level, "") - if len(menus) > 0 { - return fmt.Errorf("添加失败!已存在相同名称的 menu name : %v", menu.Name) - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - dao.WrapAddIDCULDEntity(menu, ctx.GetUserName()) - err = dao.CreateEntity(db, menu) - dao.Commit(db, txDB) - return err -} - -func UpdateMenu(ctx *jxcontext.Context, menuID int, payload map[string]interface{}, isDelete bool) (num int64, err error) { - var ( - db = dao.GetDB() - ) - menu := &model.Menu{} - menu.ID = menuID - err = dao.GetEntity(db, menu) - if err != nil { - return 0, err - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if !isDelete { - valid := dao.StrictMakeMapByStructObject(payload, menu, ctx.GetUserName()) - if len(valid) > 0 { - if num, err = dao.UpdateEntityLogically(db, menu, valid, ctx.GetUserName(), nil); err != nil { - dao.Rollback(db, txDB) - return 0, err - } - } - } else { - menu.DeletedAt = time.Now() - num, err = dao.UpdateEntity(db, menu, "DeletedAt") - } - dao.Commit(db, txDB) - return num, err -} - -func GetRole(ctx *jxcontext.Context) (roles []*model.Role, err error) { - return dao.GetRole(dao.GetDB(), "") -} - -func AddRole(ctx *jxcontext.Context, name string) (err error) { - var ( - db = dao.GetDB() - ) - roles, err := dao.GetRole(db, name) - if len(roles) > 0 { - return fmt.Errorf("添加失败!已存在相同名称的 role name : %v", name) - } - role := &model.Role{ - Name: name, - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - dao.WrapAddIDCULDEntity(role, ctx.GetUserName()) - err = dao.CreateEntity(db, role) - dao.Commit(db, txDB) - return err -} - -func UpdateRole(ctx *jxcontext.Context, roleID int, name string, isDelete bool) (num int64, err error) { - var ( - db = dao.GetDB() - ) - if roleID == 1 { - return 0, fmt.Errorf("管理员不允许修改!") - } - role := &model.Role{} - role.ID = roleID - err = dao.GetEntity(db, role) - if err != nil { - return 0, err - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if !isDelete { - role.Name = name - role.UpdatedAt = time.Now() - role.LastOperator = ctx.GetUserName() - num, err = dao.UpdateEntity(db, role, "Name", "UpdatedAt", "LastOperator") - } else { - role.DeletedAt = time.Now() - num, err = dao.UpdateEntity(db, role, "DeletedAt") - } - dao.Commit(db, txDB) - return num, err -} - -func GetUserRole(ctx *jxcontext.Context, userID string) (userRoles []*model.UserRole, err error) { - return dao.GetUserRole(dao.GetDB(), []string{userID}, nil) -} - -func UpdateUserRole(ctx *jxcontext.Context, userIDs []string, roleIDs []int) (err error) { - var ( - db = dao.GetDB() - roleIDMap = make(map[int]int) - nowRoleIDMap = make(map[int]int) - userRoleMap = make(map[string][]int) - addUserRoleMap = make(map[string][]int) - deleteUserRoleMap = make(map[string][]int) - ) - for _, v := range roleIDs { - roleIDMap[v] = 1 - } - userRoles, err := dao.GetUserRole(db, userIDs, nil) - if err != nil { - return err - } - if len(userRoles) > 0 { - for _, v := range userRoles { - userRoleMap[v.UserID] = append(userRoleMap[v.UserID], v.RoleID) - } - } - for _, userID := range userIDs { - nowRoleIDs := userRoleMap[userID] - for _, nowRoleID := range nowRoleIDs { - if roleIDMap[nowRoleID] == 0 { - deleteUserRoleMap[userID] = append(deleteUserRoleMap[userID], nowRoleID) - } - nowRoleIDMap[nowRoleID] = 1 - } - for _, roleID := range roleIDMap { - if nowRoleIDMap[roleID] == 0 { - addUserRoleMap[userID] = append(addUserRoleMap[userID], roleID) - } - } - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if len(addUserRoleMap) > 0 { - for userID, roleIDs := range addUserRoleMap { - for _, roleID := range roleIDs { - userRole := &model.UserRole{ - UserID: userID, - RoleID: roleID, - } - dao.WrapAddIDCULDEntity(userRole, ctx.GetUserName()) - err = dao.CreateEntity(db, userRole) - } - } - } - if len(deleteUserRoleMap) > 0 { - for userID, roleIDs := range deleteUserRoleMap { - for _, roleID := range roleIDs { - userRoles, _ := dao.GetUserRole(db, []string{userID}, []int{roleID}) - if len(userRoles) > 0 { - userRoles[0].DeletedAt = time.Now() - userRoles[0].LastOperator = ctx.GetUserName() - _, err = dao.UpdateEntity(db, userRoles[0], "DeletedAt", "LastOperator") - } - } - } - } - dao.Commit(db, txDB) - return err -} - -func GetRoleMenu(ctx *jxcontext.Context, roleID int) (roleMenus []*model.RoleMenu, err error) { - return dao.GetRoleMenu(dao.GetDB(), []int{roleID}, nil) -} - -func UpdateRoleMenu(ctx *jxcontext.Context, roleIDs, menuIDs []int) (err error) { - var ( - db = dao.GetDB() - menuIDMap = make(map[int]int) - nowMenuIDMap = make(map[int]int) - roleMenuMap = make(map[int][]int) - addRoleMenuMap = make(map[int][]int) - deleteRoleMenuMap = make(map[int][]int) - ) - for _, v := range menuIDs { - menuIDMap[v] = 1 - } - roleMenus, err := dao.GetRoleMenu(db, roleIDs, nil) - if err != nil { - return err - } - if len(roleMenus) > 0 { - for _, v := range roleMenus { - roleMenuMap[v.RoleID] = append(roleMenuMap[v.RoleID], v.MenuID) - } - } - for _, roleID := range roleIDs { - nowMenuIDs := roleMenuMap[roleID] - for _, nowMenuID := range nowMenuIDs { - if menuIDMap[nowMenuID] == 0 { - deleteRoleMenuMap[roleID] = append(deleteRoleMenuMap[roleID], nowMenuID) - } - nowMenuIDMap[nowMenuID] = 1 - } - for _, menuID := range menuIDMap { - if nowMenuIDMap[menuID] == 0 { - addRoleMenuMap[menuID] = append(addRoleMenuMap[menuID], menuID) - } - } - } - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if len(addRoleMenuMap) > 0 { - for roleID, menuIDs := range addRoleMenuMap { - for _, menuID := range menuIDs { - roleMenu := &model.RoleMenu{ - RoleID: roleID, - MenuID: menuID, - } - dao.WrapAddIDCULDEntity(roleMenu, ctx.GetUserName()) - err = dao.CreateEntity(db, roleMenu) - } - } - } - if len(deleteRoleMenuMap) > 0 { - for roleID, menuIDs := range deleteRoleMenuMap { - for _, menuID := range menuIDs { - roleMenus, _ := dao.GetRoleMenu(db, []int{roleID}, []int{menuID}) - if len(roleMenus) > 0 { - roleMenus[0].DeletedAt = time.Now() - roleMenus[0].LastOperator = ctx.GetUserName() - _, err = dao.UpdateEntity(db, roleMenus[0], "DeletedAt", "LastOperator") - } - } - } - } - dao.Commit(db, txDB) - return err -} diff --git a/business/jxstore/cms/print.go b/business/jxstore/cms/print.go index bd214bc20..4bb546b84 100644 --- a/business/jxstore/cms/print.go +++ b/business/jxstore/cms/print.go @@ -92,6 +92,7 @@ func DoPrint(appID int, msgID, printNo, content string, orderNo int) (err error) var ( db = dao.GetDB() ) + //打印机必须绑定在该应用下才能打印 printMsg := &model.PrintMsg{ PrintNo: printNo, diff --git a/business/jxstore/cms/temp.go b/business/jxstore/cms/temp.go deleted file mode 100644 index 6280d0cf9..000000000 --- a/business/jxstore/cms/temp.go +++ /dev/null @@ -1,9 +0,0 @@ -package cms - -var ( - textChan chan string -) - -func TestTemp() { - -} diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 4680bb59f..e5060788c 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -11,7 +11,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" ) var ( @@ -50,18 +49,6 @@ type JdUserStruct struct { type UserProvider struct { } -func (*UserProvider) GetUser(authID, authIDType string) (user auth2.IUser) { - globals.SugarLogger.Debugf("GetUser, authID:%s, authIDType:%s", authID, authIDType) - fieldName := authTypeFieldMap[authIDType] - if fieldName != "" { - user2, err := dao.GetUserByID(dao.GetDB(), fieldName, authID) - if err == nil { - user = user2 // 这样写的原因是golang nil的比较问题 - } - } - return user -} - func (*UserProvider) UpdateUserMobile(userID string, mobile string) (err error) { _, err = dao.UpdateEntityLogically(dao.GetDB(), &model.User{}, map[string]interface{}{ "Mobile": mobile, @@ -110,10 +97,6 @@ func (*UserProvider) UpdateLastLogin(userID string, lastLoginType, fromIP string return err } -func init() { - auth2.Init(userProvider) -} - func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, err error) { authInfo, err := ctx.GetV2AuthInfo() if err == nil { @@ -134,28 +117,6 @@ func DisableUser(ctx *jxcontext.Context, userID string) (err error) { return err } -func GetUsers(ctx *jxcontext.Context, keyword string, userID string, pop int, mobile string, fromTime, toTime string, timeType int, cityCodes, consumeTypes []int, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - return dao.GetUsers2(dao.GetDB(), keyword, userID, pop, mobile, utils.Str2Time(fromTime), utils.Str2Time(toTime), timeType, cityCodes, consumeTypes, offset, pageSize) -} - -func GetUser(ctx *jxcontext.Context, userID string) (user *model.GetUserResult, err error) { - return dao.GetUser(dao.GetDB(), userID) -} - -func checkUserType(userID string, userType int8) (err error) { - userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", "", []string{userID}, nil, nil, 0, 0) - if err != nil { - return err - } - if len(userList) == 0 { - return fmt.Errorf("找不到用户:%s", userID) - } - if userList[0].Type&userType == 0 { - return fmt.Errorf("用户:%s不能用于当前操作", userID) - } - return nil -} - func DeleteUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID int) (err error) { num, err := dao.DeleteEntityLogically(dao.GetDB(), &model.UserDeliveryAddress{}, nil, ctx.GetUserName(), map[string]interface{}{ model.FieldID: addressID, @@ -169,28 +130,6 @@ func DeleteUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID return err } -func DeleteMyDeliveryAddress(ctx *jxcontext.Context, addressID int) (err error) { - _, userID := ctx.GetMobileAndUserID() - return DeleteUserDeliveryAddress(ctx, userID, addressID) -} - -func QueryUserDeliveryAddress(ctx *jxcontext.Context, userIDs []string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - addressList, totalCount, err := dao.QueryUserDeliveryAddress(dao.GetDB(), 0, userIDs, 0, offset, pageSize) - if err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: totalCount, - Data: addressList, - } - } - return pagedInfo, err -} - -func QueryMyDeliveryAddress(ctx *jxcontext.Context, addType int) (addressList []*dao.UserDeliveryAddressEx, err error) { - _, userID := ctx.GetMobileAndUserID() - addressList, _, err = dao.QueryUserDeliveryAddress(dao.GetDB(), 0, []string{userID}, addType, 0, model.UnlimitedPageSize) - return addressList, err -} - func SaveUserCart(ctx *jxcontext.Context, userID string, storeID int, cartItems []*model.UserCartItem) (err error) { if userID == "" || storeID == 0 { return fmt.Errorf("用户与门店必须要指定") @@ -241,20 +180,6 @@ func LoadUserCart(ctx *jxcontext.Context, userID string, storeIDs []int) (cartIt return cartItems, err } -func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) { - var ( - db = dao.GetDB() - ) - userMembers, err := dao.GetUserMember(db, "", 0) - for _, userMember := range userMembers { - if time.Now().Sub(userMember.EndAt) > 0 { - userMember.DeletedAt = time.Now() - dao.UpdateEntity(db, userMember, "DeletedAt") - } - } - return err -} - type GetUserSerachKeywordResult struct { AllSpan []*model.UserSearch `json:"allSpan"` UserSpan []*model.UserSearch `json:"userSpan"` diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index 9b3932a5f..845487ad5 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -1,10 +1,8 @@ package event import ( - "fmt" "regexp" "strings" - "sync" "time" "git.rosy.net.cn/baseapi/utils" @@ -12,8 +10,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" - "github.com/gorilla/websocket" ) var ( @@ -23,161 +19,12 @@ var ( "UpdateUser": "UpdateUser", } regexpToken = regexp.MustCompile(`,"token":".*"`) - wsClient = &WSClient{} - //广播频道(通道) - broadcast = make(chan *model.ImMessageRecord) ) const ( sysMessageTitle = "" ) -//连接的客户端,吧每个客户端都放进来 -type WSClient struct { - Clients map[int]map[string]*websocket.Conn - ClientsHeart map[string]*websocket.Conn - s *sync.RWMutex -} - -func init() { - clients := make(map[int]map[string]*websocket.Conn) - clientsHeart := make(map[string]*websocket.Conn) - wsClient.Clients = clients - wsClient.ClientsHeart = clientsHeart - wsClient.s = new(sync.RWMutex) - go handleMessages() -} - -//广播推送消息 -func handleMessages() { - for { - //读取通道中的消息 - msg := <-broadcast - if msg.GroupID == 0 { - // globals.SugarLogger.Debugf("heart %v", utils.Format4Output(msg, false)) - if wsClient.ClientsHeart[msg.UserID] != nil { - if err := wsClient.ClientsHeart[msg.UserID].WriteJSON(&model.ImMessageRecord{ - Key: "pang", - }); err != nil { - globals.SugarLogger.Debugf("heart client.WriteJSON error: %v", err) - wsClient.ClientsHeart[msg.UserID].Close() //关闭 - delete(wsClient.ClientsHeart, msg.UserID) - } - } - } else { - globals.SugarLogger.Debugf("clients len %v", len(wsClient.Clients)) - //循环map客户端 - for userID, client := range wsClient.Clients[msg.GroupID] { - //把通道中的消息发送给客户端 - user, err := dao.GetUser(dao.GetDB(), msg.UserID) - if err == nil { - msg.UserInfo = user - } - globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false)) - if msg.CreatedAt == utils.ZeroTimeValue { - msg.CreatedAt = time.Now() - } - err = client.WriteJSON(msg) - if err != nil { - globals.SugarLogger.Debugf("client.WriteJSON error: %v", err) - client.Close() //关闭 - delete(wsClient.Clients[msg.GroupID], userID) - // delete(clients, client) //删除map中的客户端 - } - } - } - } -} - -func ImMessage(userID string, ws *websocket.Conn) (err error) { - var ( - clientUser = make(map[string]*websocket.Conn) - db = dao.GetDB() - ) - //将当前客户端放入map中 - messageGroups, _ := dao.GetUserMessageGroups(dao.GetDB(), userID) - if len(messageGroups) == 0 { - return - } - wsClient.s.Lock() - clientUser[userID] = ws - wsClient.ClientsHeart[userID] = ws - for _, v := range messageGroups { - if len(wsClient.Clients[v.GroupID]) > 0 { - wsClient.Clients[v.GroupID][userID] = ws - } else { - wsClient.Clients[v.GroupID] = clientUser - } - } - wsClient.s.Unlock() - globals.SugarLogger.Debugf("userID :%v ,clients :%v", userID, utils.Format4Output(wsClient.Clients, false)) - - var s *model.ImMessageRecord - for { - //接收客户端的消息 - err := ws.ReadJSON(&s) - if err != nil { - globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error()) - for k, _ := range wsClient.Clients { - delete(wsClient.Clients[k], userID) - } - delete(wsClient.ClientsHeart, userID) - // delete(clients, ws) //删除map中的客户端 - break //结束循环 - } else { - //接受消息 业务逻辑 - broadcast <- s - if s.GroupID != 0 { - if s.GroupID != model.SysGroupID { - //发聊天消息时,这个组所有的成员包括创建者都在userIDs里 - userIDs := []string{} - if results, err := dao.GetMessageGroups(db, "", s.GroupID, 0, true, ""); err == nil { - for _, v := range results { - userIDs = append(userIDs, v.UserID) - for _, vv := range v.MessageGroupMembers { - userIDs = append(userIDs, vv.UserID) - } - } - } - //如果这些人不在这个组的ws池子里就打上未读标记 - for _, v := range userIDs { - if wsClient.ClientsHeart[v] == nil { - messageGroupReads, _ := dao.GetMessageGroupRead(db, v, s.GroupID) - for _, vv := range messageGroupReads { - vv.UnReadCount++ - dao.UpdateEntity(db, vv, "UnReadCount") - } - } - } - } else { - if wsClient.ClientsHeart[s.ToUserID] == nil { - messageGroupReads, _ := dao.GetMessageGroupRead(db, s.ToUserID, s.GroupID) - for _, vv := range messageGroupReads { - vv.UnReadCount++ - dao.UpdateEntity(db, vv, "UnReadCount") - } - } - } - } - utils.CallFuncAsync(func() { - if s.GroupID != 0 { - dao.WrapAddIDCULDEntity(s, "") - dao.CreateEntity(db, s) - } - }) - } - } - ws.Close() - return err -} - -func GetOnlineUserCount() (count int) { - wsClient.s.RLock() - count = len(wsClient.ClientsHeart) - wsClient.s.RUnlock() - return count -} - func AddOperateEvent(ctx *jxcontext.Context, accessUUID, jsonData string, errCode, errMsg string, useTime int, apiFunctionSpec string) (err error) { var ( apiFunction string @@ -282,430 +129,3 @@ func GetOperateEvents(ctx *jxcontext.Context, name string, apiFunctions []string } return pageInfo, err } - -func CreateMessageGroup(ctx *jxcontext.Context, userID, userID2, groupName string, dividePercentage, quitPrice int) (messageGroupResult *dao.GetMessageGroupsResult, err error) { - var ( - db = dao.GetDB() - groupID int - ) - for { - groupID = jxutils.GenRand6() - temp := &model.MessageGroup{ - GroupID: groupID, - } - dao.GetEntity(db, temp, "GroupID") - if temp.UserID == "" { - break - } - } - if userID2 != "" { - messageGroups, err := dao.GetMessageGroups(db, userID, 0, model.GroupTypeSingle, true, userID2) - if len(messageGroups) > 0 && len(messageGroups[0].MessageGroupMembers) > 0 { - return messageGroups[0], err - } - user, err := dao.GetUserByID(db, "user_id", userID2) - if err != nil { - return nil, err - } - if user == nil { - return nil, fmt.Errorf("无法找到要联系的用户!") - } - messageGroup := &model.MessageGroup{ - GroupID: groupID, - UserID: userID, - // Name: user.Name, - Type: model.GroupTypeSingle, - MaxCount: 2, - } - messageGroupMember := &model.MessageGroupMember{ - GroupID: groupID, - MemberUserID: userID2, - Type: model.GroupMemberTypeNormal, - } - dao.WrapAddIDCULDEntity(messageGroup, ctx.GetUserName()) - dao.WrapAddIDCULDEntity(messageGroupMember, ctx.GetUserName()) - err = dao.CreateEntity(db, messageGroup) - err = dao.CreateEntity(db, messageGroupMember) - if err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: groupID, - UserID: userID, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - messageGroupRead2 := messageGroupRead - messageGroupRead2.UserID = userID2 - dao.CreateEntity(db, messageGroupRead) - if err = dao.CreateEntity(db, messageGroupRead2); err == nil { - if messageGroupReads, err := dao.GetMessageGroupRead(db, userID2, model.SysGroupID); len(messageGroupReads) == 0 && err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: model.SysGroupID, - UserID: userID2, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - dao.CreateEntity(db, messageGroupRead) - } - } - } - } else { - userMembers, err := dao.GetUserMember(db, userID, model.MemberTypeNormal) - messageGroupsResult, err := dao.GetMessageGroups(db, userID, 0, model.GroupTypeMulit, false, "") - messageGroupMembers, err := dao.GetMessageGroupMembers(db, 0, model.GroupTypeMulit, userID) - if err != nil { - return nil, err - } - if len(userMembers) == 0 { - return nil, fmt.Errorf("抱歉,只有会员才能创建群聊!") - } - if len(messageGroupsResult) > 0 { - return nil, fmt.Errorf("您已经有群组了,请勿重复创建!群号为:%d", messageGroupsResult[0].GroupID) - } - if len(messageGroupMembers) > 0 { - return nil, fmt.Errorf("您已加入了[%v]群,请先退出后再创建!", messageGroupMembers[0].GroupID) - } - messageGroup := &model.MessageGroup{ - GroupID: groupID, - UserID: userID, - Name: groupName, - Type: model.GroupTypeMulit, - MaxCount: 2000, - DividePercentage: dividePercentage, - QuitPrice: quitPrice, - } - user, err := dao.GetUserByID(db, "user_id", userID) - if groupName == "" { - messageGroup.Name = user.Name + "的集团" - } - dao.WrapAddIDCULDEntity(messageGroup, ctx.GetUserName()) - if err = dao.CreateEntity(db, messageGroup); err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: groupID, - UserID: userID, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - dao.CreateEntity(db, messageGroupRead) - } - } - if err == nil { - if messageGroupReads, err := dao.GetMessageGroupRead(db, userID, model.SysGroupID); len(messageGroupReads) == 0 && err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: model.SysGroupID, - UserID: userID, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - dao.CreateEntity(db, messageGroupRead) - } - } - return messageGroupResult, err -} - -func GetMessageGroupByUser(ctx *jxcontext.Context, userID string) (messageGroupResult []*dao.GetMessageGroupsResult, err error) { - var ( - db = dao.GetDB() - ) - messageGroups, err := dao.GetMessageGroups(db, "", model.SysGroupID, 0, false, "") - messageGroups2, err := dao.GetMessageGroups(db, userID, 0, 0, true, "") - messageGroups = append(messageGroups, messageGroups2...) - messageGroupMembers, err := dao.GetMessageGroupMembers(db, 0, 0, userID) - for _, v := range messageGroupMembers { - if messageGroupList, err := dao.GetMessageGroups(db, "", v.GroupID, 0, false, ""); err == nil { - messageGroups = append(messageGroups, messageGroupList...) - } - } - for _, v := range messageGroups { - //是这个人创建的群聊,如果是单聊就返回对方的头像 - if v.Type == model.GroupTypeSingle { - var userID2 string - if v.UserID == userID { - userID2 = v.MessageGroupMembers[0].MemberUserID - } else { - userID2 = userID - } - if user, err := dao.GetUserByID(db, "user_id", userID2); err == nil { - v.Avatar = user.Avatar - v.Name = user.Name - } - } - var ( - imMessageRecord *model.ImMessageRecord - sql string - sqlParams = []interface{}{} - ) - if v.GroupID != model.SysGroupID { - //最后一条记录和时间和人 - sql = ` - SELECT * FROM im_message_record WHERE group_id = ? ORDER BY created_at DESC LIMIT 1 - ` - sqlParams = append(sqlParams, v.GroupID) - } else { - //最后一条记录和时间和人 - sql = ` - SELECT * FROM im_message_record WHERE group_id = ? AND to_user_id = ? ORDER BY created_at DESC LIMIT 1 - ` - sqlParams = append(sqlParams, v.GroupID, userID) - } - if err = dao.GetRow(db, &imMessageRecord, sql, sqlParams); err == nil { - v.LastTime = imMessageRecord.CreatedAt - v.LastContent = imMessageRecord.Content - v.LastMessageType = imMessageRecord.MessageType - if user3, err := dao.GetUserByID(db, "user_id", imMessageRecord.UserID); err == nil { - v.LastUserName = user3.Name - } - } else { - err = nil - } - //该用户各组的未读消息数 - var unReadCount int - if messageGroupReads, err := dao.GetMessageGroupRead(db, userID, v.GroupID); err == nil && len(messageGroupReads) > 0 { - for _, vv := range messageGroupReads { - unReadCount += vv.UnReadCount - } - } - v.UnReadMessageCount = unReadCount - } - return messageGroups, err -} - -func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err error) { - var ( - db = dao.GetDB() - ) - messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) - messageGroupMembers3, err := dao.GetMessageGroupMembers(db, 0, 0, userID) - messageGroupsResult, err := dao.GetMessageGroups(db, userID, groupID, model.GroupTypeMulit, false, "") - messageGroupsResult2, err := dao.GetMessageGroups(db, "", groupID, model.GroupTypeMulit, false, "") - messageGroupsResult3, err := dao.GetMessageGroups(db, userID, 0, model.GroupTypeMulit, false, "") - messageGroupMembers2, err := dao.GetMessageGroupMembers(db, groupID, 0, "") - if err != nil { - return err - } - if len(messageGroupMembers) > 0 { - return fmt.Errorf("此用户已经在该群组中了!") - } - if len(messageGroupMembers3) > 0 { - return fmt.Errorf("您已经有群组[%v]了,不能申请加入其它群!", messageGroupMembers3[0].GroupID) - } - if len(messageGroupsResult) > 0 { - return fmt.Errorf("请不要加入自己创建的群!") - } - if len(messageGroupsResult2) > 0 && len(messageGroupMembers2) > 0 { - if len(messageGroupMembers2)+1 > messageGroupsResult2[0].MaxCount { - return fmt.Errorf("抱歉该群组已经满员了!") - } - } - if len(messageGroupsResult3) > 0 { - return fmt.Errorf("您已经拥有[%v]群了,不能再加入其它群!", messageGroupsResult3[0].GroupID) - } - - messageGroupMember := &model.MessageGroupMember{ - GroupID: groupID, - MemberUserID: userID, - Type: model.GroupMemberTypeNormal, - } - dao.WrapAddIDCULDEntity(messageGroupMember, ctx.GetUserName()) - if err = dao.CreateEntity(db, messageGroupMember); err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: groupID, - UserID: userID, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - if err = dao.CreateEntity(db, messageGroupRead); err == nil { - if messageGroupReads, err := dao.GetMessageGroupRead(db, userID, model.SysGroupID); len(messageGroupReads) == 0 && err == nil { - messageGroupRead := &model.MessageGroupRead{ - GroupID: model.SysGroupID, - UserID: userID, - } - dao.WrapAddIDCULEntity(messageGroupRead, ctx.GetUserName()) - dao.CreateEntity(db, messageGroupRead) - } - } - } - return err -} - -func UpdateMessageGroup(ctx *jxcontext.Context, groupID int, payload map[string]interface{}) (num int64, err error) { - var ( - db = dao.GetDB() - messageGroup = &model.MessageGroup{ - GroupID: groupID, - } - ) - if err = dao.GetEntity(db, messageGroup, "GroupID"); err != nil { - return 0, err - } - if messageGroup.UserID != ctx.GetUserID() { - return 0, fmt.Errorf("只有群主才能修改群信息!") - } - valid := dao.StrictMakeMapByStructObject(payload, messageGroup, ctx.GetUserName()) - if len(valid) > 0 { - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if num, err = dao.UpdateEntityLogically(db, messageGroup, valid, ctx.GetUserName(), nil); err != nil { - dao.Rollback(db, txDB) - return 0, err - } - dao.Commit(db, txDB) - } - return num, err -} - -func TransferMessageGroupMaster(ctx *jxcontext.Context, groupID int, userID string) (err error) { - var ( - db = dao.GetDB() - messageGroup = &model.MessageGroup{ - GroupID: groupID, - } - ) - if err = dao.GetEntity(db, messageGroup, "GroupID"); err != nil { - return err - } - if messageGroup.UserID != ctx.GetUserID() { - return fmt.Errorf("只有群主才能转让群主!") - } - //群主换成选的那个人 - messageGroup.UserID = userID - messageGroup.LastOperator = ctx.GetUserName() - //之前那个群成员换成之前的群主 - messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) - if err != nil && len(messageGroupMembers) == 0 { - return err - } - messageGroupMember := messageGroupMembers[0] - messageGroupMember.MemberUserID = ctx.GetUserID() - messageGroupMember.LastOperator = ctx.GetUserName() - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db, txDB) - panic(r) - } - }() - if _, err = dao.UpdateEntity(db, messageGroup, "UserID", "LastOperator"); err != nil { - dao.Rollback(db, txDB) - return err - } - if _, err = dao.UpdateEntity(db, messageGroupMember, "MemberUserID", "LastOperator"); err != nil { - dao.Rollback(db, txDB) - return err - } - dao.Commit(db, txDB) - return err -} - -func SendSysMessageSimple(content, toUserID string) (err error) { - return SendSysMessage(jxcontext.AdminCtx, &model.ImMessageRecord{ - Content: sysMessageTitle + " " + content, - ToUserID: toUserID, - GroupID: model.SysGroupID, - MessageType: 1, // 普通文字消息 - }) -} - -func SendSysMessage(ctx *jxcontext.Context, imMessageRecord *model.ImMessageRecord) (err error) { - var ( - db = dao.GetDB() - userID = imMessageRecord.ToUserID - groupID = imMessageRecord.GroupID - ) - if groupID != model.SysGroupID { - return fmt.Errorf("只能给系统组发消息!") - } - imMessageRecord.CreatedAt = time.Now() - imMessageRecord.LastOperator = ctx.GetUserName() - imMessageRecord.DeletedAt = utils.DefaultTimeValue - imMessageRecord.UpdatedAt = utils.DefaultTimeValue - imMessageRecord.Seq = time.Now().Unix() - err = dao.CreateEntity(db, imMessageRecord) - if userID == "" { - //循环map客户端 - for _, client := range wsClient.Clients[groupID] { - globals.SugarLogger.Debugf("msg %v", utils.Format4Output(imMessageRecord, false)) - err = client.WriteJSON(imMessageRecord) - if err != nil { - globals.SugarLogger.Debugf("client.WriteJSON error: %v", err) - client.Close() //关闭 - // delete(wsClient.Clients[msg.GroupID], userID) - } - } - } else { - client := wsClient.Clients[groupID][userID] - globals.SugarLogger.Debugf("msg %v", utils.Format4Output(imMessageRecord, false)) - if client == nil { - return - } - err = client.WriteJSON(imMessageRecord) - if err != nil { - globals.SugarLogger.Debugf("client.WriteJSON error: %v", err) - client.Close() //关闭 - // delete(wsClient.Clients[msg.GroupID], userID) - } - } - return err -} - -func DeleteMessageRecord(ctx *jxcontext.Context) (err error) { - var ( - db = dao.GetDB() - ) - sql := ` - DELETE FROM im_message_record WHERE created_at < ? AND group_id <> ? - ` - sqlParams := []interface{}{ - time.Now().AddDate(0, 0, -3), model.SysGroupID, - } - _, err = dao.ExecuteSQL(db, sql, sqlParams) - return err -} - -func UpdateUserMessageGroupRead(ctx *jxcontext.Context, reads []*model.MessageGroupRead) (err error) { - var ( - db = dao.GetDB() - userID = ctx.GetUserID() - ) - for _, v := range reads { - if messageReads, err := dao.GetMessageGroupRead(db, userID, v.GroupID); err == nil { - if len(messageReads) > 0 { - messageReads[0].UnReadCount += v.UnReadCount - dao.UpdateEntity(db, messageReads[0], "UnReadCount") - } else { - - } - } - } - return err -} - -type GetUserStatisticsResult struct { - RegisterUserCount int `json:"registerUserCount"` //注册数 - OnlineUserCount int `json:"onlineUserCount"` //在线用户数 - ConsumeUserCount int `json:"consumeUserCount"` //消费用户数 - MemberUserCount int `json:"memberUserCount"` //会员用户数 -} - -func GetUserStatistics(ctx *jxcontext.Context) (getUserStatisticsResult *GetUserStatisticsResult, err error) { - var ( - db = dao.GetDB() - ) - getUserStatisticsResult = &GetUserStatisticsResult{} - sql := ` - SELECT a.member_user_count, b.consume_user_count FROM - ( SELECT DISTINCT COUNT(a.user_id) member_user_count - FROM user a - JOIN user_member b ON a.user_id = b.user_id AND b.deleted_at = ? )a, - ( SELECT DISTINCT COUNT(a.user_id) consume_user_count - FROM user a - JOIN ` + "`order`" + `b ON a.user_id = b.user_id AND b.status = ?)b - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, model.OrderStatusFinished, - } - err = dao.GetRow(db, &getUserStatisticsResult, sql, sqlParams) - paged, _ := dao.GetUsers2(db, "", "", 0, "", utils.ZeroTimeValue, utils.ZeroTimeValue, 0, nil, nil, 0, -1) - getUserStatisticsResult.RegisterUserCount = paged.TotalCount - getUserStatisticsResult.OnlineUserCount = GetOnlineUserCount() - return getUserStatisticsResult, err -} diff --git a/business/jxstore/financial/bill.go b/business/jxstore/financial/bill.go deleted file mode 100644 index 6ced8cbff..000000000 --- a/business/jxstore/financial/bill.go +++ /dev/null @@ -1 +0,0 @@ -package financial diff --git a/business/jxstore/financial/pay.go b/business/jxstore/financial/pay.go deleted file mode 100644 index 6ced8cbff..000000000 --- a/business/jxstore/financial/pay.go +++ /dev/null @@ -1 +0,0 @@ -package financial diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go deleted file mode 100644 index 46ee3bc0c..000000000 --- a/business/jxstore/initdata/initdata.go +++ /dev/null @@ -1,162 +0,0 @@ -package initdata - -import ( - "fmt" - - "git.rosy.net.cn/baseapi/platformapi/autonavi" - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals/api" -) - -func TruncateTable(db *dao.DaoDB, tableName string) (err error) { - _, err = dao.ExecuteSQL(db, "TRUNCATE TABLE "+tableName) - return err -} - -func insertPlace(ctx *jxcontext.Context, db *dao.DaoDB, parent *autonavi.District, placeList []*autonavi.District) (err error) { - for _, v := range placeList { - if v.Level <= autonavi.DistrictLevelDistrict { - place := &model.Place{ - Code: int(utils.Str2Int64(v.Adcode)), - Name: v.Name, - Level: int8(v.Level), - TelCode: v.CityCode, - Enabled: 1, - } - if parent != nil { - place.ParentCode = int(utils.Str2Int64(parent.Adcode)) - } - dao.WrapAddIDCULEntity(place, ctx.GetUserName()) - if err = dao.CreateEntity(db, place); err != nil { - return err - } - if err = insertPlace(ctx, db, v, v.Districts); err != nil { - return err - } - } - } - return nil -} - -func InitPlace(ctx *jxcontext.Context) (err error) { - placeList, err2 := api.AutonaviAPI.GetDistricts(autonavi.DistrictLevelDistrict, "") - if err = err2; err != nil { - return err - } - placeList = placeList[0].Districts - db := dao.GetDB() - txDB, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db, txDB) - if r != nil { - panic(r) - } - } - }() - if _, err = dao.ExecuteSQL(db, ` - DELETE t1 - FROM place t1 - WHERE code < 9000000; - `); err != nil { - return err - } - if err = insertPlace(ctx, db, nil, placeList); err != nil { - return err - } - dao.Commit(db, txDB) - return err -} - -func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { - // db := dao.GetDB() - // rootTask := tasksch.NewSeqTask("合并SkuName图片至DataResource", ctx, - // func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - // switch step { - // case 0: // 计算SkuName中缺失的hashCode(注意是DescImg不是Img) - // var skuNameList []*model.SkuName - // if err = dao.GetRows(db, &skuNameList, ` - // SELECT t1.* - // FROM sku_name t1 - // WHERE t1.desc_img <> '' AND t1.img_hash_code = '' - // `); err == nil && len(skuNameList) > 0 { - // calcTask := tasksch.NewParallelTask("UploadImg4Vendors calc hashCode", - // tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx, - // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // skuName := batchItemList[0].(*model.SkuName) - // _, skuName.ImgHashCode, err = jxutils.DownloadFileByURL(skuName.DescImg) - // if err == nil { - // dao.UpdateEntity(db, skuName, "ImgHashCode") - // } - // return retVal, err - // }, skuNameList) - // tasksch.HandleTask(calcTask, task, false).Run() - // _, err = calcTask.GetResult(0) - // } - // case 1: // 从SkuName添加缺失的图片至DataResource - // _, err = dao.ExecuteSQL(db, ` - // INSERT INTO data_resource(created_at, updated_at, last_operator, hash_code, - // resource_type, name, main_url, ebai_url, qiniu_url, use_type) - // SELECT t1.created_at, t1.created_at, t1.last_operator, t1.img_hash_code, - // CASE - // WHEN INSTR(t1.desc_img, ".jpg") > 0 OR INSTR(t1.desc_img, ".jpeg") > 0 THEN - // 'image/jpeg' - // WHEN INSTR(t1.desc_img, ".png") > 0 OR INSTR(t1.desc_img, ".peg") > 0 THEN - // 'image/png' - // WHEN INSTR(t1.desc_img, ".gif") THEN - // 'image/gif' - // ELSE - // '' - // END resource_type, - // CONCAT(t1.name, '_desc'), desc_img main_url, t1.desc_img_ebai ebai_url, - // IF(INSTR(t1.desc_img, "image.jxc4.com") > 0, t1.desc_img, '') qiniu_url, 2 - // FROM sku_name t1 - // JOIN ( - // SELECT img_hash_code, MAX(id) id, COUNT(*) ct - // FROM sku_name - // WHERE img_hash_code <> '' AND desc_img <> '' - // GROUP BY 1 - // ) t3 ON t3.id = t1.id - // LEFT JOIN data_resource t2 ON (t2.main_url <> '' AND t2.main_url = t1.desc_img) - // WHERE t1.desc_img <> '' AND t1.img_hash_code <> '' AND t2.id IS NULL; - // `) - // case 2: // 统一SkuName中同hashCode,不同图片地址至同一地址 - // _, err = dao.ExecuteSQL(db, ` - // UPDATE sku_name t1 - // JOIN data_resource t2 ON t2.hash_code = t1.img_hash_code AND t2.main_url <> '' - // SET t1.desc_img = t2.main_url - // WHERE t1.img_hash_code <> '' AND t1.desc_img <> t2.main_url; - // `) - // case 3: // 上传DataResource中缺失的平台图片 - // dataResList, err2 := dao.GetNeedUploadDataResource(db) - // if err = err2; err == nil && len(dataResList) > 0 { - // uploadTask := tasksch.NewParallelTask("批量上传图片至平台", - // tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(2), ctx, - // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // dataRes := batchItemList[0].(*model.DataResource) - // _, err = datares.UploadImage2Vendors(ctx, task, dataRes, nil, false) - // return nil, err - // }, dataResList) - // tasksch.HandleTask(uploadTask, task, true).Run() - // _, err = uploadTask.GetResult(0) - // } - // } - // return result, err - // }, 4) - // tasksch.HandleTask(rootTask, nil, true).Run() - // if !isAsync { - // if _, err = rootTask.GetResult(0); err == nil { - // hint = "1" - // } - // } else { - // hint = rootTask.ID - // } - return hint, err -} - -func getSkuNameKey(prefix, name, comment, specUnit, unit string, specQuality float32) string { - return fmt.Sprintf("%s-%s-%f-%s-%s", prefix, name, specQuality, specUnit, unit) -} diff --git a/business/jxutils/jxcontext/jxcontext.go b/business/jxutils/jxcontext/jxcontext.go index 602c406ca..a738ae232 100644 --- a/business/jxutils/jxcontext/jxcontext.go +++ b/business/jxutils/jxcontext/jxcontext.go @@ -7,7 +7,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" ) @@ -163,14 +162,3 @@ func (ctx *Context) GetUserID() (userID string) { } return userID } - -func (ctx *Context) GetFullUser() (user *model.User) { - token := ctx.GetToken() - authInfo, err2 := auth2.GetTokenInfo(token) - if err2 == nil { - if authInfo.TokenType == auth2.TokenTypeNormal { - user, _ = dao.GetUserByID(dao.GetDB(), "user_id", authInfo.GetID()) - } - } - return user -} diff --git a/business/jxutils/unipush/push.go b/business/jxutils/unipush/push.go deleted file mode 100644 index acd099a4d..000000000 --- a/business/jxutils/unipush/push.go +++ /dev/null @@ -1,95 +0,0 @@ -package push - -import ( - "fmt" - "strings" - - "git.rosy.net.cn/baseapi/platformapi/unipushapi" - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/api" - "github.com/astaxie/beego" -) - -func pushToSingle(content, title string, storeID int) { - var ( - db = dao.GetDB() - ) - if !globals.IsProductEnv() { - return - } - storePushs, err := dao.GetStorePushClient(db, storeID, "") - if err != nil { - return - } - for _, v := range storePushs { - - status, err2 := api.PushAPI.PushToSingle(v.ClientID, false, &unipushapi.Notification{ - Title: title, - Body: content, - }) - if err = err2; err != nil { - globals.SugarLogger.Debugf("NotifyNewOrder push error: [%v]", err) - continue - } - if status == unipushapi.SuccessOffLine { - _, err = api.PushAPI.PushToSingle(v.ClientID, true, &unipushapi.Notification{ - Body: content, - }) - if err != nil { - globals.SugarLogger.Debugf("NotifyNewOrder push2 error: [%v]", err) - continue - } - } - - } -} - -func NotifyNewOrder(order *model.GoodsOrder) { - globals.SugarLogger.Debugf("NotifyNewOrder push begin orderID :[%v]", order.VendorOrderID) - sb := new(strings.Builder) - sb.WriteString("老板,") - sb.WriteString(order.ConsigneeName) - sb.WriteString("购买了商品") - sb.WriteString(getOrderDetailBrief(order)) - pushToSingle(sb.String(), "京西菜市新订单推送", jxutils.GetSaleStoreIDFromOrder(order)) -} - -func getOrderDetailBrief(order *model.GoodsOrder) (brief string) { - sb := new(strings.Builder) - sb.WriteString(order.Skus[0].SkuName) - sb.WriteString("等共") - sb.WriteString(utils.Int2Str(order.Skus[0].Count)) - sb.WriteString("份(") - sb.WriteString(jxutils.IntPrice2StandardString(order.Skus[0].SalePrice)) - sb.WriteString("元/份)等,预计收入") - //TODO 2020-07-20 果园和菜市不同 - var price int64 - if beego.BConfig.RunMode == "jxgy" { - price = order.EarningPrice - } else { - if order.EarningType == model.EarningTypePoints { - price = order.ActualPayPrice - } else { - price = order.ShopPrice - } - } - sb.WriteString(jxutils.IntPrice2StandardString(price)) - sb.WriteString("元") - return sb.String() -} - -func NotifyAfsOrder(afsOrder *model.AfsOrder) (err error) { - globals.SugarLogger.Debugf("NotifyAfsOrder push begin orderID :[%v]", afsOrder.VendorOrderID) - pushToSingle("老板,您有新的售后单,请尽快处理!", "京西菜市售后单推送", jxutils.GetSaleStoreIDFromAfsOrder(afsOrder)) - return err -} - -func NotifyOrderCanceled(order *model.GoodsOrder) (err error) { - title := fmt.Sprintf("老板,您的订单%s第%d号订单, %s被取消了!", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID) - pushToSingle(title, "京西菜市取消单推送", jxutils.GetSaleStoreIDFromOrder(order)) - return err -} diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go deleted file mode 100644 index b6da302d2..000000000 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ /dev/null @@ -1,122 +0,0 @@ -package weixinmsg - -import ( - "fmt" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/api" -) - -const ( - WX_TO_ORDER_PAGE_URL = "/#/?jxStoreId=" - WX_TO_STORE_SKU_PAGE_URL = "/#/shop?jxStoreId=" - WX_TO_SHOW_COMMENTS_DETAIL_URL = "/#/assess-list?jxStoreId=" //展示差评详情的页面 - WX_TO_SHOW_MSG = "/#/message-detail?msgID=%d&msgStatusID=%d" - - WX_MINI_TO_ORDER_PAGE_URL = "pages/order-manager/main" - WX_MINI_TO_STORE_SKU_PAGE_URL = "pages/goods-manager/main" - WX_MINI_TO_SHOW_COMMENTS_DETAIL_URL = "pages/pagesStore/store-comment/main" - WX_MINI_TO_SHOW_MSG = "pages/pagesStore/msg-page/main?msgID=%d&msgStatusID=%d" - - //新订单模板消息文字颜色 - WX_NEW_ORDER_TEMPLATE_COLOR = "#173177" - WX_HIGHLEVEL_TEMPLATE_COLOR = "#FF0000" //红色 - WX_HIGHLEVEL_TEMPLATE_COLOR2 = "#333333" //黑色 - WX_TEMPLATE_VENDERCOLOR_JDDJ = "#47B34F" - WX_TEMPLATE_VENDERCOLOR_MT = "#F4A800" - WX_TEMPLATE_VENDERCOLOR_ELM = "#0191EA" //蓝色 - WX_TEMPLATE_VENDERCOLOR_BAD_COMMENTS = "#4F4DA0" - - WX_NEWORDER_TEMPLATE_ID = "_DtNGwmOeR6TkkTVUblxLIlkV2MAPOX57TkvfdqG6nY" //微信新订单推送 - WX_ADJUSTORDER_TEMPLATE_ID = "N5rmV2-PDf3opjkv23IdLc76VnFThr_uOKSh5FzT13M" //微信调整订单推送 - WX_MTPS_DELIVERY_GRABDONE_TEMPLATE_ID = "h4dkON6AgnHz1XmaksEUB_8Bcir4V8MSexUhC149pPE" //微信美团配送员接单推送 - WX_MTPS_DELIVERY_DONE_TEMPLATE_ID = "YXdCrQAHZlcZX1htYUiarrLmtkmKAjp7rynjwObgODo" //微信美团配送员配送完成推送 - WX_MTPS_UNABLE_DELIVER_TEMPLATE_ID = "ZFph5Hp7oLlrzVRXbsKIC_StmaBeB9Dlp4tlHeAmUQ8" //微信美团配送配送能力不足推送 - WX_MTPS_DELIVERY_EXCEPTION_TEMPLATE_ID = "RkfOFHgR1N75L4-a6Gv0DljpCsVfOHhLm_vyXh8MR-w" //微信美团配送异常推送 - WX_BAD_COMMENT_PUSH_TEMPLATE_ID = "NaMEzjctvVPQ9ishTI1dKpp5QSYV2FWcWftSSjDrpN8" //微信中差评消息推送 - - WX_DADA_DELIVERY_GRABDONE_TEMPLATE_ID = "h4dkON6AgnHz1XmaksEUB_8Bcir4V8MSexUhC149pPE" //微信达达众包配送员接单推送 - WX_DADA_DELIVERY_DONE_TEMPLATE_ID = "YXdCrQAHZlcZX1htYUiarrLmtkmKAjp7rynjwObgODo" //微信达达众包配送员配送完成推送 - - WX_SALE_BILL_TEMPLATE_ID = "eTUuFZMWH7IsVBfcxNMpmaHYaxRkUaD6zG8wSGJDcic" - - WX_NORMAL_STORE_MSG_TEMPLATE_ID = "EUeIJEz2TLUAn4TU2EffOGYLd3dEaYndD_y6Sw9FcSU" - WX_CHANGE_APPROVED_TEMPLATE_ID = "gIG2olBZtQbjXmp6doNB_dESu60By5xuXYOGxksLv3Y" - WX_CHANGE_REJECTED_TEMPLATE_ID = "OBF4-d5inK95epHcUltpdb1zq9boVp2HESpASVRh1Oo" - WX_ORDER_APPLY_CANCEL_TEMPLATE_ID = "e6urTtcm4PL0rgDMG_1qWNOwrE3Qxqcm_dx0kWWCmEI" - WX_ORDER_ORDER_CANCELED_TEMPLATE_ID = "HXjuSAbIk77Xh18hjgwoxHzbciR9jX3Rn2CpLJz9dZw" - WX_ORDER_CHANGE_INFO_TEMPLATE_ID = "cjmEQFEpvcOuBNqQpTfMU5FeBpGRbQh_gWKz-WPW8Ro" - - WX_AFS_ORDER_WAIT4APPROVE_TEMPLATE_ID = "X29udtANvhX6x1Lyh-T40NGNjRXBbUj5oSBTfDhZAqU" - WX_AFS_ORDER_STATUS_CHANGED_TEMPLATE_ID = "99T33rrXX0VboO1hljs4x8dDoLiSj3QX_rOikPHIXkg" - - WS_NOTIFY_STORE_STATUS_CHHANGED_TEMPLATE_ID = "Fl0vOnBKTQqRFx3-shGKxdCnxMdQXNeODzgkuwd7oxw" - - WX_STORE_ALERT_TEMPLATE_ID = "0AjzVl1wPl6iO4nFOS4IEsJYSzBymlT37DciIvcCOxE" -) - -var ( - VendorColors = map[int]string{ - model.VendorIDJD: WX_TEMPLATE_VENDERCOLOR_JDDJ, - model.VendorIDMTWM: WX_TEMPLATE_VENDERCOLOR_MT, - model.VendorIDELM: WX_TEMPLATE_VENDERCOLOR_ELM, - model.VendorIDEBAI: WX_TEMPLATE_VENDERCOLOR_ELM, - } - testMiniProgramStoreMap = map[int]int{ - 101089: 1, - 100888: 1, - 100204: 1, - 100205: 1, - 100147: 1, - } - debugOpenIDMap = map[string]int{ - "oYN_usk0AeGc_C6VEZfmFQP5VHMQ": 1, // 周小扬 - "oYN_ust9hXKEvEv0X6Mq6nlAWs_E": 1, // me - "oYN_usqnpGVQ4xxlao_yybsbYJh4": 1, // 朱丹 - } -) - -func SmartMessageTemplateSend(userOpenID, templateID, downloadURL, miniPageURL string, data interface{}) (err error) { - var miniProgram map[string]interface{} - if miniPageURL != "" { - miniProgram = map[string]interface{}{ - "appid": api.WeixinMiniAPI.GetAppID(), - "pagepath": miniPageURL, - } - } - globals.SugarLogger.Debugf("SmartMessageTemplateSend openID:%s, templateID:%s, downloadURL:%s, miniProgram:%s", userOpenID, templateID, downloadURL, utils.Format4Output(miniProgram, true)) - if globals.ReallySendWeixinMsg || debugOpenIDMap[userOpenID] == 1 { - if err = api.WeixinAPI.CBMessageTemplateSend(userOpenID, templateID, downloadURL, miniProgram, data); err != nil { - globals.SugarLogger.Debugf("SmartMessageTemplateSend openID:%s, templateID:%s, downloadURL:%s, miniProgram:%s, failed with error:%v", userOpenID, templateID, downloadURL, utils.Format4Output(miniProgram, true), err) - } - } - return err -} - -func SendMsgToUser(userID string, templateID string, data interface{}) (err error) { - globals.SugarLogger.Debugf("SendMsgToUser userID:%d, templateID:%s", userID, templateID) - authBinds, err := dao.GetUserBindAuthInfo(dao.GetDB(), userID, model.AuthBindTypeAuth, []string{"weixinsns"}, "", "", "wx2bb99eb5d2c9b82c") - if err != nil { - return err - } - successCount := 0 - if len(authBinds) == 0 { - return fmt.Errorf("此用户未找到微信认证方式!userID: %v", userID) - } - globals.SugarLogger.Debugf("SendMsgToUser userID:%d, openID:%s, templateID:%s", userID, authBinds[0].AuthID, templateID) - if err2 := SmartMessageTemplateSend(authBinds[0].AuthID, templateID, "", "", data); err2 == nil { - successCount++ - } else { - err = err2 - } - if successCount > 0 { - err = nil // 只要成功一个都当成成功 - } - if err != nil { - globals.SugarLogger.Debugf("SendMsgToUser all failed userID:%d, templateID:%s, error:%v", userID, templateID, err) - } - return err -} diff --git a/business/jxutils/weixinmsg/weixinmsg_test.go b/business/jxutils/weixinmsg/weixinmsg_test.go deleted file mode 100644 index 5c9e27131..000000000 --- a/business/jxutils/weixinmsg/weixinmsg_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package weixinmsg - -import ( - "testing" - - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" - "git.rosy.net.cn/jx-callback/globals/api2" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/globals/testinit" -) - -func init() { - testinit.Init() - api2.Init() -} - -func TestGetWeixinOpenIDsFromStoreID(t *testing.T) { - openIDs := GetWeixinOpenIDsFromStoreID(100118) - t.Log(utils.Format4Output(openIDs, false)) -} - -func TestSendStoreMessage(t *testing.T) { - _, err := SendStoreMessage(jxcontext.AdminCtx, "title", "content", []int{1}, false, true) - if err != nil { - t.Fatal(err) - } -} diff --git a/business/model/bill.go b/business/model/bill.go deleted file mode 100644 index ffc35e896..000000000 --- a/business/model/bill.go +++ /dev/null @@ -1,116 +0,0 @@ -package model - -const ( - BillTypeDeposit = 10 //发布任务 - BillTypeJob = 11 //做任务实得 - BillTypeJobCancelOverdue = 12 //任务过期或取消 - BillTypeJobAuditUnPassWithCancelOverdue = 13 //任务不通过时,任务已取消或过期 - BillTypeSpJob = 14 //特殊任务扣除 - BillTypeDivide = 15 //群员做任务分成 - BillTypeJobDivide = 16 //做任务实得(被扣除分成后) - BillTypeDropShipping = 17 //一件代发订单扣除 - BillTypeDropShippingDeposit = 18 //一件代发保证金 - BillTypeUnionShare = 19 //联盟任务分成 - - BillTypeMember = 20 //开通会员 - - BillTypeQuitGroup = 30 //退群 - - BillTypeJdWaybillOverWeight = 40 //京东物流超重扣款 - - BillTypeCash = 8 //提现 - BillTypeInvest = 6 //充值 -) - -var ( - BillTypeNames = map[int]string{ - BillTypeDeposit: "发布任务", - BillTypeJob: "做任务实得", - BillTypeJobCancelOverdue: "任务过期或取消", - BillTypeJobAuditUnPassWithCancelOverdue: "任务不通过时,任务已取消或过期", - BillTypeSpJob: "特殊任务扣除", - BillTypeDivide: "群员做任务分成", - BillTypeJobDivide: "做任务实得(被扣除分成后)", - BillTypeDropShipping: "一件代发订单收入/扣除", - BillTypeDropShippingDeposit: "一件代发保证金", - BillTypeMember: "开通会员", - BillTypeQuitGroup: "退群", - BillTypeJdWaybillOverWeight: "京东物流超重扣款", - BillTypeCash: "提现", - BillTypeInvest: "充值", - } -) - -//账单收入表 -type BillIncome struct { - ModelIDCUL - - BillID int64 `orm:"column(bill_id)" json:"billID"` //账单ID - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - Type int `json:"type"` //收入类型 - IncomePrice int `json:"incomePrice"` //收入金额 -} - -func (v *BillIncome) TableIndex() [][]string { - return [][]string{ - []string{"BillID"}, - []string{"CreatedAt"}, - } -} - -//账单支出表 -type BillExpend struct { - ModelIDCUL - - BillID int64 `orm:"column(bill_id)" json:"billID"` //账单ID - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - Type int `json:"type"` //支出类型 - ExpendPrice int `json:"expendPrice"` //支出金额 -} - -func (v *BillExpend) TableIndex() [][]string { - return [][]string{ - []string{"BillID"}, - []string{"CreatedAt"}, - } -} - -//用户账单表 -type UserBill struct { - ModelIDCULD - - BillID int64 `orm:"column(bill_id)" json:"billID"` //账单ID - UserID string `orm:"column(user_id)" json:"userID"` //用户ID - AccountBalance int `json:"accountBalance"` //账户余额 -} - -func (v *UserBill) TableUnique() [][]string { - return [][]string{ - []string{"UserID"}, - } -} - -func (v *UserBill) TableIndex() [][]string { - return [][]string{ - []string{"BillID"}, - []string{"CreatedAt"}, - []string{"AccountBalance"}, - } -} - -type UnionOrderSettle struct { - ModelIDCUL - - BillID int64 `orm:"column(bill_id)" json:"billID"` //账单ID - VendorID int `orm:"column(vendor_id)" json:"vendorID"` //平台ID - Issue int `json:"issue"` //期数 - EarningPrice int `json:"earningPrice"` //结算金额 - OrderCount int `json:"orderCount"` //当期有效推广订单数量 - Comment string `json:"comment"` //备注 -} - -func (v *UnionOrderSettle) TableUnique() [][]string { - return [][]string{ - []string{"BillID", "VendorID", "Issue"}, - } -} diff --git a/business/model/const.go b/business/model/const.go index a4b7ad638..164813d84 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -194,12 +194,6 @@ var ( 0: "休息", 1: "营业", } - JobLimitCountType = map[int]string{ - JobLimitCountTypePO: "每人一次", - JobLimitCountTypePDO: "每人一天一次", - JobLimitCountTypePWO: "每人一周一次", - JobLimitCountTypeNoLimit: "不限次", - } ) const ( diff --git a/business/model/dao/dao_bill.go b/business/model/dao/dao_bill.go deleted file mode 100644 index 499d803b1..000000000 --- a/business/model/dao/dao_bill.go +++ /dev/null @@ -1,131 +0,0 @@ -package dao - -import ( - "time" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/model" -) - -func GetUserBill(db *DaoDB, userID, billID string) (userBill *model.UserBill, err error) { - sql := ` - SELECT * FROM user_bill WHERE deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if userID != "" { - sql += ` AND user_id = ?` - sqlParams = append(sqlParams, userID) - } - if billID != "" { - sql += ` AND bill_id = ?` - sqlParams = append(sqlParams, billID) - } - err = GetRow(db, &userBill, sql, sqlParams) - return userBill, err -} - -func GetBillExpend(db *DaoDB, userID string, billType int, fromTime, toTime time.Time) (billExpends []*model.BillExpend, err error) { - sql := ` - SELECT b.* - FROM user_bill a - LEFT JOIN bill_expend b ON b.bill_id = a.bill_id - WHERE a.deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if userID != "" { - sql += ` AND a.user_id = ?` - sqlParams = append(sqlParams, userID) - } - if billType != 0 { - sql += ` AND b.type = ?` - sqlParams = append(sqlParams, billType) - } - if fromTime != utils.ZeroTimeValue { - sql += ` AND b.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND b.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - err = GetRows(db, &billExpends, sql, sqlParams) - return billExpends, err -} - -func GetBillIncome(db *DaoDB, jobID int, billID int64) (billIncomes []*model.BillIncome, err error) { - sql := ` - SELECT b.* - FROM user_bill a - LEFT JOIN bill_income b ON b.bill_id = a.bill_id - WHERE a.deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if jobID != 0 { - sql += ` AND b.job_id = ?` - sqlParams = append(sqlParams, jobID) - } - if billID != 0 { - sql += ` AND b.bill_id = ?` - sqlParams = append(sqlParams, billID) - } - err = GetRows(db, &billIncomes, sql, sqlParams) - return billIncomes, err -} - -type UserBillDetail struct { - CreatedAt time.Time `json:"created_at"` - LastOperator string `json:"lastOperator"` - BillType int `json:"billType"` - Price int `json:"price"` - Type string `json:"type"` -} - -func GetUserBillDetail(db *DaoDB, userID string, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { - var userBillDetails []*UserBillDetail - sql := ` - SELECT SQL_CALC_FOUND_ROWS k.* FROM ( - SELECT a.created_at, a.last_operator, a.type bill_type, a.income_price price, 'income' type - FROM bill_income a - JOIN user_bill b ON a.bill_id = b.bill_id AND b.user_id = ? - ` - sqlParams := []interface{}{userID} - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - sql += ` - UNION ALL - SELECT a.created_at, a.last_operator, a.type bill_type, a.expend_price price, 'expend' type - FROM bill_expend a - JOIN user_bill b ON a.bill_id = b.bill_id AND b.user_id = ? - ` - sqlParams = append(sqlParams, userID) - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - sql += ` - )k - ORDER BY k.created_at LIMIT ? OFFSET ? - ` - pageSize = jxutils.FormalizePageSize(pageSize) - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &userBillDetails, sql, sqlParams...); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - Data: userBillDetails, - } - } - return pagedInfo, err -} diff --git a/business/model/dao/dao_job.go b/business/model/dao/dao_job.go deleted file mode 100644 index 5dff490b7..000000000 --- a/business/model/dao/dao_job.go +++ /dev/null @@ -1,582 +0,0 @@ -package dao - -import ( - "encoding/json" - "fmt" - "math" - "strings" - "time" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/model" -) - -const ( - sortTypeDistance = 1 //距离 - sortTypeTime = 2 //发布时间 - sortTypeAvgPrice = 4 //奖励高低 -) - -func GetJobCategories(db *DaoDB, name string) (jobCategories []*model.JobCategory, err error) { - sql := ` - SELECT * FROM job_category WHERE deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if name != "" { - sql += ` AND name LIKE ?` - sqlParams = append(sqlParams, "%"+name+"%") - } - err = GetRows(db, &jobCategories, sql, sqlParams) - return jobCategories, err -} - -type GetJobsResult struct { - model.JobExt - CategoryName string `json:"categoryName"` //分类名 - IndexImg string `json:"indexImg"` //任务封面 - Distance float64 `json:"distance"` //距用户距离 -} - -func GetJobSteps(db *DaoDB, jobID int) (jobSteps []*model.JobStep, err error) { - sql := ` - SELECT * - FROM job_step - WHERE job_id = ? - AND deleted_at = ? - ` - sqlParams := []interface{}{jobID, utils.DefaultTimeValue} - err = GetRows(db, &jobSteps, sql, sqlParams) - return jobSteps, err -} - -func GetJobImgs(db *DaoDB, jobID int) (jobImgs []*model.JobImg, err error) { - sql := ` - SELECT * - FROM job_img - WHERE job_id = ? - ` - sqlParams := []interface{}{jobID} - err = GetRows(db, &jobImgs, sql, sqlParams) - return jobImgs, err -} - -func GetJobs(db *DaoDB, userIDs []string, categoryIDs, statuss, vendorIDs, types, cityCodes []int, includeStep bool, fromTime, toTime time.Time, lng, lat float64, cityCode, span int, keyword string, sortType, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { - var ( - jobs []*GetJobsResult - sqlParams = []interface{}{lng, lat, utils.DefaultTimeValue, utils.DefaultTimeValue} - ) - sql := ` - SELECT SQL_CALC_FOUND_ROWS a.*, b.name, getDistance(?, ?, CAST(a.lng AS DECIMAL(15,6))/1000000, CAST(a.lat AS DECIMAL(15,6))/1000000) distance - FROM job a - JOIN job_category b ON b.id = a.job_category_id AND b.deleted_at = ? - WHERE a.deleted_at = ? - ` - if cityCode > 0 { - sql += " AND (a.job_city_code = ? OR a.job_city_code = ?)" - sqlParams = append(sqlParams, cityCode, model.JobCountrywideCode) - } - if len(userIDs) > 0 { - sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)` - sqlParams = append(sqlParams, userIDs) - } - if len(categoryIDs) > 0 { - sql += ` AND a.job_category_id IN (` + GenQuestionMarks(len(categoryIDs)) + `)` - sqlParams = append(sqlParams, categoryIDs) - } - if len(statuss) > 0 { - sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` - sqlParams = append(sqlParams, statuss) - } - if len(vendorIDs) > 0 { - sql += ` AND a.vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)` - sqlParams = append(sqlParams, vendorIDs) - } - if len(types) > 0 { - sql += ` AND a.type IN (` + GenQuestionMarks(len(types)) + `)` - sqlParams = append(sqlParams, types) - } - if len(cityCodes) > 0 { - sql += ` AND a.job_city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)` - sqlParams = append(sqlParams, cityCodes) - } - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - if span != 0 { - if span == model.JobSpanTop { - sql += ` AND a.job_span_top = 1` - } else { - sql += ` AND a.job_span_recmd = 1` - } - } - if keyword != "" { - sql += ` AND (a.title LIKE ? OR a.content LIKE ? OR a.address LIKE ? OR b.name LIKE ?)` - sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%") - } - if sortType != 0 { - if sortType == sortTypeDistance { - sql += ` ORDER BY job_span_top DESC, top_seq, distance` - } else if sortType == -sortTypeDistance { - sql += ` ORDER BY job_span_top DESC, top_seq, distance DESC` - } else if sortType == sortTypeAvgPrice { - sql += ` ORDER BY job_span_top DESC, top_seq, a.avg_price` - } else if sortType == -sortTypeAvgPrice { - sql += ` ORDER BY job_span_top DESC, top_seq, a.avg_price DESC` - } else if sortType == sortTypeTime { - sql += ` ORDER BY job_span_top DESC, top_seq, a.created_at` - } else if sortType == -sortTypeTime { - sql += ` ORDER BY status DESC, job_span_top DESC, top_seq, a.created_at DESC` - } - } - sql += " LIMIT ? OFFSET ?" - pageSize = jxutils.FormalizePageSize(pageSize) - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &jobs, sql, sqlParams...); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - // Data: jobs, - } - for _, v := range jobs { - if includeStep { - if jobSteps, err := GetJobSteps(db, v.ID); err == nil && len(jobSteps) > 0 { - v.JobSteps = jobSteps - } - } - if jobImgs, err := GetJobImgs(db, v.ID); err == nil && len(jobImgs) > 0 { - v.JobImgs = jobImgs - v.IndexImg = jobImgs[0].Img - } - } - pagedInfo.Data = jobs - } - return pagedInfo, err -} - -func GetJob(db *DaoDB, userIDs []string, categoryIDs, statuss, types []int, fromTime, toTime time.Time, includeStep bool) (job *model.Job, err error) { - jobs, err := GetJobsNoPage(db, userIDs, categoryIDs, statuss, types, fromTime, toTime, 0, includeStep) - if err != nil { - return job, err - } - if len(jobs) == 0 { - return job, fmt.Errorf("未查询到对应的京东快递任务!") - } - if data, err := json.Marshal(jobs[0]); err == nil { - json.Unmarshal(data, &job) - } - return job, err -} - -func GetJobWithTitle(db *DaoDB, title string) (job *model.Job, err error) { - sql := ` - SELECT * FROM job WHERE title = ? AND deleted_at = ? AND status = ? - ` - sqlParams := []interface{}{title, utils.DefaultTimeValue, model.JobStatusDoing} - err = GetRow(db, &job, sql, sqlParams) - return job, err -} - -func GetJobsNoPage(db *DaoDB, userIDs []string, categoryIDs, statuss, types []int, fromTime, toTime time.Time, span int, includeStep bool) (jobs []*GetJobsResult, err error) { - sql := ` - SELECT a.*, b.name - FROM job a - JOIN job_category b ON b.id = a.job_category_id AND b.deleted_at = ? - WHERE 1 = 1 - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if len(userIDs) > 0 { - sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)` - sqlParams = append(sqlParams, userIDs) - } - if len(categoryIDs) > 0 { - sql += ` AND a.job_category_id IN (` + GenQuestionMarks(len(categoryIDs)) + `)` - sqlParams = append(sqlParams, categoryIDs) - } - if len(statuss) > 0 { - sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` - sqlParams = append(sqlParams, statuss) - } - if len(types) > 0 { - sql += ` AND a.type IN (` + GenQuestionMarks(len(types)) + `)` - sqlParams = append(sqlParams, types) - } - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - if span != 0 { - if span == model.JobSpanTop { - sql += ` AND a.job_span_top = 1` - } else { - sql += ` AND a.job_span_recmd = 1` - } - } - err = GetRows(db, &jobs, sql, sqlParams...) - for _, v := range jobs { - if includeStep { - if jobSteps, err := GetJobSteps(db, v.ID); err == nil && len(jobSteps) > 0 { - v.JobSteps = jobSteps - } - } - if jobImgs, err := GetJobImgs(db, v.ID); err == nil && len(jobImgs) > 0 { - v.JobImgs = jobImgs - } - } - return jobs, err -} - -func GetJobDetail(db *DaoDB, jobID int) (job *GetJobsResult, err error) { - sql := ` - SELECT a.*, b.name - FROM job a - JOIN job_category b ON b.id = a.job_category_id AND b.deleted_at = ? - WHERE 1 = 1 - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if jobID != 0 { - sql += ` AND a.id = ?` - sqlParams = append(sqlParams, jobID) - } - err = GetRow(db, &job, sql, sqlParams...) - if job != nil { - if jobSteps, err := GetJobSteps(db, job.ID); err == nil && len(jobSteps) > 0 { - job.JobSteps = jobSteps - } - if jobImgs, err := GetJobImgs(db, job.ID); err == nil && len(jobImgs) > 0 { - job.JobImgs = jobImgs - } - } else { - return job, fmt.Errorf("未查到到该任务!") - } - return job, err -} - -func GetJobOrdersNoPage(db *DaoDB, jobID int, jobOrderID int64, userID string, statusCompareStr string, fromTime, toTime time.Time, statuss []int) (jobOrders []*model.JobOrder, err error) { - sql := ` - SELECT a.* - FROM job_order a - WHERE 1 = 1 - ` - sqlParams := []interface{}{} - if jobID != 0 { - sql += ` AND a.job_id = ?` - sqlParams = append(sqlParams, jobID) - } - if jobOrderID != 0 { - sql += ` AND a.job_order_id = ?` - sqlParams = append(sqlParams, jobOrderID) - } - if userID != "" { - sql += ` AND a.user_id = ?` - sqlParams = append(sqlParams, userID) - } - if statusCompareStr != "" { - sql += ` AND a.status ` + statusCompareStr - } - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - if len(statuss) > 0 { - sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` - sqlParams = append(sqlParams, statuss) - } - err = GetRows(db, &jobOrders, sql, sqlParams) - return jobOrders, err -} - -type GetJobOrdersResult struct { - model.JobOrder - JobLimitAt int `json:"jobLimitAt"` //任务限时完成小时数 - AuditLimitAt int `json:"auditLimitAt"` //限时审核小时数 - JobOrderFinishAt time.Time `json:"jobOrderFinishAt"` - JobOrderAuditFinishAt time.Time `json:"jobOrderAuditFinishAt"` - JobIndexImg string `json:"jobIndexImg"` - VendorID int `orm:"column(vendor_id)" json:"vendorID"` //推广平台 - AvgPrice int `json:"avgPrice"` //单个任务金额 - Title string `orm:"size(255)" json:"title"` //任务标题 - JobContent string `orm:"size(500)" json:"jobContent"` - JobCategoryID int `orm:"column(job_category_id)" json:"jobCategoryID"` - StoreURL string `orm:"column(store_url)" json:"storeURL"` -} - -func GetJobOrders(db *DaoDB, jobID int, jobOrderID int64, userID, jobUserID string, statusCompareStr string, fromTime, toTime time.Time, statuss []int, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) { - var jobOrders []*GetJobOrdersResult - sql := ` - SELECT SQL_CALC_FOUND_ROWS a.*, b.job_limit_at, b.vendor_id, b.avg_price, b.title, b.content job_content, b.audit_limit_at, b.job_category_id, b.store_url - FROM job_order a - JOIN job b ON a.job_id = b.id - WHERE 1 = 1 - ` - sqlParams := []interface{}{} - if jobID != 0 { - sql += ` AND a.job_id = ?` - sqlParams = append(sqlParams, jobID) - } - if jobOrderID != 0 { - sql += ` AND a.job_order_id = ?` - sqlParams = append(sqlParams, jobOrderID) - } - if userID != "" { - sql += ` AND a.user_id = ?` - sqlParams = append(sqlParams, userID) - } - if jobUserID != "" { - sql += ` AND b.user_id = ?` - sqlParams = append(sqlParams, jobUserID) - } - if statusCompareStr != "" { - sql += ` AND a.status ` + statusCompareStr - } - if fromTime != utils.ZeroTimeValue { - sql += ` AND a.created_at >= ?` - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += ` AND a.created_at <= ?` - sqlParams = append(sqlParams, toTime) - } - if len(statuss) > 0 { - sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)` - sqlParams = append(sqlParams, statuss) - } - sql += " LIMIT ? OFFSET ?" - pageSize = jxutils.FormalizePageSize(pageSize) - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &jobOrders, sql, sqlParams...); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - // Data: jobOrders, - } - for _, v := range jobOrders { - if jobImgs, err := GetJobImgs(db, v.JobID); err == nil && len(jobImgs) > 0 { - v.JobIndexImg = jobImgs[0].Img - } - v.JobOrderFinishAt = v.JobOrder.CreatedAt.Add(time.Duration(v.JobLimitAt) * time.Hour) - v.JobOrderAuditFinishAt = v.JobOrder.SubmitAuditAt.Add(time.Duration(v.AuditLimitAt) * time.Hour) - } - pagedInfo.Data = jobOrders - } - return pagedInfo, err -} - -func GetMtMember(db *DaoDB) (mtMember *model.MtMember, err error) { - sql := ` - SELECT * - FROM mt_member - WHERE deleted_at = ? - LIMIT 1 - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - err = GetRow(db, &mtMember, sql, sqlParams) - return mtMember, err -} - -func GetJobTimers(db *DaoDB, status int) (jobTimers []*model.JobTimer, err error) { - sql := ` - SELECT * - FROM job_timer - WHERE 1 = 1 - ` - sqlParams := []interface{}{} - if status != -1 { - sql += ` AND status = ?` - sqlParams = append(sqlParams, status) - } - err = GetRows(db, &jobTimers, sql, sqlParams) - return jobTimers, err -} - -func GetMtMembers(db *DaoDB) (num int, err error) { - var mtMembers []*model.MtMember - sql := ` - SELECT * FROM mt_member WHERE deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - err = GetRows(db, &mtMembers, sql, sqlParams) - num = len(mtMembers) - return num, err -} - -func GetUserSearch(db *DaoDB, userID, keyword string) (userSearchs []*model.UserSearch, err error) { - sql := ` - SELECT * - FROM user_search - WHERE 1 = 1 - ` - sqlParams := []interface{}{} - if userID != "" { - sql += " AND user_id = ?" - sqlParams = append(sqlParams, userID) - } - if keyword != "" { - sql += " AND keyword = ?" - sqlParams = append(sqlParams, keyword) - } - err = GetRows(db, &userSearchs, sql, sqlParams) - return userSearchs, err -} - -func GetStationList(db *DaoDB) (stations []*model.StationInfo, err error) { - sql := ` - SELECT * - FROM station_info - ` - sqlParams := []interface{}{} - err = GetRows(db, &stations, sql, sqlParams) - return stations, err -} - -func GetStationInfoList(db *DaoDB, stationName string, cityCode int, lat, lng float64, oilCode string, sortType, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - var ( - stations []*model.StationInfo - distanceFlag bool - sqlParams = []interface{}{} - ) - if lng != 0 && lat != 0 { - distanceFlag = true - } - sql := ` - SELECT SQL_CALC_FOUND_ROWS * - ` - if distanceFlag { - sql += `, getDistance(?, ?, longitude, latitude) distance` - sqlParams = append(sqlParams, lng, lat) - } - sql += ` - FROM station_info - WHERE 1 = 1 - ` - if stationName != "" { - sql += " AND station_name LIKE ?" - sqlParams = append(sqlParams, "%"+stationName+"%") - } - if cityCode != 0 { - sql += " AND city_id = ?" - sqlParams = append(sqlParams, cityCode) - } - if oilCode != "" { - sql += " AND POSITION(? IN prices) > 0" - sqlParams = append(sqlParams, oilCode) - } - if sortType != 0 { - if sortType == 1 { - sql += " ORDER BY distance" - } else if sortType == -1 { - sql += " ORDER BY distance DESC" - } else if sortType == 2 { - sql += " ORDER BY star_num" - } else if sortType == -2 { - sql += " ORDER BY star_num DESC" - } - } - sql += " LIMIT ? OFFSET ?" - pageSize = jxutils.FormalizePageSize(pageSize) - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &stations, sql, sqlParams...); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - // Data: stations, - } - for _, v := range stations { - var oilInfo []*model.OilInfo - json.Unmarshal([]byte(strings.ReplaceAll(v.Prices, "\\", "")), &oilInfo) - v.OilInfo = oilInfo - } - if math.Abs(utils.Int2Float64(sortType)) == 3 { - if oilCode != "" { - for i := 0; i < len(stations); i++ { - for j := 0; j < len(stations)-i-1; j++ { - var ( - index int - index2 int - ) - for k, v := range stations[j].OilInfo { - if v.OilCode == oilCode { - index = k - } - } - for k, v := range stations[j+1].OilInfo { - if v.OilCode == oilCode { - index2 = k - } - } - if sortType == 3 { - if utils.Str2Float64(stations[j].OilInfo[index].DiscountPrice) > utils.Str2Float64(stations[j+1].OilInfo[index2].DiscountPrice) { - temp := stations[j] - stations[j] = stations[j+1] - stations[j+1] = temp - } - } else if sortType == -3 { - if utils.Str2Float64(stations[j].OilInfo[index].DiscountPrice) < utils.Str2Float64(stations[j+1].OilInfo[index2].DiscountPrice) { - temp := stations[j] - stations[j] = stations[j+1] - stations[j+1] = temp - } - } - } - } - } - } - pagedInfo.Data = stations - } - return pagedInfo, err -} - -func GetMaxJobTopSeq(db *DaoDB) (maxSeq int, err error) { - Seq := &struct { - TopSeq int - }{} - sql := ` - SELECT MAX(top_seq) top_seq FROM job WHERE deleted_at = ? AND status = ? AND job_span_top = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue, model.JobStatusDoing, 1} - if err = GetRow(db, &Seq, sql, sqlParams); err == nil { - return Seq.TopSeq, err - } - return maxSeq, err -} - -func GetMaxJobRecmdSeq(db *DaoDB) (maxSeq int, err error) { - Seq := &struct { - RecmdSeq int - }{} - sql := ` - SELECT MAX(recmd_seq) recmd_seq FROM job WHERE deleted_at = ? AND status = ? AND job_span_recmd = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue, model.JobStatusDoing, 1} - if err = GetRow(db, &Seq, sql, sqlParams); err == nil { - return Seq.RecmdSeq, err - } - return maxSeq, err -} - -func GetJobSpans(db *DaoDB) (jobSpans []*model.JobSpan, err error) { - sql := ` - SELECT * - FROM job_span - WHERE deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - err = GetRows(db, &jobSpans, sql, sqlParams) - return jobSpans, err -} diff --git a/business/model/dao/dao_matter.go b/business/model/dao/dao_matter.go deleted file mode 100644 index 7837f5ea2..000000000 --- a/business/model/dao/dao_matter.go +++ /dev/null @@ -1,15 +0,0 @@ -package dao - -import ( - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/model" -) - -func GetVendorMatterCategory(db *DaoDB, vendorID int) (vendorMatterCat []*model.VendorMatterCategory, err error) { - sql := ` - SELECT * FROM vendor_matter_category WHERE deleted_at = ? AND vendor_id = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue, vendorID} - err = GetRows(db, &vendorMatterCat, sql, sqlParams) - return vendorMatterCat, err -} diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go deleted file mode 100644 index 17154ca44..000000000 --- a/business/model/dao/dao_user.go +++ /dev/null @@ -1,424 +0,0 @@ -package dao - -import ( - "fmt" - "time" - - "git.rosy.net.cn/baseapi/utils" - "git.rosy.net.cn/jx-callback/business/jxutils" - "git.rosy.net.cn/jx-callback/business/model" -) - -type UserDeliveryAddressEx struct { - model.UserDeliveryAddress - - UserName string `json:"userName"` - CityName string `json:"cityName"` - DistrictName string `json:"districtName"` - ParentCode int `json:"parentCode"` -} - -type GetSelfInfoResult struct { - model.User - model.UserBill - WaitCashPrice int `json:"waitCashPrice"` - WaitRealCashPrice int `json:"waitRealCashPrice"` - UserMembers []*model.UserMember `json:"userMembers"` - PopedUserName string `json:"popedUserName"` - UnReadMessageCount int `json:"unReadMessageCount"` -} - -func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err error) { - sql := fmt.Sprintf(` - SELECT * - FROM user t1 - WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ? - `, fieldName) - sqlParams := []interface{}{ - utils.DefaultTimeValue, - model.UserStatusNormal, - fieldValue, - } - // globals.SugarLogger.Debugf("GetUserByID sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false)) - err = GetRow(db, &user, sql, sqlParams...) - return user, err -} - -func GetUserByIDWithMembers(db *DaoDB, fieldName, fieldValue string) (getSelfInfoResult *GetSelfInfoResult, err error) { - sql := fmt.Sprintf(` - SELECT t1.*, t2.bill_id, t2.account_balance, t3.name pop_user_name - FROM user t1 - JOIN user_bill t2 ON t2.user_id = t1.user_id AND t2.deleted_at = ? - LEFT JOIN user t3 ON t3.user_id = t1.pop_user - WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ? - `, fieldName) - sqlParams := []interface{}{ - utils.DefaultTimeValue, - utils.DefaultTimeValue, - model.UserStatusNormal, - fieldValue, - } - // globals.SugarLogger.Debugf("GetUserByID sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false)) - err = GetRow(db, &getSelfInfoResult, sql, sqlParams...) - if messageGroupReads, err := GetMessageGroupRead(db, getSelfInfoResult.User.UserID, 0); err == nil { - var unReadCount int - for _, v := range messageGroupReads { - unReadCount += v.UnReadCount - } - getSelfInfoResult.UnReadMessageCount = unReadCount - } - return getSelfInfoResult, err -} - -func GetUsers(db *DaoDB, userType int, keyword, popUser string, userIDs, userID2s, mobiles []string, offset, pageSize int) (userList []*model.User, totalCount int, err error) { - offset = jxutils.FormalizePageOffset(offset) - pageSize = jxutils.FormalizePageSize(pageSize) - if userType == 0 { - userType = 255 - } - sqlParams := []interface{}{} - sql := ` - SELECT SQL_CALC_FOUND_ROWS - t1.* - FROM user t1 - WHERE t1.status = 1 AND t1.deleted_at = ?` - sqlParams = append(sqlParams, utils.DefaultTimeValue) - if len(userIDs) > 0 { - sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")" - sqlParams = append(sqlParams, userIDs) - } - if len(userID2s) > 0 { - sql += " AND t1.user_id2 IN (" + GenQuestionMarks(len(userID2s)) + ")" - sqlParams = append(sqlParams, userID2s) - } - if len(mobiles) > 0 { - sql += " AND t1.mobile IN (" + GenQuestionMarks(len(mobiles)) + ")" - sqlParams = append(sqlParams, mobiles) - } - if popUser != "" { - sql += " AND t1.pop_user = ?" - sqlParams = append(sqlParams, popUser) - } - if keyword != "" { - keywordLike := "%" + keyword + "%" - sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)" - sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike) - } - sql += " LIMIT ? OFFSET ?" - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil { - totalCount = GetLastTotalRowCountTx(txDB) - } - return userList, totalCount, err -} - -func GetUsers2(db *DaoDB, keyword string, userID string, pop int, mobile string, fromTime, toTime time.Time, timeType int, cityCodes, consumeTypes []int, offset, pageSize int) (pageInfo *model.PagedInfo, err error) { - var ( - userList []*model.User - ) - offset = jxutils.FormalizePageOffset(offset) - pageSize = jxutils.FormalizePageSize(pageSize) - sqlParams := []interface{}{} - sql := ` - SELECT SQL_CALC_FOUND_ROWS DISTINCT - a.* - FROM user a` - for _, v := range consumeTypes { - switch v { - case model.ConsumeTypePublishJob: - sql += " JOIN job b ON b.user_id = a.user_id" - if fromTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND b.created_at > ?" - sqlParams = append(sqlParams, fromTime) - } - } - if toTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND b.created_at < ?" - sqlParams = append(sqlParams, toTime) - } - } - case model.ConsumeTypeMember: - sql += " JOIN user_member c ON c.user_id = a.user_id" - if fromTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND c.created_at > ?" - sqlParams = append(sqlParams, fromTime) - } - } - if toTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND c.created_at < ?" - sqlParams = append(sqlParams, toTime) - } - } - case model.ConsumeTypeDelivery: - sql += " JOIN delivery_order d ON d.user_id = a.user_id" - if fromTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND d.created_at > ?" - sqlParams = append(sqlParams, fromTime) - } - } - if toTime != utils.ZeroTimeValue { - if timeType == 2 { - sql += " AND d.created_at < ?" - sqlParams = append(sqlParams, toTime) - } - } - } - } - sql += ` - WHERE a.status = 1 AND a.deleted_at = ?` - sqlParams = append(sqlParams, utils.DefaultTimeValue) - if userID != "" { - if pop == 1 { - sql += " AND a.pop_user = ?" - sqlParams = append(sqlParams, userID) - } else { - sql += " AND a.user_id = ?" - sqlParams = append(sqlParams, userID) - } - } - if len(cityCodes) > 0 { - sql += " AND a.city_code IN (" + GenQuestionMarks(len(cityCodes)) + ")" - sqlParams = append(sqlParams, cityCodes) - } - if mobile != "" { - sql += " AND a.mobile = ?" - sqlParams = append(sqlParams, mobile) - } - if keyword != "" { - keywordLike := "%" + keyword + "%" - sql += " AND (a.user_id LIKE ? OR a.mobile LIKE ? OR a.email LIKE ? OR a.name LIKE ?)" - sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike) - } - if fromTime != utils.ZeroTimeValue { - if timeType == 1 { - sql += " AND a.created_at > ?" - sqlParams = append(sqlParams, fromTime) - } - } - if toTime != utils.ZeroTimeValue { - if timeType == 1 { - sql += " AND a.created_at < ?" - sqlParams = append(sqlParams, toTime) - } - } - sql += " LIMIT ? OFFSET ?" - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil { - pageInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - Data: userList, - } - } - return pageInfo, err -} - -func GetUser(db *DaoDB, userID string) (user *model.GetUserResult, err error) { - sqlParams := []interface{}{} - sql := ` - SELECT - t1.*, IF(t2.accept_order_count is NULL, 0, t2.accept_order_count) accept_order_count, IF(t3.finished_order_count is NULL, 0, t3.finished_order_count) finished_order_count - FROM user t1 - LEFT JOIN (SELECT user_id, COUNT(user_id) accept_order_count FROM job_order WHERE user_id = ? GROUP BY 1)t2 ON t2.user_id = t1.user_id - LEFT JOIN (SELECT user_id, COUNT(user_id) finished_order_count FROM job_order WHERE user_id = ? AND status = ? GROUP BY 1)t3 ON t3.user_id = t1.user_id - WHERE t1.status = ? AND t1.deleted_at = ? AND t1.user_id = ? ` - sqlParams = append(sqlParams, userID, userID, model.JobOrderStatusFinish, model.YES, utils.DefaultTimeValue, userID) - err = GetRow(db, &user, sql, sqlParams...) - return user, err -} - -func DeleteUsers(db *DaoDB, userIDs []string) (num int64, err error) { - if len(userIDs) > 0 { - sql := ` - UPDATE user t1 - JOIN auth_bind t2 ON t2.user_id = t1.user_id - SET - t1.deleted_at = ?, - t2.deleted_at = ? - WHERE t1.user_id IN (` + GenQuestionMarks(len(userIDs)) + ");" - now := time.Now() - sqlParams := []interface{}{ - now, - now, - userIDs, - } - num, err = ExecuteSQL(db, sql, sqlParams...) - } - return num, err -} - -func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, addType int, offset, pageSize int) (addressList []*UserDeliveryAddressEx, totalCount int, err error) { - sql := ` - SELECT SQL_CALC_FOUND_ROWS - t1.*, - t2.name user_name, - district.name district_name, - city.name city_name, - cp.code parent_code - FROM user_delivery_address t1 - LEFT JOIN user t2 ON t2.user_id = t1.user_id - LEFT JOIN place district ON district.code = t1.district_code - LEFT JOIN place city ON city.code = t1.city_code - LEFT JOIN place cp ON cp.code = city.parent_code - WHERE t1.deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if addressID > 0 { - sql += " AND t1.id = ? " - sqlParams = append(sqlParams, addressID) - } - if len(userIDs) > 0 { - sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")" - sqlParams = append(sqlParams, userIDs) - } - if addType != 0 { - sql += " AND t1.type = ? " - sqlParams = append(sqlParams, addType) - } - offset = jxutils.FormalizePageOffset(offset) - pageSize = jxutils.FormalizePageSize(pageSize) - sql += ` - ORDER BY t1.is_default DESC, t1.consignee_name - LIMIT ? OFFSET ?` - sqlParams = append(sqlParams, pageSize, offset) - - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &addressList, sql, sqlParams...); err == nil { - totalCount = GetLastTotalRowCountTx(txDB) - } - return addressList, totalCount, err -} - -func ClearUserDeliveryAddressDefault(db *DaoDB, userID string, defAddressID int) (err error) { - sql := ` - UPDATE user_delivery_address t1 - SET t1.is_default = 0 - WHERE t1.deleted_at = ? AND t1.user_id = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - userID, - } - if defAddressID > 0 { - sql += " AND t1.id <> ?" - sqlParams = append(sqlParams, defAddressID) - } - _, err = ExecuteSQL(db, sql, sqlParams...) - return err -} - -func GetUserOrderSMS(db *DaoDB, mobile, name string) (userOrderSms *model.UserOrderSms, err error) { - sql := ` - SELECT * - FROM user_order_sms - WHERE 1=1 - ` - sqlParams := []interface{}{} - if mobile != "" { - sql += " AND mobile = ?" - sqlParams = append(sqlParams, mobile) - } - if name != "" { - sql += " AND name like ?" - sqlParams = append(sqlParams, "%"+name+"%") - } - err = GetRow(db, &userOrderSms, sql, sqlParams) - return userOrderSms, err -} - -func GetUserMember(db *DaoDB, userID string, memberType int) (userMembers []*model.UserMember, err error) { - sql := ` - SELECT a.* - FROM user_member a - WHERE a.deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue} - if userID != "" { - sql += " AND a.user_id = ?" - sqlParams = append(sqlParams, userID) - } - if memberType != 0 { - sql += " AND a.member_type = ?" - sqlParams = append(sqlParams, memberType) - } - err = GetRows(db, &userMembers, sql, sqlParams) - return userMembers, err -} - -type GetUserAllWaitCashPriceResult struct { - UserID string `orm:"column(user_id)" json:"userID"` - Price int `json:"price"` -} - -func GetUserAllWaitCashPrice(db *DaoDB, userID string) (price int, err error) { - var result = &GetUserAllWaitCashPriceResult{} - sql := ` - SELECT SUM(IF(d.id IS NOT NULL, IF(d.divide_percentage = 0, b.avg_price, b.avg_price*(100-d.divide_percentage)/100),b.avg_price)) price, a.user_id - FROM job_order a - JOIN job b ON a.job_id = b.id - LEFT JOIN message_group_member c ON a.user_id = c.member_user_id - LEFT JOIN message_group d ON d.group_id = c.group_id AND d.type = ? - WHERE a.user_id = ? - AND a.status = ? - ` - sqlParams := []interface{}{ - model.GroupTypeMulit, - userID, - model.JobOrderStatusWaitAudit, - } - err = GetRow(db, &result, sql, sqlParams) - return result.Price, err -} - -func GetUserUnionBind(db *DaoDB, userID string, vendorID int, unionID string) (userBinds []*model.UserUnionBind, err error) { - sql := ` - SELECT * FROM user_union_bind WHERE deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if userID != "" { - sql += " AND user_id = ?" - sqlParams = append(sqlParams, userID) - } - if vendorID != -1 { - sql += " AND vendor_id = ?" - sqlParams = append(sqlParams, vendorID) - } - if unionID != "" { - sql += " AND union_id = ?" - sqlParams = append(sqlParams, unionID) - } - err = GetRows(db, &userBinds, sql, sqlParams) - return userBinds, err -} - -func GetUserUnionBindImg(db *DaoDB, unionID, actID string) (userBinds *model.UserUnionBindImg, err error) { - sql := ` - SELECT * FROM user_union_bind_img WHERE deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if unionID != "" { - sql += " AND union_id = ?" - sqlParams = append(sqlParams, unionID) - } - if actID != "" { - sql += " AND act_id = ?" - sqlParams = append(sqlParams, actID) - } - err = GetRow(db, &userBinds, sql, sqlParams) - return userBinds, err -} diff --git a/business/model/dao/event.go b/business/model/dao/event.go index f2f531d04..adb12cbe9 100644 --- a/business/model/dao/event.go +++ b/business/model/dao/event.go @@ -142,66 +142,6 @@ func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateType return operateEventExt, totalCount, err } -func GetImMessageRecord(db *DaoDB, groupID int, userID, toUserID string, storeID, vendorID int, fromTime, toTime time.Time, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - var msg []*model.ImMessageRecord - sql := ` - SELECT SQL_CALC_FOUND_ROWS * - FROM im_message_record - WHERE deleted_at = ? - ` - sqlParams := []interface{}{ - utils.DefaultTimeValue, - } - if groupID != 0 { - sql += " AND group_id = ?" - sqlParams = append(sqlParams, groupID) - if groupID == model.SysGroupID { - sql += " AND to_user_id = ?" - sqlParams = append(sqlParams, toUserID) - } - } - if userID != "" { - sql += " AND user_id = ?" - sqlParams = append(sqlParams, userID) - } - if storeID != 0 { - sql += " AND store_id = ?" - sqlParams = append(sqlParams, storeID) - } - if vendorID >= 0 { - sql += " AND vendor_id = ?" - sqlParams = append(sqlParams, vendorID) - } - if fromTime != utils.ZeroTimeValue { - sql += " AND created_at >= ?" - sqlParams = append(sqlParams, fromTime) - } - if toTime != utils.ZeroTimeValue { - sql += " AND created_at <= ?" - sqlParams = append(sqlParams, toTime) - } - sql += ` - ORDER BY created_at DESC - LIMIT ? OFFSET ? - ` - sqlParams = append(sqlParams, pageSize, offset) - txDB, _ := Begin(db) - defer Commit(db, txDB) - if err = GetRowsTx(txDB, &msg, sql, sqlParams); err == nil { - pagedInfo = &model.PagedInfo{ - TotalCount: GetLastTotalRowCountTx(txDB), - // Data: msg, - } - for _, v := range msg { - if user, err := GetUser(db, v.UserID); err == nil { - v.UserInfo = user - } - } - pagedInfo.Data = msg - } - return pagedInfo, err -} - type GetMessageGroupsResult struct { model.MessageGroup Avatar string `json:"avatar"` diff --git a/business/model/job.go b/business/model/job.go deleted file mode 100644 index d0933fde9..000000000 --- a/business/model/job.go +++ /dev/null @@ -1,340 +0,0 @@ -package model - -import ( - "time" - - "git.rosy.net.cn/baseapi/platformapi/txcloudapi" -) - -const ( - JobStatusDoing = 0 //正在进行中 - JobStatusFinished = 1 //任务所有都被完成 - JobStatusFailed = -1 //任务发布失败 - JobStatusOverdue = -2 //任务过期 - - JobLimitCountTypePO = 1 //每人一次 - JobLimitCountTypePDO = 2 //每人每天一次 - JobLimitCountTypePWO = 3 //每人每周一次 - JobLimitCountTypeNoLimit = 4 //不限制 - - JobOrderStatusSpec = 1 //特殊状态(联盟任务) - JobOrderStatusAccept = 5 - JobOrderStatusWaitAudit = 10 - JobOrderStatusAuditPass = 15 - JobOrderStatusAuditUnPass = 20 - JobOrderStatusFinish = 110 - JobOrderStatusCancel = 115 - - JobTimerTypeAccept = 1 //接受任务 - JobTimerTypeSubmit = 2 //交任务 - JobTimerTypeDropShipping = 3 //一件代发限时发货 - - JobTimerStatusWait = 0 //正在进行 - JobTimerStatusFinish = 1 //定时任务已完成 - - JobTypeNormal = 0 //普通任务 - JobTypeMtMember = 1 //美团会员任务 - JobTypeJdDelivery = 2 //京东快递任务 - JobTypeOther = 3 //其他任务(可能是存储信息用的 - - JobCashbackPrice = 1 //返现类型固定返现 - JobCashbackPercentage = 2 //返现类型比例返现 - - JobCategoryIDwmtg = 3 //任务类型外卖推广 - JobCategoryIDOther = 4 //其他任务类型 - JobCategoryIDDropShipping = 5 //一件代发 - JobCategoryIDUnion = 6 //联盟任务 - - JobSpanTop = 1 //置顶 - JobSpanRecommend = 2 //推荐 - - JobCountrywideCode = 999 -) - -const ( - /*消费类型*/ - ConsumeTypePublishJob = 1 //发任务 - ConsumeTypeMember = 2 //充会员 - ConsumeTypeDelivery = 3 //发快递 -) - -var ( - DeliveryStatusName = map[int]string{ - OrderStatusNew: "上门取件中", - OrderStatusDelivering: "配送中", - OrderStatusFinished: "已妥投", - OrderStatusCanceled: "已取消", - } - - CashbackName = map[int]string{ - JobCashbackPrice: "固定返现", - JobCashbackPercentage: "比例返现", - } - - ConsumeName = map[int]string{ - ConsumeTypePublishJob: "发任务", - ConsumeTypeMember: "充会员", - ConsumeTypeDelivery: "发快递", - } - - TxWaybillNames = map[int]string{ - txcloudapi.StatusErr: "单号或代码错误", - txcloudapi.StatusNull: "暂无轨迹", - txcloudapi.StatusAccept: "快递收件", - txcloudapi.StatusDelivering: "在途中", - txcloudapi.StatusFinished: "已签收", - txcloudapi.StatusProblem: "问题件 (派件不成功或要求择日派送)", - txcloudapi.StatusException: "疑难件(收件人拒绝签收,地址有误或不能送达派送区域,收费等原因无法正常派送)", - txcloudapi.StatusFailed: "退件签收", - } -) - -type Job struct { - ModelIDCULD - - UserID string `orm:"column(user_id)" json:"userID"` //发布人ID - JobCategoryID int `orm:"column(job_category_id)" json:"jobCategoryID"` //任务类型 - JobSpanTop int `json:"jobSpanTop"` //置顶标签 - TopSeq int `json:"topSeq"` //置顶顺序 - JobSpanRecmd int `json:"jobSpanRecmd"` //推荐标签 - RecmdSeq int `json:"recmdSeq"` //推荐顺序 - Title string `orm:"size(255)" json:"title"` //任务标题 - Content string `orm:"size(500)" json:"content"` //任务内容 - Count int `json:"count"` //任务数量 - SurplusCount int `json:"surplusCount"` //剩余数量 - AvgPrice int `json:"avgPrice"` //单个任务金额或预估金额 - DropShippingSkuPrice int `json:"dropShippingSkuPrice"` //一件代发任务商品价格 - Percentage int `json:"percentage"` //如果是比例返现,返现比例 - CashbackType int `json:"cashbackType"` //返现方式,1为固定返现,2为比例返现 - TotalPrice int `json:"totalPrice"` //任务总金额 - Status int `json:"status"` //任务状态 - Address string `orm:"size(500)" json:"address"` //门店地址 - Lng int `json:"lng"` //乘了10的6次方 - Lat int `json:"lat"` //乘了10的6次方 - JobLng float64 `json:"jobLng"` //任务发布地址 - JobLat float64 `json:"jobLat"` //任务发布地址 - JobCityCode int `json:"jobCityCode"` //任务所属城市,999代表全国 - DropShippingAt int `json:"dropShippingAt"` //承诺一件代发几天内发货,小时数 - JobLimitAt int `json:"jobLimitAt"` //任务限时完成小时数 - AuditLimitAt int `json:"auditLimitAt"` //任务审核限时小时数 - FinishedAt *time.Time `orm:"null" json:"finishedAt"` //接单截止日期 - LimitCountType int `json:"limitCountType"` //任务限次类型,1为每人一次,2为每人每天一次,3为每人每周一次,4为不限制 - VendorID int `orm:"column(vendor_id)" json:"vendorID"` //推广平台 - StoreURL string `orm:"column(store_url)" json:"storeURL"` //门店链接 - SkuURL string `orm:"column(sku_url)" json:"skuURL"` //商品优惠券链接 - Type int `json:"type"` //任务类型,0为普通任务,1为特殊任务 - BrowseCount int `json:"browseCount"` //任务浏览量,点一下加一下 - UnionImg string `json:"unionImg"` //联盟任务分享链接的背景图 - UnionQrcodePosition string `json:"unionQrcodePosition"` //联盟任务分享链接的二维码图的方位 - UnionActID string `orm:"column(union_act_id)" json:"unionActID"` //联盟任务ID - // JobSteps []*JobStep `orm:"-" json:"jobSteps"` - // JobImgs []*JobImg `orm:"-" json:"jobImgs"` -} - -func (v *Job) TableIndex() [][]string { - return [][]string{ - []string{"UserID"}, - []string{"CreatedAt"}, - } -} - -type JobExt struct { - FinishedAtStr string `json:"finishedAtStr"` //接单截止日期 - Job - JobSteps []*JobStep `orm:"-" json:"jobSteps"` - JobImgs []*JobImg `orm:"-" json:"jobImgs"` -} - -type JobImg struct { - ModelIDCUL - - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - Img string `orm:"size(500)" json:"img"` //图片 -} - -func (v *JobImg) TableIndex() [][]string { - return [][]string{ - []string{"JobID"}, - } -} - -type JobCategory struct { - ModelIDCULD - - Name string `orm:"size(48)" json:"name"` //类型名称 - Img string `orm:"size(500)" json:"img"` //类型图片 -} - -func (v *JobCategory) TableUnique() [][]string { - return [][]string{ - []string{"Name"}, - } -} - -type JobStep struct { - ModelIDCULD - - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - StepCount int `json:"stepCount"` //步骤数 - Content string `orm:"size(500)" json:"content"` //步骤内容 - Img string `orm:"size(500)" json:"img"` //步骤图片 - Type int `json:"type"` //步骤类型,1为任务步骤,2为收集信息 -} - -func (v *JobStep) TableIndex() [][]string { - return [][]string{ - []string{"JobID"}, - } -} - -type JobOrder struct { - ModelIDCUL - - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - JobOrderID int64 `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号 - UserID string `orm:"column(user_id)" json:"userID"` //接任务人ID - Status int `json:"status"` //任务订单状态,接单,待审核,已审核,已结算等 - SubmitAuditAt time.Time `json:"submitAuditTime"` //提交审核日期 - AuditAt time.Time `json:"auditAt"` //审核日期 - Content string `josn:"content"` //任务审核内容 - Imgs string `json:"imgs"` //任务审核图片 - Comment string `json:"comment"` //审核理由 - UserActualPrice int `json:"userActualPrice"` //用户订单实际支付(用户自填) - - DropShippingCount int `json:"dropShippingCount"` //一件代发购买商品数量 - DropShippingDeliveryID int `orm:"column(drop_shipping_delivery_id)" json:"dropShippingDeliveryID"` - DropShippingName string `json:"dropShippingName"` - DropShippingMobile string `json:"dropShippingMobile"` - DropShippingAddress string `json:"dropShippingAddress"` - DropShippingDetailAddress string `json:"dropShippingDetailAddress"` - DropShippingLng float64 `json:"dropShippingLng"` - DropShippingLat float64 `json:"dropShippingLat"` - DropShippingAutoAddress string `json:"dropShippingAutoAddress"` - DropShippingCityCode int `json:"dropShippingCityCode"` - DropShippingDistrictCode int `json:"dropShippingDistrictCode"` - VendorWaybillID string `orm:"column(vendor_waybill_id)" json:"vendorWaybillID"` //运单号 - WaybillInfo string `orm:"type(text)" json:"waybillInfo"` //物流信息 - WaybillQueryTime time.Time `json:"waybillQueryTime"` //上次查询时间 - WaybillStatus int `json:"waybillStatus"` //运单状态(一件代发) - DropShippingConfirmTime time.Time `orm:"type(datetime);null" json:"dropShippingConfirmTime"` //确认收货时间 - DropShippingConfirmUser string `json:"dropShippingConfirmUser"` //确认收货人 -} - -func (v *JobOrder) TableIndex() [][]string { - return [][]string{ - []string{"JobID"}, - []string{"JobOrderID"}, - []string{"UserID"}, - } -} - -type JobTimer struct { - ModelIDCUL - - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - JobOrderID int64 `orm:"column(job_order_id)" json:"jobOrderID"` //任务订单号 - Type int `json:"type"` //定时任务类型,1为接受任务,2为提交审核 - Status int `json:"status"` //定时任务的状态,0表示正在进行,1表示已经结束 - StartAt time.Time `json:"startAt"` //定时任务开始时间 - LimitAt int `json:"limitAt"` //定时任务时长(小时数) -} - -func (v *JobTimer) TableIndex() [][]string { - return [][]string{ - []string{"JobID"}, - []string{"JobOrderID"}, - } -} - -type JobSpan struct { - ModelIDCULD - - JobID int `orm:"column(job_id)" json:"jobID"` //任务ID - EndAt *time.Time `json:"endAt"` //生效时间范围 - SpanType int `json:"spanType"` //1为置顶,2为推荐 -} - -func (v *JobSpan) TableIndex() [][]string { - return [][]string{ - []string{"JobID", "DeletedAt"}, - } -} - -type MtMember struct { - ModelIDCULD - - URL string `orm:"column(url)" json:"url"` //网址 - ExpiryDate time.Time `json:"expiryDate"` //有效期 - ShortLink string `json:"shortLink"` //密钥? -} - -func (v *MtMember) TableUnique() [][]string { - return [][]string{ - []string{"URL"}, - } -} - -func (v *MtMember) TableIndex() [][]string { - return [][]string{ - []string{"DeletedAt"}, - } -} - -type StationInfo struct { - ModelIDCUL - - StationID string `orm:"column(station_id)" json:"stationID"` - StationName string `json:"stationName"` - ProvinceName string `json:"provinceName"` - ProvinceID int `orm:"column(province_id)" json:"provinceID"` - CityName string `json:"cityName"` - Latitude float64 `json:"latitude"` - Longitude float64 `json:"longitude"` - Location string `json:"location"` - StarNum string `json:"starNum"` - Phone string `json:"phone"` - StationPic string `json:"stationPic"` - StationBannerPic string `json:"stationBannerPic"` - Prices string `orm:"type(text)" json:"prices"` - Adverts string `orm:"type(text)" json:"adverts"` - District string `json:"district"` - CityID int `orm:"column(city_id)" json:"cityID"` - StationType int `json:"stationType"` - Distance float64 `json:"distance"` - OilInfo []*OilInfo `orm:"-" json:"oilInfo"` -} - -func (v *StationInfo) TableUnique() [][]string { - return [][]string{ - []string{"StationID"}, - } -} - -func (v *StationInfo) TableIndex() [][]string { - return [][]string{ - []string{"CityID", "ProvinceID"}, - } -} - -type OilInfo struct { - OilID string `json:"oilId"` - StationPrice string `json:"stationPrice"` - OilType string `json:"oilType"` - DiscountPrice string `json:"discountPrice"` - CountryPrice string `json:"countryPrice"` - OilgunCodes []string `json:"oilgunCodes"` - OilCode string `json:"oilCode"` -} - -type AddressDistinguish struct { - ModelIDCUL - - Address string `json:"address"` - Info string `orm:"type(text)" json:"info"` -} - -func (v *AddressDistinguish) TableUnique() [][]string { - return [][]string{ - []string{"Address"}, - } -} diff --git a/business/model/matter.go b/business/model/matter.go deleted file mode 100644 index 7448a0908..000000000 --- a/business/model/matter.go +++ /dev/null @@ -1,17 +0,0 @@ -package model - -type VendorMatterCategory struct { - ModelIDCULD - - VendorID int `orm:"column(vendor_id)" json:"vendorID"` - CategoryID string `orm:"column(category_id)" json:"categoryID"` - CategoryName string `json:"categoryName"` - ParentID int `orm:"column(parent_id)" json:"parentID"` - Level int `json:"level"` -} - -func (v *VendorMatterCategory) TableUnique() [][]string { - return [][]string{ - []string{"VendorID", "CategoryID"}, - } -} diff --git a/controllers/print_controller.go b/controllers/print_controller.go deleted file mode 100644 index 619fea906..000000000 --- a/controllers/print_controller.go +++ /dev/null @@ -1,21 +0,0 @@ -package controllers - -import ( - beego "github.com/astaxie/beego/server/web" -) - -type PrintController struct { - beego.Controller -} - -// @Title 添加打印机 -// @Description 添加打印机 -// @Param app_id formData string true "应用ID" -// @Param timestamp formData int true "unix时间戳" -// @Param sign formData string true "签名" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /AddPrint [post] -func (c *PrintController) AddPrint() { - -}