| @ -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; } | |||
| } | |||
| } | |||