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