自动关注

This commit is contained in:
苏尹岚
2019-12-31 13:31:29 +08:00
parent 2c5d4801b0
commit 0f2058de84
11 changed files with 212 additions and 42 deletions

View File

@@ -774,7 +774,7 @@ func RefreshOrdersWithoutJxStoreID(ctx *jxcontext.Context, fromDate, toDate stri
return hint, err
}
func GetOrdersSupplement(ctx *jxcontext.Context, storIDs, vendorIDs []int, vendorOrderID, fromTime, toTime string, status, stype, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
func GetOrdersSupplement(ctx *jxcontext.Context, storIDs, vendorIDs []int, vendorOrderID, fromTime, toTime string, status, stype, IsReverse, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
var (
db = dao.GetDB()
fromTimeP time.Time
@@ -789,7 +789,7 @@ func GetOrdersSupplement(ctx *jxcontext.Context, storIDs, vendorIDs []int, vendo
if fromTimeP.After(toTimeP) {
return nil, fmt.Errorf("时间范围不合法!开始时间:[%v],结束时间:[%v]", fromTimeP, toTimeP)
}
result, totalCount, err := dao.GetOrdersSupplement(db, storIDs, vendorIDs, vendorOrderID, fromTimeP, toTimeP, status, stype, offset, pageSize)
result, totalCount, err := dao.GetOrdersSupplement(db, storIDs, vendorIDs, vendorOrderID, fromTimeP, toTimeP, status, stype, IsReverse, offset, pageSize)
pageInfo = &model.PagedInfo{
Data: result,
TotalCount: totalCount,

View File

@@ -72,12 +72,6 @@ type StoreSkuBindInfo struct {
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
}
type tStoreSkuBindInfo struct {
NameID int `json:"nameID"`
UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价每斤价格其它则为总价
IsFocused bool `json:"isFocused"` //是否关注过
}
type tStoreSkuBindAndSpec struct {
model.StoreSkuBind
SkuStatus int
@@ -2963,3 +2957,61 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
}
return hint, err
}
func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync bool) (err error) {
var (
nameMap = make(map[int]*StoreSkuBindInfo)
)
db := dao.GetDB()
storeList, err := dao.GetStoreList(db, nil, nil, "")
for _, v := range storeList {
storeSkuList, _ := dao.GetStoreSkusAndSkuName(db, []int{v.ID}, skuIDs)
for _, vv := range storeSkuList {
if nameMap[vv.ID] != nil {
nameMap[vv.ID].Skus = append(nameMap[vv.ID].Skus, &StoreSkuBindSkuInfo{
SkuID: vv.SkuID,
})
} else {
skuBindInfo := &StoreSkuBindInfo{
UnitPrice: vv.UnitPrice,
NameID: vv.ID,
StoreID: v.ID,
Skus: []*StoreSkuBindSkuInfo{},
}
nameMap[vv.ID] = skuBindInfo
}
}
}
for _, v := range nameMap {
var skuBindInfoList []*StoreSkuBindInfo
skuBindInfoResult := &StoreSkuBindInfo{
NameID: v.NameID,
UnitPrice: v.UnitPrice,
IsFocus: 1,
}
var skuBindSkuList []*StoreSkuBindSkuInfo
skuMap := make(map[int]int)
skuList, _ := dao.GetSkus(db, nil, []int{v.NameID}, nil, nil)
if len(v.Skus) != len(skuList) {
for _, skus := range v.Skus {
skuMap[skus.SkuID] = 1
}
for _, vv := range skuList {
if skuMap[vv.ID] != 1 {
continue
}
skuBindSkuList = append(skuBindSkuList, &StoreSkuBindSkuInfo{
SkuID: vv.ID,
IsSale: 0,
})
}
}
skuBindInfoList = append(skuBindInfoList, skuBindInfoResult)
if isSync {
UpdateStoreSkus(ctx, v.StoreID, skuBindInfoList, true, true)
} else {
updateStoresSkusWithoutSync(ctx, db, []int{v.StoreID}, skuBindInfoList, false)
}
}
return err
}

View File

@@ -0,0 +1,9 @@
package event
func AddOperateEvent() {
}
func AddOperateEventDetail() {
}

View File

@@ -82,31 +82,26 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int) (err e
_, err = task.GetResult(0)
dao.Commit(db)
}
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, nil, nil, nil, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
priceReferList, _ := dao.GetPriceReferSnapshotNoPage(db, nil, nil, nil, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
if len(priceReferList) > 0 {
task := tasksch.NewParallelTask("更新单价", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*model.PriceReferSnapshot)
priceRefer, err := dao.GetPriceReferUnitPrice(db, v.CityCode, v.NameID, v.SnapshotAt)
v.MidUnitPrice = priceRefer.MidUnitPrice
v.MaxUnitPrice = priceRefer.MaxUnitPrice
v.MinUnitPrice = priceRefer.MinUnitPrice
v.AvgUnitPrice = priceRefer.AvgUnitPrice
_, err = dao.UpdateEntity(db, v, "MidUnitPrice", "MaxUnitPrice", "AvgUnitPrice", "MinUnitPrice")
return retVal, err
}, priceReferList)
tasksch.HandleTask(task, nil, true).Run()
_, err = task.GetResult(0)
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
for _, v := range priceReferList {
priceRefer, _ := dao.GetPriceReferUnitPrice(db, v.CityCode, v.NameID, v.SnapshotAt)
v.MidUnitPrice = priceRefer.MidUnitPrice
v.MaxUnitPrice = priceRefer.MaxUnitPrice
v.MinUnitPrice = priceRefer.MinUnitPrice
v.AvgUnitPrice = priceRefer.AvgUnitPrice
_, err = dao.UpdateEntity(db, v, "MidUnitPrice", "MaxUnitPrice", "AvgUnitPrice", "MinUnitPrice")
}
dao.Commit(db)
}
dao.Commit(db)
return err
}

View File

@@ -1052,7 +1052,7 @@ func GetWayBillByOrderID(db *DaoDB, orderStatus, vendorID, waybillVendorID int,
return wayBillList, err
}
func GetOrdersSupplement(db *DaoDB, storIDs, vendorIDs []int, vendorOrderID string, fromTime, toTime time.Time, status, stype, offset, pageSize int) (orderSupplementFee []*model.OrderSupplementFee, totalCount int, err error) {
func GetOrdersSupplement(db *DaoDB, storIDs, vendorIDs []int, vendorOrderID string, fromTime, toTime time.Time, status, stype, IsReverse, offset, pageSize int) (orderSupplementFee []*model.OrderSupplementFee, totalCount int, err error) {
sql := `
SELECT SQL_CALC_FOUND_ROWS *
FROM order_supplement_fee
@@ -1075,7 +1075,7 @@ func GetOrdersSupplement(db *DaoDB, storIDs, vendorIDs []int, vendorOrderID stri
sqlParams = append(sqlParams, storIDs)
}
if len(vendorIDs) > 0 {
sql += " AND store_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sql += " AND vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
if vendorOrderID != "" {
@@ -1090,6 +1090,11 @@ func GetOrdersSupplement(db *DaoDB, storIDs, vendorIDs []int, vendorOrderID stri
sql += " AND type = ?"
sqlParams = append(sqlParams, stype)
}
if IsReverse == -1 {
sql += " AND link_id = 0"
} else if IsReverse == 1 {
sql += " AND link_id <> 0"
}
sql += `
LIMIT ? OFFSET ?`
sqlParams = append(sqlParams, pageSize, offset)

View File

@@ -1188,7 +1188,7 @@ func RefershStoreSkusMidPrice(db *DaoDB, storeIDs []int) (count int64, err error
UPDATE store_sku_bind a
JOIN store d ON d.id = a.store_id
JOIN price_refer_snapshot b ON a.sku_id = b.sku_id AND b.snapshot_at = ? AND d.city_code = b.city_code
SET a.price = (b.mid_price*IF(d.pay_percentage=0,100,d.pay_percentage))/100
SET a.unit_price = (b.mid_unit_price*IF(d.pay_percentage < 50,70,d.pay_percentage))/100
WHERE 1=1
`
sqlParams := []interface{}{
@@ -1199,7 +1199,7 @@ func RefershStoreSkusMidPrice(db *DaoDB, storeIDs []int) (count int64, err error
sqlParams = append(sqlParams, storeIDs)
}
sql += `
AND (a.price/IF(d.pay_percentage=0,100,d.pay_percentage))*100 > b.mid_price
AND (a.price/IF(d.pay_percentage < 50,70,d.pay_percentage))*100 > b.mid_price
AND a.deleted_at = ?
AND a.status = ?
`
@@ -1370,6 +1370,7 @@ func GetStoreSkuBindByNameID(db *DaoDB, storeID, nameID, status int) (storeSkuBi
func GetPriceReferUnitPrice(db *DaoDB, cityCode int, nameID int, snapDate time.Time) (result *PriceReferSnapshotExt, err error) {
var (
pRefer []*PriceReferSnapshotExt
priceRefer = &PriceReferSnapshotExt{}
minUnitPrice int
maxUnitPrice int
midUnitPrice int
@@ -1426,10 +1427,35 @@ func GetPriceReferUnitPrice(db *DaoDB, cityCode int, nameID int, snapDate time.T
midUnitPrice += midPrice
avgUnitPrice += avgPrice
}
result.MinUnitPrice = minUnitPrice / len(pRefer)
result.MaxUnitPrice = maxUnitPrice / len(pRefer)
result.AvgUnitPrice = avgUnitPrice / len(pRefer)
result.MidUnitPrice = midUnitPrice / len(pRefer)
priceRefer.MinUnitPrice = minUnitPrice / len(pRefer)
priceRefer.MaxUnitPrice = maxUnitPrice / len(pRefer)
priceRefer.AvgUnitPrice = avgUnitPrice / len(pRefer)
priceRefer.MidUnitPrice = midUnitPrice / len(pRefer)
}
return result, err
return priceRefer, err
}
func GetStoreSkusAndSkuName(db *DaoDB, storeIDs, skuIDs []int) (storeSkuNameExt []*StoreSkuNameExt, err error) {
sql := `
SELECT a.*,c.id
FROM store_sku_bind a
JOIN sku b ON b.id = a.sku_id AND b.deleted_at = ?
JOIN sku_name c ON c.id = b.name_id AND c.deleted_at = ?
WHERE a.deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
}
if len(storeIDs) > 0 {
sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 {
sql += " AND a.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
err = GetRows(db, &storeSkuNameExt, sql, sqlParams...)
return storeSkuNameExt, err
}

35
business/model/event.go Normal file
View File

@@ -0,0 +1,35 @@
package model
import "time"
type OperateEvent struct {
ID int64 `orm:"column(id)" json:"id"`
CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"`
LastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员
AccessUUID string `orm:"column(access_uuid)" json:"accessUUID"`
UserID string `orm:"column(user_id)" json:"userID"`
APIFunction string `orm:"column(api_function)" json:"apiFunction"`
}
func (v *OperateEvent) TableIndex() [][]string {
return [][]string{
[]string{"AccessUUID", "UserID"},
}
}
type OperateEventDetail struct {
ID int64 `orm:"column(id)" json:"id"`
OperateType int `json:"operateType"` // 1为修改2为新增4为删除
ThingID int `orm:"column(thing_id)" json:"thingID"`
ThingType int `json:"thingType"` //各字段类型
StoreID int `orm:"column(store_id)" json:"storeID"`
AccessUUID string `orm:"column(access_uuid)" json:"accessUUID"`
BeforeData string `orm:"size(32)" json:"beforeData"`
AfterData string `orm:"size(32)" json:"afterData"`
}
func (v *OperateEventDetail) TableIndex() [][]string {
return [][]string{
[]string{"AccessUUID", "ThingID", "StoreID"},
}
}

View File

@@ -936,6 +936,7 @@ func (c *OrderController) ComplaintRider() {
// @Param toTime query string false "结束日期包含格式2006-01-02如果订单号为空此项必须要求"
// @Param status query int false "账单状态0是未结账1是已结账"
// @Param type query int false "扣款类型1为差评补贴2为优惠券"
// @Param isReverse query int false "只查冲账记录0为默认都查1为只查冲账-1为不查冲账"
// @Param offset query int false "结果起始序号以0开始缺省为0"
// @Param pageSize query int false "结果页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult
@@ -945,7 +946,7 @@ func (c *OrderController) GetOrdersSupplement() {
var vendorIDList, storeIDList []int
c.callGetOrdersSupplement(func(params *tOrderGetOrdersSupplementParams) (retVal interface{}, errCode string, err error) {
if err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDList, params.StoreIDs, &storeIDList); err == nil {
retVal, err = orderman.GetOrdersSupplement(params.Ctx, storeIDList, vendorIDList, params.VendorOrderID, params.FromTime, params.ToTime, params.Status, params.Type, params.Offset, params.PageSize)
retVal, err = orderman.GetOrdersSupplement(params.Ctx, storeIDList, vendorIDList, params.VendorOrderID, params.FromTime, params.ToTime, params.Status, params.Type, params.IsReverse, params.Offset, params.PageSize)
}
return retVal, "", err
})

View File

@@ -1,6 +1,7 @@
package controllers
import (
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/report"
"git.rosy.net.cn/jx-callback/business/jxutils"
"github.com/astaxie/beego"
@@ -82,3 +83,29 @@ func (c *ReportController) PriceRefer() {
return retVal, "", err
})
}
// @Title 生成价格参考数据单价
// @Description 生成价格参考数据单价
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /PriceReferUnitPrice [post]
func (c *ReportController) PriceReferUnitPrice() {
// c.callPriceReferUnitPrice(func(params *tReportPriceReferUnitPriceParams) (retVal interface{}, errCode string, err error) {
// report.UpdatePriceReferUnitPrice(params.Ctx)
// return retVal, "", err
// })
}
// @Title 自动关注商品(针对后加的商品规格未关注)
// @Description 自动关注商品(针对后加的商品规格未关注)
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /AutoFocusStoreSkus [post]
func (c *ReportController) AutoFocusStoreSkus() {
c.callAutoFocusStoreSkus(func(params *tReportAutoFocusStoreSkusParams) (retVal interface{}, errCode string, err error) {
cms.AutoFocusStoreSkusWithoutFocus(params.Ctx, nil, false)
return retVal, "", err
})
}

View File

@@ -42,6 +42,8 @@ func Init() {
orm.RegisterModel(&model.StorePriceScoreSnapshot{})
orm.RegisterModel(&model.StoreSkuNamePrice{})
orm.RegisterModel(&model.OrderSupplementFee{})
orm.RegisterModel(&model.OperateEvent{})
orm.RegisterModel(&model.OperateEventDetail{})
// orm.RegisterModel(&model.ActivityForSku{})
// orm.RegisterModel(&legacymodel.JxBadComments2{})

View File

@@ -1098,6 +1098,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
beego.ControllerComments{
Method: "AutoFocusStoreSkus",
Router: `/AutoFocusStoreSkus`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
beego.ControllerComments{
Method: "PriceRefer",
@@ -1107,6 +1116,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
beego.ControllerComments{
Method: "PriceReferUnitPrice",
Router: `/PriceReferUnitPrice`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ReportController"],
beego.ControllerComments{
Method: "StatisticsReportForAfsOrders",