zjh
2025-11-17 cfb616bf02b554b185f04bf92a8b8af489490102
栈板绑定代码提交
已修改2个文件
已添加2个文件
300 ■■■■■ 文件已修改
StandardPda/MES.Service/Dto/service/SyncStackCodeFromApi.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/util/HttpHelper.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MESApplication/Controllers/Warehouse/womdaaController.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/Dto/service/SyncStackCodeFromApi.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
namespace MES.Service.Dto.service
{
    /// <summary>
    /// PDA栈板码同步接口入参
    /// </summary>
    public class SyncStackCodeFromApi
    {
        /// <summary>
        /// æ ˆæ¿ç 
        /// </summary>
        public string StackCode { get; set; }
        /// <summary>
        /// pda登录账号
        /// </summary>
        public string UserId { get; set; }
    }
}
StandardPda/MES.Service/service/Warehouse/WomdaaManager.cs
@@ -740,5 +740,183 @@
            return result;
        }
        public string[] SyncStackCodeFromApi(string stackCode, string loginId)
        {
            string[] msg = new string[2];
            msg[0] = "true";
            var sqlHelper = new OracleSQLHelper();
            var (conn, tran) = sqlHelper.BeginTransaction();
            try
            {
                // ---------------------------
                // 1. åˆ¤æ–­æ˜¯å¦å·²å…¥åº“(IS_INBOUND = 1)
                // ---------------------------
                string sqlCheck = @"
            SELECT COUNT(*)
              FROM MES_PALLET_BINDING
             WHERE STACKCODE = :stackCode
               AND IS_INBOUND = 1";
                int count = Convert.ToInt32(sqlHelper.ExecuteScalarWithTransaction(
                    conn,
                    tran,
                    sqlCheck,
                    new[] { new OracleParameter(":stackCode", stackCode) }
                ));
                if (count > 0)
                {
                    msg[0] = "false";
                    msg[1] = $"该栈板已入库,不允许重新绑定!栈板码:{stackCode}";
                    tran.Rollback();
                    return msg;
                }
                // ---------------------------
                // 2. è°ƒç”¨æŽ¥å£èŽ·å–æœ€æ–° SN åˆ—表
                // ---------------------------
                var apiUrl = "http://no2api.dream-maker.com/storage/getTransferList";
                var reqObj = new { stackCode = stackCode };
                string jsonReq = Newtonsoft.Json.JsonConvert.SerializeObject(reqObj);
                string apiResult = HttpHelper.HttpPost(apiUrl, jsonReq);
                var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(apiResult);
                if ((int)obj.code != 0)
                {
                    msg[0] = "false";
                    msg[1] = "接口返回错误:" + (string)obj.msg;
                    tran.Rollback();
                    return msg;
                }
                var snList = obj.data.snList;
                if (snList == null || snList.Count == 0)
                {
                    msg[0] = "false";
                    msg[1] = "接口返回SN列表为空!";
                    tran.Rollback();
                    return msg;
                }
                // ---------------------------
                // 3. åˆ é™¤æ—§ç»‘定
                // ---------------------------
                string sqlDelete = @"DELETE FROM MES_PALLET_BINDING WHERE STACKCODE = :stackCode";
                sqlHelper.ExecuteNonQueryWithTransaction(
                    sqlDelete,
                    new[] { new OracleParameter(":stackCode", stackCode) },
                    conn,
                    tran
                );
                // ---------------------------
                // 4. æ‰¹é‡æ’入(方式 1:提前处理 transitTime)
                // ---------------------------
                int rowCount = snList.Count;
                string[] arrSnNo = new string[rowCount];
                string[] arrStackCode = new string[rowCount];
                string[] arrLoginId = new string[rowCount];
                string[] arrCreatedBy = new string[rowCount];
                DateTime?[] arrTransitTime = new DateTime?[rowCount];
                string[] arrLineNo = new string[rowCount];
                for (int i = 0; i < rowCount; i++)
                {
                    arrSnNo[i] = (string)snList[i].snNo;
                    arrStackCode[i] = stackCode;
                    arrLoginId[i] = loginId;
                    arrCreatedBy[i] = loginId;
                    arrLineNo[i] = (string)snList[i].lineNo;
                    // ------------------------
                    // transitTime è½¬æ¢ï¼ˆå…³é”®ï¼‰
                    // ------------------------
                    string timeStr = (string)snList[i].transitTime;
                    if (string.IsNullOrWhiteSpace(timeStr))
                    {
                        arrTransitTime[i] = null;
                    }
                    else
                    {
                        DateTime dt;
                        if (DateTime.TryParse(timeStr, out dt))
                            arrTransitTime[i] = dt;
                        else
                            arrTransitTime[i] = null;  // éžæ³•时间直接置空
                    }
                }
                string sqlBatchInsert = @"
            INSERT INTO MES_PALLET_BINDING
            (ID, STACKCODE, LOGIN_ID, SN_NO, TICKET_NO, MEDIUMBOXCODE, CREATE_DATE, CREATED_BY, BIND_TRANSIT_TIME, LINE_NO)
            VALUES
            (
                SEQ_MES_PALLET_BINDING_ID.NEXTVAL,
                :STACKCODE,
                :LOGIN_ID,
                :SN_NO,
                NULL,
                NULL,
                SYSDATE,
                :CREATED_BY,
                :BIND_TRANSIT_TIME,
                :LINE_NO
            )";
                using (OracleCommand cmd = (OracleCommand)conn.CreateCommand())
                {
                    cmd.Transaction = (OracleTransaction)tran;
                    cmd.CommandText = sqlBatchInsert;
                    cmd.ArrayBindCount = rowCount;
                    cmd.Parameters.Add(new OracleParameter(":STACKCODE", arrStackCode));
                    cmd.Parameters.Add(new OracleParameter(":LOGIN_ID", arrLoginId));
                    cmd.Parameters.Add(new OracleParameter(":SN_NO", arrSnNo));
                    cmd.Parameters.Add(new OracleParameter(":CREATED_BY", arrCreatedBy));
                    // å…³é”®ï¼šnull ä¼šè‡ªåŠ¨å­˜ä¸º Oracle NULL
                    var pTransit = new OracleParameter(":BIND_TRANSIT_TIME", OracleDbType.Date);
                    pTransit.Value = arrTransitTime;
                    cmd.Parameters.Add(pTransit);
                    cmd.Parameters.Add(new OracleParameter(":LINE_NO", arrLineNo));
                    cmd.ExecuteNonQuery();
                }
                // ---------------------------
                // 5. æäº¤äº‹åŠ¡
                // ---------------------------
                tran.Commit();
                msg[1] = "同步成功!";
            }
            catch (Exception ex)
            {
                tran.Rollback();
                msg[0] = "false";
                msg[1] = ex.Message;
                throw;
            }
            finally
            {
                sqlHelper.CloseConnection(conn);
            }
            return msg;
        }
    }
}
StandardPda/MES.Service/util/HttpHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using System;
using System.IO;
using System.Net;
using System.Text;
public static class HttpHelper
{
    /// <summary>
    /// å‘送 POST è¯·æ±‚(Content-Type: application/json)
    /// </summary>
    public static string HttpPost(string url, string jsonBody)
    {
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.ContentType = "application/json;charset=UTF-8";
        byte[] data = Encoding.UTF8.GetBytes(jsonBody);
        request.ContentLength = data.Length;
        // å†™å…¥ Body
        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
        // æŽ¥æ”¶å“åº”
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}
StandardPda/MESApplication/Controllers/Warehouse/womdaaController.cs
@@ -278,5 +278,66 @@
                return ResponseResult.ResponseError(ex);
            }
        }
        /// <summary>
        ///pda设置栈板码
        /// </summary>
        /// <returns></returns>
        [HttpPost("SyncStackCodeFromApi")]
        public ResponseResult SyncStackCodeFromApi(SyncStackCodeFromApi syncStackCodeFromApi)
        {
            var entity = new MessageCenter();
            entity.TableName = TableName;
            entity.Url = URL + "SetStackCode";
            entity.Method = METHOD;
            entity.Data = Newtonsoft.Json.JsonConvert.SerializeObject(syncStackCodeFromApi);
            entity.Status = 1;
            entity.CreateBy = "PL017";
            try
            {
                dynamic resultInfos = new ExpandoObject();
                var result = m.SyncStackCodeFromApi(syncStackCodeFromApi.StackCode, syncStackCodeFromApi.UserId);
                resultInfos.tbBillList = result;
                entity.Result = 0;
                if (result[0].ToBoolean()) entity.Result = 1;
                entity.DealWith = 1;
                _manager.save(entity);
                if (result[0].ToBoolean())
                {
                    return new ResponseResult
                    {
                        status = 0,
                        message = "OK",
                        data = resultInfos
                    };
                }
                else
                {
                    return new ResponseResult
                    {
                        status = 1,
                        message = result[1],
                        data = resultInfos
                    };
                }
            }
            catch (Exception ex)
            {
                entity.Result = 0;
                entity.DealWith = 0;
                entity.ResultData = ex.Message;
                _manager.save(entity);
                return ResponseResult.ResponseError(ex);
            }
        }
    }
}