using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using System.Data;
using System.Web;
using System.Text;
using Furion.DatabaseAccessor;
using Microsoft.CodeAnalysis.Operations;
namespace Admin.NET.Application;
///
/// 第三方接口服务
///
[ApiDescriptionSettings(ApplicationConst.ThirdInterFaceServiceGroupName, Order = 100)]
public class ThirdInterFaceService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
private readonly SqlSugarRepository _mes_Package_Gather_Rep;
public ThirdInterFaceService(SqlSugarRepository rep,
SqlSugarRepository mes_Package_Gather_Rep
)
{
_rep = rep;
_mes_Package_Gather_Rep = mes_Package_Gather_Rep;
}
[HttpPost]
[ApiDescriptionSettings(Name = "GetBatchOrderUPIList")]
[UnitOfWork]
[AllowAnonymous]
public async Task GetBatchOrderUPIList(List input)
{
if (input?.Count <= 0)
{
throw Oops.Oh($"数据不能为空");
}
//校验upi是否重复 【Editby shaocx,2022-12-13】
var myList = input.Select(x => x.UPI).ToList();
var result = myList.GroupBy(x => x)
.Where(g => g.Count() > 1)
.ToDictionary(x => x.Key, x => x.Count());
if (result != null && result.Count > 0)
{
var dit = result.First();
throw Oops.Oh("本次有重复的UPI!重复号为:" + dit.Key + ",重复条数:" + dit.Value);
}
//校验数据是否正确 【Editby shaocx,2024-12-20】
var gg = input.GroupBy(x => x.PackageCode);
foreach (var item in gg)
{
var _list = item.ToList();
if (_list.Count() == 1)
{
throw Oops.Oh($"包号{item.Key}中只有一块板,不符合要求!");
}
_list = _list.OrderBy(x => x.Shelf).ToList();
for (int i = 0; i < _list.Count; i++)
{
if (_list[i].Shelf != (i + 1))
{
throw Oops.Oh($"包号{item.Key}中第{(i + 1)}块板的次序不是{i + 1},而是{_list[i].Shelf},不符合要求!");
}
}
}
//同一个UPI只能属于一个 批次号+订单号
//会存在 一个批次号,多个订单号的情况
//会存在 一个订单号,多个批次号的情况
//按照批次号+订单号删除
List packageList = new List();
input.ForEach(x => packageList.Add(x.PlanNo + "_" + x.OrderId));//upis是传过来的upi字段集合
var batchOrderUPIs = await _rep.AsQueryable().Where(x => packageList.Contains(x.PlanNo + "_" + x.OrderId)).ToListAsync();//batchOrderUPIs是重复的upi集合
//批量删除
await _rep.DeleteAsync(batchOrderUPIs);
//批量删除
await _mes_Package_Gather_Rep.DeleteAsync(x => packageList.Contains(x.PlanNo + "_" + x.OrderId));
//删除重复的upi数据
List upis = new List();
input.ForEach(x => upis.Add(x.UPI));//upis是传过来的upi字段集合
var queryDateTime = DateTime.Now.AddDays(-7);
var batchOrderUPIs22 = await _rep.AsQueryable().Where(x => upis.Contains(x.UPI) && x.CreateTime >= queryDateTime).ToListAsync();//batchOrderUPIs是重复的upi集合
//批量删除
await _rep.DeleteAsync(batchOrderUPIs22);
List addGatherList = new List();
var groups = input.GroupBy(x => x.PackageCode);
foreach (var group in groups)
{
var first = group.ToList().First();
Mes_Package_Gather newGather = first.Adapt();
newGather.AreaCode = AreaCodeEnum.无区域;
newGather.UpiStatus = UpiStatusEnum.初始;
newGather.CreateUserName = newGather.UpdateUserName = "MES";
addGatherList.Add(newGather);
}
await _mes_Package_Gather_Rep.InsertRangeAsync(addGatherList);
//转换成Upi对象
List insertUpiList = new List();
foreach (var item in input)
{
Mes_BatchOrderUPI_New insertUpi = item.Adapt();
insertUpi.AreaCode = AreaCodeEnum.无区域;
insertUpi.UpiStatus = UpiStatusEnum.初始;
insertUpi.CreateUserName = insertUpi.UpdateUserName = "MES";
insertUpi.CreateTime = insertUpi.UpdateTime = DateTime.Now;
insertUpiList.Add(insertUpi);
}
await _rep.InsertRangeAsync(insertUpiList);
}
}