| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253 | using AutoMapper;using SqlSugar;using System;using System.Collections.Generic;using System.Linq.Expressions;using System.Text;using wms.dto;using wms.dto.response;using wms.dto.response.pt;using wms.service.IService;using wms.sqlsugar;using wms.sqlsugar.model;using wms.sqlsugar.model.pt;using wms.util.Check;using wms.util.Ext;using System.Linq;using Newtonsoft.Json;using Microsoft.Extensions.Logging;using wms.util;using wms.dto.request.pt;using wms.dataservice.IDataSetvice;using wms.dataservice;using wms.dto.request.pt.dto;using wms.dto.response.pt.dto;using wms.util.Http;using wms.dataservice.DataService;using NPOI.SS.Formula.Functions;using wms.dto.request;using wms.dto.request.share;using Org.BouncyCastle.Asn1.Ocsp;using Castle.Core.Internal;using WCS.Entity;namespace wms.service.Service{    public class PTService : IPTService    {        private readonly IMapper _mapper;        private readonly ILogger<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);            }            //申请出库            result = 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))            {                //多个炉号业务处理                var boilernum = locationlist.Select(p => new { p.BoilerNo, p.ProductTime } ).Distinct().OrderBy(p => p.ProductTime).ToList();                if (boilernum.Count() > 1)                {                    List<string> boils = new List<string>();                    for (int i = 0; i < boilernum.Count(); i++)                    {                        var boil = boilernum;                        foreach (var item in boil)                        {                            if (item.BoilerNo == boilernum[i].BoilerNo)                            {                                continue;                            }                            if (DateTime.Equals(boilernum[i].ProductTime, item.ProductTime))                            {                                boils.Add(item.BoilerNo);                            }                        }                    }                    boils = boils.Distinct().ToList();                    if (boils.Any())                    {                        //多个炉号的生产时间在同一天的                        locationlist = locationlist.Where(p => boils.Contains(p.BoilerNo)).GroupBy(p => p.BoilerNo).OrderBy(p => p.Count()).First();                    }                    else                    {                        var loca = locationlist.OrderBy(p => p.ProductTime).First();                        locationlist = locationlist.Where(p => p.BoilerNo == loca.BoilerNo).OrderBy(p => p.PackNo);                    }                                   }            }            //出库任务            var temploc = locationlist.First();            var outstation = "";            switch (temploc.Tunnel)            {                case 1:                    outstation = "";                    break;                case 2:                    outstation = "";                    break;                case 3:                    outstation = "";                    break;                case 4:                    outstation = "";                    break;                case 5:                    outstation = "";                    break;                case 6:                    outstation = "";                    break;                case 7:                    outstation = "";                    break;                case 8:                    outstation = "";                    break;                default:                    break;            }            var sotck = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == temploc.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString());            try            {                _db.BeginTran();                //货位表                _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockOut.GetHashCode() }, p => p.Id == temploc.Id);                //库存表                _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_OutGoing.ToString(), EditTime = DateTime.Now }, p => p.Id == sotck.Id);                var invflow = _mapper.Map<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();            if (!reqDto.ListInfo.Any())            {                result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();                result.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();                return result;            }            var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode);            if (ware == null)            {                result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();                result.ResMsg = reqDto.WareCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();                return result;            }            var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);            if (doc == null)            {                var docno = new ptBillDocsinfo()                {                    DocsNo = reqDto.BillCode,                    IsStop = 0,                    WarehouseId = ware.Id,                    ReqNo = reqDto.ReqId,                    Type = PtDocType.DocType_PT_StateTrans.ToString(),                    StateNum = DocState.DocState_Create.GetHashCode(),                    JsonContent = JsonConvert.SerializeObject(reqDto.ListInfo),                    AddWho = "mes",                    EditWho = "mes"                };                _docrepository.Insert(docno);            }            foreach (var item in reqDto.ListInfo)            {                var puch = new ptBillPushinfo()                {                    DocsNo = reqDto.BillCode,                    TypeCode = PtFackbeekType.StateTrans.ToString(),                    RFIDBarCode = item.RFID,                    HWBarCode = item.RFID,                    CLBarCode = item.MatBarCode,                    WarehouseId = ware.Id,                    WarehouseCode = ware.Code,                    ReqNo = Guid.NewGuid().ToString(),                    BoilerNo = item.BoilerNo,                    PackNo = item.PackNo                };                var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID);                if (stock == null)                {                    puch.ResStateCode = "E";                    puch.ResDesc = item.RFID + ResponseStatusCodeEnum.StockNotExist.GetDescription();                    _ptbillPushinfo.Insert(puch);                    continue;                }                else                {                    if (stock.InvStateCode == InvState.InvEcecState_In.ToString() || stock.InvStateCode == InvState.InvEcecState_BuildUp.ToString())                    {                        if (item.State == "Lock" || item.State == "Normal")                        {                            var it = _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()                            {                                ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(),                                EditTime = DateTime.Now,                                BoilerNo = item.BoilerNo,                                PackNo = item.PackNo,                                Memo = item.Reason                            }, p => p.ContGrpBarCode == item.RFID);                            var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID);                            var flow = _mapper.Map<ptBillInvFlow>(nov);                            flow.Id = GetId();                            flow.AddTime = DateTime.Now;                            flow.EditTime = DateTime.Now;                            puch.ResStateCode = "S";                            puch.ResDesc = "成功";                            _ptbillPushinfo.Insert(puch);                            _ptBillInvFlow.Insert(flow);                            continue;                        }                        else                        {                            _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()                            {                                IsFast = item.State == "Fast" ? true : false,                                EditTime = DateTime.Now,                                BoilerNo = item.BoilerNo,                                PackNo = item.PackNo,                                Memo = item.Reason                            }, p => p.ContGrpBarCode == item.RFID);                            var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID);                            var flow = _mapper.Map<ptBillInvFlow>(nov);                            flow.Id = GetId();                            flow.AddTime = DateTime.Now;                            flow.EditTime = DateTime.Now;                            puch.ResStateCode = "S";                            puch.ResDesc = "成功";                            _ptbillPushinfo.Insert(puch);                            _ptBillInvFlow.Insert(flow);                            continue;                        }                    }                    //堆垛机还未上报放货完成                    else if (stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && stock.PutRow != 0 && stock.PutCol != 0 && stock.PutLayer != 0)                    {                        if (item.State == "Lock" || item.State == "Normal")                        {                            _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()                            {                                ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(),                                EditTime = DateTime.Now,                                BoilerNo = item.BoilerNo,                                PackNo = item.PackNo,                                Memo = item.Reason,                                InvStateCode = InvState.InvEcecState_In.ToString()                            }, p => p.ContGrpBarCode == item.RFID);                            var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID);                            var flow = _mapper.Map<ptBillInvFlow>(nov);                            flow.Id = GetId();                            flow.AddTime = DateTime.Now;                            flow.EditTime = DateTime.Now;                            puch.ResStateCode = "S";                            puch.ResDesc = "成功";                            _ptbillPushinfo.Insert(puch);                            _ptBillInvFlow.Insert(flow);                            //出库任务取消                            continue;                        }                        else                        {                            _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()                            {                                IsFast = item.State == "Fast" ? true : false,                                EditTime = DateTime.Now,                                BoilerNo = item.BoilerNo,                                PackNo = item.PackNo,                                Memo = item.Reason,                                InvStateCode = InvState.InvEcecState_In.ToString()                            }, p => p.ContGrpBarCode == item.RFID);                            var nov = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item.RFID);                            var flow = _mapper.Map<ptBillInvFlow>(nov);                            flow.Id = GetId();                            flow.AddTime = DateTime.Now;                            flow.EditTime = DateTime.Now;                            puch.ResStateCode = "S";                            puch.ResDesc = "成功";                            _ptbillPushinfo.Insert(puch);                            _ptBillInvFlow.Insert(flow);                            //出库任务取消                            continue;                        }                    }                    //已上报放货完成                    else if (stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && stock.PutRow == 0 && stock.PutCol == 0 && stock.PutLayer == 0)                    {                                            }                }            }            return result;        }        public SRes ProductionBack(ProductionBackRequest reqDto)        {            var result = new SRes();            if (!reqDto.ListInfo.Any() || string.IsNullOrEmpty(reqDto.BillCode) || string.IsNullOrEmpty(reqDto.WareCode))            {                result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();                result.ResMsg = ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();                return result;            }            var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode);            if (ware == null)            {                result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();                result.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();                return result;            }            var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);            if (doc == null)            {                var docno = new ptBillDocsinfo()                {                    DocsNo = reqDto.BillCode,                    IsStop = 0,                    WarehouseId = ware.Id,                    ReqNo = reqDto.BillCode,                    Type = PtDocType.DocType_PT_ProductionBackStockIn.ToString(),                    StateNum = DocState.DocState_Create.GetHashCode(),                    JsonContent = JsonConvert.SerializeObject(reqDto.ListInfo),                    AddWho = "mes",                    EditWho = "mes"                };                _docrepository.Insert(docno);            }            foreach (var item in reqDto.ListInfo)            {                var flowold = _ptBillInvFlow.AsQueryable().Where(p => p.ContGrpBarCode == item.RFID).OrderByDescending(p => p.EditTime).First();                var mater = _materrepository.GetSingle(p => p.Code == flowold.MatCode);                var nov = new ptBillInvnow()                {                    WarehouseId = ware.Id,                    ContGrpBarCode = item.RFID,                    ContGrpId = GetId(),                    BoxBarCode = item.RFID,                    BoilerNo = item.BoilerNo,                    PackNo = item.PackNo,                    CLBarCode = item.MatBarCode,                    InvStateCode = InvState.InvEcecState_BuildUp.ToString(),                    InvBarCode = item.MatBarCode,                    ExecStateCode = item.State == "Lock" ? InvLockState.InvState_Lock.ToString() : InvLockState.InvState_Normal.ToString(),                    InDocsNo = reqDto.BillCode,                    InDocsRowNo = reqDto.BillCode,                    MatId = mater.Id,                    MatCode = mater.Code,                    RFIDBarCode = item.RFID,                    HWTypeCode = mater.SpoolType,                    ExecDocsNo = reqDto.BillCode,                    ExecDocsRowNo = reqDto.BillCode,                    ExecDocsTypeCode = PtDocType.DocType_PT_ProductionBackStockIn.ToString(),                    HWBarCode = item.RFID,                    RodBarCode = item.RFID,                    InvInOut = 1,                    MatName = mater.Name,                    Size = 1,                    IsBack = true                };                var task = new ptWCS_TaskInfo()                {                    Status = TaskStatus.NewBuild,                    Type = TaskType.EnterDepot,                    Priority = 0,                    Device = item.LocCode,                    SrmStation = item.LocCode,                    AddrFrom = item.LocCode,                    BarCode = item.RFID,                    StartTime = DateTime.Now,                    AddTime = DateTime.Now,                    EditTime = DateTime.Now,                    AddWho = "wms",                    EditWho = "wms",                    WarehouseCode = ware.Code,                    WorkBench = item.LocCode,                    AddrTo = "",                    Tunnel = "",                    PalletType = 1,                    MaterialCode = mater.Code,                    MatCode = mater.Code,                    BusType = PtTaskBusType.TaskBusType_PT_ProductionBackStockIn.GetDescription()                };                try                {                    _db.BeginTran();                    _ptbillInvnow.Insert(nov);                    _ptBillInvFlow.Insert(_mapper.Map<ptBillInvFlow>(nov));                    var wcs = _ptwcsTaskinfo.InsertReturnEntity(task);                    var wcsold = _mapper.Map<ptWCS_TaskOld>(wcs);                    _ptwcsTaskold.InsertableSplitTable(wcsold);                    var taskdetail = new ptWCS_TaskDtl()                    {                        ID = Guid.NewGuid(),                        CurPoint = item.LocCode,                        AddTime = DateTime.Now,                        AddWho = "wms",                        Enabled = true,                        ParentTaskCode = wcs.ID,                        Desc = wcs.BusType                    };                    _ptwcsTaskdtl.InsertableSplitTable(taskdetail);                    _db.CommitTran();                }                catch (Exception ex)                {                    _db.RollbackTran();                    result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();                    result.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();                    return result;                }            }            return result;        }        public PTGetCurStockListResponse GetCurStockList(PtGetCurStockListRequest reqDto)        {            var result = new PTGetCurStockListResponse() { list = new List<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 = stock.ContGrpBarCode,                    StartTime = DateTime.Now,                    AddTime = DateTime.Now,                    EditTime = DateTime.Now,                    AddWho = "wms",                    EditWho = "wms",                    WarehouseCode = Const.PtWareHouse,                    WorkBench = request.Equip,                    AddrTo = "",                    Tunnel = "",                    PalletType = 1,                    MaterialCode = "",                    BusType = PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription()                };                _db.BeginTran();                _ptbillInvnow.Insert(stock);                var wcs = _ptwcsTaskinfo.InsertReturnEntity(task);                var wcsold = _mapper.Map<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.InsertableSplitTable(taskdetail);                _db.CommitTran();            }            catch (Exception ex)            {                _db.RollbackTran();                result.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();                result.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;                return result;            }            return result;        }        /// <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.ExecStateCode != InvLockState.InvState_Normal.ToString())                    {                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();                        res.ResMsg =  stock.ContGrpBarCode + "状态已被锁定,不允许出库";                        return res.ToCamelCaseString();                    }                    if (stock.InvStateCode != InvState.InvEcecState_In.ToString())                    {                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();                        res.ResMsg = item + "组盘状态不是已入库";                        return res.ToCamelCaseString();                    }                    ptWCS_TaskInfo ptwcsTask = new ptWCS_TaskInfo();                    ptwcsTask.Status = TaskStatus.NewBuild;                    ptwcsTask.Type = TaskType.OutDepot;                    ptwcsTask.Priority = 0;                    ptwcsTask.Device = "SRM" + location.Tunnel;                    ptwcsTask.SrmStation = request.EndPoint;                    ptwcsTask.AddrFrom = item;                    ptwcsTask.BarCode = stock.ContGrpBarCode;                    ptwcsTask.StartTime = DateTime.Now;                    ptwcsTask.AddTime = DateTime.Now;                    ptwcsTask.EditTime = DateTime.Now;                    ptwcsTask.AddWho = "wms";                    ptwcsTask.WarehouseCode = location.WarehouseCode;                    ptwcsTask.Enabled = true;                    ptwcsTask.WorkBench = request.EndPoint;                    ptwcsTask.AddrTo = request.EndPoint;                    ptwcsTask.Tunnel = location.Tunnel.ToString();                    ptwcsTask.PalletType = 1;                    ptwcsTask.Length = stock.LengthQty;                    ptwcsTask.MaterialCode = stock.MatCode;                    ptwcsTask.OutType = OutTypeEnum.全自动手动出库任务;                    ptwcsTask.BusType = request.BusType;                    _db.BeginTran();                    var wcs = _ptwcsTaskinfo.InsertReturnEntity(ptwcsTask);                    var wcstaskold = _mapper.Map<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);                    _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);                    _db.CommitTran();                }            }            catch (Exception ex)            {                _db.RollbackTran();                _logger.LogInformation("出库异常:" + ex.Message);                res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();                res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription();                return res.ToCamelCaseString();            }            return res.ToCamelCaseString();        }        public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun)        {            var res = new SRes();            for (int i = 0; i < row; i++)            {                string shlf = tun.ToString();                if (row == 2)                {                    if (i == 0)                    {                        shlf = shlf + "L";                    }                    else                    {                        shlf = shlf + "R";                    }                }                for (int j = 0; j < deot; j++)                {                    for (int k = 0; k < col; k++)                    {                        var code = new ptBaseWareLocation()                        {                            Code = (rowcount + i).ToString() + "-" + (k + 1).ToString() + "-" + (j + 1).ToString() + "-" + shlf + "-" + "01",                            Tunnel = tun,                            IsStop = 0,                            Name = (rowcount + i).ToString() + "行" + (k + 1).ToString() + "列" + (j + 1).ToString() + "层" + shlf + "货架" + 1 + "深度",                            WarehouseId = 1685164446336552960,                            WarehouseCode = "pthouse",                            WareAreaId = 1685164446352102710,                            StateNum = 1,                            TypeNum = 1,                            Size = 1,                            Row = (rowcount + i),                            Col = (k + 1),                            Layer = (j + 1),                            Depth = 1,                            SCRel = "",                            ContGrpId = 0,                            ContGrpBarCode = "",                            AddWho = "wms",                            EditWho = "wms",                            Shelf = shlf,                            Sort = j * col + (k + 1),                        };                        _baseWareLocationrepository.Insert(code);                    }                 }            }            return res;        }        public string PdaGroupStock(PtGroupInTaskRequest request)        {            var res = new SRes();            if (!request.RFIDBarCode.Any())            {                res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();                res.ResMsg = "RFID" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();                return res.ToCamelCaseString();            }            foreach (var item in request.RFIDBarCode)            {                var code = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item);                if (code == null)                {                    var initbarcode = InsertContInfo(item);                    if (initbarcode == false)                    {                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();                        res.ResMsg = "同步" + ResponseStatusCodeEnum.Fail.GetDescription();                        return res.ToCamelCaseString();                    }                }                var bar = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item);                //var mater = _materrepository.GetSingle(p => p.Code == barcode.MatCode);                //if (mater == null)                //{                //    res.ResCode = ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetHashCode();                //    res.ResMsg = item + ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetDescription();                //    return res.ToCamelCaseString();                //}                var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item);                if (stock != null)                {                    res.ResCode = ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetHashCode();                    res.ResMsg = item + ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetDescription();                    return res.ToCamelCaseString();                }                var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(2)).First();                if (task != null)                {                    res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();                    res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();                    return res.ToCamelCaseString();                }                try                {                    ptBillInvnow container = new ptBillInvnow();                    container.ContGrpId = GetId();                    container.ContGrpBarCode = item;                    container.BoxBarCode = item;                    container.InvStateCode = InvState.InvEcecState_BuildUp.ToString();                    container.InvBarCode = item;                    container.ExecStateCode = InvLockState.InvState_Normal.ToString();                    container.InDocsNo = "";                    container.InDocsRowNo = "";                    container.WarehouseId = bar.WarehouseId;                    //container.MatId = mater.Id;                    //container.MatCode = mater.Code;                    container.TolWQty = bar.WidthQty;                    container.NetWQty = bar.LengthQty;                    container.TareWQty = bar.WeightQty;                    container.LengthQty = bar.LengthQty;                    container.RFIDBarCode = item;                    //container.HWTypeCode = mater.SpoolType;                    container.SolderQty = bar.HighQty;                    container.ExecDocsNo = "";                    container.ExecDocsRowNo = "";                    container.ExecDocsTypeCode = "";                    container.HWBarCode = item;                    container.InvInOut = 1;                    container.ExecWho = "人工组盘";                    //container.MatName = mater.Name;                    container.Size = 1;                    _db.BeginTran();                    if (_ptbillInvnow.Insert(container))                    {                        _ptBillInvFlow.Insert(_mapper.Map<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(2)).First();            if (wcstask == null)            {                result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();                result.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();                return result;            }            //先处理库存            var p = InsertStockInfo(reqEntity.Memo1);            if (p.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())            {                result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();                result.ResMsg = "库存更新" + ResponseStatusCodeEnum.Fail.GetDescription();                return result;            }            //获取任务数占用最少的            var wcstasks = _ptwcsTaskinfo.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish &&            p.Tunnel != "0" && p.Tunnel != "" && p.Tunnel != null).ToList();            var tunnelcountlist = new List<TunnelCountTemp>();            var runningtasks = wcstasks;            if (runningtasks.Any())            {                tunnelcountlist = (from task in runningtasks.GroupBy(p => p.Tunnel)                                   select new TunnelCountTemp                                   {                                       Tunnel = task.Key,                                       Count = task.Count()                                   }).ToList();            }            //获取库位所有巷道列表            var alltunnels = _baseWareLocationrepository.GetList().Select(p => p.Tunnel).Distinct();            foreach (var item in alltunnels)            {                if (!tunnelcountlist.Where(p => p.Tunnel == item.ToString()).Any())                {                    tunnelcountlist.Add(new TunnelCountTemp()                    {                        Tunnel = item.ToString(),                        Count = 0                    });                }            }            var tasktunnelcountlist = tunnelcountlist.OrderBy(p => p.Count).ToList();             var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == wcstask.WarehouseCode);            //获取已占用库位最少的货架            var threshold = 5; //int.Parse(ConfigUtil.GetConfiguration["Threshold"]);//阈值            //获取所有有货的货位            var locationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseId == warehouse.Id && p.StateNum == LocationState.LocationState_Full.GetHashCode());            //获取所有可用货位的数量            var shelflocationcount = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode() && p.IsStop == 0).GroupBy(p => new { p.Tunnel, p.Shelf }).Select(p => new { Tunnel = p.Key.Tunnel, Shelf = p.Key.Shelf, LocationCount = p.Select(q => q.Id).Count() });            if (locationsreturn == null || !locationsreturn.Any())            {                result.ResData = string.Join(",", tasktunnelcountlist.OrderBy(p => p.Count).Select(p => p.Tunnel));            }            else            {                var grouplocationtunnels = (from location in locationsreturn.GroupBy(p => p.Tunnel)                                            select new TunnelCountTemp                                            {                                                Tunnel = location.Key.ToString(),                                                Count = location.Count(),                                                Proportion = location.Count() / (shelflocationcount.Where(p => p.Tunnel == location.Key).Any() ? decimal.Parse(shelflocationcount.Where(p => p.Tunnel == location.Key).Sum(p => p.LocationCount).ToString()) : 1)                                            }).ToList().OrderBy(p => p.Count).ToList();                foreach (var item in alltunnels)                {                    if (!grouplocationtunnels.Where(p => p.Tunnel == item.ToString()).Any())                    {                        grouplocationtunnels.Add(new TunnelCountTemp()                        {                            Tunnel = item.ToString(),                            Count = 0,                            Proportion = 0                        });                    }                }                grouplocationtunnels = grouplocationtunnels.OrderBy(p => p.Proportion).ToList();                var sorttunnels = grouplocationtunnels.OrderBy(p => p.Proportion).Select(p => p.Tunnel).ToList();                for (var i = 0; i < grouplocationtunnels.Count - 1; i++)                {                    if (tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i].Tunnel).First().Count - threshold > tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i + 1].Tunnel).First().Count)                    {                        sorttunnels[i] = grouplocationtunnels[i + 1].Tunnel;                        sorttunnels[i + 1] = grouplocationtunnels[i].Tunnel;                        i++;                    }                    else                    {                        sorttunnels[i] = grouplocationtunnels[i].Tunnel;                    }                }                result.ResData = string.Join(",", sorttunnels);            }            //删除没有空闲货位的货架            var arrresultTunnels = result.ResData.Split(',');            //获取可分配货位的数            var emptylocationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.StateNum == LocationState.LocationState_Empty.GetHashCode() && p.IsStop == 0);            var resultTunenls = new List<string>();            foreach (var sorttunnel in arrresultTunnels)            {                var tunneltaskcount = wcstasks.Where(p => p.Tunnel == sorttunnel).Count();                int left = 0;                if (emptylocationsreturn.Where(p => p.Tunnel == int.Parse(sorttunnel)).Count() - tunneltaskcount > left)                {                    resultTunenls.Add(sorttunnel);                }              }            result.ResData = string.Join(",", resultTunenls);            //根据配置过滤禁用的巷道            var disabletunnels = _sysconfigrepository.GetList(p => p.SType == "InStop" && !string.IsNullOrEmpty(p.SContent));            if (disabletunnels != null && disabletunnels.Any())            {                var resultTunenlsNew = new List<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(2)).First(); ;            if (wcstask == null)            {                res.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();                res.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();                return res;            }            if (wcstask.Type == TaskType.OutDepot)            {                res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();                res.ResMsg = "该任务是出库任务,不能分配货位;wms任务号" + wcstask.ID;                return res;            }            if (!string.IsNullOrEmpty(wcstask.AddrTo) && wcstask.AddrTo != "srm")            {                res.ResData.TunnelNum = wcstask.Tunnel;                res.ResData.CellNo = wcstask.AddrTo;                res.ResData.Row = wcstask.AddrTo.Split('-')[0] != null ? int.Parse(wcstask.AddrTo.Split('-')[0]) : 0;                res.ResData.Colomn = wcstask.AddrTo.Split('-')[1] != null ? int.Parse(wcstask.AddrTo.Split('-')[1]) : 0;                res.ResData.Layer = wcstask.AddrTo.Split('-')[2] != null ? int.Parse(wcstask.AddrTo.Split('-')[2]) : 0;                return res;            }            if (reqEntity.TunnelNum <= 0)            {                res.ResCode = ResponseStatusCodeEnum.NotTunnelNum.GetHashCode();                res.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.NotTunnelNum.GetDescription();                return res;            }            var warehouse = _baseWareHouserepository.GetFirst(p => p.Code == wcstask.WarehouseCode);            if (warehouse == null)            {                res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();                res.ResMsg = wcstask.WarehouseCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();                return res;            }            //验证库存            var stock = _ptbillInvnow.GetFirst(p => p.HWBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());            if (stock == null)            {                res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();                res.ResMsg = wcstask.BarCode + ResponseStatusCodeEnum.StockNotExist.GetDescription();                return res;            }            var locell = new PtApplyLocRequest()            {                MaterialId = stock.MatId,                MaterialCode = stock.MatCode,                Size = stock.Size,                TunnelNum = reqEntity.TunnelNum,                WarehuoseId = warehouse.Id,                IsMove = wcstask.Type == TaskType.TransferDepot ? true : false,            };            //预留货位数量            var emptyLoc = _baseWareLocationrepository.AsQueryable().Where(p => p.IsStop == 0            && p.StateNum == LocationState.LocationState_Empty.GetHashCode()            && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode()            && p.Tunnel == locell.TunnelNum            && p.WarehouseId == locell.WarehuoseId            && p.Size == locell.Size            ).OrderBy(p => p.Sort).ToList();            if (!emptyLoc.Any())            {                res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();                res.ResMsg = reqEntity.TunnelNum + ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();                return res;            }            //移库预留货位            if (!locell.IsMove && emptyLoc.Count <= int.Parse(AppSettings.GetConfig("IsMoveCellCount")))            {                res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();                res.ResMsg = reqEntity.TunnelNum + "巷道的可用货位数" + emptyLoc.Count + ",禁止分配货位,预留移库使用";                return res;            }            var loc = emptyLoc.First();            res.ResData.TunnelNum = loc.Tunnel.ToString();            res.ResData.CellNo = loc.Code;            res.ResData.Row = loc.Row;            res.ResData.Colomn = loc.Col;            res.ResData.Layer = loc.Layer;            return res;        }        public SRes<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(2)).First();            if (task == null)            {                result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();                result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();                return result;            }            var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == task.WarehouseCode);            if (warehouse == null)            {                result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();                result.ResMsg = task.WarehouseCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();                return result;            }            if (task.Type == TaskType.EnterDepot)            {                //库存,货位                try                {                    var stock = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());                    if (stock == null)                    {                        result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();                        result.ResMsg = task.BarCode + "没有已组盘的信息";                        return result;                    }                    _db.BeginTran();                    int row = int.Parse(task.AddrTo.Split('-')[0]);                    int col = int.Parse(task.AddrTo.Split('-')[1]);                    int layer = int.Parse(task.AddrTo.Split('-')[2]);                    //更新库存                    _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_In.ToString(), PutRow = row, PutCol = col, PutLayer = layer, OneInTime = DateTime.Now, EditTime = DateTime.Now, ExecStateCode = InvLockState.InvState_Lock.ToString() },                           p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());                    _ptbillInvinit.Delete(p => p.ContGrpBarCode == stock.ContGrpBarCode);                    //更新货位                    _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, EditTime = DateTime.Now },                           p => p.Code.Contains(task.AddrTo));                    var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());                    foreach (var item in stocklist)                    {                        item.Id = IdFactory.NewId();                        item.AddTime = DateTime.Now;                    }                    _ptBillInvFlow.InsertRange(_mapper.Map<List<ptBillInvFlow>>(stocklist));                    var list = new List<ptBillPushinfo>();                    string pushtype = "";                    if (task.BusType == PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription())                    {                        pushtype = PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString();                    }                    else if (task.BusType == PtTaskBusType.TaskBusType_PT_ProductionBackStockIn.GetDescription())                    {                        pushtype = PtFackbeekType.ReturnMat.ToString();                    }                    //回调数据                    foreach (var item in stocklist)                    {                        list.Add(new ptBillPushinfo                        {                            DocsNo = stock.InDocsNo,                            TypeCode = pushtype,                            RFIDBarCode = stock.ContGrpBarCode,                            HWBarCode = stock.RodBarCode,                            CLBarCode = item.CLBarCode,                            WarehouseId = warehouse.Id,                            WarehouseCode = warehouse.Code,                            WareCellId = 0,                            WareCellCode = task.AddrTo,                            MatId = item.MatId,                            MatCode = item.MatCode,                            MatName = item.MatName,                            ReqNo = Guid.NewGuid().ToString()                        });                    }                    _ptbillPushinfo.InsertRange(list);                    _db.CommitTran();                }                catch (Exception ex)                {                    _db.RollbackTran();                    result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();                    result.ResMsg = task.ID + "完成任务异常";                    _logger.LogInformation("完成任务异常" + ex.ToString());                }            }            else if (task.Type == TaskType.OutDepot)            {                //库存删除                var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString());                if (stocklist == null || !stocklist.Any())                {                    result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();                    result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription();                    return result;                }                var flowlist = _mapper.Map<List<ptBillInvFlow>>(stocklist);                foreach (var item in flowlist)                {                    item.Id = IdFactory.NewId();                    item.InvStateCode = InvState.InvEcecState_Out.ToString();                    item.AddTime = DateTime.Now;                    item.Memo = "任务完成";                }                var list = new List<ptBillPushinfo>();                string pushtype = "";                if (task.BusType == PtTaskBusType.TaskBusType_PT_ProductionStockOut.GetDescription())                {                    pushtype = PtFackbeekType.PickMat.ToString();                    //回调数据                    foreach (var item in stocklist)                    {                        list.Add(new ptBillPushinfo                        {                            DocsNo = item.InDocsNo,                            TypeCode = pushtype,                            RFIDBarCode = item.ContGrpBarCode,                            HWBarCode = item.HWBarCode,                            CLBarCode = item.CLBarCode,                            WarehouseId = warehouse.Id,                            WarehouseCode = warehouse.Code,                            WareCellId = 0,                            WareCellCode = task.AddrTo,                            MatId = item.MatId,                            MatCode = item.MatCode,                            MatName = item.MatName,                            ReqNo = Guid.NewGuid().ToString()                        });                    }                }                try                {                    _db.BeginTran();                    _ptbillInvnow.Delete(p => stocklist.Select(p => p.Id).ToList().Contains(p.Id));                    _ptbillInvinit.Delete(p => p.ContGrpBarCode == task.BarCode);                    _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },                        p => p.StateNum == LocationState.LocationState_StockOut.GetHashCode() && p.ContGrpId == flowlist.First().ContGrpId && p.Code.Contains(task.AddrFrom));                    _ptbillPushinfo.InsertRange(list);                    _ptBillInvFlow.InsertRange(flowlist);                    _db.CommitTran();                }                catch (Exception ex)                {                    _db.RollbackTran();                    _logger.LogInformation(ex.ToString());                    result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();                    result.ResMsg = task.ID + "完成任务异常";                }            }            else if (task.Type == TaskType.TransferDepot)            {                var fromcell = _baseWareLocationrepository.GetFirst(p => p.Code == task.AddrFrom);                var grcontid = fromcell.ContGrpId;                var grcontcode = fromcell.ContGrpBarCode;                var fromcellno = fromcell.Code;                var tocellno = task.AddrTo;                try                {                    _db.BeginTran();                    _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.Code.Contains(fromcellno));                    _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = grcontcode, ContGrpId = grcontid, EditTime = DateTime.Now }, p => p.Code.Contains(tocellno));                    int row = int.Parse(tocellno.Split('-')[0]);                    int col = int.Parse(tocellno.Split('-')[1]);                    int layer = int.Parse(tocellno.Split('-')[2]);                    _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = row, PutCol = col, PutLayer = layer }, p => p.ContGrpId == grcontid && p.InvStateCode == InvState.InvEcecState_In.ToString());                    var stock = _ptbillInvnow.GetFirst(p => p.ContGrpId == grcontid && p.ContGrpBarCode == grcontcode && p.InvStateCode == InvState.InvEcecState_In.ToString());                    //流水表                    var flow = _mapper.Map<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(2)).First();            if (wcstask == null)            {                result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();                result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();                return result;            }            if (wcstask.Type != TaskType.OutDepot)            {                result.ResCode = ResponseStatusCodeEnum.OnlyStockOutAvil.GetHashCode();                result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.OnlyStockOutAvil.GetDescription();                return result;            }            if (wcstask.Status >= TaskStatus.Finish)            {                result.ResCode = ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetHashCode();                result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetDescription();                return result;            }            try            {                _db.BeginTran();                //更新库存                _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = 0, PutCol = 0, PutLayer = 0 }, p => p.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && p.ContGrpBarCode == wcstask.BarCode);                var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString());                if (stocklist == null || !stocklist.Any())                {                    result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();                    result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription();                    return result;                }                var flowlist = _mapper.Map<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;        }    }}
 |