12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913 |
- 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;
- using wms.dto.request.hj;
- namespace wms.service.Service
- {
- public class PTService : IPTService
- {
- private readonly IMapper _mapper;
- private readonly ILogger<PTService> _logger;
- private readonly IPTDataService _iptDataService;
- public PTService(IMapper mapper, ILogger<PTService> logger, IPTDataService iptDataService)
- {
- _mapper = mapper;
- _logger = logger;
- _iptDataService = iptDataService;
- }
- Repository<ptBaseContainer> _ptbaseContInfo => new Repository<ptBaseContainer>();
- Repository<ptSysConfig> _sysconfigrepository => new Repository<ptSysConfig>();
- Repository<ptBaseMater> _materrepository => new Repository<ptBaseMater>();
- RepositoryTask<ptWCS_TaskInfo> _ptwcsTaskinfo => new RepositoryTask<ptWCS_TaskInfo>();
- Repository<ptBaseWarehouse> _baseWareHouserepository => new Repository<ptBaseWarehouse>();
- Repository<ptBaseWareLocation> _baseWareLocationrepository => new Repository<ptBaseWareLocation>();
- Repository<ptBillDocsinfo> _docrepository => new Repository<ptBillDocsinfo>();
- Repository<ptBillPushinfo> _ptbillPushinfo => new Repository<ptBillPushinfo>();
- RepositoryTask<ptWCS_TaskOld> _ptwcsTaskold => new RepositoryTask<ptWCS_TaskOld>();
- Repository<ptSysJob> _sysJobrepository => new Repository<ptSysJob>();
- Repository<ptSysJobApiRelation> _sysJobApirepository => new Repository<ptSysJobApiRelation>();
- Repository<ptBillInvFlow> _ptBillInvFlow => new Repository<ptBillInvFlow>();
- Repository<ptBillInvnow> _ptbillInvnow => new Repository<ptBillInvnow>();
- Repository<ptBillInvinit> _ptbillInvinit => new Repository<ptBillInvinit>();
- RepositoryTask<ptWCS_TaskDtl> _ptwcsTaskdtl => new RepositoryTask<ptWCS_TaskDtl>();
- Repository<ptBillMesmiddle> _ptbillmes => new Repository<ptBillMesmiddle>();
- //Repository<ptBillPboxrule> _ptBillLocationMap => new Repository<ptBillPboxrule>();
- ITenant _db => SqlSugarHelper.Db;//处理事务
- /// <summary>
- /// 获取配置内容信息
- /// </summary>
- /// <param name="code">配置表code值</param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 获取配置信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- public ptSysConfig GetSysConfigByCode(string code)
- {
- //Repository<dynamic> _billdtrepository = new Repository<dynamic>();
- return _sysconfigrepository.GetSingle(p => p.Code == code);
- }
- /// <summary>
- /// 获取物料信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- public ptBaseMater GetBaseMaterByExpression(Expression<Func<ptBaseMater, bool>> WhereExpression)
- {
- return _materrepository.GetSingle(WhereExpression);
- }
- /// <summary>
- /// 获取配置信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- public ptSysConfig GetSysConfigByExpression(Expression<Func<ptSysConfig, bool>> WhereExpression)
- {
- return _sysconfigrepository.GetSingle(WhereExpression);
- }
- /// <summary>
- /// 获取反馈信息
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- public List<ptBillPushinfo> GetBillFeedbackList()
- {
- return _ptbillPushinfo.GetList(p => p.PostResult != 1 && p.PostQty <= 5).OrderBy(p => p.AddTime).Take(1).ToList();
- }
- public bool UpdatePuchinfoModelColumns(UpdateModelColumns<ptBillPushinfo> updateModel)
- {
- return _ptbillPushinfo.Update(updateModel.Columns, updateModel.WhereExpression);
- }
- /// <summary>
- /// 更新SysConfig表字段
- /// </summary>
- /// <param name="updateModel"></param>
- /// <returns></returns>
- public bool UpdateSysConfigModelColumns(UpdateModelColumns<ptSysConfig> updateModel)
- {
- return _sysconfigrepository.Update(updateModel.Columns, updateModel.WhereExpression);
- }
- public bool SyncMaterInfo(List<PTSyncMaterInfoResponseItem> 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<ptBaseMater>(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<ptBillInvinit> invlist = new List<ptBillInvinit>();
- //明细存条码表
- 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<ptBillInvinit>(invinit));
- }
- _ptbillInvinit.InsertRange(invlist);
- return result;
- }
- public SRes PurchaseBillTransFeedBack(PurchaseBillTransFeedBackRequest reqDto)
- {
- var result = new SRes();
- return result;
- }
- /// <summary>
- /// 放行单传输
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto)
- {
- var result = new ErpUnlockStockResponse() { ListInfo = new List<ErpUnlockStockResponseItem>()};
- 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<ptBillInvFlow>(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<ErpUnlockStockResponseItem>(erpUnlockStock));
- }
- catch (Exception ex)
- {
- _db.RollbackTran();
- var erpUnlockStock = new ErpUnlockStockResponseItem()
- {
- RFID = item.RFID,
- MatBarCode = item.MatBarCode,
- ResState = "E",
- ResDesc = "放行失败"
- };
- result.ListInfo.Add(_mapper.Map<ErpUnlockStockResponseItem>(erpUnlockStock));
- }
- }
- else
- {
- var unlockStock = new ErpUnlockStockResponseItem()
- {
- RFID = item.RFID,
- MatBarCode = item.MatBarCode,
- ResState = "E",
- ResDesc = "未找到该RFID条码"
- };
- result.ListInfo.Add(_mapper.Map<ErpUnlockStockResponseItem>(unlockStock));
- continue;
- }
- }
- return result;
- }
- /// <summary>
- /// 车间自动叫料出库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- 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<ProductionStockOutRequest>(mesRequest));
- return result;
- }
- /// <summary>
- /// 生产领料出库
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- 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);
- }
- //申请出库
- var res = ApplyProductionStockOut(reqDto);
- return result;
- }
- /// <summary>
- /// 申请出库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- 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))
- {
- //多个炉号业务处理
- if (locationlist.GroupBy(p => p.BoilerNo).Count() > 1)
- {
- var loca = locationlist.OrderBy(p => p.ProductTime).GroupBy(p => p.BoilerNo);
- if (true)
- {
- //多个炉号的生产时间在同一天的
- //locationlist = locationlist.Where(p => p.BoilerNo == loca.Select(it => it.BoilerNo).First()).OrderBy(p => p.PackNo);
- }
- else
- {
- var locations = locationlist.OrderBy(p => p.ProductTime).GroupBy(p => p.BoilerNo).First();
- locationlist = locationlist.Where(p => p.BoilerNo == locations.Select(it => it.BoilerNo).First()).OrderBy(p => p.PackNo);
- }
-
- }
- }
- //出库任务
- var temploc = locationlist.First();
- var outstation = "";
- if (temploc.Tunnel == 1 || temploc.Tunnel == 2)
- {
- outstation = "";
- }
- else if (temploc.Tunnel == 3 || temploc.Tunnel == 4)
- {
- outstation = "";
- }
- else if (temploc.Tunnel == 5 || temploc.Tunnel == 6)
- {
- outstation = "";
- }
- else if (temploc.Tunnel == 7 || temploc.Tunnel == 8)
- {
- outstation = "";
- }
- 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<ptBillInvFlow>(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<ptWCS_TaskInfo> CreateStockOutTask(PtCreateStockOutTaskRequest reqDto)
- {
- var res = new SRes<ptWCS_TaskInfo>();
- 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<ptWCS_TaskOld>(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();
- return result;
- }
- public SRes ProductionBack(ProductionBackRequest reqDto)
- {
- var result = new SRes();
- return result;
- }
- public PTGetCurStockListResponse GetCurStockList(PtGetCurStockListRequest reqDto)
- {
- var result = new PTGetCurStockListResponse() { list = new List<PtResDataItem>() };
- int count = 0;
- var stock = _ptbillInvnow.Context.Queryable<ptBillInvnow, ptBaseMater>((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;
- }
- /// <summary>
- /// 采购入库任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- 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 = "",
- 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<ptWCS_TaskOld>(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.InsertReturnEntity(taskdetail);
- _db.CommitTran();
- }
- catch (Exception ex)
- {
- _db.RollbackTran();
- result.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
- result.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
- return result;
- }
- return result;
- }
- /// <summary>
- /// 生成库存
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- 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<ptBillInvnow>(barcode);
- stock.AddTime = DateTime.Now;
- stock.EditTime = DateTime.Now;
- try
- {
- _db.BeginTran();
- _ptbillInvnow.DeleteById(inv.Id);
- _ptbillInvnow.Insert(stock);
- _ptBillInvFlow.Insert(_mapper.Map<ptBillInvFlow>(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<int> Unbounding(PtUnboundRequest request)
- {
- var res = new SRes<int>() { 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<PtDocumentsdetailList> GetDocumentDetailListByDocsNo(PtDocumentsRequest request)
- {
- var res = new SRes<PtDocumentsdetailList>() { ResDataList = new List<PtDocumentsdetailList>() };
- 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<PtDocumentsResponse> GetPageDocumentsList(PtDocumentsRequest request)
- {
- var res = new SRes<PtDocumentsResponse>() { ResDataList = new List<PtDocumentsResponse>() };
- 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.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.Floor = 2;
- 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<ptWCS_TaskOld>(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);
- _db.CommitTran();
- _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<ptBillInvFlow>(stock);
- flow.Id = IdFactory.NewId();
- flow.InvStateCode = InvState.InvEcecState_OutGoing.ToString();
- flow.EditTime = DateTime.Now;
- _ptBillInvFlow.Insert(flow);
- }
- }
- 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 = "8";
- 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(1)).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<ptBillInvFlow>(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<ptWCS_TaskOld>(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;
- }
- /// <summary>
- /// 分配巷道
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- public SRes<string> GetPtTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
- {
- var result = new SRes<string>();
- var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqEntity.TaskNum).SplitTable(p => p.Take(1)).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 = _ptwcsTaskold.AsQueryable().Where(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).ToList();
- var tunnelcountlist = new List<TunnelCountTemp>();
- var runningtasks = wcstasks.Where(p => p.Tunnel != "0" && p.Tunnel != "" && p.Tunnel != null);
- 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.Size >= wcstask.Height && p.StateNum == LocationState.LocationState_Full.GetHashCode() && p.IsStop == 0);
- //获取所有可用货位的数量
- var shelflocationcount = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Size >= wcstask.Height && 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.Size >= wcstask.Height && p.StateNum == LocationState.LocationState_Empty.GetHashCode() && p.IsStop == 0);
- var resultTunenls = new List<string>();
- foreach (var sorttunnel in arrresultTunnels)
- {
- //获取巷道的入库任务数
- var tunneltaskcount = _ptwcsTaskold.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish && p.Height >= wcstask.Height && p.Tunnel == wcstask.Tunnel).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<string>();
- 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<PtApplyStockInLocResponse> 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<PtApplyStockInLocResponse> ApplyStockInLocTemp(PtApplyStockInLocRequest reqEntity)
- {
- var res = new SRes<PtApplyStockInLocResponse>()
- {
- 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(1)).First(); ;
- if (wcstask == null)
- {
- res.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
- res.ResMsg = 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 = ResponseStatusCodeEnum.NotTunnelNum.GetDescription();
- return res;
- }
- var warehouse = _baseWareHouserepository.GetFirst(p => p.Code == wcstask.WarehouseCode);
- if (warehouse == null)
- {
- res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
- res.ResMsg = 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 = 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
- };
- //预留货位数量
- var emptyLoc = _baseWareLocationrepository.GetList(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
- );
- //判断是否移库
- if (!locell.IsMove && (emptyLoc == null || emptyLoc.Count < 2))
- {
- res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
- res.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();
- return res;
- }
- if (!emptyLoc.Any() || emptyLoc == null)
- {
- res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
- res.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();
- 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<int> PtCompleteTask(CompleteTaskRequest reqDto)
- {
- var result = new SRes<int>()
- {
- 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(1)).First();
- if (task == null)
- {
- result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
- result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
- return result;
- }
- if (task.Type == TaskType.EnterDepot)
- {
- //库存,货位
- try
- {
- var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == task.WarehouseCode);
- 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<List<ptBillInvFlow>>(stocklist));
- var list = new List<ptBillPushinfo>();
- string pushtype = "";
- if (task.BusType == PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription())
- {
- pushtype = PtFackbeekType.InterfaceType_PT_PurchaseStockIn.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<List<ptBillInvFlow>>(stocklist);
- foreach (var item in flowlist)
- {
- item.Id = IdFactory.NewId();
- item.InvStateCode = InvState.InvEcecState_Out.ToString();
- item.AddTime = DateTime.Now;
- item.Memo = "任务完成";
- }
- 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));
- _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<ptBillInvFlow>(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<int> PtSrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto)
- {
- var result = new SRes<int>()
- {
- 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(1)).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<List<ptBillInvFlow>>(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<ptBaseMater>(ResData);
- model.AddTime = DateTime.Now;
- model.WarehouseId = 263682712;
- _materrepository.Insert(model);
- }
- }
- return res;
- }
- }
- }
|