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