zrg
2025-10-15 ea294fd0304499aa079c4c99a947ad8120812253
优化仓位为动态获取的
1个文件已修改
65 ■■■■■ 已修改文件
zymes/OperationService/zymes_RealessStock.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zymes/OperationService/zymes_RealessStock.cs
@@ -23,6 +23,9 @@
    public class zymes_RealessStock : AbstractOperationServicePlugIn
    {
        Dictionary<string, string> dictionary = new Dictionary<string, string>();
        // 添加一个字段来存储字段名
        private string _locationFieldName = "FF100001"; // 默认值
        public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e)
        {
            base.OnPrepareOperationServiceOption(e);
@@ -46,6 +49,10 @@
            foreach (var billObj in e.DataEntitys)
            {                
                var id = billObj["Id"].ToString();
                // 第一步:获取仓位字段名
                _locationFieldName = GetLocationFieldName(id);
                string sql = string.Empty;
                sql = string.Format(@"
                /*dialect*/
@@ -65,10 +72,10 @@
                join T_BD_STOCK st on t1.FSTOCKID = st.FSTOCKID 
                join T_BD_STOCK_l stl on t1.FSTOCKID = stl.FSTOCKID  and stl.FLOCALEID = 2052
                join T_BAS_FLEXVALUESDETAIL t2 on t1.FSTOCKLOCID = t2.FID             
                join T_BAS_FLEXVALUESENTRY t3 on t2.FF100001 = t3.FENTRYID--仓位值集列表明细
                join T_BAS_FLEXVALUESENTRY t3 on t2.{1} = t3.FENTRYID--仓位值集列表明细
                join T_BAS_FLEXVALUESENTRY_L t4 on t3.FENTRYID=t4.FENTRYID
                where t1.fstockid= {0}
                ", id);
                ", id,_locationFieldName);
                //斯莫尔仓位集的值是  t2.FF100006
                //47测试可以用  t2.FF100001
@@ -135,6 +142,60 @@
                ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value);
            }
        }
        // 新增方法:获取仓位字段名
        private string GetLocationFieldName(string stockId)
        {
            try
            {
                // 首先获取所有可能的字段名
                string getColumnsSql = @"
            /*dialect*/
            SELECT COLUMN_NAME
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'T_BAS_FLEXVALUESDETAIL'
            AND COLUMN_NAME LIKE 'FF1%'
            ORDER BY COLUMN_NAME";
                DataSet columnsDs = DBServiceHelper.ExecuteDataSet(Context, getColumnsSql);
                DataTable columnsDt = columnsDs.Tables[0];
                // 在代码层面逐个检查字段
                foreach (DataRow row in columnsDt.Rows)
                {
                    string columnName = row["COLUMN_NAME"].ToString();
                    string checkSql = $@"
                /*dialect*/
                SELECT COUNT(1) as HasData
                FROM T_BD_FLEXVALUESCOM t1
                JOIN T_BAS_FLEXVALUESDETAIL t2 ON t1.FSTOCKLOCID = t2.FID
                JOIN T_BAS_FLEXVALUESENTRY t3 ON t2.{columnName} = t3.FENTRYID
                JOIN T_BAS_FLEXVALUESENTRY_L t4 ON t3.FENTRYID = t4.FENTRYID
                WHERE t1.fstockid = {stockId}
                AND t4.FNAME IS NOT NULL";
                    DataSet checkDs = DBServiceHelper.ExecuteDataSet(Context, checkSql);
                    DataTable checkDt = checkDs.Tables[0];
                    if (checkDt.Rows.Count > 0 && Convert.ToInt32(checkDt.Rows[0]["HasData"]) > 0)
                    {
                        LogService.Write($"成功获取到仓位字段名: {columnName} 用于仓库ID: {stockId}");
                        return columnName;
                    }
                }
                LogService.Write($"未找到仓库 {stockId} 对应的仓位字段,使用默认值 FF100001");
                return "FF100001";
            }
            catch (Exception ex)
            {
                LogService.Write($"获取仓位字段名时发生异常: {ex.Message},使用默认值 FF100001");
                return "FF100001";
            }
        }
        public static class ResultMessage
        {/// <summary>
         /// 修改提示信息