schangxiang@126.com
2025-02-20 c9e3a7f0c154892f2327e300e28af53f81e40ad0
软件加密+ 修复 不断给plc报警的问题
已添加3个文件
已修改5个文件
293 ■■■■■ 文件已修改
CC/iWareCC_ASRS/Common/Helper/MyExtendHelper.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/ThreadService/03_BZ12(机器人码包工位)/1、DataProcess_BZ12.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareModel/Entity/WMS/ControlRequest.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareModel/iWareModel.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareUnitTest/CSharpTest.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareUnitTest/Entity/NewPasswordEntity.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareUnitTest/Entity/PasswordGenerator.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareUnitTest/iWareUnitTest.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CC/iWareCC_ASRS/Common/Helper/MyExtendHelper.cs
@@ -15,7 +15,7 @@
using System.Threading;
using System.Threading.Tasks;
using XiGang.Core.Model;
using LogType = iWareCommon.Utils.LogType;
namespace iWareCC.Common.Helper
{
@@ -26,6 +26,90 @@
    {
        /// <summary>
        /// å…¬å…±çš„æŽ§åˆ¶è¯·æ±‚对象字典
        /// </summary>
        public static IDictionary<string, ControlRequest> controlRequestDicts = new Dictionary<string, ControlRequest>();
        /// <summary>
        /// å…¬å…±çš„æŽ§åˆ¶è¯·æ±‚对象字典赋值
        /// </summary>
        /// <param name="placeNo"></param>
        /// <param name="result"></param>
        /// <param name="msg"></param>
        public static void SetValueControlRequestDicts(string placeNo, bool result, string msg)
        {
            if (controlRequestDicts.ContainsKey(placeNo))
            {
                controlRequestDicts[placeNo].IsSuccess = result;
                controlRequestDicts[placeNo].LastTime = DateTime.Now;
                controlRequestDicts[placeNo].PlaceNo = placeNo;
                if (result)
                {
                    controlRequestDicts[placeNo].Count = 0;
                    controlRequestDicts[placeNo].ErrMsg = "";
                }
                else
                {
                    controlRequestDicts[placeNo].Count++;
                    controlRequestDicts[placeNo].ErrMsg = msg;
                }
            }
            else
            {
                if (result)
                {
                    controlRequestDicts.Add(placeNo, new ControlRequest()
                    {
                        PlaceNo = placeNo,
                        Count = 0,
                        LastTime = DateTime.Now,
                        ErrMsg = msg,
                        IsSuccess = result
                    });
                }
                else
                {
                    controlRequestDicts.Add(placeNo, new ControlRequest()
                    {
                        PlaceNo = placeNo,
                        Count = 1,
                        LastTime = DateTime.Now,
                        ErrMsg = msg,
                        IsSuccess = result
                    });
                }
            }
        }
        /// <summary>
        /// éªŒè¯æ˜¯å¦å…è®¸ç»™PLC发报警
        /// </summary>
        /// <param name="placeNo"></param>
        /// <returns></returns>
        public static bool ValidateIsAllowRequest(string placeNo, LogType logType)
        {
            if (controlRequestDicts.ContainsKey(placeNo))
            {
                if (controlRequestDicts[placeNo].IsSuccess == false)
                {
                    //var diff = DateTime.Now - controlRequestDicts[placeNo].LastTime;
                    //if (diff.Seconds <= 10)
                    //{//如果连续请求在10秒内,则认为 ä¸éœ€è¦å†æ¬¡è¯·æ±‚
                    //    WZ.Useful.Commons.LogTextHelper.WriteLine("CommonControl", "ValidateIsAllowRequest", "如果连续请求在10秒内,则认为 ä¸éœ€è¦å†æ¬¡è¯·æ±‚,间隔" + diff.Seconds + "秒,placeNo:" + placeNo);
                    //    return false;
                    //}
                    if (controlRequestDicts[placeNo].Count <= 5)
                    {//如果连续请求在5次内,则认为 ä¸éœ€è¦å†æ¬¡è¯·æ±‚
                        var msg = "如果连续请求在5次内,则认为 ä¸éœ€è¦å†æ¬¡è¯·æ±‚,间隔" + controlRequestDicts[placeNo].Count + "个,placeNo:" + placeNo;
                        Log4NetHelper.WriteInfoLog(logType, msg);
                        return false;
                    }
                }
            }
            return true;
        }
        /// <summary>
        /// ç”Ÿæˆæœ€æ–°çš„任务号
        /// </summary>
        /// <param name="wmsDB"></param>
CC/iWareCC_ASRS/ThreadService/03_BZ12(»úÆ÷ÈËÂë°ü¹¤Î»)/1¡¢DataProcess_BZ12.cs
@@ -105,12 +105,23 @@
                                //placeZ = (short)upiObj.MachineZCenter;
                                if (upiObj.UpiStatus == (int)UpiStatusEnum.已码垛 || upiObj.UpiStatus == (int)UpiStatusEnum.码垛中)
                                {
                                    //写入报警信息
                                    await MyExtendHelper.WriteBoolPlcDataForWarning(PlcWarningAddressGloble.Num_BZ12_3);
                                    SystemWarningMsg._lbl_alert_DataProcess_BZ12 = $"{rgvLocation.ToString()},根据UPI:{upiCode}状态已是'已码垛'或'码垛中' ";
                                    MyExtendHelper.SetValueControlRequestDicts(PlcWarningAddressGloble.Num_BZ12_3, false, SystemWarningMsg._lbl_alert_DataProcess_BZ12);
                                    var isAllow = MyExtendHelper.ValidateIsAllowRequest(PlcWarningAddressGloble.Num_BZ12_3, LogType.DataProcess_BZ12);
                                    if (isAllow == false)
                                    {
                                    continue;
                                }
                                    else
                                    {
                                        //写入报警信息
                                        await MyExtendHelper.WriteBoolPlcDataForWarning(PlcWarningAddressGloble.Num_BZ12_3);
                                    }
                                    continue;
                                }
                                MyExtendHelper.SetValueControlRequestDicts(PlcWarningAddressGloble.Num_BZ12_3, true, "");
                                upiObj.UpiStatus = (int)UpiStatusEnum.码垛中;
                                upiObj.AreaCode = (int)AreaCodeEnum.码垛区域;
                                //查处这包所有的数量
CC/iWareModel/Entity/WMS/ControlRequest.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
// éº»çœç†å·¥å­¦é™¢è®¸å¯è¯
//
// ç‰ˆæƒæ‰€æœ‰ (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  è”系电话/微信:18020030720  QQ:515096995
//
// ç‰¹æ­¤å…è´¹æŽˆäºˆèŽ·å¾—æœ¬è½¯ä»¶çš„ä»»ä½•äººä»¥å¤„ç†æœ¬è½¯ä»¶çš„æƒåˆ©ï¼Œä½†é¡»éµå®ˆä»¥ä¸‹æ¡ä»¶ï¼šåœ¨æ‰€æœ‰å‰¯æœ¬æˆ–é‡è¦éƒ¨åˆ†çš„è½¯ä»¶ä¸­å¿…é¡»åŒ…æ‹¬ä¸Šè¿°ç‰ˆæƒå£°æ˜Žå’Œæœ¬è®¸å¯å£°æ˜Žã€‚
//
// è½¯ä»¶æŒ‰â€œåŽŸæ ·â€æä¾›ï¼Œä¸æä¾›ä»»ä½•å½¢å¼çš„æ˜Žç¤ºæˆ–æš—ç¤ºçš„ä¿è¯ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽå¯¹é€‚é”€æ€§ã€é€‚ç”¨æ€§å’Œéžä¾µæƒçš„ä¿è¯ã€‚
// åœ¨ä»»ä½•情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace XiGang.Core.Model
{
    /// <summary>
    /// æŽ§åˆ¶å¤„理请求对象
    /// é˜²æ­¢PLC不停地调用,导致数据库死锁的问题
    /// </summary>
    public class ControlRequest
    {
        /// <summary>
        /// è¯·æ±‚返回结果
        /// </summary>
        public bool IsSuccess { get; set; }
        /// <summary>
        /// è®¡ç®—次数
        /// </summary>
        public int Count { get; set; }
        /// <summary>
        /// åº“位编号
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// é”™è¯¯æ¶ˆæ¯
        /// </summary>
        public string ErrMsg { get; set; }
        /// <summary>
        /// æœ€åŽæ›´æ–°æ—¶é—´
        /// </summary>
        public DateTime LastTime { get; set; }
    }
}
CC/iWareModel/iWareModel.csproj
@@ -78,6 +78,7 @@
    <Compile Include="Entity\ValidateModel.cs" />
    <Compile Include="Entity\ValidateResModel.cs" />
    <Compile Include="Entity\WMS\AddMainTaskPostParam.cs" />
    <Compile Include="Entity\WMS\ControlRequest.cs" />
    <Compile Include="Entity\WMS\UpdateEngineInfoParam.cs" />
    <Compile Include="EnumType\EDbError.cs" />
    <Compile Include="EnumType\EDevice\AGV\AGVState.cs" />
CC/iWareUnitTest/CSharpTest.cs
@@ -1,6 +1,7 @@

using iWareCommon.Utils;
using iWareSql.DBModel;
using iWareUnitTest.Entity;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using System;
@@ -140,6 +141,98 @@
            var txt1 = DESEncryptHelper.Encrypt("2025-02-25");//125B1E37E4C1F3C8DD1F36B342ED1307
            var txt2 = DESEncryptHelper.Encrypt("2025-03-30");//45BAF941111384BEE21F89FD18461EC1
            List<NewPasswordEntity> list = new List<NewPasswordEntity>();
            var startDate = DateTime.Parse("2025-04-25");
            for (int i = 0; i < 11; i++)
            {
                var newPass = PasswordGenerator.GenerateRandomPassword(7);
                var _date = startDate.ToString("yyy-MM-dd");
                startDate = startDate.AddMonths(1);
                list.Add(new NewPasswordEntity
                {
                    date = _date,
                    password = newPass,
                    encrypt_date = DESEncryptHelper.Encrypt(_date),
                    encrypt_password = DESEncryptHelper.Encrypt(newPass)
                });
            }
            StringBuilder sb = new StringBuilder();
            foreach (var item in list)
            {
                sb.Append(item.date + "\r\n");
            }
            sb.Append("分割哦" + "\r\n");
            foreach (var item in list)
            {
                sb.Append(item.password + "\r\n");
            }
            sb.Append("分割哦" + "\r\n");
            foreach (var item in list)
            {
                sb.Append(item.encrypt_date + "\r\n");
            }
            sb.Append("分割哦" + "\r\n");
            foreach (var item in list)
            {
                sb.Append(item.encrypt_password + "\r\n");
            }
            var cc = sb.ToString();
            var txt4 = DESEncryptHelper.Encrypt("2025-04-25");
            var txt5 = DESEncryptHelper.Encrypt("2025-05-25");
            var txt6 = DESEncryptHelper.Encrypt("2025-06-25");
            var txt7 = DESEncryptHelper.Encrypt("2025-07-25");
            var txt8 = DESEncryptHelper.Encrypt("2025-08-25");
            var txt9 = DESEncryptHelper.Encrypt("2025-09-25");
            var txt10 = DESEncryptHelper.Encrypt("2025-10-25");
            var txt11 = DESEncryptHelper.Encrypt("2025-11-25");
            var txt12 = DESEncryptHelper.Encrypt("2025-12-25");
            var txt13 = DESEncryptHelper.Encrypt("2026-01-25");
            var txt14 = DESEncryptHelper.Encrypt("2026-02-25");
            sb.Append(txt4 + "\r\n");
            sb.Append(txt5 + "\r\n");
            sb.Append(txt6 + "\r\n");
            sb.Append(txt7 + "\r\n");
            sb.Append(txt8 + "\r\n");
            sb.Append(txt9 + "\r\n");
            sb.Append(txt10 + "\r\n");
            sb.Append(txt11 + "\r\n");
            sb.Append(txt12 + "\r\n");
            sb.Append(txt13 + "\r\n");
            sb.Append(txt14 + "\r\n");
            sb.Append("分割哦" + "\r\n");
            var password_txt4 = DESEncryptHelper.Encrypt("8567sdc");
            var password_txt5 = DESEncryptHelper.Encrypt("2025yyc");
            var password_txt6 = DESEncryptHelper.Encrypt("jjkljlue5");
            var password_txt7 = DESEncryptHelper.Encrypt("jh3njdi3");
            var password_txt8 = DESEncryptHelper.Encrypt("jkncy632d");
            var password_txt9 = DESEncryptHelper.Encrypt("kjl3oi8j4");
            var password_txt10 = DESEncryptHelper.Encrypt("9i438d6");
            var password_txt11 = DESEncryptHelper.Encrypt("0934kydht");
            var password_txt12 = DESEncryptHelper.Encrypt("23hd6f");
            var password_txt13 = DESEncryptHelper.Encrypt("8uj47d6d");
            var password_txt14 = DESEncryptHelper.Encrypt("jjy74jdc3");
            sb.Append(password_txt4 + "\r\n");
            sb.Append(password_txt5 + "\r\n");
            sb.Append(password_txt6 + "\r\n");
            sb.Append(password_txt7 + "\r\n");
            sb.Append(password_txt8 + "\r\n");
            sb.Append(password_txt9 + "\r\n");
            sb.Append(password_txt10 + "\r\n");
            sb.Append(password_txt11 + "\r\n");
            sb.Append(password_txt12 + "\r\n");
            sb.Append(password_txt13 + "\r\n");
            sb.Append(password_txt14 + "\r\n");
            var to_txt = DESEncryptHelper.Decrypt("C3F3DD5F2C816041775DB87739E1F729");//
            var to_txt1 = DESEncryptHelper.Decrypt("125B1E37E4C1F3C8DD1F36B342ED1307");//
@@ -155,6 +248,10 @@
            var test_txt = DESEncryptHelper.Encrypt("2024-12-19");//46039E400A485A5B383F51212D562772
            var test_txt2 = DESEncryptHelper.Encrypt("2024-12-25");//46039E400A485A5B80BA4C2C44FEA6AF
            to_txt2 = DESEncryptHelper.Decrypt("CB32534E34DD3273FCEA68A19F06C37F");//
            to_txt2 = DESEncryptHelper.Decrypt("69D40723281D3406");//
            Assert.IsFalse(false);
        }
CC/iWareUnitTest/Entity/NewPasswordEntity.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWareUnitTest.Entity
{
    public class NewPasswordEntity
    {
        public string date { get; set; }
        public string password { get; set; }
        public string encrypt_date { get; set; }
        public string encrypt_password { get; set; }
    }
}
CC/iWareUnitTest/Entity/PasswordGenerator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
public class PasswordGenerator
{
    //private const string ValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
    private const string ValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    private static readonly RandomNumberGenerator _rng = RandomNumberGenerator.Create();
    private static readonly object _lock = new object(); // ç”¨äºŽçº¿ç¨‹å®‰å…¨
    private static readonly char[] _chars = ValidChars.ToCharArray(); // é¢„加载字符数组以提高性能
    private static readonly int _validCharsLength = ValidChars.Length; // é¢„加载长度以提高性能
    private static readonly byte[] _randomBytesBuffer = new byte[4]; // ç”¨äºŽç”Ÿæˆéšæœºæ•°ä»¥åˆå§‹åŒ–Random对象(可选,取决于需求)
    private static readonly Random _random = new Random(); // ä»…为初始化Random对象(可选,取决于需求)
    private static readonly ThreadLocal<Random> _threadRandom = new ThreadLocal<Random>(() => new Random(BitConverter.ToInt32(GetRandomBytes(), 0))); // çº¿ç¨‹å®‰å…¨çš„Random对象(可选,取决于需求)
    private static byte[] GetRandomBytes() { lock (_lock) { _rng.GetBytes(_randomBytesBuffer); return _randomBytesBuffer; } } // èŽ·å–éšæœºå­—èŠ‚æ•°ç»„çš„æ–¹æ³•ï¼Œç¡®ä¿çº¿ç¨‹å®‰å…¨ã€‚å¦‚æžœä¸éœ€è¦çº¿ç¨‹å®‰å…¨ï¼Œå¯ä»¥ç§»é™¤lock。
    private static int GetRandomInt(int maxValue) => _threadRandom.Value.Next(maxValue); // ä½¿ç”¨çº¿ç¨‹å®‰å…¨çš„Random对象获取随机整数。如果不需要线程安全,可以使用普通的_random.Next(maxValue)。
    private static char GetRandomChar() => _chars[GetRandomInt(_validCharsLength)]; // èŽ·å–éšæœºå­—ç¬¦ã€‚å¦‚æžœä¸éœ€è¦çº¿ç¨‹å®‰å…¨ï¼Œå¯ä»¥ä½¿ç”¨_chars[random.Next(_validCharsLength)]。
    public static string GenerateRandomPassword(int length) => new string(Enumerable.Range(0, length).Select(_ => GetRandomChar()).ToArray()); // ç”Ÿæˆå¯†ç å­—符串。如果不需要线程安全,可以直接使用_chars[random.Next(_validCharsLength)]。
}
CC/iWareUnitTest/iWareUnitTest.csproj
@@ -69,6 +69,8 @@
  </Choose>
  <ItemGroup>
    <Compile Include="CSharpTest.cs" />
    <Compile Include="Entity\PasswordGenerator.cs" />
    <Compile Include="Entity\NewPasswordEntity.cs" />
    <Compile Include="OPCTest.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Service References\MesWebService\Reference.cs">