Browse Source

分割品上传及追溯。

master
yibo 7 years ago
parent
commit
698f0a453a
5 changed files with 315 additions and 0 deletions
  1. +4
    -0
      B3ClientService/B3ClientService.csproj
  2. +62
    -0
      B3ClientService/BO/Bill/SegmentProductionInfo.cs
  3. +16
    -0
      B3ClientService/BO/Bill/SegmentTraceBackLog.cs
  4. +102
    -0
      B3ClientService/OfflinRpc/SegmentProductionRpc.cs
  5. +131
    -0
      B3ClientService/Tasks/SyncSegmentInfoToTraceBack.cs

+ 4
- 0
B3ClientService/B3ClientService.csproj View File

@ -157,6 +157,8 @@
<Compile Include="BO\Bill\SecondOrder\SecondOrder_Detail.cs" />
<Compile Include="BO\Bill\SectionStore\SectionGoodsConfig.cs" />
<Compile Include="BO\Bill\SectionStore\SectionStoreDetail.cs" />
<Compile Include="BO\Bill\SegmentTraceBackLog.cs" />
<Compile Include="BO\Bill\SegmentProductionInfo.cs" />
<Compile Include="BO\Bill\SyncCarcassInStoreLog.cs" />
<Compile Include="BO\Bill\WeightBill\WeightBill.cs" />
<Compile Include="BO\Bill\WeightBill\WeightBillCheck.cs" />
@ -202,6 +204,7 @@
<Compile Include="OfflinRpc\GradeAndWeightBL.cs" />
<Compile Include="OfflinRpc\LoginRpc.cs" />
<Compile Include="OfflinRpc\SectionStoreDetailRpc.cs" />
<Compile Include="OfflinRpc\SegmentProductionRpc.cs" />
<Compile Include="Rpcs\BillRpc\BaseInfoRpc.cs" />
<Compile Include="Rpcs\BillRpc\BeforeDeathRpc.cs" />
<Compile Include="Rpcs\BillRpc\ByProductWeightRecordRpc.cs" />
@ -245,6 +248,7 @@
<Compile Include="Tasks\SyncCarcassInStoreToTrackBack.cs" />
<Compile Include="Tasks\SyncInfoFromServer.cs" />
<Compile Include="Tasks\SyncBillFromServer.cs" />
<Compile Include="Tasks\SyncSegmentInfoToTraceBack.cs" />
<Compile Include="Tasks\UpdateLoad\DoCheckBills.cs" />
<Compile Include="Tasks\UpdateLoad\UploadMaterialRequisitionRecord.cs" />
<Compile Include="Tasks\UpdateLoad\UploadOrderDetail.cs" />


+ 62
- 0
B3ClientService/BO/Bill/SegmentProductionInfo.cs View File

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

+ 16
- 0
B3ClientService/BO/Bill/SegmentTraceBackLog.cs View File

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

+ 102
- 0
B3ClientService/OfflinRpc/SegmentProductionRpc.cs View File

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

+ 131
- 0
B3ClientService/Tasks/SyncSegmentInfoToTraceBack.cs View File

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

Loading…
Cancel
Save