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

This commit is contained in:
Rosy-zhudan
2019-07-30 15:37:30 +08:00
14 changed files with 142 additions and 35 deletions

View File

@@ -246,7 +246,7 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD
return nil, err
}
func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) {
func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, fromDateStr, toDateStr string, isDateFinish bool, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) {
globals.SugarLogger.Debugf("getOrders from:%s to:%s", fromDateStr, toDateStr)
pageSize = jxutils.FormalizePageSize(pageSize)
@@ -310,10 +310,13 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, from
return nil, 0, err
}
toDate = toDate.Add(24 * time.Hour)
sqlWhere = `
WHERE t1.order_created_at >= ? AND t1.order_created_at < ?
`
if isDateFinish {
sqlWhere = `
WHERE t1.order_finished_at >= ? AND t1.order_finished_at < ?`
} else {
sqlWhere = `
WHERE t1.order_created_at >= ? AND t1.order_created_at < ?`
}
sqlParams = []interface{}{
fromDate,
toDate,
@@ -423,9 +426,9 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku bool, from
return orders, totalCount, err
}
func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
func (c *OrderManager) GetOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, isDateFinish bool, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
globals.SugarLogger.Debugf("GetOrders from:%s to:%s", fromDateStr, toDateStr)
orders, totalCount, err := c.getOrders(ctx, false, fromDateStr, toDateStr, params, offset, pageSize)
orders, totalCount, err := c.getOrders(ctx, false, fromDateStr, toDateStr, isDateFinish, params, offset, pageSize)
if err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: totalCount,
@@ -447,7 +450,7 @@ func (c *OrderManager) ExportOrders(ctx *jxcontext.Context, fromDateStr, toDateS
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0:
orders, _, err = c.getOrders(ctx, true, fromDateStr, toDateStr, mapParams, 0, -1)
orders, _, err = c.getOrders(ctx, true, fromDateStr, toDateStr, true, mapParams, 0, -1)
case 1:
afsSkuMap, err = c.getAfsOrderSkuInfo4ExportOrders(ctx, fromDateStr, toDateStr)
case 2:

View File

@@ -239,8 +239,9 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa
}
if keyword != "" {
keywordLike := "%" + keyword + "%"
sqlWhere += " AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.last_operator LIKE ? OR city.name LIKE ? OR t1.address LIKE ? OR t1.printer_sn LIKE ?"
sqlWhereParams = append(sqlWhereParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
sqlWhere += ` AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.operator_phone LIKE ? OR t1.market_man_phone LIKE ?
OR t1.last_operator LIKE ? OR city.name LIKE ? OR t1.address LIKE ? OR t1.printer_sn LIKE ?`
sqlWhereParams = append(sqlWhereParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
if keywordInt64, err2 := strconv.ParseInt(keyword, 10, 64); err2 == nil {
if jxutils.IsLegalMobileNumber(keywordInt64) {
@@ -1391,10 +1392,12 @@ func updateVendorStoreStatusBySnapshot(db *dao.DaoDB, curSnapshotList []*model.V
}
}()
for _, v := range storeMapList {
if snapshot := snapshotMap[jxutils.Combine2Int(v.StoreID, v.VendorID)]; snapshot != nil && v.Status != snapshot.Status {
if snapshot := snapshotMap[jxutils.Combine2Int(v.StoreID, v.VendorID)]; snapshot != nil &&
(v.Status != snapshot.Status || v.DeliveryType != snapshot.DeliveryType) {
v.Status = snapshot.Status
v.DeliveryType = snapshot.DeliveryType
if _, err = dao.UpdateEntity(db, v, model.FieldStatus, "DeliveryType"); err != nil {
v.LastOperator = model.AdminName
if _, err = dao.UpdateEntity(db, v, model.FieldLastOperator, model.FieldUpdatedAt, model.FieldStatus, "DeliveryType"); err != nil {
return err
}
}
@@ -1649,6 +1652,7 @@ func sendStoreStatusInfo2Mobile(mobile, title, txtAlarm string) {
func SaveAndSendAlarmVendorSnapshot(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isAsync bool) (err error) {
curSnapshotAt := getCurrentSnapshotAt(time.Now())
prevSnapshotAt := getCurrentSnapshotAt(curSnapshotAt.Add(-1 * time.Second))
db := dao.GetDB()
var curSnapshotList, prevSnapshotList []*model.VendorStoreSnapshot
task := tasksch.NewSeqTask("SaveAndSendAlarmVendorSnapshot", ctx,
@@ -1664,7 +1668,7 @@ func SaveAndSendAlarmVendorSnapshot(ctx *jxcontext.Context, vendorIDs, storeIDs
case 1:
err = SaveStoresVendorSnapshot(db, curSnapshotAt, curSnapshotList)
case 2:
prevSnapshotList, err = dao.GetVendorStoreSnapshot(db, curSnapshotAt)
prevSnapshotList, err = dao.GetVendorStoreSnapshot(db, prevSnapshotAt)
case 3:
err = SendAlarmVendorSnapshot(ctx, task, prevSnapshotList, curSnapshotList)
}

View File

@@ -1280,7 +1280,7 @@ func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuBindInfo *StoreSkuBindI
}
// todo 应该用updateStoresSkusWithoutSync实现
func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBindSkuInfos []*StoreSkuBindSkuInfo, userName string) (needSyncSkus []int, err error) {
func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBindSkuInfos []*StoreSkuBindSkuInfo, autoSaleTime time.Time, userName string) (needSyncSkus []int, err error) {
var num int64
db := dao.GetDB()
needSyncIDMap := make(map[int]int)
@@ -1310,14 +1310,19 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind
} else {
skuBind.Status = model.StoreSkuBindStatusDontSale
}
if num, err = dao.UpdateEntityLogically(db, skuBind, map[string]interface{}{
kvs := map[string]interface{}{
model.FieldStatus: skuBind.Status,
model.FieldJdSyncStatus: skuBind.JdSyncStatus | model.SyncFlagSaleMask,
model.FieldEbaiSyncStatus: skuBind.EbaiSyncStatus | model.SyncFlagSaleMask,
model.FieldMtwmSyncStatus: skuBind.MtwmSyncStatus | model.SyncFlagSaleMask,
model.FieldElmSyncStatus: skuBind.ElmSyncStatus | model.SyncFlagSaleMask,
model.FieldWscSyncStatus: skuBind.WscSyncStatus | model.SyncFlagSaleMask,
}, userName, nil); err != nil {
}
// if utils.IsTimeZero(autoSaleTime) || skuBind.Status == model.SkuStatusNormal {
// autoSaleTime = utils.DefaultTimeValue
// }
// kvs["AutoSaleAt"] = autoSaleTime
if num, err = dao.UpdateEntityLogically(db, skuBind, kvs, userName, nil); err != nil {
dao.Rollback(db)
return nil, err
}
@@ -1342,13 +1347,13 @@ func uniqueStoreSkuBind(skuBindSkuInfos []*StoreSkuBindSkuInfo) (outSkuBindSkuIn
return outSkuBindSkuInfos
}
func UpdateStoresSkusSale(ctx *jxcontext.Context, storeIDs []int, skuBindSkuInfos []*StoreSkuBindSkuInfo, userName string, isAsync, isContinueWhenError bool) (hint string, err error) {
func UpdateStoresSkusSale(ctx *jxcontext.Context, storeIDs []int, skuBindSkuInfos []*StoreSkuBindSkuInfo, autoSaleTime time.Time, userName string, isAsync, isContinueWhenError bool) (hint string, err error) {
storeIDs = uniqueStoreIDs(storeIDs)
skuBindSkuInfos = uniqueStoreSkuBind(skuBindSkuInfos)
var num int64
for _, storeID := range storeIDs {
skuIDs, err2 := updateStoreSkusSaleWithoutSync(ctx, storeID, skuBindSkuInfos, userName)
skuIDs, err2 := updateStoreSkusSaleWithoutSync(ctx, storeID, skuBindSkuInfos, autoSaleTime, userName)
if err = err2; err != nil {
return "", err
}
@@ -2171,3 +2176,37 @@ func GetMissingStoreSkuFromOrder(ctx *jxcontext.Context, fromTime time.Time) (mi
}
return missingList, err
}
func AutoSaleStoreSku(ctx *jxcontext.Context, storeIDs []int) (err error) {
// db := dao.GetDB()
// storeSkuList, err := dao.GetAutoSaleStoreSku(db, storeIDs)
// if err != nil {
// return err
// }
// storeSkuMap := make(map[int][]*model.StoreSkuBind)
// for _, v := range storeSkuList {
// storeSkuMap[v.StoreID] = append(storeSkuMap[v.StoreID], v)
// }
// now := time.Now()
// for storeID, storeSkuList := range storeSkuMap {
// var skuIDs []int
// for _, storeSku := range storeSkuList {
// if now.Sub(storeSku.AutoSaleAt) > 0 {
// storeSku.AutoSaleAt = utils.DefaultTimeValue
// if storeSku.Status != model.SkuStatusNormal {
// storeSku.Status = model.SkuStatusNormal
// skuIDs = append(skuIDs, storeSku.SkuID)
// }
// if _, err = dao.UpdateEntity(db, storeSku, "AutoSaleAt", model.FieldStatus); err != nil {
// return err
// }
// }
// }
// if len(skuIDs) > 0 {
// if _, err = CurVendorSync.SyncStoresSkus(ctx, db, nil, []int{storeID}, skuIDs, false, true, true); err != nil {
// return err
// }
// }
// }
return err
}

View File

@@ -27,3 +27,9 @@ func TestSendAlarmVendorSnapshot(t *testing.T) {
t.Fatal(err)
}
}
func TestUpdateVendorStoreStatusBySnapshot(t *testing.T) {
db := dao.GetDB()
curSnapshotList, _ := dao.GetVendorStoreSnapshot(db, utils.Str2Time("2019-07-30 08:00:00"))
updateVendorStoreStatusBySnapshot(db, curSnapshotList)
}

View File

@@ -44,6 +44,12 @@ var (
updateActStatusTimeList = []string{
"00:01:00",
}
autoEnableStoreSkuTimeList = []string{
"7:00:00",
"14:00:00",
"22:00:00",
}
)
func Init() {
@@ -70,6 +76,10 @@ func Init() {
ScheduleTimerFunc(func() {
dao.UpdateActStatusByTime(dao.GetDB(), time.Now().Add(-48*time.Hour))
}, updateActStatusTimeList)
// ScheduleTimerFunc(func() {
// cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil)
// }, autoEnableStoreSkuTimeList)
}
}

View File

@@ -285,17 +285,12 @@ func FormalizeStoreStatus(db *DaoDB, storeID, storeStatus int) (err error) {
return err
}
func GetVendorStoreSnapshot(db *DaoDB, excludeSnapshotAt time.Time) (snapshotList []*model.VendorStoreSnapshot, err error) {
func GetVendorStoreSnapshot(db *DaoDB, snapshotAt time.Time) (snapshotList []*model.VendorStoreSnapshot, err error) {
sql := `
SELECT *
FROM vendor_store_snapshot t1
WHERE t1.snapshot_at = (
SELECT MAX(snapshot_at) snapshot_at
FROM vendor_store_snapshot
WHERE snapshot_at > ? AND snapshot_at <> ?
)
`
err = GetRows(db, &snapshotList, sql, time.Now().Add(-48*time.Hour), excludeSnapshotAt)
WHERE t1.snapshot_at = ?`
err = GetRows(db, &snapshotList, sql, snapshotAt)
return snapshotList, err
}

View File

@@ -480,3 +480,20 @@ func GetMissingStoreSkuFromOrder(db *DaoDB, storeIDs []int, fromTime time.Time)
err = GetRows(db, &storeSkuList, sql, sqlParams...)
return storeSkuList, err
}
func GetAutoSaleStoreSku(db *DaoDB, storeIDs []int) (storeSkuList []*model.StoreSkuBind, err error) {
sql := `
SELECT *
FROM store_sku_bind t1
WHERE t1.deleted_at = ? AND t1.auto_sale_at <> ?`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
}
if len(storeIDs) > 0 {
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
err = GetRows(db, &storeSkuList, sql, sqlParams...)
return storeSkuList, err
}

View File

@@ -103,6 +103,8 @@ type StoreSkuBind struct {
EbaiSyncStatus int8 `orm:"default(2)"`
MtwmSyncStatus int8 `orm:"default(2)"`
WscSyncStatus int8 `orm:"default(2)"`
// AutoSaleAt time.Time `orm:"type(datetime);null" json:"autoSaleAt"`
}
func (*StoreSkuBind) TableUnique() [][]string {

View File

@@ -48,3 +48,8 @@ type IPurchasePlatformOrderHandler interface {
// // 确认收到退货
ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error)
}
type IUpdateWaybillTip interface {
// 添加快递小费这个不是递增的最后一次操作会覆盖之前的设置但只能增加不能减少且tipFee只能为100的倍数
UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error)
}

View File

@@ -342,7 +342,7 @@ func getActFromJD(promotionID string) (act *model.Act2, actStoreSkuList []*model
act.BeginAt = result.BeginTime.GoTime()
}
if utils.IsTimeZero(act.EndAt) {
act.BeginAt = result.EndTime.GoTime()
act.EndAt = result.EndTime.GoTime().Add(24*time.Hour - 1*time.Second)
}
if result.SkuResultList[0].LimitPin == 1 || result.SkuResultList[0].LimitDevice == 1 {
act.LimitUser = 1

View File

@@ -425,15 +425,15 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
}
fromDate := utils.Time2Date(queryDate)
toDate := fromDate.Add(24*time.Hour - 1)
params := map[string]interface{}{
"orderPurchaseTime_begin": utils.Time2Str(fromDate),
"orderPurchaseTime_end": utils.Time2Str(toDate),
jdapi.KeyPageNo: jdapi.AllPage,
queryParam := &jdapi.OrderQueryParam{
OrderPurchaseTimeBegin: utils.Time2Str(fromDate),
OrderPurchaseTimeEnd: utils.Time2Str(toDate),
PageNo: jdapi.AllPage,
}
if vendorStoreID != "" {
params["deliveryStationNo"] = vendorStoreID
queryParam.DeliveryStationNo = vendorStoreID
}
orderList, _, err := api.JdAPI.OrderQuery2(params)
orderList, _, err := api.JdAPI.OrderQuery2(queryParam)
if err == nil {
vendorOrderIDs = make([]string, len(orderList))
for k, v := range orderList {
@@ -442,3 +442,16 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
}
return vendorOrderIDs, err
}
func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error) {
orderInfo, err := api.JdAPI.QuerySingleOrder2(order.VendorOrderID)
if err == nil {
tip2Add := int(tipFee) - orderInfo.Tips
if tip2Add > 0 {
if globals.EnableJdStoreWrite {
err = api.JdAPI.OrderAddTips(order.VendorOrderID, tip2Add, ctx.GetUserName())
}
}
}
return err
}

View File

@@ -575,3 +575,10 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
}
return vendorOrderIDs, err
}
func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, order *model.GoodsOrder, tipFee int64) (err error) {
if globals.EnableMtwmStoreWrite {
err = api.MtwmAPI.OrderUpdateTip(utils.Str2Int64(order.VendorOrderID), jxutils.IntPrice2Standard(tipFee))
}
return err
}

View File

@@ -265,6 +265,7 @@ func (c *StoreSkuController) CopyStoreSkus() {
// @Param storeIDs formData string true "门店ID列表"
// @Param payload formData string true "json数据StoreSkuBindSkuInfo对象数组"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Param autoSaleAt formData string false "自动可售时间"
// @Param isAsync formData bool false "是否异步操作"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
@@ -276,7 +277,11 @@ func (c *StoreSkuController) UpdateStoresSkusSale() {
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.Payload, &skuBindSkuInfos); err != nil {
return retVal, "", err
}
retVal, err = cms.UpdateStoresSkusSale(params.Ctx, storeIDs, skuBindSkuInfos, params.Ctx.GetUserName(), params.IsAsync, params.IsContinueWhenError)
timeList, err := jxutils.BatchStr2Time(params.AutoSaleAt)
if err != nil {
return retVal, "", err
}
retVal, err = cms.UpdateStoresSkusSale(params.Ctx, storeIDs, skuBindSkuInfos, timeList[0], params.Ctx.GetUserName(), params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}

View File

@@ -266,6 +266,7 @@ func (c *OrderController) ExportMTWaybills() {
// @Param keyword query string false "查询关键字"
// @Param fromDate query string false "开始日期包含格式2006-01-02如果订单号为空此项必须要求"
// @Param toDate query string false "结束日期包含格式2006-01-02如果订单号为空此项必须要求"
// @Param isDateFinish query bool false "是否fromDate与toDate指的是订单结束日期缺省不是"
// @Param vendorIDs query string false "订单所属厂商列表[1,2,3],缺省不限制"
// @Param waybillVendorIDs query string false "承运人所属厂商列表[1,2,3],缺省不限制"
// @Param storeIDs query string false "京西门店ID列表[1,2,3],缺省不限制"
@@ -279,7 +280,7 @@ func (c *OrderController) ExportMTWaybills() {
// @router /GetOrders [get]
func (c *OrderController) GetOrders() {
c.callGetOrders(func(params *tOrderGetOrdersParams) (retVal interface{}, errCode string, err error) {
retVal, err = orderman.FixedOrderManager.GetOrders(params.Ctx, params.FromDate, params.ToDate, params.MapData, params.Offset, params.PageSize)
retVal, err = orderman.FixedOrderManager.GetOrders(params.Ctx, params.FromDate, params.ToDate, params.IsDateFinish, params.MapData, params.Offset, params.PageSize)
return retVal, "", err
})
}