|
|
|
package service
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/md5"
|
|
|
|
"encoding/hex"
|
|
|
|
"fmt"
|
|
|
|
"github.com/linmadan/egglib-go/core/application"
|
|
|
|
"github.com/linmadan/egglib-go/utils/tool_funs"
|
|
...
|
...
|
@@ -11,7 +13,10 @@ import ( |
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
|
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
|
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
|
|
|
|
"reflect"
|
|
|
|
"regexp"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
...
|
...
|
@@ -106,6 +111,13 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide |
|
|
|
}
|
|
|
|
orderTime := utils.TransformTimestampToTime(orderTimeInt)
|
|
|
|
|
|
|
|
// 退货时间转换
|
|
|
|
returnedTimeInt, err := strconv.ParseInt(createDividendsReturnedOrderCommand.DividendsReturnedDate, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货时间错误")
|
|
|
|
}
|
|
|
|
returnedTime := utils.TransformTimestampToTime(returnedTimeInt)
|
|
|
|
|
|
|
|
// 校验分红退货单编号是否唯一
|
|
|
|
numberAvailable, err := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
|
|
|
|
"companyId": createDividendsReturnedOrderCommand.CompanyId,
|
|
...
|
...
|
@@ -147,7 +159,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide |
|
|
|
OriginalOrderNum: createDividendsReturnedOrderCommand.OriginalOrderNum,
|
|
|
|
DividendsOrderNumber: createDividendsReturnedOrderCommand.DividendsOrderNumber,
|
|
|
|
DividendsReturnedCustomerName: createDividendsReturnedOrderCommand.DividendsReturnedCustomerName,
|
|
|
|
DividendsReturnedDate: createDividendsReturnedOrderCommand.DividendsReturnedDate,
|
|
|
|
DividendsReturnedDate: returnedTime,
|
|
|
|
Region: &domain.RegionInfo{
|
|
|
|
RegionNumber: "",
|
|
|
|
RegionName: createDividendsReturnedOrderCommand.RegionName,
|
|
...
|
...
|
@@ -304,18 +316,342 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide |
|
|
|
dividendsReturnedOrderRepository = value
|
|
|
|
}
|
|
|
|
|
|
|
|
var dividendsReturnedOrderImportFailed []*domain.DividendsReturnedOrder
|
|
|
|
var dividendsReturnedOrderImportSuccessfully []*domain.DividendsReturnedOrder
|
|
|
|
// 返回信息表头定义
|
|
|
|
var tableHeader = []string{"错误详情", "行号", "来源单号", "客户名称", "产品名称", "退货日期", "订单日期", "订单区域", "退货数量", "退货价格", "项目合约编号"}
|
|
|
|
|
|
|
|
// 空文件校验
|
|
|
|
if len(importDividendsReturnedOrderCommand.DividendsReturnedOrderData) == 0 {
|
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "导入的Excel文件为空文件,请上传正确的文件")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 必填项校验
|
|
|
|
nullCellError := make([]interface{}, 0)
|
|
|
|
|
|
|
|
// 数据行计数
|
|
|
|
rowCnt := 0
|
|
|
|
|
|
|
|
// 空行标志位
|
|
|
|
nullFlag := false
|
|
|
|
|
|
|
|
for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData {
|
|
|
|
rowCnt++
|
|
|
|
nullCell := make([]interface{}, 0)
|
|
|
|
var myRow []string
|
|
|
|
t := reflect.TypeOf(dividendsReturnedOrder)
|
|
|
|
v := reflect.ValueOf(dividendsReturnedOrder)
|
|
|
|
for k := 0; k < t.NumField(); k++ {
|
|
|
|
//fmt.Println("name:", fmt.Sprintf("%+v", t.Field(k).Name), ", value:", fmt.Sprintf("%v", v.Field(k).Interface()), ", yaml:", t.Field(k).Tag.Get("yaml"))
|
|
|
|
if k != 5 && k != 8 {
|
|
|
|
if v.Field(k).Interface() == "" {
|
|
|
|
col := strconv.Itoa(k + 1)
|
|
|
|
nullCell = append(nullCell, col)
|
|
|
|
nullFlag = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if nullFlag {
|
|
|
|
s := strconv.Itoa(i + 1)
|
|
|
|
b := strings.Replace(strings.Trim(fmt.Sprint(nullCell), "[]"), " ", ",", -1)
|
|
|
|
myRow = append(myRow, "第"+s+"行的第"+b+"列必填项为空") // 错误信息
|
|
|
|
myRow = append(myRow, s) // 行号
|
|
|
|
myRow = append(myRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
nullCellError = append(nullCellError, myRow)
|
|
|
|
nullFlag = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 必填项错误返回
|
|
|
|
if len(nullCellError) > 0 {
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": 0,
|
|
|
|
"fail": map[string]interface{}{
|
|
|
|
"tableHeader": tableHeader,
|
|
|
|
"tableData": nullCellError,
|
|
|
|
},
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 单元格类型校验
|
|
|
|
typeError := make([]interface{}, 0)
|
|
|
|
for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData { // 行
|
|
|
|
var myRow []string
|
|
|
|
t := reflect.TypeOf(dividendsReturnedOrder)
|
|
|
|
v := reflect.ValueOf(dividendsReturnedOrder)
|
|
|
|
for k := 0; k < t.NumField(); k++ { // 列
|
|
|
|
r := strconv.Itoa(i + 1)
|
|
|
|
col := strconv.Itoa(k + 1)
|
|
|
|
|
|
|
|
switch k {
|
|
|
|
case 3: // 退货日期校验
|
|
|
|
{
|
|
|
|
regexpStr := `(\d{4})/(\d{2})/(\d{2})`
|
|
|
|
ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface()))
|
|
|
|
if !ok {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货日期格式错误,请输入正确的退货日期") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case 4: // 订单日期校验
|
|
|
|
{
|
|
|
|
regexpStr := `(\d{4})/(\d{2})/(\d{2})`
|
|
|
|
ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface()))
|
|
|
|
if !ok {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列订单日期格式错误,请输入正确的订单日期") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case 6: // 退货数量校验
|
|
|
|
{
|
|
|
|
//参数类型转换
|
|
|
|
orderGoodQuantity, err := strconv.ParseInt(fmt.Sprintf("%v", v.Field(k).Interface()), 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货数量格式错误,退货数量必须整数") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
// 正负判断
|
|
|
|
if orderGoodQuantity < 0 {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货数量必须大于0,请重新填写") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case 7: // 退货价格校验
|
|
|
|
{
|
|
|
|
// 参数类型转换
|
|
|
|
univalent, typeErr := strconv.ParseFloat(fmt.Sprintf("%v", v.Field(k).Interface()), 64)
|
|
|
|
if typeErr != nil {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货价格格式错误,退货价格必须为数字类型") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
|
|
|
|
// 长度校验
|
|
|
|
if univalent >= 1e16 {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货价格超过最大限制,退货价格小数点前面不能超过十六位数字,并保留两位小数") // 错误信息
|
|
|
|
tmpRow = append(tmpRow, r) // 行号
|
|
|
|
tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据
|
|
|
|
myRow = tmpRow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if myRow != nil {
|
|
|
|
typeError = append(typeError, myRow)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 类型错误行返回
|
|
|
|
if len(typeError) > 0 {
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": 0,
|
|
|
|
"fail": map[string]interface{}{
|
|
|
|
"tableHeader": tableHeader,
|
|
|
|
"tableData": typeError,
|
|
|
|
},
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 聚合订单并进行类型校验
|
|
|
|
aggregateErrorList := make([]interface{}, 0)
|
|
|
|
|
|
|
|
var dividendsReturnedOrderCommands = make(map[string]*command.CreateDividendsReturnedOrderCommand)
|
|
|
|
for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData {
|
|
|
|
hashValue := md5.Sum([]byte(dividendsReturnedOrder.OriginalOrderNum))
|
|
|
|
hashString := hex.EncodeToString(hashValue[:])
|
|
|
|
if _, ok := dividendsReturnedOrderCommands[hashString]; !ok {
|
|
|
|
// 来源单号
|
|
|
|
dividendsReturnedOrderCommands[hashString].OriginalOrderNum = dividendsReturnedOrder.OriginalOrderNum
|
|
|
|
|
|
|
|
// 客户名称
|
|
|
|
dividendsReturnedOrderCommands[hashString].DividendsReturnedCustomerName = dividendsReturnedOrder.DividendsReturnedCustomerName
|
|
|
|
|
|
|
|
// 订单日期时间格式转换
|
|
|
|
timeValue, err := time.ParseInLocation("2006/01/02", dividendsReturnedOrder.OrderTime, time.Local)
|
|
|
|
if err != nil {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, "无效的订单日期") // 错误信息
|
|
|
|
s := strconv.Itoa(i + 1)
|
|
|
|
tmpRow = append(tmpRow, s) // 行号
|
|
|
|
//tmpRow = append(tmpRow, dividendsReturnedOrder.OriginalOrderNum) // TODO 错误行数据
|
|
|
|
aggregateErrorList = append(aggregateErrorList, tmpRow)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
// 产品相关:产品名称,退货数量、退货价格
|
|
|
|
quantity, err := strconv.ParseInt(dividendsReturnedOrder.OrderGoodQuantity, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
|
|
|
|
}
|
|
|
|
price, err := strconv.ParseFloat(dividendsReturnedOrder.OrderGoodPrice, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 初始化新建分红订单命令集
|
|
|
|
dividendsReturnedOrderCommands[hashString] = &command.CreateDividendsReturnedOrderCommand{
|
|
|
|
DividendsReturnedCustomerName: dividendsReturnedOrder.DividendsReturnedCustomerName,
|
|
|
|
OriginalOrderNum: dividendsReturnedOrder.OriginalOrderNum,
|
|
|
|
OrderTime: string(rune(timeValue.Nanosecond() / 1000)),
|
|
|
|
Remarks: "",
|
|
|
|
RegionName: dividendsReturnedOrder.RegionName,
|
|
|
|
OperatorUid: strconv.FormatInt(importDividendsReturnedOrderCommand.UserId, 10),
|
|
|
|
OrderGoods: []command.OrderGoods{
|
|
|
|
{
|
|
|
|
OrderGoodId: "0",
|
|
|
|
OrderGoodAmount: 0,
|
|
|
|
OrderGoodName: dividendsReturnedOrder.OrderGoodName,
|
|
|
|
OrderGoodPrice: price,
|
|
|
|
OrderGoodQuantity: quantity,
|
|
|
|
DividendsOrderNumber: "",
|
|
|
|
CooperationContractNumber: dividendsReturnedOrder.CooperationContractNumber,
|
|
|
|
OrderGoodExpense: 0,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
CompanyId: importDividendsReturnedOrderCommand.CompanyId,
|
|
|
|
OrgId: importDividendsReturnedOrderCommand.OrgId,
|
|
|
|
UserId: importDividendsReturnedOrderCommand.UserId,
|
|
|
|
UserBaseId: importDividendsReturnedOrderCommand.UserBaseId,
|
|
|
|
LineNumbers: []int{i}, // 记录行号
|
|
|
|
}
|
|
|
|
} else { // 聚合同一笔订单产品
|
|
|
|
// 产品相关:产品名称,退货数量、退货价格
|
|
|
|
quantity, err := strconv.ParseInt(dividendsReturnedOrder.OrderGoodQuantity, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
|
|
|
|
}
|
|
|
|
price, err := strconv.ParseFloat(dividendsReturnedOrder.OrderGoodPrice, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.ARG_ERROR, err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData {
|
|
|
|
// 生成分红订单号
|
|
|
|
dividendsReturnedOrderCommands[hashString].OrderGoods = append(dividendsReturnedOrderCommands[hashString].OrderGoods, command.OrderGoods{
|
|
|
|
OrderGoodId: "0",
|
|
|
|
OrderGoodAmount: 0,
|
|
|
|
OrderGoodName: dividendsReturnedOrder.OrderGoodName,
|
|
|
|
OrderGoodPrice: price,
|
|
|
|
OrderGoodQuantity: quantity,
|
|
|
|
DividendsOrderNumber: "",
|
|
|
|
CooperationContractNumber: dividendsReturnedOrder.CooperationContractNumber,
|
|
|
|
OrderGoodExpense: 0,
|
|
|
|
})
|
|
|
|
|
|
|
|
// 记录聚合行号
|
|
|
|
dividendsReturnedOrderCommands[hashString].LineNumbers = append(dividendsReturnedOrderCommands[hashString].LineNumbers, i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 聚合订单错误返回
|
|
|
|
if len(aggregateErrorList) > 0 {
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": 0,
|
|
|
|
"fail": map[string]interface{}{
|
|
|
|
"tableHeader": tableHeader,
|
|
|
|
"tableData": aggregateErrorList,
|
|
|
|
},
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 批量创建分红订单命令集
|
|
|
|
var createDividendsReturnedOrderCommands []*command.CreateDividendsReturnedOrderCommand
|
|
|
|
for _, dividendsReturnedOrderCommand := range dividendsReturnedOrderCommands {
|
|
|
|
createDividendsReturnedOrderCommands = append(createDividendsReturnedOrderCommands, dividendsReturnedOrderCommand)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 新增失败记录
|
|
|
|
failureDataList := make([]interface{}, 0)
|
|
|
|
|
|
|
|
// 新增成功记录计数
|
|
|
|
var successDataCount int64
|
|
|
|
|
|
|
|
// 错误数据返回
|
|
|
|
var errorDataList []*domain.ImportInfo
|
|
|
|
|
|
|
|
// 循环校验命令
|
|
|
|
for _, cmd := range createDividendsReturnedOrderCommands {
|
|
|
|
if err = cmd.ValidateCommand(); err != nil {
|
|
|
|
// 返回信息
|
|
|
|
row := &domain.ImportInfo{
|
|
|
|
Error: application.ThrowError(application.BUSINESS_ERROR, err.Error()), // 错误信息
|
|
|
|
LineNumbers: cmd.LineNumbers, // 错误影响的行
|
|
|
|
GoodLine: map[int]interface{}{},
|
|
|
|
}
|
|
|
|
errorDataList = append(errorDataList, row)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 循环校验命令失败返回
|
|
|
|
if len(errorDataList) > 0 {
|
|
|
|
successDataCount = 0
|
|
|
|
// 错误记录处理
|
|
|
|
for _, errorData := range errorDataList {
|
|
|
|
if len(errorData.GoodLine) == 0 { // 订单错误
|
|
|
|
for _, line := range errorData.LineNumbers {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, errorData.Error.Error()) // 错误信息
|
|
|
|
s := strconv.Itoa(line + 1)
|
|
|
|
tmpRow = append(tmpRow, s) // 行号
|
|
|
|
//tmpRow = append(tmpRow, importDividendsOrderCommand.DividendsOrderData[line]...) // 错误行数据
|
|
|
|
failureDataList = append(failureDataList, tmpRow)
|
|
|
|
}
|
|
|
|
} else if len(errorData.GoodLine) > 0 { // 订单产品错误
|
|
|
|
for line := range errorData.GoodLine {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, errorData.Error.Error()) // 错误信息
|
|
|
|
s := strconv.Itoa(line + 1)
|
|
|
|
tmpRow = append(tmpRow, s) // 行号
|
|
|
|
//tmpRow = append(tmpRow, importDividendsOrderCommand.DividendsOrderData[line]...) // 错误行数据
|
|
|
|
failureDataList = append(failureDataList, tmpRow)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": successDataCount,
|
|
|
|
"fail": map[string]interface{}{
|
|
|
|
"tableHeader": tableHeader,
|
|
|
|
"tableData": failureDataList,
|
|
|
|
},
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// 批量导入创建退货单
|
|
|
|
for _, dividendsReturnedOrder := range createDividendsReturnedOrderCommands {
|
|
|
|
// 生成退货订单号
|
|
|
|
dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber()
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取分红退货单产品
|
|
|
|
// 校验退货订单编号是否唯一
|
|
|
|
numberAvailable, err3 := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
|
|
|
|
"companyId": importDividendsReturnedOrderCommand.CompanyId,
|
|
|
|
"orgId": importDividendsReturnedOrderCommand.OrgId,
|
|
|
|
"dividendsReturnedOrderNumber": dividendsReturnedOrderNumber,
|
|
|
|
})
|
|
|
|
if err3 != nil {
|
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())
|
|
|
|
}
|
|
|
|
if !numberAvailable {
|
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 新增订单产品
|
|
|
|
var orderGoods []*domain.OrderGood
|
|
|
|
var dividendsReturnedOrderAmount float64
|
|
|
|
for _, orderGood := range dividendsReturnedOrder.OrderGoods {
|
|
|
|
orderGoods = append(orderGoods, &domain.OrderGood{
|
|
|
|
OrderGoodId: 0,
|
|
...
|
...
|
@@ -326,49 +662,110 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide |
|
|
|
DividendsOrderNumber: "",
|
|
|
|
DividendsReturnedOrderNumber: dividendsReturnedOrderNumber,
|
|
|
|
CooperationContractNumber: orderGood.CooperationContractNumber,
|
|
|
|
OrderGoodExpense: 0,
|
|
|
|
OrderGoodExpense: orderGood.OrderGoodExpense,
|
|
|
|
OrgId: importDividendsReturnedOrderCommand.OrgId,
|
|
|
|
CompanyId: importDividendsReturnedOrderCommand.CompanyId,
|
|
|
|
CreatedAt: time.Now(),
|
|
|
|
DeletedAt: time.Time{},
|
|
|
|
UpdatedAt: time.Time{},
|
|
|
|
})
|
|
|
|
// 计算分红订单金额
|
|
|
|
dividendsReturnedOrderAmount = dividendsReturnedOrderAmount + orderGood.OrderGoodAmount
|
|
|
|
}
|
|
|
|
|
|
|
|
// 订单时间转换
|
|
|
|
orderTimeInt, err := strconv.ParseInt(dividendsReturnedOrder.OrderTime, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间错误")
|
|
|
|
}
|
|
|
|
orderTime := utils.TransformTimestampToTime(orderTimeInt)
|
|
|
|
|
|
|
|
// 退货时间转换
|
|
|
|
returnedTimeInt, err := strconv.ParseInt(dividendsReturnedOrder.DividendsReturnedDate, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货时间错误")
|
|
|
|
}
|
|
|
|
returnedTime := utils.TransformTimestampToTime(returnedTimeInt)
|
|
|
|
|
|
|
|
// 新增退货单
|
|
|
|
newDividendsReturnedOrder := &domain.DividendsReturnedOrder{
|
|
|
|
DividendsReturnedOrderId: 0,
|
|
|
|
DividendsReturnedOrderNumber: dividendsReturnedOrderNumber,
|
|
|
|
DividendsReturnedOrderRefund: dividendsReturnedOrder.DividendsReturnedOrderRefund,
|
|
|
|
DividendsReturnedOrderRefund: dividendsReturnedOrderAmount,
|
|
|
|
OriginalOrderNum: dividendsReturnedOrder.OriginalOrderNum,
|
|
|
|
DividendsOrderNumber: "",
|
|
|
|
DividendsReturnedCustomerName: dividendsReturnedOrder.DividendsReturnedCustomerName,
|
|
|
|
DividendsReturnedDate: dividendsReturnedOrder.DividendsReturnedDate,
|
|
|
|
OrderTime: orderTime,
|
|
|
|
DividendsReturnedDate: returnedTime,
|
|
|
|
Region: &domain.RegionInfo{
|
|
|
|
RegionNumber: "",
|
|
|
|
RegionName: dividendsReturnedOrder.RegionName,
|
|
|
|
},
|
|
|
|
Goods: orderGoods,
|
|
|
|
Remarks: dividendsReturnedOrder.Remarks,
|
|
|
|
DividendStatus: domain.TO_BE_DIVIDENDED,
|
|
|
|
Remarks: "",
|
|
|
|
DividendStatus: 1,
|
|
|
|
DividendTime: time.Time{},
|
|
|
|
Org: organization,
|
|
|
|
Company: company,
|
|
|
|
CreatedAt: time.Now(),
|
|
|
|
DeletedAt: time.Time{},
|
|
|
|
UpdatedAt: time.Time{},
|
|
|
|
Operator: operator,
|
|
|
|
OperateTime: time.Now(),
|
|
|
|
}
|
|
|
|
|
|
|
|
if dividendsReturnedOrderSaved, err := dividendsReturnedOrderRepository.Save(newDividendsReturnedOrder); err != nil {
|
|
|
|
dividendsReturnedOrderImportFailed = append(dividendsReturnedOrderImportFailed, newDividendsReturnedOrder)
|
|
|
|
} else {
|
|
|
|
dividendsReturnedOrderImportSuccessfully = append(dividendsReturnedOrderImportSuccessfully, dividendsReturnedOrderSaved)
|
|
|
|
if _, err2 := dividendsReturnedOrderRepository.Save(newDividendsReturnedOrder); err2 != nil {
|
|
|
|
row := &domain.ImportInfo{
|
|
|
|
Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存退货单数据失败:%s", err)),
|
|
|
|
LineNumbers: dividendsReturnedOrder.LineNumbers, // 错误影响的行
|
|
|
|
GoodLine: map[int]interface{}{},
|
|
|
|
}
|
|
|
|
errorDataList = append(errorDataList, row)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(dividendsReturnedOrderImportFailed) == 0 {
|
|
|
|
if err := transactionContext.CommitTransaction(); err != nil {
|
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
|
|
|
|
if len(errorDataList) <= 0 {
|
|
|
|
if err3 := transactionContext.CommitTransaction(); err3 != nil {
|
|
|
|
return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())
|
|
|
|
}
|
|
|
|
successDataCount = int64(rowCnt - len(failureDataList))
|
|
|
|
if successDataCount == int64(rowCnt) {
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": successDataCount,
|
|
|
|
"fail": nil,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
return dividendsReturnedOrderImportSuccessfully, nil
|
|
|
|
} else {
|
|
|
|
successDataCount = 0
|
|
|
|
// 错误记录处理
|
|
|
|
for _, errorData := range errorDataList {
|
|
|
|
if len(errorData.GoodLine) == 0 { // 订单错误
|
|
|
|
for _, line := range errorData.LineNumbers {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, errorData.Error.Error()) // 错误信息
|
|
|
|
s := strconv.Itoa(line + 1)
|
|
|
|
tmpRow = append(tmpRow, s) // 行号
|
|
|
|
//tmpRow = append(tmpRow, importDividendsOrderCommand.DividendsOrderData[line]...) // 错误行数据
|
|
|
|
failureDataList = append(failureDataList, tmpRow)
|
|
|
|
}
|
|
|
|
} else if len(errorData.GoodLine) > 0 { // 订单产品错误
|
|
|
|
for line := range errorData.GoodLine {
|
|
|
|
var tmpRow []string
|
|
|
|
tmpRow = append(tmpRow, errorData.Error.Error()) // 错误信息
|
|
|
|
s := strconv.Itoa(line + 1)
|
|
|
|
tmpRow = append(tmpRow, s) // 行号
|
|
|
|
//tmpRow = append(tmpRow, importDividendsOrderCommand.DividendsOrderData[line]...) // 错误行数据
|
|
|
|
failureDataList = append(failureDataList, tmpRow)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return map[string]interface{}{
|
|
|
|
"successCount": successDataCount,
|
|
|
|
"fail": map[string]interface{}{
|
|
|
|
"tableHeader": tableHeader,
|
|
|
|
"tableData": failureDataList,
|
|
|
|
},
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
...
|
...
|
|