excel_data_controller.go 4.6 KB
package web_client

import (
	"path/filepath"

	"github.com/beego/beego/v2/server/web/context"
	"github.com/linmadan/egglib-go/utils/excel"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/web/excelData/query"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/application/web/excelData/service"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/service_gateway/allied_creation_cooperation"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/log"
)

type ExcelDataController struct {
	baseController
}

func (controller *ExcelDataController) responseExcelByFile(ctx *context.Context, excelExport *excel.ExcelExport, fileName string) error {
	ctx.Output.Header("Content-Disposition", "attachment; filename="+fileName)
	ctx.Output.Header("Content-Description", "File Transfer")
	ctx.Output.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
	ctx.Output.Header("Content-Transfer-Encoding", "binary")
	ctx.Output.Header("Expires", "0")
	ctx.Output.Header("Cache-Control", "must-revalidate")
	ctx.Output.Header("Pragma", "public")
	//跳过保存文件,直接写入ctx.ResponseWriter
	excelExport.ExcelFile.Write(ctx.ResponseWriter)
	return nil
}

//导出公司用户
func (controller ExcelDataController) ExportCompanyUser() {
	excelService := service.NewExcelDataService(nil)
	companyUserListQuery := &query.CompanyUserListQuery{}
	err := controller.Unmarshal(companyUserListQuery)
	if err != nil {
		log.Logger.Debug("json err:" + err.Error())
		controller.Response(nil, err)
		return
	}
	companyUserListQuery.Operator = controller.GetOperator()
	data, err := excelService.ExportCompanyUser(companyUserListQuery)
	if err != nil {
		log.Logger.Debug("excelService.ExportCompanyUser err:" + err.Error())
		controller.Response(nil, err)
		return
	}
	excelTool := excel.NewExcelExport()
	err = excelTool.ExportData(data, "")
	if err != nil {
		log.Logger.Debug("excelTool.ExportData err:" + err.Error())
		controller.Response(nil, err)
		return
	}
	controller.responseExcelByFile(controller.Ctx, excelTool, "导出公司用户")
}

func (controller ExcelDataController) ImportDividendsReturnedOrder() {
	excelFile, fileHeader, err := controller.GetFile("file")
	if err != nil {
		log.Logger.Error("接收文件失败," + err.Error())
		controller.Response(nil, err)
		return
	}
	if filepath.Ext(fileHeader.Filename) == "" {
		//TODO 判断文件类型
		log.Logger.Error("获取到的文件:" + fileHeader.Filename)
	}
	excelImport := excel.NewExcelImport()
	excelImport.RowBegin = 2 //第二行开始读取
	excelImport.DataFields = []excel.DataField{
		{EnName: "OriginalOrderNum", CnName: "*来源源单号"},
		{EnName: "DividendsReturnedCustomerName", CnName: "*客户名称"},
		{EnName: "OrderGoodName", CnName: "*产品名称"},
		{EnName: "DividendsReturnedDate", CnName: "*退货日期"},
		{EnName: "OrderTime", CnName: "*订单日期"},
		{EnName: "RegionName", CnName: "*退货区域"},
		{EnName: "OrderGoodQuantity", CnName: "*退货数量"},
		{EnName: "OrderGoodPrice", CnName: "*退货价格"},
		{EnName: "CooperationContractNumber", CnName: "项目合约编号"},
	}
	excelData, err := excelImport.OpenExcelFromIoReader(excelFile)
	if err != nil {
		log.Logger.Error("解析excel文件失败," + err.Error())
		controller.Response(nil, err)
		return
	}
	//退货单数据
	returnedOrderData := []allied_creation_cooperation.ImportDividendsReturnedOrderData{}
	for _, v := range excelData {
		//TODO 按需转化
		item := allied_creation_cooperation.ImportDividendsReturnedOrderData{
			OriginalOrderNum:              v["OriginalOrderNum"],
			DividendsReturnedCustomerName: v["DividendsReturnedCustomerName"],
			OrderGoodName:                 v["OrderGoodName"],
			DividendsReturnedDate:         v["DividendsReturnedDate"],
			OrderTime:                     v["OrderTime"],
			RegionName:                    v["RegionName"],
			OrderGoodQuantity:             v["OrderGoodQuantity"],
			OrderGoodPrice:                v["OrderGoodPrice"],
			CooperationContractNumber:     v["CooperationContractNumber"],
		}
		returnedOrderData = append(returnedOrderData, item)
	}
	creationCooperationGate := allied_creation_cooperation.NewHttplibAlliedCreationCooperation(controller.GetOperator())
	result, err := creationCooperationGate.ImportDividendsReturnedOrder(allied_creation_cooperation.ReqImportDividendsReturnedOrder{
		DividendsReturnedOrderData: returnedOrderData,
	})
	if err != nil {
		controller.Response(nil, err)
		return
	}
	controller.Response(result, nil)
}