Merge remote-tracking branch 'origin/mark' into don
This commit is contained in:
@@ -3,7 +3,6 @@ package cms
|
||||
import (
|
||||
"git.rosy.net.cn/jx-callback/business/auth2"
|
||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
||||
"git.rosy.net.cn/jx-callback/business/authz"
|
||||
"git.rosy.net.cn/jx-callback/business/authz/autils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
@@ -111,7 +110,7 @@ func TransferLegacyWeixins(mobile string) (err error) {
|
||||
}
|
||||
if v.JxStoreID > 0 { // 运营就不加到门店老板组里了
|
||||
if user.Type&model.UserTypeOperator == 0 {
|
||||
api2.RoleMan.AddRole4User(user.GetID(), autils.NewRole(authz.StoreRoleBoss, v.JxStoreID))
|
||||
api2.RoleMan.AddRole4User(user.GetID(), autils.NewStoreBossRole(v.JxStoreID))
|
||||
}
|
||||
} else {
|
||||
if mobile != "" {
|
||||
@@ -119,7 +118,7 @@ func TransferLegacyWeixins(mobile string) (err error) {
|
||||
if err = err2; err == nil {
|
||||
for _, role := range rList {
|
||||
if role.StoreID > 0 {
|
||||
api2.RoleMan.DeleteRole4User(user.GetID(), autils.NewRole(authz.StoreRoleBoss, role.StoreID))
|
||||
api2.RoleMan.DeleteRole4User(user.GetID(), autils.NewStoreBossRole(role.StoreID))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals/api2"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/authz"
|
||||
"git.rosy.net.cn/jx-callback/business/authz/autils"
|
||||
_ "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai"
|
||||
_ "git.rosy.net.cn/jx-callback/business/partner/purchase/elm"
|
||||
@@ -23,7 +22,7 @@ func TestTransferLegacyWeixins(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCasbin(t *testing.T) {
|
||||
userList, err := api2.RoleMan.GetRoleUserList(autils.NewRole(authz.StoreRoleBoss, 100324))
|
||||
userList, err := api2.RoleMan.GetRoleUserList(autils.NewStoreBossRole(100324))
|
||||
t.Log(utils.Format4Output(userList, false))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
@@ -1585,6 +1585,27 @@ func SendAlarmVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, p
|
||||
storeDetail, _ := dao.GetStoreDetail(db, storeID, list[0].VendorID)
|
||||
if storeDetail != nil {
|
||||
storeDetailMap[storeID] = storeDetail
|
||||
|
||||
// userList, _ := GetRoleUserList(ctx, autils.NewStoreBossRole(storeID))
|
||||
// for _, mobile := range []string{storeDetail.Tel1, storeDetail.MarketManPhone, storeDetail.OperatorPhone} {
|
||||
// if mobile != "" {
|
||||
// if user, err2 := dao.GetUserByID(db, "mobile", mobile); err2 == nil {
|
||||
// userList = append(userList, user.GetID())
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// for _, userID := range userList {
|
||||
// if userID != "" {
|
||||
// if userMap[userID] == nil {
|
||||
// userMap[userID] = make(map[int]int)
|
||||
// }
|
||||
// userMap[userID][storeID] = 1
|
||||
// if txtAlarmSnapshotMap[storeID] != nil {
|
||||
// userMapTxt[userID] = append(userMapTxt[userID], txtAlarmSnapshotMap[storeID]...)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
for _, mobile := range []string{storeDetail.Tel1, storeDetail.MarketManPhone, storeDetail.OperatorPhone} {
|
||||
if mobile != "" {
|
||||
if userMap[mobile] == nil {
|
||||
|
||||
@@ -132,7 +132,7 @@ func TryAddStoreBossRole4User(ctx *jxcontext.Context, user *model.User) (err err
|
||||
if storeList, err := dao.GetStoreList(dao.GetDB(), nil, []string{userMobile}, ""); err == nil && len(storeList) > 0 {
|
||||
roleList := make([]*authz.RoleInfo, len(storeList))
|
||||
for k, v := range storeList {
|
||||
roleList[k] = autils.NewRole(authz.StoreRoleBoss, v.ID)
|
||||
roleList[k] = autils.NewStoreBossRole(v.ID)
|
||||
}
|
||||
err = AddRoles4User(ctx, user.GetID(), roleList)
|
||||
}
|
||||
@@ -152,7 +152,7 @@ func TryAddStoreBossRole4StoreByMobile(ctx *jxcontext.Context, storeID int, mobi
|
||||
}
|
||||
}
|
||||
if len(userIDs) > 0 {
|
||||
role := autils.NewRole(authz.StoreRoleBoss, storeID)
|
||||
role := autils.NewStoreBossRole(storeID)
|
||||
err = AddUsers4Role(ctx, role, userIDs)
|
||||
}
|
||||
}
|
||||
@@ -161,6 +161,10 @@ func TryAddStoreBossRole4StoreByMobile(ctx *jxcontext.Context, storeID int, mobi
|
||||
|
||||
func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
var user *model.User
|
||||
mobileNumber := jxutils.GetRealMobile4Order(order)
|
||||
if mobileNumber == "" && order.VendorUserID == "" {
|
||||
return fmt.Errorf("订单:%s手机号与平台用户标识都是空", order.VendorOrderID)
|
||||
}
|
||||
authType := jxutils.GetAuthType4Vendor(order.VendorID)
|
||||
if authType == "" {
|
||||
msg := fmt.Sprintf("平台ID:%d当前不被支持,请联系开发", order.VendorID)
|
||||
@@ -169,7 +173,6 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
|
||||
oeratorName := order.VendorOrderID
|
||||
mobileNumber := jxutils.GetRealMobile4Order(order)
|
||||
db := dao.GetDB()
|
||||
if mobileNumber != "" {
|
||||
userList, _, err2 := dao.GetUsers(db, 0, "", nil, "", mobileNumber, 0, 0)
|
||||
@@ -182,15 +185,15 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
|
||||
vendorUserID := order.VendorUserID
|
||||
if err == nil && vendorUserID != "" {
|
||||
authInfo, err2 := dao.GetAuthBind(db, "", model.AuthBindTypeID, authType, vendorUserID)
|
||||
if vendorUserID != "" {
|
||||
authInfo, err2 := dao.GetAuthBind(db, model.AuthBindTypeID, authType, vendorUserID)
|
||||
if err = err2; err != nil && !dao.IsNoRowsError(err) {
|
||||
return err
|
||||
}
|
||||
if err == nil {
|
||||
vendorUserID = ""
|
||||
if user == nil {
|
||||
if user, err = dao.GetUserByID(db, "UserID", authInfo.UserID); err != nil {
|
||||
if user, err = dao.GetUserByID(db, "user_id", authInfo.UserID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -199,6 +202,7 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
}
|
||||
|
||||
const Remark = "fromOrder"
|
||||
if user == nil {
|
||||
user = &model.User{
|
||||
UserID2: mobileNumber,
|
||||
@@ -206,20 +210,19 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
Mobile: &mobileNumber,
|
||||
Type: model.UserTypeConsumer,
|
||||
Address: order.ConsigneeAddress,
|
||||
Remark: order.VendorOrderID,
|
||||
Remark: Remark,
|
||||
}
|
||||
setUserAddress(db, user, order)
|
||||
|
||||
if user.GetID2() == "" {
|
||||
user.UserID2 = vendorUserID
|
||||
user.UserID2 = order.VendorUserID
|
||||
}
|
||||
if user.GetID2() == "" {
|
||||
user.UserID2 = order.VendorUserID
|
||||
user.UserID2 = order.VendorOrderID
|
||||
}
|
||||
|
||||
user.Type = model.UserTypeConsumer
|
||||
err = CreateUser(user, oeratorName)
|
||||
globals.SugarLogger.Debug(err)
|
||||
} else {
|
||||
if user.GetMobile() == "" && mobileNumber != "" {
|
||||
user.Mobile = &mobileNumber
|
||||
@@ -234,6 +237,7 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
||||
BindType: model.AuthBindTypeID,
|
||||
AuthID: vendorUserID,
|
||||
Type: authType,
|
||||
Remark: Remark,
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(authBind, oeratorName)
|
||||
authBind.Status = model.AuthBindStatusNormal
|
||||
@@ -310,7 +314,7 @@ func OnDingDingMsg(msg map[string]interface{}) (callbackResponse *dingdingapi.Ca
|
||||
for _, userID := range msg[dingdingapi.KeyUserID].([]interface{}) {
|
||||
userIDStr := utils.Interface2String(userID)
|
||||
globals.SugarLogger.Debugf("OnDingDingMsg dingding user:%s left company", userIDStr)
|
||||
if authBind, err = dao.GetAuthBind(db, "", model.AuthBindTypeAuth, dingding.AuthTypeStaff, userIDStr); err == nil { // 直接找到了
|
||||
if authBind, err = dao.GetAuthBind(db, model.AuthBindTypeAuth, dingding.AuthTypeStaff, userIDStr); err == nil { // 直接找到了
|
||||
globals.SugarLogger.Debugf("OnDingDingMsg dingding user:%s, userID:%s left company", userIDStr, authBind.UserID)
|
||||
if err = DisableUser(jxcontext.AdminCtx, authBind.UserID); err != nil {
|
||||
globals.SugarLogger.Errorf("OnDingDingMsg failed with error:%v", err)
|
||||
|
||||
@@ -999,3 +999,108 @@ func RefreshMtpsWaybillFee(ctx *jxcontext.Context, isAsync, isContinueWhenError
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func CreateConsumerFromOrders(ctx *jxcontext.Context, vendorIDs []int, fromDate, toDate time.Time, isForce, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
if utils.IsTimeZero(fromDate) {
|
||||
return "", fmt.Errorf("fromDate必须指定")
|
||||
}
|
||||
if utils.IsTimeZero(toDate) {
|
||||
toDate = time.Now()
|
||||
}
|
||||
fromDate = utils.Time2Date(fromDate)
|
||||
toDate = utils.Time2Date(toDate)
|
||||
if len(vendorIDs) == 0 {
|
||||
vendorIDs = partner.GetPurchasePlatformVendorIDs()
|
||||
}
|
||||
var dateList []time.Time
|
||||
curDate := fromDate
|
||||
for {
|
||||
if toDate.Sub(curDate) < 0 {
|
||||
break
|
||||
}
|
||||
dateList = append(dateList, curDate)
|
||||
curDate = curDate.Add(24 * time.Hour)
|
||||
}
|
||||
|
||||
type GoodsOrderWithOriginal struct {
|
||||
model.GoodsOrder
|
||||
OriginalData string `orm:"type(text)" json:"-"`
|
||||
}
|
||||
|
||||
db := dao.GetDB()
|
||||
rootTask := tasksch.NewParallelTask("从订单中创建消费者账户", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
curDate := batchItemList[0].(time.Time)
|
||||
sql := `
|
||||
SELECT t1.*, t2.original_data
|
||||
FROM goods_order t1
|
||||
LEFT JOIN goods_order_original t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
|
||||
WHERE t1.order_created_at >= ? AND t1.order_created_at < ?`
|
||||
sqlParams := []interface{}{
|
||||
curDate,
|
||||
curDate.Add(24 * time.Hour),
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t1.vendor_id IN (" + dao.GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
if !isForce {
|
||||
sql += " AND t1.user_id = ''"
|
||||
}
|
||||
var orderList []*GoodsOrderWithOriginal
|
||||
if err = dao.GetRows(db, &orderList, sql, sqlParams...); err == nil {
|
||||
if len(orderList) > 0 {
|
||||
// 并发必须是1,否则在HandleOrder4Consignee中可能导致主键重,错误
|
||||
subTask := tasksch.NewParallelTask(fmt.Sprintf("处理日期:%s的订单", utils.Time2DateStr(curDate)), tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
order := batchItemList[0].(*GoodsOrderWithOriginal)
|
||||
if isForce || order.UserID == "" {
|
||||
if handler := partner.GetPurchasePlatformFromVendorID(order.VendorID); handler != nil {
|
||||
var updateFields []string
|
||||
if isForce || order.VendorUserID == "" {
|
||||
var order2 *model.GoodsOrder
|
||||
if order.OriginalData != "" {
|
||||
var orderData map[string]interface{}
|
||||
if utils.UnmarshalUseNumber([]byte(order.OriginalData), &orderData) == nil {
|
||||
order2 = handler.Map2Order(orderData)
|
||||
if order2.VendorUserID == "" {
|
||||
order2 = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
if order2 == nil && order.VendorID == model.VendorIDMTWM && time.Now().Sub(curDate) < 60*24*time.Hour {
|
||||
order2, err = handler.GetOrder(order.VendorOrderID)
|
||||
}
|
||||
if order2 != nil {
|
||||
if order2.VendorUserID != "" && order.VendorUserID != order2.VendorUserID {
|
||||
updateFields = append(updateFields, "VendorUserID")
|
||||
order.VendorUserID = order2.VendorUserID
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
if err = cms.HandleOrder4Consignee(&order.GoodsOrder); err == nil {
|
||||
updateFields = append(updateFields, "UserID")
|
||||
}
|
||||
*/
|
||||
if len(updateFields) > 0 {
|
||||
dao.UpdateEntity(db, &order.GoodsOrder, updateFields...)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}, orderList)
|
||||
tasksch.HandleTask(subTask, task, true).Run()
|
||||
_, err = subTask.GetResult(0)
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}, dateList)
|
||||
tasksch.HandleTask(rootTask, nil, true).Run()
|
||||
if !isAsync {
|
||||
_, err = rootTask.GetResult(0)
|
||||
} else {
|
||||
hint = rootTask.ID
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user