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