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为空！，还未填写商品nameID，Excel上商品名[%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
//	}
//}
