Commit bbc15d01 by 陶然

增加了样品包裹清空的接口,优化了包裹取样接口传递的参数,支持批量取样

parent 623a41bf
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using Kivii.Linq.Legacy; using Kivii.Linq.Legacy;
using Kivii.Samples.Entities; using Kivii.Samples.Entities;
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
...@@ -131,26 +132,27 @@ namespace Kivii.Samples ...@@ -131,26 +132,27 @@ namespace Kivii.Samples
try try
{ {
#region 生成新的路由信息,更新上一个路由信息 #region 生成新的路由信息,更新上一个路由信息
if (route == null) route = new Route(); Route newRoute = new Route();
route.SampleRootKvid = existSample.RootKvid; if (route != null) newRoute.PopulateWith(route);
route.SampleKvid = existSample.Kvid; newRoute.SampleRootKvid = existSample.RootKvid;
route.SampleParentKvid = existSample.ParentKvid; newRoute.SampleKvid = existSample.Kvid;
route.SampleName = existSample.Name; newRoute.SampleParentKvid = existSample.ParentKvid;
route.BizId = existSample.BizId; newRoute.SampleName = existSample.Name;
route.BizKvid = existSample.BizKvid; newRoute.BizId = existSample.BizId;
route.BizType = existSample.BizType; newRoute.BizKvid = existSample.BizKvid;
route.Title = route.Title.IsNullOrEmpty() ? $"样品[{existSample.Name}]流转" : route.Title; newRoute.BizType = existSample.BizType;
route.Type = route.Type.IsNullOrEmpty() ? "流转" : route.Type; newRoute.Title = newRoute.Title.IsNullOrEmpty() ? $"样品[{existSample.Name}]流转" : newRoute.Title;
route.CurrentLocationKvid = location.Kvid; newRoute.Type = newRoute.Type.IsNullOrEmpty() ? "流转" : newRoute.Type;
route.CurrentLocationTitle = location.Title; newRoute.CurrentLocationKvid = location.Kvid;
route.OperateTime = route.OperateTime == DateTime.MinValue ? DateTime.Now : route.OperateTime; newRoute.CurrentLocationTitle = location.Title;
existSample.AssignTime = route.OperateTime; newRoute.OperateTime = newRoute.OperateTime == DateTime.MinValue ? DateTime.Now : newRoute.OperateTime;
if (route.OperatorName.IsNullOrEmpty()) existSample.AssignTime = newRoute.OperateTime;
if (newRoute.OperatorName.IsNullOrEmpty())
{ {
route.OperatorName = KiviiContext.CurrentMember.FullName; newRoute.OperatorName = KiviiContext.CurrentMember.FullName;
route.OperatorKvid = KiviiContext.CurrentMember.Kvid; newRoute.OperatorKvid = KiviiContext.CurrentMember.Kvid;
} }
conn.Insert(route); conn.Insert(newRoute);
if (currentRoute != null) if (currentRoute != null)
{ {
...@@ -258,6 +260,94 @@ namespace Kivii.Samples ...@@ -258,6 +260,94 @@ namespace Kivii.Samples
} }
/// <summary> /// <summary>
/// 包裹清除
/// </summary>
/// <param name="packages"></param>
/// <param name="location"></param>
/// <returns></returns>
public static List<Sample> PackageClear(this List<Sample> packages, Location location, Route route = null, IDbConnection conn = null)
{
packages.ThrowIfNullOrEmpty("请传入要清理的包裹!");
(location == null).ThrowIfTrue("缺少目的地点配置信息!");
bool useTransaction = conn == null;//是否启用内部事务
if (conn == null) conn = KiviiContext.GetOpenedDbConnection<Sample>();
conn.InitEntityType<Location>();
if (location.Kvid == Guid.Empty)
{
(location.InternalCode.IsNullOrEmpty()).ThrowIfTrue("缺少目的地点配置InternalCode信息");
location = conn.Single<Location>(o => o.InternalCode == location.InternalCode);
(location == null).ThrowIfTrue($"未找到{location.InternalCode}目的地点配置信息!");
}
var exists = conn.SelectByIds<Sample>(packages.ConvertAll(p => p.Kvid));
exists.ThrowIfNullOrEmpty("未找到要清理的包裹!");
exists.Exists(o => o.Type != SampleType.Package).ThrowIfTrue("存在不是包裹的信息!");
var samples = conn.Select<Sample>(o => Sql.In(o.PackageKvid, exists.ConvertAll(p => p.Kvid)));
var rtns = new List<Sample>();
IDbTransaction trans = null;//事务,如果外部来了Connection,不生成事务
if (useTransaction)
{
trans = conn.OpenTransaction();
}
try
{
var updatePackagess = conn.From<Sample>();
updatePackagess = updatePackagess.Update(o => new { o.PackageKvid, o.PackageName,o.Status });
updatePackagess = updatePackagess.Where(o => Sql.In(o.Kvid, exists.ConvertAll(p => p.Kvid)));
conn.UpdateOnly<Sample>(new Sample { PackageKvid = Guid.Empty, PackageName = string.Empty, Status = (int)PackageStatus.Empty }, updatePackagess);
if (!samples.IsNullOrEmpty())
{
var updateSampless = conn.From<Sample>();
updateSampless = updateSampless.Update(o => new { o.PackageKvid, o.PackageName });
updateSampless = updateSampless.Where(o => Sql.In(o.Kvid, samples.ConvertAll(p => p.Kvid)));
conn.UpdateOnly<Sample>(new Sample { PackageKvid = Guid.Empty, PackageName = string.Empty }, updateSampless);
foreach (var item in samples)
{
var package = exists.FirstOrDefault(o => o.Kvid == item.PackageKvid);
var currentRoute = item.GetCurrentRoute();//conn.Single<Route>(o => o.SampleKvid == existSample.Kvid && o.NextLocationKvid == Guid.Empty);
if (route == null) route = new Route();
route.SampleRootKvid = item.RootKvid;
route.SampleKvid = item.Kvid;
route.SampleParentKvid = item.ParentKvid;
route.SampleName = item.Name;
route.BizId = item.BizId;
route.BizKvid = item.BizKvid;
route.BizType = item.BizType;
route.Title = route.Title.IsNullOrEmpty() ? $"出库报废,样品[{item.Name}]已报废" : route.Title;
route.Type = route.Type.IsNullOrEmpty() ? "出库报废" : route.Type;
if (package != null) route.Summary = $"原货区:{package.PackageName},箱号:{package.Name}";
route.CurrentLocationKvid = location.Kvid;
route.CurrentLocationTitle = location.Title;
route.OperateTime = route.OperateTime == DateTime.MinValue ? DateTime.Now : route.OperateTime;
if (route.OperatorName.IsNullOrEmpty())
{
route.OperatorName = KiviiContext.CurrentMember.FullName;
route.OperatorKvid = KiviiContext.CurrentMember.Kvid;
}
conn.Insert(route);
if (currentRoute != null)
{
currentRoute.NextLocationKvid = location.Kvid;
currentRoute.NextLocationTitle = location.Title;
currentRoute.AddOnlyProperties(o => o.NextLocationKvid);
currentRoute.AddOnlyProperties(o => o.NextLocationTitle);
conn.UpdateOnly(currentRoute);
}
}
rtns.AddRange(samples);
}
trans?.Commit();
}
catch (Exception ex)
{
trans?.Rollback();
throw ex;
}
return rtns;
}
/// <summary>
/// 样品打包 /// 样品打包
/// </summary> /// </summary>
/// <param name="samples"></param> /// <param name="samples"></param>
...@@ -319,25 +409,27 @@ namespace Kivii.Samples ...@@ -319,25 +409,27 @@ namespace Kivii.Samples
package.OperateTime = package.OperateTime == DateTime.MinValue ? DateTime.Now : package.OperateTime; package.OperateTime = package.OperateTime == DateTime.MinValue ? DateTime.Now : package.OperateTime;
package.Status = (int)PackageStatus.Full; package.Status = (int)PackageStatus.Full;
conn.Insert(package); conn.Insert(package);
if (packageRoute == null) packageRoute = new Route(); Route newRoute = new Route();
packageRoute.SampleRootKvid = package.RootKvid; if (packageRoute != null) newRoute.PopulateWith(packageRoute);
packageRoute.SampleKvid = package.Kvid; //if (packageRoute == null) packageRoute = new Route();
packageRoute.SampleParentKvid = package.ParentKvid; newRoute.SampleRootKvid = package.RootKvid;
packageRoute.SampleName = package.Name; newRoute.SampleKvid = package.Kvid;
packageRoute.BizId = package.BizId; newRoute.SampleParentKvid = package.ParentKvid;
packageRoute.BizKvid = package.BizKvid; newRoute.SampleName = package.Name;
packageRoute.BizType = package.BizType; newRoute.BizId = package.BizId;
packageRoute.Title = packageRoute.Title.IsNullOrEmpty() ? $"样品打包" : packageRoute.Title; newRoute.BizKvid = package.BizKvid;
packageRoute.Type = packageRoute.Type.IsNullOrEmpty() ? "打包" : packageRoute.Type; newRoute.BizType = package.BizType;
packageRoute.CurrentLocationKvid = location.Kvid; newRoute.Title = newRoute.Title.IsNullOrEmpty() ? $"样品打包至:{package.Name}{(packageArea.IsNullOrEmpty() ? "" : $"({packageArea})")}" : newRoute.Title;
packageRoute.CurrentLocationTitle = location.Title; newRoute.Type = newRoute.Type.IsNullOrEmpty() ? "打包" : newRoute.Type;
packageRoute.OperateTime = packageRoute.OperateTime == DateTime.MinValue ? DateTime.Now : packageRoute.OperateTime; newRoute.CurrentLocationKvid = location.Kvid;
if (packageRoute.OperatorName.IsNullOrEmpty()) newRoute.CurrentLocationTitle = location.Title;
newRoute.OperateTime = newRoute.OperateTime == DateTime.MinValue ? DateTime.Now : newRoute.OperateTime;
if (newRoute.OperatorName.IsNullOrEmpty())
{ {
packageRoute.OperatorName = KiviiContext.CurrentMember.FullName; newRoute.OperatorName = KiviiContext.CurrentMember.FullName;
packageRoute.OperatorKvid = KiviiContext.CurrentMember.Kvid; newRoute.OperatorKvid = KiviiContext.CurrentMember.Kvid;
} }
conn.Insert(packageRoute); conn.Insert(newRoute);
} }
else else
{ {
...@@ -457,25 +549,26 @@ namespace Kivii.Samples ...@@ -457,25 +549,26 @@ namespace Kivii.Samples
exist.AddOnlyProperties(o => o.PackageKvid); exist.AddOnlyProperties(o => o.PackageKvid);
conn.UpdateOnly(exist); conn.UpdateOnly(exist);
if (route == null) route = new Route(); Route newRoute = new Route();
route.SampleRootKvid = exist.RootKvid; if (route != null) newRoute.PopulateWith(route);
route.SampleKvid = exist.Kvid; newRoute.SampleRootKvid = exist.RootKvid;
route.SampleParentKvid = exist.ParentKvid; newRoute.SampleKvid = exist.Kvid;
route.SampleName = exist.Name; newRoute.SampleParentKvid = exist.ParentKvid;
route.BizId = exist.BizId; newRoute.SampleName = exist.Name;
route.BizKvid = exist.BizKvid; newRoute.BizId = exist.BizId;
route.BizType = exist.BizType; newRoute.BizKvid = exist.BizKvid;
route.Title = route.Title.IsNullOrEmpty() ? $"包裹取出样品[{exist.Name}]" : route.Title; newRoute.BizType = exist.BizType;
route.Type = route.Type.IsNullOrEmpty() ? "包裹取样" : route.Type; newRoute.Title = newRoute.Title.IsNullOrEmpty() ? $"样品[{exist.Name}]从[{(package.PackageName.IsNullOrEmpty() ? package.Name : $"{package.PackageName}({package.Name})")}]取出" : newRoute.Title;
route.CurrentLocationKvid = location.Kvid; newRoute.Type = newRoute.Type.IsNullOrEmpty() ? "取样" : newRoute.Type;
route.CurrentLocationTitle = location.Title; newRoute.CurrentLocationKvid = location.Kvid;
route.OperateTime = route.OperateTime == DateTime.MinValue ? DateTime.Now : route.OperateTime; newRoute.CurrentLocationTitle = location.Title;
if (route.OperatorName.IsNullOrEmpty()) newRoute.OperateTime = newRoute.OperateTime == DateTime.MinValue ? DateTime.Now : newRoute.OperateTime;
if (newRoute.OperatorName.IsNullOrEmpty())
{ {
route.OperatorName = KiviiContext.CurrentMember.FullName; newRoute.OperatorName = KiviiContext.CurrentMember.FullName;
route.OperatorKvid = KiviiContext.CurrentMember.Kvid; newRoute.OperatorKvid = KiviiContext.CurrentMember.Kvid;
} }
conn.Insert(route); conn.Insert(newRoute);
if (currentRoute != null) if (currentRoute != null)
{ {
......
...@@ -233,6 +233,53 @@ namespace Kivii.Samples.Transforms ...@@ -233,6 +233,53 @@ namespace Kivii.Samples.Transforms
} }
[RequiresAnyRole(SystemRoles.Everyone)] [RequiresAnyRole(SystemRoles.Everyone)]
[Api(Description = "包裹清空")]
public class SamplePackageClear : RestfulExecution<Sample>
{
public Guid PackageKvid { get; set; }//要流转样品信息
public List<Guid> PackageKvids { get; set; }//要流转样品信息
public Location Location { get; set; }//地点位置信息,只需要InternalCode
public Route Route { get; set; }//自定义路由信息,可不填写
public override object OnExecution(IRequest req, IResponse res)
{
(PackageKvid == Guid.Empty && PackageKvids.IsNullOrEmpty()).ThrowIfTrue("缺少要打包的样品信息!");
Location.ThrowIfNull("缺少打包地点信息!");
(Location.InternalCode.IsNullOrEmpty()).ThrowIfTrue("缺少打包地点配置InternalCode信息");
var conn = KiviiContext.GetOpenedDbConnection<Location>();
var local = conn.Single<Location>(o => o.InternalCode == Location.InternalCode);
(local == null).ThrowIfTrue($"未找到{Location.InternalCode}打包地点配置信息!");
if (PackageKvids.IsNullOrEmpty()) PackageKvids = new List<Guid>();
if (PackageKvid != Guid.Empty) PackageKvids.Add(PackageKvid);
var packages = new List<Sample>();
foreach (var kvid in PackageKvids)
{
var package = new Sample();
package.Kvid = kvid;
packages.Add(package);
}
var rtns = new RestfulExecutionResponse<Sample>();
rtns.Results = new List<Sample>();
var trans = conn.OpenTransaction();
try
{
rtns.Results = packages.PackageClear(local, Route, conn);
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
return rtns;
}
}
[RequiresAnyRole(SystemRoles.Everyone)]
[Api(Description = "打包样查找")] [Api(Description = "打包样查找")]
public class SamplePrePackaging : RestfulExecution<Sample> public class SamplePrePackaging : RestfulExecution<Sample>
{ {
...@@ -396,20 +443,30 @@ namespace Kivii.Samples.Transforms ...@@ -396,20 +443,30 @@ namespace Kivii.Samples.Transforms
public class SampleUnPackaging : RestfulExecution<Sample> public class SampleUnPackaging : RestfulExecution<Sample>
{ {
public Guid Kvid { get; set; }//要取样品的信息 public Guid Kvid { get; set; }//要取样品的信息
public List<Guid> Kvids { get; set; }//要取样品的信息
//public Guid Kvid { get; set; }//要取样品的信息
public Location Location { get; set; }//地点位置信息,只需要InternalCode public Location Location { get; set; }//地点位置信息,只需要InternalCode
public Route Route { get; set; }//自定义路由信息,可不填写 public Route Route { get; set; }//自定义路由信息,可不填写
public override object OnExecution(IRequest req, IResponse res) public override object OnExecution(IRequest req, IResponse res)
{ {
(Kvid == Guid.Empty).ThrowIfTrue("缺少要要取样品信息!"); (Kvid == Guid.Empty && Kvids.IsNullOrEmpty()).ThrowIfTrue("缺少要取样品的信息!");
//(Kvid == Guid.Empty).ThrowIfTrue("缺少要要取样品信息!");
Location.ThrowIfNull("缺少取样地点信息!"); Location.ThrowIfNull("缺少取样地点信息!");
(Location.InternalCode.IsNullOrEmpty()).ThrowIfTrue("缺少取样地点配置InternalCode信息"); (Location.InternalCode.IsNullOrEmpty()).ThrowIfTrue("缺少取样地点配置InternalCode信息");
var conn = KiviiContext.GetOpenedDbConnection<Location>(); var conn = KiviiContext.GetOpenedDbConnection<Location>();
var local = conn.Single<Location>(o => o.InternalCode == Location.InternalCode); var local = conn.Single<Location>(o => o.InternalCode == Location.InternalCode);
(local == null).ThrowIfTrue($"未找到{Location.InternalCode}打包地点配置信息!"); (local == null).ThrowIfTrue($"未找到{Location.InternalCode}打包地点配置信息!");
var sample = new Sample(); if (Kvids.IsNullOrEmpty()) Kvids = new List<Guid>();
sample.Kvid = Kvid; if (Kvid != Guid.Empty) Kvids.Add(Kvid);
List<Sample> samples = new List<Sample>();
foreach (var kvid in Kvids)
{
var sample = new Sample();
sample.Kvid = kvid;
samples.Add(sample);
}
var rtns = new RestfulExecutionResponse<Sample>(); var rtns = new RestfulExecutionResponse<Sample>();
rtns.Results = new List<Sample>(); rtns.Results = new List<Sample>();
...@@ -417,8 +474,11 @@ namespace Kivii.Samples.Transforms ...@@ -417,8 +474,11 @@ namespace Kivii.Samples.Transforms
var trans = conn.OpenTransaction(); var trans = conn.OpenTransaction();
try try
{ {
var result = sample.UnPackaging(local, Route, conn); foreach (var item in samples)
rtns.Results.Add(result); {
var result = item.UnPackaging(local, Route, conn);
rtns.Results.Add(result);
}
trans.Commit(); trans.Commit();
} }
catch (Exception ex) catch (Exception ex)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment