Newer
Older
Correlator / Correlator / DataService / ApplicationDataServiceImpl.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Media;
using Correlator.Model;
using Correlator.Util;
using Newtonsoft.Json;

namespace Correlator.DataService
{
    internal class ApplicationDataServiceImpl : IApplicationDataService
    {
        /// <summary>
        /// 管材
        /// </summary>
        private readonly string[] _materials =
        {
            "球铁", "铸铁", "钢", "铜", "铅", "水泥", "聚氯乙烯", "高密度聚乙烯", "中密度聚乙烯", "玻璃钢", "混凝土", "粘土", "低密度聚乙烯"
        };

        public List<string> GetPipeMaterials()
        {
            return _materials.ToList();
        }

        public ObservableCollection<MaterialVelocity> GetVelocityCollection(string materialName)
        {
            var velocityCollection = new ObservableCollection<MaterialVelocity>();
            using (var manager = new DataBaseManager())
            {
                var velocities = manager
                    .Table<MaterialVelocity>()
                    .Where(x => x.MaterialName == materialName)
                    .OrderBy(x => x.LowDiameter)
                    .ToList();
                foreach (var model in velocities)
                {
                    velocityCollection.Add(model);
                }
            }

            return velocityCollection;
        }

        public void DeleteVelocity(MaterialVelocity velocity)
        {
            using (var manager = new DataBaseManager())
            {
                manager.Delete(velocity);
            }
        }

        public void InsertVelocity(string materialName, string minDiameter, string maxDiameter, string soundSpeed)
        {
            using (var manager = new DataBaseManager())
            {
                var velocity = new MaterialVelocity
                {
                    MaterialName = materialName,
                    LowDiameter = Convert.ToInt32(minDiameter),
                    HighDiameter = Convert.ToInt32(maxDiameter),
                    Velocity = Convert.ToInt32(soundSpeed)
                };
                manager.Insert(velocity);
            }
        }

        public void UpdateVelocity(MaterialVelocity velocity, string minDiameter, string maxDiameter, string soundSpeed)
        {
            using (var manager = new DataBaseManager())
            {
                velocity.LowDiameter = Convert.ToInt32(minDiameter);
                velocity.HighDiameter = Convert.ToInt32(maxDiameter);
                velocity.Velocity = Convert.ToInt32(soundSpeed);

                "ApplicationDataServiceImpl".WriteLog("正在修改的管材是:" + JsonConvert.SerializeObject(velocity));
                manager.Update(velocity);
            }
        }

        public int GetSoundVelocity(string material, int pipeDiameter)
        {
            using (var manager = new DataBaseManager())
            {
                //多条件查询
                var materialVelocities = manager
                    .Table<MaterialVelocity>()
                    .Where(mv =>
                        mv.MaterialName == material &&
                        mv.LowDiameter <= pipeDiameter &&
                        mv.HighDiameter >= pipeDiameter
                    );
                if (materialVelocities.Any())
                {
                    return materialVelocities.Select(mv => mv.Velocity).FirstOrDefault();
                }

                return 0;
            }
        }

        public AudioVisualizer GetAudioVisualizer(int waveDataSize)
        {
            return new AudioVisualizer(waveDataSize);
        }

        public Color[] GetAllHsvColors()
        {
            var result = new Color[256 * 6];

            for (var i = 0; i <= 255; i++)
            {
                result[i] = Color.FromArgb(255, 255, (byte)i, 0);
            }

            for (var i = 0; i <= 255; i++)
            {
                result[256 + i] = Color.FromArgb(255, (byte)(255 - i), 255, 0);
            }

            for (var i = 0; i <= 255; i++)
            {
                result[512 + i] = Color.FromArgb(255, 0, 255, (byte)i);
            }

            for (var i = 0; i <= 255; i++)
            {
                result[768 + i] = Color.FromArgb(255, 0, (byte)(255 - i), 255);
            }

            for (var i = 0; i <= 255; i++)
            {
                result[1024 + i] = Color.FromArgb(255, (byte)i, 0, 255);
            }

            for (var i = 0; i <= 255; i++)
            {
                result[1280 + i] = Color.FromArgb(255, 255, 0, (byte)(255 - i));
            }

            return result;
        }

        public ObservableCollection<SampleRateModel> GetSampleRate()
        {
            var sampleRateCollection = new ObservableCollection<SampleRateModel>();
            using (var manager = new DataBaseManager())
            {
                var result = manager
                    .Table<SampleRateModel>()
                    .ToList();
                foreach (var model in result)
                {
                    sampleRateCollection.Add(model);
                }
            }

            return sampleRateCollection;
        }

        public int GetSampleRateByWorkMode(int mode)
        {
            using (var manager = new DataBaseManager())
            {
                var result = manager.Table<SampleRateModel>();
                if (!result.Any())
                {
                    return 7500;
                }

                var sampleRateModel = result.First(x => x.WorkMode == mode);
                return sampleRateModel.SampleRate;
            }
        }

        public void UpdateSampleRate(int mode, int sampleRate)
        {
            using (var manager = new DataBaseManager())
            {
                var result = manager
                    .Table<SampleRateModel>()
                    .First(x => x.WorkMode == mode);
                var rateModel = result ?? new SampleRateModel();

                rateModel.WorkMode = mode;
                rateModel.SampleRate = sampleRate;
                rateModel.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                manager.Update(rateModel);
            }
        }
    }
}