Merge remote-tracking branch 'origin/mark' into yonghui

This commit is contained in:
苏尹岚
2020-01-09 10:32:28 +08:00
13 changed files with 132 additions and 52 deletions

View File

@@ -157,7 +157,7 @@ func getFixedTokenName(token string) *AuthInfo {
}
func createAuthInfo(user IUser, authBindInfo *AuthBindEx) (authInfo *AuthInfo) {
token, tokenType := createToken(user)
token, tokenType := createToken(user, authBindInfo)
expireDuration := DefTokenDuration
authInfo = &AuthInfo{
AuthBindInfo: authBindInfo,
@@ -378,9 +378,9 @@ func ClearUserToken(userID string) {
/////////////
func createToken(user IUser) (token string, tokenType int) {
func createToken(user IUser, authBindInfo *AuthBindEx) (token string, tokenType int) {
userID := TokenUserEmpty
userName := TokenUserEmpty
userName := authBindInfo.AuthID
tokenType = TokenTypeOnlyAuth
if user != nil {
userID = user.GetID()
@@ -392,8 +392,9 @@ func createToken(user IUser) (token string, tokenType int) {
TokenVer,
userID,
time.Now().Format("20060102-150405"),
userName,
authBindInfo.Type,
utils.GetUUID(),
userName,
}, TokenTypeSep), tokenType
}
@@ -404,7 +405,7 @@ func GetTokenType(token string) (tokenType int) {
tokenType = TokenTypeNone
if token != "" {
tokenPartList := strings.Split(token, TokenTypeSep)
if (len(tokenPartList) == 1) || (len(tokenPartList) == 6 && tokenPartList[2] != TokenUserEmpty) {
if (len(tokenPartList) == 1) || (len(tokenPartList) >= 6 && tokenPartList[2] != TokenUserEmpty) {
tokenType = TokenTypeNormal
} else {
tokenType = TokenTypeOnlyAuth

View File

@@ -0,0 +1,43 @@
package alipay
import (
"git.rosy.net.cn/baseapi/platformapi/alipayapi"
"git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
const (
AuthType = "alipaycode"
)
type Auther struct {
authprovider.DefAuther
}
var (
AutherObj *Auther
)
func init() {
AutherObj = new(Auther)
auth2.RegisterAuther(AuthType, AutherObj)
}
func (a *Auther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBindEx, err error) {
globals.SugarLogger.Debugf("VerifySecret dummy:%s, code:%s", dummy, code)
tokenInfo, err := api.AliPayAPI.SystemAuthToken(alipayapi.GrantTypeCode, code, "")
if err == nil {
userInfo, err2 := api.AliPayAPI.UserInfoShare(tokenInfo.AccessToken)
if err = err2; err == nil {
if authBindEx, err = a.UnionFindAuthBind(AuthType, nil, userInfo.UserID, "", userInfo); err == nil {
authBindEx.UserHint = &auth2.UserBasic{
Name: userInfo.NickName,
Avatar: userInfo.Avatar,
}
}
}
}
return authBindEx, err
}

View File

@@ -655,6 +655,9 @@ func (c *OrderManager) GetStoresOrderSaleInfoNew(ctx *jxcontext.Context, storeID
}
saleInfo.ActualPayPrice += v.ActualPayPrice
saleInfo.Count++
saleInfo.DistanceFreightMoney += v.DistanceFreightMoney
saleInfo.WaybillTipMoney += v.WaybillTipMoney
}
orderMap[universalOrderID].SkuCount += v.Count

View File

@@ -406,8 +406,15 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
}
if !isPending {
if status.Status == model.OrderStatusAgreeFailedGetGoods || status.Status == model.OrderStatusDeliverFailed {
s.updateOrderByBill(order, nil, status.Status != model.OrderStatusAgreeFailedGetGoods)
s.updateOrderByBill(order, nil, false) //status.Status != model.OrderStatusAgreeFailedGetGoods)
s.removeWaybillFromMap(savedOrderInfo, order.VendorID)
clearFlag := 0
if status.Status == model.OrderStatusAgreeFailedGetGoods {
clearFlag = model.OrderFlagMaskFailedGetGoods
} else if status.Status == model.OrderFlagMaskFailedDeliver {
clearFlag = model.OrderFlagMaskFailedDeliver
}
dao.ClearOrderFlag(dao.GetDB(), model.AdminName, order.VendorOrderID, order.VendorID, clearFlag)
}
}
}
@@ -427,7 +434,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
status.Status == model.OrderStatusAgreeFailedGetGoods ||
status.Status == model.OrderStatusDeliverFailed {
if status.Status == model.OrderStatusApplyFailedGetGoods {
dao.ClearOrderFlag(dao.GetDB(), model.AdminName, order.VendorOrderID, order.VendorID, ^(model.OrderFlagMaskFailedGetGoods | model.OrderFlagMaskCallPMCourier))
dao.ClearOrderFlag(dao.GetDB(), model.AdminName, order.VendorOrderID, order.VendorID, model.OrderFlagMaskFailedGetGoods|model.OrderFlagMaskCallPMCourier)
}
if status.Status == model.OrderStatusApplyCancel {
s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark)
@@ -1166,7 +1173,8 @@ func isNeedWatchWaybillTip(order *model.GoodsOrder) bool {
func isNeedWatch3rdWaybill(order *model.GoodsOrder) bool {
return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusDelivering) && // 订单状态
order.DeliveryFlag&model.OrderDeliveryFlagMaskScheduleDisabled == 0 && // 没有禁止调度
!model.IsOrderHaveWaybill(order) // 没有有效运单
!model.IsOrderHaveWaybill(order) && // 没有有效运单
order.LockStatus == model.OrderStatusUnknown
}
func (s *DefScheduler) setWatchOrderWaybills(savedOrderInfo *WatchOrderInfo, duration time.Duration) {
@@ -1219,27 +1227,28 @@ func (s *DefScheduler) watchOrderWaybills(savedOrderInfo *WatchOrderInfo) {
// }
// partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark)
// }
if handler, ok := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).(partner.IAddWaybillTip); ok && handler != nil {
var remark string
tipFee := getWaybillTip(order)
vendorStatus := fmt.Sprintf("设置小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
tipFee2Add := tipFee - order.WaybillTipMoney
vendorStatus += fmt.Sprintf(", 本次添加:%s", jxutils.IntPrice2StandardCurrencyString(tipFee2Add))
if false { //tipFee2Add > 0 {
err := handler.UpdateWaybillTip(jxcontext.AdminCtx, order.VendorOrgCode, order.VendorStoreID, order.VendorOrderID, order.VendorOrderID, "", "", tipFee)
if err == nil {
vendorStatus += "成功"
order.WaybillTipMoney = tipFee
partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
} else {
vendorStatus += "失败"
remark = fmt.Sprint(err)
}
} else {
vendorStatus += "空操作"
}
partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark)
}
// if handler, ok := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).(partner.IAddWaybillTip); ok && handler != nil {
// var remark string
// tipFee := getWaybillTip(order)
// vendorStatus := fmt.Sprintf("设置小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
// tipFee2Add := tipFee - order.WaybillTipMoney
// vendorStatus += fmt.Sprintf(", 本次添加:%s", jxutils.IntPrice2StandardCurrencyString(tipFee2Add))
// if false { //tipFee2Add > 0 {
// err := handler.UpdateWaybillTip(jxcontext.AdminCtx, order.VendorOrgCode, order.VendorStoreID, order.VendorOrderID, order.VendorOrderID, "", "", tipFee)
// if err == nil {
// vendorStatus += "成功"
// order.WaybillTipMoney = tipFee
// partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
// } else {
// vendorStatus += "失败"
// remark = fmt.Sprint(err)
// }
// } else {
// vendorStatus += "空操作"
// }
// partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark)
// }
}
if savedOrderInfo.isNeedCreate3rdWaybill {
s.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)

View File

@@ -1042,7 +1042,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
err = AddEventDetail(model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, ctx.GetTrackInfo(), "", "")
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
dao.WrapAddIDCULDEntity(skuBind, userName)
globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
// globals.SugarLogger.Debug(utils.Format4Output(skuBind, false))
if deletedSku := dao.GetDeletedStoreSkuBind(db, skuBind.StoreID, skuBind.SkuID); deletedSku == nil {
if err = dao.CreateEntity(db, skuBind); err != nil {
dao.Rollback(db)
@@ -1094,7 +1094,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
updateFieldMap[model.FieldStatus] = 1
}
if skuBindInfo.UnitPrice != 0 && isCanChangePrice { // 这里是否需要加此条件限制
if skuBindInfo.UnitPrice != 0 && skuBind.UnitPrice != unitPrice && isCanChangePrice { // 这里是否需要加此条件限制
skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
skuBind.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), skuBind.Price)

View File

@@ -195,7 +195,9 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo
}
func isStoreSkuSyncNeedDelete(storeSku *dao.StoreSkuSyncInfo) bool {
return model.IsSyncStatusDelete(storeSku.SkuSyncStatus) || storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 || storeSku.NameID == 0
return model.IsSyncStatusDelete(storeSku.SkuSyncStatus) ||
storeSku.BindDeletedAt != utils.DefaultTimeValue || storeSku.BindID == 0 ||
storeSku.NameID == 0 || storeSku.NameStatus != model.SkuStatusNormal || storeSku.Status != model.SkuStatusNormal
}
func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSkuInfo) {
@@ -239,7 +241,7 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
if skuItem.VendorPrice > skuItem.BoxFee {
skuItem.BoxFee = boxFee
}
skuItem.MergedStatus = jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus)
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
}
}

View File

@@ -16,22 +16,27 @@ const (
)
type StoresOrderSaleInfo struct {
StoreID int `orm:"column(store_id)" json:"storeID"`
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
Status int `json:"status"`
StoreID int `orm:"column(store_id)" json:"storeID"`
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
Status int `json:"status"`
Count int `json:"count"`
ShopPrice int64 `json:"shopPrice"`
VendorPrice int64 `json:"vendorPrice"`
SalePrice int64 `json:"salePrice"`
ActualPayPrice int64 `json:"actualPayPrice"`
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
}
type OrderSkuWithActualPayPrice struct {
model.OrderSku
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
@@ -215,7 +220,7 @@ func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID i
UPDATE goods_order
SET flag = flag & ?
WHERE vendor_order_id = ? AND vendor_id = ?
`, flag, vendorOrderID, vendorID)
`, ^flag, vendorOrderID, vendorID)
return err
}
@@ -345,7 +350,7 @@ func GetStoreOrderSkuList(db *DaoDB, storeIDs []int, finishedAtBegin, finishedAt
// order_finished_at
sql := `
SELECT t1.*,
t2.actual_pay_price, t2.status, IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id,
IF(t2.jx_store_id > 0, t2.jx_store_id, t2.store_id) store_id, t2.status, t2.actual_pay_price, t2.distance_freight_money, t2.waybill_tip_money,
t3.pay_percentage
FROM order_sku t1
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id

View File

@@ -342,7 +342,7 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end,
t2.*,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
IF(t11.%s <> '', t11.%s, t3.img) img,
IF(t12.%s <> '', t12.%s, t3.img2) img2,
t13.%s desc_img,
@@ -367,8 +367,8 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
sql += `
FROM store_sku_bind t1
JOIN store_map t14 ON t14.store_id = t1.store_id AND t14.vendor_id = ? AND t14.deleted_at = ?
LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ?
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ?/* AND t2.status = ?*/
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?/* AND t3.status = ?*/
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
@@ -376,8 +376,8 @@ func newGetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty
`
sqlParams := []interface{}{
vendorID, utils.DefaultTimeValue,
utils.DefaultTimeValue, model.SkuStatusNormal,
utils.DefaultTimeValue, model.SkuStatusNormal,
utils.DefaultTimeValue, // model.SkuStatusNormal,
utils.DefaultTimeValue, // model.SkuStatusNormal,
utils.DefaultTimeValue,
}
if isSingleStorePF {
@@ -549,7 +549,7 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
t1.store_id, t1.deleted_at bind_deleted_at,
t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end,
IF(t11.%s <> '', t11.%s, t3.img) img,
IF(t12.%s <> '', t12.%s, t3.img2) img2,
t13.%s desc_img,
@@ -557,7 +557,7 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
t4m.sync_status cat_sync_status, t4m.vendor_thing_id vendor_cat_id,
t5skum.sync_status sku_cat_sync_status, t5skum.vendor_thing_id sku_vendor_cat_id
FROM sku t2
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?/* AND t3.status = ?*/
JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
JOIN store_map sm ON sm.vendor_id = ? AND sm.store_id = ? AND sm.deleted_at = ?
JOIN thing_map t2m ON t2m.thing_id = t2.id AND t2m.vendor_org_code = sm.vendor_org_code AND t2m.thing_type = ? AND t2m.vendor_id = ? AND t2m.deleted_at = ?
@@ -568,17 +568,17 @@ func newGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
WHERE t2.deleted_at = ? AND t2.status = ? AND t2m.vendor_thing_id <> ''
WHERE t2.deleted_at = ?/* AND t2.status = ?*/ AND t2m.vendor_thing_id <> ''
ORDER BY t1.price DESC`
sqlParams := []interface{}{
utils.DefaultTimeValue, model.SkuStatusNormal,
utils.DefaultTimeValue, // model.SkuStatusNormal,
utils.DefaultTimeValue,
vendorID, storeID, utils.DefaultTimeValue,
model.ThingTypeSku, vendorID, utils.DefaultTimeValue,
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
utils.DefaultTimeValue,
model.ThingTypeCategory, vendorID, utils.DefaultTimeValue,
utils.DefaultTimeValue, model.SkuStatusNormal,
utils.DefaultTimeValue, // model.SkuStatusNormal,
}
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql = fmt.Sprintf(sql,

View File

@@ -53,6 +53,7 @@ var (
skuActTypeMap = map[string]int{
ebaiapi.OrderSkuDiscountTypeZhe: 1,
ebaiapi.OrderSkuDiscountTypeReduce: 1,
ebaiapi.OrderSkuDiscountTypeTe: 1,
}
deliveryTypeMap = map[int]string{
ebaiapi.DeliveryPartyFengElmSelf: model.OrderDeliveryTypeStoreSelf,