Files
jx-callback/business/jxstore/cms/order_excel.go

293 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cms
//
//import (
// "encoding/json"
// "errors"
// "fmt"
// "git.rosy.net.cn/baseapi/utils"
// "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/business/partner/purchase/jx/localjx"
// "github.com/360EntSecGroup-Skylar/excelize"
// "io"
// "mime/multipart"
// "strings"
//)
//
//// 根据excel新增待拣货订单
//func CreateOrderByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader) (hint string, err error) {
// if len(files) == 0 {
// return "", errors.New("没有文件上传!")
// }
// fileHeader := files[0]
// file, err := fileHeader.Open()
// hint, err = RefreshJxPriceByExcelBin(ctx, file, true, true)
// file.Close()
// return hint, err
//}
//
//type CreateOrderByExcelStore struct {
// BuyerComment int // 备注
// StoreID int // 门店id
// Skus int // 商品列表
// ExpectedDeliveredTimestamp int // 预期送达时间
// TotalPrice int // 总价格
// FreightPrice int // 运费
// OrderPrice int // 订单价格
// ActualPayPrice int // 顾客实际支付
// OrderID int // 订单id
// StoreName int // 门店名称
// Weight int // 重量
// FromStoreID int // 物料ID
// EarningType int // 结算方式1为报价2为扣点,0无
// OrderType int // 订单类型
// IsBuyNowPrice int // 守价的值只有0和1
// IsPriceDefend int
// OrderID2 int
// UserID int // 用户id
// AddressID int // 收货地址id
// CreateType int // "创建类型, 0:预创建, 1:创建"
// IsDeliverySelf int // 自提
//}
//
//// 赋值excel表字段排序
//func SortExcelTable() *CreateOrderByExcelStore {
// return &CreateOrderByExcelStore{
// StoreID: 1,
// StoreName: 2,
// UserID: 3,
// AddressID: 4,
// Skus: 5,
// Weight: 6,
// TotalPrice: 7,
// FreightPrice: 8,
// OrderPrice: 9,
// ActualPayPrice: 10,
// ExpectedDeliveredTimestamp: 11,
// OrderType: 12,
// FromStoreID: 13,
// EarningType: 14,
// BuyerComment: 15,
//
// CreateType: 16,
// IsDeliverySelf: 17,
// IsPriceDefend: 18,
// IsBuyNowPrice: 19,
// OrderID: 20,
// OrderID2: 21,
// }
//}
//
//// 订单结构体
//type ExcelOrderStruct struct {
// BuyerComment string `json:"buyerComment"` // 备注
// StoreID int `json:"storeID"`
// Skus []*JxSkuInfo `json:"skus"`
// ExpectedDeliveredTimestamp int64 `json:"expectedDeliveredTimestamp"` // 预期送达时间
// TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价
// FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费
// OrderPrice int64 `json:"orderPrice"` // 单位为分 订单商品价格
// ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
// OrderID int64 `json:"orderID"`
// StoreName string `json:"storeName"`
// Weight int `json:"weight"`
// FromStoreID int `json:"fromStoreID"` //
// EarningType int `json:"earningType"`
// OrderType int `json:"orderType"`
// IsBuyNowPrice int `json:"isBuyNowPrice"`
// IsPriceDefend int `json:"isPriceDefend"`
// OrderID2 string `json:"-"` // 订单id2
// UserID string `json:"userID"` // 用户id
// AddressId int64 `json:"address_id"` // 地址id
//}
//
//// 商品列表
//type JxSkuInfo struct {
// SkuID int `json:"skuID"`
// Count int `json:"count"`
// Price int64 `json:"price,omitempty"` // 原价
// SalePrice int64 `json:"salePrice,omitempty"` // 售卖价
// Name string `json:"name"`
// Weight int `json:"weight"`
// GroupSign bool `json:"groupSign"`
// DefendPrice int64 `json:"defendPrice"` //守价
//}
//
//// 解析excel到订单结构体当中
//func GetCellIntoOrder(rowNum int, row []string, sheetParam *CreateOrderByExcelStore, order *ExcelOrderStruct, nameMap map[string]string) (errMsg string) {
// address := make(map[string]int64, 0)
// for k, cell := range row {
// switch k {
// case sheetParam.StoreID:
// order.StoreID = utils.Str2Int(cell)
// case sheetParam.StoreName:
// order.StoreName = cell
// case sheetParam.UserID:
// order.UserID = cell
// case sheetParam.AddressID:
// order.AddressId = utils.Str2Int64(cell)
// case sheetParam.Skus:
// shop := make([]*JxSkuInfo, 0, 0)
// if err := json.Unmarshal([]byte(cell), shop); err != nil {
// return fmt.Sprintf("解析excel文档用户商品列表错,检查数据格式是否正确")
// }
// order.Skus = shop
// case sheetParam.Weight:
// order.Weight = utils.Str2Int(cell)
// case sheetParam.TotalPrice:
// order.TotalPrice = utils.Str2Int64(cell)
// case sheetParam.FreightPrice:
// order.FreightPrice = utils.Str2Int64(cell)
// case sheetParam.OrderPrice:
// order.OrderPrice = utils.Str2Int64(cell)
// case sheetParam.ActualPayPrice:
// order.ActualPayPrice = utils.Str2Int64(cell)
// case :
//
//
//
// }
//
// if k == sheetParam.SkuNameIDCol {
// cellReplace := strings.ReplaceAll(cell, "", ",")
// if cellReplace != "" {
// if cellReplace[len(cellReplace)-1:len(cellReplace)] == "," {
// cellReplace = cellReplace[0 : len(cellReplace)-1]
// }
// nameIDs := strings.Split(cellReplace, ",")
// for _, v := range nameIDs {
// if nameMap[v] != "" {
// return fmt.Sprintf(" Excel中含有重复的nameID[%v]列,[%v]行nameID [%v]\n", k+1, rowNum+1, v)
// } else {
// nameMap[v] = v
// }
// }
// }
// storeSkuNamePrice.NameIDGroup = cellReplace
// }
// if k == sheetParam.SkuPriceCol {
// if IsChineseChar(cell) {
// return fmt.Sprintf("Excel格式排版发生了变化在[%v]列,[%v]行附近可能增加或减少了一列", k+1, rowNum+1)
// }
// storeSkuNamePrice.Price = int(utils.Float64TwoInt64(utils.Str2Float64(cell) * 100))
// }
// if k == sheetParam.SkuUnitCol {
// storeSkuNamePrice.Unit = cell
// }
// }
// return errMsg
//}
//
//func AnalysisExcelOrder(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) {
// excelSort := SortExcelTable()
// taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
// switch step {
// case 0:
// xlsx, err := excelize.OpenReader(reader)
// if err != nil {
// return "", err
// }
// rows, _ := xlsx.GetRows(xlsx.GetSheetName(1))
// for rowNum, row := range rows {
// if rowNum < model.YES { // 第一行跳过
// continue
// }
// storeSkuNamePrice := &localjx.JxOrderInfo{}
// errMsg += GetCellIntoStruct(rowNum, row, excelSort, storeSkuNamePrice, nameMap)
// storeSkuNamePriceList = append(storeSkuNamePriceList, storeSkuNamePrice)
// }
// if errMsg != "" {
// return "", errors.New(errMsg)
// } else {
// isErr = true
// }
// case 1:
// db := dao.GetDB()
// storeSkuNamePriceListOrg, _ := dao.GetStoreSkuNamePrice(db)
// CreateOrUpdateStoreSkuNamePriceByExcel(db, ctx, storeSkuNamePriceList, storeSkuNamePriceListOrg)
// storeSkuNamePriceListNew, _ := dao.GetStoreSkuNamePrice(db)
// storeSkuNamePriceMapNew := StoreSkuNamePriceList2Map(ctx, storeSkuNamePriceListNew)
// for _, v := range storeSkuNamePriceList {
// if storeSkuNamePriceMapNew[v.OutSkuID] != nil {
// storeSkuNamePriceListUpdate = append(storeSkuNamePriceListUpdate, storeSkuNamePriceMapNew[v.OutSkuID])
// }
// }
// taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// storeSkuNamePrice := batchItemList[0].(*model.StoreSkuNamePrice)
// var skuBindInfos []*StoreSkuBindInfo
// nameIDGroup := strings.Split(storeSkuNamePrice.NameIDGroup, ",")
// for _, v := range nameIDGroup {
// if v != "" {
// nameID := int(utils.Str2Int64(v))
// for _, vv := range storeIDs {
// skuList, err2 := dao.GetStoreSkusByNameIDs(db, []int{vv}, nameID)
// err = err2
// if len(skuList) > 0 {
// unitPrice := 0
// if skuList[0].Unit == model.UnitNames[0] {
// if storeSkuNamePrice.Unit == "KG" {
// unitPrice = storeSkuNamePrice.Price / 2
// } else {
// unitPrice = storeSkuNamePrice.Price
// }
// } else {
// unitPrice = storeSkuNamePrice.Price
// }
// storeSkuBindInfo := &StoreSkuBindInfo{
// NameID: nameID,
// UnitPrice: unitPrice,
// }
// skuBindInfos = append(skuBindInfos, storeSkuBindInfo)
// outSuccess := DataSuccess{
// NameID: nameID,
// Name: skuList[0].Name,
// Unit: storeSkuNamePrice.Unit,
// OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice)) / 100,
// NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice))) / 100,
// MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice)-skuList[0].UnitPrice)) / 100,
// }
// dataLock.AppendDataSuccess(outSuccess)
// } else {
// //京西xx门店没有关注该商品
// outFailed := DataFailed{
// NameID: nameID,
// Name: storeSkuNamePrice.Name,
// Comment: fmt.Sprintf("京西[%v]门店没有关注该商品商品nameID[%v]Excel上商品名[%v]", vv, nameID, storeSkuNamePrice.Name),
// }
// dataLock.AppendDataFailed(outFailed)
// }
// }
// } else {
// //nameID为空还未填写nameID
// outFailed := DataFailed{
// NameID: 0,
// Name: storeSkuNamePrice.Name,
// Comment: fmt.Sprintf("商品nameID为空还未填写商品nameIDExcel上商品名[%v]", storeSkuNamePrice.Name),
// }
// dataLock.AppendDataFailed(outFailed)
// }
// }
// retVal = skuBindInfos
// return retVal, err
// }
// taskParallel := tasksch.NewParallelTask("刷新京西价", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeSkuNamePriceListUpdate)
// tasksch.HandleTask(taskParallel, task, true).Run()
// skuBindInfosInter, err = taskParallel.GetResult(0)
// case 2:
// //更新京西价
// for _, v := range skuBindInfosInter {
// skuBindInfoList = append(skuBindInfoList, v.(*StoreSkuBindInfo))
// }
// if isErr {
// UpdateStoresSkus(ctx, 0, storeIDs, skuBindInfoList, false, false, isAsync, isContinueWhenError)
// }
// case 3:
// //写Excel
// WriteToExcelJx(task, dataLock.dataSuccessList, dataLock.dataFailedList)
// }
// return result, err
// }
//}