123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590 |
- using AutoMapper;
- using Microsoft.AspNetCore.Mvc;
- using Newtonsoft.Json;
- using SqlSugar;
- using System.Text.RegularExpressions;
- using wms.api.Job;
- using wms.dto;
- using wms.dto.request;
- using wms.dto.request.cp;
- using wms.dto.request.cp.dto;
- using wms.dto.request.hj;
- using wms.dto.request.hj.dto;
- using wms.dto.request.pt.dto;
- using wms.dto.request.share;
- using wms.dto.response;
- using wms.dto.response.cp;
- using wms.service.IService;
- using wms.sqlsugar;
- using wms.sqlsugar.model.cp;
- using wms.util.Ext;
- using wms.util.Http;
- namespace wms.api.Controllers
- {
- [Route("api/[controller]/[action]")]
- [ApiController]
- public class CpController : BaseController
- {
- private readonly ICPService _cpService;
- private readonly ILogger<CpController> _logger;
- private readonly IMapper _mapper;
- private static object lockerSalesDocTrans = new object();
- private static object lockerSalesBackDocTrans = new object();
- private static object lockerComPushApiResInfo = new object();
- private static object lockerStockChange = new object();
- private static object lockerMesReleaseFlag = new object();
- private static object lockerStockStateChange = new object();
- private static object lockerPdaCpGroupStock = new object(); //pda空托or 物料 or 间隔板组盘
- private static object lockerPdaTrayTaskOut = new object(); //pda空托 or 间隔板出库
- private static object lockerWCS_InTaskInfo = new object(); //入库任务
- private static object lockerGetCpTunnelList = new object(); //巷道锁
- private static object lockerCpCompleteTask = new object();
- private static object lockerCpApplyStockInLoc = new object();
- private static object lockerCpManualTaskOut = new object();
- private static object lockerCpSrmPickOutCompleted = new object();
- private static object lockerMoveTask = new object();
- private static object lockerSalesDocOutTask = new object();
- private static object lockerCpSyncMaterInfoList = new object();
- private static object lockerCpCancelOrComplet = new object();
- private static object lockerCpCarryTask = new object();
- private static object lockerUpdatePuchState = new object();
- private static object lockerForceCancelTask = new object();
- private static object lockerDeleteStockInfo = new object();
- private static object lockerUpdateStockState = new object();
- private static object lockerUpdateCellState = new object();
- private static object lockerDataSwapCell = new object();
- private static object lockerDataBasePatch = new object();
- private static object lockerDataMoveCell = new object();
- private static object lockerErpCancelStock = new object();
- private static object lockerPdaStockInBack = new object();
- private static object lockerPreLockedStock = new object();
- private static object lockerMoveTaskInfo = new object();
- private static object lockerTrayPortageTask = new object();
- private static object lockerTrayPortageTaskCheck = new object();
- private static object lockerPalletAutoInTask = new object();
- private static object lockWcsUploadInfo = new object();
- private static object lockLabellingMachine = new object();
- private static object lockerHandErrTask = new object();
- private static object lockerPalletManualMoveTask = new object();
- private static object lockerFlowDataMoveJob = new object();
- private static object lockerProductBoxDetailUploadJob = new object();
- private Repository<cpSysJob> _sysJobrepository => new Repository<cpSysJob>();
- public CpController(ICPService cpService, ILogger<CpController> logger, IMapper mapper) : base(cpService)
- {
- _cpService = cpService;
- _logger = logger;
- _mapper = mapper;
- }
- /// <summary>
- /// 同步物料基础信息
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public string SyncMaterInfo(SyncMaterInfoRequest reqBody)
- {
- var result = new SRes();
- //_logger.LogInformation("请求参数:{@reqBody},{aa}", reqBody,1);
- CPSyncMaterInfoResponse resbody = JsonConvert.DeserializeObject<CPSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- if (reqBody.SyncType == 1)
- {
- reqBody.PageIndex = 1;
- while (resbody.ResData.Any())
- {
- _cpService.SyncMaterInfo(resbody.ResData);
- reqBody.PageIndex++;
- resbody = JsonConvert.DeserializeObject<CPSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- }
- }
- else if (reqBody.SyncType == 2)
- {
- //拿到增量
- var increconf = _cpService.GetSysConfigByCode(Const.MESMaterialInitIncrement);
- if (increconf != null)
- {
- reqBody.StartTime = DateTime.Parse(increconf.SContent);
- //reqBody.Count = int.Parse(increconf.Remark);
- resbody = JsonConvert.DeserializeObject<CPSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- if (resbody.ResData.Any())
- {
- if (_cpService.SyncMaterInfo(resbody.ResData))
- {
- var lastdata = resbody.ResData.OrderBy(p => p.UpdatedTime).Last();
- _cpService.UpdateSysConfigModelColumns(new sqlsugar.model.UpdateModelColumns<cpSysConfig>()
- {
- Columns = it => new cpSysConfig { SContent = lastdata.UpdatedTime.ToString("yyyy-MM-dd HH:mm:ss.fff") },
- WhereExpression = it => it.Code == Const.MESMaterialInitIncrement
- });
- }
- }
- else
- {
- result.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode();
- result.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription();
- }
- }
- else
- {
- result.ResCode = ResponseStatusCodeEnum.AccountError.GetHashCode();
- result.ResMsg = "没有配置信息" + Const.MESMaterialInitIncrement;
- }
- }
- else
- {
- if (!string.IsNullOrEmpty(reqBody.MatCode))
- {
- resbody = JsonConvert.DeserializeObject<CPSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- if (resbody.ResData.Any())
- {
- if (_cpService.SyncMaterInfo(resbody.ResData))
- {
- }
- }
- }
- }
- return result.ToCamelCaseString();
- }
- /// <summary>
- /// 成品库主数据接收
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes CpSyncMaterInfoList(CpSyncMaterInfoListRequest request)
- {
- return ConcurrencyReqControl<CpSyncMaterInfoListRequest, SRes>(lockerCpSyncMaterInfoList, "CpSyncMaterInfoList", request.MatCode, request, _cpService.SyncMaterInfoList);
- }
- /// <summary>
- /// 销售单信息传输接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesDocTrans(SalesDocTransRequest reqDto)
- {
- return ConcurrencyReqControl<SalesDocTransRequest, SRes>(lockerSalesDocTrans, "SalesDocTrans", reqDto.BillCode, reqDto, _cpService.SalesDocTrans);
- //if (res.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- //{
- // return ComPushApiResInfo(new ComPushApiResInfoRequest() { ApiId = "SalesDocTrans", ReqId = Guid.NewGuid().ToString(), ResCode = ResponseStatusCodeEnum.Sucess.GetDescription() });
- //}
- //else
- //{
- // return ComPushApiResInfo(new ComPushApiResInfoRequest() { ApiId = "SalesDocTrans", ReqId = Guid.NewGuid().ToString(), ResCode = ResponseStatusCodeEnum.Fail.GetDescription() });
- //}
- }
- /// <summary>
- /// 销售单下发出库任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesDocOutTask(SalesDocOutTaskRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- return ConcurrencyReqControl<SalesDocOutTaskRequest, SRes>(lockerSalesDocOutTask, "SalesDocOutTask", request.SalesDoc, request, _cpService.SalesDocOutTask);
- }
- }
- /// <summary>
- ///单据预锁库存(手动按钮触发)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PreLockedStock(PreLockedStockRequest request)
- {
- return ConcurrencyReqControl<PreLockedStockRequest, SRes>(lockerPreLockedStock, "PreLockedStock", request.BillCode, request, _cpService.PreLockedStock);
- }
- /// <summary>
- /// 销售出库信息反馈接口/呆滞料/异常料出库反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesDocTransFeedBack(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var SalesDoclists = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.SalesDoc.ToString()).OrderBy(p => p.AddTime).Take(10);
- var ErrorMateriallists = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.ErrorMaterial.ToString()).OrderBy(p => p.AddTime).Take(10);
- if (SalesDoclists.Any())
- {
- var doc = SalesDoclists.First();
- var SalesDoclist = SalesDoclists.Where(p => p.DocsNo == doc.DocsNo).ToList();
- List<string> boxlist = new List<string>();
- foreach (var item in SalesDoclist)
- {
- boxlist.Add(item.HWBarCode);
- }
- var salesDocTrans = new SalesDocTransFeedBackRequest()
- {
- BillCode = doc.DocsNo,
- BoxList = boxlist,
- Type = CpFackbeekType.SalesDoc.ToString()
- };
- WmsServiceExportMq(salesDocTrans);
- var ids = SalesDoclist.Select(p => p.Id).ToList();
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- if (ErrorMateriallists.Any())
- {
- var doc = ErrorMateriallists.First();
- var ErrorMateriallist = ErrorMateriallists.Where(p => p.DocsNo == doc.DocsNo).ToList();
- List<string> boxlist = new List<string>();
- foreach (var item in ErrorMateriallist)
- {
- boxlist.Add(item.HWBarCode);
- }
- var errorMaterialTrans = new SalesDocTransFeedBackRequest()
- {
- BillCode = doc.DocsNo,
- BoxList = boxlist,
- Type = CpFackbeekType.ErrorMaterial.ToString()
- };
- WmsServiceExportMq(errorMaterialTrans);
- var ids = ErrorMateriallist.Select(p => p.Id).ToList();
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- return res;
- }
- /// <summary>
- /// 退售单信息传输接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesBackDocTrans(SalesDocTransRequest reqDto)
- {
- return ConcurrencyReqControl<SalesDocTransRequest, SRes>(lockerSalesBackDocTrans, "SalesBackDocTrans", reqDto.BillCode, reqDto, _cpService.SalesBackDocTrans);
- }
- /// <summary>
- /// 销售退货入库信息反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesBackDocTransFeedBack(string doccode)
- {
- var list = _cpService.GetBillFeedbackList(p => p.DocsNo == doccode);
- var dtolist = _mapper.Map<List<SalesDocTransFeedBackRequest>>(list);
- //var dto = new SalesDocTransFeedBackRequest() { ListInfo = dtolist };
- SRes resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dtolist));
- return resbody;
- }
- /// <summary>
- /// 销售余料回库入库信息反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes SalesLeftDocTransFeedBack(string doccode)
- {
- var list = _cpService.GetBillFeedbackList(p => p.DocsNo == doccode);
- var dtolist = _mapper.Map<List<SalesLeftDocTransFeedBackRequest>>(list);
- //var dto = new SalesDocTransFeedBackRequest() { ListInfo = dtolist };
- SRes resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dtolist));
- return resbody;
- }
- /// <summary>
- /// 接收回馈接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ComPushApiResInfo(ComPushApiResInfoRequest reqDto)
- {
- lock (lockerComPushApiResInfo)
- {
- return JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(reqDto));
- }
- }
- /// <summary>
- /// 呆滞料/异常料出库接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ErrorMaterialStockOut(ErrorMaterialStockOutRequest reqDto)
- {
- return ConcurrencyReqControl<ErrorMaterialStockOutRequest, SRes>(lockerComPushApiResInfo, "CpErrorMaterialStockOut", reqDto.BillCode, reqDto, _cpService.ErrorMaterialStockOut);
- }
- /// <summary>
- /// 库存改判
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes StockChange(CpStockChangeRequest reqDto)
- {
- return ConcurrencyReqControl<CpStockChangeRequest, SRes>(lockerStockChange, "CpStockChange", reqDto.BillCode, reqDto, _cpService.StockChange);
- }
- /// <summary>
- /// MES放行标志
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes MesReleaseFlag(MesReleaseFlagDto reqDto)
- {
- lock (lockerMesReleaseFlag) { return _cpService.MesReleaseFlag(reqDto); }
- }
- /// <summary>
- /// 改判反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes StockChangeFeedBack(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var list = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.StateTrans.ToString()).OrderBy(p => p.AddTime).Take(5);
- if (!list.Any())
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription();
- return res;
- }
- var doc = list.First();
- list = list.Where(p => p.DocsNo == doc.DocsNo);
- var dtolist = _mapper.Map<List<StockChangeFeedBackRequestItem>>(list);
- var StockChangeFeed = new dto.request.cp.StockChangeFeedBackRequest()
- {
- ListInfo = dtolist,
- BillCode = doc.DocsNo,
- ReqId = Guid.NewGuid().ToString()
- };
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(StockChangeFeed));
- var ids = list.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- else
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- else
- {
- var list = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.StateTrans.ToString()).OrderBy(p => p.AddTime).Take(5);
- if (!list.Any())
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription();
- return res;
- }
- var doc = list.First();
- list = list.Where(p => p.DocsNo == doc.DocsNo);
- var dtolist = _mapper.Map<List<StockChangeFeedBackRequestItem>>(list);
- var StockChangeFeed = new dto.request.cp.StockChangeFeedBackRequest()
- {
- ListInfo = dtolist,
- BillCode = doc.DocsNo,
- ReqId = Guid.NewGuid().ToString()
- };
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(StockChangeFeed));
- var ids = list.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- else
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "手动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- return res;
- }
- /// <summary>
- /// 实时库存查询接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public CPGetCurStockListResponse GetCpCurStockList(CpGetCurStockListRequest reqDto)
- {
- return _cpService.GetCurStockList(reqDto);
- }
- /// <summary>
- /// 移库货位上报MES接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes MoveStockLocationFeedBack(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var list = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.MoveCell.ToString()).OrderBy(p => p.AddTime).Take(2);
- if (!list.Any())
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription();
- return res;
- }
- var dtolist = _mapper.Map<List<MoveStockLocationFeedBackRequest>>(list);
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dtolist));
- var ids = list.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- else
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- else
- {
- var list = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.MoveCell.ToString()).OrderBy(p => p.AddTime).Take(2);
- if (!list.Any())
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription();
- return res;
- }
- var dtolist = _mapper.Map<List<MoveStockLocationFeedBackRequest>>(list);
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dtolist));
- var ids = list.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- else
- {
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- return res;
- }
- /// <summary>
- /// 放行/冻结单传输接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public StockStateChangeResponse StockStateChange(StockStateChangeRequest reqDto)
- {
- return ConcurrencyReqControl<StockStateChangeRequest, StockStateChangeResponse>(lockerStockStateChange, "CpStockStateChange", reqDto.BillCode, reqDto, _cpService.StockStateChange);
- }
- /// <summary>
- /// 同步箱号信息(人工入库使用)
- /// </summary>
- /// <param name="reqBody"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes BoxBuildStockTrans(BoxBuildStockTransRequest reqBody)
- {
- var res = new SRes();
- BoxBuildStockTransResponse resbody = JsonConvert.DeserializeObject<BoxBuildStockTransResponse>(WmsServiceExportApi(reqBody));
- if (resbody.Items.Any() && resbody.Items.First().lst_Children.Any())
- {
- var code = _mapper.Map<List<cpBoxItems>>(resbody.Items.First().lst_Children);
- code.ForEach(p =>
- {
- p.HuTotalWt = resbody.Items.FirstOrDefault().HuTotalWt;
- p.HuNetWt = resbody.Items.FirstOrDefault().HuNetWt;
- p.HuTareWt = resbody.Items.FirstOrDefault().HuTareWt;
- });
- _cpService.InsertBoxItems(code);
- }
- else
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = reqBody.HuNr + "MES返回明细" + ResponseStatusCodeEnum.Fail.GetDescription();
- }
- return res;
- }
- /// <summary>
- /// 成品入库反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ProductStockInBack(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var list = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.ProductStockIn.ToString()).OrderBy(p => p.AddTime).Take(1);
- if (!list.Any())
- {
- res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
- res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription();
- return res;
- }
- var product = new ProductStockInBackRequest()
- {
- HuNr = list.First().HWBarCode,
- StoreCode = list.First().WarehouseCode,
- StoreName = "成品库",
- LocatCode = list.First().WareCellCode
- };
- WmsServiceExportMq(product);
- var ids = list.Select(p => p.Id).ToList();
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- return res;
- }
- /// <summary>
- /// ERP取消出库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ErpCancelStock(ErpCancelStockRequest request)
- {
- lock (lockerErpCancelStock)
- {
- return _cpService.ErpCancelStock(request);
- }
- }
- #region 手持机操作功能
- /// <summary>
- /// PDA 组盘绑定(只组盘)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PdaCpGroupStock(SouthPdaRequest request)
- {
- lock (lockerPdaCpGroupStock)
- {
- request.ContGrpBarCode = Regex.Replace(request.ContGrpBarCode.Trim(), @"[\r\n]", "");
- if (!string.IsNullOrEmpty(request.BoxCode))
- {
- request.BoxCode = Regex.Replace(request.BoxCode.Trim(), @"[\r\n]", "");
- var boxCode = _cpService.GetBoxCodedetails(request.BoxCode);
- if (!boxCode.Any())
- {
- var tt = BoxBuildStockTrans(new BoxBuildStockTransRequest() { HuNr = request.BoxCode });
- if (tt.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- return new SRes() { ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(), ResMsg = tt.ResMsg };
- }
- }
- else
- {
- _cpService.DeleteoldBoxcodeinfo(request.BoxCode);
- _logger.LogInformation("删除旧数据,获取最新数据" + request.BoxCode + "|" + request.ContGrpBarCode);
- var tt = BoxBuildStockTrans(new BoxBuildStockTransRequest() { HuNr = request.BoxCode });
- if (tt.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- return new SRes() { ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(), ResMsg = tt.ResMsg };
- }
- }
- }
- return _cpService.PdaGroupStock(request);
- }
- }
- /// <summary>
- /// 空托盘 or 间隔板出库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PdaTrayTaskOut(TrayGroupOutRequest request)
- {
- lock (lockerPdaTrayTaskOut)
- {
- return _cpService.PdaTrayTaskOut(request);
- }
- }
- /// <summary>
- /// PDA 退料
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PdaStockInBack(SouthPdaRequest request)
- {
- lock (lockerPdaStockInBack)
- {
- return _cpService.PdaStockInBack(request);
- }
- }
- #endregion 手持机操作功能
- #region WCS调用
- /// <summary>
- /// 获取入库任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes WCS_InTaskInfo(TrayGroupOutRequest request)
- {
- return ConcurrencyReqControl<TrayGroupOutRequest, SRes>(lockerWCS_InTaskInfo, "WCS_InTaskInfo" + request.Equip, request.Code, request, _cpService.InsertWCSInTask);
- }
- /// <summary>
- /// WCS信息上传(称重)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes WcsUploadInfo(WcsUploadInfoRequest request)
- {
- lock (lockWcsUploadInfo)
- {
- return _cpService.WcsUploadInfo(request);
- }
- }
- /// <summary>
- /// 贴标机信息传输
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<LabellingMachineResponse> LabellingMachine(LabellingMachineRequest request)
- {
- lock (lockLabellingMachine)
- {
- return _cpService.LabellingMachine(request);
- }
- }
- /// <summary>
- /// 获取巷道
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<string> GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
- {
- lock (lockerGetCpTunnelList)
- {
- return _cpService.GetCpTunnelPriorityList(reqEntity);
- }
- }
- /// <summary>
- /// 分配货位
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<CpApplyStockInLocResponse> ApplyStockInLoc(CpApplyStockInLocRequest request)
- {
- return ConcurrencyReqControl<CpApplyStockInLocRequest, SRes<CpApplyStockInLocResponse>>(lockerCpApplyStockInLoc, "CpApplyStockInLoc", "分配货位" + request.TunnelNum, request, _cpService.CpApplyStockInLoc);
- }
- /// <summary>
- /// 完成任务
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<int> CompleteTask(CompleteTaskRequest reqDto)
- {
- lock (lockerCpCompleteTask)
- {
- var res = _cpService.CpCompleteTask(reqDto);
- //进程死锁失败的情况再重复调用一次
- if (res.ResCode == ResponseStatusCodeEnum.InnerServerErr.GetHashCode())
- {
- res = _cpService.CpCompleteTask(reqDto);
- }
- return res;
- }
- }
- /// <summary>
- /// 堆垛机出库放货完成
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<int> SrmPickOutCompleted(CpSrmPickOutCompletedRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- return _cpService.CpSrmPickOutCompleted(request);
- }
- }
- /// <summary>
- /// 移库任务申请
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<WcsMoveTaskResponse> WcsMoveTask(WcsMoveTaskRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- return _cpService.WcsMoveTask(request);
- }
- }
- /// <summary>
- /// 修改任务状态
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes UpdateTaskState(UpdateTaskStateRequest request)
- {
- lock (lockerMoveTaskInfo)
- {
- return _cpService.UpdateTaskState(request);
- }
- }
- /// <summary>
- /// 手动移库确定
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes MoveTaskInfo(MoveTaskRequest request)
- {
- lock (lockerMoveTaskInfo)
- {
- return _cpService.MoveTaskInfo(request);
- }
- }
- /// <summary>
- /// 成品库 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes CancelTaskVerify(CancelTaskRequest request)
- {
- lock (lockerCpCancelOrComplet)
- {
- return _cpService.CpCancelTaskVerify(request);
- }
- }
- /// <summary>
- /// 成品库 执行任务(开放wcs调用,前端不调用)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes CarryTaskInfo(CancelTaskRequest request)
- {
- lock (lockerCpCarryTask)
- {
- return _cpService.CpCarryTaskInfo(request);
- }
- }
- #endregion WCS调用
- /// <summary>
- /// 手动出库确定
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ManualTask(CpManualTaskRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- request.BusType = TaskBusType.TaskBusType_HJ_ManualOut.GetDescription();
- return _cpService.ManualTask(request);
- }
- }
- /// <summary>
- /// 异常箱出库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ErrorManualTask(CpManualTaskRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- request.BusType = TaskBusType.TaskBusType_HJ_ManualOut.GetDescription();
- return _cpService.ErrorManualTask(request);
- }
- }
- /// <summary>
- /// 手动出库确定(MES调用)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes MesManualTask(CpMesManualTaskRequest request)
- {
- lock (lockerCpCompleteTask)
- {
- return _cpService.MesManualTask(request);
- }
- }
- /// <summary>
- /// 成品货位初始化
- /// </summary>
- /// <param name="row"></param>
- /// <param name="col"></param>
- /// <param name="deot"></param>
- /// <param name="rowcount"></param>
- /// <param name="tun"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes CpWareCellInit(int row, int col, int deot, int rowcount, int tun)
- {
- return _cpService.CpWareCellInit(row, col, deot, rowcount, tun);
- }
- #region 异常处理
- /// <summary>
- /// 强制取消任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ForceCancelTask(ErrorTaskRequest request)
- {
- lock (lockerForceCancelTask)
- {
- return _cpService.ForceCancelTask(request);
- }
- }
- /// <summary>
- /// 删除库存信息
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes DeleteStockInfo(DetailCodeStrRequest request)
- {
- lock (lockerDeleteStockInfo)
- {
- return _cpService.DeleteStockInfo(request);
- }
- }
- /// <summary>
- /// 修改库存状态
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes UpdateStockState(DetailCodeStr1Requestdto request)
- {
- lock (lockerUpdateStockState)
- {
- return _cpService.UpdateStockState(request);
- }
- }
- /// <summary>
- /// 修改货位状态
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes UpdateCellState(DetailCodeStr1Requestdto request)
- {
- lock (lockerUpdateCellState)
- {
- return _cpService.UpdateCellState(request);
- }
- }
- /// <summary>
- /// 货位数据互换
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes DataSwapCell(DataSwapCellStrRequest request)
- {
- lock (lockerDataSwapCell)
- {
- return _cpService.DataSwapCell(request);
- }
- }
- /// <summary>
- /// 补数据
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes DataBasePatch(DataBasePatchRequest request)
- {
- lock (lockerDataBasePatch)
- {
- return _cpService.DataBasePatch(request);
- }
- }
- [HttpPost]
- public SRes UpdatePurchState(UpdatePurchStateRequestdto request)
- {
- lock (lockerUpdatePuchState)
- {
- return _cpService.UpdatePurchState(request);
- }
- }
- /// <summary>
- /// 货位数据转移
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes DataMoveCell(DataSwapCellStrRequest request)
- {
- lock (lockerDataMoveCell)
- {
- return _cpService.DataMoveCell(request);
- }
- }
- /// <summary>
- /// 修改任务目标地址
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes UpdateTaskAddrTo(UpdateTaskAddrToReq request)
- {
- lock (lockerUpdatePuchState)
- {
- return _cpService.UpdateTaskAddrTo(request);
- }
- }
- #endregion 异常处理
- #region 定时器
- /// <summary>
- /// 启用job
- /// </summary>
- /// <param name="req"></param>
- /// <returns></returns>
- [HttpPost]
- public string StartJob(AutoDetailRequest req)
- {
- var res = new SRes();
- var sysjob = _cpService.GetJobEntityByid(req.Id);
- if (sysjob == null)
- {
- res.ResCode = 0;
- res.ResMsg = "没有找到对应的定时任务";
- return res.ToCamelCaseString();
- }
- JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
- return res.ToCamelCaseString();
- }
- /// <summary>
- /// 执行job
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public string ExecuteJob(DetailCodeStrRequest reqEntity)
- {
- var res = new SRes();
- if (string.IsNullOrEmpty(reqEntity.Code))
- {
- res.ResCode = 0;
- res.ResMsg = "参数错误";
- return res.ToCamelCaseString();
- }
- var jobEntity = _cpService.GetJobEntityByCode(reqEntity.Code);
- if (jobEntity == null)
- {
- res.ResCode = 0;
- res.ResMsg = "没有找到该编码";
- return res.ToCamelCaseString();
- }
- var jobapilist = _cpService.GetJobapilist(jobEntity.Id);
- if (jobapilist.Any())
- {
- foreach (var item in jobapilist)
- {
- Task.Run(() => { HttpUtil.PostRequest(item.ApiUrl, item.RequestBody); });
- }
- }
- return res.ToCamelCaseString();
- }
- /// <summary>
- /// 分页Job列表
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public List<dto.response.hj.SysJobDto> GetSysJobList(wms.dto.request.hj.GetSysJobListRequest reqEntity)
- {
- var list = _sysJobrepository.GetList();
- var listdto = _mapper.Map<List<dto.response.hj.SysJobDto>>(list);
- if (listdto != null && listdto.Any())
- {
- for (int i = 0; i < list.Count; i++)
- {
- listdto[i].JobExecuteStatus = GetExecuteStatus(new DetailCodeRequest() { Code = listdto[i].Code });
- }
- return listdto;
- }
- return new List<dto.response.hj.SysJobDto>();
- }
- /// <summary>
- /// 获取执行状态
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetExecuteStatus(DetailCodeRequest reqEntity)
- {
- var jobInfo = _sysJobrepository.GetFirst(p => p.Code == reqEntity.Code);
- var jobs = JobScheduler.GetJobList(Const.JobGroupName).Result;
- if (jobs != null)
- {
- var temp = jobs.Where(p => p.JobName == jobInfo.Code);
- if (temp.Any())
- {
- return temp.First().JobStatus;
- }
- else
- {
- return "Stop";
- }
- }
- else
- {
- return "Stop";
- }
- }
- #endregion 定时器
- #region 时效调用接口
- /// <summary>
- /// 托盘搬运任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes TrayPortageTask(TrayGroupOutRequest request)
- {
- lock (lockerPalletAutoInTask)
- {
- return _cpService.TrayPortageTask(request);
- }
- //return ConcurrencyReqControl<TrayGroupOutRequest, SRes>(lockerTrayPortageTask, "TrayPortageTask", request.Equip, request, _cpService.TrayPortageTask);
- }
- /// <summary>
- /// 托盘搬运验证
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes TrayPortageTaskCheck(TrayGroupOutRequest request)
- {
- lock (lockerTrayPortageTaskCheck)
- {
- return _cpService.TrayPortageTaskCheck(request);
- }
- //return ConcurrencyReqControl<TrayGroupOutRequest, SRes>(lockerTrayPortageTaskCheck, "TrayPortageTaskCheck", request.Equip, request, _cpService.TrayPortageTaskCheck);
- }
- /// <summary>
- /// 成品自动入库(码垛完成入库)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PalletAutoInTask(PalletAutoTaskRequest request)
- {
- lock (lockerPalletAutoInTask)
- {
- return _cpService.PalletAutoInTask(request);
- }
- //return ConcurrencyReqControl<PalletAutoTaskRequest, SRes>(lockerPalletAutoInTask, "PalletAutoInTask", request.Equip, request, _cpService.PalletAutoInTask);
- }
- #endregion 时效调用接口
- /// <summary>
- /// 成品整箱上传接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ProductBoxDetailUpload(SalesDocAutoPushRequest request)
- {
- lock (lockerProductBoxDetailUploadJob)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var list = _cpService.GetBoxItemsList(p => p.UpLoadFlag == 0 || p.UpLoadFlag == 2).Where(p => p.IsNeedUpLoadFlag == 1);
- if (!list.Any())
- {
- return new SRes() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
- }
- foreach (var itemhunr in list.GroupBy(p => p.HuNr))
- {
- if (itemhunr.Key.Length > 12)//特殊装箱不上传mes
- {
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now, Memo = "特殊装箱不上传mes" },
- WhereExpression = it => it.HuNr == itemhunr.Key
- });
- continue;
- }
- ProductBoxDetailUploadRequestNew itemreq = new ProductBoxDetailUploadRequestNew()
- {
- LayerList = new List<LayerListItem>()
- {
- }
- };
- int ovcflag = 0;
- foreach (var item in list.Where(p => p.HuNr == itemhunr.Key).GroupBy(p => new { p.Layer }))
- {
- itemreq.HuNr = item.First().HuNr;
- itemreq.SKU = item.First().Sku;
- itemreq.SkuDesc = item.First().Sku;
- itemreq.Batch = item.First().Batch;
- itemreq.Winding = item.First().Winding;
- itemreq.TimeStamp = item.First().TimeStamp;
- itemreq.MachineCode = item.First().EquNo;
- itemreq.OvcValue = list.Where(p => p.HuNr == item.First().HuNr).Average(p => decimal.Parse(string.IsNullOrEmpty(p.OvcValue) ? "0" : p.OvcValue)).ToString();
- if (item.First().OvcFlag == 2)
- {
- if (ovcflag == 0)
- {
- var response = HttpUtil.PostRequest("http://10.30.44.3:8011/api/sx/GetTorsRange", JsonConvert.SerializeObject(new DetailCodeRequest() { Code = itemhunr.Key }));
- var trayres = JsonConvert.DeserializeObject<SRes<GetTorsRangeRes>>(response);
- if (decimal.Parse(itemreq.OvcValue) >= trayres.ResData.TorsValue - trayres.ResData.TorsRangeValue && decimal.Parse(itemreq.OvcValue) <= trayres.ResData.TorsValue + trayres.ResData.TorsRangeValue)
- {
- ovcflag = 2;
- }
- else
- {
- ovcflag = 1;
- }
- itemreq.OvcFlag = ovcflag.ToString();
- }
- }
- else
- {
- itemreq.OvcFlag = item.First().OvcFlag.ToString();
- }
- var laydetail = new LayerListItem()
- {
- LayerCode = item.Key.Layer.ToString().PadLeft(2, '0'),
- layerName = "第" + item.Key.Layer + "层",
- OvcFlag = item.First().OvcFlag.ToString(),
- OvcValue = item.Average(p => decimal.Parse(string.IsNullOrEmpty(p.OvcValue) ? "0" : p.OvcValue)).ToString(),
- SpoolList = new List<SpoolListItem>()
- };
- laydetail.SpoolList = list.Where(p => p.HuNr == item.First().HuNr && p.Layer == item.Key.Layer).Select(p => new SpoolListItem()
- {
- MatNo = p.CLBarCode,
- SpoolNr = p.HWBarCode
- }).ToList();
- itemreq.LayerList.Add(laydetail);
- }
- _logger.LogInformation("推送箱号记录:" + itemreq.HuNr);
- var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(itemreq));
- if (resbody.ResCode == 200)
- {
- _logger.LogInformation("推送箱号:" + itemreq.HuNr + "反馈:" + JsonConvert.SerializeObject(resbody));
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now },
- WhereExpression = it => it.HuNr == itemhunr.Key
- });
- }
- else
- {
- _logger.LogInformation("推送整箱数据反回" + JsonConvert.SerializeObject(resbody));
- _cpService.UpdateErrorBoxinfo(itemhunr.Key, resbody.ResMsg);
- if (resbody.ResMsg.Length > 400)
- {
- resbody.ResMsg = resbody.ResMsg.Substring(0, 400);
- }
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now, Memo = resbody.ResMsg },
- WhereExpression = it => it.HuNr == itemhunr.Key
- });
- }
- }
- }
- return res;
- }
- }
- /// <summary>
- /// 异常数据重复上传接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ErrorRepeatProductBoxDetailUpload(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- var list = _cpService.GetBoxItemsHistoryList(p => p.HuNr == request.Type);
- if (!list.Any())
- {
- return new SRes() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
- }
- foreach (var itemhunr in list.GroupBy(p => p.HuNr))
- {
- ProductBoxDetailUploadRequestNew itemreq = new ProductBoxDetailUploadRequestNew()
- {
- LayerList = new List<LayerListItem>()
- {
- }
- };
- int ovcflag = 0;
- foreach (var item in list.Where(p => p.HuNr == itemhunr.Key).GroupBy(p => new { p.Layer }))
- {
- itemreq.HuNr = item.First().HuNr;
- itemreq.SKU = item.First().Sku;
- itemreq.SkuDesc = item.First().Sku;
- itemreq.Batch = item.First().Batch;
- itemreq.Winding = item.First().Winding;
- itemreq.TimeStamp = item.First().TimeStamp;
- itemreq.MachineCode = item.First().EquNo;
- itemreq.OvcValue = list.Where(p => p.HuNr == item.First().HuNr).Average(p => decimal.Parse(string.IsNullOrEmpty(p.OvcValue) ? "0" : p.OvcValue)).ToString();
- if (item.First().OvcFlag == 2)
- {
- if (ovcflag == 0)
- {
- var response = HttpUtil.PostRequest("http://10.30.44.3:8011/api/sx/GetTorsRange", JsonConvert.SerializeObject(new DetailCodeRequest() { Code = itemhunr.Key }));
- var trayres = JsonConvert.DeserializeObject<SRes<GetTorsRangeRes>>(response);
- if (decimal.Parse(itemreq.OvcValue) >= trayres.ResData.TorsValue - trayres.ResData.TorsRangeValue && decimal.Parse(itemreq.OvcValue) <= trayres.ResData.TorsValue + trayres.ResData.TorsRangeValue)
- {
- ovcflag = 2;
- }
- else
- {
- ovcflag = 1;
- }
- itemreq.OvcFlag = ovcflag.ToString();
- }
- }
- else
- {
- itemreq.OvcFlag = item.First().OvcFlag.ToString();
- }
- var laydetail = new LayerListItem()
- {
- LayerCode = item.Key.Layer.ToString().PadLeft(2, '0'),
- layerName = "第" + item.Key.Layer + "层",
- OvcFlag = item.First().OvcFlag.ToString(),
- OvcValue = item.Average(p => decimal.Parse(string.IsNullOrEmpty(p.OvcValue) ? "0" : p.OvcValue)).ToString(),
- SpoolList = new List<SpoolListItem>()
- };
- laydetail.SpoolList = list.Where(p => p.HuNr == item.First().HuNr && p.Layer == item.Key.Layer).Select(p => new SpoolListItem()
- {
- MatNo = p.CLBarCode,
- SpoolNr = p.HWBarCode
- }).ToList();
- itemreq.LayerList.Add(laydetail);
- }
- _logger.LogInformation("推送箱号记录:" + itemreq.HuNr);
- var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(itemreq));
- if (resbody.ResCode == 200)
- {
- _logger.LogInformation("推送箱号:" + itemreq.HuNr + "反馈:" + resbody.ResMsg);
- }
- else
- {
- _logger.LogInformation("推送箱号:" + itemreq.HuNr + "反馈:" + resbody.ResMsg);
- }
- }
- return res;
- }
- /// <summary>
- /// 成品临时箱整箱上传接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes TempProductBoxDetailUpload(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var list = _cpService.GetBoxItemsList(p => p.UpLoadFlag == 0 || p.UpLoadFlag == 2).Where(p => p.IsNeedUpLoadFlag == 2);
- if (!list.Any())
- {
- return new SRes() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
- }
- foreach (var item in list.GroupBy(p => p.HuNr))
- {
- if (item.Key.StartsWith("Test"))//特殊装箱不上传mes
- {
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now, Memo = "特殊装箱不上传mes" },
- WhereExpression = it => it.HuNr == item.Key
- });
- continue;
- }
- ProductBoxDetailUploadRequest itemreq = new ProductBoxDetailUploadRequest()
- {
- TempHuNr = item.Key,
- Lst_SpoolNr = item.Select(p => p.HWBarCode).ToList()
- };
- var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(itemreq));
- if (resbody.success == true)
- {
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now },
- WhereExpression = it => it.HuNr == item.Key
- });
- }
- else
- {
- if (item.Key.StartsWith("HAZDA"))
- {
- //如果是临时箱子则标记成异常,不再上传
- _cpService.UpdateBoxFail(item.Key);
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 1, EditTime = DateTime.Now, Memo = "临时箱推送MES失败,自动设置成异常箱" },
- WhereExpression = it => it.HuNr == item.Key
- });
- }
- else
- {
- _cpService.UpdateBoxItemsModelColumns(new sqlsugar.model.UpdateModelColumns<cpBoxItems>()
- {
- Columns = it => new cpBoxItems { UpLoadFlag = 2, EditTime = DateTime.Now },
- WhereExpression = it => it.HuNr == item.Key
- });
- }
- }
- }
- }
- return res;
- }
- /// <summary>
- /// 监控遗留的库存数据
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes MonitorLeftStock(WebErrorRequest request)
- {
- return _cpService.MonitorLeftStock(request);
- }
- /// <summary>
- /// 手动出库数据反馈(分发)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ManaelOutBack(SalesDocAutoPushRequest request)
- {
- var res = new SRes();
- if (request.Type == "1")
- {
- var ManaelOut = _cpService.GetBillFeedbackList(p => p.PostResult != 1 && p.PostQty <= 5 && p.TypeCode == CpFackbeekType.ManualOut.ToString()).OrderBy(p => p.AddTime).FirstOrDefault();
- if (ManaelOut == null)
- {
- res.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode();
- res.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription();
- return res;
- }
- var ManaelOutTrans = new ManaelOutBackRequest()
- {
- HuNr = ManaelOut.HWBarCode,
- Type = CpFackbeekType.ManualOut.ToString(),
- OutTime = ManaelOut.AddTime.ToString("yyyyMMddHHmmss")
- };
- WmsServiceExportPubMq(ManaelOutTrans);
- _cpService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<cpBillPushinfo>()
- {
- Columns = it => new cpBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ManaelOut.Id == it.Id
- });
- }
- return res;
- }
- /// <summary>
- /// 验证箱号和托盘是否匹配
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes VerifyBoxNum(VerifyBoxNumRequest request)
- {
- return _cpService.VerifyBoxNum(request);
- }
- /// <summary>
- /// 成品库盘点报表生成
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes GenInventoryReport(DetailCodeRequest request)
- {
- //0 30 8 ? * * 每天上午8:30触发
- var res = new SRes();
- DateTime lastDay = Convert.ToDateTime(DateTime.Now.AddMonths(1).ToString("yyyy-MM-01")).AddDays(-1);
- if (lastDay.Day != DateTime.Now.Day)
- {
- res.ResMsg = "当前不是本月最后一天";
- return res;
- }
- _cpService.GenInventoryReport();
- return res;
- }
- /// <summary>
- /// 成品人工口上成品码垛托盘PDA提交接口(MES调用)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PalletManualMoveTask(PalletManualMoveTaskRequest request)
- {
- lock (lockerPalletManualMoveTask)
- {
- return _cpService.PalletManualMoveTask(request);
- }
- }
- /// <summary>
- /// 流水数据归档
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes FlowDataMoveJob(SalesDocAutoPushRequest request)
- {
- lock (lockerFlowDataMoveJob)
- {
- return _cpService.FlowDataMoveJob(request);
- }
- }
- /// <summary>
- /// 触发自动校秤任务
- /// </summary>
- /// <returns></returns>
- [HttpPost]
- public SRes TriggerAutoCalibration()
- {
- return _cpService.TriggerAutoCalibration();
- }
- }
- }
|