using AutoMapper; using MathNet.Numerics.Distributions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Reflection.Emit; using wms.dto; using wms.dto.request; using wms.dto.request.pt; using wms.dto.request.pt.dto; using wms.dto.request.share; using wms.dto.response; using wms.dto.response.pt; using wms.service.IService; using wms.sqlsugar; using wms.sqlsugar.model.pt; using wms.util.Ext; namespace wms.api.Controllers { /// /// 盘条库控制器 /// [Route("api/[controller]/[action]")] [ApiController] public class PtController : BaseController { private readonly IPTService _ptService; private readonly ILogger _logger; private readonly IMapper _mapper; static object lockerPurchaseBillTrans = new object(); static object lockerErpUnlockStock = new object(); static object lockerProductionStockOut = new object(); static object lockerProductionFeedBack = new object(); static object lockerStockChange = new object(); static object lockerProductionBack = new object(); static object lockerPtPurchTaskIn = new object(); static object lockerPtApplyStockInLoc = new object(); static object lockerPtCompleteTask = new object(); static object lockerPtSrmPickOutCompleted = new object(); static object lockerSyncMaterInfoList = new object(); static object lockerPtWcsProductionOutTask = new object(); static object lockerGetPtTunnelList = new object(); public PtController(IPTService ptService, ILogger logger, IMapper mapper) : base(ptService) { _ptService = ptService; _logger = logger; _mapper = mapper; } /// /// 同步物料基础信息 /// /// /// [HttpPost] public string SyncMaterInfo(SyncMaterInfoRequest reqBody) { var result = new SRes(); //_logger.LogInformation("请求参数:{@reqBody},{aa}", reqBody,1); PTSyncMaterInfoResponse resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody)); if (reqBody.SyncType == 1) { reqBody.PageIndex = 1; while (resbody.ResData.Any()) { _ptService.SyncMaterInfo(resbody.ResData); reqBody.PageIndex++; resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody)); } } else if (reqBody.SyncType == 2) { //拿到增量 var increconf = _ptService.GetSysConfigByCode(Const.MESMaterialInitIncrement); if (increconf != null) { reqBody.StartTime = DateTime.Parse(increconf.SContent); //reqBody.Count = int.Parse(increconf.Remark); resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(reqBody)); if (resbody.ResData.Any()) { if (_ptService.SyncMaterInfo(resbody.ResData)) { var lastdata = resbody.ResData.OrderBy(p => p.UpdatedTime).Last(); _ptService.UpdateSysConfigModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new ptSysConfig { 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(WmsServiceExportApi(reqBody)); if (resbody.ResData.Any()) { if (_ptService.SyncMaterInfo(resbody.ResData)) { } } } } return result.ToCamelCaseString(); } /// /// 采购到货单/采购退货单/到货重挂清单接口 /// /// /// [HttpPost] public SRes PurchaseBillTrans(PurchaseBillTransReqest reqDto) { return ConcurrencyReqControl(lockerPurchaseBillTrans, "PurchaseBillTrans" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.PurchaseBillTrans); } /// /// 盘条主数据接收 /// /// /// [HttpPost] public SRes PtSyncMaterInfoList(PtSyncMaterInfoListRequest reqDto) { var res = new SRes(); return ConcurrencyReqControl(lockerSyncMaterInfoList, "PtSyncMaterInfoList", "物料主数据推送", reqDto, _ptService.GetSyncMaterInfo); } /// /// 采购到货单入库反馈/采购退货出库反馈/异常出库重挂反馈接口 /// /// /// [HttpPost] public SRes PurchaseBillTransFeedBack(PtAutoPurchData request) { var res = new SRes(); //自动推送 if (request.Type == "1") { var list = _ptService.GetBillFeedbackList(); if (!list.Any()) { res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(); res.ResMsg = "没有取到数据" + ResponseStatusCodeEnum.Fail.GetDescription(); } //采购入库单 if (list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString()).ToList().Any()) { var purch = list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString()).ToList(); PurchaseBillTransFeedBackRequest purchaseBill = new PurchaseBillTransFeedBackRequest(); var dtolist = _mapper.Map>(purch); var purchs = purch.First(); purchaseBill.ListInfo = dtolist; purchaseBill.BillCode = purchs.DocsNo; purchaseBill.BillType = purchs.TypeCode; purchaseBill.ReqId = purchs.ReqNo; var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(purchaseBill)); var ids = purch.Select(p => p.Id).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now }, WhereExpression = it => ids.Contains(it.Id) }); } else { _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new ptBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now }, WhereExpression = it => ids.Contains(it.Id) }); } } //重挂 else if (list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_AnewStockIn.ToString()).ToList().Any()) { var purch = list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_AnewStockIn.ToString()).ToList(); PurchaseBillTransFeedBackRequest purchaseBill = new PurchaseBillTransFeedBackRequest(); var dtolist = _mapper.Map>(purch); var purchs = purch.First(); purchaseBill.ListInfo = dtolist; purchaseBill.BillCode = purchs.DocsNo; purchaseBill.BillType = purchs.TypeCode; purchaseBill.ReqId = purchs.ReqNo; var resbody = JsonConvert.DeserializeObject(WmsServiceExportApi(purchaseBill)); var ids = purch.Select(p => p.Id).ToList(); if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode()) { _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now }, WhereExpression = it => ids.Contains(it.Id) }); } else { _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns() { Columns = it => new ptBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now }, WhereExpression = it => ids.Contains(it.Id) }); } } } return res; } /// /// 放行单传输接口 /// /// /// [HttpPost] public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto) { return ConcurrencyReqControl(lockerErpUnlockStock, "ErpUnlockStock" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ErpUnlockStock); } /// /// 生产领料单传输接口 /// /// /// [HttpPost] public SRes ProductionStockOut(ProductionStockOutRequest reqDto) { return ConcurrencyReqControl(lockerProductionStockOut, "ProductionStockOut" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ProductionStockOut); } /// /// 自动叫料 /// /// /// [HttpPost] public SRes WcsProductionOutRequest(WcsProductionOutRequest request) { return ConcurrencyReqControl(lockerPtWcsProductionOutTask, "WcsProductionOutRequest" + request.Endquip, request.Endquip, request, _ptService.WcsProductionOutRequest); } /// /// 生产领料/退料/改判反馈接口 /// /// /// [HttpPost] public SRes ProductionFeedBack(ProductionFeedBackRequest reqDto) { return ConcurrencyReqControl(lockerProductionFeedBack, "ProductionFeedBack" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ProductionFeedBack); } /// /// 库存改判 /// /// /// [HttpPost] public SRes StockChange(PtStockChangeRequest reqDto) { return ConcurrencyReqControl(lockerStockChange, "ProductionFeedBack" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.StockChange); } /// /// 生产退料单接口 /// /// /// [HttpPost] public SRes ProductionBack(ProductionBackRequest reqDto) { return ConcurrencyReqControl(lockerProductionBack, "ProductionBack" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ProductionBack); } [HttpPost] public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun) { return _ptService.WareCellInit(row, col, deot, rowcount, tun); } /// /// 实时库存查询接口 /// /// /// [HttpPost] public PTGetCurStockListResponse GetPtCurStockList(PtGetCurStockListRequest reqDto) { return _ptService.GetCurStockList(reqDto); } #region 盘条PDA功能 /// /// 盘条解绑 /// /// /// [HttpPost] public SRes Unbounding(PtUnboundRequest request) { return _ptService.Unbounding(request); } /// /// pda单据查询 /// /// /// [HttpPost] public string GetDocumentsAll(PtDocumentsRequest request) { return _ptService.GetPageDocumentsList(request).ToCamelCaseString(); } /// /// pda单据明细查询(传单号) /// /// /// [HttpPost] public string GetDocumentDetails(PtDocumentsRequest request) { return _ptService.GetDocumentDetailListByDocsNo(request).ToCamelCaseString(); } /// /// pda指定出库确定 /// /// /// [HttpPost] public string PdaManualTask(PtManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_PdaManualOut.GetDescription(); return _ptService.ManualTask(request); } /// /// pda质检领料出库确定 /// /// /// [HttpPost] public string PdaQualityTask(PtManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_QualityOut.GetDescription(); return _ptService.ManualTask(request); } /// /// pda重挂出库确定 /// /// /// [HttpPost] public string PdaInactionStockTask(PtManualTaskRequest request) { request.BusType = TaskBusType.TaskBusType_HJ_AnewOut.GetDescription(); return _ptService.ManualTask(request); } /// /// 获取设备报警信息 /// /// /// [HttpPost] public string GetEquipErrorInfo(PtErrorInfoRequest request) { return ""; } /// /// 获取物料报警信息 /// /// /// [HttpPost] public string GetMaterErrorInfo(PtErrorInfoRequest request) { return ""; } /// /// 获取业务报警信息 /// /// /// [HttpPost] public string GetBusinessErrorInfo(PtErrorInfoRequest request) { return ""; } /// /// 组盘 /// /// /// [HttpPost] public string PdaGroupStock(PtGroupInTaskRequest request) { return _ptService.PdaGroupStock(request); } /// /// 生成入库任务 /// /// /// [HttpPost] public string PdaInsterInTask(PtGroupInTaskRequest request) { return _ptService.PdaInsterInTask(request); } #endregion /// /// PDA 采购入库 /// /// /// [HttpPost] public SRes PdaPurchaseTask(PtUnboundRequest request) { lock (lockerPtPurchTaskIn) { return _ptService.PtPurchaseTask(request); } } #region WCS调用 /// /// 获取巷道 /// /// /// [HttpPost] public SRes GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity) { lock (lockerGetPtTunnelList) { return _ptService.GetPtTunnelPriorityList(reqEntity); } } /// /// 分配货位 /// /// /// [HttpPost] public SRes ApplyStockInLoc(PtApplyStockInLocRequest reqEntity) { return ConcurrencyReqControl>(lockerPtApplyStockInLoc, "PtApplyStockInLoc" + reqEntity.TunnelNum, "分配货位" + reqEntity.PickUpEquipmentNo, reqEntity, _ptService.PtApplyStockInLoc); } /// /// 完成任务 /// /// /// [HttpPost] public SRes CompleteTask(CompleteTaskRequest reqDto) { lock (lockerPtCompleteTask) { return _ptService.PtCompleteTask(reqDto); } } /// /// 堆垛机出库放货完成 /// /// /// [HttpPost] public SRes SrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto) { lock (lockerPtSrmPickOutCompleted) { return _ptService.PtSrmPickOutCompleted(reqDto); } } #endregion } }