| @ -0,0 +1,62 @@ | |||||
| using BWP.B3Frameworks.BO; | |||||
| using Forks.EnterpriseServices; | |||||
| using Forks.EnterpriseServices.DataDictionary; | |||||
| using Forks.EnterpriseServices.DataForm; | |||||
| using Forks.EnterpriseServices.DomainObjects2; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Data; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| namespace BWP.B3ClientService.BO | |||||
| { | |||||
| [DBIndex("IDX_B3ClientService_SegmentProductionInfo_Clustered", "BarCode", false, 0)] | |||||
| [DBIndexType("IDX_B3ClientService_SegmentProductionInfo_Clustered", IndexType.Normal)] | |||||
| [DFClass] | |||||
| [LogicName("分割品数据表")] | |||||
| public class SegmentProductionInfo : Base | |||||
| { | |||||
| public SegmentProductionInfo() | |||||
| { | |||||
| CreateTime = DateTime.Now; | |||||
| } | |||||
| [DbColumn(DbType = SqlDbType.DateTime)] | |||||
| [LogicName("创建时间")] | |||||
| public DateTime CreateTime { get; set; } | |||||
| [LogicName("条码")] | |||||
| public string BarCode { get; set; } | |||||
| #region 生产信息 | |||||
| [LogicName("生产时间")] | |||||
| [DbColumn(DbType = SqlDbType.DateTime)] | |||||
| public DateTime? ProductTime { get; set; } | |||||
| [LogicName("生产员")] | |||||
| public long? Worker_ID { get; set; } | |||||
| [LogicName("工作单元")] | |||||
| public long? WorkUnit_ID { get; set; } | |||||
| [LogicName("生产批次")] | |||||
| public long? ProductBatch_ID { get; set; } | |||||
| [LogicName("存货")] | |||||
| public long? Goods_ID { get; set; } | |||||
| [LogicName("重量")] | |||||
| public decimal? Weight { get; set; } | |||||
| #endregion | |||||
| #region 入库信息 | |||||
| [LogicName("入库时间")] | |||||
| [DbColumn(DbType = SqlDbType.DateTime)] | |||||
| public DateTime? InStoreTime { get; set; } | |||||
| #endregion | |||||
| #region 领用信息 | |||||
| #endregion | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,16 @@ | |||||
| using BWP.B3Frameworks.BO; | |||||
| using Forks.EnterpriseServices.DataForm; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using TSingSoft.WebPluginFramework; | |||||
| namespace BWP.B3ClientService.BO | |||||
| { | |||||
| [BOClass] | |||||
| public class SegmentTraceBackLog | |||||
| { | |||||
| public long SegmentProductionInfo_ID { get; set; } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,102 @@ | |||||
| using BWP.B3ClientService.BO; | |||||
| using Forks.EnterpriseServices.DomainObjects2; | |||||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||||
| using Forks.EnterpriseServices.JsonRpc; | |||||
| using Newtonsoft.Json; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using TSingSoft.WebPluginFramework; | |||||
| namespace BWP.B3ClientService.Rpcs | |||||
| { | |||||
| [Rpc] | |||||
| public static class SegmentProductionRpc | |||||
| { | |||||
| static string[] ProductInfoFields = new string[] { "ProductTime", "Worker_ID", "WorkUnit_ID", "ProductBatch_ID", "Goods_ID", "Weight" }; | |||||
| static Type MinDmoType = typeof(SegmentProductionMin); | |||||
| [Rpc(RpcFlags.SkipAuth)] | |||||
| public static int Insert(string json) | |||||
| { | |||||
| var list = JsonConvert.DeserializeObject<List<SegmentProductionMin>>(json); | |||||
| var dmoType = typeof(SegmentProductionInfo); | |||||
| using (var session = Dmo.NewSession()) | |||||
| { | |||||
| foreach (var item in list) | |||||
| { | |||||
| var id = Exist(session, item.BarCode); | |||||
| if (id == null) | |||||
| { | |||||
| var entity = new SegmentProductionInfo(); | |||||
| entity.BarCode = item.BarCode; | |||||
| foreach (var f in ProductInfoFields) | |||||
| dmoType.GetProperty(f).SetValue(entity, MinDmoType.GetProperty(f).GetValue(item, null), null); | |||||
| //还没做入库客户端,先这么搞 | |||||
| entity.InStoreTime = entity.ProductTime; | |||||
| session.Insert(entity); | |||||
| } | |||||
| else | |||||
| Update(session, id.Value, item, ProductInfoFields); | |||||
| } | |||||
| session.Commit(); | |||||
| } | |||||
| return list.Count; | |||||
| } | |||||
| private static void Update(IDmoSession session, long id, SegmentProductionMin entity, params string[] fields) | |||||
| { | |||||
| var update = new DQUpdateDom(typeof(SegmentProductionInfo)); | |||||
| foreach (var field in fields) | |||||
| update.Columns.Add(new DQUpdateColumn(field, DQExpression.Value(MinDmoType.GetProperty(field).GetValue(entity, null)))); | |||||
| update.Where.Conditions.Add(DQCondition.EQ("ID", id)); | |||||
| session.ExecuteNonQuery(update); | |||||
| } | |||||
| [Rpc(RpcFlags.SkipAuth)] | |||||
| public static int SetInStoreTime(string json) | |||||
| { | |||||
| var list = JsonConvert.DeserializeObject<List<SegmentProductionMin>>(json); | |||||
| using (var session = Dmo.NewSession()) | |||||
| { | |||||
| foreach (var item in list) | |||||
| { | |||||
| var id = Exist(session, item.BarCode); | |||||
| if (id.HasValue) | |||||
| { | |||||
| var entity = new SegmentProductionInfo(); | |||||
| entity.BarCode = item.BarCode; | |||||
| entity.InStoreTime = item.InStoreTime; | |||||
| session.Insert(entity); | |||||
| } | |||||
| else | |||||
| Update(session, id.Value, item, "InStoreTime"); | |||||
| } | |||||
| session.Commit(); | |||||
| } | |||||
| return list.Count; | |||||
| } | |||||
| static long? Exist(IDmoSession session, string barCode) | |||||
| { | |||||
| var query = new DQueryDom(new JoinAlias(typeof(SegmentProductionInfo))); | |||||
| query.Columns.Add(DQSelectColumn.Field("ID")); | |||||
| query.Where.Conditions.Add(DQCondition.EQ("BarCode", barCode)); | |||||
| return query.EExecuteScalar<long?>(session); | |||||
| } | |||||
| } | |||||
| class SegmentProductionMin | |||||
| { | |||||
| public string BarCode { get; set; } | |||||
| public DateTime? ProductTime { get; set; } | |||||
| public long? Worker_ID { get; set; } | |||||
| public long? WorkUnit_ID { get; set; } | |||||
| public long? ProductBatch_ID { get; set; } | |||||
| public long? Goods_ID { get; set; } | |||||
| public decimal? Weight { get; set; } | |||||
| public DateTime? InStoreTime { get; set; } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,131 @@ | |||||
| using BWP.B3ClientService.BO; | |||||
| using BWP.B3ClientService.Utils; | |||||
| using Forks.EnterpriseServices.DomainObjects2; | |||||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||||
| using Forks.EnterpriseServices.SqlDoms; | |||||
| using Newtonsoft.Json; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using TSingSoft.WebPluginFramework.TimerTasks; | |||||
| namespace BWP.B3ClientService.Tasks | |||||
| { | |||||
| public class SyncSegmentInfoToTraceBack : ITimerTask | |||||
| { | |||||
| public void Execute() | |||||
| { | |||||
| var url = new B3ClientServiceOnLineConfig().TraceBackUrl.Value; | |||||
| if (string.IsNullOrEmpty(url)) | |||||
| return; | |||||
| using (var session = Dmo.NewSession()) | |||||
| { | |||||
| Upload(session, url); | |||||
| session.Commit(); | |||||
| } | |||||
| } | |||||
| private void Upload(IDmoSession session, string url) | |||||
| { | |||||
| var sUrl = url + "SegmentInsert"; | |||||
| var list = GetTraceBackInfo(session); | |||||
| if (!list.Any()) | |||||
| return; | |||||
| var arr = JsonConvert.SerializeObject(list); | |||||
| TraceBackInfoUtil.Insert(sUrl, arr); | |||||
| foreach (var item in list) | |||||
| session.Insert(new SegmentTraceBackLog { SegmentProductionInfo_ID = item.ID }); | |||||
| } | |||||
| List<SegmentInfo> GetTraceBackInfo(IDmoSession session) | |||||
| { | |||||
| var list = new List<SegmentInfo>(); | |||||
| var main = new JoinAlias(typeof(SegmentProductionInfo)); | |||||
| var log = new JoinAlias(typeof(SegmentTraceBackLog)); | |||||
| var goods = new JoinAlias(typeof(Goods)); | |||||
| var query = new DQueryDom(main); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(log), DQCondition.EQ(main, "ID", log, "SegmentProductionInfo_ID")); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); | |||||
| query.Columns.Add(DQSelectColumn.Field("BarCode")); | |||||
| query.Columns.Add(DQSelectColumn.Field("Name",goods)); | |||||
| query.Columns.Add(DQSelectColumn.Field("Spec",goods)); | |||||
| query.Columns.Add(DQSelectColumn.Field("Weight")); | |||||
| query.Columns.Add(DQSelectColumn.Field("ProductTime")); | |||||
| query.Columns.Add(DQSelectColumn.Field("InStoreTime")); | |||||
| query.Columns.Add(DQSelectColumn.Field("ID")); | |||||
| query.Range = SelectRange.Top(500); | |||||
| query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); | |||||
| query.Where.Conditions.Add(DQCondition.And(DQCondition.IsNotNull(DQExpression.Field("ProductTime")), DQCondition.IsNotNull(DQExpression.Field("InStoreTime")), DQCondition.IsNull(DQExpression.Field(log, "SegmentProductionInfo_ID")))); | |||||
| using (var reader = session.ExecuteReader(query)) | |||||
| { | |||||
| while (reader.Read()) | |||||
| { | |||||
| var info = new SegmentInfo(); | |||||
| info.Code = (string)reader[0]; | |||||
| info.Goods_Name = (string)reader[1]; | |||||
| info.Goods_Spec = (string)reader[2]; | |||||
| info.Weight = string.Format("{0:#0.######}", reader[3]); | |||||
| info.ProductDate = string.Format("{0:yyyyMMdd}", reader[4]); | |||||
| info.ProductBatch = info.ProductDate; | |||||
| info.InStoreDate = string.Format("{0:yyyyMMdd}", reader[5]); | |||||
| info.ID = (long)reader[6]; | |||||
| info.Farm_Name = "自属备案养殖场"; | |||||
| info.TestingResult = "合格"; | |||||
| list.Add(info); | |||||
| } | |||||
| } | |||||
| return list; | |||||
| } | |||||
| public string Name | |||||
| { | |||||
| get { return "抽取分割信息到追溯服务器"; } | |||||
| } | |||||
| } | |||||
| class SegmentInfo | |||||
| { | |||||
| [JsonIgnore] | |||||
| public long ID { get; set; } | |||||
| //[LogicName("条码")] | |||||
| public string Code { get; set; } | |||||
| //[LogicName("产品名称")] | |||||
| public string Goods_Name { get; set; } | |||||
| //[LogicName("规格")] | |||||
| public string Goods_Spec { get; set; } | |||||
| //[LogicName("重量")] | |||||
| public string Weight { get; set; } | |||||
| //[LogicName("生产日期")] | |||||
| public string ProductDate { get; set; } | |||||
| //[LogicName("养殖场")] | |||||
| public string Farm_Name { get; set; } | |||||
| //[LogicName("检验结果")] | |||||
| public string TestingResult { get; set; } | |||||
| //[LogicName("检验人员")] | |||||
| public string TestingMan { get; set; } | |||||
| //[LogicName("生产批次")] | |||||
| public string ProductBatch { get; set; } | |||||
| //[LogicName("入库日期")] | |||||
| public string InStoreDate { get; set; } | |||||
| //[LogicName("发货时间")] | |||||
| public string SendDate { get; set; } | |||||
| //[LogicName("发货客户")] | |||||
| public string SendCustomer { get; set; } | |||||
| //[LogicName("货运车牌")] | |||||
| public string CarNo { get; set; } | |||||
| } | |||||
| } | |||||