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

This commit is contained in:
苏尹岚
2020-06-15 11:03:01 +08:00
6 changed files with 58 additions and 11 deletions

View File

@@ -6,6 +6,10 @@ import (
"sync"
"time"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/authz"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
@@ -1443,17 +1447,40 @@ func OrderProfitWarning(order *model.GoodsOrder) {
if storeDetail != nil && err == nil {
payPercentage := storeDetail.PayPercentage
if payPercentage >= 50 {
profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney-order.EarningPrice)) / 100
profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney-order.ShopPrice)) / 100
} else {
profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney*int64(payPercentage)/200)) / 100
}
if profit < 0 {
operatorPhone, operatorName := getOrderOperatorInfo(order, storeDetail)
operatorRole := getOrderOperatorRoleInfo(order, storeDetail)
if operatorPhone != "" {
var (
roleList []*authz.RoleInfo
userIDs []string
flag = false
)
roleList = append(roleList, autils.NewRole(operatorRole, 0))
userIDMap, err := cms.GetRolesUserList(jxcontext.AdminCtx, roleList)
noticeMsg := fmt.Sprintf("利润 [%v],运营负责人:[%v]门店ID[%v]平台门店ID[%v],门店名:[%v],订单序号:[%v],订单号(点击进入详情)%v", profit, operatorName, order.StoreID, order.VendorStoreID, order.StoreName, order.OrderSeq, globals.BackstageHost+"/#/ordermanager/"+order.VendorOrderID)
user, err := dao.GetUserByID(db, "mobile", operatorPhone)
if user != nil && err == nil {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告此订单利润低于0", noticeMsg)
for _, v := range userIDMap {
for _, vv := range v {
userIDs = append(userIDs, vv)
}
}
for _, v := range userIDs {
if v == user.UserID {
flag = true
}
}
if !flag {
userIDs = append(userIDs, user.UserID)
}
for _, v := range userIDs {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, v, "警告此订单利润低于0", noticeMsg)
}
}
}
}
@@ -1502,3 +1529,15 @@ func getOrderOperatorInfo(order *model.GoodsOrder, storeDetail *dao.StoreDetail)
}
return operatorPhone, operatorName
}
func getOrderOperatorRoleInfo(order *model.GoodsOrder, storeDetail *dao.StoreDetail) (roleName string) {
switch order.VendorID {
case model.VendorIDJD:
roleName = storeDetail.OperatorRole
case model.VendorIDMTWM:
roleName = storeDetail.OperatorRole2
case model.VendorIDEBAI:
roleName = storeDetail.OperatorRole3
}
return roleName
}

View File

@@ -589,6 +589,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.img,
t1.img2,
t1.img3,
t1.img_watermark,
t1.img_mix,
t1.status,
t1.is_spu,
t1.desc_img,
@@ -626,6 +628,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.img,
t1.img2,
t1.img3,
t1.img_watermark,
t1.img_mix,
t1.status,
t1.is_spu,
t1.desc_img,
@@ -905,7 +909,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
}
}
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false))
for _, imgName := range []string{"img", "img2", "img3"} {
for _, imgName := range []string{"img", "img2", "img3", "img_watermark", "img_mix"} {
if valid[imgName] != nil {
if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" {
_, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid[imgName].(string), model.ImgTypeMain, true)

View File

@@ -1107,7 +1107,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
skuBind.Status = tmpStatus
}
if globals.IsAddEvent {
err = AddEventDetail(db, ctx, model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, "", "")
err = AddEventDetail(db, ctx, model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, "", utils.Int2Str(skuBind.UnitPrice))
}
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
dao.WrapAddIDCULDEntity(skuBind, userName)

View File

@@ -1558,6 +1558,7 @@ type tStoreSkuAudit struct {
MidUnitPrice int `json:"midUnitPrice"`
CityName string `json:"cityName"`
PayPercentage int `json:"payPercentage"`
StoreLevel string `json:"storeLevel"`
}
func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int, name, remark, keyword, marketManPhone, cityName string, applyTimeStart, applyTimeEnd, auditTimeStart, auditTimeEnd time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
@@ -1565,7 +1566,7 @@ func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int
sql := `
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*,
c.name sku_name, c.prefix, c.unit, c.spec_quality, c.spec_unit, c.img,
d.name store_name, b.name, e.mid_unit_price, f.name city_name, d.pay_percentage
d.name store_name, b.name, e.mid_unit_price, f.name city_name, d.pay_percentage, d.store_level
FROM store_sku_audit a
LEFT JOIN user b ON a.user_id = b.user_id
LEFT JOIN sku_name c ON c.id = a.name_id AND c.deleted_at = ?

View File

@@ -168,9 +168,11 @@ type SkuName struct {
SpecUnit string `orm:"size(8)" json:"-"` // 为份必然为克这个主要作用只是用于确保SkuName的唯一性
Price int `json:"price"` // 单位为分标准价不为份的就为实际标准价为份的为每市斤价实际还要乘质量。todo 为份的确定必须有质量
Img string `orm:"size(512)" json:"img"`
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
Img string `orm:"size(512)" json:"img"`
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
// ImgEbai string `orm:"size(255)" json:"imgEbai"` // 饿百图片地址
// ImgHashCode string `orm:"size(255);index" json:"img_hash_code"`
@@ -185,8 +187,9 @@ type SkuName struct {
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"`
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"`
PreparationTime int `orm:"default(1)" json:"preparationTime"`
}
func (*SkuName) TableUnique() [][]string {

View File

@@ -777,7 +777,7 @@ func buildUpdateSkusParam(storeSku *dao.StoreSkuSyncInfo, v *dao.StoreSkuSyncInf
OuterID: utils.Int2Str(v.SkuID),
}
//库存设置
if v.Status == model.SkuStatusNormal {
if v.StoreSkuStatus == model.SkuStatusNormal {
sku.StockNum = "9999"
} else {
sku.StockNum = "0"