From b01fd1f96adfba87034cdd5b25c3ca17597764f0 Mon Sep 17 00:00:00 2001
From: Hinse <756681202@qq.com>
Date: Wed, 15 Sep 2021 11:10:54 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E6=9C=BA=E5=99=A8=E7=A0=81=E6=90=9C=E7=B4=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Nirvana.Common/Extend/Ext.Convert.cs | 24 +++++++++++++++--
Waste.Application/ThirdApiInfo/OpenService.cs | 26 +++++++++----------
Waste.Web.Entry/Pages/Device/Index.cshtml | 11 +++++++-
.../waste.ybhdmob.com.pubxml.user | 2 +-
4 files changed, 46 insertions(+), 17 deletions(-)
diff --git a/Nirvana.Common/Extend/Ext.Convert.cs b/Nirvana.Common/Extend/Ext.Convert.cs
index ef3eaba..06af7c7 100644
--- a/Nirvana.Common/Extend/Ext.Convert.cs
+++ b/Nirvana.Common/Extend/Ext.Convert.cs
@@ -88,7 +88,17 @@ namespace Nirvana.Common
/// 小数位数
public static double ToDouble(this object data, int digits)
{
- return Math.Round(ToDouble(data), digits);
+ var result = ToDouble(data);
+ string numToString = result.ToString();
+ int index = numToString.IndexOf(".");
+ int length = numToString.Length;
+ if (index != -1)
+ {
+ numToString = string.Format("{0}.{1}",
+ numToString.Substring(0, index),
+ numToString.Substring(index + 1, Math.Min(length - index - 1, digits)));
+ }
+ return ToDouble(numToString);
}
///
@@ -125,7 +135,17 @@ namespace Nirvana.Common
/// 小数位数
public static decimal ToDecimal(this object data, int digits)
{
- return Math.Round(ToDecimal(data), digits);
+ var result = ToDecimal(data);
+ string numToString = result.ToString();
+ int index = numToString.IndexOf(".");
+ int length = numToString.Length;
+ if (index != -1)
+ {
+ numToString = string.Format("{0}.{1}",
+ numToString.Substring(0, index),
+ numToString.Substring(index + 1, Math.Min(length - index - 1, digits)));
+ }
+ return ToDecimal(numToString);
}
///
diff --git a/Waste.Application/ThirdApiInfo/OpenService.cs b/Waste.Application/ThirdApiInfo/OpenService.cs
index 168318d..e6e88cb 100644
--- a/Waste.Application/ThirdApiInfo/OpenService.cs
+++ b/Waste.Application/ThirdApiInfo/OpenService.cs
@@ -131,7 +131,8 @@ namespace Waste.Application.ThirdApiInfo
PostUrl= ApiUrl
};
//解析协议,IC卡数据@垃圾桶编号@厨余垃圾@7.91
- // 00000000003031 40 000F000002 40 C6E4CBFBC0ACBBF8 40 35312E300D0A
+ // 00000000003031 40 0F00010009 40 C6E4CBFBC0ACBBF8 40 31352E39
+ // 00000000003031 40 000F000002 40 C6E4CBFBC0ACBBF8 40 35312E30 0D0A
if (!string.IsNullOrEmpty(data.data) && data.data.Length > 52)
{
data.data = data.data.Replace(" ", "");
@@ -142,7 +143,17 @@ namespace Waste.Application.ThirdApiInfo
var sizehex = data.data.Substring(12, 2);//桶大小,30-小桶,31-大桶
var weighthex = data.data.Substring(46, data.data.Length - 46);
returndata.trash = HextToDec(trashhex).ToString(); //垃圾桶编号使用10进制
-
+ var type = GetChsFromHex(typehex);
+ var weight = GetChsFromHex(weighthex);
+ returndata.type = TrashType(type);
+ returndata.Weight = weight.ToDouble();
+ //计算净重,毛重-皮重=净重,如果净重小于等于0则不上报保存
+ returndata.Weight = (returndata.Weight - device.Tare.ToDouble()).ToDouble(2);
+ if (returndata.Weight <= 0)
+ {
+ _loggerService.AddLogger($"重量小于等于0:{returndata.ToJson()}", 1);
+ return new ResultInfo(ResultState.FAIL, "无效的重量");
+ }
//检查是否为15分钟内第一次上报
var time15 = DateTime.Now.AddMinutes(-15);
if(await dbClient.Queryable().AnyAsync(x=>x.DeviceId == device.Id && x.Registration == returndata.trash && x.CreateTime > time15))
@@ -150,18 +161,7 @@ namespace Waste.Application.ThirdApiInfo
_loggerService.AddLogger($"重复垃圾桶编号的数据:{returndata.ToJson()}", 1);
return new ResultInfo(ResultState.FAIL, "15分钟内同一垃圾桶编号上报");
}
- var type = GetChsFromHex(typehex);
- var weight = GetChsFromHex(weighthex);
- returndata.type = TrashType(type);
- returndata.Weight = weight.ToDouble();
returndata.IsSuccessed = true;
- //计算净重,毛重-皮重=净重,如果净重小于等于0则不上报保存
- returndata.Weight = returndata.Weight - device.Tare.ToDouble();
- if(returndata.Weight <= 0)
- {
- _loggerService.AddLogger($"重量小于等于0:{returndata.ToJson()}", 1);
- return new ResultInfo(ResultState.FAIL, "无效的重量");
- }
//保存测量结果
var devicedata = await dbClient.Queryable().FirstAsync(x => x.DeviceId == device.Id);
DateTime time = DateTime.Now;
diff --git a/Waste.Web.Entry/Pages/Device/Index.cshtml b/Waste.Web.Entry/Pages/Device/Index.cshtml
index 985b8e2..f438bf7 100644
--- a/Waste.Web.Entry/Pages/Device/Index.cshtml
+++ b/Waste.Web.Entry/Pages/Device/Index.cshtml
@@ -6,6 +6,11 @@