SM341700btnBC--表达式计算

using Salien.Utility;
using Salien.Utility.SUWF;
using System;
using System.Collections;
using System.Linq;
using System.Web.UI.WebControls;

namespace SM27101btnBC
{
    public class SM27101btnBC : ISuwfBus
    {
        private SlnSuwfPage _page;
        void ISuwfBus.Initial(SlnSuwfPage page)
        {
            _page = page;
            ClsPub.PUB.BindButtonEvent(_page, "btnBC", BtnBC_Click);
        }


        #region BtnBC_Click(object sender, EventArgs e)
        private void BtnBC_Click(object sender, EventArgs e)
        {
            string ID = _page.GetRowDataPrimaryKeys();
            if (SlnString.IsNull(ID) || ID.Contains(','))
            {
                _page.ShowMessage("请勾选需保存的1个订单分录");
                return;
            }

            string username = _page.GetValueByName("sys_username");
            string ZDRID = _page.GetValueByName("sys_userid");
            GridView grd = _page.MainGrid;
            string CPID, CPLX, SL, CCDJ, HSJG, BZ, ZYIDDPQ, ZYIDDPH, JJJE, ZT,CPBCSM;
            CPID = CPLX = SL = CCDJ = HSJG = BZ = ZYIDDPQ= ZYIDDPH = JJJE = ZT = CPBCSM = "";

            foreach (GridViewRow gridRow in grd.Rows)
            {
                if (_page.GridRowIsSelected(gridRow.RowIndex))
                {
                    CPID = _page.GetRowDataByKey(gridRow.RowIndex, "CPID");
                    CPLX = _page.GetRowDataByKey(gridRow.RowIndex, "CPLX");
                    SL = _page.GetRowDataByKey(gridRow.RowIndex, "SL");
                    CCDJ = _page.GetRowDataByKey(gridRow.RowIndex, "CCDJ");
                    HSJG = _page.GetRowDataByKey(gridRow.RowIndex, "HSJG");
                    JJJE = _page.GetRowDataByKey(gridRow.RowIndex, "JJJE");
                    BZ = _page.GetRowDataByKey(gridRow.RowIndex, "BZ");
                    ZYIDDPQ = _page.GetRowDataByKey(gridRow.RowIndex, "ZYIDDPQ");
                    ZYIDDPH = _page.GetRowDataByKey(gridRow.RowIndex, "ZYIDDPH");
                    CPBCSM = _page.GetRowDataByKey(gridRow.RowIndex, "CPBCSM");

                    if (SlnString.IsNull(ZYIDDPQ))
                    {
                        _page.ShowMessage($"第{gridRow.RowIndex + 1}行产品未配置工艺路线;");
                        return;
                    }
                    if (SlnString.IsNull(CPID))
                    {
                        _page.ShowMessage($"第{gridRow.RowIndex + 1}行缺失产品ID信息");
                        return;
                    }
                    if (SlnString.IsNull(SL))
                    {
                        _page.ShowMessage($"第{gridRow.RowIndex + 1}行缺失订单数量信息");
                        return;
                    }
                    if (SlnString.IsNull(CCDJ))
                    {
                        _page.ShowMessage($"第{gridRow.RowIndex + 1}行缺失订单出厂单价信息");
                        return;
                    }

                    if (SlnString.IsNull(ZYIDDPQ))
                    {
                        _page.ShowMessage($"第{gridRow.RowIndex + 1}行缺失调配前的车间信息信息");
                        return;
                    }
                }
            }
            string sql = @"select DL.dlbh as OXQ,
                   DL.ggxh as XGSZ,
                   DL.qt as QTMC,
                   decode(DL.DGM, 1, '无', 0, '有') as DGM,
                   DL.dp as DP,
                   DL.zz as ZZLG,
                   decode(DL.SFPX, 1, '否', 0, '是') as SFPX,
                   DL.qtgz as QTGZ,
                   DL.zsggz as ZSGGZ,
                   DL.id as CPDLMXID,
                   1 as PZZT 
from sm_zdb_cpmx_tb cpmx, sm_zdb_cpdlmx_tb DL, SM_XS_SCDDMX_TB MX 
where cpmx.cpdlmxid = DL.id and cpmx.id = mx.cpmxid and mx.id='" + ID + "'";

            SortedList MySCDDMX_SL = SlnDataAccess.GetValueListBySql(sql);
            string OXQ = ConvertFunction.ObjToStr(MySCDDMX_SL["OXQ"]),
            XGSZ = ConvertFunction.ObjToStr(MySCDDMX_SL["XGSZ"]),
            QTMC = ConvertFunction.ObjToStr(MySCDDMX_SL["QTMC"]),
            DP = ConvertFunction.ObjToStr(MySCDDMX_SL["DP"]),
            DGM = ConvertFunction.ObjToStr(MySCDDMX_SL["DGM"]),
            ZZLG = ConvertFunction.ObjToStr(MySCDDMX_SL["ZZLG"]),
            SFPX = ConvertFunction.ObjToStr(MySCDDMX_SL["SFPX"]),
            QTGZ = ConvertFunction.ObjToStr(MySCDDMX_SL["QTGZ"]),
            ZSGGZ = ConvertFunction.ObjToStr(MySCDDMX_SL["ZSGGZ"]),
            CPDLMXID = ConvertFunction.ObjToStr(MySCDDMX_SL["CPDLMXID"]),
            PZZT = ConvertFunction.ObjToStr(MySCDDMX_SL["PZZT"]);
            string CCJE = ConvertFunction.ObjToStr(CalcCCJE(CCDJ, SL));
            string HSJE = "";
            
            if (!SlnString.IsNull(HSJG))
            {                
                HSJE = ConvertFunction.ObjToStr(CalcHSJE(HSJG, SL));
            }
            else
            {
                ZT = "1";
            }

            if (SlnString.IsNull(ZYIDDPH))
            {
                ZYIDDPH = ZYIDDPQ;
            }
            sql = $"UPDATE SM_XS_SCDDMX_TB SET CCDJ='{CCDJ}',CCJE='{CCJE}',";
            sql += $"HSJG='{HSJG}',HSJE='{""}',BZ='{BZ}',CPBCSM='{CPBCSM}',";
            sql += $"SL='{SL}',CPLX='{CPLX}',ZT='{ZT}',JJJE='{JJJE}',OXQ='{OXQ}',";
            sql += $"XGSZ='{XGSZ}',QTMC='{QTMC}',DP='{DP}',DGM='{DGM}',ZZLG='{ZZLG}',";
            sql += $"SFPX='{SFPX}',QTGZ='{QTGZ}',ZSGGZ='{ZSGGZ}',CPDLMXID='{CPDLMXID}',PZZT='{PZZT}',";
            sql += $"ZYIDDPH = '{ZYIDDPH}' where ID='{ID}'";
           string strMsg = string.Empty;

            try
            {
                strMsg = SlnDataAccess.ExecuteSQL(sql);
                if (SlnString.IsNull(strMsg))
                {
                    strMsg += "生产订单添加成功" + "->";
                    string ssMsg = SlnDataAccess.ExecuteProcedure("SM_SCDDZXTJ_SP(" + ID + ")");
                    if (SlnString.IsNull(ssMsg))
                    {
                        strMsg += "生产执行单添加成功" + "->";
                    }
                    else
                    {
                        strMsg += "生产执行单添加失败:" + ssMsg + "->";
                    }
                }
                else
                {
                    strMsg += "生产订单单添加失败" + "->";
                }
            }
            catch (Exception ex)
            {
                _page.ShowMessage(ex.Message + "|" + strMsg);
            }
            finally
            {
             
            }
            _page.ShowMessage(strMsg);
            _page.btnQuery_Click(null, null);
            return;
        }
        #endregion

        #region  字段值数组转换为字符串列表
        public static string ObjectsToList(Object[] ids)
        {
            string returnValue = string.Empty;
            string stringList = ids.Aggregate("'", (current, t) => current + (t + "', '"));
            returnValue = ids.Length == 0 ? " NULL " : stringList.Substring(0, stringList.Length - 3);
            return returnValue;
        }
        #endregion

        #region 中文字符转为英文字符,ConvertToEn
        public static string ConvertToEn(string strChinese)
        {
            const string ch = "。;,?!、“”‘’()—";//中文字符
            const string en = @".;,?!\""""''()-";//英文字符
            char[] c = strChinese.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                int n = ch.IndexOf(c[i]);
                if (n != -1) c[i] = en[n];
            }
            return new string(c);
        }
        #endregion       

        #region 字符串转换成sql字符,""则返回null,否则返回指定的类型       
        public static string ObjToSqlChar(string str, string strLX)
        {
            string temp;
            temp = str;
            if (temp == "" || temp == null)
            {
                return "null";
            }
            if (temp.Trim() == "")
            {
                return "null";
            }
            switch (strLX)
            {
                case "s":
                    {
                        temp = "'" + temp.Trim() + "'";
                        break;
                    }
                case "d":
                    {
                        temp = "to_date('" + temp.Trim() + "','yyyy-mm-dd hh24:mi:ss')";
                        break;
                    }
            }
            return temp;
        }
        #endregion

        #region 计算出厂金额
        private double CalcCCJE(string CCDJ, string SL)
        {
            SortedList mySL = new SortedList{
                { "CCDJ", CCDJ },
                { "SL", SL },
            };
            return ConvertFunction.ObjToDouble(CalculateResult("CCDJ*SL", mySL));
        }
        #endregion

        #region 计算出厂含税金额
        private double CalcHSJE(string HSJG, string SL)
        {
            SortedList mySL = new SortedList{
                { "HSJG", HSJG },
                { "SL", SL },
            };
            return ConvertFunction.ObjToDouble(CalculateResult("HSJG*SL", mySL));
        }
        #endregion

        #region  string ReturnJson(SM_XS_WGJQTJLInfo WGJQTJL)
        private string ReturnJson(string SCDDMXID, string ZDRID)
        {
            SortedList mySL = new SortedList
            {
               { "SCDDMXID",SCDDMXID}, { "ZDRID",ZDRID}
            };
            return SortedListToWxJson(mySL);
        }
        #endregion

        #region 公式翻译
        /// <summary>
        /// 负责计算公式翻译功能,将(1*8-9)翻译成 -1
        /// </summary>
        ///  SortedList sl = new SortedList();
        //sl.Add("x", 1);   sl.Add("y",2);
        // Console.WriteLine(CalculateResult("(x+y)*y",sl).ToString());
        /// <param name="strExpression">计算公式表达式</param>
        /// <param name="sl">哈希对照表</param>
        /// <returns>成功返回计算公式计算结果,失败返回double.NaN,具体提示信息看属性LastErrMsg</returns>
        public  double CalculateResult(string strExpression, SortedList sl)
        {
            double dblValue = double.NaN;
            string strKey = string.Empty;
            string strValue = string.Empty;

            foreach (DictionaryEntry de in sl)
            {
                strKey = de.Key.ToString();

                if (strExpression.IndexOf(strKey) != -1)
                {
                    strExpression = strExpression.Replace(strKey, de.Value.ToString());
                }
            }

            ClsEvaluat objEvaluat = new ClsEvaluat(strExpression);
            dblValue = objEvaluat.Evaluat();

            if (objEvaluat.ErrMsg != null && objEvaluat.ErrMsg != "")
            {
                throw new Exception(objEvaluat.ErrMsg);
            }
            return dblValue;
        }
        #endregion

        #region 更新SQL语句       
        public  string BuildUpdateSQL(string strTableName, SortedList slFieldValues, string strPrimaryKey)
        {
            if (((slFieldValues == null) || (slFieldValues.Keys == null)) || (slFieldValues.Keys.Count <= 0))
            {
                throw new Exception("参数错误,字段值列表不能为空!");
            }
            if (strPrimaryKey.Length == 0)
            {
                throw new Exception("参数错误, 主键字段不能为空!");
            }
            string strSQL = "";
            string strUpdates = "";
            string strSet = "";
            string strWhere = "";
            string strKey = "";

            string strVal = "";


            foreach (object objKey in slFieldValues.Keys)
            {
                strKey = objKey.ToString().ToUpper();
                strSet = "";

                if (slFieldValues[objKey.ToString()] != null)
                {
                    strSet = "";
                    strVal = slFieldValues[objKey].ToString().Trim();
                    if (strVal.ToString().ToLower().IndexOf("to_date") >= 0) /*判断是否日期型*/
                    {
                        strSet = objKey.ToString() + "=" + strVal + "";
                    }
                    else
                    {
                        strSet = objKey.ToString() + " = " + "'" + strVal + "'";
                    }

                    if (objKey.ToString().Trim().ToUpper() == strPrimaryKey.Trim().ToUpper())
                    {
                        strWhere = " where " + strSet;
                    }
                    else
                    {
                        strUpdates = strUpdates + strSet + ",";
                    }
                }
            }

            if (strUpdates.Length > 0)
            {
                strUpdates = strUpdates.Substring(0, strUpdates.Length - 1);
                strSQL = "update " + strTableName + " set " + strUpdates + strWhere;
            }
            if (strSQL == "")
            {
                throw new Exception("错误,建立的SQL语句为空!");
            }
            return strSQL;
        }
        #endregion

        #region SortedList表转JSON方法
        /// <summary>
        /// Hashtable表转JSON
        /// </summary>
        /// <param name="data"></param>
        /// <returns>var postData = new Hashtable();postData.Add("openid", "55");postData.Add("card_id", "55");</returns>
        public string SortedListToWxJson(SortedList mySL)
        {
            try
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("{");                
                foreach (DictionaryEntry e in mySL)
                {
                    object value = e.Value;
                    sb.Append("\"");
                    sb.Append(e.Key);
                    sb.Append("\":\"");
                    if (!String.IsNullOrEmpty(value.ToString()) && value != DBNull.Value)
                    {
                        sb.Append(value).Replace("\\", "/");
                    }
                    else
                    {
                        sb.Append("");
                    }
                    sb.Append("\",");
                }
                sb = sb.Remove(sb.Length - 1, 1);
                sb.Append("}");
                return sb.ToString();
            }
            catch (Exception)
            {
                return "";
            }
        }
        #endregion
    }
}
posted @ 2025-08-08 16:10  知行一体2  阅读(4)  评论(0)    收藏  举报