using BrightIdeasSoftware; using ryCommon; using ryCommonDb; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; namespace MyHouse.DbOp { public partial class FrmGoodsView : RySkins.SKinForm { string titleName = "物品"; public FrmGoodsView() { InitializeComponent(); OlvLocSNAndName.AspectGetter = delegate (object x) { var item = ((LocationInfo)x); return "【"+item.SN+"】"+item.Name; }; LvLocation.CanExpandGetter = delegate (object x) { var item = ((LocationInfo)x); return item.ChildrenCount > 0; }; LvLocation.ChildrenGetter = delegate (object x) { var item = ((LocationInfo)x); var list = LoadLocation(item.Id); return list; }; LvLocation.IsSimpleDragSource = true; LvLocation.IsSimpleDropSink = true; LvLocation.ModelCanDrop += delegate (object sender, ModelDropEventArgs e) { e.Effect = DragDropEffects.None; if(锁定不允许拖动ToolStripMenuItem.Checked) { e.InfoMessage = "当前拖动模式已关闭";return; } if (e.TargetModel == null) return; var TargetModel = (LocationInfo)e.TargetModel; for (int i = 0; i < e.SourceModels.Count; i++) { var item_source = (LocationInfo)e.SourceModels[i]; if (item_source == TargetModel) { return; } if (item_source.Id == TargetModel.ParentId) { return; } if (TargetModel.IdPath.IndexOfEx("/"+item_source.Id+"/")>=0) { return; } } if (e.TargetModel is LocationInfo) e.Effect = e.StandardDropActionFromKeys; else e.InfoMessage = "无法移动"; }; LvLocation.ModelDropped += delegate (object sender, ModelDropEventArgs e) { var item_target = ((LocationInfo)e.TargetModel); var list_source = e.SourceModels; IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); List list = new List(); if (db.ConnDb(Itrycn_Db.SQLConnStr) == 1) { for (int i = 0; i < list_source.Count; i++) { var item_source = (LocationInfo)list_source[i]; db.ExecuteNonQuery("update Location set ParentId=" + item_target.Id+ " where id=" + item_source.Id); var ds_loc = db.ReadData("select count(*) from Location where ParentId=" + item_source.ParentId); if (ds_loc.HaveData()) { db.ExecuteNonQuery("update Location set ChildrenCount=" + ds_loc.GetFirstRowCellValue() + " where id=" + item_source.ParentId); } ds_loc.Dispose(); Itrycn_Db.SetLocationIdPath(item_target.Id); } var ds_loc2 = db.ReadData("select count(*) from Location where ParentId=" + item_target.Id); if (ds_loc2.HaveData()) { db.ExecuteNonQuery("update Location set ChildrenCount=" + ds_loc2.GetFirstRowCellValue() + " where id=" + item_target.Id); item_target.ChildrenCount = ds_loc2.GetFirstRowCellValue(); } else { item_target.ChildrenCount = 0; } ds_loc2.Dispose(); } db.Free(); e.RefreshObjects(); }; TreeListView.TreeRenderer treeColumnRenderer = this.LvLocation.TreeColumnRenderer; treeColumnRenderer.IsShowGlyphs = true; treeColumnRenderer.UseTriangles = true; OlvSN.AspectGetter = delegate (object x) { return ((GoodInfo)x).SN; }; OlvName.AspectGetter = delegate (object x) { return ((GoodInfo)x).Name; }; OlvCount.AspectGetter = delegate (object x) { return ((GoodInfo)x).Count; }; OlvCount.AspectToStringConverter = delegate (object row, object x) { var item = (GoodInfo)row; return item.Count + " " + item.Unit; }; OlvOutTime.AspectGetter = delegate (object x) { return ((GoodInfo)x).OutTimeStr; }; OlvCleanTime.AspectGetter = delegate (object x) { return ((GoodInfo)x).CleanTimeStr; }; OlvChargingTime.AspectGetter = delegate (object x) { return ((GoodInfo)x).ChargingTimeStr; }; this.objectListView1.RowHeight = 48; this.objectListView1.UseAlternatingBackColors = false; this.objectListView1.UseHotItem = false; this.olvColumn1.Renderer = CreateDescribedTaskRenderer(); this.olvColumn1.AspectGetter = delegate (object x) { var op = (OpInfo)x; return op.OpTimeStr + " " + op.NickName; }; LvGoods.FormatRow += LvGoods_FormatRow; LvLocation.CellToolTipGetter = delegate (OLVColumn column, object x) { return ((LocationInfo)x).Des; }; } private void LvGoods_FormatRow(object sender, FormatRowEventArgs e) { var row = (GoodInfo)e.Model; if(row.TipOn) { if(row.Count<=row.TipCount) { e.Item.ForeColor = Color.Red; } else { e.Item.ForeColor = Color.Black; } } else { e.Item.ForeColor = Color.Black; } if(row.OutTime>0) { if(row.OutTime<=DateTime.Now.AddDays(7).ToInt64()) { if (row.Count > 0) { e.Item.ForeColor = Color.Red; } else { e.Item.ForeColor = Color.Gray; ; } } } if (row.Count <= 0) { e.Item.ForeColor = Color.Gray; ; } } private DescribedTaskRenderer CreateDescribedTaskRenderer() { // Let's create an appropriately configured renderer. DescribedTaskRenderer renderer = new DescribedTaskRenderer(); renderer.DescriptionAspectName = "OpDes"; renderer.UseCustomCheckboxImages = true; // Change the formatting slightly renderer.TitleFont = new Font("微软雅黑", 10, FontStyle.Regular); renderer.TitleColor = Color.Blue; renderer.DescriptionFont = new Font("Tahoma", 9); renderer.DescriptionColor = Color.Gray; renderer.TopSpace = 2; renderer.TitleDescriptionSpace = 1; renderer.UseGdiTextRendering = true; return renderer; } #region 需要修改的内容 private void RySearch1_OnSearch(object sender, EventArgs e) { //需要修改此处 ctlMyPage1.RecordCount = 1; ctlMyPage1.GotoPageIndex(1); } private List LoadLocation(int ParentId) { #region 重新载入数据 var list = new List(); string post_str = "api=GetLocationByParentId&ParentId=" + ParentId; var jsonResult = API.API.Post("Goods", "GetLocationByParentId", post_str); if (jsonResult.IsOK) { DataTable data = jsonResult.List; for (int i = 0; i < data.Rows.Count; i++) { DataRow row = data.Rows[i]; list.Add(new LocationInfo() { Id = row["id"].ToInt(), SN = row["SN"].ToString(), Name = row["Name"].ToString(), Img = row["img"].ToString(), Des = row["Des"].ToString(), IdPath = row["IdPath"].ToString(), ChildrenCount = row["ChildrenCount"].ToInt(), ParentId = row["ParentId"].ToInt(), AddTime = row["AddTime"].ToInt64().ToDateTime() }); } } return list; #endregion } private void LoadLocation() { #region 重新载入数据 LvLocation.ClearObjects(); var list = new List(); //var list=LoadLocation(0); list.Insert(0,new LocationInfo() { Id = 0, SN = "-", Name = "所有位置", ChildrenCount = LoadLocation(0).Count }); LvLocation.Roots = list; LvLocation.Expand(list[0]); #endregion } private void CtlMyPage1_OnPageChange(object sender, EventArgs e) { #region 重新载入数据 var LocationId = 0; if (LvLocation.SelectedObject != null) { var item = (LocationInfo)LvLocation.SelectedObject; if (item.Id > 0) { LocationId = item.Id; } } var LowTip = ChkLowTip.Checked?1:0; var page_index = ctlMyPage1.GetCurrPageIndex(); if (page_index == 0) { page_index = 1; } LvGoods.ClearObjects(); List list = new List(); string post_str = "api=GetGoodsList&name=" + RyWeb.WebDecode.UrlEncode(rySearch1.Text)+ "&page="+ page_index+(page_index==1? "&getpagecount=1&LocationId="+ LocationId+ "&LowTip="+ LowTip : ""); var jsonResult = API.API.Post("Goods", "GetGoodsList", post_str); if (jsonResult.IsOK) { if (page_index == 1) { ctlMyPage1.RecordCount = jsonResult.Get("pagecount", 0); } DataTable data = jsonResult.List; for (int i = 0; i < data.Rows.Count; i++) { DataRow row = data.Rows[i]; list.Add(new GoodInfo() { Id=row["id"].ToInt(), SN = row["SN"].ToString(), Name = row["Name"].ToString(), Count=row["iCount"].ToDouble(), Unit = row["Unit"].ToString(), LocationId = row["LocationId"].ToInt(), Des = row["Des"].ToString(), TipOn = row["TipOn"].ToBool(), TipCount = row["TipCount"].ToDouble(), OutTime = row["OutTime"].ToInt64(), AddTime = row["AddTime"].ToInt64().ToDateTime(), CleanInterval = row["CleanInterval"].ToInt(), CleanTime = row["CleanTime"].ToInt64(), ChargingInterval = row["ChargingInterval"].ToInt(), ChargingTime = row["ChargingTime"].ToInt64(), }) ; } } LvGoods.AddObjects(list); #endregion } private void GetRow(int id, int index) { #region 重新载入数据 string post_str = "api=GetGoods&id=" +id; var jsonResult = API.API.Post("Goods", "GetGoods", post_str); if (jsonResult.IsOK) { DataTable data = jsonResult.List; if (data.Rows.Count>0) { DataRow row = data.Rows[0]; var item=(GoodInfo) LvGoods.GetModelObject(index); item.SN = row["SN"].ToString(); item.Name = row["Name"].ToString(); item.Count = row["iCount"].ToDouble(); item.TipOn = row["TipOn"].ToBool(); item.TipCount = row["TipCount"].ToDouble(); item.Unit = row["Unit"].ToString(); item.LocationId = row["LocationId"].ToInt(); item.Des = row["Des"].ToString(); item.OutTime = row["OutTime"].ToInt64(); item.CleanInterval= row["CleanInterval"].ToInt(); item.ChargingInterval = row["ChargingInterval"].ToInt(); item.CleanTime = row["CleanTime"].ToInt64(); item.ChargingTime = row["ChargingTime"].ToInt64(); //添加剩余的项目 //添加完毕 LvGoods.UpdateObject(item); } } #endregion } #endregion private void BtnAdd_Click(object sender, EventArgs e) { var LocationId = 0; if (LvLocation.SelectedObject != null) { var item = (LocationInfo)LvLocation.SelectedObject; if (item.Id > 0) { LocationId = item.Id; } } FrmGoodsAdd frm = new FrmGoodsAdd() { Text = "添加"+ titleName, Icon = Icon, isAdd = 1, LocationId=LocationId }; frm.GetByAdd(); frm.mr = new ModalForm(this, frm); frm.mr.OnDialogResult += new ModalForm.DialogResultHandler((object t, DialogResult dg) => { if (dg == DialogResult.OK) { rySearch1.PerformClick(); } }); frm.mr.ShowModal(); } private void BtnEdit_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; var selectId = item.Id; FrmGoodsAdd frm = new FrmGoodsAdd() { Text = "修改"+ titleName, Icon = Icon, isAdd = 0 }; frm.GetInfo(selectId.ToString()); frm.mr = new ModalForm(this, frm); frm.mr.OnDialogResult += new ModalForm.DialogResultHandler((object t, DialogResult dg) => { if (dg == DialogResult.OK) { GetRow(selectId, LvGoods.SelectedIndex); } }); frm.mr.ShowModal(); } private void BtnDel_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { MessageBox.Show("请先选择要删除的项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var item = (GoodInfo)LvGoods.SelectedObject; var selectId = item.Id; if (RySkins.Msg.ShowMsg("确定要删除该项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) { return; } string post_str = "api=DelGoods&id=" + selectId; var jsonResult = API.API.Post("Goods", "DelGoods", post_str); if (jsonResult.IsOK) { LvGoods.RemoveObject(item); } else { API.API.ErrorJson(jsonResult); } } private void FrmView_Load(object sender, EventArgs e) { Text = "浏览"+ titleName; 添加数据ToolStripMenuItem.Text = "添加"+ titleName; 修改数据ToolStripMenuItem.Text = "修改" + titleName; 删除数据ToolStripMenuItem.Text = "删除" + titleName; LoadLocation(); rySearch1.PerformClick(); } private void 添加数据ToolStripMenuItem_Click(object sender, EventArgs e) { btnAdd.PerformClick(); } private void 修改数据ToolStripMenuItem_Click(object sender, EventArgs e) { btnEdit.PerformClick(); } private void 删除数据ToolStripMenuItem_Click(object sender, EventArgs e) { btnDel.PerformClick(); } private void 复制并添加数据ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; var selectId = item.Id; FrmGoodsAdd frm = new FrmGoodsAdd() { Text = "添加" + titleName, Icon = Icon, isAdd = 1 }; frm.GetInfo(selectId.ToString()); frm.mr = new ModalForm(this, frm); frm.mr.OnDialogResult += new ModalForm.DialogResultHandler((object t, DialogResult dg) => { if (dg == DialogResult.OK) { rySearch1.PerformClick(); } }); frm.mr.ShowModal(); } private void GetItemUI(int rowindex) { int id; if (LvGoods.GetItemCount() > rowindex && rowindex >= 0) { var item =(GoodInfo)LvGoods.GetModelObject(rowindex); id = item.Id; TxtGoodsSN.Text = item.SN; TxtGoodsName.Text = item.Name; TxtGoodsSN.Tag = id; TxtUnit.Text = item.Unit; TxtLocation.Text = ""; BtnLocationImage.Tag = ""; TxtLocation.ToolTip = ""; TxtChargingTime.Text = item.ChargingTimeStr; TxtCleanTime.Text =item.CleanTimeStr; TxtCount.Text = item.Count.ToString().Replace(".00",""); Thread th = new Thread(Start); th.Start(); void Start() { string post_str = "api=GetGoods&id=" + id; var jsonResult = API.API.Post("Goods", "GetGoods", post_str); if (jsonResult.IsOK) { DataTable data = jsonResult.List; DataRow row = data.Rows[0]; new Thread(GetImage).Start(); void GetImage() { var image = API.WebDav.LoadPic(Public_Config.WebDav_VistorUrl + "/" + row["img"].ToString()); this.Invoke(new Action(() => { PicLogo.Image = image; })); } this.Invoke(new Action(() => { TxtDes.Text = row["Des"].ToString(); TxtAddTime.Text = row["AddTime"].ToInt64().ToDateTime().ToString("yyyy-MM-dd dddd HH:mm"); TxtEditTime.Text = row["EditTime"].ToInt64().ToDateTime().ToString("yyyy-MM-dd dddd HH:mm"); })); post_str = "api=GetLocation&id=" + row["LocationId"].ToInt(); jsonResult = API.API.Post("Goods", "GetLocation", post_str); if (jsonResult.IsOK) { DataTable data_loc = jsonResult.List; DataRow row_loc = data_loc.Rows[0]; this.Invoke(new Action(() => { TxtLocation.Text = "【" + row_loc["SN"].ToString() + "】" + row_loc["Name"].ToString(); TxtLocation.ToolTip = row_loc["Des"].ToString(); BtnLocationImage.Tag = row_loc["img"].ToString(); })); } objectListView1.ClearObjects(); List list_op = new List(); post_str = "api=GetLogs&id=" + id; jsonResult = API.API.Post("Goods", "GetLogs", post_str); if (jsonResult.IsOK) { DataTable data_log = jsonResult.List; for (int i = 0; i < data_log.Rows.Count; i++) { DataRow reader_log = data_log.Rows[i]; string uName = Itrycn_Db.GetNickName(reader_log["UserId"].ToString()); list_op.Add(new OpInfo() { Id = reader_log["id"].ToInt(), OpTime = reader_log["AddTime"].ToInt64().ToDateTime(), NickName = uName, OpDes = reader_log["Des"].ToString().Trim() }); } objectListView1.AddObjects(list_op); } } } } else { TxtGoodsName.Text = ""; TxtEditTime.Text = ""; TxtAddTime.Text = ""; TxtGoodsSN.Text = ""; TxtGoodsSN.Tag = 0; TxtUnit.Text = ""; TxtCount.Text = ""; TxtDes.Text = ""; TxtLocation.Text = ""; BtnLocationImage.Tag = ""; TxtLocation.ToolTip = ""; TxtChargingTime.Text = ""; TxtCleanTime.Text = ""; PicLogo.Image = null; objectListView1.ClearObjects(); return; } } private void 物品出库ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; var id = item.Id; FrmGoodsEntry frm = new FrmGoodsEntry(); frm.Icon = Icon; frm.Text = "物品出库"; frm.IsAdd = false; frm.GetInfo(id.ToString()); if (frm.ShowDialog() == DialogResult.OK) { var row_index = LvGoods.SelectedIndex; GetRow(id,row_index); GetItemUI(row_index); } frm.Dispose(); } private void 物品入库ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; var id = item.Id; FrmGoodsEntry frm = new FrmGoodsEntry(); frm.Icon = Icon; frm.Text = "物品入库"; frm.IsAdd = true; frm.GetInfo(id.ToString()); if (frm.ShowDialog() == DialogResult.OK) { var row_index = LvGoods.SelectedIndex; GetRow(id, row_index); GetItemUI(row_index); } frm.Dispose(); } private void LvGoods_SelectionChanged(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { GetItemUI(-1); return; } var row_index = LvGoods.SelectedIndex; GetItemUI(row_index); } private void PicLogo_Click(object sender, EventArgs e) { OTools.FrmPreview frm=new OTools.FrmPreview(); frm.pictureBox1.Image = PicLogo.Image; frm.ShowDialog(); frm.Dispose(); } private void BtnLocationImage_Click(object sender, EventArgs e) { OTools.FrmPreview frm = new OTools.FrmPreview(); frm.pictureBox1.Image = API.WebDav.LoadPic(Public_Config.WebDav_VistorUrl + "/" + BtnLocationImage.Tag.ToString()); frm.ShowDialog(); frm.Dispose(); } private void LvLocation_SelectionChanged(object sender, EventArgs e) { if (LvLocation.SelectedObject == null) { return; } var item = (LocationInfo)LvLocation.SelectedObject; PicLocLogo.Image = API.WebDav.LoadPic(Public_Config.WebDav_VistorUrl + "/" + item.Img); rySearch1.PerformClick(); } private void PicLocLogo_Click(object sender, EventArgs e) { OTools.FrmPreview frm = new OTools.FrmPreview(); frm.pictureBox1.Image = PicLocLogo.Image; frm.ShowDialog(); frm.Dispose(); } private void 刷新列表ToolStripMenuItem_Click(object sender, EventArgs e) { LoadLocation(); } private void 位置编辑界面ToolStripMenuItem_Click(object sender, EventArgs e) { FrmLocationView frm=new FrmLocationView(); frm.ShowDialog(); frm.Dispose(); LoadLocation(); } private void LvLocation_ItemActivate(object sender, EventArgs e) { Object model = this.LvLocation.SelectedObject; if (model != null) this.LvLocation.ToggleExpansion(model); } private void 编辑位置ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvLocation.SelectedObject == null) { return; } var item = (LocationInfo)LvLocation.SelectedObject; var selectId = item.Id; FrmLocationAdd frm = new FrmLocationAdd() { Text = "修改存储位置", Icon = Icon, isAdd = 0, CanEditLoc = false }; frm.GetInfo(selectId.ToString()); if(frm.ShowDialog() == DialogResult.OK) { string post_str = "api=GetLocation&id=" + selectId; var jsonResult = API.API.Post("Goods", "GetLocation", post_str); if (jsonResult.IsOK) { DataTable data = jsonResult.List; if (data.Rows.Count>0) { DataRow row = data.Rows[0]; item.SN = row["SN"].ToString(); item.Name = row["Name"].ToString(); item.Img = row["img"].ToString(); item.Des = row["Des"].ToString(); item.IdPath = row["IdPath"].ToString(); item.ChildrenCount = row["ChildrenCount"].ToInt(); item.ParentId = row["ParentId"].ToInt(); LvLocation.RefreshObject(item); } } } frm.Dispose(); } private void 添加位置ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvLocation.SelectedObject == null) { return; } var item = (LocationInfo)LvLocation.SelectedObject; FrmLocationAdd frm = new FrmLocationAdd() { Text = "添加存储位置", Icon = Icon, isAdd = 1, ParentId = item.Id }; frm.GetByAdd(); if (frm.ShowDialog() == DialogResult.OK) { try { LvLocation.RefreshObject(item); } catch { } } frm.Dispose(); } private void ChkLowTip_CheckedChanged(object sender, EventArgs e) { rySearch1.PerformClick(); } private void 设置清洁充电时间ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; FrmSetOpTime frm = new FrmSetOpTime(); frm.TxtGoodsName.Text = "【" + item.SN + "】" + item.Name; frm.OpId = item.Id; if(frm.ShowDialog()==DialogResult.OK) { GetRow(item.Id, LvGoods.SelectedIndex); GetItemUI(LvGoods.SelectedIndex); } frm.Dispose(); } private void 复制web地址ToolStripMenuItem_Click(object sender, EventArgs e) { if (LvGoods.SelectedObject == null) { return; } var item = (GoodInfo)LvGoods.SelectedObject; RyFiles.CopyToClip("http://lfx88.top:888/ASPNET/MyHouse/ShowGoods.aspx?mode=goodsinfo&sn="+item.SN); } } public class OpInfo { public int Id { get; set; } public DateTime OpTime { get; set; } public string OpTimeStr { get { string dt_str = OpTime.ToString("yyyy-MM-dd dddd HH:mm:ss"); if (OpTime.Date == DateTime.Now.Date) { dt_str = "今天 " + OpTime.ToString("HH:mm:ss"); } else if (OpTime.Date.AddDays(1) == DateTime.Now.Date) { dt_str = "昨天 " + OpTime.ToString("HH:mm:ss"); } else if (OpTime.Date.AddDays(2) == DateTime.Now.Date) { dt_str = "前天 " + OpTime.ToString("HH:mm:ss"); } else if (OpTime.Year == DateTime.Now.Year) { dt_str = OpTime.ToString("MM-dd dddd HH:mm:ss"); } return dt_str; } } public string NickName { get; set; } public string OpDes { get; set; } } class GoodInfo { /// /// id /// public int Id{ get; set; } /// /// 编号 /// public string SN { get; set; } /// /// 名称 /// public string Name { get; set; } /// /// 数量 /// public double Count { get; set; } = 0; /// /// 单位 /// public string Unit { get; set; } = ""; /// /// 备注 /// public string Des { get; set; } = ""; /// /// 位置id /// public int LocationId { get; set; } = 0; /// /// 过期时间 /// public long OutTime { get; set; } = 0; /// /// 是否开启提醒 /// public bool TipOn { get; set; } = false; /// /// 提醒阈值数量 /// public double TipCount { get; set; } = 0; /// /// 过期时间字符串 /// public string OutTimeStr { get { if (OutTime == 0) { return "不过期"; } return OutTime.ToDateTime().AddDays(-1).ToString("yyyy-MM-dd dddd"); } } /// /// 添加时间 /// public DateTime AddTime { get; set; } /// /// 添加时间字符串 /// public string AddTimeStr { get { return AddTime.ToString("yyyy-MM-dd dddd HH:mm:ss"); } } /// /// 清洁间隔 /// public int CleanInterval { get; set; } /// /// 清洁时间 /// public long CleanTime { get; set; } /// /// 清洁时间字符串 /// public string CleanTimeStr { get { if (CleanInterval == 0) { return ""; } if (CleanTime == 0) { return "尚未清洁"; } var dt = CleanTime.ToDateTime().AddDays(CleanInterval); if (dt < DateTime.Now) { return dt.ToString("yyyy-MM-dd dddd") + "(已过期)"; } else { return dt.ToString("yyyy-MM-dd dddd"); } } } /// /// 充电间隔 /// public int ChargingInterval { get; set; } /// /// 充电时间 /// public long ChargingTime { get; set; } /// /// 充电时间字符串 /// public string ChargingTimeStr { get { if (ChargingInterval == 0) { return ""; } if (ChargingTime == 0) { return "尚未充电"; } var dt = ChargingTime.ToDateTime().AddDays(ChargingInterval); if (dt < DateTime.Now) { return dt.ToString("yyyy-MM-dd dddd") + "(已过期)"; } else { return dt.ToString("yyyy-MM-dd dddd"); } } } } }