diff --git a/Waste.Application/Business/BusinessService.cs b/Waste.Application/Business/BusinessService.cs index 9d3dae2..abb9dae 100644 --- a/Waste.Application/Business/BusinessService.cs +++ b/Waste.Application/Business/BusinessService.cs @@ -226,7 +226,7 @@ namespace Waste.Application return new ResultInfo(ResultState.FAIL, "旧密码错误"); } var newpassword = Md5.md5(DESEncrypt.Encrypt(Md5.md5(busienssPwd.NewPwd, 32).ToLower(), account.Secret).ToLower(), 32).ToLower(); - await repository.Change().Context.Updateable().SetColumns(x => new W_Account + await dbClient.Updateable().SetColumns(x => new W_Account { Password = newpassword }).Where(x => x.Id == account.Id).ExecuteCommandAsync(); diff --git a/Waste.Application/PostInfo/SuZhou/ISuZhouService.cs b/Waste.Application/PostInfo/SuZhou/ISuZhouService.cs index aaac5cf..c792d5e 100644 --- a/Waste.Application/PostInfo/SuZhou/ISuZhouService.cs +++ b/Waste.Application/PostInfo/SuZhou/ISuZhouService.cs @@ -77,5 +77,25 @@ namespace Waste.Application /// /// Task PostCollectAsync(CollectC2SDto estatesC2SDto); + + /// + /// 获取时间戳 + /// + /// + int GetTimestamp(); + + /// + /// 获取随机数 + /// + /// + int GetNonce(); + + /// + /// 获取签名 + /// + /// + /// + /// + string GetUserApiSign(string secret, params string[] dataparams); } } diff --git a/Waste.Application/PostInfo/SuZhou/SuZhouService.cs b/Waste.Application/PostInfo/SuZhou/SuZhouService.cs index 38337b6..7a5bc66 100644 --- a/Waste.Application/PostInfo/SuZhou/SuZhouService.cs +++ b/Waste.Application/PostInfo/SuZhou/SuZhouService.cs @@ -188,7 +188,7 @@ namespace Waste.Application /// 获取时间戳 /// /// - private static int GetTimestamp() + public int GetTimestamp() { DateTime dateTimeStart = TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970, 1, 1, 8, 0, 0)); int timestamp = Convert.ToInt32((DateTime.Now - dateTimeStart).TotalSeconds); @@ -198,7 +198,7 @@ namespace Waste.Application /// 获取随机数 /// /// - private static int GetNonce() + public int GetNonce() { var random = new Random(); int nonce = random.Next(1, Int32.MaxValue); @@ -210,7 +210,7 @@ namespace Waste.Application /// /// /// - private static string GetUserApiSign(string secret, params string[] dataparams) + public string GetUserApiSign(string secret, params string[] dataparams) { StringBuilder sb = new StringBuilder(); if (dataparams != null && dataparams.Length > 0) @@ -244,6 +244,7 @@ namespace Waste.Application { int timestamp = GetTimestamp(); int nonce = GetNonce(); + string sign = GetUserApiSign("", data); var c2s_dto = new SuZhouApiBaseDto { @@ -254,9 +255,9 @@ namespace Waste.Application TimeStamp = timestamp, UserId = UserId }; - var request = new HttpRequestMessage(HttpMethod.Post, url); - var bytes = MessagePackSerializer.Serialize(c2s_dto); - request.Content = new ByteArrayContent(bytes); + var request = new HttpRequestMessage(HttpMethod.Post, url); //发起post请求 + byte[] bytes = MessagePackSerializer.Serialize(c2s_dto); //序列化请求数据为byte + request.Content = new ByteArrayContent(bytes); //设置请求信息体 if (type == 2) { request.Headers.Add("Accept", "text/plain"); diff --git a/Waste.Application/ResultInfos/ResultService.cs b/Waste.Application/ResultInfos/ResultService.cs index 9629fe7..5ff1860 100644 --- a/Waste.Application/ResultInfos/ResultService.cs +++ b/Waste.Application/ResultInfos/ResultService.cs @@ -208,10 +208,10 @@ namespace Waste.Application isfrist = isfrist }); //上传垃圾数据 - //if (myPackage.IsWeight && myPackage.Weight.ToDecimal() >0) + //if (myPackage.IsWeight && myPackage.Weight.ToDecimal() > 0) //{ // var devicesecret = await repository.Change().Context.Queryable().FirstAsync(x => x.DeviceId == device.Id); - // if (devicesecret != null && !string.IsNullOrEmpty(devicesecret.Secret) + // if (devicesecret != null && !string.IsNullOrEmpty(devicesecret.Secret) // && !string.IsNullOrEmpty(devicesecret.SecretHash) // && !string.IsNullOrEmpty(devicesecret.DevId)) // { diff --git a/Waste.Application/ThirdApiInfo/Dtos/ThirdApiInfoDto.cs b/Waste.Application/ThirdApiInfo/Dtos/ThirdApiInfoDto.cs new file mode 100644 index 0000000..c2c04c6 --- /dev/null +++ b/Waste.Application/ThirdApiInfo/Dtos/ThirdApiInfoDto.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Waste.Application.ThirdApiInfo +{ + /// + /// 获取设备信息请求数据 + /// + public class GetDevInfoRequestDto + { + /// + /// 重量 + /// + public decimal Weight { get; set; } = 0; + + /// + /// 机器码 + /// + public string ECode { get; set; } + } + /// + /// 获取设备信息响应数据 + /// + public class GetDevInfoResponseDto + { + /// + /// 时间戳 + /// + public int timestamp { get; set; } + /// + /// 随机数 + /// + public int noncestr { get; set; } + /// + /// 用户ID + /// + public string UserId { get; set; } + /// + /// secret + /// + public string Secret { get; set; } + /// + /// secrethash + /// + public string SecretHash { get; set; } + /// + /// 设备上报时才会有 + /// + public string DeviceId { get; set; } = ""; + } +} diff --git a/Waste.Application/ThirdApiInfo/IOpenService.cs b/Waste.Application/ThirdApiInfo/IOpenService.cs new file mode 100644 index 0000000..9189201 --- /dev/null +++ b/Waste.Application/ThirdApiInfo/IOpenService.cs @@ -0,0 +1,22 @@ +using Nirvana.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Waste.Application.ThirdApiInfo +{ + /// + /// 设备对接接口 + /// + public interface IOpenService + { + /// + /// 获取上报相关信息 + /// + /// + /// + Task GetDevInfoAsync(GetDevInfoRequestDto data); + } +} diff --git a/Waste.Application/ThirdApiInfo/OpenAppService.cs b/Waste.Application/ThirdApiInfo/OpenAppService.cs new file mode 100644 index 0000000..9c88e41 --- /dev/null +++ b/Waste.Application/ThirdApiInfo/OpenAppService.cs @@ -0,0 +1,35 @@ +using Furion.DynamicApiController; +using Microsoft.AspNetCore.Mvc; +using Nirvana.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Waste.Application.ThirdApiInfo +{ + /// + /// 开放数据 + /// + [ApiDescriptionSettings("DevApi")] + public class OpenAppService : IDynamicApiController + { + private readonly IOpenService _openService; + public OpenAppService(IOpenService openService) + { + _openService = openService; + } + /// + /// 获取设备上报相关信息 + /// + /// + /// + [HttpPost] + [NonUnify] + public async Task GetDevInfoAsync(GetDevInfoRequestDto data) + { + return await _openService.GetDevInfoAsync(data); + } + } +} diff --git a/Waste.Application/ThirdApiInfo/OpenService.cs b/Waste.Application/ThirdApiInfo/OpenService.cs new file mode 100644 index 0000000..c8b42f3 --- /dev/null +++ b/Waste.Application/ThirdApiInfo/OpenService.cs @@ -0,0 +1,64 @@ +using Furion; +using Furion.DependencyInjection; +using Nirvana.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Waste.Domain; + +namespace Waste.Application.ThirdApiInfo +{ + /// + /// 设备对接接口 + /// + public class OpenService : IOpenService, ITransient + { + private static string ApiUrl = App.Configuration["SZDevPlatSetting:ApiUrl"]; + private static string UserId = App.Configuration["SZDevPlatSetting:UserId"]; + private static string ApiSecret = App.Configuration["SZDevPlatSetting:ApiSecret"]; + private static string ApiSecretHash = App.Configuration["SZDevPlatSetting:ApiSecretHash"]; + private readonly ISqlSugarRepository repository; + private readonly SqlSugarClient dbClient; + private readonly ISuZhouService _suZhouService; + public OpenService(ISqlSugarRepository sqlSugarRepository, ISuZhouService suZhouService) + { + repository = sqlSugarRepository; + dbClient = repository.Context; + _suZhouService = suZhouService; + } + /// + /// 获取设备上报相关信息 + /// + /// + /// + public async Task GetDevInfoAsync(GetDevInfoRequestDto data) + { + var device = await dbClient.Queryable().FirstAsync(x => x.Ecode == data.ECode); + if(device == null) + { + return new ResultInfo(ResultState.FAIL, "设备未找到"); + } + var devicesecret = await dbClient.Queryable().FirstAsync(x => x.DeviceId == device.Id); + if(devicesecret == null || string.IsNullOrEmpty(devicesecret.Secret) + || string.IsNullOrEmpty(devicesecret.SecretHash) + || string.IsNullOrEmpty(devicesecret.DevId)) + { + return new ResultInfo(ResultState.FAIL, "设备还未获取验证信息"); + } + int timestamp = _suZhouService.GetTimestamp(); + int noncestr = _suZhouService.GetNonce(); + var returndata = new GetDevInfoResponseDto { + DeviceId = devicesecret.DevId, + noncestr = noncestr, + timestamp = timestamp, + Secret = devicesecret.Secret, + SecretHash = devicesecret.SecretHash, + UserId = UserId + }; + return new ResultInfo(ResultState.SUCCESS, "success", returndata); + } + } +} diff --git a/Waste.Application/Waste.Application.xml b/Waste.Application/Waste.Application.xml index 2a292bd..2bb5927 100644 --- a/Waste.Application/Waste.Application.xml +++ b/Waste.Application/Waste.Application.xml @@ -1106,6 +1106,26 @@ + + + 获取时间戳 + + + + + + 获取随机数 + + + + + + 获取签名 + + + + + 苏州设备对接平台 @@ -1925,6 +1945,92 @@ + + + 获取设备信息请求数据 + + + + + 重量 + + + + + 机器码 + + + + + 获取设备信息响应数据 + + + + + 时间戳 + + + + + 随机数 + + + + + 用户ID + + + + + secret + + + + + secrethash + + + + + 设备上报时才会有 + + + + + 设备对接接口 + + + + + 获取上报相关信息 + + + + + + + 开放数据 + + + + + 获取设备上报相关信息 + + + + + + + 设备对接接口 + + + + + 获取设备上报相关信息 + + + + 垃圾分类列表 diff --git a/Waste.Doc/Waste.pdb b/Waste.Doc/Waste.pdb index 72bdec1..950281f 100644 --- a/Waste.Doc/Waste.pdb +++ b/Waste.Doc/Waste.pdb @@ -1,5 +1,5 @@ - + @@ -12,7 +12,7 @@ Waste 1619681546 Administrator -1622604918 +1622606685 Hinse [FolderOptions] @@ -4292,7 +4292,7 @@ Shadow=0 1619689000 1619689638 -1 -((-21190,10129), (-6566,22427)) +((-20495,10616), (-7261,21940)) 12615680 16570034 12632256 @@ -4344,7 +4344,7 @@ LABL 0 新宋体,8,N 1619689821 1619689823 -1 -((9435,7970), (25356,21168)) +((10199,8495), (24592,20643)) 12615680 16570034 12632256 @@ -4369,7 +4369,7 @@ LABL 0 新宋体,8,N 1619689847 1620263978 -1 -((-21764,-11100), (-5842,6598)) +((-21000,-10388), (-6606,5886)) 12615680 16570034 12632256 @@ -4394,7 +4394,7 @@ LABL 0 新宋体,8,N 1619690248 1619690516 -1 -((-4795,-1258), (11993,8340)) +((-3984,-883), (11182,7965)) 12615680 16570034 12632256 @@ -4419,7 +4419,7 @@ LABL 0 新宋体,8,N 1619690618 1620263981 -1 -((-4298,-11683), (11192,-2085)) +((-3557,-11308), (10451,-2460)) 12615680 16570034 12632256 @@ -4444,7 +4444,7 @@ LABL 0 新宋体,8,N 1620807179 1620807192 -1 -((-4616,-21303), (4610,-15305)) +((-4200,-21078), (4194,-15530)) 12615680 16570034 12632256 @@ -4469,7 +4469,7 @@ LABL 0 新宋体,8,N 1620818971 1620818987 -1 -((-7962,-32873), (7960,-23275)) +((-7198,-32498), (7196,-23650)) 12615680 16570034 12632256 @@ -4494,7 +4494,7 @@ LABL 0 新宋体,8,N 1621837581 1622450529 -1 -((-8077,-45645), (9575,-34247)) +((-7220,-45195), (8718,-34697)) 12615680 16570034 12632256 @@ -4519,7 +4519,7 @@ LABL 0 新宋体,8,N 1621840684 1622450529 -1 -((-8829,-56577), (8823,-46079)) +((-7972,-56165), (7966,-46491)) 12615680 16570034 12632256 @@ -4544,7 +4544,7 @@ LABL 0 新宋体,8,N 1621845782 1622450529 -1 -((-7962,-67511), (7960,-58813)) +((-7198,-67174), (7196,-59150)) 12615680 16570034 12632256 @@ -4569,7 +4569,7 @@ LABL 0 新宋体,8,N 1622015994 1622450529 -1 -((-7315,-78968), (7309,-69370)) +((-6620,-78593), (6614,-69745)) 12615680 16570034 12632256 @@ -4594,7 +4594,7 @@ LABL 0 新宋体,8,N 1622016346 1622450529 -1 -((-7315,-89488), (7309,-81690)) +((-6620,-89188), (6614,-81990)) 12615680 16570034 12632256 @@ -4619,7 +4619,7 @@ LABL 0 新宋体,8,N 1622029336 1622450529 -1 -((-7315,-98735), (7309,-93637)) +((-6620,-98548), (6614,-93824)) 12615680 16570034 12632256 @@ -4644,7 +4644,7 @@ LABL 0 新宋体,8,N 1622166286 1622450529 -1 -((-7962,-109443), (7960,-101645)) +((-7198,-109143), (7196,-101945)) 12615680 16570034 12632256 @@ -4669,7 +4669,7 @@ LABL 0 新宋体,8,N 1622450488 1622450529 -1 -((-7314,-120338), (7312,-112540)) +((-6618,-120038), (6616,-112840)) 12615680 16570034 12632256 @@ -7294,9 +7294,176 @@ LABL 0 新宋体,8,N + +80F39E8A-CE37-45FF-AA28-3B7265A7986E +W_BusinessPush +W_BusinessPush +1622606670 +Hinse +1622617267 +Hinse +商户消息推送 + + + +C04377F8-599E-4393-8A6C-49D6F49ED56B +BusinessId +BusinessId +1622606685 +Hinse +1622606695 +Hinse +uniqueidentifier +1 + + +2674C3B4-914E-4BD1-B26D-562879586DB0 +PushUrl +PushUrl +1622606695 +Hinse +1622606722 +Hinse +推送地址 +varchar(200) +200 +1 + + +A03405EE-EC8A-46F5-8C6B-496B54832041 +DevCode +DevCode +1622606714 +Hinse +1622606753 +Hinse +设备唯一编号 +varchar(50) +50 +1 + + +BEFE4DB5-C30A-4205-A174-2A5A36AEFFDD +DevName +DevName +1622606742 +Hinse +1622606772 +Hinse +设备名称 +nvarchar(100) +100 +1 + + +2D79825F-36E1-451F-8E65-8EAB8ABB0C19 +Address +Address +1622606766 +Hinse +1622606796 +Hinse +设备地址 +nvarchar(200) +200 +1 + + +8EC4E4EE-798E-49EF-8F59-5CAA8279AC65 +Weight +Weight +1622606791 +Hinse +1622606920 +Hinse +毛重 +decimal(18,2) +18 +2 +1 + + +C3589E11-8F03-4B99-BFAF-E3C261E1EB51 +Tare +Tare +1622606914 +Hinse +1622606937 +Hinse +皮重 +decimal(18,2) +18 +2 +1 + + +A95C497F-3D9A-4EF1-8664-198A6DD4A3C1 +PWeight +PWeight +1622606931 +Hinse +1622606958 +Hinse +净重 +decimal(18,2) +18 +2 +1 + + +C7EF429C-884A-4C4C-9C90-87210D14B303 +Type +Type +1622606952 +Hinse +1622606977 +Hinse +垃圾类型 +nvarchar(50) +50 +1 + + +38773DC2-20F4-4FA1-B2BA-10D5D7B2669E +Time +Time +1622606968 +Hinse +1622606990 +Hinse +测量时间 +datetime +1 + + +433D5F53-D212-49BF-8014-F8216561CFE0 +Cnt +Cnt +1622617247 +Hinse +1622617277 +Hinse +重试推送的次数 +int +1 + + +B1C9A6D1-757A-4E30-AC4F-7704D8EFFD23 +CreateTime +CreateTime +1622606985 +Hinse +1622607006 +Hinse +添加时间 +datetime +1 + + + - + 5728945A-1970-4CD5-B0BB-972845F49F99 PUBLIC PUBLIC @@ -7307,7 +7474,7 @@ LABL 0 新宋体,8,N - + 1FC152BA-25A4-4408-A3C4-4E73CB309440 Microsoft SQL Server 2012 MSSQLSRV2012 diff --git a/Waste.Doc/Waste.pdm b/Waste.Doc/Waste.pdm index bb238de..950281f 100644 --- a/Waste.Doc/Waste.pdm +++ b/Waste.Doc/Waste.pdm @@ -1,5 +1,5 @@ - + @@ -4292,7 +4292,7 @@ Shadow=0 1619689000 1619689638 -1 -((-21190,10129), (-6566,22427)) +((-20495,10616), (-7261,21940)) 12615680 16570034 12632256 @@ -4344,7 +4344,7 @@ LABL 0 新宋体,8,N 1619689821 1619689823 -1 -((9435,7970), (25356,21168)) +((10199,8495), (24592,20643)) 12615680 16570034 12632256 @@ -4369,7 +4369,7 @@ LABL 0 新宋体,8,N 1619689847 1620263978 -1 -((-21764,-11100), (-5842,6598)) +((-21000,-10388), (-6606,5886)) 12615680 16570034 12632256 @@ -4394,7 +4394,7 @@ LABL 0 新宋体,8,N 1619690248 1619690516 -1 -((-4795,-1258), (11993,8340)) +((-3984,-883), (11182,7965)) 12615680 16570034 12632256 @@ -4419,7 +4419,7 @@ LABL 0 新宋体,8,N 1619690618 1620263981 -1 -((-4298,-11683), (11192,-2085)) +((-3557,-11308), (10451,-2460)) 12615680 16570034 12632256 @@ -4444,7 +4444,7 @@ LABL 0 新宋体,8,N 1620807179 1620807192 -1 -((-4616,-21303), (4610,-15305)) +((-4200,-21078), (4194,-15530)) 12615680 16570034 12632256 @@ -4469,7 +4469,7 @@ LABL 0 新宋体,8,N 1620818971 1620818987 -1 -((-7962,-32873), (7960,-23275)) +((-7198,-32498), (7196,-23650)) 12615680 16570034 12632256 @@ -4494,7 +4494,7 @@ LABL 0 新宋体,8,N 1621837581 1622450529 -1 -((-8077,-45645), (9575,-34247)) +((-7220,-45195), (8718,-34697)) 12615680 16570034 12632256 @@ -4519,7 +4519,7 @@ LABL 0 新宋体,8,N 1621840684 1622450529 -1 -((-8829,-56577), (8823,-46079)) +((-7972,-56165), (7966,-46491)) 12615680 16570034 12632256 @@ -4544,7 +4544,7 @@ LABL 0 新宋体,8,N 1621845782 1622450529 -1 -((-7962,-67511), (7960,-58813)) +((-7198,-67174), (7196,-59150)) 12615680 16570034 12632256 @@ -4569,7 +4569,7 @@ LABL 0 新宋体,8,N 1622015994 1622450529 -1 -((-7315,-78968), (7309,-69370)) +((-6620,-78593), (6614,-69745)) 12615680 16570034 12632256 @@ -4594,7 +4594,7 @@ LABL 0 新宋体,8,N 1622016346 1622450529 -1 -((-7315,-89488), (7309,-81690)) +((-6620,-89188), (6614,-81990)) 12615680 16570034 12632256 @@ -4619,7 +4619,7 @@ LABL 0 新宋体,8,N 1622029336 1622450529 -1 -((-7315,-98735), (7309,-93637)) +((-6620,-98548), (6614,-93824)) 12615680 16570034 12632256 @@ -4644,7 +4644,7 @@ LABL 0 新宋体,8,N 1622166286 1622450529 -1 -((-7962,-109443), (7960,-101645)) +((-7198,-109143), (7196,-101945)) 12615680 16570034 12632256 @@ -4669,7 +4669,7 @@ LABL 0 新宋体,8,N 1622450488 1622450529 -1 -((-7314,-120338), (7312,-112540)) +((-6618,-120038), (6616,-112840)) 12615680 16570034 12632256 diff --git a/Waste.Doc/商户管理原型图.png b/Waste.Doc/商户管理原型图.png new file mode 100644 index 0000000..aa6ac9d Binary files /dev/null and b/Waste.Doc/商户管理原型图.png differ diff --git a/Waste.Doc/回收记录原型图.png b/Waste.Doc/回收记录原型图.png new file mode 100644 index 0000000..58a4d4d Binary files /dev/null and b/Waste.Doc/回收记录原型图.png differ diff --git a/Waste.Doc/巨天平台软件设计方案.docx b/Waste.Doc/巨天平台软件设计方案.docx new file mode 100644 index 0000000..9ca6217 --- /dev/null +++ b/Waste.Doc/巨天平台软件设计方案.docx @@ -0,0 +1,99 @@ + + + + + + +巨天平台软件设计方案 + 文件编号:jt-sky-20210401FA + + + + 编制:________刘照良________________ + 审核:________吴成发________________ + 批准:_______ 孙海清________________ + + + + + + + 巨鼎天衡 + 2021年04月 + + + + 修订记录 +日期 +版本 +描述 +修改人 +2021-04-01 +V1.0.0 +创建文档 +刘照良 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +一、引言 +1. 概述 +传统形式的垃圾分类基本上是用手工来记录投放数据,过磅数据,出车数据。手工记录效率比较低,出错比较多,统计查询等都不方便。为了解决目前存在的问题,为此开发本软件系统。全部采用电子化来自动管理目前的各个环节。所有数据一库刊,实现了数据安全管理,出错减少,统计查询方便快捷。可以随手随地在浏览器中实时查询各个环节的具体数据,提高了管理效率 + 软件总体架构 + 软件开发环境 +操作系统:windows +开发语言:C# +开发平台:VSCODE + 软件基本结构 +该系统以设备为核心,连接上巨天云平台和政府对接平台,巨天云平台包括数据处理平台、数据展示平台、数据存储平台 +数据处理平台主要对设备数据进行收发,数据协议格式解析处理,然后传输到数据存储平台进行记录 +数据展示平台主要是对设备数据进行汇总展示,记录查询等 +数据存数平台主要是对所有相关数据进行存储的平台 +各个平台的具体关系如图所示: + +三、界面设计 +首页 + +设备列表 + +商户管理 + +物品编码 + +回收记录 + +统计报表 + + diff --git a/Waste.Doc/新建文件夹.zip b/Waste.Doc/新建文件夹.zip new file mode 100644 index 0000000..00c9ab6 Binary files /dev/null and b/Waste.Doc/新建文件夹.zip differ diff --git a/Waste.Doc/新建文件夹/商户管理原型图.png b/Waste.Doc/新建文件夹/商户管理原型图.png new file mode 100644 index 0000000..aa6ac9d Binary files /dev/null and b/Waste.Doc/新建文件夹/商户管理原型图.png differ diff --git a/Waste.Doc/新建文件夹/回收记录原型图.png b/Waste.Doc/新建文件夹/回收记录原型图.png new file mode 100644 index 0000000..58a4d4d Binary files /dev/null and b/Waste.Doc/新建文件夹/回收记录原型图.png differ diff --git a/Waste.Doc/新建文件夹/巨天平台软件设计方案.docx b/Waste.Doc/新建文件夹/巨天平台软件设计方案.docx new file mode 100644 index 0000000..9ca6217 --- /dev/null +++ b/Waste.Doc/新建文件夹/巨天平台软件设计方案.docx @@ -0,0 +1,99 @@ + + + + + + +巨天平台软件设计方案 + 文件编号:jt-sky-20210401FA + + + + 编制:________刘照良________________ + 审核:________吴成发________________ + 批准:_______ 孙海清________________ + + + + + + + 巨鼎天衡 + 2021年04月 + + + + 修订记录 +日期 +版本 +描述 +修改人 +2021-04-01 +V1.0.0 +创建文档 +刘照良 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +一、引言 +1. 概述 +传统形式的垃圾分类基本上是用手工来记录投放数据,过磅数据,出车数据。手工记录效率比较低,出错比较多,统计查询等都不方便。为了解决目前存在的问题,为此开发本软件系统。全部采用电子化来自动管理目前的各个环节。所有数据一库刊,实现了数据安全管理,出错减少,统计查询方便快捷。可以随手随地在浏览器中实时查询各个环节的具体数据,提高了管理效率 + 软件总体架构 + 软件开发环境 +操作系统:windows +开发语言:C# +开发平台:VSCODE + 软件基本结构 +该系统以设备为核心,连接上巨天云平台和政府对接平台,巨天云平台包括数据处理平台、数据展示平台、数据存储平台 +数据处理平台主要对设备数据进行收发,数据协议格式解析处理,然后传输到数据存储平台进行记录 +数据展示平台主要是对设备数据进行汇总展示,记录查询等 +数据存数平台主要是对所有相关数据进行存储的平台 +各个平台的具体关系如图所示: + +三、界面设计 +首页 + +设备列表 + +商户管理 + +物品编码 + +回收记录 + +统计报表 + + diff --git a/Waste.Doc/新建文件夹/系统整体架构图.png b/Waste.Doc/新建文件夹/系统整体架构图.png new file mode 100644 index 0000000..32dbf45 Binary files /dev/null and b/Waste.Doc/新建文件夹/系统整体架构图.png differ diff --git a/Waste.Doc/新建文件夹/统计报表原型图.png b/Waste.Doc/新建文件夹/统计报表原型图.png new file mode 100644 index 0000000..6d2b2f6 Binary files /dev/null and b/Waste.Doc/新建文件夹/统计报表原型图.png differ diff --git a/Waste.Doc/新建文件夹/设备列表原型图.png b/Waste.Doc/新建文件夹/设备列表原型图.png new file mode 100644 index 0000000..2631f03 Binary files /dev/null and b/Waste.Doc/新建文件夹/设备列表原型图.png differ diff --git a/Waste.Doc/汇集平台使用说明(1).docx b/Waste.Doc/汇集平台使用说明(1).docx new file mode 100644 index 0000000..3a4d9a3 --- /dev/null +++ b/Waste.Doc/汇集平台使用说明(1).docx @@ -0,0 +1,118 @@ +从测试平台迁移到正式平台的极简说明 + +端点 +正式平台分为两个系统:设备管理系统 和 数据池(苏州)平台,其中: +设备管理平台的设备API端点为: https://api.device.suzhou.ljflytjl.cn +数据池(苏州)平台的设备API端点为: https://api.data.suzhou.ljflytjl.cn +现阶段设备管理平台提供的基于Web的开发者Dashboard页面地址为:https://iot.ljflytjl.cn +现阶段数据池(苏州)平台提供的基于Web的开发者Dashboard页面为:https://data.suzhou.ljflytjl.cn + +(基于浏览器的Dashboard是临时提供的,后续会改成原生桌面客户端) + +HTTPS +正式平台全站强制使用HTTPS. + +Swagger +正式平台不提供Swagger页面。正式平台的API前面有负载均衡网关和聚合网关,Swagger的自动生成API的机制无法处理聚合网关。 +API以文档形式提供。 + +版本概念 +正式平台的API是有版本概念的。 +截至本文编写时,API最新主版本为1.0. +在每次API请求时,服务器会在response的header中返回当前API所支持的版本 + +在请求API时,如果不指定版本,则服务器将采用默认版本号处理请求。 +不同版本之间的数据格式、支持的Formatter格式等等都可以有差异 + +请求时,可以使用query string指定版本号 + +或者在header中指定版本号 + + + +Json +由于对Json的支持呼声较高,平台在1.x的API中增加的支持了JSON传输数据。 +设备接入流程 +账号 +账号的用户名格式有规定,所以没开放自由注册,由平台分配。 +在正式平台刚得到的账号,是只有用户名没有密码的。 + +所以首次登录需要走一遍找回密码的流程。 + + +输入账号信息之后 + + +在申领账号时邮箱中点击链接找回密码。 + +. + +添加设备 + +在Web页面添加设备 + +总体添加设备流程与测试平台一致,但正式平台的设备平台是独立于数据平台的,因此不要求在设备平台绑定采集点。而是在数据平台绑定设备ID. + + +添加区域、采集点 +在数据平台添加相关信息。 + + + + + + + +建立长连接 +数据配置完成之后,就和测试平台一样,向设备平台端点建立长连接。 +请确保测试平台测试没问题了之后再到正式平台建立长连接。 + +sayHello +建立长连接之后,和测试平台一样,正式平台依然有"sayHello"消息,没有实际意义,可以用来检测与服务端的通讯是否正常。 + +消息的target 是 "sayHello",接收第一个参数为字符串, 返回字符串。 + +接触下来发现有的开发者对rpc这个概念不是很理解,什么叫"第一个参数"什么的比较困惑,类比一下,上面这个描述相当于如下伪代码 + + + +类似的,之前文档上有在第一个参数里搞了个dto的约定,就类似于如下伪代码 + + + +请求Token +在上述基础上,请求Token的target 是 "getToken", 接收第一个参数为字符串,含义为audience. +针对数据(苏州)平台,audience的值固定为" sz_data". +该消息没有返回值,即不会在同一个Invocation ID的Completion消息中返回Token. 而是与测试平台一样,采用主推消息"Token"来下发Token,或主推"Error"消息来表示一个错误。 + +检查Token的有效期 +设备平台下发的这个Token,标准的称呼叫jwt bearer token,标准为rfc7519,标准文档为:https://datatracker.ietf.org/doc/html/rfc7519 +Token的有效期是不固定的,请使用jwt标准规范来解析并检查Token的有效期,并在Token过期前请求新的Token. +Token中除了jwt标准约定的几个字段,请勿在程序中依赖其他字段信息,它们可能会随意变动。 +(提醒:过于离谱的恶意频繁请求Token会导致账号被封禁) + + + +推送数据到数据平台 +数据平台有个api可以用于检查API通讯是否正常 + +GET方法,返回内容是纯文本。 +采用jwt bearer token的方式携带token + + +推送垃圾数据的API + +API版本1.0 +在Body中传递如下: + +使用MessagePack无key的数组形式传递数据。 +即伪代码写法为: + + + +注意:垃圾类型的0类型是防止程序解析枚举值出错用的,从内容上理解,传0等同于错误数据。 + + +数据校验 +与测试平台规则类似,在所有的Web API请求中,应在header中传递:time、sign、secret、nonce +详情参考之前的文档。 diff --git a/Waste.Doc/系统整体架构图.png b/Waste.Doc/系统整体架构图.png new file mode 100644 index 0000000..32dbf45 Binary files /dev/null and b/Waste.Doc/系统整体架构图.png differ diff --git a/Waste.Doc/系统设计方案.docx b/Waste.Doc/系统设计方案.docx new file mode 100644 index 0000000..fc669b8 --- /dev/null +++ b/Waste.Doc/系统设计方案.docx @@ -0,0 +1,15 @@ + + + + 巨天物联网数字平台 + 软件设计方案说明书 + + + + + + + + + + 巨鼎天衡 2021 diff --git a/Waste.Doc/统计报表原型图.png b/Waste.Doc/统计报表原型图.png new file mode 100644 index 0000000..6d2b2f6 Binary files /dev/null and b/Waste.Doc/统计报表原型图.png differ diff --git a/Waste.Doc/设备列表原型图.png b/Waste.Doc/设备列表原型图.png new file mode 100644 index 0000000..2631f03 Binary files /dev/null and b/Waste.Doc/设备列表原型图.png differ diff --git a/Waste.Socket/Program.cs b/Waste.Socket/Program.cs index 9b3f655..e9dc559 100644 --- a/Waste.Socket/Program.cs +++ b/Waste.Socket/Program.cs @@ -3,11 +3,14 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using RabbitMQ.Client; +using Serilog; +using Serilog.Events; using SuperSocket; using SuperSocket.Channel; using SuperSocket.Server; using System; using System.Net; +using System.Text; using System.Threading.Tasks; namespace Waste.Socket @@ -17,6 +20,22 @@ namespace Waste.Socket public static RabbitMqService rabbitMqProxy; static async Task Main(string[] args) { + var filepath = "e:/errlog/wastersocket"; + string date = DateTime.Now.ToString("yyyy-MM-dd");//按时间创建文件夹 + string outputTemplate = "{NewLine}【{Level:u3}】{Timestamp:yyyy-MM-dd HH:mm:ss.fff}" + + "{NewLine}#Msg#{Message:lj}" + + "{NewLine}#Pro #{Properties:j}" + + "{NewLine}#Exc#{Exception}" + + new string('-', 50);//输出模板 + var logger = new LoggerConfiguration() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.File($"{filepath}/{date}/log.log",outputTemplate:outputTemplate,rollingInterval:RollingInterval.Day,encoding:Encoding.UTF8) + .CreateLogger() + ; + + rabbitMqProxy = new RabbitMqService(new MqConfig { AutomaticRecoveryEnabled = true, @@ -95,6 +114,7 @@ namespace Waste.Socket .ConfigureLogging((hostCtx, loggingBuilder) => { loggingBuilder.AddConsole(); + loggingBuilder.AddSerilog(logger); }) .Build() ; diff --git a/Waste.Socket/Waste.Socket.csproj b/Waste.Socket/Waste.Socket.csproj index 8bdbfbd..f286f39 100644 --- a/Waste.Socket/Waste.Socket.csproj +++ b/Waste.Socket/Waste.Socket.csproj @@ -17,6 +17,9 @@ + + + diff --git a/Waste.Web.Entry/Pages/User/ChangePwd.cshtml.cs b/Waste.Web.Entry/Pages/User/ChangePwd.cshtml.cs index 2d2b05e..0582f82 100644 --- a/Waste.Web.Entry/Pages/User/ChangePwd.cshtml.cs +++ b/Waste.Web.Entry/Pages/User/ChangePwd.cshtml.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages; namespace Waste.Web.Entry.Pages.User { - public class ChangePwdModel : PageModel + public class ChangePwdModel : BaseModel { public void OnGet() { diff --git a/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user b/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user index a83c407..57c0b6a 100644 --- a/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user +++ b/Waste.Web.Entry/Properties/PublishProfiles/waste.ybhdmob.com.pubxml.user @@ -5,6 +5,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>D:\webpublish\waste.ybhdmob.com - True|2021-06-11T00:16:29.9542894Z;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00; + True|2021-07-29T11:06:09.1449349Z;True|2021-06-11T08:16:29.9542894+08:00;True|2021-06-04T14:46:02.2707457+08:00;True|2021-06-02T15:08:52.8245632+08:00;True|2021-06-02T15:05:50.3614099+08:00;True|2021-06-02T14:59:32.3690948+08:00;True|2021-06-02T14:10:25.1182836+08:00;True|2021-06-02T14:09:54.9215833+08:00;True|2021-06-01T10:41:54.9488501+08:00;True|2021-06-01T10:38:56.0283198+08:00;True|2021-05-28T13:59:02.2308877+08:00;True|2021-05-28T11:56:26.6796406+08:00;True|2021-05-28T11:28:00.4087907+08:00;True|2021-05-27T16:18:09.5993838+08:00;True|2021-05-27T16:07:31.3484951+08:00;True|2021-05-27T11:30:37.9119310+08:00;True|2021-05-27T11:28:35.5374674+08:00;True|2021-05-27T08:00:09.1625592+08:00;True|2021-05-26T20:42:17.0852150+08:00;True|2021-05-26T20:36:49.7527415+08:00;True|2021-05-25T17:57:31.8791293+08:00;True|2021-05-25T13:49:29.6488978+08:00;True|2021-05-25T13:48:24.6686105+08:00;True|2021-05-25T13:25:41.2512493+08:00;True|2021-05-24T17:55:33.3800078+08:00;True|2021-05-20T14:35:30.6957985+08:00;True|2021-05-20T13:17:22.6192995+08:00;True|2021-05-20T10:51:38.1268169+08:00;True|2021-05-19T19:50:03.7000224+08:00;True|2021-05-19T19:44:27.2518811+08:00;True|2021-05-19T19:43:26.5916681+08:00;True|2021-05-19T19:36:29.3197365+08:00;True|2021-05-19T19:30:00.3802430+08:00;True|2021-05-19T17:55:23.7939835+08:00;True|2021-05-19T11:05:17.9043392+08:00;True|2021-05-19T10:19:38.4839988+08:00;True|2021-05-19T10:17:19.7430612+08:00;True|2021-05-19T10:13:23.0031721+08:00;True|2021-05-19T10:06:03.9881599+08:00;True|2021-05-18T14:39:03.8876574+08:00;True|2021-05-18T14:23:46.9818836+08:00;True|2021-05-18T14:19:56.2382079+08:00;True|2021-05-18T11:29:53.5497590+08:00;True|2021-05-18T11:16:18.0123853+08:00;True|2021-05-17T18:59:52.4159105+08:00;True|2021-05-17T18:53:37.9438984+08:00;True|2021-05-17T18:48:14.9625161+08:00;True|2021-05-17T17:46:03.7723404+08:00;True|2021-05-17T17:14:20.2312990+08:00;True|2021-05-17T16:44:34.5837616+08:00;True|2021-05-17T16:25:20.1087804+08:00;True|2021-05-17T11:35:27.9388562+08:00; \ No newline at end of file diff --git a/Waste.Web.Entry/Waste.Web.Entry.csproj.user b/Waste.Web.Entry/Waste.Web.Entry.csproj.user index 9f70d2e..f9a02f1 100644 --- a/Waste.Web.Entry/Waste.Web.Entry.csproj.user +++ b/Waste.Web.Entry/Waste.Web.Entry.csproj.user @@ -3,6 +3,6 @@ RazorPageScaffolder root/Common/RazorPage - E:\workspace_ybhdmob\Waste\Waste.Web.Entry\Properties\PublishProfiles\waste.ybhdmob.com.pubxml + H:\liuzl_ybhdmob\Waste\Waste.Web.Entry\Properties\PublishProfiles\waste.ybhdmob.com.pubxml \ No newline at end of file