Merge branch 'mark' of e.coding.net:rosydev/jx-callback into mark
This commit is contained in:
@@ -15,12 +15,16 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"github.com/360EntSecGroup-Skylar/excelize"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
|
||||
"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/ddmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
@@ -63,12 +67,24 @@ type DataFailed struct {
|
||||
Comment string `json:"备注"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
GoodsID string `json:"商品编码"`
|
||||
GoodsName string `json:"商品名称"`
|
||||
GoodsNum int `json:"订货数量"`
|
||||
}
|
||||
|
||||
type ExcelParam struct {
|
||||
SpuCode string
|
||||
Name string
|
||||
Price float64
|
||||
}
|
||||
|
||||
type OrderList struct {
|
||||
Name string `json:"name"`
|
||||
Phone string `json:"phone"`
|
||||
OrderNo int64 `json:"orderNo"`
|
||||
}
|
||||
|
||||
var (
|
||||
sheetMap = map[string]*SheetParam{
|
||||
"蔬菜": &SheetParam{
|
||||
@@ -142,6 +158,11 @@ var (
|
||||
"商品名称",
|
||||
"备注",
|
||||
}
|
||||
titleList = []string{
|
||||
"商品编码",
|
||||
"商品名称",
|
||||
"订货数量",
|
||||
}
|
||||
dataSuccess DataSuccessLock
|
||||
dataFailed DataFailedLock
|
||||
)
|
||||
@@ -711,46 +732,236 @@ func UploadExeclAndPushMsg(sheetList []*excel.Obj2ExcelSheetConfig, name string)
|
||||
}
|
||||
|
||||
func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
//获取微盟所有商品
|
||||
// param := &weimobapi.QueryGoodsListParam{
|
||||
// GoodsStatus: 0,
|
||||
// PageNum: 1,
|
||||
// PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds,
|
||||
// }
|
||||
// goodsList, err := GetWeiMobGoodsList(param)
|
||||
// if err != nil {
|
||||
// baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err)
|
||||
// }
|
||||
// taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
// switch step {
|
||||
// case 0:
|
||||
// taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
// v := batchItemList[0].(*weimobapi.GoodsInfo)
|
||||
// goodsDetail, err := api.WeimobAPI.QueryGoodsDetail(v.GoodsID)
|
||||
// if err != nil {
|
||||
// baseapi.SugarLogger.Errorf("QueryGoodsDetail error:%v", err)
|
||||
// }
|
||||
// storeSkuBindInfo := &cms.StoreSkuBindInfo{
|
||||
// NameID: goodsDetail.SkuMap.SingleSku.OuterSkuCode,
|
||||
// UnitPrice: goodsDetail.SkuMap.SingleSku.CostPrice,
|
||||
// }
|
||||
// retVal =
|
||||
// return retVal, err
|
||||
// }
|
||||
// taskParallel := tasksch.NewParallelTask("获取微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, goodsList)
|
||||
// tasksch.HandleTask(taskParallel, task, true).Run()
|
||||
// _, err = taskParallel.GetResult(0)
|
||||
// case 1:
|
||||
// cms.UpdateStoresSkus(ctx, storeIDs, skuBindInfos, isAsync, isContinueWhenError)
|
||||
// }
|
||||
// }
|
||||
// taskSeq := tasksch.NewSeqTask2("根据微盟商品更新京西价", ctx, isContinueWhenError, taskSeqFunc, 2)
|
||||
// tasksch.HandleTask(taskSeq, nil, true).Run()
|
||||
// if !isAsync {
|
||||
// _, err = taskSeq.GetResult(0)
|
||||
// hint = "1"
|
||||
// } else {
|
||||
// hint = taskSeq.GetID()
|
||||
// }
|
||||
var (
|
||||
storeSkuBindInfoList []interface{}
|
||||
skuBindInfos []*cms.StoreSkuBindInfo
|
||||
)
|
||||
//获取微盟所有上架商品
|
||||
queryParameter := &weimobapi.QueryGoodsListRequestVo{
|
||||
GoodsStatus: weimobapi.GoodsTypeNormal,
|
||||
}
|
||||
param := &weimobapi.QueryGoodsListParam{
|
||||
PageNum: 1,
|
||||
PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds,
|
||||
QueryParameter: queryParameter,
|
||||
}
|
||||
goodsList, err := GetWeiMobGoodsList(param)
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Errorf("GetWeiMobGoodsList error:%v", err)
|
||||
}
|
||||
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
v := batchItemList[0].(*weimobapi.GoodsInfo)
|
||||
goodsDetail, err := api.WeimobAPI.QueryGoodsDetail(v.GoodsID)
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Errorf("QueryGoodsDetail error:%v", err)
|
||||
}
|
||||
if goodsDetail.OuterGoodsCode != "" && goodsDetail.IsPutAway == weimobapi.GoodsTypeNormal {
|
||||
nameID := int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))
|
||||
unitPrice := int(utils.Float64TwoInt64(goodsDetail.SkuMap.SingleSku.CostPrice * 100))
|
||||
storeSkuBindInfo := &cms.StoreSkuBindInfo{
|
||||
NameID: nameID,
|
||||
UnitPrice: unitPrice,
|
||||
}
|
||||
retVal = []*cms.StoreSkuBindInfo{storeSkuBindInfo}
|
||||
}
|
||||
return retVal, err
|
||||
}
|
||||
taskParallel := tasksch.NewParallelTask("获取微盟商品", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, goodsList)
|
||||
tasksch.HandleTask(taskParallel, task, true).Run()
|
||||
storeSkuBindInfoList, err = taskParallel.GetResult(0)
|
||||
case 1:
|
||||
for _, v := range storeSkuBindInfoList {
|
||||
skuBindInfos = append(skuBindInfos, v.(*cms.StoreSkuBindInfo))
|
||||
}
|
||||
cms.UpdateStoresSkus(ctx, storeIDs, skuBindInfos, isAsync, isContinueWhenError)
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
taskSeq := tasksch.NewSeqTask2("根据微盟商品更新京西价", ctx, isContinueWhenError, taskSeqFunc, 2)
|
||||
tasksch.HandleTask(taskSeq, nil, true).Run()
|
||||
if !isAsync {
|
||||
_, err = taskSeq.GetResult(0)
|
||||
hint = "1"
|
||||
} else {
|
||||
hint = taskSeq.GetID()
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
func GetWeimobOrders(ctx *jxcontext.Context, fromTime, toTime string, params map[string]interface{}) (result []*OrderList, err error) {
|
||||
if fromTime != "" && toTime != "" {
|
||||
fromTimeParam := utils.Str2Time(fromTime).UnixNano() / 1e6
|
||||
toTimeParam := utils.Str2Time(toTime).UnixNano() / 1e6
|
||||
if params["keyword"] != nil {
|
||||
if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown {
|
||||
resultList, err := GetSingleOrderResultList(params)
|
||||
result = append(result, resultList...)
|
||||
return result, err
|
||||
} else {
|
||||
orderList, err := GetWeimobOrdersList(fromTimeParam, toTimeParam, params["keyword"].(string))
|
||||
return orderList, err
|
||||
}
|
||||
} else {
|
||||
orderList, err := GetWeimobOrdersList(fromTimeParam, toTimeParam, "")
|
||||
return orderList, err
|
||||
}
|
||||
}
|
||||
if fromTime == "" && toTime == "" && params["keyword"] != nil {
|
||||
if jxutils.GetPossibleVendorIDFromVendorOrderID(params["keyword"].(string)) > model.VendorIDUnknown {
|
||||
resultList, err := GetSingleOrderResultList(params)
|
||||
result = append(result, resultList...)
|
||||
return result, err
|
||||
} else {
|
||||
orderList, err := GetWeimobOrdersList(0, 0, params["keyword"].(string))
|
||||
return orderList, err
|
||||
}
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func GetWeimobOrdersList(fromTimeParam, toTimeParam int64, keyword string) (aList []*OrderList, err error) {
|
||||
var queryParameter *weimobapi.MerchantOrderListQueryParameter
|
||||
if fromTimeParam == 0 && toTimeParam == 0 {
|
||||
queryParameter = &weimobapi.MerchantOrderListQueryParameter{
|
||||
CreateStartTime: time.Now().AddDate(0, -2, 0).UnixNano() / 1e6,
|
||||
CreateEndTime: time.Now().UnixNano() / 1e6,
|
||||
}
|
||||
} else {
|
||||
queryParameter = &weimobapi.MerchantOrderListQueryParameter{
|
||||
CreateStartTime: fromTimeParam,
|
||||
CreateEndTime: toTimeParam,
|
||||
}
|
||||
}
|
||||
param := &weimobapi.QueryOrdersListParam{
|
||||
PageNum: 1,
|
||||
PageSize: weimobapi.QueryOrdersListPageSize,
|
||||
QueryParameter: queryParameter,
|
||||
}
|
||||
for {
|
||||
orderList, _, err2 := api.WeimobAPI.QueryOrdersList(param)
|
||||
err = err2
|
||||
if len(orderList) > 0 {
|
||||
if keyword != "" {
|
||||
for _, v := range orderList {
|
||||
if ContainsKeyword(v, keyword) {
|
||||
var aOrder = &OrderList{
|
||||
Name: v.ReceiverName,
|
||||
OrderNo: v.OrderNo,
|
||||
Phone: v.ReceiverMobile,
|
||||
}
|
||||
aList = append(aList, aOrder)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for _, v := range orderList {
|
||||
var aOrder = &OrderList{
|
||||
Name: v.ReceiverName,
|
||||
OrderNo: v.OrderNo,
|
||||
Phone: v.ReceiverMobile,
|
||||
}
|
||||
aList = append(aList, aOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(orderList) < param.PageSize {
|
||||
break
|
||||
}
|
||||
param.PageNum++
|
||||
}
|
||||
return aList, err
|
||||
}
|
||||
|
||||
func GetWeimobOrderDetail(orderNo int64) (order *weimobapi.OrderDetail, err error) {
|
||||
return api.WeimobAPI.QueryOrderDetail2(orderNo, false)
|
||||
}
|
||||
|
||||
func GetSingleOrderResultList(params map[string]interface{}) (result []*OrderList, err error) {
|
||||
weimobOrderID := params["keyword"].(string)
|
||||
orderSingle, err := GetWeimobOrderDetail(utils.Str2Int64(weimobOrderID))
|
||||
orderList := &OrderList{
|
||||
Name: orderSingle.DeliveryDetail.LogisticsDeliveryDetail.ReceiverName,
|
||||
Phone: orderSingle.DeliveryDetail.LogisticsDeliveryDetail.ReceiverMobile,
|
||||
OrderNo: orderSingle.OrderNo,
|
||||
}
|
||||
result = append(result, orderList)
|
||||
return result, err
|
||||
}
|
||||
|
||||
func ContainsKeyword(v *weimobapi.OrderInfo, keyword string) bool {
|
||||
return strings.Contains(v.ReceiverName, keyword) || strings.Contains(utils.Int64ToStr(v.OrderNo), keyword) || strings.Contains(v.ReceiverMobile, keyword)
|
||||
}
|
||||
|
||||
func GetWeimobOrdersExcel(ctx *jxcontext.Context, OrderNo string) (err error) {
|
||||
var (
|
||||
DataFineList []*Data //精品
|
||||
DataHairyList []*Data //毛菜
|
||||
)
|
||||
orderSingle, err := GetWeimobOrderDetail(utils.Str2Int64(OrderNo))
|
||||
itemList := orderSingle.ItemList
|
||||
for _, v := range itemList {
|
||||
if v.GoodsCode[0:1] == "0" {
|
||||
DataHairy := &Data{
|
||||
GoodsID: v.GoodsCode,
|
||||
GoodsName: v.GoodsTitle,
|
||||
GoodsNum: v.SkuNum,
|
||||
}
|
||||
DataHairyList = append(DataHairyList, DataHairy)
|
||||
} else {
|
||||
DataFine := &Data{
|
||||
GoodsID: v.GoodsCode,
|
||||
GoodsName: v.GoodsTitle,
|
||||
GoodsNum: v.SkuNum,
|
||||
}
|
||||
DataFineList = append(DataFineList, DataFine)
|
||||
}
|
||||
}
|
||||
WriteToExcel2(ctx, DataFineList, DataHairyList)
|
||||
return err
|
||||
}
|
||||
|
||||
func WriteToExcel2(ctx *jxcontext.Context, DataFineList, DataHairyList []*Data) (err error) {
|
||||
var (
|
||||
sheetList1 []*excel.Obj2ExcelSheetConfig
|
||||
sheetList2 []*excel.Obj2ExcelSheetConfig
|
||||
downloadURL1, downloadURL2 string
|
||||
fileName1, fileName2 string
|
||||
noticeMsg string
|
||||
)
|
||||
excelConf1 := &excel.Obj2ExcelSheetConfig{
|
||||
Title: "sheet1",
|
||||
Data: DataFineList,
|
||||
CaptionList: titleList,
|
||||
}
|
||||
sheetList1 = append(sheetList1, excelConf1)
|
||||
excelConf2 := &excel.Obj2ExcelSheetConfig{
|
||||
Title: "sheet1",
|
||||
Data: DataHairyList,
|
||||
CaptionList: titleList,
|
||||
}
|
||||
sheetList2 = append(sheetList2, excelConf2)
|
||||
noticeMsg += "[详情点我]"
|
||||
if len(DataFineList) > 0 {
|
||||
downloadURL1, fileName1, err = UploadExeclAndPushMsg(sheetList1, "京西采购_精品")
|
||||
noticeMsg += "path1=" + downloadURL1 + " "
|
||||
} else {
|
||||
baseapi.SugarLogger.Debug("WriteToExcel: DataFineList is nil!")
|
||||
}
|
||||
if len(DataHairyList) > 0 {
|
||||
downloadURL2, fileName2, err = UploadExeclAndPushMsg(sheetList2, "京西采购_毛菜")
|
||||
noticeMsg += "path2=" + downloadURL2
|
||||
} else {
|
||||
baseapi.SugarLogger.Debug("WriteToExcel: DataHairyList is nil!")
|
||||
}
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName1, fileName2, err)
|
||||
} else {
|
||||
if authInfo, err := ctx.GetV2AuthInfo(); err == nil {
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "导出微盟订单商品成功", noticeMsg)
|
||||
baseapi.SugarLogger.Debugf("WriteToExcel:upload %s ,%s success, downloadURL1:%s ,downloadURL2:%s", fileName1, fileName2, downloadURL1, downloadURL2)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -62,3 +62,33 @@ func (c *YongHuiController) UpdateJxPriceByWeimob() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 查询微盟订单
|
||||
// @Description 查询微盟订单
|
||||
// @Param token header string true "认证token"
|
||||
// @Param keyword query string false "查询关键字"
|
||||
// @Param fromTime formData string false "订单起始时间 (yyyy-mm-dd 00:00:00)"
|
||||
// @Param toTime formData string false "订单结束时间 (yyyy-mm-dd 00:00:00)"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetWeimobOrders [post]
|
||||
func (c *YongHuiController) GetWeimobOrders() {
|
||||
c.callGetWeimobOrders(func(params *tYonghuiGetWeimobOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = yonghui.GetWeimobOrders(params.Ctx, params.FromTime, params.ToTime, params.MapData)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 根据微盟订单号生成Excel
|
||||
// @Description 根据微盟订单号生成Excel
|
||||
// @Param token header string true "认证token"
|
||||
// @Param orderNo formData string true "订单号"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetWeimobOrdersExcel [post]
|
||||
func (c *YongHuiController) GetWeimobOrdersExcel() {
|
||||
c.callGetWeimobOrdersExcel(func(params *tYonghuiGetWeimobOrdersExcelParams) (retVal interface{}, errCode string, err error) {
|
||||
err = yonghui.GetWeimobOrdersExcel(params.Ctx, params.OrderNo)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2016,6 +2016,24 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetWeimobOrders",
|
||||
Router: `/GetWeimobOrders`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetWeimobOrdersExcel",
|
||||
Router: `/GetWeimobOrdersExcel`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"],
|
||||
beego.ControllerComments{
|
||||
Method: "LoadExcelByYongHui",
|
||||
@@ -2025,4 +2043,13 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:YongHuiController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateJxPriceByWeimob",
|
||||
Router: `/UpdateJxPriceByWeimob`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user