SmartHouseAPI/Source/MyHouse/DbOp/FrmGoodsView.cs
zilinsoft f0ff641ed4 ## 2025-02-08 星期六更新
### MyHouse    V1.0.2502.0801
- *.[新增]适配新版接口。
### SmartHouseAPI    V1.0.2502.0801
- *.[新增]支持Docker部署,支持NAS。
2025-02-08 17:01:20 +08:00

855 lines
33 KiB
C#

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<GoodInfo> list = new List<GoodInfo>();
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<LocationInfo> LoadLocation(int ParentId)
{
#region
var list = new List<LocationInfo>();
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<LocationInfo>();
//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<GoodInfo> list = new List<GoodInfo>();
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<OpInfo> list_op = new List<OpInfo>();
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
{
/// <summary>
/// id
/// </summary>
public int Id{ get; set; }
/// <summary>
/// 编号
/// </summary>
public string SN { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 数量
/// </summary>
public double Count { get; set; } = 0;
/// <summary>
/// 单位
/// </summary>
public string Unit { get; set; } = "";
/// <summary>
/// 备注
/// </summary>
public string Des { get; set; } = "";
/// <summary>
/// 位置id
/// </summary>
public int LocationId { get; set; } = 0;
/// <summary>
/// 过期时间
/// </summary>
public long OutTime { get; set; } = 0;
/// <summary>
/// 是否开启提醒
/// </summary>
public bool TipOn { get; set; } = false;
/// <summary>
/// 提醒阈值数量
/// </summary>
public double TipCount { get; set; } = 0;
/// <summary>
/// 过期时间字符串
/// </summary>
public string OutTimeStr
{
get {
if (OutTime == 0) { return "不过期"; }
return OutTime.ToDateTime().AddDays(-1).ToString("yyyy-MM-dd dddd");
}
}
/// <summary>
/// 添加时间
/// </summary>
public DateTime AddTime { get; set; }
/// <summary>
/// 添加时间字符串
/// </summary>
public string AddTimeStr
{
get { return AddTime.ToString("yyyy-MM-dd dddd HH:mm:ss"); }
}
/// <summary>
/// 清洁间隔
/// </summary>
public int CleanInterval { get; set; }
/// <summary>
/// 清洁时间
/// </summary>
public long CleanTime { get; set; }
/// <summary>
/// 清洁时间字符串
/// </summary>
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");
}
}
}
/// <summary>
/// 充电间隔
/// </summary>
public int ChargingInterval { get; set; }
/// <summary>
/// 充电时间
/// </summary>
public long ChargingTime { get; set; }
/// <summary>
/// 充电时间字符串
/// </summary>
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");
}
}
}
}
}