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
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
|
|
}
|
|
|