Merge branch 'su'
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -14,3 +14,4 @@ param_parser.go
|
|||||||
*.o
|
*.o
|
||||||
*.exe
|
*.exe
|
||||||
*.exe~
|
*.exe~
|
||||||
|
.vscode
|
||||||
|
|||||||
104
business/cs/weimob_order.go
Normal file
104
business/cs/weimob_order.go
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
package cs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/authz/autils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
minCSOrderPayment = 0 // 供货订单的最小金额(单位为元)
|
||||||
|
maxUnitPrice = 3000 // 为防止误填单价,限制单价最高(单位为分)
|
||||||
|
)
|
||||||
|
|
||||||
|
func OnCallbackMsg(msg *weimobapi.CallbackMsg) (response *weimobapi.CallbackResponse) {
|
||||||
|
orderID := utils.Int64ToStr(msg.OrderNo)
|
||||||
|
jxutils.CallMsgHandler(func() {
|
||||||
|
response = onOrderMsg(msg)
|
||||||
|
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDWSC))
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
|
func onOrderMsg(msg *weimobapi.CallbackMsg) (response *weimobapi.CallbackResponse) {
|
||||||
|
globals.SugarLogger.Debugf("onOrderMsg:%s", utils.Format4Output(msg, true))
|
||||||
|
if msg.Event == weimobapi.MsgEventOrderStatusChange {
|
||||||
|
if utils.ForceInterface2Int64(msg.MsgBody["orderStatus"]) == weimobapi.MsgOrderStatusFinished {
|
||||||
|
if orderDetail, err := api.WeimobAPI.QueryOrderDetail2(msg.OrderNo, false); err == nil {
|
||||||
|
if orderDetail.OrderStatus == weimobapi.OrderStatusFinished && orderDetail.PaymentAmount >= minCSOrderPayment {
|
||||||
|
changeStoreSkusByOrder(orderDetail)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Debugf("onOrderMsg order:%s failed with err:%v", msg.OrderNo, err)
|
||||||
|
response = weimobapi.Err2CallbackResponse(err, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
|
func changeStoreSkusByOrder(order *weimobapi.OrderDetail) {
|
||||||
|
globals.SugarLogger.Debugf("changeStoreSkusByOrder order:%s", utils.Format4Output(order, true))
|
||||||
|
receiverMobile := order.DeliveryDetail.LogisticsDeliveryDetail.ReceiverMobile
|
||||||
|
if storeList, err := GetStoreList4Mobile(dao.GetDB(), []string{receiverMobile}); err == nil {
|
||||||
|
if len(storeList) >= 1 {
|
||||||
|
var skuBindInfos []*cms.StoreSkuBindInfo
|
||||||
|
storeID := storeList[0].ID
|
||||||
|
globals.SugarLogger.Debugf("changeStoreSkusByOrder storeID:%d", storeID)
|
||||||
|
for _, v := range order.ItemList {
|
||||||
|
nameID := int(utils.Str2Int64WithDefault(v.SkuCode, 0))
|
||||||
|
unitPrice := v.OriginalPrice
|
||||||
|
if nameID > 0 && (unitPrice > 0 && unitPrice < maxUnitPrice) {
|
||||||
|
skuBindInfos = append(skuBindInfos, &cms.StoreSkuBindInfo{
|
||||||
|
StoreID: storeID,
|
||||||
|
NameID: nameID,
|
||||||
|
UnitPrice: int(jxutils.StandardPrice2Int(unitPrice)),
|
||||||
|
IsFocus: 1,
|
||||||
|
IsSale: 1,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Infof("[运营],微商城订单:%s,商品:%s没有设置正确的SkuName编码或单价,当前商家编码:%s,市场价:%s", order.OrderNo, v.SkuNum, v.SkuCode, jxutils.IntPrice2StandardString(jxutils.StandardPrice2Int(unitPrice)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(skuBindInfos) > 0 {
|
||||||
|
cms.UpdateStoreSkus(jxcontext.NewWithUserName(nil, utils.LimitStringLen(utils.Int64ToStr(order.OrderNo), 32), nil, nil), storeID, skuBindInfos, true, true)
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Debugf("changeStoreSkusByOrder storeID:%d is empty", storeID)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Infof("[运营],微商城订单:%s,手机:%s找不到唯一一个京西门店%d", order.OrderNo, receiverMobile, len(storeList))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Warnf("changeStoreSkusByOrder receiverMobile:%s failed with err:%v", receiverMobile, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreList4Mobile(db *dao.DaoDB, mobileList []string) (storeList []*model.Store, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.*
|
||||||
|
FROM store t1
|
||||||
|
WHERE t1.deleted_at = ?`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if len(mobileList) > 0 {
|
||||||
|
questionMarks := dao.GenQuestionMarks(len(mobileList))
|
||||||
|
sql += " AND (t1.tel1 IN (" + questionMarks + ") OR t1.tel2 IN (" + questionMarks + `)
|
||||||
|
OR (SELECT
|
||||||
|
COUNT(*)
|
||||||
|
FROM casbin_rule t2
|
||||||
|
JOIN user t3 ON t3.user_id = t2.v0 AND t3.mobile IN (` + questionMarks + `)
|
||||||
|
WHERE t2.v1 = CONCAT(?, t1.id)
|
||||||
|
) > 0)
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, mobileList, mobileList, mobileList, autils.NewStoreBossRole(-1).GetFullName())
|
||||||
|
}
|
||||||
|
err = dao.GetRows(db, &storeList, sql, sqlParams...)
|
||||||
|
return storeList, err
|
||||||
|
}
|
||||||
24
business/cs/weimob_order_test.go
Normal file
24
business/cs/weimob_order_test.go
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package cs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api2"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/testinit"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
testinit.Init()
|
||||||
|
api2.Init()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetStoreList4Mobile(t *testing.T) {
|
||||||
|
storeList, err := GetStoreList4Mobile(dao.GetDB(), []string{"18180948107"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(storeList, false))
|
||||||
|
t.Log(len(storeList))
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"github.com/astaxie/beego/orm"
|
"github.com/astaxie/beego/orm"
|
||||||
)
|
)
|
||||||
@@ -151,6 +152,17 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderManager) OnOrderStatusChanged(orderStatus *model.OrderStatus) (err error) {
|
func (c *OrderManager) OnOrderStatusChanged(orderStatus *model.OrderStatus) (err error) {
|
||||||
|
// 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下
|
||||||
|
if orderStatus.Status == model.OrderStatusAccepted {
|
||||||
|
if _, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder {
|
||||||
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil {
|
||||||
|
if order, err2 := handler.GetOrder(orderStatus.VendorOrderID); err2 == nil {
|
||||||
|
c.OnOrderNew(order, orderStatus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -385,37 +397,19 @@ func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.Dao
|
|||||||
globals.SugarLogger.Debugf("updateOrderOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID)
|
globals.SugarLogger.Debugf("updateOrderOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID)
|
||||||
|
|
||||||
payPercentage := 0
|
payPercentage := 0
|
||||||
if order.VendorID != model.VendorIDJX {
|
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, order.VendorID)
|
||||||
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, order.VendorID)
|
if err != nil {
|
||||||
if err != nil {
|
if !dao.IsNoRowsError(err) {
|
||||||
if !dao.IsNoRowsError(err) {
|
globals.SugarLogger.Warnf("updateOrderOtherInfo GetStoreDetailByVendorStoreID orderID:%s, VendorStoreID:%s, error:%v", order.VendorOrderID, order.VendorStoreID, err)
|
||||||
globals.SugarLogger.Warnf("updateOrderOtherInfo GetStoreDetailByVendorStoreID orderID:%s, VendorStoreID:%s, error:%v", order.VendorOrderID, order.VendorStoreID, err)
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
if time.Now().Sub(order.OrderCreatedAt) < 1*time.Hour {
|
|
||||||
globals.SugarLogger.Infof("updateOrderOtherInfo [运营]订单在京西与平台都找不到京西门店信息,订单:%s,平台门店ID:%s,平台:%s", order.VendorOrderID, order.VendorStoreID, model.VendorChineseNames[order.VendorID])
|
|
||||||
}
|
|
||||||
err = nil
|
|
||||||
} else {
|
|
||||||
order.JxStoreID = storeDetail.Store.ID
|
|
||||||
payPercentage = storeDetail.PayPercentage
|
|
||||||
}
|
}
|
||||||
|
if time.Now().Sub(order.OrderCreatedAt) < 1*time.Hour {
|
||||||
|
globals.SugarLogger.Infof("updateOrderOtherInfo [运营]订单在京西与平台都找不到京西门店信息,订单:%s,平台门店ID:%s,平台:%s", order.VendorOrderID, order.VendorStoreID, model.VendorChineseNames[order.VendorID])
|
||||||
|
}
|
||||||
|
err = nil
|
||||||
} else {
|
} else {
|
||||||
store := &model.Store{}
|
order.JxStoreID = storeDetail.Store.ID
|
||||||
store.ID = order.StoreID
|
payPercentage = storeDetail.PayPercentage
|
||||||
if err = dao.GetEntity(dao.GetDB(), store); err != nil {
|
|
||||||
if !dao.IsNoRowsError(err) {
|
|
||||||
globals.SugarLogger.Warnf("updateOrderOtherInfo GetEntity orderID:%s, VendorStoreID:%s, error:%v", order.VendorOrderID, order.VendorStoreID, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if time.Now().Sub(order.OrderCreatedAt) < 1*time.Hour {
|
|
||||||
globals.SugarLogger.Infof("updateOrderOtherInfo b, [运营]订单在京西与平台都找不到京西门店信息,订单:%s,平台门店ID:%s,平台:%s", order.VendorOrderID, order.VendorStoreID, model.VendorChineseNames[order.VendorID])
|
|
||||||
}
|
|
||||||
err = nil
|
|
||||||
} else {
|
|
||||||
payPercentage = store.PayPercentage
|
|
||||||
}
|
|
||||||
order.JxStoreID = order.StoreID
|
|
||||||
}
|
}
|
||||||
if err = c.updateOrderSkuOtherInfo(order, db, payPercentage); err == nil {
|
if err = c.updateOrderSkuOtherInfo(order, db, payPercentage); err == nil {
|
||||||
jxutils.RefreshOrderSkuRelated(order)
|
jxutils.RefreshOrderSkuRelated(order)
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ func (c *OrderManager) GetOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID str
|
|||||||
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price,
|
||||||
t1.sale_price,
|
t1.sale_price,
|
||||||
t1.earning_price,
|
t1.earning_price,
|
||||||
CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) real_earning_price,
|
CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, ?) / 100) AS SIGNED) real_earning_price,
|
||||||
t1.weight,
|
t1.weight,
|
||||||
t1.sku_type,
|
t1.sku_type,
|
||||||
t1.promotion_type,
|
t1.promotion_type,
|
||||||
@@ -105,18 +105,17 @@ func (c *OrderManager) GetOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID str
|
|||||||
t1.store_sub_name,
|
t1.store_sub_name,
|
||||||
t1.vendor_price,
|
t1.vendor_price,
|
||||||
%s full_sku_name,
|
%s full_sku_name,
|
||||||
`, model.DefaultEarningPricePercentage, fullSkuNameSQL)
|
t2.name_id,
|
||||||
db := dao.GetDB()
|
t3.img image
|
||||||
err = dao.GetRows(db, &skus, sql+`
|
FROM order_sku t1
|
||||||
t3.img image
|
LEFT JOIN goods_order t6 ON t6.vendor_order_id = t1.vendor_order_id AND t6.vendor_id = t1.vendor_id
|
||||||
FROM order_sku t1
|
LEFT JOIN store t5 ON t5.id = IF(t6.jx_store_id <> 0, t6.jx_store_id, t6.store_id)
|
||||||
LEFT JOIN goods_order t6 ON t6.vendor_order_id = t1.vendor_order_id AND t6.vendor_id = t1.vendor_id
|
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
||||||
LEFT JOIN store t5 ON t5.id = IF(t6.jx_store_id <> 0, t6.jx_store_id, t6.store_id)
|
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
||||||
LEFT JOIN sku t2 ON IF(t1.jx_sku_id != 0, t1.jx_sku_id, t1.sku_id) = t2.id/* AND t2.deleted_at = ?*/
|
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
||||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id/* AND t3.deleted_at = ?*/
|
ORDER BY t1.sku_name
|
||||||
WHERE t1.vendor_order_id = ? AND t1.vendor_id = ?
|
`, fullSkuNameSQL)
|
||||||
ORDER BY t1.sku_name
|
err = dao.GetRows(dao.GetDB(), &skus, sql /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/, model.DefaultEarningPricePercentage, vendorOrderID, vendorID)
|
||||||
`, /*, utils.DefaultTimeValue, utils.DefaultTimeValue*/ vendorOrderID, vendorID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Infof("GetOrderSkuInfo orderID:%s vendorID:%d failed with error:%v", vendorOrderID, vendorID, err)
|
globals.SugarLogger.Infof("GetOrderSkuInfo orderID:%s vendorID:%d failed with error:%v", vendorOrderID, vendorID, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -123,12 +123,14 @@ type StoreSkuBindInfo struct {
|
|||||||
|
|
||||||
type tStoreSkuBindAndSpec struct {
|
type tStoreSkuBindAndSpec struct {
|
||||||
model.StoreSkuBind
|
model.StoreSkuBind
|
||||||
Name string
|
SkuStatus int
|
||||||
SpecQuality float32
|
SkuNameStatus int
|
||||||
SpecUnit string
|
Name string
|
||||||
SkuNamePrice int
|
SpecQuality float32
|
||||||
SkuNameUnit string
|
SpecUnit string
|
||||||
RealSkuID int `orm:"column(real_sku_id)"`
|
SkuNamePrice int
|
||||||
|
SkuNameUnit string
|
||||||
|
RealSkuID int `orm:"column(real_sku_id)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SkuSaleInfo struct {
|
type SkuSaleInfo struct {
|
||||||
@@ -924,12 +926,12 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
sql := `
|
sql := `
|
||||||
SELECT
|
SELECT
|
||||||
t2.*,
|
t2.*,
|
||||||
t1.id real_sku_id, t1.spec_quality, t1.spec_unit,`
|
t1.id real_sku_id, t1.status sku_status, t1.spec_quality, t1.spec_unit,`
|
||||||
if needGetExistingUnitPrice {
|
if needGetExistingUnitPrice {
|
||||||
sql += " IF(t5.unit_price > 0, t5.unit_price, t3.price) sku_name_price,"
|
sql += " IF(t5.unit_price > 0, t5.unit_price, t3.price) sku_name_price,"
|
||||||
}
|
}
|
||||||
sql += `
|
sql += `
|
||||||
t3.unit sku_name_unit, t3.name
|
t3.unit sku_name_unit, t3.name, t3.status sku_name_status
|
||||||
FROM sku t1
|
FROM sku t1
|
||||||
JOIN store ts ON ts.id = ? AND ts.deleted_at = ?
|
JOIN store ts ON ts.id = ? AND ts.deleted_at = ?
|
||||||
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND t2.store_id = ts.id AND t2.deleted_at = ?
|
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND t2.store_id = ts.id AND t2.deleted_at = ?
|
||||||
@@ -982,7 +984,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
|||||||
// globals.SugarLogger.Debug(utils.Format4Output(inSkuBind, false))
|
// globals.SugarLogger.Debug(utils.Format4Output(inSkuBind, false))
|
||||||
var skuBind *model.StoreSkuBind
|
var skuBind *model.StoreSkuBind
|
||||||
if v.ID == 0 {
|
if v.ID == 0 {
|
||||||
if skuBindInfo.IsFocus == 1 {
|
if skuBindInfo.IsFocus == 1 && v.SkuNameStatus == model.SkuStatusNormal && v.SkuStatus == model.SkuStatusNormal {
|
||||||
skuBind = &model.StoreSkuBind{
|
skuBind = &model.StoreSkuBind{
|
||||||
StoreID: storeID,
|
StoreID: storeID,
|
||||||
SkuID: v.RealSkuID,
|
SkuID: v.RealSkuID,
|
||||||
|
|||||||
@@ -298,14 +298,22 @@ func CompareJxAndVendor(vendorID int, storeIDStr, vendorStoreID, storeName strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for skuID, vendorSkuInfo := range filterVendorSkuInfoMap {
|
for skuID, vendorSkuInfo := range filterVendorSkuInfoMap {
|
||||||
skuIDStr := utils.Int2Str(skuID)
|
if vendorSkuInfo != nil {
|
||||||
vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName
|
if len(vendorSkuInfo.SkuList) > 0 {
|
||||||
vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status)
|
skuIDStr := utils.Int2Str(skuID)
|
||||||
|
vendorSkuDetailName := vendorSkuInfo.SkuList[0].SkuName
|
||||||
|
vendorSkuSaleStatusName := GetSkuSaleStatusName(vendorSkuInfo.SkuList[0].Status)
|
||||||
|
|
||||||
jxSkuInfo := filterJxSkuInfoMap[skuID]
|
jxSkuInfo := filterJxSkuInfoMap[skuID]
|
||||||
if jxSkuInfo == nil {
|
if jxSkuInfo == nil {
|
||||||
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", "", "", "", vendorSkuDetailName, "", vendorSkuSaleStatusName, DatAanalyse1}
|
outPutData := DiffData{storeIDStr, vendorStoreID, storeName, skuIDStr, "", "", "", "", vendorSkuDetailName, "", vendorSkuSaleStatusName, DatAanalyse1}
|
||||||
diffData.AppendData(vendorID, outPutData)
|
diffData.AppendData(vendorID, outPutData)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Warnf("CompareJxAndVendor vendorSkuInfo.SkuList:%d is nil", skuID)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Warnf("CompareJxAndVendor skuID:%d is nil", skuID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
|
|||||||
|
|
||||||
func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||||
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameIDs:%v, skuIDs:%v, userName:%s", ctx.GetTrackInfo(), nameIDs, skuIDs, userName)
|
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameIDs:%v, skuIDs:%v, userName:%s", ctx.GetTrackInfo(), nameIDs, skuIDs, userName)
|
||||||
isManagedIt := len(nameIDs) > 1 || len(nameIDs) == 0 || len(skuIDs) > 1 || len(skuIDs) == 0
|
isManagedIt := !(len(nameIDs) > 0 && len(nameIDs) <= 2 || len(skuIDs) > 0 && len(skuIDs) < 8)
|
||||||
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt,
|
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt,
|
||||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
var resultList []interface{}
|
var resultList []interface{}
|
||||||
@@ -358,7 +358,7 @@ func (v *VendorSync) SyncStoresCategory(ctx *jxcontext.Context, db *dao.DaoDB, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled bool, skuIDs, excludeSkuIDs []int, setSyncStatus int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
globals.SugarLogger.Debug("SyncStoresSkus2")
|
globals.SugarLogger.Debug("SyncStoresSkus2")
|
||||||
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
|
isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8
|
||||||
task, hint, err := v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs,
|
task, hint, err := v.LoopStoresMap2(ctx, db, fmt.Sprintf("同步门店商品信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs,
|
||||||
@@ -373,11 +373,13 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend
|
|||||||
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
|
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
storeMap := batchItemList[0].(*model.StoreMap)
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
if setSyncStatus != 0 {
|
if syncDisabled || storeMap.Status > model.StoreStatusDisabled {
|
||||||
dao.SetStoreSkuSyncStatus(db, storeMap.VendorID, []int{storeMap.StoreID}, skuIDs, setSyncStatus)
|
if setSyncStatus != 0 {
|
||||||
}
|
dao.SetStoreSkuSyncStatus(db, storeMap.VendorID, []int{storeMap.StoreID}, skuIDs, setSyncStatus)
|
||||||
if _, err = v.proxySyncStoreSku(ctx, task, storeMap, nil, skuIDs, excludeSkuIDs, false, isContinueWhenError); err != nil {
|
}
|
||||||
globals.SugarLogger.Debugf("SyncStoresSkus2 failed2 store:%d failed with error:%v", storeMap.StoreID, err)
|
if _, err = v.proxySyncStoreSku(ctx, task, storeMap, nil, skuIDs, excludeSkuIDs, false, isContinueWhenError); err != nil {
|
||||||
|
globals.SugarLogger.Debugf("SyncStoresSkus2 failed2 store:%d failed with error:%v", storeMap.StoreID, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}, loopMapInfo.StoreMapList)
|
}, loopMapInfo.StoreMapList)
|
||||||
@@ -387,18 +389,6 @@ func (v *VendorSync) SyncStoresSkus2(ctx *jxcontext.Context, db *dao.DaoDB, vend
|
|||||||
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
||||||
}, isContinueWhenError)
|
}, isContinueWhenError)
|
||||||
if task != nil {
|
if task != nil {
|
||||||
// if vendorErr := partner.IsErrChangePriceFailed(task.GetOriginalErr()); vendorErr != nil {
|
|
||||||
// platformList := make([]string, len(task.GetDetailErrList()))
|
|
||||||
// for k, v := range task.GetDetailErrList() {
|
|
||||||
// if vendorErr := partner.IsErrVendorError(v); vendorErr != nil {
|
|
||||||
// platformList[k] = model.VendorChineseNames[vendorErr.VendorID()]
|
|
||||||
// } else {
|
|
||||||
// platformList[k] = "未知"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// err = fmt.Errorf("同步价格失败\n失败平台:%s", strings.Join(platformList, ","))
|
|
||||||
// } else {
|
|
||||||
// }
|
|
||||||
err = makeSyncError(err)
|
err = makeSyncError(err)
|
||||||
}
|
}
|
||||||
return hint, err
|
return hint, err
|
||||||
@@ -409,36 +399,22 @@ func (v *VendorSync) SyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendo
|
|||||||
if isForce {
|
if isForce {
|
||||||
setSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
setSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
||||||
}
|
}
|
||||||
return v.SyncStoresSkus2(ctx, db, vendorIDs, storeIDs, skuIDs, nil, setSyncStatus, isAsync, isContinueWhenError)
|
return v.SyncStoresSkus2(ctx, db, vendorIDs, storeIDs, true, skuIDs, nil, setSyncStatus, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
|
|
||||||
// func isUseOldSyncLogic(storeMap *model.StoreMap) bool {
|
|
||||||
// return false
|
|
||||||
// return globals.IsProductEnv() && storeMap.StoreID != 102652 // 绿城四季鲜店
|
|
||||||
// }
|
|
||||||
|
|
||||||
func (v *VendorSync) proxySyncStoreCategory(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) proxySyncStoreCategory(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, nameIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
// if isUseOldSyncLogic(storeMap) {
|
|
||||||
// return v.GetStoreHandler(storeMap.VendorID).(partner.ISingleStoreHandler).SyncStoreCategory(ctx, parentTask, storeMap.StoreID, isAsync)
|
|
||||||
// }
|
|
||||||
return SyncStorCategories(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, nil, skuIDs, isAsync, isContinueWhenError)
|
return SyncStorCategories(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, nil, skuIDs, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VendorSync) proxySyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, nameIDs, skuIDs, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) proxySyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, nameIDs, skuIDs, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
// if isUseOldSyncLogic(storeMap) {
|
|
||||||
// return v.GetStoreHandler(storeMap.VendorID).SyncStoreSkus(ctx, parentTask, storeMap.StoreID, skuIDs, isAsync, isContinueWhenError)
|
|
||||||
// }
|
|
||||||
return SyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, nil, skuIDs, excludeSkuIDs, isAsync, isContinueWhenError)
|
return SyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, nil, skuIDs, excludeSkuIDs, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VendorSync) proxyFullSyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) proxyFullSyncStoreSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
// if isUseOldSyncLogic(storeMap) {
|
|
||||||
// return v.GetStoreHandler(storeMap.VendorID).FullSyncStoreSkus(ctx, parentTask, storeMap.StoreID, isAsync, isContinueWhenError)
|
|
||||||
// }
|
|
||||||
return FullSyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, isAsync, isContinueWhenError)
|
return FullSyncStoreSkuNew(ctx, parentTask, storeMap.VendorID, storeMap.StoreID, storeMap.VendorStoreID, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs []int, storeIDs []int, syncDisabled, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
globals.SugarLogger.Debug("FullSyncStoresSkus")
|
globals.SugarLogger.Debug("FullSyncStoresSkus")
|
||||||
hint, err = v.LoopStoresMap(ctx, db, fmt.Sprintf("初始化门店商品信息:%v", storeIDs), isAsync, true, vendorIDs, storeIDs,
|
hint, err = v.LoopStoresMap(ctx, db, fmt.Sprintf("初始化门店商品信息:%v", storeIDs), isAsync, true, vendorIDs, storeIDs,
|
||||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
@@ -452,8 +428,10 @@ func (v *VendorSync) FullSyncStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, v
|
|||||||
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
|
tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
storeMap := batchItemList[0].(*model.StoreMap)
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
if _, err = v.proxyFullSyncStoreSku(ctx, task, storeMap, false, isContinueWhenError); err != nil {
|
if syncDisabled || storeMap.Status > model.StoreStatusDisabled {
|
||||||
globals.SugarLogger.Debugf("FullSyncStoresSkus failed2 store:%d failed with error:%v", storeMap.StoreID, err)
|
if _, err = v.proxyFullSyncStoreSku(ctx, task, storeMap, false, isContinueWhenError); err != nil {
|
||||||
|
globals.SugarLogger.Debugf("FullSyncStoresSkus failed2 store:%d failed with error:%v", storeMap.StoreID, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}, loopMapInfo.StoreMapList)
|
}, loopMapInfo.StoreMapList)
|
||||||
|
|||||||
@@ -124,12 +124,12 @@ func doDailyWork() {
|
|||||||
globals.SugarLogger.Debug("doDailyWork")
|
globals.SugarLogger.Debug("doDailyWork")
|
||||||
cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true)
|
cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true)
|
||||||
netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true)
|
netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true)
|
||||||
// cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, true, true)
|
// cms.CurVendorSync.FullSyncStoresSkus(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, true, true)
|
||||||
|
|
||||||
cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, nil, []int{27379}, model.SyncFlagSaleMask|model.SyncFlagPriceMask, true, true)
|
cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDJD}, nil, false, nil, []int{27379}, model.SyncFlagSaleMask|model.SyncFlagPriceMask, true, true)
|
||||||
|
|
||||||
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
|
SaveImportantTaskID(TaskNameSyncStoreSku, SpecialTaskID)
|
||||||
taskID, _ := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDEBAI, model.VendorIDMTWM}, nil, nil, nil, model.SyncFlagSaleMask|model.SyncFlagPriceMask, true, true)
|
taskID, _ := cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDEBAI, model.VendorIDMTWM}, nil, false, nil, nil, model.SyncFlagSaleMask|model.SyncFlagPriceMask, true, true)
|
||||||
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
|
SaveImportantTaskID(TaskNameSyncStoreSku, taskID)
|
||||||
|
|
||||||
InitEx()
|
InitEx()
|
||||||
|
|||||||
@@ -10,16 +10,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
storeIDsExist []int
|
|
||||||
storeIDsNotExist []int
|
|
||||||
StatisticsForOrdersExists *dao.StatisticsForOrdersExists
|
|
||||||
StatisticsForOrdersExistsStore *dao.StatisticsForOrdersExists
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
|
func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
|
||||||
storeIDsExist = storeIDsExist[0:0]
|
|
||||||
storeIDsNotExist = storeIDsNotExist[0:0]
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
fromDateParm := utils.Str2Time(fromDate)
|
fromDateParm := utils.Str2Time(fromDate)
|
||||||
toDateParm := utils.Str2Time(toDate)
|
toDateParm := utils.Str2Time(toDate)
|
||||||
@@ -27,45 +18,18 @@ func GetStatisticsReportForOrders(ctx *jxcontext.Context, storeIDs []int, fromDa
|
|||||||
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
|
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
|
||||||
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate))
|
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate))
|
||||||
}
|
}
|
||||||
//若入参中,不存在的店则不显示,存在的店但无订单的显示0
|
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDs, fromDateParm, toDateParm)
|
||||||
for _, id := range storeIDs {
|
return statisticsReportForOrdersList, err
|
||||||
StatisticsForOrdersExistsStore, err = dao.IsStoreExist(db, id)
|
}
|
||||||
if StatisticsForOrdersExistsStore == nil {
|
|
||||||
continue
|
func GetStatisticsReportForAfsOrders(ctx *jxcontext.Context, storeIDs []int, fromDate string, toDate string) (statisticsReportForOrdersList []*dao.StatisticsReportForOrdersList, err error) {
|
||||||
}
|
db := dao.GetDB()
|
||||||
StatisticsForOrdersExists, err = dao.GetStatisticsForOrdersExist(db, id)
|
fromDateParm := utils.Str2Time(fromDate)
|
||||||
//若该门店存在此查询条件范围内的订单
|
toDateParm := utils.Str2Time(toDate)
|
||||||
if StatisticsForOrdersExists != nil {
|
//若时间间隔大于3个月则不允许查询
|
||||||
storeIDsExist = append(storeIDsExist, id)
|
if math.Ceil(toDateParm.Sub(fromDateParm).Hours()/24) > 92 {
|
||||||
} else {
|
return nil, errors.New(fmt.Sprintf("查询间隔时间不允许大于3个月!: 时间范围:[%v] 至 [%v]", fromDate, toDate))
|
||||||
storeIDsNotExist = append(storeIDsNotExist, id)
|
}
|
||||||
}
|
statisticsReportForOrdersList, err = dao.GetGetStatisticsReportForAfsOrders(db, storeIDs, fromDateParm, toDateParm)
|
||||||
}
|
|
||||||
statisticsReportForOrdersList, err = dao.GetStatisticsReportForOrders(db, storeIDsExist, fromDateParm, toDateParm)
|
|
||||||
if storeIDsNotExist != nil {
|
|
||||||
for _, v := range storeIDsNotExist {
|
|
||||||
tempStruct1 := &dao.StatisticsForOrdersExists{
|
|
||||||
StoreID: v,
|
|
||||||
}
|
|
||||||
tempStruct2 := &dao.StatisticsReportForOrdersList{
|
|
||||||
StatisticsForOrdersExists: *tempStruct1,
|
|
||||||
OrderCounts: 0,
|
|
||||||
SalePrice: 0,
|
|
||||||
ActualPayPrice: 0,
|
|
||||||
ShopPrice: 0,
|
|
||||||
DiscountMoney: 0,
|
|
||||||
DesiredFee: 0,
|
|
||||||
DistanceFreightMoney: 0,
|
|
||||||
WaybillTipMoney: 0,
|
|
||||||
TotalShopMoney: 0,
|
|
||||||
PmSubsidyMoney: 0,
|
|
||||||
EarningPrice: 0,
|
|
||||||
TotalGrossProfit: 0,
|
|
||||||
ComGrossProfit: 0,
|
|
||||||
CityManagerGrossProfit: 0,
|
|
||||||
}
|
|
||||||
statisticsReportForOrdersList = append(statisticsReportForOrdersList, tempStruct2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return statisticsReportForOrdersList, err
|
return statisticsReportForOrdersList, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ type EventInfo struct {
|
|||||||
|
|
||||||
type tRegisterInfo struct {
|
type tRegisterInfo struct {
|
||||||
notifyChan chan *EventInfo
|
notifyChan chan *EventInfo
|
||||||
eventCategory string
|
|
||||||
eventTypeList []string
|
eventTypeList []string
|
||||||
criteria interface{}
|
criteria interface{}
|
||||||
}
|
}
|
||||||
@@ -177,8 +176,7 @@ func (e *EventHub) registerConsumer(eventCategory string, eventTypeList []string
|
|||||||
realEventTypeList[index] = composeEventType(eventCategory, eventType)
|
realEventTypeList[index] = composeEventType(eventCategory, eventType)
|
||||||
}
|
}
|
||||||
info := &tRegisterInfo{
|
info := &tRegisterInfo{
|
||||||
eventCategory: eventCategory,
|
eventTypeList: realEventTypeList,
|
||||||
eventTypeList: eventTypeList,
|
|
||||||
notifyChan: make(chan *EventInfo, 1),
|
notifyChan: make(chan *EventInfo, 1),
|
||||||
criteria: criteria,
|
criteria: criteria,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ import (
|
|||||||
const (
|
const (
|
||||||
EventCategory = "sys"
|
EventCategory = "sys"
|
||||||
|
|
||||||
EventTypeWXToken = "wxtoken"
|
EventTypeWXToken = "wxToken"
|
||||||
|
EventTypeYLYToken = "ylyToken"
|
||||||
|
EventTypeWeimobToken = "weimobToken"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Hub struct {
|
type Hub struct {
|
||||||
@@ -23,7 +25,7 @@ type Hub struct {
|
|||||||
type Criteria struct {
|
type Criteria struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type WXTokenInfo struct {
|
type TokenInfo struct {
|
||||||
IsNew bool `json:"isNew"`
|
IsNew bool `json:"isNew"`
|
||||||
Token string `json:"token"`
|
Token string `json:"token"`
|
||||||
}
|
}
|
||||||
@@ -55,22 +57,58 @@ func (h *Hub) OnNewWXToken(token string) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Hub) GetWXToken(oldToken string, waitTime time.Duration) (tokenInfo *WXTokenInfo) {
|
func (h *Hub) OnNewYLYToken(token string) {
|
||||||
token := api.WeixinAPI.CBGetToken()
|
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
|
||||||
|
Type: EventTypeYLYToken,
|
||||||
|
Data: token,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Hub) OnNewWeimobToken(token string) {
|
||||||
|
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
|
||||||
|
Type: EventTypeWeimobToken,
|
||||||
|
Data: token,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Hub) GetToken(tokenType, oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||||
|
var token string
|
||||||
|
switch tokenType {
|
||||||
|
case EventTypeWXToken:
|
||||||
|
token = api.WeixinAPI.CBGetToken()
|
||||||
|
case EventTypeYLYToken:
|
||||||
|
token = api.YilianyunAPI.GetToken()
|
||||||
|
case EventTypeWeimobToken:
|
||||||
|
if weimobToken := api.WeimobAPI.GetToken(); weimobToken != nil {
|
||||||
|
token = string(utils.MustMarshal(weimobToken))
|
||||||
|
}
|
||||||
|
}
|
||||||
if token != oldToken {
|
if token != oldToken {
|
||||||
tokenInfo = &WXTokenInfo{
|
tokenInfo = &TokenInfo{
|
||||||
IsNew: false,
|
IsNew: false,
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
eventInfo, err := h.eventHub.GetEvent(EventCategory, []string{EventTypeWXToken}, nil, waitTime)
|
eventInfo, err := h.eventHub.GetEvent(EventCategory, []string{tokenType}, nil, waitTime)
|
||||||
if err == nil && eventInfo != nil {
|
if err == nil && eventInfo != nil {
|
||||||
tokenInfo = &WXTokenInfo{
|
tokenInfo = &TokenInfo{
|
||||||
IsNew: true,
|
IsNew: true,
|
||||||
Token: eventInfo.Data.(string),
|
Token: eventInfo.Data.(string),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("GetWXToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
globals.SugarLogger.Debugf("GetToken tokenType:%s tokenInfo:%s", tokenType, utils.Format4Output(tokenInfo, true))
|
||||||
return tokenInfo
|
return tokenInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Hub) GetWXToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||||
|
return h.GetToken(EventTypeWXToken, oldToken, waitTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Hub) GetYLYToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||||
|
return h.GetToken(EventTypeYLYToken, oldToken, waitTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Hub) GetWeimobToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||||
|
return h.GetToken(EventTypeWeimobToken, oldToken, waitTime)
|
||||||
|
}
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ func GetPossibleVendorIDFromVendorOrderID(vendorOrderID string) (vendorID int) {
|
|||||||
// 改造点:
|
// 改造点:
|
||||||
// 1、订单号位数变化,由原有15位数增加1位数调整为16位数,对接商家需检查是否有对订单号位数做长度校验。
|
// 1、订单号位数变化,由原有15位数增加1位数调整为16位数,对接商家需检查是否有对订单号位数做长度校验。
|
||||||
// 2、第一位数字发生变化,由原来9开头调整为当年年份后两位数如:2020年订单开头为20;
|
// 2、第一位数字发生变化,由原来9开头调整为当年年份后两位数如:2020年订单开头为20;
|
||||||
if orderIDLen == len("925265130002541") || orderIDLen == len("1925265130002541")+1 {
|
if orderIDLen == len("925265130002541") || orderIDLen == len("1925265130002541") {
|
||||||
vendorID = model.VendorIDJD
|
vendorID = model.VendorIDJD
|
||||||
} else if orderIDLen == len("3022716176275221584") {
|
} else if orderIDLen == len("3022716176275221584") {
|
||||||
// vendorID = model.VendorIDELM
|
// vendorID = model.VendorIDELM
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import (
|
|||||||
const (
|
const (
|
||||||
weixinTokenExpires = 7200 * time.Second
|
weixinTokenExpires = 7200 * time.Second
|
||||||
dingdingTokenExpires = 7200 * time.Second
|
dingdingTokenExpires = 7200 * time.Second
|
||||||
elmTokenExpires = 20 * 24 * 3600 * time.Second
|
|
||||||
weimobTokenExpires = 7200 * time.Second
|
weimobTokenExpires = 7200 * time.Second
|
||||||
yilianyunTokenExpires = 30 * 24 * 3600 * time.Second
|
yilianyunTokenExpires = 30 * 24 * 3600 * time.Second
|
||||||
|
|
||||||
@@ -35,16 +34,6 @@ const (
|
|||||||
minRefreshGap = 1 * time.Second
|
minRefreshGap = 1 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type ElmTokenForCompatible struct {
|
|
||||||
Error string `json:"error"`
|
|
||||||
ErrorDescription string `json:"error_description"`
|
|
||||||
AccessToken string `json:"accessToken"`
|
|
||||||
TokenType string `json:"tokenType"`
|
|
||||||
Expires int `json:"expires"`
|
|
||||||
RefreshToken string `json:"refreshToken"`
|
|
||||||
Success bool `json:"success"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CallResult struct {
|
type CallResult struct {
|
||||||
Code string `json:"code"`
|
Code string `json:"code"`
|
||||||
Desc string `json:"desc"`
|
Desc string `json:"desc"`
|
||||||
@@ -126,19 +115,17 @@ func RefreshWeixinToken() (err error) {
|
|||||||
if api.WeixinAPI != nil {
|
if api.WeixinAPI != nil {
|
||||||
err = RefreshConfig("wechat", weixinTokenExpires, func() (token string, expireTimeStr string) {
|
err = RefreshConfig("wechat", weixinTokenExpires, func() (token string, expireTimeStr string) {
|
||||||
globals.SugarLogger.Debugf("RefreshWeixinToken RunMode:%s", beego.BConfig.RunMode)
|
globals.SugarLogger.Debugf("RefreshWeixinToken RunMode:%s", beego.BConfig.RunMode)
|
||||||
if globals.IsProductEnv() || beego.BConfig.RunMode == "alpha" {
|
if globals.IsMainProductEnv() {
|
||||||
if globals.IsMainProductEnv() {
|
if tokenInfo, err := api.WeixinAPI.CBRetrieveToken(); err == nil {
|
||||||
if tokenInfo, err := api.WeixinAPI.CBRetrieveToken(); err == nil {
|
globals.SugarLogger.Debugf("RefreshWeixinToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
||||||
globals.SugarLogger.Debugf("RefreshWeixinToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
token = tokenInfo.AccessToken
|
||||||
token = tokenInfo.AccessToken
|
|
||||||
} else {
|
|
||||||
globals.SugarLogger.Errorf("RefreshWeixinToken RefreshToken failed with error:%v", err)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if tokenInfo := getWXTokenFromRemote(api.WeixinAPI.CBGetToken()); tokenInfo != nil {
|
globals.SugarLogger.Errorf("RefreshWeixinToken RefreshToken failed with error:%v", err)
|
||||||
expireTimeStr = utils.Time2Str(time.Now().Add(-weixinTokenExpires))
|
}
|
||||||
token = tokenInfo.Token
|
} else {
|
||||||
}
|
if tokenInfo := getWXTokenFromRemote(api.WeixinAPI.CBGetToken()); tokenInfo != nil {
|
||||||
|
expireTimeStr = utils.Time2Str(time.Now().Add(-weixinTokenExpires))
|
||||||
|
token = tokenInfo.Token
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return token, expireTimeStr
|
return token, expireTimeStr
|
||||||
@@ -151,48 +138,30 @@ func RefreshWeixinToken() (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func RefreshElmToken() (err error) {
|
|
||||||
if api.ElmAPI != nil {
|
|
||||||
err = RefreshConfig("eleme", elmTokenExpires, func() (string, string) {
|
|
||||||
if globals.IsProductEnv() {
|
|
||||||
if tokenInfo, err := api.ElmAPI.RefreshTokenIndividual(); err == nil {
|
|
||||||
tokenInfo2 := &ElmTokenForCompatible{
|
|
||||||
Error: "",
|
|
||||||
ErrorDescription: "",
|
|
||||||
AccessToken: tokenInfo.AccessToken,
|
|
||||||
TokenType: tokenInfo.TokenType,
|
|
||||||
Expires: tokenInfo.ExpiresIn,
|
|
||||||
RefreshToken: "",
|
|
||||||
Success: true,
|
|
||||||
}
|
|
||||||
return string(utils.MustMarshal(tokenInfo2)), ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", ""
|
|
||||||
}, func(value string) {
|
|
||||||
var tokenInfo ElmTokenForCompatible
|
|
||||||
err := utils.UnmarshalUseNumber([]byte(value), &tokenInfo)
|
|
||||||
if err == nil {
|
|
||||||
api.ElmAPI.SetToken(tokenInfo.AccessToken)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func RefreshWeimobToken() (err error) {
|
func RefreshWeimobToken() (err error) {
|
||||||
if api.WeimobAPI != nil {
|
if api.WeimobAPI != nil {
|
||||||
err = RefreshConfig("weimob", weimobTokenExpires, func() (string, string) {
|
err = RefreshConfig("weimob", weimobTokenExpires, func() (token string, expireTimeStr string) {
|
||||||
if globals.IsProductEnv() {
|
globals.SugarLogger.Debugf("RefreshWeimobToken RunMode:%s", beego.BConfig.RunMode)
|
||||||
|
if globals.IsMainProductEnv() {
|
||||||
if tokenInfo, err := api.WeimobAPI.RefreshTokenByRefreshToken(); err == nil {
|
if tokenInfo, err := api.WeimobAPI.RefreshTokenByRefreshToken(); err == nil {
|
||||||
return string(utils.MustMarshal(tokenInfo)), utils.Time2Str(time.Now().Add((time.Duration(tokenInfo.ExpiresIn) - weimobTokenExpires/time.Second) * time.Second))
|
return string(utils.MustMarshal(tokenInfo)), utils.Time2Str(time.Now().Add((time.Duration(tokenInfo.ExpiresIn) - weimobTokenExpires/time.Second) * time.Second))
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
curToken := ""
|
||||||
|
if tokenInfo := api.WeimobAPI.GetToken(); tokenInfo != nil {
|
||||||
|
curToken = string(utils.MustMarshal(tokenInfo))
|
||||||
|
}
|
||||||
|
if tokenInfo := getWeimobTokenFromRemote(curToken); tokenInfo != nil {
|
||||||
|
expireTimeStr = utils.Time2Str(time.Now().Add(-weimobTokenExpires))
|
||||||
|
token = tokenInfo.Token
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return "", ""
|
return token, expireTimeStr
|
||||||
}, func(value string) {
|
}, func(value string) {
|
||||||
var tokenInfo *weimobapi.TokenInfo
|
var tokenInfo *weimobapi.TokenInfo
|
||||||
err := utils.UnmarshalUseNumber([]byte(value), &tokenInfo)
|
err := utils.UnmarshalUseNumber([]byte(value), &tokenInfo)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
syseventhub.SysEventHub.OnNewWeimobToken(string(utils.MustMarshal(tokenInfo)))
|
||||||
api.WeimobAPI.SetToken(tokenInfo)
|
api.WeimobAPI.SetToken(tokenInfo)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -230,66 +199,98 @@ func SaveWeimobToken(token *weimobapi.TokenInfo) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RefreshYilianyunToken() (err error) {
|
func RefreshYilianyunToken() (err error) {
|
||||||
return RefreshConfig("yilianyun", yilianyunTokenExpires, func() (string, string) {
|
return RefreshConfig("yilianyun", yilianyunTokenExpires, func() (token string, expireTimeStr string) {
|
||||||
globals.SugarLogger.Debugf("RefreshYilianyunToken RunMode:%s", beego.BConfig.RunMode)
|
globals.SugarLogger.Debugf("RefreshYilianyunToken RunMode:%s", beego.BConfig.RunMode)
|
||||||
if globals.IsProductEnv() {
|
if globals.IsMainProductEnv() { // 只有京西菜市刷新易联云key
|
||||||
if globals.IsMainProductEnv() { // 只有京西菜市刷新易联云key
|
if tokenInfo, err := api.YilianyunAPI.RetrieveToken(); err == nil {
|
||||||
if tokenInfo, err := api.YilianyunAPI.RetrieveToken(); err == nil {
|
token = string(utils.MustMarshal(tokenInfo))
|
||||||
return string(utils.MustMarshal(tokenInfo)), ""
|
} else {
|
||||||
} else {
|
globals.SugarLogger.Errorf("RefreshYilianyunToken RefreshToken failed with error:%v", err)
|
||||||
globals.SugarLogger.Errorf("RefreshYilianyunToken RefreshToken failed with error:%v", err)
|
}
|
||||||
}
|
} else {
|
||||||
|
if tokenInfo := getYLYTokenFromRemote(api.YilianyunAPI.GetToken()); tokenInfo != nil {
|
||||||
|
expireTimeStr = utils.Time2Str(time.Now().Add(-yilianyunTokenExpires))
|
||||||
|
token = tokenInfo.Token
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "", ""
|
return token, expireTimeStr
|
||||||
}, func(value string) {
|
}, func(value string) {
|
||||||
|
token := value
|
||||||
var tokenInfo *yilianyunapi.TokenInfo
|
var tokenInfo *yilianyunapi.TokenInfo
|
||||||
err := utils.UnmarshalUseNumber([]byte(value), &tokenInfo)
|
if err := utils.TryUnmarshalUseNumber([]byte(value), &tokenInfo); err == nil {
|
||||||
if err == nil {
|
token = tokenInfo.AccessToken
|
||||||
api.YilianyunAPI.SetToken(tokenInfo.AccessToken)
|
|
||||||
}
|
}
|
||||||
|
syseventhub.SysEventHub.OnNewYLYToken(token)
|
||||||
|
api.YilianyunAPI.SetToken(token)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWXTokenFromRemote(oldToken string) (tokenInfo *syseventhub.WXTokenInfo) {
|
func PollingRemotEvent(remoteURL string, waitSecond int, params map[string]interface{}) (tokenInfo *syseventhub.TokenInfo) {
|
||||||
if IsGetWXTokenFromRemote() {
|
if waitSecond == 0 {
|
||||||
for {
|
waitSecond = 5 * 60
|
||||||
waitSecond := 5 * 60
|
}
|
||||||
globals.SugarLogger.Debugf("getWXTokenFromProd1")
|
params2 := utils.MergeMaps(params, map[string]interface{}{
|
||||||
response, err := http.Get(fmt.Sprintf("%s?accessKey=%s&oldToken=%s&waitSecond=%d", globals.GetWeixinTokenURL, globals.GetWeixinTokenKey, oldToken, waitSecond))
|
"accessKey": globals.GetWeixinTokenKey,
|
||||||
globals.SugarLogger.Debugf("getWXTokenFromProd2 error:%v", err)
|
"waitSecond": waitSecond,
|
||||||
if err == nil {
|
})
|
||||||
defer response.Body.Close()
|
for {
|
||||||
if response.StatusCode == http.StatusOK {
|
globals.SugarLogger.Debugf("PollingRemotEvent %s", remoteURL)
|
||||||
data, err2 := ioutil.ReadAll(response.Body)
|
response, err := http.Get(utils.GenerateGetURL(remoteURL, "", params2))
|
||||||
if err = err2; err == nil {
|
globals.SugarLogger.Debugf("PollingRemotEvent2 %s error:%v", remoteURL, err)
|
||||||
var result CallResult
|
if err == nil {
|
||||||
if err = utils.UnmarshalUseNumber(data, &result); err == nil {
|
defer response.Body.Close()
|
||||||
if result.Code == "0" {
|
if response.StatusCode == http.StatusOK {
|
||||||
if result.Data != "" {
|
data, err2 := ioutil.ReadAll(response.Body)
|
||||||
if err = utils.UnmarshalUseNumber([]byte(result.Data), &tokenInfo); err == nil && tokenInfo != nil {
|
if err = err2; err == nil {
|
||||||
globals.SugarLogger.Debugf("getWXTokenFromProd:%s", utils.Format4Output(tokenInfo, false))
|
var result CallResult
|
||||||
break
|
if err = utils.UnmarshalUseNumber(data, &result); err == nil {
|
||||||
}
|
if result.Code == "0" {
|
||||||
|
if result.Data != "" {
|
||||||
|
if err = utils.UnmarshalUseNumber([]byte(result.Data), &tokenInfo); err == nil && tokenInfo != nil {
|
||||||
|
globals.SugarLogger.Debugf("PollingRemotEvent %s:%s", remoteURL, utils.Format4Output(tokenInfo, false))
|
||||||
|
break
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err = fmt.Errorf("return code is:%s", result.Code)
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
err = fmt.Errorf("PollingRemotEvent %s return code is:%s", remoteURL, result.Code)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err = platformapi.ErrHTTPCodeIsNot200
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
err = platformapi.ErrHTTPCodeIsNot200
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Infof("getWXTokenFromProd failed with error:%v", err)
|
}
|
||||||
if err != nil {
|
globals.SugarLogger.Infof("PollingRemotEvent %s failed with error:%v", remoteURL, err)
|
||||||
time.Sleep(errRefreshGap)
|
if err != nil {
|
||||||
}
|
time.Sleep(errRefreshGap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tokenInfo
|
return tokenInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsGetWXTokenFromRemote() bool {
|
func getWXTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||||
return !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetWeixinTokenURL != ""
|
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetWeixinTokenURL != "" {
|
||||||
|
tokenInfo = PollingRemotEvent(globals.GetWeixinTokenURL, 0, map[string]interface{}{
|
||||||
|
"oldToken": oldToken,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return tokenInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func getYLYTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||||
|
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetYLYTokenURL != "" {
|
||||||
|
tokenInfo = PollingRemotEvent(globals.GetYLYTokenURL, 0, map[string]interface{}{
|
||||||
|
"oldToken": oldToken,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return tokenInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func getWeimobTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||||
|
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetWeimobTokenURL != "" {
|
||||||
|
tokenInfo = PollingRemotEvent(globals.GetWeimobTokenURL, 0, map[string]interface{}{
|
||||||
|
"oldToken": oldToken,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return tokenInfo
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ type GoodsOrderExt struct {
|
|||||||
|
|
||||||
type OrderSkuExt struct {
|
type OrderSkuExt struct {
|
||||||
OrderSku
|
OrderSku
|
||||||
|
NameID int `orm:"column(name_id)" json:"nameID"`
|
||||||
FullSkuName string `json:"fullSkuName"`
|
FullSkuName string `json:"fullSkuName"`
|
||||||
Image string `json:"image"`
|
Image string `json:"image"`
|
||||||
RealEarningPrice int64 `json:"realEarningPrice"` // 实际单品结算给门店老板钱
|
RealEarningPrice int64 `json:"realEarningPrice"` // 实际单品结算给门店老板钱
|
||||||
|
|||||||
@@ -9,58 +9,29 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type StatisticsForOrdersExists struct {
|
type StatisticsForOrdersExists struct {
|
||||||
StoreID int `orm:"column(storeID)" json:"storeID"`
|
StoreID int `orm:"column(store_id)" json:"storeId"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type StatisticsReportForOrdersList struct {
|
type StatisticsReportForOrdersList struct {
|
||||||
StatisticsForOrdersExists
|
StatisticsForOrdersExists
|
||||||
OrderCounts int `orm:"column(orderCounts)" json:"orderCounts"` //订单数
|
StoreName string `json:"name"` //门店名
|
||||||
SalePrice int `orm:"column(salePrice)" json:"salePrice"` //GMV(售卖价)
|
OrderCounts int `json:"orderCounts"` //订单数
|
||||||
ActualPayPrice int `orm:"column(actualPayPrice)" json:"actualPayPrice"` //实付
|
SalePrice int `json:"salePrice"` //GMV(售卖价)
|
||||||
ShopPrice int `orm:"column(shopPrice)" json:"shopPrice"` //京西
|
ActualPayPrice int `json:"actualPayPrice"` //实付
|
||||||
DiscountMoney int `orm:"column(discountMoney)" json:"discountMoney"` //优惠
|
ShopPrice int `json:"shopPrice"` //京西
|
||||||
DesiredFee int `orm:"column(desiredFee)" json:"desiredFee"` //配送费
|
DiscountMoney int `json:"discountMoney"` //优惠
|
||||||
DistanceFreightMoney int `orm:"column(distanceFreightMoney)" json:"distanceFreightMoney"` //远距离
|
DesiredFee int `json:"desiredFee"` //配送费
|
||||||
WaybillTipMoney int `orm:"column(waybillTipMoney)" json:"waybillTipMoney"` //
|
DistanceFreightMoney int `json:"distanceFreightMoney"` //远距离
|
||||||
TotalShopMoney int `orm:"column(totalShopMoney)" json:"totalShopMoney"`
|
WaybillTipMoney int `json:"waybillTipMoney"` //小费
|
||||||
PmSubsidyMoney int `orm:"column(pmSubsidyMoney)" json:"pmSubsidyMoney"`
|
TotalShopMoney int `json:"totalShopMoney"` //平台结算
|
||||||
EarningPrice int `orm:"column(earningPrice)" json:"earningPrice"`
|
PmSubsidyMoney int `json:"pmSubsidyMoney"` //平台补贴
|
||||||
TotalGrossProfit int `orm:"column(totalGrossProfit)" json:"totalGrossProfit"`
|
EarningPrice int `json:"earningPrice"` //门店收益(预计收益)
|
||||||
ComGrossProfit float32 `orm:"column(comGrossProfit)" json:"comGrossProfit"`
|
TotalGrossProfit int `json:"totalGrossProfit"` //总毛利
|
||||||
CityManagerGrossProfit float32 `orm:"column(cityManagerGrossProfit)" json:"cityManagerGrossProfit"`
|
ComGrossProfit float32 `json:"comGrossProfit"` //公司毛利
|
||||||
}
|
CityManagerGrossProfit float32 `json:"cityManagerGrossProfit"` //城市经理毛利
|
||||||
|
MarketManName string `json:"marketManName"` //市场负责人
|
||||||
//是否存在这个门店
|
OperatorName string `json:"operatorName"` //运营负责人
|
||||||
func IsStoreExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) {
|
OperatorName2 string `json:"operatorName2"`
|
||||||
sql := `
|
|
||||||
SELECT *
|
|
||||||
FROM store
|
|
||||||
WHERE id = ?
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{}
|
|
||||||
sqlParams = append(sqlParams, storeID)
|
|
||||||
|
|
||||||
if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil {
|
|
||||||
return StatisticsForOrdersExists, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
//查询条件内是否存在订单
|
|
||||||
func GetStatisticsForOrdersExist(db *DaoDB, storeID int) (StatisticsForOrdersExists *StatisticsForOrdersExists, err error) {
|
|
||||||
sql := `
|
|
||||||
SELECT store_id
|
|
||||||
FROM goods_order a LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
|
||||||
WHERE a.store_id = ?
|
|
||||||
GROUP BY a.store_id
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{}
|
|
||||||
sqlParams = append(sqlParams, storeID)
|
|
||||||
|
|
||||||
if err = GetRow(db, &StatisticsForOrdersExists, sql, sqlParams...); err == nil {
|
|
||||||
return StatisticsForOrdersExists, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询统计订单信息
|
//查询统计订单信息
|
||||||
@@ -68,43 +39,147 @@ func GetStatisticsReportForOrders(db *DaoDB, storeIDs []int, fromDate time.Time,
|
|||||||
//排除已取消的订单
|
//排除已取消的订单
|
||||||
status := strconv.Itoa(model.OrderStatusCanceled)
|
status := strconv.Itoa(model.OrderStatusCanceled)
|
||||||
sql := `
|
sql := `
|
||||||
SELECT s.*,
|
SELECT
|
||||||
if(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) comGrossProfit,
|
c.id store_id,
|
||||||
if(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) cityManagerGrossProfit
|
c.name store_name,
|
||||||
FROM store c,(
|
s.orderCounts order_counts,
|
||||||
SELECT
|
s.salePrice sale_price,
|
||||||
a.store_id storeID,
|
s.actualPayPrice actual_pay_price,
|
||||||
count(*) orderCounts,
|
s.shopPrice shop_price,
|
||||||
sum(sale_price) salePrice,
|
s.discountMoney discount_money,
|
||||||
sum(actual_pay_price) actualPayPrice,
|
s.desiredFee desired_fee,
|
||||||
sum(shop_price) shopPrice,
|
s.distanceFreightMoney distance_freight_money,
|
||||||
sum(discount_money) discountMoney,
|
s.waybillTipMoney waybill_tip_money,
|
||||||
sum(desired_fee) desiredFee,
|
s.totalShopMoney total_shop_money,
|
||||||
sum(distance_freight_money) distanceFreightMoney,
|
s.pmSubsidyMoney pm_subsidy_money,
|
||||||
sum(waybill_tip_money) waybillTipMoney,
|
s.EarningPrice earning_price,
|
||||||
sum(total_shop_money) totalShopMoney,
|
s.totalGrossProfit total_gross_profit,
|
||||||
sum(pm_subsidy_money) pmSubsidyMoney,
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) com_grossProfit,
|
||||||
sum(earning_price) EarningPrice,
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) city_manager_gross_profit,
|
||||||
sum(total_shop_money-earning_price-desired_fee-distance_freight_money-waybill_tip_money-80) totalGrossProfit
|
IF(mm.name <> '', mm.name, mm.user_id2) market_man_name,
|
||||||
FROM goods_order a LEFT JOIN waybill b on if(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
IF(om.name <> '', om.name, om.user_id2) operator_name,
|
||||||
WHERE a.status != ` + status + `
|
IF(om2.name <> '', om2.name, om2.user_id2) operator_name2
|
||||||
|
FROM store c
|
||||||
|
LEFT JOIN user mm ON mm.mobile <> '' AND mm.mobile = c.market_man_phone
|
||||||
|
LEFT JOIN user om ON om.mobile <> '' AND om.mobile = c.operator_phone
|
||||||
|
LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = c.operator_phone2
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
a.store_id storeID,
|
||||||
|
COUNT(*) orderCounts,
|
||||||
|
SUM(sale_price) salePrice,
|
||||||
|
SUM(actual_pay_price) actualPayPrice,
|
||||||
|
SUM(shop_price) shopPrice,
|
||||||
|
SUM(discount_money) discountMoney,
|
||||||
|
SUM(desired_fee) desiredFee,
|
||||||
|
SUM(distance_freight_money) distanceFreightMoney,
|
||||||
|
SUM(waybill_tip_money) waybillTipMoney,
|
||||||
|
SUM(total_shop_money) totalShopMoney,
|
||||||
|
SUM(pm_subsidy_money) pmSubsidyMoney,
|
||||||
|
SUM(earning_price) EarningPrice,
|
||||||
|
SUM(total_shop_money-earning_price-desired_fee-distance_freight_money-waybill_tip_money-80) totalGrossProfit
|
||||||
|
FROM goods_order a
|
||||||
|
LEFT JOIN waybill b ON IF(a.waybill_vendor_id = -1,a.vendor_order_id,a.vendor_waybill_id) = b.vendor_waybill_id
|
||||||
|
WHERE a.status != ` + status + `
|
||||||
`
|
`
|
||||||
sqlParams := []interface{}{}
|
sqlParams := []interface{}{}
|
||||||
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||||||
sql += `AND a.order_created_at BETWEEN ? and ?
|
sql += `AND a.order_created_at BETWEEN ? AND ?
|
||||||
`
|
`
|
||||||
sqlParams = append(sqlParams, fromDate, toDate)
|
sqlParams = append(sqlParams, fromDate, toDate)
|
||||||
}
|
}
|
||||||
if len(storeIDs) > 0 {
|
if len(storeIDs) > 0 {
|
||||||
sql += `AND a.store_id in(` + GenQuestionMarks(len(storeIDs)) + `)
|
sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)
|
||||||
`
|
`
|
||||||
sqlParams = append(sqlParams, storeIDs)
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
}
|
}
|
||||||
sql += `
|
sql += `
|
||||||
GROUP BY a.store_id
|
GROUP BY a.store_id
|
||||||
)s
|
)s
|
||||||
WHERE s.storeID = c.id
|
ON s.storeID = c.id
|
||||||
`
|
`
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += `WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
|
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
||||||
|
return statisticsReportForOrdersList, nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询统计售后单信息
|
||||||
|
func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time.Time, toDate time.Time) (statisticsReportForOrdersList []*StatisticsReportForOrdersList, err error) {
|
||||||
|
//排除已取消的订单
|
||||||
|
status := strconv.Itoa(model.OrderStatusCanceled)
|
||||||
|
sql := `
|
||||||
|
SELECT
|
||||||
|
c.id store_id,
|
||||||
|
c.name store_name,
|
||||||
|
s.orderCounts order_counts,
|
||||||
|
s.salePrice sale_price,
|
||||||
|
s.actualPayPrice actual_pay_price,
|
||||||
|
s.shopPrice shop_price,
|
||||||
|
s.discountMoney discount_money,
|
||||||
|
s.desiredFee desired_fee,
|
||||||
|
s.distanceFreightMoney distance_freight_money,
|
||||||
|
s.waybillTipMoney waybill_tip_money,
|
||||||
|
s.totalShopMoney total_shop_money,
|
||||||
|
s.pmSubsidyMoney pm_subsidy_money,
|
||||||
|
s.EarningPrice earning_price,
|
||||||
|
s.totalGrossProfit total_gross_profit,
|
||||||
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,totalGrossProfit,(totalGrossProfit*c.jx_brand_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) com_grossProfit,
|
||||||
|
IF(c.jx_brand_fee_factor = 0 AND c.market_add_fee_factor = 0,0,(totalGrossProfit*c.market_add_fee_factor)/(c.jx_brand_fee_factor+market_add_fee_factor)) city_manager_gross_profit,
|
||||||
|
IF(mm.name <> '', mm.name, mm.user_id2) market_man_name,
|
||||||
|
IF(om.name <> '', om.name, om.user_id2) operator_name,
|
||||||
|
IF(om2.name <> '', om2.name, om2.user_id2) operator_name2
|
||||||
|
FROM store c
|
||||||
|
LEFT JOIN user mm ON mm.mobile <> '' AND mm.mobile = c.market_man_phone
|
||||||
|
LEFT JOIN user om ON om.mobile <> '' AND om.mobile = c.operator_phone
|
||||||
|
LEFT JOIN user om2 ON om2.mobile <> '' AND om2.mobile = c.operator_phone2
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
a.store_id storeID,
|
||||||
|
COUNT(*) orderCounts,
|
||||||
|
SUM(sale_price) salePrice,
|
||||||
|
SUM(actual_pay_price) actualPayPrice,
|
||||||
|
SUM(shop_price) shopPrice,
|
||||||
|
SUM(discount_money) discountMoney,
|
||||||
|
SUM(afs_freight_money) desiredFee,
|
||||||
|
SUM(distance_freight_money) distanceFreightMoney,
|
||||||
|
SUM(waybill_tip_money) waybillTipMoney,
|
||||||
|
SUM(total_shop_money) totalShopMoney,
|
||||||
|
SUM(b.pm_subsidy_money) pmSubsidyMoney,
|
||||||
|
SUM(earning_price) EarningPrice,
|
||||||
|
SUM(total_shop_money-earning_price-afs_freight_money-distance_freight_money-waybill_tip_money-80) totalGrossProfit
|
||||||
|
FROM goods_order a,afs_order b
|
||||||
|
WHERE a.vendor_order_id = b.vendor_order_id
|
||||||
|
AND a.status != ` + status + `
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{}
|
||||||
|
if !utils.IsTimeZero(fromDate) && !utils.IsTimeZero(toDate) {
|
||||||
|
sql += `AND a.order_created_at BETWEEN ? AND ?
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, fromDate, toDate)
|
||||||
|
}
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += `AND a.store_id IN(` + GenQuestionMarks(len(storeIDs)) + `)
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
GROUP BY a.store_id
|
||||||
|
)s
|
||||||
|
ON s.storeID = c.id
|
||||||
|
`
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += `WHERE c.id IN (` + GenQuestionMarks(len(storeIDs)) + `)
|
||||||
|
`
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
if err = GetRows(db, &statisticsReportForOrdersList, sql, sqlParams...); err == nil {
|
||||||
return statisticsReportForOrdersList, nil
|
return statisticsReportForOrdersList, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,10 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
|
|||||||
if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil {
|
if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil {
|
||||||
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr)
|
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr)
|
||||||
storeDetail.FreightDeductionPackObj = FreightDeductionPack2Obj(storeDetail.FreightDeductionPackStr)
|
storeDetail.FreightDeductionPackObj = FreightDeductionPack2Obj(storeDetail.FreightDeductionPackStr)
|
||||||
|
if vendorID == model.VendorIDJX {
|
||||||
|
storeDetail.VendorStatus = storeDetail.Status
|
||||||
|
storeDetail.PricePercentage = 100
|
||||||
|
}
|
||||||
return storeDetail, nil
|
return storeDetail, nil
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -114,16 +118,8 @@ func GetStoreDetailByVendorStoreID(db *DaoDB, vendorStoreID string, vendorID int
|
|||||||
if vendorID != model.VendorIDJX {
|
if vendorID != model.VendorIDJX {
|
||||||
return getStoreDetail(db, 0, vendorID, vendorStoreID)
|
return getStoreDetail(db, 0, vendorID, vendorStoreID)
|
||||||
}
|
}
|
||||||
store := &model.Store{}
|
if storeDetail, err = getStoreDetail(db, int(utils.Str2Int64WithDefault(vendorStoreID, 0)), vendorID, ""); err == nil {
|
||||||
store.ID = int(utils.Str2Int64WithDefault(vendorStoreID, 0))
|
storeDetail.VendorStoreID = vendorStoreID
|
||||||
if err = GetEntity(db, store); err == nil {
|
|
||||||
// todo 还要补全其它参数
|
|
||||||
storeDetail = &StoreDetail{
|
|
||||||
Store: *store,
|
|
||||||
VendorStoreID: vendorStoreID,
|
|
||||||
VendorStatus: store.Status,
|
|
||||||
PricePercentage: 100,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return storeDetail, err
|
return storeDetail, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mtwm
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"net/url"
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -571,19 +572,29 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
|
|||||||
vendorStoreID := batchItemList[0].(string)
|
vendorStoreID := batchItemList[0].(string)
|
||||||
var orderIDs []string
|
var orderIDs []string
|
||||||
seqStart := 1
|
seqStart := 1
|
||||||
|
i := 0
|
||||||
for {
|
for {
|
||||||
seqEnd := seqStart + mtwmapi.MaxGap4GetOrderIdByDaySeq - 1
|
batchSize := int(math.Min(math.Pow(2, float64(i*3)), float64(mtwmapi.MaxGap4GetOrderIdByDaySeq)))
|
||||||
tmpOrderIDs, err2 := api.MtwmAPI.GetOrderIdByDaySeq(vendorStoreID, queryDate, seqStart, seqEnd)
|
seqEnd := seqStart + batchSize - 1
|
||||||
|
var tmpOrderIDs []int64
|
||||||
|
if seqStart == seqEnd {
|
||||||
|
if vendorOderID, err2 := api.MtwmAPI.GetOrderIdByDaySeqSingle(vendorStoreID, queryDate, seqStart); err2 == nil {
|
||||||
|
tmpOrderIDs = []int64{vendorOderID}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tmpOrderIDs, err = api.MtwmAPI.GetOrderIdByDaySeq(vendorStoreID, queryDate, seqStart, seqEnd)
|
||||||
|
}
|
||||||
if len(tmpOrderIDs) > 0 {
|
if len(tmpOrderIDs) > 0 {
|
||||||
for _, v := range tmpOrderIDs {
|
for _, v := range tmpOrderIDs {
|
||||||
orderIDs = append(orderIDs, utils.Int64ToStr(v))
|
orderIDs = append(orderIDs, utils.Int64ToStr(v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err = err2; err != nil || len(tmpOrderIDs) == 0 {
|
if err != nil || len(tmpOrderIDs) < batchSize {
|
||||||
err = nil
|
err = nil
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
seqStart = seqEnd + 1
|
seqStart = seqEnd + 1
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
retVal = orderIDs
|
retVal = orderIDs
|
||||||
return retVal, nil
|
return retVal, nil
|
||||||
@@ -609,7 +620,7 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
|
|||||||
func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||||
offset := 0
|
offset := 0
|
||||||
for {
|
for {
|
||||||
result, err2 := api.MtwmAPI.OrderBatchPullPhoneNumber(vendorStoreID, 0, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
result, err2 := api.MtwmAPI.OrderBatchPullPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
for _, v := range result {
|
for _, v := range result {
|
||||||
v2 := &partner.OrderPhoneNumberInfo{
|
v2 := &partner.OrderPhoneNumberInfo{
|
||||||
@@ -635,7 +646,7 @@ func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeI
|
|||||||
func (p *PurchaseHandler) GetOrderCourierNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
func (p *PurchaseHandler) GetOrderCourierNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
|
||||||
offset := 0
|
offset := 0
|
||||||
for {
|
for {
|
||||||
result, err2 := api.MtwmAPI.OrderGetRiderInfoPhoneNumber(vendorStoreID, 0, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
result, err2 := api.MtwmAPI.OrderGetRiderInfoPhoneNumber(vendorStoreID, offset, mtwmapi.MaxBatchPullPhoneNumberLimit)
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
for _, v := range result {
|
for _, v := range result {
|
||||||
numberList = append(numberList, &partner.OrderPhoneNumberInfo{
|
numberList = append(numberList, &partner.OrderPhoneNumberInfo{
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
|
|||||||
batchSize = mtwmapi.MaxStoreSkuBatchSize
|
batchSize = mtwmapi.MaxStoreSkuBatchSize
|
||||||
case partner.FuncDeleteStoreSkus:
|
case partner.FuncDeleteStoreSkus:
|
||||||
batchSize = 1 // 可考虑用批量操作
|
batchSize = 1 // 可考虑用批量操作
|
||||||
case partner.FuncCreateStoreSkus, partner.FuncUpdateStoreSkus:
|
case partner.FuncCreateStoreSkus:
|
||||||
batchSize = 1 // 可考虑用批量操作
|
batchSize = 1 // 可考虑用批量操作
|
||||||
|
case partner.FuncUpdateStoreSkus:
|
||||||
|
batchSize = mtwmapi.MaxStoreSkuBatchSize
|
||||||
case partner.FuncGetStoreSkusFullInfo:
|
case partner.FuncGetStoreSkusFullInfo:
|
||||||
batchSize = 1
|
batchSize = 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,7 +118,8 @@ weixinToken = "17_roSCZgkCxhRnyFVtei0KdfHwdGP8PmLzJFhCieka4_X4_d-lgfaTxF6oIS6FE5
|
|||||||
|
|
||||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
||||||
|
|
||||||
getWeixinTokenURL = "http://beta.jxc4.com/v2/sys/GetWXToken"
|
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||||
|
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
|
||||||
|
|
||||||
[prod]
|
[prod]
|
||||||
EnableDocs = false
|
EnableDocs = false
|
||||||
@@ -155,6 +156,7 @@ enableEbaiStoreWrite = true
|
|||||||
enableMtwmStoreWrite = true
|
enableMtwmStoreWrite = true
|
||||||
enableWscStoreWrite = true
|
enableWscStoreWrite = true
|
||||||
|
|
||||||
|
disableWeimob = false
|
||||||
weimobCallbackURL = "http://callback.jxc4.com/weimob"
|
weimobCallbackURL = "http://callback.jxc4.com/weimob"
|
||||||
|
|
||||||
dingdingAgentID = 239461075
|
dingdingAgentID = 239461075
|
||||||
@@ -214,6 +216,8 @@ dingdingQRCodeSecret = "N9dyC9qB84sauQPs4_JYrILMsG5Krqm9-PSSVJ8t9hb87rrHiFUirISx
|
|||||||
dingdingCallbackURL = "http://callback-jxgy.jxc4.com/dingding/msg"
|
dingdingCallbackURL = "http://callback-jxgy.jxc4.com/dingding/msg"
|
||||||
|
|
||||||
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||||
|
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
|
||||||
|
|
||||||
storeName = "京西果园"
|
storeName = "京西果园"
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
@@ -306,6 +310,8 @@ weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
|||||||
weixinMiniAppID2 = "wx4b5930c13f8b1170"
|
weixinMiniAppID2 = "wx4b5930c13f8b1170"
|
||||||
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
weixinMiniSecret2 = "2a57228a716ce991a52739f0ff41111d"
|
||||||
|
|
||||||
|
disableWeimob = false
|
||||||
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||||
|
getWeimobTokenURL = "http://www.jxc4.com/v2/sys/GetWeimobToken"
|
||||||
|
|
||||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (c *SyncController) FullSyncStoresSkus() {
|
|||||||
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.VendorIDs, &vendorIDs); err != nil {
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.VendorIDs, &vendorIDs); err != nil {
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
}
|
}
|
||||||
retVal, err = cms.CurVendorSync.FullSyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, params.IsAsync, params.IsContinueWhenError)
|
retVal, err = cms.CurVendorSync.FullSyncStoresSkus(params.Ctx, db, vendorIDs, storeIDs, true, params.IsAsync, params.IsContinueWhenError)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ func (c *OrderController) ExportMTWaybills() {
|
|||||||
// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)"
|
// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
// @router /GetOrders [get]
|
// @router /GetOrders [get,post]
|
||||||
func (c *OrderController) GetOrders() {
|
func (c *OrderController) GetOrders() {
|
||||||
c.callGetOrders(func(params *tOrderGetOrdersParams) (retVal interface{}, errCode string, err error) {
|
c.callGetOrders(func(params *tOrderGetOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
var skuIDs []int
|
var skuIDs []int
|
||||||
@@ -335,7 +335,7 @@ func (c *OrderController) ExportOrders() {
|
|||||||
// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)"
|
// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
// @router /GetAfsOrders [get]
|
// @router /GetAfsOrders [get,post]
|
||||||
func (c *OrderController) GetAfsOrders() {
|
func (c *OrderController) GetAfsOrders() {
|
||||||
c.callGetAfsOrders(func(params *tOrderGetAfsOrdersParams) (retVal interface{}, errCode string, err error) {
|
c.callGetAfsOrders(func(params *tOrderGetAfsOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
timeList, err := jxutils.BatchStr2Time(params.FromTime, params.ToTime)
|
timeList, err := jxutils.BatchStr2Time(params.FromTime, params.ToTime)
|
||||||
|
|||||||
@@ -29,3 +29,22 @@ func (c *ReportController) StatisticsReportForOrders() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 查询售后单统计信息
|
||||||
|
// @Description 根据门店idlist和时间范围查询
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param storeIDs formData string true "京西门店ID列表[1,2,3]"
|
||||||
|
// @Param fromDate formData string true "开始日期(包含),格式(2006-01-02 00:00:00)"
|
||||||
|
// @Param toDate formData string true "结束日期(包含),格式(2006-01-02 00:00:00)"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /StatisticsReportForAfsOrders [post]
|
||||||
|
func (c *ReportController) StatisticsReportForAfsOrders() {
|
||||||
|
c.callStatisticsReportForAfsOrders(func(params *tReportStatisticsReportForAfsOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
var storeIDList []int
|
||||||
|
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
|
||||||
|
retVal, err = report.GetStatisticsReportForAfsOrders(params.Ctx, storeIDList, params.FromDate, params.ToDate)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ type SysController struct {
|
|||||||
beego.Controller
|
beego.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Title 得到京西门店信息
|
// @Title 得到微信token
|
||||||
// @Description 得到京西门店信息,如下条件之间是与的关系
|
// @Description 得到微信token
|
||||||
// @Param accessKey query string true "假token"
|
// @Param accessKey query string true "假token"
|
||||||
// @Param oldToken query string false "之前的token"
|
// @Param oldToken query string false "之前的token"
|
||||||
// @Param waitSecond query int false "等待秒数"
|
// @Param waitSecond query int false "等待秒数"
|
||||||
@@ -37,6 +37,40 @@ func (c *SysController) GetWXToken() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 得到易联云token
|
||||||
|
// @Description 得到易联云token
|
||||||
|
// @Param accessKey query string true "假token"
|
||||||
|
// @Param oldToken query string false "之前的token"
|
||||||
|
// @Param waitSecond query int false "等待秒数"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetYLYToken [get]
|
||||||
|
func (c *SysController) GetYLYToken() {
|
||||||
|
c.callGetYLYToken(func(params *tSysGetYLYTokenParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
if params.AccessKey == globals.GetWeixinTokenKey {
|
||||||
|
retVal = syseventhub.SysEventHub.GetYLYToken(params.OldToken, time.Duration(params.WaitSecond)*time.Second)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Title 得到微盟token
|
||||||
|
// @Description 得到微盟token
|
||||||
|
// @Param accessKey query string true "假token"
|
||||||
|
// @Param oldToken query string false "之前的token"
|
||||||
|
// @Param waitSecond query int false "等待秒数"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetWeimobToken [get]
|
||||||
|
func (c *SysController) GetWeimobToken() {
|
||||||
|
c.callGetWeimobToken(func(params *tSysGetWeimobTokenParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
if params.AccessKey == globals.GetWeixinTokenKey {
|
||||||
|
retVal = syseventhub.SysEventHub.GetWeimobToken(params.OldToken, time.Duration(params.WaitSecond)*time.Second)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 得到饿百RTF转换内容
|
// @Title 得到饿百RTF转换内容
|
||||||
// @Description 得到饿百RTF转换内容
|
// @Description 得到饿百RTF转换内容
|
||||||
// @Param imgListStr query string true "逗号分隔的图片列表可以是转义后的"
|
// @Param imgListStr query string true "逗号分隔的图片列表可以是转义后的"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/cs"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasks"
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasks"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
@@ -14,11 +15,14 @@ type WeimobController struct {
|
|||||||
|
|
||||||
func (c *WeimobController) onCallbackMsg() {
|
func (c *WeimobController) onCallbackMsg() {
|
||||||
if true { //c.Ctx.Input.Method() == http.MethodPost {
|
if true { //c.Ctx.Input.Method() == http.MethodPost {
|
||||||
callbackResponse := weimobapi.SuccessResponse
|
msg, callbackResponse := api.WeimobAPI.GetCallbackMsg(c.Ctx.Input.RequestBody)
|
||||||
// msg, callbackResponse := api.WeimobAPI.GetCallbackMsg(c.Ctx.Input.RequestBody)
|
if callbackResponse == nil {
|
||||||
// if callbackResponse == nil {
|
// callbackResponse = wsc.OnCallbackMsg(msg)
|
||||||
// callbackResponse = wsc.OnCallbackMsg(msg)
|
callbackResponse = cs.OnCallbackMsg(msg)
|
||||||
// }
|
}
|
||||||
|
if callbackResponse == nil {
|
||||||
|
callbackResponse = weimobapi.SuccessResponse
|
||||||
|
}
|
||||||
c.Data["json"] = callbackResponse
|
c.Data["json"] = callbackResponse
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
26
controllers/wxpay_callback.go
Normal file
26
controllers/wxpay_callback.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/wxpay"
|
||||||
|
"github.com/astaxie/beego"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WXPayController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *WXPayController) Msg() {
|
||||||
|
if c.Ctx.Input.Method() == http.MethodPost {
|
||||||
|
var callbackResponse *wxpay.CallbackResponse
|
||||||
|
|
||||||
|
if callbackResponse == nil {
|
||||||
|
callbackResponse = wxpay.SuccessResponse
|
||||||
|
}
|
||||||
|
c.Data["xml"] = callbackResponse
|
||||||
|
c.ServeXML()
|
||||||
|
} else {
|
||||||
|
c.Abort("404")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,8 @@ var (
|
|||||||
|
|
||||||
GetWeixinTokenURL string
|
GetWeixinTokenURL string
|
||||||
GetWeixinTokenKey string
|
GetWeixinTokenKey string
|
||||||
|
GetYLYTokenURL string
|
||||||
|
GetWeimobTokenURL string
|
||||||
|
|
||||||
StoreName string
|
StoreName string
|
||||||
|
|
||||||
@@ -82,6 +84,8 @@ func Init() {
|
|||||||
WxBackstageHost = beego.AppConfig.DefaultString("wxBackstageHost", "")
|
WxBackstageHost = beego.AppConfig.DefaultString("wxBackstageHost", "")
|
||||||
|
|
||||||
GetWeixinTokenURL = beego.AppConfig.DefaultString("getWeixinTokenURL", "")
|
GetWeixinTokenURL = beego.AppConfig.DefaultString("getWeixinTokenURL", "")
|
||||||
|
GetYLYTokenURL = beego.AppConfig.DefaultString("getYLYTokenURL", "")
|
||||||
|
GetWeimobTokenURL = beego.AppConfig.DefaultString("getWeimobTokenURL", "")
|
||||||
GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "")
|
GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "")
|
||||||
|
|
||||||
StoreName = beego.AppConfig.DefaultString("storeName", "京西菜市")
|
StoreName = beego.AppConfig.DefaultString("storeName", "京西菜市")
|
||||||
|
|||||||
12
main.go
12
main.go
@@ -118,14 +118,10 @@ func main() {
|
|||||||
globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err)
|
globals.SugarLogger.Errorf("RefreshWeixinToken failed with error:%s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// if err := tasks.RefreshElmToken(); err != nil {
|
if err := tasks.RefreshWeimobToken(); err != nil {
|
||||||
// globals.SugarLogger.Errorf("RefreshElmToken failed with error:%s", err)
|
globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err)
|
||||||
// return
|
return
|
||||||
// }
|
}
|
||||||
// if err := tasks.RefreshWeimobToken(); err != nil {
|
|
||||||
// globals.SugarLogger.Errorf("RefreshWeimobToken failed with error:%s", err)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
if err := tasks.RefreshYilianyunToken(); err != nil {
|
if err := tasks.RefreshYilianyunToken(); err != nil {
|
||||||
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
|
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -796,7 +796,7 @@ func init() {
|
|||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetAfsOrders",
|
Method: "GetAfsOrders",
|
||||||
Router: `/GetAfsOrders`,
|
Router: `/GetAfsOrders`,
|
||||||
AllowHTTPMethods: []string{"get"},
|
AllowHTTPMethods: []string{"get","post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
@@ -841,7 +841,7 @@ func init() {
|
|||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetOrders",
|
Method: "GetOrders",
|
||||||
Router: `/GetOrders`,
|
Router: `/GetOrders`,
|
||||||
AllowHTTPMethods: []string{"get"},
|
AllowHTTPMethods: []string{"get","post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
@@ -972,6 +972,24 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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",
|
||||||
|
Router: `/StatisticsReportForAfsOrders`,
|
||||||
|
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: "StatisticsReportForOrders",
|
||||||
|
Router: `/StatisticsReportForOrders`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "AddCategory",
|
Method: "AddCategory",
|
||||||
@@ -1647,6 +1665,24 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetWeimobToken",
|
||||||
|
Router: `/GetWeimobToken`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SysController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetYLYToken",
|
||||||
|
Router: `/GetYLYToken`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "CancelTask",
|
Method: "CancelTask",
|
||||||
@@ -1934,13 +1970,5 @@ func init() {
|
|||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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: "StatisticsReportForOrders",
|
|
||||||
Router: `/StatisticsReportForOrders`,
|
|
||||||
AllowHTTPMethods: []string{"post"},
|
|
||||||
MethodParams: param.Make(),
|
|
||||||
Filters: nil,
|
|
||||||
Params: nil})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ func init() {
|
|||||||
beego.AutoRouter(&controllers.WeimobController{})
|
beego.AutoRouter(&controllers.WeimobController{})
|
||||||
beego.AutoRouter(&controllers.WeixinController{})
|
beego.AutoRouter(&controllers.WeixinController{})
|
||||||
beego.AutoRouter(&controllers.DingDingController{})
|
beego.AutoRouter(&controllers.DingDingController{})
|
||||||
|
beego.AutoRouter(&controllers.WXPayController{})
|
||||||
|
|
||||||
// 如下都是用于检测存活的空接口
|
// 如下都是用于检测存活的空接口
|
||||||
beego.Any("/", func(ctx *beecontext.Context) {
|
beego.Any("/", func(ctx *beecontext.Context) {
|
||||||
|
|||||||
Reference in New Issue
Block a user