allied-creation-byte-bank.go 4.0 KB
package domainService

import (
	"github.com/linmadan/egglib-go/core/application"
	pG "github.com/linmadan/egglib-go/transaction/pg"
	"github.com/tidwall/gjson"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/allied-lib/gateway/byte_bank"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/pg"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
)

type ByteBankService struct {
	internalService *byte_bank.HttpLibByteBankServiceGateway
}

func NewByteBankService() *ByteBankService {
	return &ByteBankService{
		internalService: byte_bank.NewHttpLibByteBankServiceGateway(constant.MMM_BYTE_BANK_HOST),
	}
}

//GetFormulasId 获取公式id
func (svr *ByteBankService) GetFormulasId(formulaName string) string {
	//获取公式id
	formulaId := ""
listLoop:
	for i := 0; ; i++ {
		data, err := svr.internalService.ListFormulas(1000, int64(i))
		if err != nil {
			return ""
		}
		if len(data.Formulas) == 0 {
			break listLoop
		}
		for _, item := range data.Formulas {

			if item.FormulaDescription == formulaName {
				formulaId = item.FormulaId
				break listLoop
			}
		}
	}
	return formulaId
}

// DeviceOperationEfficiency 设备运行效率
func (svr *ByteBankService) DeviceOperationEfficiency() (interface{}, error) {
	//获取公式id时段产能
	formulaId := svr.GetFormulasId("设备运行效率")
	//获取解析数据
	byteResult, err := svr.internalService.AnalysisFormulaByte(formulaId)
	if err != nil {
		return struct{}{}, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	log.Logger.Debug("获取设备运行效率:" + string(byteResult))
	code := gjson.GetBytes(byteResult, "code").String()
	if code != "0" {
		msg := gjson.GetBytes(byteResult, "msg").String()
		return struct{}{}, application.ThrowError(application.INTERNAL_SERVER_ERROR, msg)
	}
	//待解析的
	queryResult := gjson.GetBytes(byteResult, "data.queryResult").Array()

	/*
		1.生产设备
		2.设备本月运行数据
	*/
	transactionContext := pG.NewPGTransactionContext(pg.DB)
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	//deviceRepository, _ := repository.NewDeviceRepository(transactionContext)
	//_, devices, err := deviceRepository.Find(map[string]interface{}{
	//	"companyId":  constant.MANUFACTURE_DEFAULT_COMPANYID,
	//	"orgId":      constant.MANUFACTURE_DEFAULT_ORGID,
	//	"workshopId": constant.MANUFACTURE_DEFAULT_WORKSHOPID,
	//	"orderBy":    "device_name asc"})
	//if err != nil {
	//	return nil, err
	//}
	//var response = make([]interface{}, 0)
	//for _, d := range devices {
	//	var deviceSn string
	//	var productCount, runningTime int64
	//	for _, item := range queryResult {
	//		deviceSn = item.Get("device_sn").String()
	//		if deviceSn == d.DeviceCode {
	//			productCount = item.Get("product_count").Int()
	//			runningTime = item.Get("timing").Int()
	//			break
	//		}
	//	}
	//	response = append(response, map[string]interface{}{
	//		"deviceName":   d.DeviceName,
	//		"deviceType":   d.DeviceType,
	//		"productCount": productCount,
	//		"timing":       runningTime,
	//	})
	//}

	var response = make([]interface{}, 0)
	var deviceSn string
	var productCount, runningTime int64
	for _, item := range queryResult {
		deviceSn = item.Get("device_sn").String()
		if deviceSn != "" {
			productCount = item.Get("product_count").Int()
			runningTime = item.Get("timing").Int()
			response = append(response, map[string]interface{}{
				"device_sn":     deviceSn,
				"device_type":   item.Get("device_type").String(),
				"product_count": productCount,
				"timing":        runningTime,
			})
		}
	}

	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return map[string]interface{}{"devices": response}, nil
}