using AutoMapper; using SqlSugar; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using wms.dto; using wms.dto.response; using wms.dto.response.pt; using wms.service.IService; using wms.sqlsugar; using wms.sqlsugar.model; using wms.sqlsugar.model.pt; using wms.util.Check; using wms.util.Ext; using System.Linq; using Newtonsoft.Json; using Microsoft.Extensions.Logging; using wms.util; using wms.dto.request.pt; using wms.dataservice.IDataSetvice; using wms.dataservice; using wms.dto.request.pt.dto; using wms.dto.response.pt.dto; using wms.util.Http; using wms.dataservice.DataService; using NPOI.SS.Formula.Functions; using wms.dto.request; using wms.dto.request.share; using Org.BouncyCastle.Asn1.Ocsp; using Castle.Core.Internal; using WCS.Entity; namespace wms.service.Service { public class PTService : IPTService { private readonly IMapper _mapper; private readonly ILogger _logger; private readonly IPTDataService _iptDataService; public PTService(IMapper mapper, ILogger logger, IPTDataService iptDataService) { _mapper = mapper; _logger = logger; _iptDataService = iptDataService; } Repository _ptbaseContInfo => new Repository(); Repository _sysconfigrepository => new Repository(); Repository _materrepository => new Repository(); RepositoryTask _ptwcsTaskinfo => new RepositoryTask(); Repository _baseWareHouserepository => new Repository(); Repository _baseWareLocationrepository => new Repository(); Repository _docrepository => new Repository(); Repository _ptbillPushinfo => new Repository(); RepositoryTask _ptwcsTaskold => new RepositoryTask(); Repository _sysJobrepository => new Repository(); Repository _sysJobApirepository => new Repository(); Repository _ptBillInvFlow => new Repository(); Repository _ptbillInvnow => new Repository(); Repository _ptbillInvinit => new Repository(); RepositoryTask _ptwcsTaskdtl => new RepositoryTask(); Repository _ptbillmes => new Repository(); //Repository _ptBillLocationMap => new Repository(); ITenant _db => SqlSugarHelper.Db;//处理事务 /// /// 获取配置内容信息 /// /// 配置表code值 /// public string GetSysConfigContentByCode(string code) { //先读缓存 var cacheContent = RedisHelper.Get("sys_config" + code); if (!string.IsNullOrEmpty(cacheContent)) { return cacheContent; } var sysconf = _sysconfigrepository.GetSingle(p => p.Code == code); if (sysconf == null) { throw new Exception("数据表没有配置" + code); } var content = sysconf.SContent; string sysname = sysconf.Default1;//所属系统mes/erp RedisHelper.Set("sys_config" + code, content + "|" + sysname); return content; } /// /// 获取配置信息 /// /// /// public ptSysConfig GetSysConfigByCode(string code) { //Repository _billdtrepository = new Repository(); return _sysconfigrepository.GetSingle(p => p.Code == code); } /// /// 获取物料信息 /// /// /// public ptBaseMater GetBaseMaterByExpression(Expression> WhereExpression) { return _materrepository.GetSingle(WhereExpression); } /// /// 获取配置信息 /// /// /// public ptSysConfig GetSysConfigByExpression(Expression> WhereExpression) { return _sysconfigrepository.GetSingle(WhereExpression); } /// /// 获取反馈信息 /// /// /// public List GetBillFeedbackList() { return _ptbillPushinfo.GetList(p => p.PostResult != 1 && p.PostQty <= 5).OrderBy(p => p.AddTime).Take(1).ToList(); } public bool UpdatePuchinfoModelColumns(UpdateModelColumns updateModel) { return _ptbillPushinfo.Update(updateModel.Columns, updateModel.WhereExpression); } /// /// 更新SysConfig表字段 /// /// /// public bool UpdateSysConfigModelColumns(UpdateModelColumns updateModel) { return _sysconfigrepository.Update(updateModel.Columns, updateModel.WhereExpression); } public bool SyncMaterInfo(List ResData) { foreach (var item in ResData) { if (_materrepository.IsAny(p => p.Code == item.MatCode)) { _materrepository.UpdateModelColumns(p => new ptBaseMater() { IsHold = item.IsHold, HoldDuration = item.HoldDuration }, p => p.Code == item.MatCode); } else { var model = _mapper.Map(item); _materrepository.Insert(model); } } return true; } public SRes PurchaseBillTrans(PurchaseBillTransReqest request) { var result = new SRes(); if (string.IsNullOrEmpty(request.BillCode)) { result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); result.ResMsg = "单号" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return result; } if (!request.ListInfo.Any()) { result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription(); return result; } var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == request.WareCode); if (warehouse == null) { result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return result; } //存单据 var doc = _docrepository.GetSingle(p => p.DocsNo == request.BillCode); if (doc == null) { var docsinfo = new ptBillDocsinfo() { DocsNo = request.BillCode, WarehouseId = warehouse.Id, ReqNo = request.ReqId, Type = request.BillType, StateNum = DocState.DocState_Create.GetHashCode(), IsStop = 0, JsonContent = JsonConvert.SerializeObject(request.ListInfo), DownQty = request.ListInfo.Count, AddWho = "wms", EditWho = "wms" }; var code = InsertBillInvinit(request, warehouse); if (code.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { _docrepository.Insert(docsinfo); } else { result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); result.ResMsg = "明细存储失败"; return result; } } else { _docrepository.UpdateModelColumns(p => new ptBillDocsinfo() { JsonContent = JsonConvert.SerializeObject(request.ListInfo), EditTime = DateTime.Now }, p => p.DocsNo == request.BillCode); } return result; } private SRes InsertBillInvinit(PurchaseBillTransReqest request, ptBaseWarehouse warehouse) { var result = new SRes(); List invlist = new List(); //明细存条码表 foreach (var item in request.ListInfo) { var mater = _materrepository.GetSingle(p => p.Code == item.MatCode); if (mater == null) { result.ResCode = ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetHashCode(); result.ResMsg = item.MatCode + ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetDescription(); return result; } var invinit = new ptBillInvinit() { WarehouseId = warehouse.Id, ContGrpBarCode = item.RFID, ContGrpId = GetId(), BoxBarCode = item.RFID, BoilerNo = item.BoilerNo, PackNo = item.PackNo, BatchNo = item.Batch, CLBarCode = item.MatBarCode, CaQty = item.Carbon, ProductTime = item.ProductDate, BrandNo = item.Brand, ExecStd = item.ExecStandard, LicenceCode = item.Licence, TolWQty = item.Weight, HoldDuration = item.HoldDuration, Describe = item.Describe, InvStateCode = InvState.InvEcecState_BuildUp.ToString(), InvBarCode = item.MatBarCode, ExecStateCode = InvLockState.InvState_Lock.ToString(), InDocsNo = request.BillCode, InDocsRowNo = request.BillCode, MatId = 1111, MatCode = item.MatCode, RFIDBarCode = item.RFID, HWTypeCode = "", ExecDocsNo = request.BillCode, ExecDocsRowNo = request.BillCode, ExecDocsTypeCode = request.BillType, HWBarCode = item.RFID, RodBarCode = item.RodBar, InvInOut = 1, ExecWho = "", MatName = "", Size = 1, SuppCode = request.SupCode, SuppName = request.SupName }; invlist.Add(_mapper.Map(invinit)); } _ptbillInvinit.InsertRange(invlist); return result; } public SRes PurchaseBillTransFeedBack(PurchaseBillTransFeedBackRequest reqDto) { var result = new SRes(); return result; } /// /// 放行单传输 /// /// /// public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto) { var result = new ErpUnlockStockResponse() { ListInfo = new List()}; if (!reqDto.ListInfo.Any()) { result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode(); result.ResMsg = reqDto.BillCode + ResponseStatusCodeEnum.DocDetailNotExist.GetDescription(); return result; } var inv = _ptbillInvnow.GetList(p => p.InDocsNo == reqDto.BillCode && p.ExecStateCode == InvLockState.InvState_Lock.ToString() && p.InvStateCode == InvState.InvEcecState_In.ToString()); if (!inv.Any()) { result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); result.ResMsg = reqDto.BillCode + "不存在库存明细"; return result; } foreach (var item in reqDto.ListInfo) { if (inv.Where(p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode).Any()) { var stock = inv.Where(p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode).First(); var flow = _mapper.Map(stock); flow.Id = GetId(); flow.ExecStateCode = item.State == "Normal" ? InvLockState.InvState_Normal.ToString() : InvLockState.InvState_Lock.ToString(); flow.EditTime = DateTime.Now; flow.AddTime = DateTime.Now; try { _db.BeginTran(); _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { ExecStateCode = item.State == "Normal" ? InvLockState.InvState_Normal.ToString() : InvLockState.InvState_Lock.ToString(), EditTime = DateTime.Now }, p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode); _ptBillInvFlow.Insert(flow); _db.CommitTran(); var erpUnlockStock = new ErpUnlockStockResponseItem() { RFID = item.RFID, MatBarCode = item.MatBarCode, ResState = "S", ResDesc = "" }; result.ListInfo.Add(_mapper.Map(erpUnlockStock)); } catch (Exception ex) { _db.RollbackTran(); var erpUnlockStock = new ErpUnlockStockResponseItem() { RFID = item.RFID, MatBarCode = item.MatBarCode, ResState = "E", ResDesc = "放行失败" }; result.ListInfo.Add(_mapper.Map(erpUnlockStock)); } } else { var unlockStock = new ErpUnlockStockResponseItem() { RFID = item.RFID, MatBarCode = item.MatBarCode, ResState = "E", ResDesc = "未找到该RFID条码" }; result.ListInfo.Add(_mapper.Map(unlockStock)); continue; } } return result; } /// /// 车间自动叫料出库 /// /// /// public SRes WcsProductionOutRequest(WcsProductionOutRequest request) { var result = new SRes(); var equip = _sysconfigrepository.GetList(p => p.SType == Const.Type); var syscom = equip.Where(p => p.Code == request.Endquip).First(); if (!string.IsNullOrEmpty(syscom.Default1)) { _sysconfigrepository.UpdateSetColumnsTrue(p => new ptSysConfig() { Default1 = "", EditTime = DateTime.Now }, p => p.Code == request.Endquip); } var mesRequest = _ptbillmes.GetList(); foreach (var item in mesRequest) { } //添加单据 //var doc = _docrepository.GetSingle(p => p.DocsNo == mesRequest.BillCode); //if (doc == null) //{ // var docsinfo = new ptBillDocsinfo() // { // DocsNo = mesRequest.BillCode, // WarehouseId = 1685164446336552960, // ReqNo = GetId().ToString(), // TypeNum = PtDocType.DocType_PT_ProductionStockOut.ToString(), // StateNum = DocState.DocState_Create.GetHashCode(), // IsStop = 0, // JsonContent = JsonConvert.SerializeObject(mesRequest), // AddWho = "wms", // EditWho = "wms" // }; // _docrepository.Insert(docsinfo); //} //else //{ // _docrepository.UpdateModelColumns(p => new ptBillDocsinfo() // { // JsonContent = JsonConvert.SerializeObject(mesRequest), // EditTime = DateTime.Now // }, p => p.DocsNo == mesRequest.BillCode); //} //申请出库 //var res = ApplyProductionStockOut(_mapper.Map(mesRequest)); return result; } /// /// 生产领料出库 /// /// /// public SRes ProductionStockOut(ProductionStockOutRequest reqDto) { var result = new SRes(); var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode); if (ware == null) { result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); result.ResMsg = reqDto.WareCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return result; } if (string.IsNullOrEmpty(reqDto.BillCode) || string.IsNullOrEmpty(reqDto.MatCode)) { result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); result.ResMsg = "单号与物料编码不可为空"; return result; } //var mesRequest = new ptBillMesmiddle() //{ // BillCode = reqDto.BillCode, // PackNo = reqDto.PackNo, // MatCode = reqDto.MatCode, // MatBarCode = reqDto.MatBarCode, // BoilerNo = reqDto.BoilerNo, // WareCode = reqDto.WareCode //}; //_ptbillmes.Insert(mesRequest); //添加单据 var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode); if (doc == null) { var docsinfo = new ptBillDocsinfo() { DocsNo = reqDto.BillCode, WarehouseId = ware.Id, ReqNo = GetId().ToString(), Type = PtDocType.DocType_PT_ProductionStockOut.ToString(), StateNum = DocState.DocState_Create.GetHashCode(), IsStop = 0, JsonContent = JsonConvert.SerializeObject(reqDto), AddWho = "wms", EditWho = "wms" }; _docrepository.Insert(docsinfo); } else { _docrepository.UpdateModelColumns(p => new ptBillDocsinfo() { JsonContent = JsonConvert.SerializeObject(reqDto), EditTime = DateTime.Now }, p => p.DocsNo == reqDto.BillCode); } //申请出库 result = ApplyProductionStockOut(reqDto); return result; } /// /// 申请出库 /// /// /// private SRes ApplyProductionStockOut(ProductionStockOutRequest request) { var res = new SRes(); //考虑巷道剩余空轮数量 var locationlist = from loc in _baseWareLocationrepository.GetList(p => p.IsStop == 0 && p.StateNum == LocationState.LocationState_Full.GetHashCode()) join stock in _ptbillInvnow.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString()) on loc.ContGrpBarCode equals stock.ContGrpBarCode orderby stock.ProductTime select new { stock.MatCode, stock.InvBarCode, stock.BoilerNo, stock.RodBarCode, stock.Grade, stock.PackNo, stock.InvStateCode, stock.ProductTime, loc.Col, loc.Layer, loc.Shelf, loc.Depth, loc.Code, loc.Tunnel, loc.WarehouseCode, loc.ContGrpBarCode, loc.Id, loc.StateNum, }; if (!string.IsNullOrEmpty(request.MatCode)) { locationlist = locationlist.Where(p => p.MatCode == request.MatCode); } if (!string.IsNullOrEmpty(request.MatBarCode)) { locationlist = locationlist.Where(p => p.InvBarCode == request.MatBarCode); } if (!string.IsNullOrEmpty(request.BoilerNo)) { locationlist = locationlist.Where(p => p.BoilerNo == request.BoilerNo); } if (!string.IsNullOrEmpty(request.PackNo)) { locationlist = locationlist.Where(p => p.PackNo == request.PackNo); } if (locationlist == null || !locationlist.Any()) { res.ResCode = ResponseStatusCodeEnum.NotEnoughStock.GetHashCode(); res.ResMsg = request.MatCode + "|" + request.BoilerNo + ResponseStatusCodeEnum.NotEnoughStock.GetDescription(); return res; } if (string.IsNullOrEmpty(request.BoilerNo)) { //多个炉号业务处理 var boilernum = locationlist.Select(p => new { p.BoilerNo, p.ProductTime } ).Distinct().OrderBy(p => p.ProductTime).ToList(); if (boilernum.Count() > 1) { List boils = new List(); for (int i = 0; i < boilernum.Count(); i++) { var boil = boilernum; foreach (var item in boil) { if (item.BoilerNo == boilernum[i].BoilerNo) { continue; } if (DateTime.Equals(boilernum[i].ProductTime, item.ProductTime)) { boils.Add(item.BoilerNo); } } } boils = boils.Distinct().ToList(); if (boils.Any()) { //多个炉号的生产时间在同一天的 locationlist = locationlist.Where(p => boils.Contains(p.BoilerNo)).GroupBy(p => p.BoilerNo).OrderBy(p => p.Count()).First(); } else { var loca = locationlist.OrderBy(p => p.ProductTime).First(); locationlist = locationlist.Where(p => p.BoilerNo == loca.BoilerNo).OrderBy(p => p.PackNo); } } } //出库任务 var temploc = locationlist.First(); var outstation = ""; switch (temploc.Tunnel) { case 1: outstation = ""; break; case 2: outstation = ""; break; case 3: outstation = ""; break; case 4: outstation = ""; break; case 5: outstation = ""; break; case 6: outstation = ""; break; case 7: outstation = ""; break; case 8: outstation = ""; break; default: break; } var sotck = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == temploc.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString()); try { _db.BeginTran(); //货位表 _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockOut.GetHashCode() }, p => p.Id == temploc.Id); //库存表 _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_OutGoing.ToString(), EditTime = DateTime.Now }, p => p.Id == sotck.Id); var invflow = _mapper.Map(sotck); invflow.InvStateCode = InvState.InvEcecState_OutGoing.ToString(); invflow.AddTime = DateTime.Now; invflow.Id = IdFactory.NewId(); _ptBillInvFlow.Insert(invflow); //添加出库任务 CreateStockOutTask(new PtCreateStockOutTaskRequest() { ContGrpBarCode = temploc.ContGrpBarCode, CellNo = temploc.Code, EquCode = outstation, Qty = sotck.LengthQty, Tunnel = temploc.Tunnel.ToString(), WarehouseCode = temploc.WarehouseCode, MatCode = request.MatCode, InvBarCode = request.MatBarCode, BusType = PtTaskBusType.TaskBusType_PT_ProductionStockOut.GetDescription(), DocNo = request.BillCode }); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation(ex.ToString()); res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription(); return res; } return res; } private SRes CreateStockOutTask(PtCreateStockOutTaskRequest reqDto) { var res = new SRes(); var wcstask = new ptWCS_TaskInfo() { Type = TaskType.OutDepot, Status = TaskStatus.NewBuild, Priority = 0, Device = "SRM" + reqDto.Tunnel, SrmStation = reqDto.EquCode, AddrFrom = reqDto.CellNo, AddrTo = reqDto.EquCode, LastInteractionPoint = "", BarCode = reqDto.ContGrpBarCode, Length = reqDto.Qty, AddTime = DateTime.Now, StartTime = DateTime.Now, DocID = int.Parse(reqDto.DocNo), PalletType = 1, ProdLine = 0, AddWho = "wms", WarehouseCode = reqDto.WarehouseCode, Enabled = true, Tunnel = reqDto.Tunnel, BusType = reqDto.BusType, MatCode = reqDto.MatCode, MaterialCode = reqDto.MatCode, InvBarCode = reqDto.InvBarCode }; try { _db.BeginTran(); var task = _ptwcsTaskinfo.InsertReturnEntity(wcstask); var taskold = _mapper.Map(task); _ptwcsTaskold.InsertableSplitTable(taskold); var taskdetail = new ptWCS_TaskDtl() { ID = Guid.NewGuid(), CurPoint = reqDto.CellNo, AddTime = DateTime.Now, AddWho = "wms", Enabled = true, ParentTaskCode = task.ID, Desc = reqDto.CellNo + "生产领料出库", }; _ptwcsTaskdtl.InsertableSplitTable(taskdetail); _db.CommitTran(); res.ResData = task; } catch (Exception ex) { _db.RollbackTran(); res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription(); _logger.LogInformation("保存任务异常:" + ex.ToString()); return res; } return res; } public SRes ProductionFeedBack(ProductionFeedBackRequest reqDto) { var result = new SRes(); return result; } public SRes StockChange(PtStockChangeRequest reqDto) { var result = new SRes(); if (!reqDto.ListInfo.Any()) { result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription(); return result; } var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode); if (ware == null) { result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); result.ResMsg = reqDto.WareCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return result; } var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode); if (doc == null) { var docno = new ptBillDocsinfo() { DocsNo = reqDto.BillCode, IsStop = 0, WarehouseId = ware.Id, ReqNo = reqDto.ReqId, Type = PtDocType.DocType_PT_StateTrans.ToString(), StateNum = DocState.DocState_Create.GetHashCode(), JsonContent = JsonConvert.SerializeObject(reqDto.ListInfo), AddWho = "mes", EditWho = "mes" }; _docrepository.Insert(docno); } foreach (var item in reqDto.ListInfo) { var puch = new ptBillPushinfo() { DocsNo = reqDto.BillCode, TypeCode = PtFackbeekType.StateTrans.ToString(), RFIDBarCode = item.RFID, HWBarCode = item.RFID, CLBarCode = item.MatBarCode, WarehouseId = ware.Id, WarehouseCode = ware.Code, ReqNo = Guid.NewGuid().ToString(), BoilerNo = item.BoilerNo, PackNo = item.PackNo }; var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID); if (stock == null) { puch.ResStateCode = "E"; puch.ResDesc = item.RFID + ResponseStatusCodeEnum.StockNotExist.GetDescription(); _ptbillPushinfo.Insert(puch); continue; } else { if (stock.InvStateCode == InvState.InvEcecState_In.ToString() || stock.InvStateCode == InvState.InvEcecState_BuildUp.ToString()) { if (item.State == "Lock" || item.State == "Normal") { var it = _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(), EditTime = DateTime.Now, BoilerNo = item.BoilerNo, PackNo = item.PackNo, Memo = item.Reason }, p => p.ContGrpBarCode == item.RFID); var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID); var flow = _mapper.Map(nov); flow.Id = GetId(); flow.AddTime = DateTime.Now; flow.EditTime = DateTime.Now; puch.ResStateCode = "S"; puch.ResDesc = "成功"; _ptbillPushinfo.Insert(puch); _ptBillInvFlow.Insert(flow); continue; } else { _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { IsFast = item.State == "Fast" ? true : false, EditTime = DateTime.Now, BoilerNo = item.BoilerNo, PackNo = item.PackNo, Memo = item.Reason }, p => p.ContGrpBarCode == item.RFID); var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID); var flow = _mapper.Map(nov); flow.Id = GetId(); flow.AddTime = DateTime.Now; flow.EditTime = DateTime.Now; puch.ResStateCode = "S"; puch.ResDesc = "成功"; _ptbillPushinfo.Insert(puch); _ptBillInvFlow.Insert(flow); continue; } } //堆垛机还未上报放货完成 else if (stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && stock.PutRow != 0 && stock.PutCol != 0 && stock.PutLayer != 0) { if (item.State == "Lock" || item.State == "Normal") { _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(), EditTime = DateTime.Now, BoilerNo = item.BoilerNo, PackNo = item.PackNo, Memo = item.Reason, InvStateCode = InvState.InvEcecState_In.ToString() }, p => p.ContGrpBarCode == item.RFID); var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID); var flow = _mapper.Map(nov); flow.Id = GetId(); flow.AddTime = DateTime.Now; flow.EditTime = DateTime.Now; puch.ResStateCode = "S"; puch.ResDesc = "成功"; _ptbillPushinfo.Insert(puch); _ptBillInvFlow.Insert(flow); //出库任务取消 continue; } else { _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { IsFast = item.State == "Fast" ? true : false, EditTime = DateTime.Now, BoilerNo = item.BoilerNo, PackNo = item.PackNo, Memo = item.Reason, InvStateCode = InvState.InvEcecState_In.ToString() }, p => p.ContGrpBarCode == item.RFID); var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID); var flow = _mapper.Map(nov); flow.Id = GetId(); flow.AddTime = DateTime.Now; flow.EditTime = DateTime.Now; puch.ResStateCode = "S"; puch.ResDesc = "成功"; _ptbillPushinfo.Insert(puch); _ptBillInvFlow.Insert(flow); //出库任务取消 continue; } } //已上报放货完成 else if (stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && stock.PutRow == 0 && stock.PutCol == 0 && stock.PutLayer == 0) { } } } return result; } public SRes ProductionBack(ProductionBackRequest reqDto) { var result = new SRes(); if (!reqDto.ListInfo.Any() || string.IsNullOrEmpty(reqDto.BillCode) || string.IsNullOrEmpty(reqDto.WareCode)) { result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return result; } var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode); if (ware == null) { result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return result; } var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode); if (doc == null) { var docno = new ptBillDocsinfo() { DocsNo = reqDto.BillCode, IsStop = 0, WarehouseId = ware.Id, ReqNo = reqDto.BillCode, Type = PtDocType.DocType_PT_ProductionBackStockIn.ToString(), StateNum = DocState.DocState_Create.GetHashCode(), JsonContent = JsonConvert.SerializeObject(reqDto.ListInfo), AddWho = "mes", EditWho = "mes" }; _docrepository.Insert(docno); } foreach (var item in reqDto.ListInfo) { var flowold = _ptBillInvFlow.AsQueryable().Where(p => p.ContGrpBarCode == item.RFID).OrderByDescending(p => p.EditTime).First(); var mater = _materrepository.GetSingle(p => p.Code == flowold.MatCode); var nov = new ptBillInvnow() { WarehouseId = ware.Id, ContGrpBarCode = item.RFID, ContGrpId = GetId(), BoxBarCode = item.RFID, BoilerNo = item.BoilerNo, PackNo = item.PackNo, CLBarCode = item.MatBarCode, InvStateCode = InvState.InvEcecState_BuildUp.ToString(), InvBarCode = item.MatBarCode, ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(), InDocsNo = reqDto.BillCode, InDocsRowNo = reqDto.BillCode, MatId = mater.Id, MatCode = mater.Code, RFIDBarCode = item.RFID, HWTypeCode = mater.SpoolType, ExecDocsNo = reqDto.BillCode, ExecDocsRowNo = reqDto.BillCode, ExecDocsTypeCode = PtDocType.DocType_PT_ProductionBackStockIn.ToString(), HWBarCode = item.RFID, RodBarCode = item.RFID, InvInOut = 1, MatName = mater.Name, Size = 1, IsBack = true }; var task = new ptWCS_TaskInfo() { Status = TaskStatus.NewBuild, Type = TaskType.EnterDepot, Priority = 0, Device = item.LocCode, SrmStation = item.LocCode, AddrFrom = item.LocCode, BarCode = item.RFID, StartTime = DateTime.Now, AddTime = DateTime.Now, EditTime = DateTime.Now, AddWho = "wms", EditWho = "wms", WarehouseCode = ware.Code, WorkBench = item.LocCode, AddrTo = "", Tunnel = "", PalletType = 1, MaterialCode = mater.Code, MatCode = mater.Code, BusType = PtTaskBusType.TaskBusType_PT_ProductionBackStockIn.GetDescription() }; try { _db.BeginTran(); _ptbillInvnow.Insert(nov); _ptBillInvFlow.Insert(_mapper.Map(nov)); var wcs = _ptwcsTaskinfo.InsertReturnEntity(task); var wcsold = _mapper.Map(wcs); _ptwcsTaskold.InsertableSplitTable(wcsold); var taskdetail = new ptWCS_TaskDtl() { ID = Guid.NewGuid(), CurPoint = item.LocCode, AddTime = DateTime.Now, AddWho = "wms", Enabled = true, ParentTaskCode = wcs.ID, Desc = wcs.BusType }; _ptwcsTaskdtl.InsertableSplitTable(taskdetail); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return result; } } return result; } public PTGetCurStockListResponse GetCurStockList(PtGetCurStockListRequest reqDto) { var result = new PTGetCurStockListResponse() { list = new List() }; int count = 0; var stock = _ptbillInvnow.Context.Queryable((inv, mater) => new object[] { JoinType.Left, inv.MatCode == mater.Code }) .Where((inv, mater) => inv.InvStateCode == InvState.InvEcecState_In.ToString()) .WhereIF(string.IsNullOrEmpty(reqDto.MatCode), (inv, mater) => inv.MatCode.Contains(reqDto.MatCode)) .WhereIF(string.IsNullOrEmpty(reqDto.MatName), (inv, mater) => inv.MatName.Contains(reqDto.MatName)) .WhereIF(string.IsNullOrEmpty(reqDto.BoilerNo), (inv, mater) => inv.BoilerNo.Contains(reqDto.BoilerNo)) .WhereIF(string.IsNullOrEmpty(reqDto.RFID), (inv, mater) => inv.ContGrpBarCode.Contains(reqDto.RFID)) .WhereIF(string.IsNullOrEmpty(reqDto.MatBarCode), (inv, mater) => inv.InvBarCode.Contains(reqDto.MatBarCode)) .WhereIF(string.IsNullOrEmpty(reqDto.Batch), (inv, mater) => inv.BatchNo.Contains(reqDto.Batch)) .Select((inv, mater) => new PtResDataItem() { RFID = inv.ContGrpBarCode, RodBar = inv.RodBarCode, BoilerNo = inv.BoilerNo, MatBarCode = inv.InvBarCode, PackNo = inv.PackNo, Batch = inv.BatchNo, Carbon = inv.CaQty, ProductDate = inv.ProductTime, Brand = inv.BrandNo, Describe = inv.Describe, ExecStandard = inv.ExecStd, Licence = inv.LicenceCode, PackWeight = inv.TolWQty, FigureNo = mater.FigureNo, ComCode = mater.ComCode, ComName = mater.ComName, CalcUnit = mater.CalcUnit, StockUnit = mater.StockUnit, Weight = mater.Weight, WeightUnit = mater.WeightUnit, IsHold = mater.IsHold, HoldDuration = inv.HoldDuration, LocCell = inv.PutCol.ToString(), LocLayer = inv.PutLayer.ToString(), LocRow = inv.PutRow.ToString(), LocCode = inv.PutRow.ToString() + inv.PutCol.ToString() + inv.PutLayer.ToString(), WareCode = "pthouse" }) .ToPageList(reqDto.PageIndex, reqDto.PageSize, ref count); result.TotalCount = stock.Count(); result.list = stock; return result; } /// /// 采购入库任务 /// /// /// public SRes PtPurchaseTask(PtUnboundRequest request) { var result = new SRes(); try { var stock = new ptBillInvnow() { WarehouseId = 1685164446336552960, ContGrpBarCode = "Test" + DateTime.Now.ToString("hhmmssfff"), ContGrpId = GetId(), InvStateCode = InvState.InvEcecState_BuildUp.ToString(), ExecStateCode = InvLockState.InvState_Lock.ToString() }; var task = new ptWCS_TaskInfo() { Status = TaskStatus.NewBuild, Type = TaskType.EnterDepot, Priority = 0, Device = request.Equip, SrmStation = request.Equip, AddrFrom = request.Equip, BarCode = stock.ContGrpBarCode, StartTime = DateTime.Now, AddTime = DateTime.Now, EditTime = DateTime.Now, AddWho = "wms", EditWho = "wms", WarehouseCode = Const.PtWareHouse, WorkBench = request.Equip, AddrTo = "", Tunnel = "", PalletType = 1, MaterialCode = "", BusType = PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription() }; _db.BeginTran(); _ptbillInvnow.Insert(stock); var wcs = _ptwcsTaskinfo.InsertReturnEntity(task); var wcsold = _mapper.Map(wcs); _ptwcsTaskold.InsertableSplitTable(wcsold); var taskdetail = new ptWCS_TaskDtl() { ID = Guid.NewGuid(), CurPoint = request.Equip, AddTime = DateTime.Now, AddWho = "wms", Enabled = true, ParentTaskCode = wcs.ID, Desc = wcs.BusType }; _ptwcsTaskdtl.InsertableSplitTable(taskdetail); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); result.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message; return result; } return result; } /// /// 生成库存 /// /// /// public SRes InsertStockInfo(string code) { var result = new SRes(); //查询条码表 var barcode = _ptbillInvinit.GetSingle(p => p.ContGrpBarCode == code); if (barcode == null) { result.ResCode = ResponseStatusCodeEnum.BaseBarcodeNotExist.GetHashCode(); result.ResMsg = code + ResponseStatusCodeEnum.BaseBarcodeNotExist.GetDescription(); return result; } var invlist = _ptbillInvnow.GetList(p => p.ContGrpBarCode.StartsWith("Test")); if (!invlist.Any()) { result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); result.ResMsg = code + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return result; } var inv = invlist.First(); var stock = _mapper.Map(barcode); stock.AddTime = DateTime.Now; stock.EditTime = DateTime.Now; try { _db.BeginTran(); _ptbillInvnow.DeleteById(inv.Id); _ptbillInvnow.Insert(stock); _ptBillInvFlow.Insert(_mapper.Map(stock)); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); result.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return result; } return result; } private long GetId() { return IdFactory.NewId(); } public SRes Unbounding(PtUnboundRequest request) { var res = new SRes() { ResCode = 500 }; var task = _ptwcsTaskinfo.GetList(p => p.AddrFrom == request.Equip && p.Status < TaskStatus.Finish); if (task.Any()) { res.ResCode = ResponseStatusCodeEnum.IsTaskNotUnbounding.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.IsTaskNotUnbounding.GetDescription(); return res; } var equip = _baseWareLocationrepository.GetSingle(p => p.Code == request.Equip); if (equip == null) { res.ResCode = ResponseStatusCodeEnum.EquipInfoNotExist.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.EquipInfoNotExist.GetDescription(); return res; } var stock = _iptDataService.GetStockByEquip(request.Equip); if (stock.Any()) { _baseWareLocationrepository.UpdateSetColumnsTrue(p => new ptBaseWareLocation() { ContGrpId = Const.Zero, ContGrpBarCode = "", EditTime = DateTime.Now }, p => request.Equip == p.Code); _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_Out.ToString(), EditTime = DateTime.Now }, p => stock.Contains(p.HWBarCode)); res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(); } else { res.ResMsg = ResponseStatusCodeEnum.StockNotExist.GetDescription(); } return res; } public SRes GetDocumentDetailListByDocsNo(PtDocumentsRequest request) { var res = new SRes() { ResDataList = new List() }; var list = _iptDataService.GetDocumentDetailListByDocsNo(request); res.ResDataList = list.Item1; res.ToCount = list.Item2; res.PageIndex = request.PageIndex; res.PageSize = request.PageSize; res.PageNumber = Math.Ceiling((decimal)res.ToCount / res.PageSize); return res; } public SRes GetPageDocumentsList(PtDocumentsRequest request) { var res = new SRes() { ResDataList = new List() }; if (request.TypeCode == null) { res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); res.ResMsg = "单据类型" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return res; } var list = _iptDataService.GetPageDocumentsList(request); res.ResDataList = list.Item1; res.ToCount = list.Item2; res.PageIndex = request.PageIndex; res.PageSize = request.PageSize; res.PageNumber = Math.Ceiling((decimal)res.ToCount / res.PageSize); return res; } public string ManualTask(PtManualTaskRequest request) { var res = new SRes(); if (!request.Location.Any()) { res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); res.ResMsg = "货位" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return res.ToCamelCaseString(); } try { foreach (var item in request.Location) { var location = _baseWareLocationrepository.GetSingle(p => p.Code == item); if (location == null) { res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WareLocationCodeNotExist.GetDescription(); return res.ToCamelCaseString(); } if (location.StateNum != LocationState.LocationState_Full.GetHashCode()) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.Fail.GetDescription() + "货位状态不满足出库条件"; return res.ToCamelCaseString(); } if (location.IsStop == Const.One) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription() + item + "被禁用"; return res.ToCamelCaseString(); } var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == location.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res.ToCamelCaseString(); } if (stock.ExecStateCode != InvLockState.InvState_Normal.ToString()) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = stock.ContGrpBarCode + "状态已被锁定,不允许出库"; return res.ToCamelCaseString(); } if (stock.InvStateCode != InvState.InvEcecState_In.ToString()) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = item + "组盘状态不是已入库"; return res.ToCamelCaseString(); } ptWCS_TaskInfo ptwcsTask = new ptWCS_TaskInfo(); ptwcsTask.Status = TaskStatus.NewBuild; ptwcsTask.Type = TaskType.OutDepot; ptwcsTask.Priority = 0; ptwcsTask.Device = "SRM" + location.Tunnel; ptwcsTask.SrmStation = request.EndPoint; ptwcsTask.AddrFrom = item; ptwcsTask.BarCode = stock.ContGrpBarCode; ptwcsTask.StartTime = DateTime.Now; ptwcsTask.AddTime = DateTime.Now; ptwcsTask.EditTime = DateTime.Now; ptwcsTask.AddWho = "wms"; ptwcsTask.WarehouseCode = location.WarehouseCode; ptwcsTask.Enabled = true; ptwcsTask.WorkBench = request.EndPoint; ptwcsTask.AddrTo = request.EndPoint; ptwcsTask.Tunnel = location.Tunnel.ToString(); ptwcsTask.PalletType = 1; ptwcsTask.Length = stock.LengthQty; ptwcsTask.MaterialCode = stock.MatCode; ptwcsTask.OutType = OutTypeEnum.全自动手动出库任务; ptwcsTask.BusType = request.BusType; _db.BeginTran(); var wcs = _ptwcsTaskinfo.InsertReturnEntity(ptwcsTask); var wcstaskold = _mapper.Map(wcs); _ptwcsTaskold.InsertableSplitTable(wcstaskold); var taskdtl = new ptWCS_TaskDtl() { ID = Guid.NewGuid(), CurPoint = item, AddTime = DateTime.Now, AddWho = "wms", Enabled = true, ParentTaskCode = wcs.ID, Desc = wcs.OutType.ToString(), }; _ptwcsTaskdtl.InsertableSplitTable(taskdtl); _baseWareLocationrepository.UpdateSetColumnsTrue(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockOut.GetHashCode(), EditTime = DateTime.Now }, p => p.Code == item); _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_OutGoing.ToString(), EditTime = DateTime.Now }, p => p.ContGrpBarCode == stock.ContGrpBarCode); var flow = _mapper.Map(stock); flow.Id = IdFactory.NewId(); flow.InvStateCode = InvState.InvEcecState_OutGoing.ToString(); flow.EditTime = DateTime.Now; _ptBillInvFlow.Insert(flow); _db.CommitTran(); } } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation("出库异常:" + ex.Message); res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription(); return res.ToCamelCaseString(); } return res.ToCamelCaseString(); } public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun) { var res = new SRes(); for (int i = 0; i < row; i++) { string shlf = tun.ToString(); if (row == 2) { if (i == 0) { shlf = shlf + "L"; } else { shlf = shlf + "R"; } } for (int j = 0; j < deot; j++) { for (int k = 0; k < col; k++) { var code = new ptBaseWareLocation() { Code = (rowcount + i).ToString() + "-" + (k + 1).ToString() + "-" + (j + 1).ToString() + "-" + shlf + "-" + "01", Tunnel = tun, IsStop = 0, Name = (rowcount + i).ToString() + "行" + (k + 1).ToString() + "列" + (j + 1).ToString() + "层" + shlf + "货架" + 1 + "深度", WarehouseId = 1685164446336552960, WarehouseCode = "pthouse", WareAreaId = 1685164446352102710, StateNum = 1, TypeNum = 1, Size = 1, Row = (rowcount + i), Col = (k + 1), Layer = (j + 1), Depth = 1, SCRel = "", ContGrpId = 0, ContGrpBarCode = "", AddWho = "wms", EditWho = "wms", Shelf = shlf, Sort = j * col + (k + 1), }; _baseWareLocationrepository.Insert(code); } } } return res; } public string PdaGroupStock(PtGroupInTaskRequest request) { var res = new SRes(); if (!request.RFIDBarCode.Any()) { res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); res.ResMsg = "RFID" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return res.ToCamelCaseString(); } foreach (var item in request.RFIDBarCode) { var code = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item); if (code == null) { var initbarcode = InsertContInfo(item); if (initbarcode == false) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = "同步" + ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } } var bar = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item); //var mater = _materrepository.GetSingle(p => p.Code == barcode.MatCode); //if (mater == null) //{ // res.ResCode = ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetHashCode(); // res.ResMsg = item + ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetDescription(); // return res.ToCamelCaseString(); //} var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item); if (stock != null) { res.ResCode = ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetDescription(); return res.ToCamelCaseString(); } var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(2)).First(); if (task != null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription(); return res.ToCamelCaseString(); } try { ptBillInvnow container = new ptBillInvnow(); container.ContGrpId = GetId(); container.ContGrpBarCode = item; container.BoxBarCode = item; container.InvStateCode = InvState.InvEcecState_BuildUp.ToString(); container.InvBarCode = item; container.ExecStateCode = InvLockState.InvState_Normal.ToString(); container.InDocsNo = ""; container.InDocsRowNo = ""; container.WarehouseId = bar.WarehouseId; //container.MatId = mater.Id; //container.MatCode = mater.Code; container.TolWQty = bar.WidthQty; container.NetWQty = bar.LengthQty; container.TareWQty = bar.WeightQty; container.LengthQty = bar.LengthQty; container.RFIDBarCode = item; //container.HWTypeCode = mater.SpoolType; container.SolderQty = bar.HighQty; container.ExecDocsNo = ""; container.ExecDocsRowNo = ""; container.ExecDocsTypeCode = ""; container.HWBarCode = item; container.InvInOut = 1; container.ExecWho = "人工组盘"; //container.MatName = mater.Name; container.Size = 1; _db.BeginTran(); if (_ptbillInvnow.Insert(container)) { _ptBillInvFlow.Insert(_mapper.Map(container)); } _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation("组盘异常:" + item + ex.Message); res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.DataSaveErr.GetDescription(); return res.ToCamelCaseString(); } } return res.ToCamelCaseString(); } public string PdaInsterInTask(PtGroupInTaskRequest request) { var res = new SRes(); if (!request.RFIDBarCode.Any()) { res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode(); res.ResMsg = "RFID" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription(); return res.ToCamelCaseString(); } try { if (request.BusType == 1) { foreach (var item in request.RFIDBarCode) { var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res.ToCamelCaseString(); } var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First(); if (task != null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription(); return res.ToCamelCaseString(); } //分解入库任务 var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_QualityStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode }); if (!it) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } } } else if (request.BusType == 2) { foreach (var item in request.RFIDBarCode) { var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res.ToCamelCaseString(); } var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First(); if (task != null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription(); return res.ToCamelCaseString(); } //分解入库任务 var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_AnewStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode }); if (!it) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } } } else if (request.BusType == 3) { foreach (var item in request.RFIDBarCode) { var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res.ToCamelCaseString(); } var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First(); if (task != null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription(); return res.ToCamelCaseString(); } //分解入库任务 var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_OtherStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode }); if (!it) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } } } else if (request.BusType == 4) { foreach (var item in request.RFIDBarCode) { var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res.ToCamelCaseString(); } var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First(); if (task != null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode(); res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription(); return res.ToCamelCaseString(); } //分解入库任务 var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_PurchaseSpoolStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode }); if (!it) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } } } else { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = "RFID:" + string.Join(',', request.RFIDBarCode) + "业务类型错误"; return res.ToCamelCaseString(); } } catch (Exception ex) { _logger.LogInformation("任务下发失败:" + ex.Message); res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription(); return res.ToCamelCaseString(); } return res.ToCamelCaseString(); } private bool InsertTaskIn(PtTaskRsponse request) { var bar = _ptbaseContInfo.GetSingle(p => p.ContBarCode == request.ContGrpBarCode); if (bar == null) { return false; } var ware = _baseWareHouserepository.GetSingle(p => p.Id == bar.WarehouseId); if (ware == null) { return false; } try { ptWCS_TaskInfo billTask = new ptWCS_TaskInfo(); billTask.Status = TaskStatus.NewBuild; billTask.Type = TaskType.EnterDepot; billTask.Priority = 0; billTask.Device = "srm"; billTask.SrmStation = request.StartPoint; billTask.AddrFrom = request.StartPoint; billTask.BarCode = request.ContGrpBarCode; billTask.StartTime = DateTime.Now; billTask.AddWho = "wms"; billTask.WarehouseCode = ware.Code; billTask.Enabled = true; billTask.WorkBench = request.StartPoint; billTask.AddrTo = ""; //billTask.Floor = 2; billTask.Tunnel = ""; billTask.PalletType = 1; billTask.AddTime = DateTime.Now; billTask.EditTime = DateTime.Now; billTask.MaterialCode = request.Remark; billTask.MatCode = request.Remark; billTask.BusType = request.BusType; _db.BeginTran(); var wcs = _ptwcsTaskinfo.InsertReturnEntity(billTask); var taskold = _mapper.Map(wcs); _ptwcsTaskold.InsertableSplitTable(taskold); var taskdetail = new ptWCS_TaskDtl() { ID = Guid.NewGuid(), CurPoint = request.StartPoint, AddTime = DateTime.Now, AddWho = "wms", Enabled = true, ParentTaskCode = wcs.ID, Desc = request.StartPoint + "pda入库", }; _ptwcsTaskdtl.InsertableSplitTable(taskdetail); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); return false; } return true; } private bool InsertContInfo(string code) { try { ptBaseContainer barcode = new ptBaseContainer(); barcode.ContBarCode = code; barcode.TypeCode = ContainerType.ContainerType_RFID.ToString(); barcode.PrintQty = 1; //barcode.WarehouseId = 1668442390064664576; barcode.Name = code; // barcode.WeightQty = 158; _ptbaseContInfo.Insert(barcode); } catch (Exception ex) { return false; } return true; } /// /// 分配巷道 /// /// /// public SRes GetPtTunnelPriorityList(GetTunnelPriorityListRequest reqEntity) { var result = new SRes(); var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqEntity.TaskNum).SplitTable(p => p.Take(2)).First(); if (wcstask == null) { result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode(); result.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription(); return result; } //先处理库存 var p = InsertStockInfo(reqEntity.Memo1); if (p.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode()) { result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); result.ResMsg = "库存更新" + ResponseStatusCodeEnum.Fail.GetDescription(); return result; } //获取任务数占用最少的 var wcstasks = _ptwcsTaskinfo.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish && p.Tunnel != "0" && p.Tunnel != "" && p.Tunnel != null).ToList(); var tunnelcountlist = new List(); var runningtasks = wcstasks; if (runningtasks.Any()) { tunnelcountlist = (from task in runningtasks.GroupBy(p => p.Tunnel) select new TunnelCountTemp { Tunnel = task.Key, Count = task.Count() }).ToList(); } //获取库位所有巷道列表 var alltunnels = _baseWareLocationrepository.GetList().Select(p => p.Tunnel).Distinct(); foreach (var item in alltunnels) { if (!tunnelcountlist.Where(p => p.Tunnel == item.ToString()).Any()) { tunnelcountlist.Add(new TunnelCountTemp() { Tunnel = item.ToString(), Count = 0 }); } } var tasktunnelcountlist = tunnelcountlist.OrderBy(p => p.Count).ToList(); var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == wcstask.WarehouseCode); //获取已占用库位最少的货架 var threshold = 5; //int.Parse(ConfigUtil.GetConfiguration["Threshold"]);//阈值 //获取所有有货的货位 var locationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseId == warehouse.Id && p.StateNum == LocationState.LocationState_Full.GetHashCode()); //获取所有可用货位的数量 var shelflocationcount = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode() && p.IsStop == 0).GroupBy(p => new { p.Tunnel, p.Shelf }).Select(p => new { Tunnel = p.Key.Tunnel, Shelf = p.Key.Shelf, LocationCount = p.Select(q => q.Id).Count() }); if (locationsreturn == null || !locationsreturn.Any()) { result.ResData = string.Join(",", tasktunnelcountlist.OrderBy(p => p.Count).Select(p => p.Tunnel)); } else { var grouplocationtunnels = (from location in locationsreturn.GroupBy(p => p.Tunnel) select new TunnelCountTemp { Tunnel = location.Key.ToString(), Count = location.Count(), Proportion = location.Count() / (shelflocationcount.Where(p => p.Tunnel == location.Key).Any() ? decimal.Parse(shelflocationcount.Where(p => p.Tunnel == location.Key).Sum(p => p.LocationCount).ToString()) : 1) }).ToList().OrderBy(p => p.Count).ToList(); foreach (var item in alltunnels) { if (!grouplocationtunnels.Where(p => p.Tunnel == item.ToString()).Any()) { grouplocationtunnels.Add(new TunnelCountTemp() { Tunnel = item.ToString(), Count = 0, Proportion = 0 }); } } grouplocationtunnels = grouplocationtunnels.OrderBy(p => p.Proportion).ToList(); var sorttunnels = grouplocationtunnels.OrderBy(p => p.Proportion).Select(p => p.Tunnel).ToList(); for (var i = 0; i < grouplocationtunnels.Count - 1; i++) { if (tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i].Tunnel).First().Count - threshold > tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i + 1].Tunnel).First().Count) { sorttunnels[i] = grouplocationtunnels[i + 1].Tunnel; sorttunnels[i + 1] = grouplocationtunnels[i].Tunnel; i++; } else { sorttunnels[i] = grouplocationtunnels[i].Tunnel; } } result.ResData = string.Join(",", sorttunnels); } //删除没有空闲货位的货架 var arrresultTunnels = result.ResData.Split(','); //获取可分配货位的数 var emptylocationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.StateNum == LocationState.LocationState_Empty.GetHashCode() && p.IsStop == 0); var resultTunenls = new List(); foreach (var sorttunnel in arrresultTunnels) { var tunneltaskcount = wcstasks.Where(p => p.Tunnel == sorttunnel).Count(); int left = 0; if (emptylocationsreturn.Where(p => p.Tunnel == int.Parse(sorttunnel)).Count() - tunneltaskcount > left) { resultTunenls.Add(sorttunnel); } } result.ResData = string.Join(",", resultTunenls); //根据配置过滤禁用的巷道 var disabletunnels = _sysconfigrepository.GetList(p => p.SType == "InStop" && !string.IsNullOrEmpty(p.SContent)); if (disabletunnels != null && disabletunnels.Any()) { var resultTunenlsNew = new List(); var resultTunenlsTemp = result.ResData.Split(','); foreach (var tun in resultTunenlsTemp) { if (!disabletunnels.Select(p => p.Default1).Contains(tun)) { resultTunenlsNew.Add(tun); } } result.ResData = string.Join(",", resultTunenlsNew); } return result; } public SRes PtApplyStockInLoc(PtApplyStockInLocRequest reqEntity) { var res = ApplyStockInLocTemp(reqEntity); if (string.IsNullOrEmpty(res.ResData.CellNo)) { return res; } try { _db.BeginTran(); //更新货位 _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockIn.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.Code == res.ResData.CellNo); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation(ex.ToString()); } return res; } private SRes ApplyStockInLocTemp(PtApplyStockInLocRequest reqEntity) { var res = new SRes() { ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(), ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(), ResData = new PtApplyStockInLocResponse() }; var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqEntity.TaskNum).SplitTable(tabs => tabs.Take(2)).First(); ; if (wcstask == null) { res.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode(); res.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription(); return res; } if (wcstask.Type == TaskType.OutDepot) { res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode(); res.ResMsg = "该任务是出库任务,不能分配货位;wms任务号" + wcstask.ID; return res; } if (!string.IsNullOrEmpty(wcstask.AddrTo) && wcstask.AddrTo != "srm") { res.ResData.TunnelNum = wcstask.Tunnel; res.ResData.CellNo = wcstask.AddrTo; res.ResData.Row = wcstask.AddrTo.Split('-')[0] != null ? int.Parse(wcstask.AddrTo.Split('-')[0]) : 0; res.ResData.Colomn = wcstask.AddrTo.Split('-')[1] != null ? int.Parse(wcstask.AddrTo.Split('-')[1]) : 0; res.ResData.Layer = wcstask.AddrTo.Split('-')[2] != null ? int.Parse(wcstask.AddrTo.Split('-')[2]) : 0; return res; } if (reqEntity.TunnelNum <= 0) { res.ResCode = ResponseStatusCodeEnum.NotTunnelNum.GetHashCode(); res.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.NotTunnelNum.GetDescription(); return res; } var warehouse = _baseWareHouserepository.GetFirst(p => p.Code == wcstask.WarehouseCode); if (warehouse == null) { res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); res.ResMsg = wcstask.WarehouseCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return res; } //验证库存 var stock = _ptbillInvnow.GetFirst(p => p.HWBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); res.ResMsg = wcstask.BarCode + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return res; } var locell = new PtApplyLocRequest() { MaterialId = stock.MatId, MaterialCode = stock.MatCode, Size = stock.Size, TunnelNum = reqEntity.TunnelNum, WarehuoseId = warehouse.Id, IsMove = wcstask.Type == TaskType.TransferDepot ? true : false, }; //预留货位数量 var emptyLoc = _baseWareLocationrepository.AsQueryable().Where(p => p.IsStop == 0 && p.StateNum == LocationState.LocationState_Empty.GetHashCode() && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode() && p.Tunnel == locell.TunnelNum && p.WarehouseId == locell.WarehuoseId && p.Size == locell.Size ).OrderBy(p => p.Sort).ToList(); if (!emptyLoc.Any()) { res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode(); res.ResMsg = reqEntity.TunnelNum + ResponseStatusCodeEnum.NotEnoughLocation.GetDescription(); return res; } //移库预留货位 if (!locell.IsMove && emptyLoc.Count <= int.Parse(AppSettings.GetConfig("IsMoveCellCount"))) { res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode(); res.ResMsg = reqEntity.TunnelNum + "巷道的可用货位数" + emptyLoc.Count + ",禁止分配货位,预留移库使用"; return res; } var loc = emptyLoc.First(); res.ResData.TunnelNum = loc.Tunnel.ToString(); res.ResData.CellNo = loc.Code; res.ResData.Row = loc.Row; res.ResData.Colomn = loc.Col; res.ResData.Layer = loc.Layer; return res; } public SRes PtCompleteTask(CompleteTaskRequest reqDto) { var result = new SRes() { ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(), ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(), ResData = reqDto.TaskNum }; var task = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqDto.TaskNum).SplitTable(tabs => tabs.Take(2)).First(); if (task == null) { result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription(); return result; } var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == task.WarehouseCode); if (warehouse == null) { result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode(); result.ResMsg = task.WarehouseCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription(); return result; } if (task.Type == TaskType.EnterDepot) { //库存,货位 try { var stock = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); if (stock == null) { result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); result.ResMsg = task.BarCode + "没有已组盘的信息"; return result; } _db.BeginTran(); int row = int.Parse(task.AddrTo.Split('-')[0]); int col = int.Parse(task.AddrTo.Split('-')[1]); int layer = int.Parse(task.AddrTo.Split('-')[2]); //更新库存 _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_In.ToString(), PutRow = row, PutCol = col, PutLayer = layer, OneInTime = DateTime.Now, EditTime = DateTime.Now, ExecStateCode = InvLockState.InvState_Lock.ToString() }, p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()); _ptbillInvinit.Delete(p => p.ContGrpBarCode == stock.ContGrpBarCode); //更新货位 _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, EditTime = DateTime.Now }, p => p.Code.Contains(task.AddrTo)); var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_In.ToString()); foreach (var item in stocklist) { item.Id = IdFactory.NewId(); item.AddTime = DateTime.Now; } _ptBillInvFlow.InsertRange(_mapper.Map>(stocklist)); var list = new List(); string pushtype = ""; if (task.BusType == PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription()) { pushtype = PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString(); } else if (task.BusType == PtTaskBusType.TaskBusType_PT_ProductionBackStockIn.GetDescription()) { pushtype = PtFackbeekType.ReturnMat.ToString(); } //回调数据 foreach (var item in stocklist) { list.Add(new ptBillPushinfo { DocsNo = stock.InDocsNo, TypeCode = pushtype, RFIDBarCode = stock.ContGrpBarCode, HWBarCode = stock.RodBarCode, CLBarCode = item.CLBarCode, WarehouseId = warehouse.Id, WarehouseCode = warehouse.Code, WareCellId = 0, WareCellCode = task.AddrTo, MatId = item.MatId, MatCode = item.MatCode, MatName = item.MatName, ReqNo = Guid.NewGuid().ToString() }); } _ptbillPushinfo.InsertRange(list); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode(); result.ResMsg = task.ID + "完成任务异常"; _logger.LogInformation("完成任务异常" + ex.ToString()); } } else if (task.Type == TaskType.OutDepot) { //库存删除 var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString()); if (stocklist == null || !stocklist.Any()) { result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return result; } var flowlist = _mapper.Map>(stocklist); foreach (var item in flowlist) { item.Id = IdFactory.NewId(); item.InvStateCode = InvState.InvEcecState_Out.ToString(); item.AddTime = DateTime.Now; item.Memo = "任务完成"; } var list = new List(); string pushtype = ""; if (task.BusType == PtTaskBusType.TaskBusType_PT_ProductionStockOut.GetDescription()) { pushtype = PtFackbeekType.PickMat.ToString(); //回调数据 foreach (var item in stocklist) { list.Add(new ptBillPushinfo { DocsNo = item.InDocsNo, TypeCode = pushtype, RFIDBarCode = item.ContGrpBarCode, HWBarCode = item.HWBarCode, CLBarCode = item.CLBarCode, WarehouseId = warehouse.Id, WarehouseCode = warehouse.Code, WareCellId = 0, WareCellCode = task.AddrTo, MatId = item.MatId, MatCode = item.MatCode, MatName = item.MatName, ReqNo = Guid.NewGuid().ToString() }); } } try { _db.BeginTran(); _ptbillInvnow.Delete(p => stocklist.Select(p => p.Id).ToList().Contains(p.Id)); _ptbillInvinit.Delete(p => p.ContGrpBarCode == task.BarCode); _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.StateNum == LocationState.LocationState_StockOut.GetHashCode() && p.ContGrpId == flowlist.First().ContGrpId && p.Code.Contains(task.AddrFrom)); _ptbillPushinfo.InsertRange(list); _ptBillInvFlow.InsertRange(flowlist); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation(ex.ToString()); result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode(); result.ResMsg = task.ID + "完成任务异常"; } } else if (task.Type == TaskType.TransferDepot) { var fromcell = _baseWareLocationrepository.GetFirst(p => p.Code == task.AddrFrom); var grcontid = fromcell.ContGrpId; var grcontcode = fromcell.ContGrpBarCode; var fromcellno = fromcell.Code; var tocellno = task.AddrTo; try { _db.BeginTran(); _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.Code.Contains(fromcellno)); _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = grcontcode, ContGrpId = grcontid, EditTime = DateTime.Now }, p => p.Code.Contains(tocellno)); int row = int.Parse(tocellno.Split('-')[0]); int col = int.Parse(tocellno.Split('-')[1]); int layer = int.Parse(tocellno.Split('-')[2]); _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = row, PutCol = col, PutLayer = layer }, p => p.ContGrpId == grcontid && p.InvStateCode == InvState.InvEcecState_In.ToString()); var stock = _ptbillInvnow.GetFirst(p => p.ContGrpId == grcontid && p.ContGrpBarCode == grcontcode && p.InvStateCode == InvState.InvEcecState_In.ToString()); //流水表 var flow = _mapper.Map(stock); flow.Id = IdFactory.NewId(); flow.AddTime = DateTime.Now; flow.Memo = grcontcode + "移库(" + fromcellno + "至" + tocellno + ")"; _ptBillInvFlow.Insert(flow); //推送表 _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode(); result.ResMsg = task.ID + "完成任务异常"; _logger.LogInformation("完成任务异常" + ex.ToString()); } } return result; } public SRes PtSrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto) { var result = new SRes() { ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(), ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(), ResData = reqDto.TaskNum }; var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqDto.TaskNum).SplitTable(tabs => tabs.Take(2)).First(); if (wcstask == null) { result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription(); return result; } if (wcstask.Type != TaskType.OutDepot) { result.ResCode = ResponseStatusCodeEnum.OnlyStockOutAvil.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.OnlyStockOutAvil.GetDescription(); return result; } if (wcstask.Status >= TaskStatus.Finish) { result.ResCode = ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetDescription(); return result; } try { _db.BeginTran(); //更新库存 _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = 0, PutCol = 0, PutLayer = 0 }, p => p.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && p.ContGrpBarCode == wcstask.BarCode); var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString()); if (stocklist == null || !stocklist.Any()) { result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode(); result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription(); return result; } var flowlist = _mapper.Map>(stocklist); foreach (var item in flowlist) { item.Id = IdFactory.NewId(); item.AddTime = DateTime.Now; item.Memo = "堆垛机出库放货完成"; } //货位 _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.ContGrpBarCode == wcstask.BarCode && p.Code.Contains(wcstask.AddrFrom)); _ptBillInvFlow.InsertRange(flowlist); _db.CommitTran(); } catch (Exception ex) { _db.RollbackTran(); _logger.LogInformation(ex.ToString()); result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode(); result.ResMsg = wcstask.ID + "堆垛机出库放货完成异常"; } return result; } public SRes GetSyncMaterInfo(PtSyncMaterInfoListRequest ResData) { var res = new SRes(); if (!string.IsNullOrEmpty(ResData.MatCode)) { ResData.UpdatedTime = DateTime.Now.ToString(); if (_materrepository.IsAny(p => p.Code == ResData.MatCode)) { _materrepository.UpdateModelColumns(p => new ptBaseMater() { IsHold = ResData.IsHold, HoldDuration = ResData.HoldDuration, Name = ResData.MatName, EditTime = DateTime.Now, Description = ResData.Describe }, p => p.Code == ResData.MatCode); } else { var model = _mapper.Map(ResData); model.AddTime = DateTime.Now; model.WarehouseId = 263682712; _materrepository.Insert(model); } } return res; } } }