南骏 池
4 天以前 0cdfda43fa2f992614a1c0f3bd1aee48eac13797
1.AGV4个接口
2.其他入库优化
已修改4个文件
已添加4个文件
488 ■■■■■ 文件已修改
Controllers/AGV/AgvApiController.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Wom/WomdaaController.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/Warehouse/DefineTask001Dto.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/Warehouse/DefineTask002Dto.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/Warehouse/DefineTask005Dto.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/Warehouse/DefineTask006Dto.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesItemQtrkManager.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Wom/WomdaaManager.cs 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/AGV/AgvApiController.cs
@@ -7,6 +7,7 @@
using Newtonsoft.Json.Linq;
using System.ServiceModel;
using System.IO;
using NewPdaSqlServer.Dto.Warehouse;
namespace NewPdaSqlServer.Controllers.AGV;
@@ -57,7 +58,7 @@
    //立库送检
    [HttpPost("DefineTask_001")]
    public ResponseResult DefineTask_001(dynamic queryObj)
    public ResponseResult DefineTask_001(DefineTask001Dto dto)
    {
        try
        {
@@ -71,7 +72,16 @@
            var factory = new ChannelFactory<IImesInterface>(binding, endpoint);
            var channel = factory.CreateChannel();
            string result = channel.DefineTask_001("GS2025070700001","TEST.01","AGV测试物料名称", "AGV测试物料规格",100,"台",1);
            //string result = channel.DefineTask_001("GS2025070700001","TEST.01","AGV测试物料名称", "AGV测试物料规格",100,"台",1);
            string result = channel.DefineTask_001(
                dto.MesId,
                dto.MatId,
                dto.MatName,
                dto.MatStandard,
                dto.MatNumber,
                dto.MatUnit,
                dto.Postition);
            ((IClientChannel)channel).Close();
            return new ResponseResult
@@ -89,7 +99,7 @@
    //立库检验
    [HttpPost("DefineTask_002")]
    public ResponseResult DefineTask_002(dynamic queryObj)
    public ResponseResult DefineTask_002(DefineTask002Dto dto)
    {
        try
        {
@@ -103,7 +113,11 @@
            var factory = new ChannelFactory<IImesInterface>(binding, endpoint);
            var channel = factory.CreateChannel();
            string result = channel.DefineTask_002("GS2025070900010", "合格");
            //string result = channel.DefineTask_002("GS2025070900010", "合格");
            string result = channel.DefineTask_002(
                dto.MesId,
                dto.MatStatus);
            ((IClientChannel)channel).Close();
            return new ResponseResult
@@ -121,7 +135,7 @@
    //立库呼叫
    [HttpPost("DefineTask_005")]
    public ResponseResult DefineTask_005(dynamic queryObj)
    public ResponseResult DefineTask_005(DefineTask005Dto dto)
    {
        try
        {
@@ -135,7 +149,9 @@
            var factory = new ChannelFactory<IImesInterface>(binding, endpoint);
            var channel = factory.CreateChannel();
            string result = channel.DefineTask_005(2);
            //string result = channel.DefineTask_005(2);
            string result = channel.DefineTask_005(
                dto.Postition);
            ((IClientChannel)channel).Close();
            return new ResponseResult
@@ -154,7 +170,7 @@
    //立库入库
    [HttpPost("DefineTask_006")]
    public ResponseResult DefineTask_006(dynamic queryObj)
    public ResponseResult DefineTask_006(DefineTask006Dto dto)
    {
        try
        {
@@ -168,7 +184,15 @@
            var factory = new ChannelFactory<IImesInterface>(binding, endpoint);
            var channel = factory.CreateChannel();
            string result = channel.DefineTask_006("C2025070400040", "2.02.51.463", "管线饮水机", "C638-1HA(万和VGX-SR-1A-XM白)", 48, "台", 4);
            //string result = channel.DefineTask_006("C2025070400040", "2.02.51.463", "管线饮水机", "C638-1HA(万和VGX-SR-1A-XM白)", 48, "台", 4);
            string result = channel.DefineTask_006(
                dto.MesId,
                dto.MatId,
                dto.MatName,
                dto.MatStandard,
                dto.MatNumber,
                dto.MatUnit,
                dto.Postition);
            ((IClientChannel)channel).Close();
            return new ResponseResult
@@ -215,4 +239,4 @@
    [OperationContract(Action = "http://tempuri.org/ImesInterface/DefineTask_006",
              ReplyAction = "http://tempuri.org/ImesInterface/DefineTask_006Response")]
    string DefineTask_006(string MesId,string MatId,string MatName,string MatStandard,int MatNumber,string MatUnit,int Postition);
}
}
Controllers/Wom/WomdaaController.cs
@@ -686,4 +686,101 @@
    }
    #endregion
    #region  pda调用AGV相关
    /// <summary>
    ///     AGV送检
    /// </summary>
    [HttpPost("handleAGVInspection")]
    public ResponseResult HandleAGVInspection([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.HandleAGVInspection(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
        /// <summary>
    ///     AGV呼叫
    /// </summary>
    [HttpPost("handleAGVCall")]
    public ResponseResult HandleAGVCall([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.HandleAGVCall(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// AGV检验处理
    /// </summary>
    [HttpPost("handleAgvJy")]
    public ResponseResult HandleAgvJy([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.HandleAgvJy(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     AGV入立库
    /// </summary>
    [HttpPost("handleAgvRk")]
    public ResponseResult HandleAgvRk([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.HandleAgvRk(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
}
Dto/Warehouse/DefineTask001Dto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
namespace NewPdaSqlServer.Dto.Warehouse;
using System.ComponentModel.DataAnnotations;
/// <summary>
/// ç«‹åº“送检数据传输对象
/// </summary>
public class DefineTask001Dto
{
    /// <summary>
    /// MES任务标识
    /// </summary>
    [Required(ErrorMessage = "MES任务标识必填")]
    public string MesId { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    [Required(ErrorMessage = "物料编码必填")]
    public string MatId { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string MatName { get; set; }
    /// <summary>
    /// ç‰©æ–™è§„æ ¼
    /// </summary>
    public string MatStandard { get; set; }
    /// <summary>
    /// ç‰©æ–™æ•°é‡
    /// </summary>
    [Range(1, int.MaxValue, ErrorMessage = "物料数量必须大于0且为整数")]
    public int MatNumber { get; set; }
    /// <summary>
    /// ç‰©æ–™å•位
    /// </summary>
    [Required(ErrorMessage = "物料单位必填")]
    public string MatUnit { get; set; }
    /// <summary>
    /// ä¸Šæ–™ä½ç½®
    /// </summary>
    [Range(1, int.MaxValue, ErrorMessage = "有效位置编号必填")]
    public int Postition { get; set; }
}
Dto/Warehouse/DefineTask002Dto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
namespace NewPdaSqlServer.Dto.Warehouse{
    public class DefineTask002Dto
    {
        /// <summary>
        /// æ¡ç ç¼–号
        /// </summary>
        [Required(ErrorMessage = "MES任务标识必填")]
        public string MesId { get; set; }
        /// <summary>
        /// æ£€éªŒçŠ¶æ€
        /// </summary>
        [Required(ErrorMessage = "检验状态必填")]
        public string MatStatus { get; set; }
    }
}
Dto/Warehouse/DefineTask005Dto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace NewPdaSqlServer.Dto.Warehouse{
    public class DefineTask005Dto
    {
        /// <summary>
        /// å‘¼å«ç‚¹ä½
        /// </summary>
        [Range(1, int.MaxValue, ErrorMessage = "有效位置编号必填")]
        public int Postition { get; set; }
    }
}
Dto/Warehouse/DefineTask006Dto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
namespace NewPdaSqlServer.Dto.Warehouse;
using System.ComponentModel.DataAnnotations;
/// <summary>
/// ç«‹åº“入库数据传输对象
/// </summary>
public class DefineTask006Dto
{
    /// <summary>
    /// MES任务标识
    /// </summary>
    [Required(ErrorMessage = "MES任务标识必填")]
    public string MesId { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–码
    /// </summary>
    [Required(ErrorMessage = "物料编码必填")]
    public string MatId { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string MatName { get; set; }
    /// <summary>
    /// ç‰©æ–™è§„æ ¼
    /// </summary>
    public string MatStandard { get; set; }
    /// <summary>
    /// ç‰©æ–™æ•°é‡
    /// </summary>
    [Range(1, int.MaxValue, ErrorMessage = "物料数量必须大于0且为整数")]
    public int MatNumber { get; set; }
    /// <summary>
    /// ç‰©æ–™å•位
    /// </summary>
    public string MatUnit { get; set; }
    /// <summary>
    /// æ‰€åœ¨æ¥¼å±‚
    /// </summary>
     [Range(1, int.MaxValue, ErrorMessage = "所在楼层必填")]
    public int Postition { get; set; }
}
service/Warehouse/MesItemQtrkManager.cs
@@ -124,17 +124,16 @@
        var sqlParams = new List<SugarParameter> { new("@barcode", p_item_barcode), new("@billNo", p_bill_no) };
        var sql1 = @"   SELECT TOP 1 A.rkCkId
FROM MES_QA_ITEMS_DETECT_01 A
         LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_id = B.ITEM_ID
WHERE order_type = '其它入库检'
  AND A.lot_no = @billNo
  AND ITEM_BARCODE = @barcode   ";
//        var sql1 = @"   SELECT TOP 1 A.rkCkId
//FROM MES_QA_ITEMS_DETECT_01 A
//         LEFT JOIN MES_INV_ITEM_BARCODES B ON A.item_id = B.ITEM_ID
//WHERE order_type = '其它入库检'
//  AND A.lot_no = @billNo
//  AND ITEM_BARCODE = @barcode   ";
        var appDepotInfo = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams).First();
//        var appDepotInfo = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams).First();
        if(appDepotInfo.rkCkId != c_depot_id)
            throw new Exception($"该 {p_section_code} å¯¹åº”的仓库 ä¸Ž æ£€éªŒåˆ¤å®šçš„入库仓库不一致,请确认!");
        var mesDepost = Db.Queryable<MesDepots>()
@@ -173,6 +172,10 @@
        if (qtrk == null) throw new Exception("其他入库申请单不存在!");
        if (qtrk.Qt008 != c_depot_id.ToString())
            throw new Exception($"该 {p_section_code} å¯¹åº”的仓库 ä¸Ž æ£€éªŒåˆ¤å®šçš„入库仓库不一致,请确认!");
        var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,
                    ISNULL(A.qd007,0) FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty
                    FROM MES_ITEM_QTRR_DETAIL A
service/Wom/WomdaaManager.cs
@@ -1315,4 +1315,195 @@
        return XtItem;
    }
    /// <summary>
    /// AGV送检
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    /// <exception cref="ArgumentNullException"></exception>
    /// <exception cref="ArgumentException"></exception>
    /// <exception cref="Exception"></exception>
    public dynamic HandleAGVInspection(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query));
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户账号不能为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不能为空", nameof(query.KbBar));
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_AgvSj", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                var parameters = new SqlParameter[]
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };
                cmd.Parameters.AddRange(parameters);
                conn.Open();
                cmd.ExecuteNonQuery();
                var result = new
                {
                    message = parameters[2].Value?.ToString(),
                    status = Convert.ToInt32(parameters[3].Value)
                };
                if (result.status <= 0)
                    throw new Exception(result.message);
                return result;
            }
        }
    }
    public dynamic HandleAGVCall(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query));
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户账号不能为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.XtNum?.ToString()))
            throw new ArgumentException("线体编号不能为空", nameof(query.XtNum));
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_AgvHj", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                var parameters = new SqlParameter[]
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_xtNum", SqlDbType.NVarChar, 100) { Value = query.XtNum },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };
                cmd.Parameters.AddRange(parameters);
                conn.Open();
                cmd.ExecuteNonQuery();
                var result = new
                {
                    message = parameters[2].Value?.ToString(),
                    status = Convert.ToInt32(parameters[3].Value)
                };
                if (result.status <= 0)
                    throw new Exception(result.message);
                return result;
            }
        }
    }
    public dynamic HandleAgvJy(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query));
        // å‚数验证强化
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.KbBar));
        if (string.IsNullOrEmpty(query.jyz?.ToString()))
            throw new ArgumentException("检验结果不允许为空", nameof(query.jyz));
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_AgvJy", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                // æ·»åŠ å­˜å‚¨è¿‡ç¨‹å‚æ•°
                SqlParameter[] parameters =
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_kbBarcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                    new("@pi_jyz", SqlDbType.NVarChar, 100) { Value = query.jyz },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };
                foreach (var parameter in parameters)
                    cmd.Parameters.Add(parameter);
                conn.Open();
                cmd.ExecuteNonQuery();
                _strMsg = parameters[3].Value?.ToString() ?? "";
                _intSum = parameters[4].Value?.ToString() ?? "-1";
                var result = Convert.ToInt32(_intSum);
                if (result <= 0) throw new Exception(_strMsg);
                return new
                {
                    message = _strMsg,
                    status = result,
                    kbBarcode = query.KbBar
                };
            }
        }
    }
    public dynamic HandleAgvRk(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query));
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户账号不能为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不能为空", nameof(query.KbBar));
        if (string.IsNullOrEmpty(query.Postition?.ToString()))
            throw new ArgumentException("楼层位置不能为空", nameof(query.Postition));
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_AgvRk", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                var parameters = new SqlParameter[]
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                    new("@pi_kb_Postition", SqlDbType.NVarChar, 100) { Value = query.Postition },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };
                cmd.Parameters.AddRange(parameters);
                conn.Open();
                cmd.ExecuteNonQuery();
                var result = new
                {
                    message = parameters[3].Value?.ToString(),
                    status = Convert.ToInt32(parameters[4].Value)
                };
                if (result.status <= 0)
                    throw new Exception(result.message);
                return result;
            }
        }
    }
}