Merge remote-tracking branch 'origin/jdshop' into jxact
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package orderman
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
@@ -29,7 +30,12 @@ import (
|
||||
"github.com/astaxie/beego/orm"
|
||||
)
|
||||
|
||||
var (
|
||||
orderNoBeginTimestamp int64
|
||||
)
|
||||
|
||||
func init() {
|
||||
orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix()
|
||||
}
|
||||
|
||||
type tSkuCountPrice struct {
|
||||
@@ -493,7 +499,10 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
||||
v.JxSkuID = skuBindInfo.SkuID
|
||||
//京东商城的话,门店里可能取不到对应商品
|
||||
if order.VendorID == model.VendorIDJDShop {
|
||||
v.JxSkuID = v.SkuID
|
||||
if v.SkuID == 0 && v.JxSkuID != 0 {
|
||||
v.SkuID = v.JxSkuID
|
||||
}
|
||||
// v.JxSkuID = v.SkuID
|
||||
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{order.StoreID}, []int{v.SkuID})
|
||||
if len(storeSkus) > 0 {
|
||||
v.ShopPrice = int64(storeSkus[0].Price)
|
||||
@@ -627,6 +636,7 @@ func (c *OrderManager) updateOrderOtherInfo(order *model.GoodsOrder, db *dao.Dao
|
||||
} else {
|
||||
order.EarningType = model.EarningTypeQuote
|
||||
}
|
||||
order.OrderPayPercentage = payPercentage
|
||||
}
|
||||
if err = c.updateOrderSkuOtherInfo(order, db, payPercentage, changePriceType); err == nil {
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
@@ -1314,15 +1324,15 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
|
||||
type tCount struct {
|
||||
Count int `json:"count"`
|
||||
}
|
||||
var count = &tCount{}
|
||||
var counts []*tCount
|
||||
sql := `
|
||||
SELECT count(*) count FROM goods_order WHERE store_id = ? AND order_create_at >= ? AND order_create_at <= ? AND vendor_id = ?
|
||||
SELECT count(*) count FROM goods_order WHERE store_id = ? AND order_created_at >= ? AND order_created_at <= ? AND vendor_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
order.StoreID, utils.Time2Date(time.Now()), utils.Time2Date(time.Now().AddDate(0, 0, 1)), order.VendorID,
|
||||
}
|
||||
err = dao.GetRow(dao.GetDB(), &count, sql, sqlParams)
|
||||
order.OrderSeq = count.Count + 1
|
||||
err = dao.GetRows(dao.GetDB(), &counts, sql, sqlParams)
|
||||
order.OrderSeq = counts[0].Count + 1
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1414,7 +1424,10 @@ func MergeJdsOrders(ctx *jxcontext.Context, vendorOrderIDs []string) (vendorOrde
|
||||
order.SalePrice = salePrice
|
||||
order.ShopPrice = shopPrice
|
||||
order.TotalShopMoney = totalShop
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(orders[0].VendorOrderID2)*10000) + utils.Int2Str(99)
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(orders[0].VendorOrderID2)*10000) + utils.Int2Str(time.Now().Second())
|
||||
if len(order.VendorOrderID) < 18 {
|
||||
order.VendorOrderID = order.VendorOrderID + "0"
|
||||
}
|
||||
order.VendorOrderID2 = strings.Join(orderIDs, ",")
|
||||
order.Status = model.OrderStatusNew
|
||||
setJdsOrderSeq(order)
|
||||
@@ -1589,12 +1602,15 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
||||
if goodsOrders[0].Status != model.OrderStatusCanceled {
|
||||
err = jdshop.ChangeOrderStatus(goodsOrders[0].VendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
|
||||
}
|
||||
suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
||||
suffix++
|
||||
// suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
||||
// suffix++
|
||||
if len(order.VendorOrderID2) > 18 {
|
||||
order.VendorOrderID2 = order.VendorOrderID2[0:12]
|
||||
}
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*100000) + utils.Int2Str(suffix)
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*10000) + utils.Int2Str(time.Now().Second())
|
||||
if len(order.VendorOrderID) < 18 {
|
||||
order.VendorOrderID = order.VendorOrderID + "0"
|
||||
}
|
||||
}
|
||||
for _, sku := range skus {
|
||||
sku.VendorOrderID = order.VendorOrderID
|
||||
@@ -1745,7 +1761,7 @@ func UpdateWaybillDesiredFee(ctx *jxcontext.Context, vendorOrderID string, desir
|
||||
waybill := &model.Waybill{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
OrderVendorID: order.VendorID,
|
||||
VendorWaybillID: "-1",
|
||||
VendorWaybillID: utils.Int64ToStr(GenOrderNo(ctx)),
|
||||
WaybillVendorID: -1,
|
||||
Status: model.WaybillStatusDelivered,
|
||||
WaybillCreatedAt: time.Now(),
|
||||
@@ -1755,7 +1771,7 @@ func UpdateWaybillDesiredFee(ctx *jxcontext.Context, vendorOrderID string, desir
|
||||
DesiredFee: int64(desiredFee),
|
||||
}
|
||||
dao.CreateEntity(db, waybill)
|
||||
order.VendorWaybillID = "-1"
|
||||
order.VendorWaybillID = waybill.VendorWaybillID
|
||||
dao.UpdateEntity(db, order, "VendorWaybillID")
|
||||
} else {
|
||||
bill.DesiredFee = int64(desiredFee)
|
||||
@@ -1769,3 +1785,49 @@ func AcceptOrRefuseOrder(ctx *jxcontext.Context, vendorOrderID string, vendorID
|
||||
handler := partner.GetPurchaseOrderHandlerFromVendorID(vendorID)
|
||||
return handler.AcceptOrRefuseOrder(order, isAccept, ctx.GetUserName())
|
||||
}
|
||||
|
||||
func GenOrderNo(ctx *jxcontext.Context) (orderNo int64) {
|
||||
const prefix = 88
|
||||
const randPartNum = 1000
|
||||
orderNo = time.Now().Unix() - orderNoBeginTimestamp
|
||||
// fmt.Println(orderNo)
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
return orderNo
|
||||
}
|
||||
|
||||
func RefreshJdsOrderConsigneeInfo(ctx *jxcontext.Context, vendorOrderID string) (err error) {
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJDShop)
|
||||
if order == nil {
|
||||
return fmt.Errorf("未查询到此京东商城订单!")
|
||||
}
|
||||
waybill, err := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID)
|
||||
if waybill != nil {
|
||||
return fmt.Errorf("已经创建了三方运单不允许修改联系人信息!")
|
||||
}
|
||||
jdsOrder, err := jdshop.GetJdsOrder(order.VendorOrderID2)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if jdsOrder == nil {
|
||||
return fmt.Errorf("未查询到对应的京东商城订单!")
|
||||
}
|
||||
order.ConsigneeAddress = jdshop.Decrypt(jdsOrder.ConsigneeInfo.FullAddress)
|
||||
order.ConsigneeName = jdshop.Decrypt(jdsOrder.ConsigneeInfo.Fullname)
|
||||
order.ConsigneeMobile = jdshop.Decrypt(jdsOrder.ConsigneeInfo.Mobile)
|
||||
order.ConsigneeMobile2 = jdshop.Decrypt(jdsOrder.ConsigneeInfo.Telephone)
|
||||
order.BuyerComment = jdsOrder.OrderRemark
|
||||
if order.ConsigneeAddress != "" {
|
||||
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddress(order.ConsigneeAddress, "")
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
|
||||
}
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"ConsigneeAddress", "ConsigneeName", "ConsigneeMobile", "ConsigneeMobile2", "BuyerComment", "ConsigneeLng", "ConsigneeLat"})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -938,7 +938,7 @@ func (c *OrderManager) getAfsOrderSkuInfo4ExportOrders(ctx *jxcontext.Context, f
|
||||
sql := `
|
||||
SELECT t2.*
|
||||
FROM afs_order t1
|
||||
JOIN order_sku_financial t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id AND t2.is_afs_order = 1
|
||||
JOIN order_sku_financial t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id AND t2.is_afs_order = 1 AND t1.afs_order_id = t2.afs_order_id
|
||||
WHERE t1.afs_finished_at >= ? AND t1.afs_finished_at <= ? AND t1.status = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
push "git.rosy.net.cn/jx-callback/business/jxutils/unipush"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||
@@ -13,7 +15,6 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/authz"
|
||||
"git.rosy.net.cn/jx-callback/business/authz/autils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/netprinter"
|
||||
@@ -556,6 +557,8 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
}
|
||||
s.updateOrderByBill(order, bill, false)
|
||||
s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
|
||||
//若接单时间不在门店的营业时间范围内要取消运单
|
||||
s.cancelWaybillNotInStoreOpentime(savedOrderInfo, bill)
|
||||
//京东商城的话,需要去把订单出库,如果是转移过的订单,则需要修改转移订单号
|
||||
if order.VendorID == model.VendorIDJDShop {
|
||||
s.solutionJdsOrder(bill)
|
||||
@@ -677,6 +680,31 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) cancelWaybillNotInStoreOpentime(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
if savedOrderInfo != nil {
|
||||
//TODO 2020-09-07 不在门店的营业时间内取消运单
|
||||
order := savedOrderInfo.order
|
||||
if savedOrderInfo.storeDetail != nil {
|
||||
if savedOrderInfo.storeDetail.OpenTime1 != 0 && savedOrderInfo.storeDetail.CloseTime1 != 0 {
|
||||
time1 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime1, time.Now())
|
||||
time2 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime1, time.Now())
|
||||
if time.Now().Sub(time1) < 0 || time.Now().Sub(time2) > 0 {
|
||||
if savedOrderInfo.storeDetail.OpenTime2 != 0 && savedOrderInfo.storeDetail.CloseTime2 != 0 {
|
||||
time3 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.OpenTime2, time.Now())
|
||||
time4 := jxutils.JxOperationTime2TimeByDate(savedOrderInfo.storeDetail.CloseTime2, time.Now())
|
||||
if time.Now().Sub(time3) < 0 || time.Now().Sub(time4) > 0 {
|
||||
s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
|
||||
}
|
||||
} else {
|
||||
s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *DefScheduler) sendCourierOrderSMS(bill *model.Waybill) (err error) {
|
||||
err = smsmsg.NotifyNewCourierOrder(bill)
|
||||
return err
|
||||
@@ -766,7 +794,6 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
||||
} else {
|
||||
err = fmt.Errorf("不在门店营业时间范围内!")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -807,14 +834,14 @@ func (s *DefScheduler) cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo
|
||||
func (s *DefScheduler) solutionJdsOrder(bill *model.Waybill) (err error) {
|
||||
if len(bill.VendorOrderID) > 12 {
|
||||
//表示此订单是京东商城2次转移的订单,不用出库,但要去修改运单号
|
||||
if utils.Str2Int(bill.VendorOrderID[12:len(bill.VendorOrderID)]) > 2 {
|
||||
err = jdshop.CurPurchaseHandler.OrderTransfer(jxcontext.AdminCtx, bill.VendorOrderID, bill.VendorWaybillID, true)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Errorf("京东商城订单自动转移失败!", err)
|
||||
}
|
||||
} else {
|
||||
err = jdshop.CurPurchaseHandler.OrderExport(jxcontext.AdminCtx, bill.VendorOrderID, bill.VendorWaybillID, true)
|
||||
}
|
||||
// if utils.Str2Int(bill.VendorOrderID[12:len(bill.VendorOrderID)]) > 2 {
|
||||
// err = jdshop.CurPurchaseHandler.OrderTransfer(jxcontext.AdminCtx, bill.VendorOrderID, bill.VendorWaybillID, true)
|
||||
// if err != nil {
|
||||
// globals.SugarLogger.Errorf("京东商城订单自动转移失败!", err)
|
||||
// }
|
||||
// } else {
|
||||
// err = jdshop.CurPurchaseHandler.OrderExport(jxcontext.AdminCtx, bill.VendorOrderID, bill.VendorWaybillID, true)
|
||||
// }
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -1444,6 +1471,7 @@ func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
|
||||
smsmsg.NotifyNewOrder(order)
|
||||
smsmsg.NotifyNewUserOrder(order)
|
||||
}
|
||||
push.NotifyNewOrder(order)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1682,3 +1682,5 @@ func checkPriceDefendOrderByPrice(db *dao.DaoDB, storeID, skuID, stock, jxPrice
|
||||
}
|
||||
return stock
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@ import (
|
||||
"time"
|
||||
"unicode/utf8"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/authz"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/yinbaoapi"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals/refutil"
|
||||
@@ -1530,6 +1532,12 @@ func TmpGetJxBadCommentsByStoreId(ctx *jxcontext.Context, keyword string, storeI
|
||||
return retVal, err
|
||||
}
|
||||
|
||||
type GetStoreCourierMapsResult struct {
|
||||
storeCourierMaps *model.StoreCourierMap
|
||||
CourierAddress string `json:"courierAddress"`
|
||||
CourierPhone string `json:"courierPhone"`
|
||||
}
|
||||
|
||||
func GetStoreCourierMaps(ctx *jxcontext.Context, db *dao.DaoDB, storeID int, vendorID int) (storeCourierMaps []*model.StoreCourierMap, err error) {
|
||||
cond := map[string]interface{}{
|
||||
model.FieldStoreID: storeID,
|
||||
@@ -1601,9 +1609,9 @@ func addStoreCourierMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendorID
|
||||
err = ErrCanNotFindVendor
|
||||
}
|
||||
//同步美团配送与否状态及美团门店是否存在
|
||||
if outStoreCourierMap.VendorID == model.VendorIDMTPS {
|
||||
SetMTPSStatus(jxcontext.AdminCtx, outStoreCourierMap.StoreID, outStoreCourierMap.Status)
|
||||
}
|
||||
// if outStoreCourierMap.VendorID == model.VendorIDMTPS {
|
||||
// SetMTPSStatus(jxcontext.AdminCtx, outStoreCourierMap.StoreID, outStoreCourierMap.Status)
|
||||
// }
|
||||
return outStoreCourierMap, err
|
||||
}
|
||||
|
||||
@@ -3534,3 +3542,107 @@ func GetJdDeliveryArea(ctx *jxcontext.Context, storeIDs []int) (err error) {
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateStorePushClient(ctx *jxcontext.Context, storeID int, cID string) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
storePushClients, err := dao.GetStorePushClient(db, storeID, cID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(storePushClients) == 0 {
|
||||
storePushClient := &model.StorePushClient{
|
||||
StoreID: storeID,
|
||||
ClientID: cID,
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(storePushClient, ctx.GetUserName())
|
||||
dao.CreateEntity(db, storePushClient)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func CreateStoreAudit(ctx *jxcontext.Context, storeAudit *model.StoreAudit) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
storeAudits, err := dao.GetStoreAudit(db, []int{model.StoreAuditStatusOnline}, storeAudit.UserID, "")
|
||||
if len(storeAudits) > 0 {
|
||||
return fmt.Errorf("您已申请过入驻,请不要重复申请!")
|
||||
}
|
||||
if storeAudit.UserID == "" {
|
||||
storeAudit.UserID = ctx.GetUserID()
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(storeAudit, ctx.GetUserName())
|
||||
dao.CreateEntity(db, storeAudit)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetStoreAudit(ctx *jxcontext.Context, statuss []int, keyword, applyTimeStart, applyTimeEnd, auditTimeStart, auditTimeEnd string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var (
|
||||
applyTimeStartp, applyTimeEndp, auditTimeStartp, auditTimeEndp time.Time
|
||||
db = dao.GetDB()
|
||||
)
|
||||
if applyTimeStart != "" {
|
||||
applyTimeStartp = utils.Str2Time(applyTimeStart)
|
||||
}
|
||||
if applyTimeEnd != "" {
|
||||
applyTimeEndp = utils.Str2Time(applyTimeEnd)
|
||||
}
|
||||
if auditTimeStart != "" {
|
||||
auditTimeStartp = utils.Str2Time(auditTimeStart)
|
||||
}
|
||||
if auditTimeEnd != "" {
|
||||
auditTimeEndp = utils.Str2Time(auditTimeEnd)
|
||||
}
|
||||
pagedInfo, err = dao.GetStoreAuditPage(db, statuss, keyword, applyTimeStartp, applyTimeEndp, auditTimeStartp, auditTimeEndp, pageSize, offset)
|
||||
return pagedInfo, err
|
||||
}
|
||||
|
||||
func StoreAudit(ctx *jxcontext.Context, storeAudits []*model.StoreAudit, status int) (err error) {
|
||||
db := dao.GetDB()
|
||||
if status == model.StoreAuditStatusOnline {
|
||||
return fmt.Errorf("审核标志不正确!")
|
||||
}
|
||||
task := tasksch.NewParallelTask("StoreAudit", tasksch.NewParallelConfig().SetParallelCount(5).SetIsContinueWhenError(true), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
storeAudit := batchItemList[0].(*model.StoreAudit)
|
||||
storeAudits, err := dao.GetStoreAudit(db, []int{model.StoreAuditStatusOnline}, storeAudit.UserID, "")
|
||||
if len(storeAudits) == 0 || err != nil {
|
||||
return retVal, fmt.Errorf("未查询到待审核信息!")
|
||||
}
|
||||
if len(storeAudits) > 1 {
|
||||
return retVal, fmt.Errorf("查询到该用户的待审核信息大于1条!userID: [%s]", storeAudit.UserID)
|
||||
}
|
||||
//审核通过
|
||||
if status == model.StoreAuditStatusCreated {
|
||||
storeAudits[0].AuditStatus = model.StoreAuditStatusCreated
|
||||
//添加门店
|
||||
storeExt := &StoreExt{}
|
||||
utils.Map2StructByJson(utils.Struct2MapByJson(&storeAudit), &storeExt, false)
|
||||
storeID, err := CreateStore(ctx, storeExt, ctx.GetUserName())
|
||||
if err != nil {
|
||||
return retVal, fmt.Errorf(err.Error())
|
||||
}
|
||||
err = AddUsers4Role(ctx, autils.NewRole(authz.StoreRoleBoss, storeID), []string{storeAudit.UserID})
|
||||
if err != nil {
|
||||
return retVal, fmt.Errorf(err.Error())
|
||||
}
|
||||
} else if status == model.StoreAuditStatusRejected {
|
||||
storeAudits[0].Status = model.StoreAuditStatusRejected
|
||||
} else {
|
||||
return retVal, fmt.Errorf("审核标志不正确!")
|
||||
}
|
||||
storeAudits[0].LastOperator = ctx.GetUserName()
|
||||
storeAudits[0].Remark = storeAudit.Remark
|
||||
_, err = dao.UpdateEntity(db, storeAudits[0], "UserID", "Status", "Remark")
|
||||
//是否推送app消息
|
||||
if err == nil {
|
||||
|
||||
}
|
||||
return retVal, err
|
||||
}, storeAudits)
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
task.GetID()
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ import (
|
||||
"time"
|
||||
"unicode"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/auth2"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
@@ -206,6 +208,14 @@ type MatterStock struct {
|
||||
Stock int `json:"stock"`
|
||||
}
|
||||
|
||||
type ActStoreSkuParam struct {
|
||||
model.ActStoreSku
|
||||
|
||||
ActualActPrice int64 `json:"actualActPrice,omitempty"` // 单品级活动用,创建活动时商品的活动价格
|
||||
VendorPrice int64 `json:"vendorPrice,omitempty"` // 创建活动时的平台价格
|
||||
ErrMsg string `json:"errMsg,omitempty"`
|
||||
}
|
||||
|
||||
const (
|
||||
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
||||
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
|
||||
@@ -1285,6 +1295,9 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
||||
skuBind.JxPrice = jxPrice
|
||||
updateFieldMap["UnitPrice"] = 1
|
||||
updateFieldMap["JxPrice"] = 1
|
||||
|
||||
//TODO 2020-09-08 如果改价时商品在做直降,要取消这个商品的直降,再通过改价比例修改活动价,再上这个直降
|
||||
// checkActDirectDown(ctx, skuBind, beforeMsg)
|
||||
}
|
||||
}
|
||||
if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 {
|
||||
@@ -1350,6 +1363,47 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
|
||||
return skuIDs, err
|
||||
}
|
||||
|
||||
// func checkActDirectDown(ctx *jxcontext.Context, skuBind *model.StoreSkuBind, beforeSkuBind tStoreSkuBindAndSpec) (err error) {
|
||||
// var (
|
||||
// originPrice = beforeSkuBind.Price
|
||||
// price = skuBind.Price
|
||||
// db = dao.GetDB()
|
||||
// pageSize = 9999
|
||||
// // percent = price / originPrice
|
||||
// )
|
||||
// if paged, _ := dao.QueryActs(db, 0, 0, pageSize, -1, "", -1, []int{model.ActStatusCreated}, []int{model.ActSkuDirectDown}, nil, skuBind.StoreID, []int{skuBind.SkuID}, 0, utils.ZeroTimeValue, utils.ZeroTimeValue, time.Now().AddDate(0, -2, 0), time.Now()); len(paged.Data) > 0 {
|
||||
// for _, act := range paged.Data {
|
||||
// if _, actStoreSkus, err := dao.GetActStoreSkuVendorList(db, act.ID, nil, []int{skuBind.StoreID}, []int{skuBind.SkuID}, "", 0, pageSize); err == nil && len(actStoreSkus) > 0 {
|
||||
// var (
|
||||
// handler = partner.GetPurchasePlatformFromVendorID(actStoreSkus[0].VendorID).(partner.IPurchasePlatformActHandler)
|
||||
// actStoreSkuParam []*ActStoreSkuParam
|
||||
// )
|
||||
// for _, actStoreSku := range actStoreSkus {
|
||||
// aa := &ActStoreSkuParam{
|
||||
// ActStoreSku: model.ActStoreSku{
|
||||
// StoreID: skuBind.StoreID,
|
||||
// SkuID: actStoreSku.SkuID,
|
||||
// ActID: act.ID,
|
||||
// },
|
||||
// }
|
||||
// actStoreSkuParam = append(actStoreSkuParam, aa)
|
||||
// }
|
||||
// DeleteActStoreSkuBind(ctx, db, act.ID, actStoreSkuParam)
|
||||
// actMap, err := dao.GetActVendorInfo(db, act.ID, []int{actStoreSkus[0].VendorID})
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, act.ID, nil, nil, nil)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// handler.SyncAct(ctx, nil, actMap[actStoreSkus[0].VendorID], nil, actStoreSkuMap[actStoreSkus[0].VendorID])
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return err
|
||||
// }
|
||||
|
||||
func getSkuSaleStatus(inSkuBind *StoreSkuBindSkuInfo, skuNameBindInfo *StoreSkuBindInfo) int {
|
||||
tempSale := 0
|
||||
if inSkuBind != nil {
|
||||
@@ -4643,7 +4697,8 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto
|
||||
// globals.SugarLogger.Debugf("doStoreSkuAudit return2 storeID : %v nameID: %v", storeID, skuBindInfo.NameID)
|
||||
// return false, err
|
||||
// }
|
||||
if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini {
|
||||
if ctx.GetLoginType() != weixin.AuthTypeMP && ctx.GetLoginType() != weixin.AuthTypeMini && ctx.GetLoginType() != weixin.AuthTypeWxApp && ctx.GetLoginType() != auth2.AuthTypeMobile {
|
||||
globals.SugarLogger.Debugf("doStoreSkuAudit return3 storeID : %v loginType: %v", storeID, ctx.GetLoginType())
|
||||
authInfo, err := ctx.GetV2AuthInfo()
|
||||
if err == nil && authInfo != nil {
|
||||
if len(storeAudits) > 0 {
|
||||
@@ -4940,3 +4995,127 @@ func GetSpecialtyStoreSkus(ctx *jxcontext.Context, storeIDs, vendorIDs []int) (e
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func checkActUpdate(actID int, actMap map[int]*model.Act2) (err error) {
|
||||
if len(actMap) == 0 {
|
||||
return fmt.Errorf("活动%d不存在或已被取消", actID)
|
||||
}
|
||||
errList := errlist.New()
|
||||
for vendorID, act := range actMap {
|
||||
if vendorID == model.VendorIDEBAI && act.CreateType != model.ActCreateTypeAPI {
|
||||
errList.AddErr(fmt.Errorf("饿百平台不支持修改或取消网页活动"))
|
||||
}
|
||||
}
|
||||
return errList.GetErrListAsOne()
|
||||
}
|
||||
|
||||
func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actStoreSkuParam []*ActStoreSkuParam) (originSyncStatus int8, err error) {
|
||||
actMap, err := dao.GetActVendorInfo(db, actID, nil)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if err = checkActUpdate(actID, actMap); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, actID, nil, nil, nil)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
act := actMap[partner.GetVendorIDsFromActMap(actMap)[0]]
|
||||
if act.Status != model.ActStatusCreated || time.Now().Sub(act.EndAt) > 0 {
|
||||
return 0, fmt.Errorf("当前活动状态:%s,不能进行此操作,或已过期", model.ActStatusName[act.Status])
|
||||
}
|
||||
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil || err != nil {
|
||||
dao.Rollback(db)
|
||||
if r != nil {
|
||||
panic(r)
|
||||
}
|
||||
}
|
||||
}()
|
||||
actStoreSkuParamMap := make(map[int64]*ActStoreSkuParam)
|
||||
for _, v := range actStoreSkuParam {
|
||||
actStoreSkuParamMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v
|
||||
if _, err = dao.DeleteEntityLogically(db, &model.ActStoreSku{}, nil, ctx.GetUserName(),
|
||||
map[string]interface{}{
|
||||
model.FieldActID: actID,
|
||||
model.FieldStoreID: v.StoreID,
|
||||
model.FieldSkuID: v.SkuID,
|
||||
}); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
isNeedCancelAct := true
|
||||
for vendorID, act := range actMap {
|
||||
originSyncStatus |= act.SyncStatus
|
||||
isDeleteAll := true
|
||||
isDeleteAtLeastOne := false
|
||||
if true { //actStoreSkuParam != nil {
|
||||
actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuMap[vendorID])
|
||||
for storeID := range actStoreSkuMap {
|
||||
for _, actStoreSku := range actStoreSkuMap[storeID] {
|
||||
if actStoreSkuParam == nil || actStoreSkuParamMap[jxutils.Combine2Int(actStoreSku.StoreID, actStoreSku.SkuID)] != nil {
|
||||
if act.Type == model.ActSkuFake {
|
||||
_, err = dao.DeleteEntityLogically(db, &model.ActStoreSkuMap{}, nil, ctx.GetUserName(),
|
||||
map[string]interface{}{
|
||||
model.FieldActID: actID,
|
||||
model.FieldStoreID: actStoreSku.StoreID,
|
||||
model.FieldSkuID: actStoreSku.SkuID,
|
||||
})
|
||||
} else {
|
||||
_, err = dao.UpdateEntityLogically(db, partner.ActStoreSku2ActStoreSkuMap(actStoreSku),
|
||||
map[string]interface{}{
|
||||
model.FieldSyncStatus: actStoreSku.SyncStatus | model.SyncFlagDeletedMask,
|
||||
}, ctx.GetUserName(), nil)
|
||||
}
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
isDeleteAtLeastOne = true
|
||||
} else {
|
||||
isNeedCancelAct = false
|
||||
isDeleteAll = false
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
isDeleteAll = true
|
||||
isDeleteAtLeastOne = true
|
||||
}
|
||||
if isDeleteAll || isDeleteAtLeastOne {
|
||||
syncStatus := int8(model.SyncFlagModifiedMask)
|
||||
if isDeleteAll {
|
||||
syncStatus = model.SyncFlagDeletedMask
|
||||
}
|
||||
syncStatus |= act.SyncStatus
|
||||
if act.Type != model.ActSkuFake && vendorID != model.VendorIDJX {
|
||||
if _, err = dao.UpdateEntityLogically(db, partner.Act2ActMap(act),
|
||||
map[string]interface{}{
|
||||
model.FieldSyncStatus: syncStatus,
|
||||
}, ctx.GetUserName(), nil); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
}
|
||||
if isDeleteAll != isNeedCancelAct {
|
||||
globals.SugarLogger.Warnf("deleteActStoreBind, actID:%d isDeleteAll:%t != isNeedCancelAct:%t", act.ID, isDeleteAll, isNeedCancelAct)
|
||||
}
|
||||
}
|
||||
|
||||
if isNeedCancelAct {
|
||||
act := &model.Act{}
|
||||
act.ID = actID
|
||||
if _, err = dao.UpdateEntityLogically(db, act,
|
||||
map[string]interface{}{
|
||||
model.FieldStatus: model.ActStatusCanceled,
|
||||
}, ctx.GetUserName(), nil); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
dao.Commit(db)
|
||||
return originSyncStatus, err
|
||||
}
|
||||
|
||||
@@ -1331,9 +1331,9 @@ func SetMTPSStatus(ctx *jxcontext.Context, storeId, courierStatus int) {
|
||||
goto ifExist
|
||||
} else {
|
||||
/*如果通过名字找不到,那就先通过ID去找名字*/
|
||||
ShopInfo, _ := api.MtpsAPI.ShopQuery(strconv.Itoa(storeId))
|
||||
ShopInfo, _ := api.MtpsAPI.GetStoreInfo(storeId)
|
||||
if ShopInfo != nil {
|
||||
ShopName = ShopInfo.ShopName
|
||||
ShopName = ShopInfo[0].PoiName
|
||||
if ShopName == "" {
|
||||
ShopName = StoreLists[0].Name[:len(StoreLists[0].Name)-3]
|
||||
}
|
||||
@@ -1345,8 +1345,23 @@ func SetMTPSStatus(ctx *jxcontext.Context, storeId, courierStatus int) {
|
||||
goto ifNotExist
|
||||
}
|
||||
} else {
|
||||
/*如果通过ID找不到,那就直接去判断名字*/
|
||||
goto NameProblem
|
||||
StoreCourierList, _ := dao.GetStoreCourierList(dao.GetDB(), []int{storeId}, []int{model.VendorIDMTPS}, model.StoreStatusAll, model.StoreAuditStatusAll)
|
||||
if len(StoreCourierList) > 0 {
|
||||
ShopInfo, _ := api.MtpsAPI.GetStoreInfo(utils.Str2Int(StoreCourierList[0].VendorStoreID))
|
||||
if ShopInfo != nil {
|
||||
ShopName = ShopInfo[0].PoiName
|
||||
StoreInfoList, _ = api.MtpsAPI.GetStoreStatus(ShopName)
|
||||
if StoreInfoList != nil && StoreInfoList.DataList != nil {
|
||||
goto ifExist
|
||||
} else {
|
||||
/*如果通过API返回的名字也找不到*/
|
||||
goto ifNotExist
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/*如果通过ID找不到,那就直接去判断名字*/
|
||||
goto NameProblem
|
||||
}
|
||||
}
|
||||
NameProblem:
|
||||
{
|
||||
|
||||
@@ -300,7 +300,7 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
|
||||
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
|
||||
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
skuItem.SkuNameOrigin = jxutils.ComposeSkuNameOriginal(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0)
|
||||
if skuItem.ImgWatermark != "" {
|
||||
if skuItem.ImgWatermark != "" && model.IsSyncStatusUpdate(skuItem.SkuSyncStatus) && skuItem.VendorID != model.VendorIDJD {
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*skuItem.ExPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*skuItem.ExPrefixEnd) <= 0 {
|
||||
downLoad, _ := uploadImgStandard(skuItem.ImgWatermark)
|
||||
skuItem.ImgMix = jxutils.MixWatermarkImg(downLoad, skuItem.ImgOrigin, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
@@ -443,7 +443,6 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
// if vendorID == model.VendorIDJDShop {
|
||||
// formalizeStoreSkuListForJds(skus)
|
||||
// }
|
||||
|
||||
singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
|
||||
storeSkuHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
|
||||
reorderHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IStoreSkuSorter)
|
||||
@@ -462,9 +461,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
var failedList []*partner.StoreSkuInfoWithErr
|
||||
for _, sku := range skus {
|
||||
if vendorID == model.VendorIDJDShop && storeID != model.JdShopMainStoreID {
|
||||
if sku.SkuSyncStatus != 0 {
|
||||
sku.SkuSyncStatus = model.SyncFlagSaleMask
|
||||
}
|
||||
return
|
||||
}
|
||||
if !useVendorPriceDirectly &&
|
||||
!isSkuLockTimeValid(sku) {
|
||||
@@ -645,6 +642,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
||||
updateList = rList2
|
||||
}
|
||||
}
|
||||
|
||||
task := tasksch.NewParallelTask("syncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError2), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
step := batchItemList[0].(int)
|
||||
|
||||
@@ -287,9 +287,9 @@ func Init() {
|
||||
"04:05:06",
|
||||
})
|
||||
//京东的订单信息解密密钥获取
|
||||
// ScheduleTimerFuncByInterval(func() {
|
||||
// jdshop.InitKey()
|
||||
// }, 10*time.Second, 8*time.Hour)
|
||||
ScheduleTimerFuncByInterval(func() {
|
||||
jdshop.InitKey()
|
||||
}, 10*time.Second, 8*time.Hour)
|
||||
ScheduleTimerFunc("ChangeJxPriceByDiscountAct", func() {
|
||||
act.ChangeJxPriceByDiscountAct(jxcontext.AdminCtx)
|
||||
}, discountActJxList)
|
||||
@@ -454,6 +454,25 @@ func doDailyWork() {
|
||||
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
|
||||
//同步美团配送与否状态及美团门店是否存在
|
||||
cms.SetMTPSStatus(jxcontext.AdminCtx, 0, 0)
|
||||
//售后单如果超过12小时没有审核,就自动通过
|
||||
RefreshAfsOrderStatusAccess(jxcontext.AdminCtx)
|
||||
}
|
||||
|
||||
func RefreshAfsOrderStatusAccess(ctx *jxcontext.Context) {
|
||||
var (
|
||||
offset = 0
|
||||
pageSize = 9999
|
||||
db = dao.GetDB()
|
||||
)
|
||||
afsOrderList, _, err := dao.GetAfsOrdersByPage(db, "", "", "", time.Now().AddDate(0, 0, -7), time.Now(), offset, pageSize)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, v := range afsOrderList {
|
||||
if v.Status == model.AfsOrderStatusWait4Approve && time.Now().Sub(v.AfsCreatedAt).Hours() > 12 {
|
||||
defsch.FixedScheduler.AgreeOrRefuseRefund(ctx, v.AfsOrderID, v.VendorID, model.AfsTypePartRefund, "超时系统同意")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
|
||||
@@ -13,10 +13,10 @@ import (
|
||||
const (
|
||||
EventCategory = "sys"
|
||||
|
||||
EventTypeWXToken = "wxToken"
|
||||
EventTypeWX2Token = "wx2Token"
|
||||
EventTypeWX3Token = "wx3Token"
|
||||
|
||||
EventTypeWXToken = "wxToken"
|
||||
EventTypeWX2Token = "wx2Token"
|
||||
EventTypeWX3Token = "wx3Token"
|
||||
EventTypePushToken = "pushToken"
|
||||
EventTypeYLYToken = "ylyToken"
|
||||
EventTypeWeimobToken = "weimobToken"
|
||||
)
|
||||
@@ -67,6 +67,13 @@ func (h *Hub) OnNewWX2Token(token string) {
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Hub) OnNewPushToken(token string) {
|
||||
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
|
||||
Type: EventTypePushToken,
|
||||
Data: token,
|
||||
})
|
||||
}
|
||||
|
||||
func (h *Hub) OnNewWX3Token(token string) {
|
||||
h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{
|
||||
Type: EventTypeWX3Token,
|
||||
@@ -99,6 +106,8 @@ func (h *Hub) GetToken(tokenType, oldToken string, waitTime time.Duration) (toke
|
||||
if weimobToken := api.WeimobAPI.GetToken(); weimobToken != nil {
|
||||
token = string(utils.MustMarshal(weimobToken))
|
||||
}
|
||||
case EventTypePushToken:
|
||||
token = api.PushAPI.CBGetToken()
|
||||
case EventTypeWX2Token:
|
||||
token = api.WeixinMiniAPI2.CBGetToken()
|
||||
}
|
||||
@@ -136,3 +145,7 @@ func (h *Hub) GetYLYToken(oldToken string, waitTime time.Duration) (tokenInfo *T
|
||||
func (h *Hub) GetWeimobToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||
return h.GetToken(EventTypeWeimobToken, oldToken, waitTime)
|
||||
}
|
||||
|
||||
func (h *Hub) GetPushToken(oldToken string, waitTime time.Duration) (tokenInfo *TokenInfo) {
|
||||
return h.GetToken(EventTypePushToken, oldToken, waitTime)
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ func GetPossibleVendorIDFromVendorOrderID(vendorOrderID string) (vendorID int) {
|
||||
vendorID = model.VendorIDWSC
|
||||
} else if orderIDLen == len("1000004390") {
|
||||
vendorID = model.VendorIDJX
|
||||
} else if orderIDLen == len("124557362562000001") {
|
||||
} else if orderIDLen == len("124557362562000001") || orderIDLen == len("13153183146800000100") {
|
||||
vendorID = model.VendorIDJDShop
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ const (
|
||||
dingdingTokenExpires = 7200 * time.Second
|
||||
weimobTokenExpires = 7200 * time.Second
|
||||
yilianyunTokenExpires = 30 * 24 * 3600 * time.Second
|
||||
pushTokenExpires = 7200 * time.Second
|
||||
|
||||
maxRefreshGap = 5 * 60 * time.Second
|
||||
errRefreshGap = 10 * time.Second
|
||||
@@ -165,6 +166,33 @@ func RefreshWeixin2Token() (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func RefreshPushToken() (err error) {
|
||||
if api.PushAPI != nil {
|
||||
err = RefreshConfig("push", pushTokenExpires, func() (token string, expireTimeStr string) {
|
||||
globals.SugarLogger.Debugf("RefreshPushToken RunMode:%s", beego.BConfig.RunMode)
|
||||
if globals.IsMainProductEnv() {
|
||||
if tokenInfo, err := api.PushAPI.CBRetrieveToken(); err == nil {
|
||||
globals.SugarLogger.Debugf("RefreshPushToken tokenInfo:%s", utils.Format4Output(tokenInfo, true))
|
||||
token = tokenInfo.Token
|
||||
} else {
|
||||
globals.SugarLogger.Errorf("RefreshPushToken RefreshToken failed with error:%v", err)
|
||||
}
|
||||
} else {
|
||||
if tokenInfo := getPushTokenFromRemote(api.PushAPI.CBGetToken()); tokenInfo != nil {
|
||||
expireTimeStr = utils.Time2Str(time.Now().Add(-pushTokenExpires))
|
||||
token = tokenInfo.Token
|
||||
}
|
||||
}
|
||||
return token, expireTimeStr
|
||||
}, func(value string) {
|
||||
globals.SugarLogger.Debugf("RefreshPushToken setter value:%s", value)
|
||||
syseventhub.SysEventHub.OnNewPushToken(value)
|
||||
api.PushAPI.CBSetToken(value)
|
||||
})
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func RefreshWeixin3Token() (err error) {
|
||||
// if api.WeixinMiniAPI3 != nil {
|
||||
// err = RefreshConfig("wechat3", weixinTokenExpires, func() (token string, expireTimeStr string) {
|
||||
@@ -342,6 +370,15 @@ func getWX2TokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||
return tokenInfo
|
||||
}
|
||||
|
||||
func getPushTokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetPushTokenURL != "" {
|
||||
tokenInfo = PollingRemotEvent(globals.GetPushTokenURL, 0, map[string]interface{}{
|
||||
"oldToken": oldToken,
|
||||
})
|
||||
}
|
||||
return tokenInfo
|
||||
}
|
||||
|
||||
func getWX3TokenFromRemote(oldToken string) (tokenInfo *syseventhub.TokenInfo) {
|
||||
if !globals.IsMainProductEnv() && globals.GetWeixinTokenKey != "" && globals.GetWeixinTokenURL != "" {
|
||||
tokenInfo = PollingRemotEvent(globals.GetWeixinTokenURL, 0, map[string]interface{}{
|
||||
|
||||
74
business/jxutils/unipush/push.go
Normal file
74
business/jxutils/unipush/push.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package push
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/unipushapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"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"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push begin orderID :[%v]", order.VendorOrderID)
|
||||
storePushs, err := dao.GetStorePushClient(db, jxutils.GetSaleStoreIDFromOrder(order), "")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, v := range storePushs {
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString("老板,")
|
||||
sb.WriteString(order.ConsigneeName)
|
||||
sb.WriteString("购买了商品")
|
||||
sb.WriteString(getOrderDetailBrief(order))
|
||||
status, err2 := api.PushAPI.PushToSingle(v.ClientID, false, &unipushapi.Notification{
|
||||
Title: "京西菜市新订单推送",
|
||||
Body: sb.String(),
|
||||
})
|
||||
if err = err2; err != nil {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push error: [%v]", err)
|
||||
continue
|
||||
}
|
||||
if status == unipushapi.SuccessOffLine {
|
||||
_, err = api.PushAPI.PushToSingle(v.ClientID, true, &unipushapi.Notification{
|
||||
Body: sb.String(),
|
||||
})
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push2 error: [%v]", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString(order.Skus[0].SkuName)
|
||||
sb.WriteString("等共")
|
||||
sb.WriteString(utils.Int2Str(order.Skus[0].Count))
|
||||
sb.WriteString("份(")
|
||||
sb.WriteString(jxutils.IntPrice2StandardString(order.Skus[0].SalePrice))
|
||||
sb.WriteString("元/份)等,预计收入")
|
||||
//TODO 2020-07-20 果园和菜市不同
|
||||
var price int64
|
||||
if beego.BConfig.RunMode == "jxgy" {
|
||||
price = order.EarningPrice
|
||||
} else {
|
||||
if order.EarningType == model.EarningTypePoints {
|
||||
price = order.ActualPayPrice
|
||||
} else {
|
||||
price = order.ShopPrice
|
||||
}
|
||||
}
|
||||
sb.WriteString(jxutils.IntPrice2StandardString(price))
|
||||
sb.WriteString("元")
|
||||
return sb.String()
|
||||
}
|
||||
@@ -787,7 +787,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
|
||||
}
|
||||
sql += `
|
||||
FROM goods_order t1
|
||||
LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id
|
||||
LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id AND t1.vendor_order_id = t2.vendor_order_id
|
||||
LEFT JOIN store t5 ON t5.id = IF(t1.jx_store_id <> 0, t1.jx_store_id, t1.store_id)
|
||||
LEFT JOIN place city ON city.code = t5.city_code
|
||||
LEFT JOIN place district ON district.code = t5.district_code`
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/aliupcapi"
|
||||
@@ -231,8 +230,6 @@ func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string,
|
||||
sqlParams = append(sqlParams, parentCatID)
|
||||
}
|
||||
sql += " ORDER BY t1.seq"
|
||||
fmt.Println(sql)
|
||||
fmt.Println(sqlParams)
|
||||
err = GetRows(db, &catList, sql, sqlParams...)
|
||||
return catList, err
|
||||
}
|
||||
|
||||
@@ -813,3 +813,103 @@ func DeleteStoreCategroies(db *DaoDB, userName string, storeID int) (err error)
|
||||
_, err = ExecuteSQL(db, sql, sqlParams)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetStorePushClient(db *DaoDB, storeID int, cID string) (storePushClient []*model.StorePushClient, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM store_push_client
|
||||
WHERE deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if storeID > 0 {
|
||||
sql += " AND store_id = ?"
|
||||
sqlParams = append(sqlParams, storeID)
|
||||
}
|
||||
if cID != "" {
|
||||
sql += " AND client_id = ?"
|
||||
sqlParams = append(sqlParams, cID)
|
||||
}
|
||||
err = GetRows(db, &storePushClient, sql, sqlParams)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return storePushClient, err
|
||||
}
|
||||
|
||||
func GetStoreAudit(db *DaoDB, auditStatuss []int, userID, keyword string) (storeAudit []*model.StoreAudit, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM store_audit
|
||||
WHERE deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(auditStatuss) > 0 {
|
||||
sql += " AND audit_status IN (" + GenQuestionMarks(len(auditStatuss)) + ")"
|
||||
sqlParams = append(sqlParams, auditStatuss)
|
||||
}
|
||||
if userID != "" {
|
||||
sql += " AND user_id = ?"
|
||||
sqlParams = append(sqlParams, userID)
|
||||
}
|
||||
if keyword != "" {
|
||||
sql += " AND (user_id LIKE ? OR name LIKE ? OR tel1 LIKE ? OR tel2 LIKE ? OR address LIKE ?)"
|
||||
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
|
||||
}
|
||||
err = GetRows(db, &storeAudit, sql, sqlParams)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return storeAudit, err
|
||||
}
|
||||
|
||||
type tStoreAudit struct {
|
||||
model.StoreAudit
|
||||
UserName string `json:"userName"`
|
||||
CityName string `json:"cityName"`
|
||||
}
|
||||
|
||||
func GetStoreAuditPage(db *DaoDB, statuss []int, keyword string, applyTimeStart, applyTimeEnd, auditTimeStart, auditTimeEnd time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var requestList []*tStoreAudit
|
||||
sql := `
|
||||
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, b.name user_name, c.name city_name
|
||||
FROM store_audit a
|
||||
JOIN user b ON b.user_id = a.user_id
|
||||
JOIN place c ON c.code = a.city_code
|
||||
WHERE a.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(statuss) > 0 {
|
||||
sql += " AND a.audit_status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||||
sqlParams = append(sqlParams, statuss)
|
||||
}
|
||||
if applyTimeStart != utils.ZeroTimeValue && applyTimeEnd != utils.ZeroTimeValue {
|
||||
sql += " AND a.created_at BETWEEN ? AND ?"
|
||||
sqlParams = append(sqlParams, applyTimeStart, applyTimeEnd)
|
||||
}
|
||||
if auditTimeStart != utils.ZeroTimeValue && auditTimeEnd != utils.ZeroTimeValue {
|
||||
sql += " AND a.updated_at BETWEEN ? AND ?"
|
||||
sqlParams = append(sqlParams, auditTimeStart, auditTimeEnd)
|
||||
}
|
||||
if keyword != "" {
|
||||
sql += " AND (a.user_id LIKE ? OR a.name LIKE ? OR a.tel1 LIKE ? OR a.tel2 LIKE ? OR a.address LIKE ?)"
|
||||
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
|
||||
}
|
||||
sql += " ORDER BY a.updated_at LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
Begin(db)
|
||||
defer Commit(db)
|
||||
if err = GetRows(db, &requestList, sql, sqlParams...); err == nil {
|
||||
return &model.PagedInfo{
|
||||
TotalCount: GetLastTotalRowCount(db),
|
||||
Data: requestList,
|
||||
}, nil
|
||||
}
|
||||
return pagedInfo, err
|
||||
}
|
||||
|
||||
@@ -111,15 +111,16 @@ type GoodsOrder struct {
|
||||
ModelTimeInfo `json:"-"`
|
||||
Flag int `json:"flag"` //非运单调整相关的其它状态
|
||||
|
||||
InvoiceTitle string `orm:"size(64)" json:"invoiceTitle"` // 发票抬头
|
||||
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
|
||||
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
|
||||
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||
FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` //物料配送门店
|
||||
EclpOutID string `orm:"column(eclp_out_id)" json:"eclpOutID"` //物料配送的出库单号
|
||||
AddressID int64 `orm:"column(address_id)" json:"addressID"` //配送地址ID
|
||||
EarningType int `json:"earningType"` //订单结算方式,2为扣点,1为报价
|
||||
OrderType int `json:"orderType"` //订单类型,0为普通订单,1为物料订单,2为进货订单
|
||||
InvoiceTitle string `orm:"size(64)" json:"invoiceTitle"` // 发票抬头
|
||||
InvoiceTaxerID string `orm:"size(32);column(invoice_taxer_id)" json:"invoiceTaxerID"` // 发票纳税人识别码
|
||||
InvoiceEmail string `orm:"size(64)" json:"invoiceEmail"` // 发票邮箱
|
||||
VendorOrgCode string `orm:"size(64)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||
FromStoreID int `orm:"column(from_store_id)" json:"fromStoreID"` //物料配送门店
|
||||
EclpOutID string `orm:"column(eclp_out_id)" json:"eclpOutID"` //物料配送的出库单号
|
||||
AddressID int64 `orm:"column(address_id)" json:"addressID"` //配送地址ID
|
||||
EarningType int `json:"earningType"` //订单结算方式,2为扣点,1为报价
|
||||
OrderType int `json:"orderType"` //订单类型,0为普通订单,1为物料订单,2为进货订单
|
||||
OrderPayPercentage int `json:"orderPayPercentage"`
|
||||
|
||||
// 以下只是用于传递数据
|
||||
OriginalData string `orm:"-" json:"-"`
|
||||
|
||||
@@ -685,3 +685,75 @@ func (*StoreCategoryMap) TableUnique() [][]string {
|
||||
[]string{"StoreID", "CategoryID", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
|
||||
type StorePushClient struct {
|
||||
ModelIDCULD
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||
ClientID string `orm:"column(client_id);size(255)" json:"clientID"`
|
||||
}
|
||||
|
||||
func (*StorePushClient) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"StoreID", "ClientID"},
|
||||
}
|
||||
}
|
||||
|
||||
type StoreAudit struct {
|
||||
ModelIDCULD
|
||||
|
||||
Name string `orm:"size(255)" json:"name"`
|
||||
CityCode int `orm:"default(0);null" json:"cityCode"` // todo ?
|
||||
DistrictCode int `orm:"default(0);null" json:"districtCode"` // todo ?
|
||||
Address string `orm:"size(255)" json:"address"`
|
||||
Tel1 string `orm:"size(32);index" json:"tel1"`
|
||||
Tel2 string `orm:"size(32);index" json:"tel2"`
|
||||
OpenTime1 int16 `json:"openTime1" validate:"max=2359,min=1,ltfield=CloseTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有
|
||||
CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上
|
||||
OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上
|
||||
CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上
|
||||
Lng int `json:"-"` // 乘了10的6次方
|
||||
Lat int `json:"-"` // 乘了10的6次方
|
||||
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
|
||||
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米
|
||||
Status int `json:"status"`
|
||||
SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条)
|
||||
|
||||
IDCardFront string `orm:"size(255);column(id_card_front)" json:"idCardFront"`
|
||||
IDCardBack string `orm:"size(255);column(id_card_back)" json:"idCardBack"`
|
||||
IDCardHand string `orm:"size(255);column(id_card_hand)" json:"idCardHand"`
|
||||
Licence string `orm:"size(255)" json:"licence"` // 营业执照图片
|
||||
LicenceCode string `orm:"size(32)" json:"licenceCode"`
|
||||
|
||||
LicenceType int8 `json:"licenceType"` // 营业执照类型,0:个人,1:公司
|
||||
LicenceCorpName string `orm:"size(64)" json:"licenceCorpName"` // 营业执照公司名称
|
||||
LicenceOwnerName string `orm:"size(8)" json:"licenceOwnerName"` // 法人姓名
|
||||
LicenceAddress string `orm:"size(255)" json:"licenceAddress"` // 地址
|
||||
LicenceValid string `orm:"size(32)" json:"licenceValid"` // 有效期开始
|
||||
LicenceExpire string `orm:"size(32)" json:"licenceExpire"` // 有效期结束
|
||||
|
||||
IDName string `orm:"size(8);column(id_name)" json:"idName"` // 身份证姓名
|
||||
IDCode string `orm:"size(32);column(id_code)" json:"idCode"` // 身份证号
|
||||
IDValid string `orm:"column(id_valid);size(32)" json:"idValid"` // 有效期开始
|
||||
IDExpire string `orm:"column(id_expire);size(32)" json:"idExpire"` // 有效期结束
|
||||
|
||||
Licence2Image string `orm:"size(255)" json:"licence2Image"` // 食品经营许可证
|
||||
Licence2Code string `orm:"size(32)" json:"licence2Code"` // 食品经营许可证编号
|
||||
Licence2Valid string `orm:"size(32)" json:"licence2Valid"` // 有效期开始
|
||||
Licence2Expire string `orm:"size(32)" json:"licence2Expire"` // 有效期结束
|
||||
|
||||
UserID string `orm:"column(user_id);size(32)" json:"userID"` //谁发起的审核就把谁添加到这个门店里
|
||||
AuditStatus int `json:"auditStatus"` //0是待审核,1是通过,-1是不通过
|
||||
Remark string `orm:"size(255)" json:"remark"` //不通过原因
|
||||
}
|
||||
|
||||
func (*StoreAudit) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"Name"},
|
||||
}
|
||||
}
|
||||
|
||||
func (*StoreAudit) TableIndex() [][]string {
|
||||
return [][]string{
|
||||
[]string{"UserID"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ func (c *DeliveryHandler) getBillParams(db *dao.DaoDB, order *model.GoodsOrder)
|
||||
// storeTel = ",门店电话:" + storeDeatail.Tel2
|
||||
// }
|
||||
billParams.ReceiverLng, billParams.ReceiverLat, _ = jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType)
|
||||
billParams.Info = fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4(order.BuyerComment+"取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!"))
|
||||
billParams.Info = fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4("客户电话:"+order.ConsigneeMobile+","+order.BuyerComment+"取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!"))
|
||||
billParams.CargoType = dadaapi.CargoTypeFresh
|
||||
billParams.CargoWeight = float64(jxutils.IntWeight2Float(limitOrderWeight(order.Weight)))
|
||||
billParams.CargoNum = order.GoodsCount
|
||||
|
||||
@@ -244,7 +244,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee
|
||||
// if storeDeatail.Tel2 != "" {
|
||||
// storeTel = ",门店电话:" + storeDeatail.Tel2
|
||||
// }
|
||||
billParams.Note = utils.FilterMb4(order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!")
|
||||
billParams.Note = utils.FilterMb4("客户电话:" + order.ConsigneeMobile + "," + order.BuyerComment + ",取货失败或配送遇到问题请联系18048531223,禁止未配送直接完成定单!")
|
||||
billParams.GoodsDetail = string(utils.MustMarshal(goods))
|
||||
billParams.GoodsPickupInfo = fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq)
|
||||
billParams.PoiSeq = fmt.Sprintf("#%d", order.OrderSeq)
|
||||
|
||||
@@ -71,6 +71,7 @@ var (
|
||||
CancelWaybillReasonStrSwitch2SelfFailed = "转自送失败"
|
||||
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
|
||||
CancelWaybillReasonStrActive = "操作由人员主动发起"
|
||||
CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||
@@ -218,7 +217,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
||||
ConsigneeName: utils.Interface2String(userMap["name"]),
|
||||
ConsigneeMobile: jxutils.FormalizeMobile(utils.Interface2String(userMap["phone"])),
|
||||
ConsigneeAddress: utils.Interface2String(userMap["address"]),
|
||||
CoordinateType: model.CoordinateTypeBaiDu,
|
||||
CoordinateType: model.CoordinateTypeMars,
|
||||
BuyerComment: utils.TrimBlankChar(utils.Interface2String(orderMap["remark"])),
|
||||
ExpectedDeliveredTime: getExpectedDeliveredTime(orderMap),
|
||||
PickDeadline: utils.DefaultTimeValue,
|
||||
@@ -269,12 +268,12 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
||||
deliveryGeo := userMap["coord_amap"].(map[string]interface{})
|
||||
originalLng := utils.Interface2Float64WithDefault(deliveryGeo["longitude"], 0.0) // 饿百的订单在过一段时间后,经纬度信息会变成字符串"**"
|
||||
originalLat := utils.Interface2Float64WithDefault(deliveryGeo["latitude"], 0.0)
|
||||
lng, lat, err2 := api.AutonaviAPI.CoordinateConvert(originalLng, originalLat, autonavi.CoordSysBaidu)
|
||||
if err2 == nil {
|
||||
originalLng = lng
|
||||
originalLat = lat
|
||||
order.CoordinateType = model.CoordinateTypeMars
|
||||
}
|
||||
// lng, lat, err2 := api.AutonaviAPI.CoordinateConvert(originalLng, originalLat, autonavi.CoordSysBaidu)
|
||||
// if err2 == nil {
|
||||
// originalLng = lng
|
||||
// originalLat = lat
|
||||
// order.CoordinateType = model.CoordinateTypeMars
|
||||
// }
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(originalLng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(originalLat)
|
||||
|
||||
|
||||
@@ -402,7 +402,7 @@ func genStoreMapFromStore(store *tEbaiStoreInfo) map[string]interface{} {
|
||||
}
|
||||
}
|
||||
boxFee, _ := dao.GetSysConfigAsInt64(dao.GetDB(), model.ConfigSysEbaiBoxFee)
|
||||
params["package_box_price"] = boxFee
|
||||
params["package_box_price"] = jxutils.IntPrice2Standard(boxFee)
|
||||
params["service_phone"] = store.Tel1
|
||||
params["address"] = store.Address
|
||||
// todo 饿百 开店审核通过后不允许修改商户信息
|
||||
|
||||
@@ -41,6 +41,24 @@ func OnCallbackMsg(msg *jdshopapi.CallBackResult) (err error) {
|
||||
}
|
||||
}
|
||||
})
|
||||
case jcqapi.TopicOrderOut:
|
||||
utils.CallFuncAsync(func() {
|
||||
globals.SugarLogger.Debugf("jdsOrderOut", utils.Format4Output(msg, false))
|
||||
orders := getAllRealOrderID(msg.OrderID)
|
||||
if len(orders) > 0 {
|
||||
for _, order := range orders {
|
||||
if order.ActualPayPrice == 0 {
|
||||
if jxutils.StandardPrice2Int(utils.Str2Float64(msg.OrderPayment)) == 0 {
|
||||
order.ActualPayPrice = jxutils.StandardPrice2Int(utils.Str2Float64(msg.OrderTotalPrice) + utils.Str2Float64(msg.FreightPrice) - utils.Str2Float64(msg.SellerDiscount))
|
||||
} else {
|
||||
order.ActualPayPrice = jxutils.StandardPrice2Int(utils.Str2Float64(msg.OrderPayment))
|
||||
}
|
||||
order.TotalShopMoney = utils.Float64TwoInt64(float64(order.ActualPayPrice) * jdshopapi.JdsPayPercentage)
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"ActualPayPrice", "TotalShopMoney"})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
default:
|
||||
return fmt.Errorf("暂不支持的topic类型!topic: %v", msgType)
|
||||
}
|
||||
@@ -52,10 +70,11 @@ func SaveJdsOrders(msg *jdshopapi.CallBackResult) (err error) {
|
||||
if err != nil || order == nil {
|
||||
return err
|
||||
}
|
||||
order.StoreID = 102919
|
||||
order.JxStoreID = 102919
|
||||
order.StoreName = "商城模板(成都发货)"
|
||||
order.VendorStoreID = model.JdShopMainVendorStoreID
|
||||
// order.StoreID = 102919
|
||||
// order.JxStoreID = 102919
|
||||
// order.StoreName = "商城模板(成都发货)"
|
||||
// order.VendorStoreID = model.JdShopMainVendorStoreID
|
||||
// order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled
|
||||
partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||
noticeMsg := fmt.Sprintf("京东商城新订单,订单号:[%v] ,将要发到的门店id:[%v] , 门店名:[%v]", order.VendorOrderID, order.StoreID, order.StoreName)
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "DDC5657B43EE11E9A9FF525400E86DC0", "京东商城来新订单了!", noticeMsg)
|
||||
@@ -87,7 +106,6 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
ActualPayPrice: jxutils.StandardPrice2Int(utils.Str2Float64(msg.OrderPayment)),
|
||||
Status: model.OrderStatusNew,
|
||||
TotalShopMoney: utils.Float64TwoInt64(math.Round(float64(jxutils.StandardPrice2Int(utils.Str2Float64(msg.OrderPayment))) * jdshopapi.JdsPayPercentage)),
|
||||
DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
|
||||
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
||||
StatusTime: utils.Str2Time(msg.OrderStartTime),
|
||||
OrderSeq: 0,
|
||||
@@ -99,49 +117,8 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddress(order.ConsigneeAddress, "")
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
|
||||
order.CoordinateType = model.CoordinateTypeMars
|
||||
}
|
||||
storeList, err := common.GetStoreListByLocation(jxcontext.AdminCtx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false, true)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error())
|
||||
return order, err
|
||||
}
|
||||
order.StoreID = storeList[0].ID
|
||||
order.StoreName = storeList[0].Name
|
||||
globals.SugarLogger.Debugf("jds GetStoreListByLocation, orderID: %v storeID :%v", order.VendorOrderID, order.StoreID)
|
||||
storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJDShop}, []int{order.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||
if len(storeMaps) > 0 {
|
||||
order.VendorStoreID = storeMaps[0].VendorStoreID
|
||||
}
|
||||
// 如果是暂停,表示是预订单
|
||||
if msg.OrderState == jdshopapi.OrderStatusPause || msg.OrderState == jdshopapi.OrderStatusPopPause {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
// order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
|
||||
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||
} else if msg.OrderState == jdshopapi.OrderStatusWait {
|
||||
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
||||
order.BusinessType = model.BusinessTypeImmediate
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("暂不支持的京东商城订单类型!type: %v", msg.OrderState)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if msg.IDSopShipmenttype == jdshopapi.IdSopShipmenttypeTC {
|
||||
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time)
|
||||
}
|
||||
}
|
||||
|
||||
//结算类型
|
||||
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), order.StoreID, model.VendorIDJDShop)
|
||||
if storeDetail != nil {
|
||||
if storeDetail.PayPercentage < 50 {
|
||||
order.EarningType = model.EarningTypePoints
|
||||
} else {
|
||||
order.EarningType = model.EarningTypeQuote
|
||||
}
|
||||
}
|
||||
setJdsOrderSeq(order)
|
||||
for _, v := range msg.ItemInfoList {
|
||||
sku := &model.OrderSku{
|
||||
VendorID: model.VendorIDJDShop,
|
||||
@@ -151,15 +128,109 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
SkuName: v.SkuName,
|
||||
VendorPrice: jxutils.StandardPrice2Int(utils.Str2Float64(v.JdPrice)),
|
||||
SalePrice: jxutils.StandardPrice2Int(utils.Str2Float64(v.JdPrice)),
|
||||
SkuID: utils.Str2Int(v.OuterSkuID),
|
||||
// SkuID: utils.Str2Int(v.OuterSkuID),
|
||||
}
|
||||
if v.OuterSkuID != "" {
|
||||
sku.SkuID = utils.Str2Int(v.OuterSkuID)
|
||||
}
|
||||
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(v.SkuName)
|
||||
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit)
|
||||
order.Skus = append(order.Skus, sku)
|
||||
}
|
||||
storeList, err := common.GetStoreListByLocation(jxcontext.AdminCtx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 3000, false, true)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error())
|
||||
return order, err
|
||||
}
|
||||
if len(storeList) > 0 {
|
||||
for _, store := range storeList {
|
||||
order.StoreID = store.ID
|
||||
order.JxStoreID = store.ID
|
||||
order.StoreName = store.Name
|
||||
globals.SugarLogger.Debugf("jds GetStoreListByLocation, orderID: %v storeID :%v", order.VendorOrderID, order.StoreID)
|
||||
//结算类型
|
||||
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), order.StoreID, model.VendorIDJDShop)
|
||||
if storeDetail != nil {
|
||||
if storeDetail.PayPercentage < 50 {
|
||||
order.EarningType = model.EarningTypePoints
|
||||
} else {
|
||||
order.EarningType = model.EarningTypeQuote
|
||||
}
|
||||
}
|
||||
var (
|
||||
shopPriceSum int
|
||||
saleNormalSum int
|
||||
)
|
||||
for _, sku := range order.Skus {
|
||||
storeSkuList, _ := dao.GetStoresSkusInfo(dao.GetDB(), []int{order.StoreID}, []int{sku.SkuID})
|
||||
if len(storeSkuList) > 0 && storeSkuList[0].Status == model.StoreSkuBindStatusNormal {
|
||||
saleNormalSum += 1
|
||||
shopPriceSum += storeSkuList[0].Price * sku.Count
|
||||
}
|
||||
}
|
||||
//可售数小于一半就不行
|
||||
if math.Mod(float64(len(order.Skus)), float64(2)) == 0 {
|
||||
if saleNormalSum < len(order.Skus)/2 {
|
||||
buildOrderTo102919(order)
|
||||
continue
|
||||
} else {
|
||||
if order.EarningType == model.EarningTypeQuote && shopPriceSum+700 > int(order.TotalShopMoney) {
|
||||
buildOrderTo102919(order)
|
||||
continue
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if saleNormalSum <= len(order.Skus)/2 {
|
||||
buildOrderTo102919(order)
|
||||
continue
|
||||
} else {
|
||||
if order.EarningType == model.EarningTypeQuote && shopPriceSum+700 > int(order.TotalShopMoney) {
|
||||
buildOrderTo102919(order)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
} else {
|
||||
buildOrderTo102919(order)
|
||||
}
|
||||
storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJDShop}, []int{order.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||
if len(storeMaps) > 0 {
|
||||
order.VendorStoreID = storeMaps[0].VendorStoreID
|
||||
}
|
||||
// 如果是暂停,表示是预订单g
|
||||
if msg.OrderState == jdshopapi.OrderStatusPause || msg.OrderState == jdshopapi.OrderStatusPopPause {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time)
|
||||
}
|
||||
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||
} else if msg.OrderState == jdshopapi.OrderStatusWait {
|
||||
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
||||
order.BusinessType = model.BusinessTypeImmediate
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("暂不支持的京东商城订单类型!type: %v", msg.OrderState)
|
||||
return nil, err
|
||||
}
|
||||
if msg.IDSopShipmenttype == jdshopapi.IdSopShipmenttypeTC {
|
||||
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time)
|
||||
}
|
||||
}
|
||||
setJdsOrderSeq(order)
|
||||
return order, err
|
||||
}
|
||||
|
||||
func buildOrderTo102919(order *model.GoodsOrder) {
|
||||
order.StoreID = 102919
|
||||
order.JxStoreID = 102919
|
||||
order.StoreName = "商城模板(成都发货)"
|
||||
order.VendorStoreID = model.JdShopMainVendorStoreID
|
||||
order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled
|
||||
}
|
||||
|
||||
func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
|
||||
type tCount struct {
|
||||
Count int `json:"count"`
|
||||
@@ -182,6 +253,7 @@ func Decrypt(p string) (result string) {
|
||||
}
|
||||
data, _ := base64.StdEncoding.DecodeString(strings.ReplaceAll(p, " ", "+"))
|
||||
key := GetKey(hex.EncodeToString(data)[4:36])
|
||||
globals.SugarLogger.Debugf("Decrypt keys : %v", key)
|
||||
data2, _ := base64.StdEncoding.DecodeString(key)
|
||||
b := bytes.NewBuffer(data)
|
||||
b.Next(18)
|
||||
@@ -206,3 +278,17 @@ func getRealOrderID(orderID string) (order *model.GoodsOrder) {
|
||||
dao.GetRow(db, &order, sql, sqlParams)
|
||||
return order
|
||||
}
|
||||
|
||||
func getAllRealOrderID(orderID string) (orders []*model.GoodsOrder) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
sql := `
|
||||
SELECT * FROM goods_order WHERE vendor_order_id2 = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
orderID,
|
||||
}
|
||||
dao.GetRows(db, &orders, sql, sqlParams)
|
||||
return orders
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package jdshop
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
@@ -47,12 +48,7 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *
|
||||
return p.Map2Order(utils.Struct2FlatMap(resultOrders)), err
|
||||
}
|
||||
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
|
||||
params := make(map[string]interface{})
|
||||
params["orderID"] = vendorOrderID
|
||||
params["token"] = "JxCaIsHiGetJsdOrderTmpToken_20200731"
|
||||
result, err := apiToYd("order/GetJdsOrder", params)
|
||||
jdsOrder := &jdshopapi.GetOrderResult{}
|
||||
json.Unmarshal([]byte(strings.ReplaceAll(result["data"].(string), "\\", "")), &jdsOrder)
|
||||
jdsOrder, err := GetJdsOrder(vendorOrderID)
|
||||
return status2Jxstatus(jdsOrder.OrderState), err
|
||||
}
|
||||
|
||||
@@ -72,6 +68,7 @@ func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
|
||||
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单在京东商城已被取消!")
|
||||
} else {
|
||||
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "自动拣货完成")
|
||||
err = p.OrderExport(jxcontext.AdminCtx, order.VendorOrderID, order.VendorOrderID, true)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -116,6 +113,32 @@ func (p *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods
|
||||
return err
|
||||
}
|
||||
func (p *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
diffShopPrice int64
|
||||
diffSalePrice int64
|
||||
)
|
||||
if order.Status >= model.OrderStatusDelivering {
|
||||
return fmt.Errorf("配送中以后的订单无法进行售前退款!")
|
||||
}
|
||||
//1、删除原order_sku 中售前调整的商品
|
||||
for _, sku := range removedSkuList {
|
||||
sql := `DELETE FROM order_sku WHERE vendor_order_id = ? AND vendor_id = ? AND sku_id = ?`
|
||||
sqlParams := []interface{}{order.VendorOrderID, order.VendorID, sku.SkuID}
|
||||
dao.ExecuteSQL(db, sql, sqlParams)
|
||||
|
||||
diffShopPrice += sku.ShopPrice
|
||||
diffSalePrice += sku.SalePrice
|
||||
}
|
||||
//2、修改goods_order 中的shopprice,若是扣点的订单,还要改new_earning_price和total_shop_money
|
||||
order.AdjustCount += 1
|
||||
order.ShopPrice = order.ShopPrice - diffShopPrice
|
||||
if order.EarningType == model.EarningTypePoints {
|
||||
order.TotalShopMoney = utils.Float64TwoInt64(float64(float64(order.TotalShopMoney)/jdshopapi.JdsPayPercentage-float64(diffSalePrice)) * jdshopapi.JdsPayPercentage)
|
||||
jxutils.RefreshOrderEarningPrice2(order, order.OrderPayPercentage)
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"TotalShopMoney", "NewEarningPrice"})
|
||||
}
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"AdjustCount", "ShopPrice"})
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -208,3 +231,13 @@ func apiToYd(url string, params map[string]interface{}) (retVal map[string]inter
|
||||
})
|
||||
return retVal, err
|
||||
}
|
||||
|
||||
func GetJdsOrder(vendorOrderID string) (jdsOrder *jdshopapi.GetOrderResult, err error) {
|
||||
params := make(map[string]interface{})
|
||||
params["orderID"] = vendorOrderID
|
||||
params["token"] = jdshopapi.JdsYdToken
|
||||
result, err := apiToYd("order/GetJdsOrder", params)
|
||||
jdsOrder2 := &jdshopapi.GetOrderResult{}
|
||||
err = utils.UnmarshalUseNumber([]byte(strings.ReplaceAll(result["data"].(string), "\\", "")), &jdsOrder2)
|
||||
return jdsOrder2, err
|
||||
}
|
||||
|
||||
@@ -1155,6 +1155,8 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
||||
outOrders, _, _ := tryToSplitMatterOrder(buildJxOrderInfo(order, orderSkus))
|
||||
//以下为仿照CreateOrder,改了一些参数
|
||||
for k, v := range outOrders {
|
||||
v.OrderType = model.OrderTypeMatter
|
||||
v.FromStoreID = order.FromStoreID
|
||||
outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID, false)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1661,7 +1663,7 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result
|
||||
}
|
||||
queryOrderStatus, err := api.JdEclpAPI.QueryOrderStatus(order.EclpOutID)
|
||||
getTrackMessagePlusByOrderResult, err := api.JdEclpAPI.GetTrackMessagePlusByOrder(vendorOrderID)
|
||||
if err != nil {
|
||||
if err != nil || queryOrderStatus == nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(queryOrderStatus.OrderStatusList) > 0 {
|
||||
@@ -1921,6 +1923,10 @@ func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err er
|
||||
// if code == jdeclpapi.SoStatusCode10022 || code == jdeclpapi.SoStatusCode10038 { //表示该订单在京东物流为暂停或已经逆向发货完成
|
||||
if len(order.VendorOrderID) == 14 && order.EclpOutID != "" { //这是不分包的订单
|
||||
_, err = createMatterOrder(buildJxOrderInfo(order, order.Skus), order, int64(01))
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("SendFailedMatterOrder err : [%v]", err)
|
||||
return err
|
||||
}
|
||||
err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason)
|
||||
for _, v := range order.Skus {
|
||||
@@ -1944,7 +1950,7 @@ func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err er
|
||||
}
|
||||
}
|
||||
}
|
||||
err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
// err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason)
|
||||
} else if len(order.VendorOrderID) == 16 && order.EclpOutID != "" { // 这是分包的子订单
|
||||
return fmt.Errorf("请重发主订单!主订单号:[%v]", order.VendorOrderID[len(order.VendorOrderID)-2:])
|
||||
|
||||
@@ -143,6 +143,11 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jd3OrgCode = "359459"
|
||||
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
|
||||
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
|
||||
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
|
||||
|
||||
elmIsProd = false
|
||||
elmToken = "2d2b583447b04b6bba5a6f3faed3559b"
|
||||
elmAppKey = "RwT214gAsS"
|
||||
@@ -181,6 +186,11 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jd3OrgCode = "359459"
|
||||
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
|
||||
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
|
||||
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
@@ -243,6 +253,11 @@ dingdingSecret = "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_Jtv
|
||||
|
||||
dingdingCallbackURL = "http://callback.jxc4.com/dingding/msg"
|
||||
|
||||
pushAppID = "5lyyrvHODG6wC8Sdr3a9h"
|
||||
pushAppKey = "iFrkUDmR2g5eqQpfh2kQ57"
|
||||
pushAppSecret = "WTn53qd6WAAdLMXfmXvzb7"
|
||||
pushMasterSecret= "dGZcR0XGGg7H5Pd7FR3n47"
|
||||
|
||||
[jxgy]
|
||||
httpport = 8088
|
||||
EnableDocs = false
|
||||
@@ -310,6 +325,7 @@ dingdingCallbackURL = "http://callback-jxgy.jxc4.com/dingding/msg"
|
||||
|
||||
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||
getYLYTokenURL = "http://www.jxc4.com/v2/sys/GetYLYToken"
|
||||
getPushTokenURL = "http://www.jxc4.com/v2/sys/GetPushToken"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
@@ -410,6 +426,11 @@ jd2Token = "29e0e567-c475-433a-aff0-37176ee8d8a7"
|
||||
jd2AppKey = "7fb947624ff847ae94ff2f068cc99652"
|
||||
jd2Secret = "1097abd7ef09427099b4922784af123a"
|
||||
|
||||
jd3OrgCode = "359459"
|
||||
jd3Token = "5e2c0a60-4450-40c0-a1da-b560051251ea"
|
||||
jd3AppKey = "21b627c23ea04c69b64b48d0b361213e"
|
||||
jd3Secret = "51cd27a748e64c829b4b7f83f4844610"
|
||||
|
||||
jdEclpAccessToken = "bcb6201b5b3c45a0976dcda5e2dea8aejiwm"
|
||||
jdEclpAppKey = "0D397F05CF11C51BCDCC81744680EBC3"
|
||||
jdEclpAppSecret = "f16a5e57ff4f4f428b702c40d2d4b933"
|
||||
@@ -445,6 +466,7 @@ disableWeimob = false
|
||||
getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken"
|
||||
getWeixin2TokenURL = "http://www.jxc4.com/v2/sys/GetWX2Token"
|
||||
getWeimobTokenURL = "http://www.jxc4.com/v2/sys/GetWeimobToken"
|
||||
getPushTokenURL = "http://www.jxc4.com/v2/sys/GetPushToken"
|
||||
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true"
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ func (c *ActController) CancelAct() {
|
||||
// @Param pageSize query int false "表页大小(缺省全部)"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetActStoreSkuInfo [get]
|
||||
// @router /GetActStoreSkuInfo [get,post]
|
||||
func (c *ActController) GetActStoreSkuInfo() {
|
||||
c.callGetActStoreSkuInfo(func(params *tActGetActStoreSkuInfoParams) (retVal interface{}, errCode string, err error) {
|
||||
var vendorIDs []int
|
||||
|
||||
@@ -825,3 +825,81 @@ func (c *StoreController) GetJdDeliveryArea() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 修改门店对应Cid(个推推送uniapp消息用)
|
||||
// @Description 修改门店对应Cid(个推推送uniapp消息用)
|
||||
// @Param token header string true "认证token"
|
||||
// @Param storeID formData int true "门店ID"
|
||||
// @Param clientID formData string true "cID"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /UpdateStorePushClient [post]
|
||||
func (c *StoreController) UpdateStorePushClient() {
|
||||
c.callUpdateStorePushClient(func(params *tStoreUpdateStorePushClientParams) (retVal interface{}, errCode string, err error) {
|
||||
err = cms.UpdateStorePushClient(params.Ctx, params.StoreID, params.ClientID)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 用户申请门店审核
|
||||
// @Description 用户申请门店审核
|
||||
// @Param token header string true "认证token"
|
||||
// @Param payload formData string true "json数据,store对象"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /CreateStoreAudit [post]
|
||||
func (c *StoreController) CreateStoreAudit() {
|
||||
c.callCreateStoreAudit(func(params *tStoreCreateStoreAuditParams) (retVal interface{}, errCode string, err error) {
|
||||
store := &model.StoreAudit{}
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Payload), store); err == nil {
|
||||
err = cms.CreateStoreAudit(params.Ctx, store)
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 获取用户申请门店审核
|
||||
// @Description 获取用户申请门店审核
|
||||
// @Param token header string true "认证token"
|
||||
// @Param applyTimeStart query string false "申请开始时间"
|
||||
// @Param applyTimeEnd query string false "申请结束时间"
|
||||
// @Param auditTimeStart query string false "审核开始时间"
|
||||
// @Param auditTimeEnd query string false "审核结束时间"
|
||||
// @Param name query string false "审核人"
|
||||
// @Param statuss query string false "审核状态"
|
||||
// @Param keyword query string false "关键字"
|
||||
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
|
||||
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetStoreAudit [get]
|
||||
func (c *StoreController) GetStoreAudit() {
|
||||
c.callGetStoreAudit(func(params *tStoreGetStoreAuditParams) (retVal interface{}, errCode string, err error) {
|
||||
var (
|
||||
statuss []int
|
||||
)
|
||||
if err = jxutils.Strings2Objs(params.Statuss, &statuss); err != nil {
|
||||
return retVal, "", err
|
||||
}
|
||||
retVal, err = cms.GetStoreAudit(params.Ctx, statuss, params.Keyword, params.ApplyTimeStart, params.ApplyTimeEnd, params.AuditTimeStart, params.AuditTimeEnd, params.PageSize, params.Offset)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 门店审核
|
||||
// @Description 门店审核
|
||||
// @Param token header string true "认证token"
|
||||
// @Param payload fomData string true "json数据,storeaudit对象"
|
||||
// @Param status formData int false "审核标志,1通过,-1 不通过"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /StoreAudit [post]
|
||||
func (c *StoreController) StoreAudit() {
|
||||
c.callStoreAudit(func(params *tStoreStoreAuditParams) (retVal interface{}, errCode string, err error) {
|
||||
var stores []*model.StoreAudit
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &stores); err == nil {
|
||||
err = cms.StoreAudit(params.Ctx, stores, params.Status)
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1168,3 +1168,17 @@ func (c *OrderController) AcceptOrRefuseOrder() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 刷新京东商城订单收货人信息
|
||||
// @Description 刷新京东商城订单收货人信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param vendorOrderID formData string true "订单ID"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /RefreshJdsOrderConsigneeInfo [put]
|
||||
func (c *OrderController) RefreshJdsOrderConsigneeInfo() {
|
||||
c.callRefreshJdsOrderConsigneeInfo(func(params *tOrderRefreshJdsOrderConsigneeInfoParams) (retVal interface{}, errCode string, err error) {
|
||||
err = orderman.RefreshJdsOrderConsigneeInfo(params.Ctx, params.VendorOrderID)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -71,6 +71,23 @@ func (c *SysController) GetYLYToken() {
|
||||
})
|
||||
}
|
||||
|
||||
// @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 /GetPushToken [get]
|
||||
func (c *SysController) GetPushToken() {
|
||||
c.callGetPushToken(func(params *tSysGetPushTokenParams) (retVal interface{}, errCode string, err error) {
|
||||
if params.AccessKey == globals.GetWeixinTokenKey {
|
||||
retVal = syseventhub.SysEventHub.GetPushToken(params.OldToken, time.Duration(params.WaitSecond)*time.Second)
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 得到微盟token
|
||||
// @Description 得到微盟token
|
||||
// @Param accessKey query string true "假token"
|
||||
|
||||
@@ -3,6 +3,8 @@ package api
|
||||
import (
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/unipushapi"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/aliupcapi"
|
||||
@@ -46,6 +48,7 @@ var (
|
||||
JdPageAPI *jdapi.API
|
||||
|
||||
Jd2API *jdapi.API
|
||||
Jd3API *jdapi.API
|
||||
FakeJdAPI *jdapi.API
|
||||
JdEclpAPI *jdeclpapi.API
|
||||
JdShopAPI *jdshopapi.API
|
||||
@@ -87,6 +90,8 @@ var (
|
||||
YilianyunAPI2 *yilianyunapi.API
|
||||
ZhongwuAPI *zhongwuapi.API
|
||||
|
||||
PushAPI *unipushapi.API
|
||||
|
||||
Cacher cache.ICacher
|
||||
SMSClient *aliyunsmsclient.SmsClient
|
||||
)
|
||||
@@ -111,6 +116,10 @@ func Init() {
|
||||
// Jd2API.SetJdCookie(beego.AppConfig.DefaultString("jd2StorePageCookie", ""))
|
||||
}
|
||||
|
||||
if globals.Jd3OrgCode != "" {
|
||||
Jd3API = jdapi.New(beego.AppConfig.String("jd3Token"), beego.AppConfig.String("jd3AppKey"), beego.AppConfig.String("jd3Secret"))
|
||||
}
|
||||
|
||||
fakeJdToken := beego.AppConfig.DefaultString("fakeJdToken", "")
|
||||
if fakeJdToken != "" {
|
||||
FakeJdAPI = jdapi.NewFakeJD(fakeJdToken, beego.AppConfig.String("fakeJdBaseURL"))
|
||||
@@ -243,6 +252,7 @@ func Init() {
|
||||
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))
|
||||
YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", ""))
|
||||
ZhongwuAPI = zhongwuapi.New(beego.AppConfig.DefaultInt("zhongwuAppID", 0), beego.AppConfig.DefaultString("zhongwuAppSecret", ""))
|
||||
PushAPI = unipushapi.New(beego.AppConfig.DefaultString("pushAppID", ""), beego.AppConfig.DefaultString("pushAppKey", ""), beego.AppConfig.DefaultString("pushAppSecret", ""), beego.AppConfig.DefaultString("pushMasterSecret", ""))
|
||||
|
||||
SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")
|
||||
}
|
||||
|
||||
@@ -39,6 +39,8 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
||||
pfAPI = api.FakeJdAPI
|
||||
} else if appOrgCode != "" && appOrgCode == globals.Jd2OrgCode {
|
||||
pfAPI = api.Jd2API
|
||||
} else if appOrgCode != "" && appOrgCode == globals.Jd3OrgCode {
|
||||
pfAPI = api.Jd3API
|
||||
}
|
||||
case model.VendorIDMTWM:
|
||||
pfAPI = api.MtwmAPI
|
||||
@@ -52,7 +54,7 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
||||
func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) {
|
||||
switch vendorID {
|
||||
case model.VendorIDJD:
|
||||
appOrgCodeList = jxutils.BatchString2Slice(globals.JdOrgCode, globals.Jd2OrgCode)
|
||||
appOrgCodeList = jxutils.BatchString2Slice(globals.JdOrgCode, globals.Jd2OrgCode, globals.Jd3OrgCode)
|
||||
case model.VendorIDMTWM:
|
||||
appOrgCodeList = []string{api.MtwmAPI.GetAppID()}
|
||||
case model.VendorIDEBAI:
|
||||
|
||||
@@ -38,6 +38,8 @@ func Init() {
|
||||
orm.RegisterModel(&model.SkuCategory{})
|
||||
orm.RegisterModel(&model.ThingMap{})
|
||||
orm.RegisterModel(&model.SkuExinfoMap{})
|
||||
orm.RegisterModel(&model.StorePushClient{})
|
||||
orm.RegisterModel(&model.StoreAudit{})
|
||||
|
||||
orm.RegisterModel(&model.AuthBind{}, &model.User{})
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ var (
|
||||
GetWeixin2TokenURL string
|
||||
GetWeixinTokenKey string
|
||||
GetYLYTokenURL string
|
||||
GetPushTokenURL string
|
||||
GetWeimobTokenURL string
|
||||
|
||||
StoreName string
|
||||
@@ -58,6 +59,7 @@ var (
|
||||
|
||||
JdOrgCode string
|
||||
Jd2OrgCode string
|
||||
Jd3OrgCode string
|
||||
JdLoginName string
|
||||
|
||||
IsStoreSkuAct bool
|
||||
@@ -111,6 +113,7 @@ func Init() {
|
||||
GetYLYTokenURL = beego.AppConfig.DefaultString("getYLYTokenURL", "")
|
||||
GetWeimobTokenURL = beego.AppConfig.DefaultString("getWeimobTokenURL", "")
|
||||
GetWeixinTokenKey = beego.AppConfig.DefaultString("getWeixinTokenKey", "")
|
||||
GetPushTokenURL = beego.AppConfig.DefaultString("getPushTokenURL", "")
|
||||
|
||||
StoreName = beego.AppConfig.String("storeName")
|
||||
StoreNameMtwm = beego.AppConfig.String("storeNameMtwm")
|
||||
@@ -129,6 +132,7 @@ func Init() {
|
||||
TLPayNotifyURL = beego.AppConfig.DefaultString("tonglianPayNotifyURL", "")
|
||||
JdOrgCode = beego.AppConfig.DefaultString("jdOrgCode", "")
|
||||
Jd2OrgCode = beego.AppConfig.DefaultString("jd2OrgCode", "")
|
||||
Jd3OrgCode = beego.AppConfig.DefaultString("jd3OrgCode", "")
|
||||
JdLoginName = beego.AppConfig.DefaultString("jdLoginName", "")
|
||||
IsAddEvent = beego.AppConfig.DefaultBool("addEvent", false)
|
||||
IsStoreSkuAct = !IsProductEnv()
|
||||
|
||||
5
main.go
5
main.go
@@ -147,7 +147,10 @@ func main() {
|
||||
if err := tasks.RefreshYilianyunToken(); err != nil {
|
||||
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
|
||||
return
|
||||
|
||||
}
|
||||
if err := tasks.RefreshPushToken(); err != nil {
|
||||
globals.SugarLogger.Errorf("RefreshPushToken failed with error:%s", err)
|
||||
return
|
||||
}
|
||||
// if globals.IsProductEnv() {
|
||||
// orderman.SaveJdsOrders(nil, time.Now().Add(-2*time.Hour), time.Now())
|
||||
|
||||
@@ -65,7 +65,7 @@ func init() {
|
||||
beego.ControllerComments{
|
||||
Method: "GetActStoreSkuInfo",
|
||||
Router: `/GetActStoreSkuInfo`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
AllowHTTPMethods: []string{"get","post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
@@ -1278,6 +1278,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "RefreshJdsOrderConsigneeInfo",
|
||||
Router: `/RefreshJdsOrderConsigneeInfo`,
|
||||
AllowHTTPMethods: []string{"put"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "RefreshOrderFinancial",
|
||||
@@ -1764,6 +1773,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "CreateStoreAudit",
|
||||
Router: `/CreateStoreAudit`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "CreateStorePriceScore",
|
||||
@@ -1863,6 +1881,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetStoreAudit",
|
||||
Router: `/GetStoreAudit`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetStoreCategoryMap",
|
||||
@@ -1980,6 +2007,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "StoreAudit",
|
||||
Router: `/StoreAudit`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "SyncJdStore",
|
||||
@@ -2079,6 +2115,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateStorePushClient",
|
||||
Router: `/UpdateStorePushClient`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateStoreVendorMap",
|
||||
@@ -2583,6 +2628,15 @@ func init() {
|
||||
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: "GetPushToken",
|
||||
Router: `/GetPushToken`,
|
||||
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: "GetWX2Token",
|
||||
|
||||
Reference in New Issue
Block a user