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
|
{
|
/// <summary>
|
/// 上游系统交互
|
/// </summary>
|
[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<ApiUrlConfig> 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 调用上游系统接口
|
/// <summary>
|
/// 入库单关闭
|
/// </summary>
|
/// <param name="model">入库单号</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
/// <summary>
|
/// 入库单复核并回传
|
/// </summary>
|
/// <param name="model">入库单号</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// Pda复核单据并回传
|
/// </summary>
|
/// <param name="model">入库单号</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 完成/关闭出库单据
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
/// <summary>
|
/// //出库单复核并上传
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 完成盘库单据 //盘库单调整库存反馈
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<IActionResult> 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 });
|
}
|
}
|
|
//
|
/// <summary>
|
/// 箱码信息 手持组托用 (扫箱码向追溯要信息)
|
/// </summary>
|
/// <param name="model">BoxNo:箱号</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
|
/// <summary>
|
/// 发送请验单据
|
/// </summary>
|
/// <param name="model">主键ID</param>
|
/// <returns></returns>
|
[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 被调上游调用接口
|
|
/// <summary>
|
/// 采购单据下发
|
/// </summary>
|
/// <param name="model">采购单信息</param>
|
/// <returns></returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 入库单据下发
|
/// </summary>
|
/// <param name="model">入库单信息</param>
|
/// <returns></returns>
|
[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);
|
}
|
}
|
|
/// <summary>
|
/// 出库单下发接口
|
/// </summary>
|
/// <param name="model">出库单信息</param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 车间叫料
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 });
|
}
|
}
|
|
/// <summary>
|
/// 余料退回入库单据下发
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
[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 测试小数位数值
|
|
///// <summary>
|
///// 测试小数位数值
|
///// </summary>
|
///// <returns></returns>
|
//[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);
|
// }
|
//}
|
|
/// <summary>
|
/// 测试验签加密
|
/// </summary>
|
/// <returns></returns>
|
[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
|
}
|
}
|