| | |
| | | package v1 |
| | | |
| | | import ( |
| | | "apsClient/conf" |
| | | "apsClient/constvar" |
| | | "apsClient/crontask" |
| | | "apsClient/model/request" |
| | | "apsClient/model/response" |
| | | _ "apsClient/model/response" |
| | | "apsClient/nsq" |
| | | "apsClient/pkg/contextx" |
| | | "apsClient/pkg/ecode" |
| | | "apsClient/pkg/logx" |
| | | "apsClient/pkg/plc/apacheplc4x" |
| | | "apsClient/serf" |
| | | "apsClient/service" |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/spf13/cast" |
| | | "time" |
| | | ) |
| | | |
| | | type PlcApi struct{} |
| | |
| | | if !ok { |
| | | return |
| | | } |
| | | finishNumber, _ := service.PlcCacheGet(params.Position, constvar.PlcCacheKeyFinishNumber) |
| | | totalNumber, _ := service.PlcCacheGet(params.Position, constvar.PlcCacheKeyTotalNumber) |
| | | finishNumber, _ := service.PlcCacheGet(params.Channel, constvar.PlcCacheKeyFinishNumber) |
| | | totalNumber, _ := service.PlcCacheGet(params.Channel, constvar.PlcCacheKeyTotalNumber) |
| | | resp := new(response.ProductProgress) |
| | | resp.FinishNumber = cast.ToInt(finishNumber) |
| | | resp.TotalNumber = cast.ToInt(totalNumber) |
| | | |
| | | plcStatus := 1 //断开连接 |
| | | isConnect := apacheplc4x.IsConnect() |
| | | isConnect := service.PlcIsConnect() |
| | | if isConnect { |
| | | if resp.FinishNumber > 0 { //生产 |
| | | lastUpdateTime := service.FinishUpdateTimeGet(params.Channel) |
| | | if time.Now().Unix()-cast.ToInt64(lastUpdateTime) < conf.Conf.PLC.StandbyTime { //生产 |
| | | plcStatus = 2 |
| | | } else { //待机 |
| | | plcStatus = 3 |
| | | } else { |
| | | plcStatus = 3 //待机 |
| | | } |
| | | } |
| | | resp.PlcStatus = plcStatus |
| | |
| | | ctx.Ok() |
| | | } |
| | | |
| | | // SetSerfEvent |
| | | // @Tags 生产数量 |
| | | // @Summary 设置生产总量 |
| | | // @Produce application/json |
| | | // @Success 200 {object} contextx.Response{data=response.ProductProgress} "成功" |
| | | // @Router /v1/plc/setSerfEvent [post] |
| | | func (slf *PlcApi) SetSerfEvent(c *gin.Context) { |
| | | ctx, ok := contextx.NewContext(c, nil) |
| | | if !ok { |
| | | return |
| | | } |
| | | status := c.Query("status") |
| | | stat := cast.ToInt(status) |
| | | switch stat { |
| | | case serf.EventCreateCluster, serf.EventSlave2Master, serf.EventLeaveCluster: |
| | | if err := nsq.Init(); err != nil { //开启nsq |
| | | logx.Errorf("nsq Init err:%v", err) |
| | | return |
| | | } |
| | | crontask.Once(true) |
| | | if err := crontask.RestartTask(true); err != nil { //以master方式重启task |
| | | logx.Errorf("crontab task Init err:%v", err) |
| | | return |
| | | } |
| | | case serf.EventJoinCluster, serf.EventMaster2Slave: |
| | | nsq.Stop() //关闭nsq |
| | | crontask.Once(false) |
| | | if err := crontask.RestartTask(false); err != nil { //以非master方式重启task |
| | | logx.Errorf("crontab task Init err:%v", err) |
| | | return |
| | | } |
| | | } |
| | | |
| | | logx.Infof("serf cluster event: %v", stat) |
| | | |
| | | ctx.Ok() |
| | | } |
| | | |
| | | // GetProductProgressRealTime |
| | | // @Tags 生产数量 |
| | | // @Summary 实时获取生产进度 |
| | | // @Produce application/json |
| | | // @Param object body request.SendProcessParams true "查询参数" |
| | | // @Success 200 {object} contextx.Response{data=response.ProductProgress} "成功" |
| | | // @Router /v1/plc/productProgressRealTime [post] |
| | | func (slf *PlcApi) GetProductProgressRealTime(c *gin.Context) { |
| | | ctx, ok := contextx.NewContext(c, nil) |
| | | if !ok { |
| | | return |
| | | } |
| | | var finishNumber, totalNumber int64 |
| | | plcConfig, code := service.NewDevicePlcService().GetDevicePlc() |
| | | if code != ecode.OK { |