| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package controller
- import (
- "MeterService/controller/dto"
- "MeterService/core/api"
- "MeterService/core/utils"
- "MeterService/data"
- "MeterService/meter"
- "MeterService/service/downStreamService/proto"
- "MeterService/service/downStreamService/proto/acrel"
- "MeterService/service/downStreamService/proto/pmc350b"
- "MeterService/service/rtuService"
- "github.com/gin-gonic/gin"
- )
- func SetMeterAddress(c *gin.Context) {
- req := dto.SetMeterAddressReq{}
- if req.AddrNew == req.AddrOld {
- api.Fail(c, "电表地址错误")
- }
- if req.AddrOld < 1 || req.AddrOld > 254 || req.AddrNew < 1 || req.AddrNew > 254 {
- api.Fail(c, "电表地址错误")
- }
- meterHandler, w := GetClientHandler(c, req.SN, req.Type, req.AddrOld)
- if !meterHandler.SetAddress(w, req.AddrNew) {
- api.Fail(c, "电表地址设置失败")
- }
- api.Ok(c)
- }
- func SetMeterRatio(c *gin.Context) {
- req := dto.SetMeterRatioReq{}
- if req.Addr < 1 || req.Addr > 254 {
- api.Fail(c, "电表地址错误")
- }
- meterHandler, w := GetClientHandler(c, req.SN, req.Type, req.Addr)
- if !meterHandler.SetRatio(w, req.SerData) {
- api.Fail(c, "电表比例设置失败")
- }
- }
- func GetMeterRatio(c *gin.Context) {
- req := dto.GetMeterRatioReq{}
- if req.Addr < 1 || req.Addr > 254 {
- api.Fail(c, "电表地址错误")
- }
- meterHandler, w := GetClientHandler(c, req.SN, req.Type, req.Addr)
- dataStr, ok := meterHandler.GetRatio(w)
- if !ok {
- api.Fail(c, "电表比例设置失败")
- }
- api.Ok2(c, dataStr)
- }
- func GetClientHandler(c *gin.Context, sn string, mType string, addr int) (proto.MeterHandler, rtuService.RtuNetPgr) {
- if !meter.VerifyMeterProto(mType) {
- api.Fail(c, "电表协议错误")
- }
- _, ok := data.DtuMap.Get(sn)
- if !ok {
- api.Fail(c, "没有找到电表")
- }
- client, ok := data.OnlineSN.Get(sn)
- if !ok {
- api.Fail(c, "电表正在通信或已离线,请稍后再试")
- }
- client.MLock.Lock()
- defer client.MLock.Unlock()
- w := rtuService.NewRtuNetPgr(utils.IntoByte(addr))
- w.SetClientState(client)
- w.SetSerialNumber(sn)
- var meterHandler proto.MeterHandler
- switch mType {
- case meter.MeterAdw300:
- meterHandler = acrel.NewAdw300MeterHandler()
- case meter.MeterPmc350b:
- meterHandler = pmc350b.NewPmc350bMeterHandler()
- default:
- api.Fail(c, "电表协议未提供支持")
- }
- return meterHandler, w
- }
|