/// <summary>
        /// 生成报警记录
        /// </summary>
        /// <param name="defInfo"></param>
        /// <param name="sTime"></param>
        /// <param name="dataState"></param>
        /// <param name="state"></param>
        public static void CreateJC_BInfo(Jc_DefInfo defInfo, DateTime sTime, DeviceDataState dataState, DeviceRunState state)
        {
            Jc_BInfo alarmInfo   = new Jc_BInfo();
            string   controlport = string.Empty;

            alarmInfo.Cs      = "";
            alarmInfo.PointID = defInfo.PointID;
            alarmInfo.ID      = IdHelper.CreateLongId().ToString();
            alarmInfo.Devid   = defInfo.Devid;
            alarmInfo.Fzh     = defInfo.Fzh;
            alarmInfo.Kh      = defInfo.Kh;
            alarmInfo.Dzh     = defInfo.Dzh;
            alarmInfo.Kzk     = controlport;
            alarmInfo.Point   = defInfo.Point;

            alarmInfo.Ssz     = EnumHelper.GetEnumDescription(state);
            alarmInfo.Isalarm = (short)defInfo.Alarm;

            alarmInfo.Stime  = sTime;
            alarmInfo.Etime  = new DateTime(1900, 1, 1, 0, 0, 0);
            alarmInfo.Type   = (short)dataState;
            alarmInfo.State  = GetState((DeviceRunState)state, defInfo.Bz4);
            alarmInfo.Upflag = "0";
            alarmInfo.Wzid   = defInfo.Wzid;

            InsertJC_BInfo(alarmInfo);
        }
        /// <inheritdoc/>
        public string ToDelimitedString()
        {
            CultureInfo culture = CultureInfo.CurrentCulture;

            return(string.Format(
                       culture,
                       StringHelper.StringFormatSequence(0, 8, Configuration.FieldSeparator),
                       Id,
                       LotNumber?.ToDelimitedString(),
                       DeviceNumber?.ToDelimitedString(),
                       DeviceName,
                       DeviceDataState?.ToDelimitedString(),
                       LoadStatus?.ToDelimitedString(),
                       ControlCode.HasValue ? ControlCode.Value.ToString(Consts.NumericFormat, culture) : null,
                       OperatorName
                       ).TrimEnd(Configuration.FieldSeparator.ToCharArray()));
        }
        /// <summary>
        /// 结束报警记录
        /// </summary>
        /// <param name="pointid"></param>
        /// <param name="datastate"></param>
        /// <param name="time"></param>
        public static void EndJC_BInfo(string pointid, DeviceDataState datastate, DateTime time)
        {
            AlarmCacheGetByConditonRequest request = new AlarmCacheGetByConditonRequest();

            request.Predicate = p => p.Type == (short)datastate && p.PointID == pointid && (p.Etime < new DateTime(2000) || p.Etime == null);
            var result = alarmCacheService.GetAlarmCache(request);

            if (result.Data != null && result.IsSuccess)
            {
                List <Jc_BInfo> bItems = result.Data;
                foreach (Jc_BInfo item in bItems)
                {
                    item.Etime = time;
                    UpdateJC_BInfo(item);
                }
            }
        }