123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486 |
- 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
- {
- /// <summary>
- /// 盘条库控制器
- /// </summary>
- [Route("api/[controller]/[action]")]
- [ApiController]
- public class PtController : BaseController
- {
- private readonly IPTService _ptService;
- private readonly ILogger<PtController> _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<PtController> logger, IMapper mapper) : base(ptService)
- {
- _ptService = ptService;
- _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);
- PTSyncMaterInfoResponse resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- if (reqBody.SyncType == 1)
- {
- reqBody.PageIndex = 1;
- while (resbody.ResData.Any())
- {
- _ptService.SyncMaterInfo(resbody.ResData);
- reqBody.PageIndex++;
- resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(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<PTSyncMaterInfoResponse>(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<ptSysConfig>()
- {
- 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<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
- if (resbody.ResData.Any())
- {
- if (_ptService.SyncMaterInfo(resbody.ResData))
- {
- }
- }
- }
- }
- return result.ToCamelCaseString();
- }
- /// <summary>
- /// 采购到货单/采购退货单/到货重挂清单接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PurchaseBillTrans(PurchaseBillTransReqest reqDto)
- {
- return ConcurrencyReqControl<PurchaseBillTransReqest, SRes>(lockerPurchaseBillTrans, "PurchaseBillTrans" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.PurchaseBillTrans);
- }
- /// <summary>
- /// 盘条主数据接收
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PtSyncMaterInfoList(PtSyncMaterInfoListRequest reqDto)
- {
- var res = new SRes();
- return ConcurrencyReqControl<PtSyncMaterInfoListRequest, SRes>(lockerSyncMaterInfoList, "PtSyncMaterInfoList", "物料主数据推送", reqDto, _ptService.GetSyncMaterInfo);
- }
- /// <summary>
- /// 采购到货单入库反馈/采购退货出库反馈/异常出库重挂反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [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<List<PurchaseBillTransFeedBackRequestItem>>(purch);
- var purchs = purch.First();
- purchaseBill.ListInfo = dtolist;
- purchaseBill.BillCode = purchs.DocsNo;
- purchaseBill.BillType = purchs.TypeCode;
- purchaseBill.ReqId = purchs.ReqNo;
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(purchaseBill));
- var ids = purch.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
- {
- 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<ptBillPushinfo>()
- {
- 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<List<PurchaseBillTransFeedBackRequestItem>>(purch);
- var purchs = purch.First();
- purchaseBill.ListInfo = dtolist;
- purchaseBill.BillCode = purchs.DocsNo;
- purchaseBill.BillType = purchs.TypeCode;
- purchaseBill.ReqId = purchs.ReqNo;
- var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(purchaseBill));
- var ids = purch.Select(p => p.Id).ToList();
- if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
- {
- _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
- {
- 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<ptBillPushinfo>()
- {
- Columns = it => new ptBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
- WhereExpression = it => ids.Contains(it.Id)
- });
- }
- }
- }
- return res;
- }
- /// <summary>
- /// 放行单传输接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto)
- {
- return ConcurrencyReqControl<ErpUnlockStockRequest, ErpUnlockStockResponse>(lockerErpUnlockStock, "ErpUnlockStock" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ErpUnlockStock);
- }
- /// <summary>
- /// 生产领料单传输接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ProductionStockOut(ProductionStockOutRequest reqDto)
- {
- return ConcurrencyReqControl<ProductionStockOutRequest, SRes>(lockerProductionStockOut, "ProductionStockOut" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ProductionStockOut);
- }
- /// <summary>
- /// 自动叫料
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes WcsProductionOutRequest(WcsProductionOutRequest request)
- {
- return ConcurrencyReqControl<WcsProductionOutRequest, SRes>(lockerPtWcsProductionOutTask, "WcsProductionOutRequest" + request.Endquip, request.Endquip, request, _ptService.WcsProductionOutRequest);
- }
- /// <summary>
- /// 生产领料/退料/改判反馈接口
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ProductionFeedBack(ProductionFeedBackRequest reqDto)
- {
- return ConcurrencyReqControl<ProductionFeedBackRequest, SRes>(lockerProductionFeedBack, "ProductionFeedBack" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.ProductionFeedBack);
- }
- /// <summary>
- /// 库存改判
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes StockChange(PtStockChangeRequest reqDto)
- {
- return ConcurrencyReqControl<PtStockChangeRequest, SRes>(lockerStockChange, "ProductionFeedBack" + reqDto.BillCode, reqDto.BillCode, reqDto, _ptService.StockChange);
- }
- /// <summary>
- /// 生产退料单接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes ProductionBack(ProductionBackRequest reqDto)
- {
- return ConcurrencyReqControl<ProductionBackRequest, SRes>(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);
- }
- /// <summary>
- /// 实时库存查询接口
- /// </summary>
- /// <param name="reqDto"></param>
- /// <returns></returns>
- [HttpPost]
- public PTGetCurStockListResponse GetPtCurStockList(PtGetCurStockListRequest reqDto)
- {
- return _ptService.GetCurStockList(reqDto);
- }
-
- #region 盘条PDA功能
- /// <summary>
- /// 盘条解绑
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<int> Unbounding(PtUnboundRequest request)
- {
- return _ptService.Unbounding(request);
- }
- /// <summary>
- /// pda单据查询
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetDocumentsAll(PtDocumentsRequest request)
- {
- return _ptService.GetPageDocumentsList(request).ToCamelCaseString();
- }
- /// <summary>
- /// pda单据明细查询(传单号)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetDocumentDetails(PtDocumentsRequest request)
- {
- return _ptService.GetDocumentDetailListByDocsNo(request).ToCamelCaseString();
- }
- /// <summary>
- /// pda指定出库确定
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string PdaManualTask(PtManualTaskRequest request)
- {
- request.BusType = TaskBusType.TaskBusType_HJ_PdaManualOut.GetDescription();
- return _ptService.ManualTask(request);
- }
- /// <summary>
- /// pda质检领料出库确定
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string PdaQualityTask(PtManualTaskRequest request)
- {
- request.BusType = TaskBusType.TaskBusType_HJ_QualityOut.GetDescription();
- return _ptService.ManualTask(request);
- }
- /// <summary>
- /// pda重挂出库确定
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string PdaInactionStockTask(PtManualTaskRequest request)
- {
- request.BusType = TaskBusType.TaskBusType_HJ_AnewOut.GetDescription();
- return _ptService.ManualTask(request);
- }
- /// <summary>
- /// 获取设备报警信息
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetEquipErrorInfo(PtErrorInfoRequest request)
- {
- return "";
- }
- /// <summary>
- /// 获取物料报警信息
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetMaterErrorInfo(PtErrorInfoRequest request)
- {
- return "";
- }
- /// <summary>
- /// 获取业务报警信息
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string GetBusinessErrorInfo(PtErrorInfoRequest request)
- {
- return "";
- }
- /// <summary>
- /// 组盘
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string PdaGroupStock(PtGroupInTaskRequest request)
- {
- return _ptService.PdaGroupStock(request);
- }
- /// <summary>
- /// 生成入库任务
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public string PdaInsterInTask(PtGroupInTaskRequest request)
- {
- return _ptService.PdaInsterInTask(request);
- }
- #endregion
- /// <summary>
- /// PDA 采购入库
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes PdaPurchaseTask(PtUnboundRequest request)
- {
- lock (lockerPtPurchTaskIn)
- {
- return _ptService.PtPurchaseTask(request);
- }
- }
- #region WCS调用
- /// <summary>
- /// 获取巷道
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<string> GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
- {
- lock (lockerGetPtTunnelList)
- {
- return _ptService.GetPtTunnelPriorityList(reqEntity);
- }
- }
- /// <summary>
- /// 分配货位
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<PtApplyStockInLocResponse> ApplyStockInLoc(PtApplyStockInLocRequest reqEntity)
- {
- return ConcurrencyReqControl<PtApplyStockInLocRequest, SRes<PtApplyStockInLocResponse>>(lockerPtApplyStockInLoc, "PtApplyStockInLoc" + reqEntity.TunnelNum, "分配货位" + reqEntity.PickUpEquipmentNo, reqEntity, _ptService.PtApplyStockInLoc);
- }
- /// <summary>
- /// 完成任务
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<int> CompleteTask(CompleteTaskRequest reqDto)
- {
- lock (lockerPtCompleteTask)
- {
- return _ptService.PtCompleteTask(reqDto);
- }
- }
- /// <summary>
- /// 堆垛机出库放货完成
- /// </summary>
- /// <param name="reqEntity"></param>
- /// <returns></returns>
- [HttpPost]
- public SRes<int> SrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto)
- {
- lock (lockerPtSrmPickOutCompleted)
- {
- return _ptService.PtSrmPickOutCompleted(reqDto);
- }
- }
- #endregion
- }
- }
|