BiDecision_SN_SIMService.cs 10.3 KB
using Hh.Mes.Common;
using Hh.Mes.Common.log;
using Hh.Mes.POJO.ApiEntity.BiDecision;
using Hh.Mes.POJO.Entity;
using Hh.Mes.POJO.Response;
using Hh.Mes.POJO.WebEntity;
using Hh.Mes.Service.Repository;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hh.Mes.Service
{
    public partial class BiDecisionService : RepositorySqlSugar<sys_user>
    {
        /// <summary>
        /// 决策支持 SN统计
        /// </summary>
        public dynamic GetSNInfo(DateTime begin)
        {
            var response = new Response();
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                CalculateDateRanges(begin, out DateTime monthStart7, out DateTime monthEnd7, out DateTime monthStart, out DateTime monthEnd, out DateTime monthStart90, out DateTime monthEnd90);

                // SN申请、授权统计 mysql数据库 
                var lincenseSql = $@"select sn from  sninfo  where Created >= @monthStart&&Created<=@monthEnd;
                                     select sn from  sninfo  where Created >= @monthStart90&&Created<=@monthEnd90;
                                     select sn from  licenseinfo  where Created >= @monthStart&&Created<=@monthEnd;
                                     select sn from  licenseinfo  where Created >= @monthStart90&&Created<=@monthEnd90";
                var licenseDs = ContextLicense.Ado.GetDataSetAll(lincenseSql, new List<SugarParameter>(){
                                new("@monthStart", monthStart),
                                new("@monthEnd", monthEnd),
                                new("@monthStart90", monthStart90),
                                new("@monthEnd90", monthEnd90),
                            });
                // 注册sn
                //var regSn = licenseDs.Tables[0].AsEnumerable()
                //                          .Select(r => $"'{r["sn"].ToString()}'")
                //                          .Distinct();
                //var regSnList = string.Join(",", regSn);

                // IOT设备信息批量查询 微软数据库 daq_equipment_status_record_history 表数据库大需要注意
                var iotSql = $@" select equipmentCode as sn  from base_equipment t1 where createTime >= @monthStart and createTime<=@monthEnd
                                 select equipmentCode as sn from base_equipment t1 where createTime >= @monthStart90 and createTime<=@monthEnd90
                                 select distinct EquipmentCode  as sn from daq_equipment_alarm_record where CreateTime >= @monthStart and CreateTime<=@monthEnd
                                 select distinct EquipmentCode  as sn from daq_equipment_alarm_record where CreateTime >= @monthStart90 and CreateTime<=@monthEnd90";

                var iotResults = Context.Ado.GetDataSetAll(iotSql, new List<SugarParameter>(){
                    new("@monthStart", monthStart),
                    new("@monthEnd", monthEnd),
                    new("@monthStart90", monthStart90),
                    new("@monthEnd90", monthEnd90)
                });

                // 处理数据
                var processor = new SnDataProcessor();
                var snDetail = processor.ProcessAndMergeData(licenseDs.Tables[0], licenseDs.Tables[2], iotResults.Tables[0], iotResults.Tables[2]);

                var snDetail90 = processor.ProcessAndMergeData(licenseDs.Tables[1], licenseDs.Tables[3], iotResults.Tables[1], iotResults.Tables[3]);

                response.Result = new
                {
                    regSnMonth = licenseDs.Tables[0].Rows.Count,
                    regSnMonth90 = licenseDs.Tables[1].Rows.Count,
                    authMonth = licenseDs.Tables[2].Rows.Count,
                    authMonth90 = licenseDs.Tables[3].Rows.Count,

                    AccessIotMonth = iotResults.Tables[0].Rows.Count,
                    AccessIotMonth90 = iotResults.Tables[1].Rows.Count,

                    alarmMonth = iotResults.Tables[2].Rows.Count,
                    alarmMonth90 = iotResults.Tables[3].Rows.Count,

                    snDetail = snDetail,
                    snDetail90 = snDetail90,
                    param = new
                    {
                        monthStart7 = monthStart7.ToString("yyyy-MM-dd"),
                        monthEnd7 = monthEnd7.ToString("MM-dd"),
                        monthStart = monthStart.ToString("yyyy-MM-dd"),
                        monthEnd = monthEnd.ToString("MM-dd"),
                        monthStart90 = monthStart90.ToString("yyyy-MM-dd"),
                        monthEnd90 = monthEnd90.ToString("MM-dd")
                    }
                };
                response.Count = licenseDs.Tables[0].Rows.Count;
                return response;
            }, catchRetrunValue: "list");
        }

        public Response<SimInfoReport> GetSimInfo(DateTime begin, int type = 0)
        {
            var response = new Response<SimInfoReport>();
            try
            {
                CalculateDateRanges(begin, out DateTime weekStartTime, out DateTime weekEndTime, out DateTime monthStartTime, out DateTime monthEndTime, out DateTime quarterStartTime, out DateTime quarterEndTime);
                var temp = Context.Queryable<base_gateway, base_gateway_vpnsim_rel, base_sim>((g, r, s) => new JoinQueryInfos
                                     (
                                         JoinType.Inner, g.gatewayKey == r.gatewayKey,
                                         JoinType.Inner, r.simKey == s.simKey
                                     )).Where((g, r, s) => s.getCardDate >= quarterStartTime && s.getCardDate <= quarterEndTime)
                                     .GroupBy((g, r, s) => new
                                     {
                                         s.suppliersInfo,
                                         s.getCardDate,
                                     }).Select((g, r, s) => new
                                     {
                                         s.suppliersInfo,
                                         s.getCardDate,
                                         Count = SqlFunc.AggregateCount(s.id)
                                     }).ToList();
                var month = new EquipmentReadinessRateArea();
                month.KunShan = temp.Where(x => x.suppliersInfo.Contains("昆山") && x.getCardDate >= monthStartTime && x.getCardDate <= monthEndTime).Sum(x => x.Count);
                month.XuZhou = temp.Where(x => x.suppliersInfo.Contains("徐州") && x.getCardDate >= monthStartTime && x.getCardDate <= monthEndTime).Sum(x => x.Count);
                month.ChangSha = temp.Where(x => x.suppliersInfo.Contains("长沙") && x.getCardDate >= monthStartTime && x.getCardDate <= monthEndTime).Sum(x => x.Count);
                month.Total = month.KunShan + month.XuZhou + month.ChangSha;

                var quarter = new EquipmentReadinessRateArea();
                quarter.KunShan = temp.Where(x => x.suppliersInfo.Contains("昆山")).Sum(x => x.Count);
                quarter.XuZhou = temp.Where(x => x.suppliersInfo.Contains("徐州")).Sum(x => x.Count);
                quarter.ChangSha = temp.Where(x => x.suppliersInfo.Contains("长沙")).Sum(x => x.Count);
                quarter.Total = quarter.KunShan + quarter.XuZhou + quarter.ChangSha;

                var startTime = monthStartTime;
                var endTime = monthEndTime;
                if (type != 0)
                {
                    startTime = quarterStartTime;
                    endTime = quarterEndTime;
                }
                var dataList = Context.Queryable<base_gateway, base_gateway_vpnsim_rel, base_sim>((g, r, s) => new JoinQueryInfos
                                     (
                                         JoinType.Inner, g.gatewayKey == r.gatewayKey,
                                         JoinType.Inner, r.simKey == s.simKey
                                     )).Where((g, r, s) => s.getCardDate >= startTime && s.getCardDate <= endTime)
                                     .Select((g, r, s) => new
                                     {
                                         g.gatewaySerialNumber,
                                         s.gatewayClient,
                                         s.suppliersInfo,
                                         s.getCardUser,
                                         s.debugDate,
                                         s.getCardDate,
                                     }).ToList();

                response.Result = new SimInfoReport
                {
                    Month = month,
                    Quarter = quarter,
                    KunShan = dataList.Where(x => x.suppliersInfo.Contains("昆山")).Select(x => new SimInfoReportDetail
                    {
                        GatewaySerialNumber = x.gatewaySerialNumber,
                        GatewayClient = x.gatewayClient,
                        GetCardUser = x.getCardUser,
                        DebugDate = x.debugDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                        GetCardDate = x.getCardDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                    }).ToList(),

                    XuZhou = dataList.Where(x => x.suppliersInfo.Contains("徐州")).Select(x => new SimInfoReportDetail
                    {
                        GatewaySerialNumber = x.gatewaySerialNumber,
                        GatewayClient = x.gatewayClient,
                        GetCardUser = x.getCardUser,
                        DebugDate = x.debugDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                        GetCardDate = x.getCardDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                    }).ToList(),

                    ChangSha = dataList.Where(x => x.suppliersInfo.Contains("长沙")).Select(x => new SimInfoReportDetail
                    {
                        GatewaySerialNumber = x.gatewaySerialNumber,
                        GatewayClient = x.gatewayClient,
                        GetCardUser = x.getCardUser,
                        DebugDate = x.debugDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                        GetCardDate = x.getCardDate?.ToString("yyyy-MM-dd HH:mm:ss"),
                    }).ToList(),
                };
                return response;
            }
            catch (Exception ex)
            {
                response.ResponseErr(ex.Message);
                return response;
            }
        }
    }
}