| | |
| | | package v1 |
| | | |
| | | import ( |
| | | "apsClient/conf" |
| | | "apsClient/model" |
| | | "apsClient/model/request" |
| | | _ "apsClient/model/response" |
| | |
| | | "apsClient/pkg/ecode" |
| | | "apsClient/pkg/logx" |
| | | "apsClient/service" |
| | | "apsClient/utils" |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | | ) |
| | | |
| | |
| | | ctx.FailWithMsg(ecode.UnknownErr, "获取网络配置失败") |
| | | return |
| | | } |
| | | |
| | | err = service.NewConfigService().SetNetConfig(params.Id, ¶ms) |
| | | if err != nil { |
| | | logx.Errorf("SetNetConfig error: %v", err.Error()) |
| | | ctx.FailWithMsg(ecode.DBErr, "设置失败") |
| | | return |
| | | } |
| | | if conf.Conf.System.NetSetShellPath == "" || conf.Conf.System.NetUpShellName == "" || conf.Conf.System.NetDownShellName == "" { |
| | | ctx.FailWithMsg(ecode.DBErr, "请先配置网络设置路径和脚本名") |
| | | return |
| | | } |
| | | var shName string |
| | | if params.Status == model.NetConfigStatusEnabled { |
| | | shName = conf.Conf.System.NetUpShellName |
| | | } else { |
| | | shName = conf.Conf.System.NetDownShellName |
| | | } |
| | | sh := fmt.Sprintf("%s %v %v %v", shName, params.IP, params.MASK, params.Gateway) |
| | | err = utils.Cmd(conf.Conf.System.NetSetShellPath, sh) |
| | | if err != nil { |
| | | logx.Errorf("network update failed: %v", err.Error()) |
| | | ctx.FailWithMsg(ecode.UnknownErr, "网络设置失败") |
| | | return |
| | | } |
| | | ctx.Ok() |
| | | } |
| | | |
| | |
| | | "apsClient/service" |
| | | "encoding/json" |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/spf13/cast" |
| | | ) |
| | | |
| | | type PlcApi struct{} |
| | |
| | | ipAddr = plcConfig.Address |
| | | } |
| | | |
| | | resp := new(response.ProductProgress) |
| | | if startAddress == 0 || valueType == "" { |
| | | ctx.FailWithMsg(ecode.UnknownErr, "请先配置PLC") |
| | | ctx.OkWithDetailed(resp) |
| | | logx.Warnf("请先配置PLC") |
| | | return |
| | | } |
| | | conn, err := plc.NewModbusConnection(ipAddr) |
| | |
| | | } |
| | | |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.UnknownErr, "连接plc失败") |
| | | ctx.OkWithDetailed(resp) |
| | | logx.Errorf("GetProductProgress 连接plc失败: %v", err.Error()) |
| | | return |
| | | } |
| | | |
| | | rawData, err := plc.ReadHoldingRegister(conn, startAddress, dataLength) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.UnknownErr, "获取plc数据失败") |
| | | ctx.OkWithDetailed(resp) |
| | | logx.Errorf("GetProductProgress 获取plc数据失败: %v", err.Error()) |
| | | return |
| | | } |
| | | var finishNumber interface{} |
| | | err = json.Unmarshal(rawData, &finishNumber) |
| | | if err != nil { |
| | | ctx.FailWithMsg(ecode.UnknownErr, "获取生产进度数据解析失败") |
| | | ctx.OkWithDetailed(resp) |
| | | logx.Errorf("GetProductProgress 获取生产进度数据解析失败: %v, data: %v, valueType:%v", err.Error(), rawData, valueType) |
| | | return |
| | | } |
| | | resp := response.ProductProgress{ |
| | | FinishNumber: cast.ToInt(finishNumber), |
| | | } |
| | | ctx.OkWithDetailed(resp) |
| | | } |
| | |
| | | "LimitTimeIP": 3600, |
| | | "RouterPrefix": "api", |
| | | "SudoPassword": "basic2021", |
| | | "deviceId": "DeviceID 1" |
| | | "deviceId": "DeviceID 1", |
| | | "netSetShellPath": "/data/network", |
| | | "netUpShellName": "up.sh", |
| | | "netDownShellName": "down.sh" |
| | | }, |
| | | "log": { |
| | | "path": "./logs/apsClient.log", |
| | |
| | | |
| | | type ( |
| | | System struct { |
| | | Env string // 环境值 develop test public |
| | | Port int // 端口 |
| | | DbType string // 数据库类型 |
| | | UseMultipoint bool // 多点登录拦截 |
| | | UseRedis bool // 使用redis |
| | | LimitCountIP int |
| | | LimitTimeIP int |
| | | RouterPrefix string // 路由前缀 |
| | | SudoPassword string // sudo密码 |
| | | DeviceId string //设备id |
| | | Env string // 环境值 develop test public |
| | | Port int // 端口 |
| | | DbType string // 数据库类型 |
| | | UseMultipoint bool // 多点登录拦截 |
| | | UseRedis bool // 使用redis |
| | | LimitCountIP int |
| | | LimitTimeIP int |
| | | RouterPrefix string // 路由前缀 |
| | | SudoPassword string // sudo密码 |
| | | DeviceId string //设备id |
| | | NetSetShellPath string //网络设置脚本路径 |
| | | NetUpShellName string //网络停用脚本 |
| | | NetDownShellName string //网络开启脚本 |
| | | } |
| | | |
| | | Etcd struct { |
New file |
| | |
| | | package utils |
| | | |
| | | import ( |
| | | "fmt" |
| | | "os" |
| | | "os/exec" |
| | | ) |
| | | |
| | | func Cmd(directory, script string) error { |
| | | // 创建一个执行命令的对象 |
| | | cmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("cd %s && %s", directory, script)) |
| | | |
| | | // 设置命令的工作目录 |
| | | cmd.Dir = directory |
| | | |
| | | // 将命令的输出连接到当前进程的输出 |
| | | cmd.Stdout = os.Stdout |
| | | cmd.Stderr = os.Stderr |
| | | |
| | | // 执行命令 |
| | | output, err := cmd.Output() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | fmt.Println(string(output)) |
| | | // 检查命令执行结果 |
| | | if cmd.ProcessState.Success() { |
| | | fmt.Println("脚本执行成功") |
| | | } else { |
| | | fmt.Println("脚本执行失败") |
| | | } |
| | | return nil |
| | | } |