wtt
2025-09-12 122e343b705b057e71f1ef677d18237900844a16
WebAPI/Controllers/²Ö´æ¹ÜÀí/ÌõÂëÉú³É/Sc_BarCodeController.cs
@@ -906,6 +906,9 @@
            string HCusMaterName = ""; //客户物料名称
            string HCheckEmpName = ""; //检验员名称
            string HSupNumber = ""; // ä¾›åº”商编码
            string HPOInStockBillNo = ""; // æ”¶æ–™é€šçŸ¥å•号
            DataSet Ds;
            msg2 = msg2.Replace("\\", "");
            msg2 = msg2.Replace("\n", "");  //\n
@@ -953,6 +956,9 @@
                    HICMOBillNo = DBUtility.ClsPub.isStrNull(ordrlist[j].HSourceBillNo); //生产订单号(夏宝电器)
                    HBarCodeBatchNo = DBUtility.ClsPub.isStrNull(ordrlist[j].HPinfanBarCode); //条码批次号(夏宝电器)
                    HBarCodeDate = DBUtility.ClsPub.isStrNull(ordrlist[j].HSupNumber); //条码日期(夏宝电器)
                    HPOInStockBillNo = DBUtility.ClsPub.isStrNull(ordrlist[j].HBillNo); // æ”¶æ–™é€šçŸ¥å•号 å…´è¾¾æ¡ç 
                    HSupNumber = DBUtility.ClsPub.isStrNull(ordrlist[j].HSupNumber);// ä¾›åº”商编号 å…´è¾¾æ¡ç 
                    //
                    sYear = ClsPub.isDate(sDate).Year.ToString().Substring(2, 2);
                    sPeriod = "0" + ClsPub.isDate(sDate).Month.ToString();
@@ -1052,6 +1058,17 @@
                                Ds = oCN.RunProcReturn("exec h_p_WMS_GetMaxNo '" + sTMNumber + "'", "h_p_WMS_GetMaxNo");    //获取最大流水号
                                LSH = ClsPub.isLong(Ds.Tables[0].Rows[0][0]);
                            }
                        }
                        else if (CampanyName.Contains("兴达"))
                        {
                            // å…´è¾¾æ¡ç 
                            //条码前缀 = æ”¶æ–™é€šçŸ¥å•号 + ä¾›åº”商编码 + å¹´ + æœˆ + æ—¥ + 3位流水号
                            sTMNumber = HPOInStockBillNo + "@" + HSupNumber + "@" + sYear + sPeriod + sDay;
                            Ds = oCN.RunProcReturn("exec h_p_WMS_GetMaxNo '" + sTMNumber + "'", "h_p_WMS_GetMaxNo");    //获取最大流水号
                            LSH = ClsPub.isLong(Ds.Tables[0].Rows[0][0]);
                            LSHlen = 3; // ä¸‰ä½æµæ°´å·
                        }
                        else  //通用方法
                        {
@@ -1807,15 +1824,80 @@
        }
        #endregion
        #region æ›´æ–°æ¡ç å¯¹åº”出库申请单号 å…´è¾¾
        public class BarCodeMeta
        {
            public string HBarCode { get; set; }
            public string HBatchNo { get; set; }
            public string HMaterModel  { get; set; }
            public string HMaterName  { get; set; }
            public float HQty  { get; set; }
            public string HSCSPName { get; set; }
            public string HSCWHName { get; set; }
            public string HSPName { get; set; }
            public float HTMQty { get; set; }
            public string HUnitName { get; set; }
            public string HWHName { get; set; }
        }
        [Route("Sc_BarCode/Set_BarCodeBill")]
        [HttpPost]
        public object Set_BarCodeBill([FromBody] JObject msg)
        {
            var _value = msg["msg"].ToString();
            string msg1 = _value.ToString();
            string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.None);
            string msg2 = sArray[0].ToString();
            string HBillType = sArray[1].ToString();
            string HBillNo = sArray[2].ToString();
            string HOrgName = sArray[3].ToString();
            List<BarCodeMeta> BarCodeMetaList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BarCodeMeta>>(msg2);
            oCN.BeginTran();
            try
            {
                for(int i = 0; i < BarCodeMetaList.Count; i++)
                {
                    if (HBillType == "1205") // é”€å”®å‡ºåº“
                    {
                        if (HOrgName.Contains("兴达") && !string.IsNullOrEmpty(HBillNo))
                        {
                            // å…´è¾¾ é”€å”®å‡ºåº“æ›´æ–° å‘货通知单
                            oCN.RunProcReturn("Update Gy_BarCodeBill set " +
                            "HSeOutStockBillNo='" + HBillNo + "' where HBarCode = '" + BarCodeMetaList[i].HBarCode + "'", "Gy_BarCodeBill");
                        }
                    }
                }
                oCN.Commit();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "修改失败!" + e.Message;
                return objJsonResult;
            }
        }
        #endregion
        #region [获取标签打印指令 CPCL指令]
        [Route("Sc_BarCode/Get_BarCodePrintCode_CPCL")]
        [HttpGet]
        public object Get_BarCodePrintCode_CPCL(string HOrginationName, int HBillInterID, int HBillEntryID, string HViewName, string HBillSubType, int HInterID)
        public object Get_BarCodePrintCode_CPCL(string HOrginationName, string HViewName, string HBillSubType, int HInterID, int HItemID)
        {
            try
            {
                ds = oCN.RunProcReturn("exec h_p_getHBarCodePrintCode_CPCL N'" + HOrginationName + "'" +
                    "," + HBillInterID + "," + HBillEntryID + ",N'" + HViewName + "',N'" + HBillSubType + "'," + HInterID, "h_p_getHBarCodePrintCode_CPCL");
                   ",N'" + HViewName + "',N'" + HBillSubType + "'," + HInterID + "," + HItemID, "h_p_getHBarCodePrintCode_CPCL");
                if((int)ds.Tables[0].Rows[0]["resultType"] == 1)
                {
                    string resultMesg = ds.Tables[0].Rows[0]["payload"].ToString().Replace("\\r\\n", "\r\n");
@@ -1845,12 +1927,12 @@
        #region [APP èŽ·å–æ‰“å°æ¨¡æ¿]
        public class PrintTemplate
        {
            public int Id { get; }
            public string OrgShort { get; }
            public string HBillSubtype { get; }
            public string Format { get; }
            public string Description { get; }
            public string[] Placeholder { get; }
            public int Id { get; set; }
            public string OrgShort { get; set; }
            public string HBillSubtype { get; set; }
            public string Format { get; set; }
            public string Description { get; set; }
            public string[] Placeholder { get; set; }
        }
        [Route("Sc_BarCode/Get_BarCodeGenTemplate")]
@@ -1870,9 +1952,8 @@
                }
                string jsonContent = File.ReadAllText(fileFullPath);
                var templates = JsonConvert.DeserializeObject<PrintTemplate[]>(jsonContent);
                var targetTemplate = templates.FirstOrDefault<PrintTemplate>(t => HOrginationName.Contains(t.OrgShort) && string.Equals(t.HBillSubtype, HBillSubType));
                PrintTemplate[] templates = JsonConvert.DeserializeObject<PrintTemplate[]>(jsonContent);
                PrintTemplate targetTemplate = templates.FirstOrDefault<PrintTemplate>(t => HOrginationName.Contains(t.OrgShort) && string.Equals(t.HBillSubtype, HBillSubType));
                if (targetTemplate != null)
                {
                    objJsonResult.code = "1";
@@ -2444,64 +2525,86 @@
        {
            try
            {
                SQLHelper.ClsCN oCn = new SQLHelper.ClsCN();
                //查询条码信息
                if (HBarCodeNo != null)
                if (string.IsNullOrWhiteSpace(HBarCodeNo))
                {
                    string prefix = HBarCodeNo.Trim() + "-";
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "请输入条码编号";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                    ds = oCn.RunProcReturn("SELECT * FROM h_v_Gy_SplitBarCode WITH(NOLOCK) WHERE HBarCode LIKE '" + prefix + "' + '%' AND HBarCode NOT LIKE  '" + prefix + "'  + '%-%' AND ISNUMERIC(RIGHT(HBarCode, LEN(HBarCode) - LEN( '" + prefix + "' ))) = 1  AND TRY_CAST(RIGHT(HBarCode, LEN(HBarCode) - LEN( '" + prefix + "' )) AS INT) IS NOT NULL ", "Gy_BarCodeBill");
                    if (ds != null || ds.Tables[0].Rows.Count >= 0)
                // åŽ»ç©ºæ ¼
                string cleanBarCode = HBarCodeNo.Trim();
                string prefix = cleanBarCode + "-"; // ç”¨äºŽæŸ¥å­ç 
                SQLHelper.ClsCN oCn = new SQLHelper.ClsCN();
                // 1. å…ˆæŸ¥ç›´æŽ¥å­ç ï¼ˆä¸€çº§å­ç ï¼šxxx-1, xxx-2, ...)
                string sqlSub = @"SELECT * FROM h_v_Gy_SplitBarCode WITH(NOLOCK) WHERE HBarCode LIKE '" + prefix + @"%'
                AND HBarCode NOT LIKE '" + prefix + @"%-%'
                AND ISNUMERIC(RIGHT(HBarCode, LEN(HBarCode) - LEN('" + prefix + @"'))) = 1
                AND TRY_CAST(RIGHT(HBarCode, LEN(HBarCode) - LEN('" + prefix + @"')) AS INT) IS NOT NULL";
                DataSet ds = oCn.RunProcReturn(sqlSub, "Gy_BarCodeBill");
                // 2. å¦‚果有子码 â†’ è¿”回子码 + ä¸‹ä¸€ä¸ªç¼–号
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                    {
                        // æ‰¾å‡ºæœ€å¤§åŽç¼€æ•°å­—,用于生成下一个编号
                        int maxSuffix = 0;
                        foreach (DataRow row in ds.Tables[0].Rows)
                        {
                            string barCode = row["HBarCode"].ToString();
                            string suffixPart = barCode.Substring(prefix.Length); // å– - åŽçš„部分
                            if (int.TryParse(suffixPart, out int num))
                            {
                                if (num > maxSuffix) maxSuffix = num;
                            }
                        string suffix = barCode.Substring(prefix.Length);
                        if (int.TryParse(suffix, out int num) && num > maxSuffix)
                            maxSuffix = num;
                        }
                        // ç”Ÿæˆä¸‹ä¸€ä¸ªå­ç ç¼–号
                        string nextBarCode = $"{HBarCodeNo}-{maxSuffix + 1}";
                    string nextBarCode = $"{cleanBarCode}-{maxSuffix + 1}";
                        objJsonResult.code = "1";
                        objJsonResult.count = 1;
                        objJsonResult.Message = "Sucess!";
                    objJsonResult.count = ds.Tables[0].Rows.Count;
                    objJsonResult.Message = "查询成功,返回直接子码";
                        objJsonResult.data = new
                        {
                            SubBarCodes = ds.Tables[0],        // æ¡ç åŸºç¡€ä¿¡æ¯
                            NextBarCode = nextBarCode          // ä¸‹ä¸€ä¸ªç”Ÿæˆçš„æ¡ç 
                        SubBarCodes = ds.Tables[0],
                        NextBarCode = nextBarCode
                        };
                        return objJsonResult;
                }
                else
                {
                    // 3. æ²¡æœ‰å­ç  â†’ æŸ¥è‡ªå·±
                    string sqlSelf = @"SELECT * FROM h_v_Gy_SplitBarCode WITH(NOLOCK)  WHERE HBarCode = '" + cleanBarCode.Replace("'", "''") + "'";
                    DataSet dsSelf = oCn.RunProcReturn(sqlSelf, "Gy_BarCodeBill");
                    if (dsSelf != null && dsSelf.Tables[0].Rows.Count > 0)
                    {
                        objJsonResult.code = "1";
                        objJsonResult.count = 1;
                        objJsonResult.Message = "该条码无子码,返回自身";
                        objJsonResult.data = new
                        {
                            SubBarCodes = dsSelf.Tables[0],
                            NextBarCode = $"{cleanBarCode}-1"  // å»ºè®®ä»Ž -1 å¼€å§‹
                        };
                    }
                    else
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "条码编号不存在, æç¤º";
                        objJsonResult.Message = "条码不存在,请检查";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }                                       
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "请输入条码编号或拆分条码数";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
               
                return objJsonResult;
            }
            catch (Exception e) //抛出异常
            catch (Exception ex)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.Message = "异常:" + ex.Message;
                objJsonResult.data = null;
                return objJsonResult;
            }