using Microsoft.AspNetCore.Mvc; using System; using System.Security.Claims; using Microsoft.Extensions.Options; using Model; using Model.ModelVm; using Newtonsoft.Json; using Utility.Tools; using WMS.IBLL.IBllSoServer; using Wms.Tools; using Model.InterFaceModel; using WMS.IBLL.IBllAsnServer; using WMS.IBLL.IBllCheckServer; using Model.ModelVm.BllCheckVm; using WMS.DAL; using Microsoft.AspNetCore.Authorization; using Utility; using System.Collections.Generic; using System.Reflection.Emit; using System.Linq; using System.Text; using Newtonsoft.Json.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; using WMS.BLL.BllPdaServer; using WMS.IBLL.IPdaServer; using WMS.BLL.BllQualityServer; using WMS.IBLL; namespace Wms.Controllers { /// /// 上游系统交互 /// [Route("api/[controller]/[action]")] [ApiController] public class UpApiController : ControllerBase { #region 依赖注入 private readonly ApiUrlConfig _config; //接口交互路径 private readonly IExportNoticeServer _exNoticeSvc;//出库单Svc private readonly IArrivalNoticeServer _arrivalNoticeSvc; private readonly IStockCheckServer _stockCheckSvc;//盘点单Svc private readonly IProcurePlanServer _procurePlanSvc;//采购单Svs private readonly IPdaAsnServer _pdaAsnServer;// PDA private readonly IHttpServer _http; public UpApiController(IOptions setting, IExportNoticeServer exNoticeSvc, IArrivalNoticeServer arrivalNoticeServer, IStockCheckServer stockCheckSvc, IProcurePlanServer procurePlanSvc, IPdaAsnServer pdaAsnServer, IHttpServer http) { _config = setting.Value; _exNoticeSvc = exNoticeSvc; _arrivalNoticeSvc = arrivalNoticeServer; _stockCheckSvc = stockCheckSvc; _procurePlanSvc = procurePlanSvc; _pdaAsnServer = pdaAsnServer; _http = http; } #endregion #region 调用上游系统接口 /// /// 入库单关闭 /// /// 入库单号 /// [HttpPost] public IActionResult CloseAsn(IdVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _arrivalNoticeSvc.CloseArrivalNotice(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "入库单关单成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 入库单复核并回传 /// /// 入库单号 /// [HttpPost] public IActionResult FinishAsn(IdVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _arrivalNoticeSvc.FinishAsn(model.Id, _config.ErpHost + _config.AsnFinishUrl, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "入库单复核并上传成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// Pda复核单据并回传 /// /// 入库单号 /// [HttpPost] public IActionResult ByPdaFinish(IdVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _arrivalNoticeSvc.ByPdaFinish(model.Code, model.Code.Substring(0, 2) == "AS" ? _config.ErpHost + _config.AsnFinishUrl : _config.ErpHost + _config.SoFinishUrl, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "单据复核并上传成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 完成/关闭出库单据 /// /// /// [HttpPost] public IActionResult CloseExportNotice(IdVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _exNoticeSvc.CloseExportNotice(model.Id, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "出库单关单成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// //出库单复核并上传 /// /// /// [HttpPost] public IActionResult FinishExportNotice(IdVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } _exNoticeSvc.FinishSo(model.Id, _config.ErpHost + _config.SoFinishUrl, int.Parse(userId)); return Ok(new { code = 0, count = 0, msg = "出库单复核并上传成功" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 完成盘库单据 //盘库单调整库存反馈 /// /// /// [HttpPost] public async Task FinishCr(AdjustStockCheckVm model) { try { //获取当前登录的用户ID var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } //bool bolls = false; if (model.Origin == "0") { await _stockCheckSvc.StockAdjust(model.Id); } else { await _stockCheckSvc.StockAdjustAuto(model.Id); } //系统对接后放开 var bl =_stockCheckSvc.FinishCr(model.Id,_config.ErpHost + _config.DataChangeUrl, int.Parse(userId)); //if (bl) //{ return Ok(new { code = 0, count = 0, msg = "盘点单调整上传成功" }); //} //return Ok(new { code = 1, count = 0, msg = "出库单关单成功但上传失败" }); //return Ok(new { code = 1, msg = "盘点单调整失败" }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } // /// /// 箱码信息 手持组托用 (扫箱码向追溯要信息) /// /// BoxNo:箱号 /// [HttpPost] public IActionResult GetFMBindBoxInfos(string BoxNo) { try { if (string.IsNullOrWhiteSpace(BoxNo)) { return Ok(new { code = 1, msg = "未获取到当前请求箱码信息" }); } var models = _pdaAsnServer.GetFMBindBoxInfos(BoxNo, _config.BoxHost + _config.GetBoxUrl); return Ok(new { code = 0, msg = "标签箱码信息", data = models }); } catch (Exception e) { return Ok(new { code = 1, msg = e.Message }); } } /// /// 发送请验单据 /// /// 主键ID /// [HttpPost] public IActionResult SendInspectionRequest(IdVm model) { try { var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(userId)) { return Ok(new { code = 1, msg = "未获取到当前操作人信息" }); } var userName = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier)?.Value; string url = _config.LimesHost + _config.SendInspection; var models = _http.SendInspectionRequest(model, int.Parse(userId), url, userName); return Ok(new HttpReturnModel { Success = "0", Message = "向Limes请验成功!", Data = models }); } catch (Exception e) { return Ok(new HttpReturnModel { Success = "1", Message = e.Message }); } } #endregion #region 被调上游调用接口 /// /// 采购单据下发 /// /// 采购单信息 /// [HttpPost] public IActionResult CreateProcurePlan(ProcurePlanInfo model) { var result = new ErpModel { Success = -1, Message = "" }; try { /*var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { throw new Exception("未获取到用户信息"); } string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(UserId)) { throw new Exception("未获取到用户信息"); }*/ result = _procurePlanSvc.CreateProcurePlan(model); return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } /// /// 入库单据下发 /// /// 入库单信息 /// [Authorize] [HttpPost] public IActionResult CreateAsn(AsnInfo model) { var result = new ErpModel { Success = -1, Message = "" }; try { var claimsIdentity = this.User.Identity as ClaimsIdentity; if (claimsIdentity == null) { throw new Exception("未获取到用户信息"); } string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; if (string.IsNullOrWhiteSpace(UserId)) { throw new Exception("未获取到用户信息"); } result = _arrivalNoticeSvc.CreateAsn(model); return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } /// /// 出库单下发接口 /// /// 出库单信息 /// [HttpPost] public IActionResult CreateSo(SoInfo model) { try { SoResInfo result = _exNoticeSvc.ErpAddExportNotice(model); return Ok(result); } catch (Exception e) { return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 车间叫料 /// /// /// [HttpPost] public IActionResult MESProductionCall(ProductionCallVm model) { try { var bl = _exNoticeSvc.MESProductionCall(model); if (bl) { return Ok(new ErpModel { Success = 0, Message = "成功" }); } else { return Ok(new ErpModel { Success = -1, Message = "失败" }); } } catch (Exception e) { return Ok(new ErpModel { Success = -1, Message = e.Message }); } } /// /// 余料退回入库单据下发 /// /// /// [HttpPost] public IActionResult CreateAsnYuLiao(AsnYuLiaoModel model) { var result = new ErpModel { Success = -1, Message = "" }; try { //var claimsIdentity = this.User.Identity as ClaimsIdentity; //if (claimsIdentity == null) //{ // throw new Exception("未获取到用户信息"); //} //string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; //if (string.IsNullOrWhiteSpace(UserId)) //{ // throw new Exception("未获取到用户信息"); //} result = _arrivalNoticeSvc.CreateAsnYuLiao(model); return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } //箱码信息 手持组托用 (赋码或追溯下发到wms) //质检结果下发接口 //物料信息接口 //客户信息接口 //单位信息接口 //包装信息接口 #endregion #region 测试小数位数值 ///// ///// 测试小数位数值 ///// ///// //[HttpGet] //public IActionResult Demo() //{ // var result = new ErpModel { Success = -1, Message = "" }; // try // { // var com = new Common(); // decimal s = 13.3450M; // var sdf = com.GetViewVal(4,s); // result = new ErpModel { Success = -1, Message = sdf.ToString() }; // return Ok(result); // } // catch (Exception e) // { // result.Message = e.Message; // return Ok(result); // } //} /// /// 测试验签加密 /// /// [ServiceFilter(typeof(ApiResponseActionFilter))] [Verification] [HttpPost] public IActionResult Demo2(IdVm model) { var result = new ErpModel { Success = -1, Message = "" }; try { //var com = new Common(); //decimal s = 13.3450M; //var sdf = com.GetViewVal(4, s); result = new ErpModel { Success = -1, Message = "sdf.ToString()" }; return Ok(result); } catch (Exception e) { result.Message = e.Message; return Ok(result); } } [HttpPost] [ServiceFilter(typeof(ApiResponseActionFilter))] [UnitOfWork] public string Demo3(IdVm model) { string jsonParams = JsonConvert.SerializeObject(model); // 生成时间戳(Unix 时间戳) var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); // 生成签名 var signature = GenerateSignature(jsonParams); // 输出签名 Console.WriteLine("Generated Signature: " + signature); return signature; } private static string GenerateSignature(string jsonParams) { var appKey = "90170307d4184844ac2a26b431f79981"; // 将 JSON 字符串转换为 JObject JObject jObject = JObject.Parse(jsonParams); // 过滤掉数组类型的属性 var filteredProperties = jObject.Properties() .Where(p => p.Value.Type != JTokenType.Array) .ToDictionary(p => p.Name, p => p.Value.ToString()); // 添加时间戳(Unix 时间戳) var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); filteredProperties.Add("timestamp", timestamp); filteredProperties.Add("appKey", appKey); // 构建待签名字符串 var signatureBaseString = string.Join("&", filteredProperties.OrderBy(p => p.Key).Select(p => p.Key + "=" + p.Value)); // 计算 MD5 值 var computedSignature = Md5Tools.CalcMd5(signatureBaseString); return computedSignature; } #endregion } }