服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2025-03-08 a259e40ee315f068bd9b96f857f1f80ea137e89d
雅达-新增生产领料单和退料单接口

在 `WMS_U9C.cs` 中新增 `CreateProdMaterialReq`、`CreateProdReturnOrder`、`CreateOutProdMaterialReq` 和 `CreateOutProdReturnOrder` 接口,返回类型改为 `ApiAction<List<U9CReturnData>>`。同时,修改了原有接口的返回类型以统一格式。

在 `IWMS_U9C.cs` 中添加了对应的接口声明。新增多个输入类以封装请求参数,提升接口调用的便利性。

在相关实现文件中,完成了新接口的业务逻辑和异常处理,并增加了日志记录。这些更改旨在增强系统功能,支持更多业务场景,提高代码可维护性和可读性。
已修改3个文件
已添加4个文件
448 ■■■■■ 文件已修改
Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdReturnOrder.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/ERP/WMS_U9C.CreateProdReturnOrder.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/ERP/WMS_U9C.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.WMS/iERP/IWMS_U9C.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdMaterialReq.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.IBusiness;
using Microsoft.AspNetCore.Http;
using Tiger.Model.Minsun;
using Org.BouncyCastle.Asn1.Tsp;
using Tiger.Model.Entitys.MES.Position;
using Apache.NMS.ActiveMQ.Commands;
using System.Security.Cryptography;
using System.Diagnostics;
using Tiger.Model.Entitys.MES.U9C;
using Newtonsoft.Json.Linq;
using System.Security.Policy;
using NetTaste;
namespace Tiger.Business.WMS
{
    public partial class WMS_U9C
    {
        /// <summary>
        /// åˆ›å»ºå§”外生产领料单接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<List<U9CReturnData>>> CreateOutProdMaterialReq(CreateOutProdMaterialReqInput input) {
            Logger.Interface.Info($"/**\r\n *进入创建委外生产领料单接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<List<U9CReturnData>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
                    if (u9CLoginResult.Success)
                    {
                        input.token = u9CLoginResult.Data;
                        Logger.Interface.Info($"U9C登录token: {input.token}");
                    }
                }
                var response = await HttpHelper.PostAsync(CreateOutProdMaterialReqUrl, JsonConvert.SerializeObject(input.CreateOutProdMaterialReqParam), new Dictionary<string, string>() { { "token", input.token } });
                var result = JsonConvert.DeserializeObject<U9CResult>(response.Message);
                if (result != null)
                {
                    if (result.Success && result.Data[0].m_isSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"创建委外生产领料单接口提交Json: {JsonConvert.SerializeObject(input.CreateOutProdMaterialReqParam)},返回Json: {response.Message}");
                    }
                    else
                    {
                        action.IsSuccessed = false;
                        action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}");
                        Logger.Interface.Info($"创建委外生产领料单接口失败:{result.Data[0].m_errorMsg}");
                    }
                }
            }
            catch (System.Exception ex)
            {
                action.CatchExceptionWithLog(ex, "创建委外生产领料单异常");
            }
            Logger.Interface.Info($"/* åˆ›å»ºå§”外生产领料单接口结束 */\r\n"); //固定写法
            return action;
        }
    }
}
Tiger.Business.WMS/ERP/WMS_U9C.CreateOutProdReturnOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.IBusiness;
using Microsoft.AspNetCore.Http;
using Tiger.Model.Minsun;
using Org.BouncyCastle.Asn1.Tsp;
using Tiger.Model.Entitys.MES.Position;
using Apache.NMS.ActiveMQ.Commands;
using System.Security.Cryptography;
using System.Diagnostics;
using Tiger.Model.Entitys.MES.U9C;
using Newtonsoft.Json.Linq;
using System.Security.Policy;
using NetTaste;
namespace Tiger.Business.WMS
{
    public partial class WMS_U9C
    {
        /// <summary>
        /// åˆ›å»ºå§”外生产退料单接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<List<U9CReturnData>>> CreateOutProdReturnOrder(CreateOutProdReturnOrderInput input) {
            Logger.Interface.Info($"/**\r\n *进入创建委外生产退料单接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<List<U9CReturnData>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
                    if (u9CLoginResult.Success)
                    {
                        input.token = u9CLoginResult.Data;
                        Logger.Interface.Info($"U9C登录token: {input.token}");
                    }
                }
                var response = await HttpHelper.PostAsync(CreateOutProdReturnOrderUrl, JsonConvert.SerializeObject(input.CreateOutProdReturnOrderParam), new Dictionary<string, string>() { { "token", input.token } });
                var result = JsonConvert.DeserializeObject<U9CResult>(response.Message);
                if (result != null)
                {
                    if (result.Success && result.Data[0].m_isSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"创建委外生产退料单接口提交Json: {JsonConvert.SerializeObject(input.CreateOutProdReturnOrderParam)},返回Json: {response.Message}");
                    }
                    else
                    {
                        action.IsSuccessed = false;
                        action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}");
                        Logger.Interface.Info($"创建委外生产退料单接口失败:{result.Data[0].m_errorMsg}");
                    }
                }
            }
            catch (System.Exception ex)
            {
                action.CatchExceptionWithLog(ex, "创建委外生产退料单异常");
            }
            Logger.Interface.Info($"/* åˆ›å»ºå§”外生产退料单接口结束 */\r\n"); //固定写法
            return action;
        }
    }
}
Tiger.Business.WMS/ERP/WMS_U9C.CreateProdMaterialReq.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.IBusiness;
using Microsoft.AspNetCore.Http;
using Tiger.Model.Minsun;
using Org.BouncyCastle.Asn1.Tsp;
using Tiger.Model.Entitys.MES.Position;
using Apache.NMS.ActiveMQ.Commands;
using System.Security.Cryptography;
using System.Diagnostics;
using Tiger.Model.Entitys.MES.U9C;
using Newtonsoft.Json.Linq;
using System.Security.Policy;
using NetTaste;
namespace Tiger.Business.WMS
{
    public partial class WMS_U9C
    {
        /// <summary>
        /// åˆ›å»ºç”Ÿäº§é¢†æ–™å•接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<List<U9CReturnData>>> CreateProdMaterialReq(CreateProdMaterialReqInput input) {
            Logger.Interface.Info($"/**\r\n *进入创建生产领料单接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<List<U9CReturnData>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
                    if (u9CLoginResult.Success)
                    {
                        input.token = u9CLoginResult.Data;
                        Logger.Interface.Info($"U9C登录token: {input.token}");
                    }
                }
                var response = await HttpHelper.PostAsync(CreateProdMaterialReqUrl, JsonConvert.SerializeObject(input.CreateProdMaterialReqParam), new Dictionary<string, string>() { { "token", input.token } });
                var result = JsonConvert.DeserializeObject<U9CResult>(response.Message);
                if (result != null)
                {
                    if (result.Success && result.Data[0].m_isSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"创建生产领料单接口提交Json: {JsonConvert.SerializeObject(input.CreateProdMaterialReqParam)},返回Json: {response.Message}");
                    }
                    else
                    {
                        action.IsSuccessed = false;
                        action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}");
                        Logger.Interface.Info($"创建生产领料单接口失败:{result.Data[0].m_errorMsg}");
                    }
                }
            }
            catch (System.Exception ex)
            {
                action.CatchExceptionWithLog(ex, "创建生产领料单异常");
            }
            Logger.Interface.Info($"/* åˆ›å»ºç”Ÿäº§é¢†æ–™å•接口结束 */\r\n"); //固定写法
            return action;
        }
    }
}
Tiger.Business.WMS/ERP/WMS_U9C.CreateProdReturnOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Tiger.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Rhea.Common;
using System.Net;
using System.Linq;
using Newtonsoft.Json;
using Tiger.IBusiness;
using Microsoft.AspNetCore.Http;
using Tiger.Model.Minsun;
using Org.BouncyCastle.Asn1.Tsp;
using Tiger.Model.Entitys.MES.Position;
using Apache.NMS.ActiveMQ.Commands;
using System.Security.Cryptography;
using System.Diagnostics;
using Tiger.Model.Entitys.MES.U9C;
using Newtonsoft.Json.Linq;
using System.Security.Policy;
using NetTaste;
namespace Tiger.Business.WMS
{
    public partial class WMS_U9C
    {
        /// <summary>
        /// åˆ›å»ºç”Ÿäº§é€€æ–™å•-按行退料接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<List<U9CReturnData>>> CreateProdReturnOrder(CreateProdReturnOrderInput input) {
            Logger.Interface.Info($"/**\r\n *进入创建生产退料单-按行退料接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<List<U9CReturnData>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
                    if (u9CLoginResult.Success)
                    {
                        input.token = u9CLoginResult.Data;
                        Logger.Interface.Info($"U9C登录token: {input.token}");
                    }
                }
                var response = await HttpHelper.PostAsync(CreateProdReturnOrderUrl, JsonConvert.SerializeObject(input.CreateProdReturnOrderParam), new Dictionary<string, string>() { { "token", input.token } });
                var result = JsonConvert.DeserializeObject<U9CResult>(response.Message);
                if (result != null)
                {
                    if (result.Success && result.Data[0].m_isSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"创建生产退料单-按行退料接口提交Json: {JsonConvert.SerializeObject(input.CreateProdReturnOrderParam)},返回Json: {response.Message}");
                    }
                    else
                    {
                        action.IsSuccessed = false;
                        action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}");
                        Logger.Interface.Info($"创建生产退料单-按行退料接口失败:{result.Data[0].m_errorMsg}");
                    }
                }
            }
            catch (System.Exception ex)
            {
                action.CatchExceptionWithLog(ex, "创建生产退料单-按行退料异常");
            }
            Logger.Interface.Info($"/* åˆ›å»ºç”Ÿäº§é€€æ–™å•-按行退料接口结束 */\r\n"); //固定写法
            return action;
        }
    }
}
Tiger.Business.WMS/ERP/WMS_U9C.cs
@@ -37,19 +37,27 @@
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["SubmitLineUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["SubmitLineUrl", "U9CUrl"].PARAM_VALUE;  //http://172.16.80.20/u9c/webapi/Receivement/SubmitLine; æµ‹è¯•
        public static string ApproveLineUrl
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["ApproveLineUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["ApproveLineUrl", "U9CUrl"].PARAM_VALUE;  //http://172.16.80.20/u9c/webapi/Receivement/ApproveLine; æµ‹è¯•
        public static string CreateProdMaterialReqUrl
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["CreateProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/IssueDoc/Create
        public static string CreateProdReturnOrderUrl
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["CreateProdReturnOrderUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateProdReturnOrderUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/IssueDoc/CreateRecedeIssueDocNew
        public static string CreateOutProdMaterialReqUrl
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["CreateOutProdMaterialReqUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateOutProdMaterialReqUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/PMIssueDoc/Create
        public static string CreateOutProdReturnOrderUrl
        { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["CreateOutProdReturnOrderUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["CreateOutProdReturnOrderUrl", "U9CUrl"].PARAM_VALUE; //http://172.16.80.20/u9c/webapi/PMIssueDoc/CreateRecedeIssueDoc
        /// <summary>
        /// æ–°å¢žæ”¶è´§å•-来源ASN单接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<CreateRcvBySrcASNInput>> CreateRcvBySrcASN(CreateRcvBySrcASNInput input)
        public async Task<ApiAction<List<U9CReturnData2>>> CreateRcvBySrcASN(CreateRcvBySrcASNInput input)
        {
            Logger.Interface.Info($"/**\r\n *进入新增收货单-来源ASN单接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<CreateRcvBySrcASNInput>();
            var action = new ApiAction<List<U9CReturnData2>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
@@ -86,6 +94,7 @@
                {
                    if (result.Success && result.Data[0].IsSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"新增收货单-来源ASN单接口提交Json: {JsonConvert.SerializeObject(param)},返回Json: {response.Message}");
                    }
                    else
@@ -109,12 +118,13 @@
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<CreateReceivementInput>> CreateReceivement(CreateReceivementInput input)
        public async Task<ApiAction<List<U9CReturnData2>>> CreateReceivement(CreateReceivementInput input)
        {
            Logger.Interface.Info($"/**\r\n *进入新增收货单-无来源接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<CreateReceivementInput>();
            var action = new ApiAction<List<U9CReturnData2>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
@@ -148,6 +158,7 @@
                {
                    if (result.Success && result.Data[0].IsSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"新增收货单-无来源接口提交Json: {JsonConvert.SerializeObject(param)},返回Json: {response.Message}");
                    }
                    else
@@ -171,11 +182,12 @@
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ApiAction<SubmitLineInput>> ReceivementApproveLine(SubmitLineInput input) {
        public async Task<ApiAction<List<U9CReturnData2>>> ReceivementApproveLine(SubmitLineInput input) {
            Logger.Interface.Info($"/**\r\n *进入收货单-行审核总入口接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<SubmitLineInput>();
            var action = new ApiAction<List<U9CReturnData2>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
@@ -219,12 +231,13 @@
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private async Task<ApiAction<SubmitLineInput>> SubmitLine(SubmitLineInput input)
        private async Task<ApiAction<List<U9CReturnData2>>> SubmitLine(SubmitLineInput input)
        {
            Logger.Interface.Info($"/**\r\n *进入收货单-行提交接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<SubmitLineInput>();
            var action = new ApiAction<List<U9CReturnData2>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
@@ -240,6 +253,7 @@
                {
                    if (result.Success && result.Data[0].IsSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"收货单-行提交接口提交Json: {JsonConvert.SerializeObject(input.param)},返回Json: {response.Message}");
                    }
                    else
@@ -263,12 +277,13 @@
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private async Task<ApiAction<SubmitLineInput>> ApproveLine(SubmitLineInput input)
        private async Task<ApiAction<List<U9CReturnData2>>> ApproveLine(SubmitLineInput input)
        {
            Logger.Interface.Info($"/**\r\n *进入收货单-行审核接口....\r\n */\r\n"); //固定写法
            var action = new ApiAction<SubmitLineInput>();
            var action = new ApiAction<List<U9CReturnData2>>();
            try
            {
                //如果已经登录则不需要再次登录,直接使用传入的token
                if (input.IsLogin)
                {
                    var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}");
@@ -284,6 +299,7 @@
                {
                    if (result.Success && result.Data[0].IsSucess)
                    {
                        action.Data = result.Data;
                        Logger.Interface.Info($"收货单-行审核接口提交Json: {JsonConvert.SerializeObject(input.param)},返回Json: {response.Message}");
                    }
                    else
Tiger.IBusiness.WMS/iERP/IWMS_U9C.cs
@@ -12,7 +12,11 @@
{
    public interface IWMS_U9C
    {
        public Task<ApiAction<CreateRcvBySrcASNInput>> CreateRcvBySrcASN(CreateRcvBySrcASNInput input);
        public Task<ApiAction<SubmitLineInput>> ReceivementApproveLine(SubmitLineInput input);
        public Task<ApiAction<List<U9CReturnData2>>> CreateRcvBySrcASN(CreateRcvBySrcASNInput input);
        public Task<ApiAction<List<U9CReturnData2>>> ReceivementApproveLine(SubmitLineInput input);
        public Task<ApiAction<List<U9CReturnData>>> CreateProdMaterialReq(CreateProdMaterialReqInput input);
        public Task<ApiAction<List<U9CReturnData>>> CreateProdReturnOrder(CreateProdReturnOrderInput input);
        public Task<ApiAction<List<U9CReturnData>>> CreateOutProdMaterialReq(CreateOutProdMaterialReqInput input);
        public Task<ApiAction<List<U9CReturnData>>> CreateOutProdReturnOrder(CreateOutProdReturnOrderInput input);
    }
}
Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs
@@ -50,6 +50,7 @@
    {
        public string userId { get; set; }
        public string token { get; set; }
        public string Data { get; set; }
        public bool IsLogin { get; set; }
    }
@@ -339,4 +340,105 @@
    }
    #endregion
    #region åˆ›å»ºç”Ÿäº§é¢†æ–™å•接口
    public class CreateProdMaterialReqInput : U9CBaseInput
    {
        public List<CreateProdMaterialReqParam> CreateProdMaterialReqParam { get; set; }
    }
    public class CreateProdMaterialReqParam
    {
        public List<object> MOs { get; set; }
        public List<PickListDTOs> PickListDTOs { get; set; }
        public int BusinessType { get; set; }
        public int IssueType { get; set; }
        public int DocStatus { get; set; }
        public string OtherID { get; set; } = "WMS";
    }
    public class PickListDTOs
    {
        public List<object> MOs { get; set; }
        public List<object> Item { get; set; }
        public List<object> IssueWh { get; set; }
        public List<object> IssueBin { get; set; }
        public double IssuedQty { get; set; }
        public double IssueQty { get; set; }
        public List<object> IssueUOM { get; set; }
        public string MOPickList { get; set; }
        public List<object> Lot { get; set; }
        public int StorageType { get; set; }
    }
    #endregion
    #region åˆ›å»ºç”Ÿäº§é€€æ–™å•-按行退料接口
    public class CreateProdReturnOrderInput : U9CBaseInput
    {
        public List<CreateProdReturnOrderParam> CreateProdReturnOrderParam { get; set; }
    }
    public class CreateProdReturnOrderParam
    {
        public List<RecedeItemAndSnDTOList> RecedeItemAndSnDTOList { get; set; }
        public bool IsAutoIssued { get; set; }
        public string OtherID { get; set; } = "WMS";
    }
    public class RecedeItemAndSnDTOList
    {
        public string ItemCode { get; set; }
        public string IssueDocNo { get; set; }
        public double RecedeQty { get; set; }
        public double IssueLineNum { get; set; }
    }
    #endregion
    #region åˆ›å»ºå§”外生产领料单
    public class CreateOutProdMaterialReqInput : U9CBaseInput
    {
        public List<CreateOutProdMaterialReqParam> CreateOutProdMaterialReqParam { get; set; }
    }
    public class CreateOutProdMaterialReqParam
    {
        public List<object> POLine { get; set; }
        public DateTime BusinessDate { get; set; }
        public List<PickListDTOs2> PickListDTOs { get; set; }
        public int BusinessType { get; set; }
        public string BusinessCreatedOn { get; set; }
        public int DocStatus { get; set; }
        public string OtherID { get; set; } = "WMS";
    }
    public class PickListDTOs2
    {
        public List<object> Item { get; set; }
        public List<object> IssueWh { get; set; }
        public List<object> IssueBin { get; set; }
        public double IssuedQty { get; set; }
        public double IssueQty { get; set; }
        public List<object> IssueUOM { get; set; }
        public string SCMOPickList { get; set; }
        public List<object> Lot { get; set; }
    }
    #endregion
    #region åˆ›å»ºå§”外生产退料单接口
    public class CreateOutProdReturnOrderInput : U9CBaseInput
    {
        public List<CreateOutProdReturnOrderParam> CreateOutProdReturnOrderParam { get; set; }
    }
    public class CreateOutProdReturnOrderParam
    {
        public List<object> POLine { get; set; }
        public DateTime BusinessDate { get; set; }
        public List<PickListDTOs2> PickListDTOs { get; set; }
        public int BusinessType { get; set; }
        public string BusinessCreatedOn { get; set; }
        public int DocStatus { get; set; }
        public string OtherID { get; set; } = "WMS";
    }
    #endregion
}