You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

155 lines
4.5 KiB

package api
import (
"yunyan/comm"
"yunyan/lego/sys/log"
"yunyan/pb"
"math"
"strings"
"time"
)
// / 创建工厂设备
func (this *apiComp) CreateFactoryDevics(session comm.IUserSession, req *pb.ApiCreateFactoryDevicsReq) (resp *pb.ApiCreateFactoryDevicsResp, errdata *pb.ErrorData) {
var (
startmac, endmac, code string
err error
modelFactory *pb.DBFactory
product *pb.DBProduct
models []*pb.DBFactoryDevics = make([]*pb.DBFactoryDevics, 0, req.Number)
)
if modelFactory, err = this.module.model.factory(uint32(req.Factoryid)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
return
}
if product, err = this.module.model.product(uint32(req.Productid)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
return
}
modelFactory.Probatch++
// 每副产品需要生产的设备码份数(0或1视为单份)
codeCount := product.Devicecodecount
if codeCount == 0 {
codeCount = 1
}
if req.Createtype == 1 { //生产模式
total := req.Number * codeCount
if startmac, err = GenerateCustomMAC(uint16(req.Productid), byte(modelFactory.Probatch), uint32(1)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
return
}
if endmac, err = GenerateCustomMAC(uint16(req.Productid), byte(modelFactory.Probatch), uint32(total*2+uint32(math.Ceil(float64(total)/float64(200))))); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
return
}
for i := 1; i <= int(total); i++ {
if code, err = comm.GenerateLicense(uint16(req.Productid), byte(modelFactory.Probatch), uint32(i)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
return
}
device := &pb.DBFactoryDevics{
Code: code,
Codetype: pb.Codetype_AUTHCODE,
Productid: req.Productid,
Factoryid: req.Factoryid,
Probatch: modelFactory.Probatch,
Number: uint32(i),
Createtime: time.Now().Unix(),
}
if product.Devicetype == pb.DeviceType_Classic_bluetooth_Headset { //经典蓝牙
if endmac, err = GenerateCustomMAC(uint16(req.Productid), byte(modelFactory.Probatch), uint32(i)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
return
}
device.Codetype = pb.Codetype_DEVICECODE
device.Devicemac = endmac
}
models = append(models, device)
}
} else if req.Createtype == 2 { //导入模式
macaddresses := strings.Split(req.Macaddresses, ",")
for i, v := range macaddresses {
if code, err = comm.GenerateLicense(uint16(req.Productid), byte(modelFactory.Probatch), uint32(i+1)); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_SystemError,
Message: err.Error(),
}
return
}
device := &pb.DBFactoryDevics{
Code: code,
Codetype: pb.Codetype_DEVICECODE,
Productid: req.Productid,
Factoryid: req.Factoryid,
Probatch: modelFactory.Probatch,
Number: uint32(i + 1),
Createtime: time.Now().Unix(),
Devicemac: v,
}
models = append(models, device)
}
}
if err = this.module.model.addfactoryDevics(product.Id, models); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
this.module.Error("addauthcodes Fail!", log.Field{Key: "err", Value: err.Error()})
return
}
if err = this.module.model.savefactory(modelFactory); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
this.module.Error("savefactory Fail!", log.Field{Key: "err", Value: err.Error()})
return
}
if err = this.module.model.addfactorydeliverynotes(&pb.DBFactoryDeliveryNote{
Ts: time.Now().Unix(),
Factoryid: req.Factoryid,
Productid: req.Productid,
Probatch: modelFactory.Probatch,
Startmac: startmac,
Endmac: endmac,
Devicetnum: uint32(len(models)),
}); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
this.module.Error("savefactory Fail!", log.Field{Key: "err", Value: err.Error()})
return
}
resp = &pb.ApiCreateFactoryDevicsResp{
Factoryid: req.Factoryid,
Productid: req.Productid,
Startmac: startmac,
Endmac: endmac,
Probatch: modelFactory.Probatch,
Number: uint32(len(models)),
Devices: models,
}
return
}