快乐的昕的电脑
2025-11-28 f44e51ecb4e3206a962493df7450b5dc3375b159
标准版
已修改11个文件
已添加2个文件
391 ■■■■ 文件已修改
Controllers/Kingdee/ErpBOMController.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/ErpKc.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NewPdaSqlServer.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/ErpMesKc.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/ErpBOMManager.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/ErpKcManager.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/QC/OaApi.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesInvItemInCDetailsManager.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Wom/WomdaaManager.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/base/LoginService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/AppSettings.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/AppsettingsUtility.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Kingdee/ErpBOMController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
using System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.util;
using MES.Service.service.Kingdee;
namespace NewPdaSqlServer.Controllers.Kingdee;
[ApiController]
[Route("api/[controller]")]
public class ErpBOMController : ControllerBase
{
    private readonly ErpBOMManager kc = new();
    //
    [HttpPost("Save")]
    public ResponseResult Save()
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos = kc.QueryErpBOM();
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}
Dto/ErpKc.cs
@@ -14,4 +14,15 @@
        public string? FSTOREURNUM { get; set; }
        public string? FStockOrgId { get; set; }
    }
    public class ErpBom
    {
        public string? FITEMPPROPERTY { get; set; }
        public string? FMATERIALID { get; set; }
        public string? FITEMNAME { get; set; }
        public string? FENTRYID { get; set; }
        public string? FCHILDITEMNAME { get; set; }
        public string? FNUMERATOR { get; set; }
        public string? FDENOMINATOR { get; set; }
    }
}
NewPdaSqlServer.csproj
@@ -7,6 +7,7 @@
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Kingdee.CDP.WebApi.SDK" Version="1.0.2" />
        <PackageReference Include="Masuit.Tools.Core" Version="2024.5.8" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.8" />
        <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" />
appsettings.json
@@ -9,8 +9,8 @@
  "AppSettings": {
    "TestErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
    "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
    //"DataBaseConn": "Data Source=192.168.1.146,12468;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest;Encrypt=True;TrustServerCertificate=True;"
    "DataBaseConn": "Data Source=192.168.1.146,12468;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;"
    "DataBaseConn": "Data Source=172.100.1.114,12468;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest;Encrypt=True;TrustServerCertificate=True;"
    //"DataBaseConn": "Data Source=172.100.1.114,12468;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;"
  },
  "Version": "1.0.0",
  "X-KDApi-AcctID": "6244701c616bff",
entity/ErpMesKc.cs
@@ -48,3 +48,34 @@
    public decimal? FStockOrgId { get; set; }
}
[SugarTable("ERP_BOM")]
public class ErpBOM
{
    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
    public Guid ID { get; set; }
    /// <summary>
    ///     é»˜è®¤å€¼: (newid())
    /// </summary>
    [SugarColumn(ColumnName = "ItemProperty")]
    public string? ItemProperty { get; set; }
    [SugarColumn(ColumnName = "ItemId")]
    public int? ItemId { get; set; }
    [SugarColumn(ColumnName = "ItemName")]
    public string? ItemName { get; set; }
    [SugarColumn(ColumnName = "ChildItemId")]
    public int? ChildItemId { get; set; }
    [SugarColumn(ColumnName = "ChildItemName")]
    public string? ChildItemName { get; set; }
    [SugarColumn(ColumnName = "Numerator")]
    public decimal? Numerator { get; set; }
    [SugarColumn(ColumnName = "Denominator")]
    public decimal? Denominator { get; set; }
}
service/ErpBOMManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@

using Kingdee.CDP.WebApi.SDK;
using MES.Service.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.util;
using Newtonsoft.Json;
using SqlSugar;
using System.Text;
namespace MES.Service.service.Kingdee;
public class ErpBOMManager : Repository<ErpBOM>
{
    #region èŽ·å–BOM
    public bool QueryErpBOM()
    {
        List<ErpBom> bom = GetErpBOM();
        // æ£€æŸ¥è¿”回结果是否为空
        if (bom == null || bom.Count == 0)
        {
            throw new NotImplementedException("返回结果为空");
        }
        else
        {
            var baseObjects = MapErpBOMtoMes(bom);
            return UseTransaction(db =>
            {
                return SaveBOMData(db, baseObjects) ? 1 : 0;
            }) > 0;
        }
    }
    private bool SaveBOMData(SqlSugarScope db, List<ErpBOM> kcc)
    {
        Db.Deleteable<ErpBOM>()
          .ExecuteCommand();
        var save = base.InsertRange(kcc);
        if (save) return true;
        throw new NotImplementedException("插入失败");
    }
    public List<ErpBom> GetErpBOM()
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        string formId = "ENG_BOM";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        //string fieldKeys = "FCod,FFileId,FRelevantObject";
        //string FilterString = "FID='-2146304'";
        string fieldKeys = "FITEMPPROPERTY ,FMATERIALID  ,FITEMNAME ,FTreeEntity_FENTRYID ,FCHILDITEMNAME ,FNUMERATOR , FDENOMINATOR";
        var filterString = new[]
                            {
                                new
                                {
                                    FieldName = "FITEMPPROPERTY",
                                    Compare = "29",
                                    Value = "3",
                                    Left = "(",
                                    Right = ")",
                                    Logic = 0
                                }
                            };
        var param = new QueryParams()
        {
            FormId = formId,
            FieldKeys = fieldKeys,
            FilterString = filterString
        };
        //调用接口
        var result = client.ExecuteBillQuery(param.ToJson());
        return result.Select(s =>
        {
            var entity = new ErpBom
            {
                FITEMPPROPERTY = s[0]?.ToString(),
                FMATERIALID = s[1]?.ToString(),
                FITEMNAME = s[2]?.ToString(),
                FENTRYID = s[3]?.ToString(),
                FCHILDITEMNAME = s[4]?.ToString(),
                FNUMERATOR = s[5]?.ToString(),
                FDENOMINATOR = s[6]?.ToString()
            };
            return entity;
        }).ToList();
    }
    private class QueryParams :BaseEntify
    {
        public string FormId { get; set; }
        public string FieldKeys { get; set; }
        public object[] FilterString { get; set; }
    }
    private List<ErpBOM> MapErpBOMtoMes(List<ErpBom> dtoList)
    {
        var ErpMesBomList = new List<ErpBOM>();
        foreach (var dto in dtoList)
        {
            var kc = new ErpBOM
            {
                ID = Guid.NewGuid(),
                ItemProperty = dto.FITEMPPROPERTY,
                ItemId = Convert.ToInt32(dto.FMATERIALID),
                ItemName = dto.FITEMNAME,
                ChildItemId = Convert.ToInt32(dto.FENTRYID),
                ChildItemName = dto.FCHILDITEMNAME,
                Numerator = Convert.ToDecimal(dto.FNUMERATOR),
                Denominator = Convert.ToDecimal(dto.FDENOMINATOR)
            };
            ErpMesBomList.Add(kc);
        }
        return ErpMesBomList;
    }
    #endregion
}
service/ErpKcManager.cs
@@ -1,13 +1,15 @@

using Kingdee.CDP.WebApi.SDK;
using MES.Service.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.util;
using Newtonsoft.Json;
using SqlSugar;
using NewPdaSqlServer.DB;
using System.Text;
using NewPdaSqlServer.Dto;
using Microsoft.AspNetCore.Mvc;
using MES.Service.Models;
namespace MES.Service.service.Kingdee;
service/QC/OaApi.cs
@@ -408,57 +408,82 @@
    private JArray BuildDetailData(dynamic queryObj)
    {
        // ä½¿ç”¨å‚数化查询获取明细数据
        const string mainSql = @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl,
               chouQty AS cys, badQty AS bls, badProb AS bll,C.USER_NAME AS jyr
            from Mes_QC_Exceptional_Detail A
            LEFT JOIN MES_QA_ITEMS_DETECT_01 B ON A.releaseNo = B.release_no
            LEFT JOIN SYS_USER C ON C.ACCOUNT = B.fcheck_by
            WHERE pGuid = @guid";
        var details = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid });
        var tableRecords = new JArray();
        // éåŽ†æ¯æ¡æ˜Žç»†æ•°æ®
        foreach (var record in details ?? Enumerable.Empty<dynamic>())
        // å°†ç›´æŽ¥SQL查询替换为存储过程调用
        var parameters = new[]
        {
            // ä¿®æ­£å­—段类型转换(数值类型去除字符串包裹)
            var fields = new JArray
            {
                //new JObject { ["fieldName"] = "xh", ["fieldValue"] = record.xh?.ToString() ?? "" },
                new JObject { ["fieldName"] = "jydh", ["fieldValue"] = record.jydh?.ToString() ?? "" },
                 new JObject { ["fieldName"] = "jyr", ["fieldValue"] = record.jyr?.ToString() ?? "" },
                new JObject {
                    ["fieldName"] = "jydrq",
                    // æ ¼å¼åŒ–为"yyyy-MM-dd"字符串
                    ["fieldValue"] = (record.jydrq != null
                        ? Convert.ToDateTime(record.jydrq).ToString("yyyy-MM-dd ")
                        : DateTime.Now.ToString("yyyy-MM-dd"))
                },
                // æ•°å€¼å­—段保持数字类型而非字符串
                // ä¿®æ­£æ•°å€¼ç±»åž‹è½¬æ¢æ–¹å¼
                new JObject { ["fieldName"] = "sjsl", ["fieldValue"] = (float)(record.sjsl ?? 0m) },
                new JObject { ["fieldName"] = "cys", ["fieldValue"] = (float)(record.cys ?? 0) },
                new JObject { ["fieldName"] = "bls", ["fieldValue"] = (float)(record.bls ?? 0) },
                new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1, }
            };
            tableRecords.Add(new JObject
            {
                ["recordOrder"] = 0,  // å®žé™…业务中可能需要根据行号设置
                ["workflowRequestTableFields"] = fields
            });
        }
        return new JArray
        {
            new JObject
            {
                ["tableDBName"] = "formtable_main_321_dt1",//测试:formtable_main_33_dt1
                ["workflowRequestTableRecords"] = tableRecords
            }
            new SugarParameter("@pi_guid", queryObj.qcczdGuid),
            new SugarParameter("@inP1", null),
            new SugarParameter("@inP2", null),
            new SugarParameter("@inP3", null),
            new SugarParameter("@inP4", null)
        };
        try
        {
            var details = Db.Ado.SqlQuery<dynamic>(
                "EXEC select_oa_BuildDetailData @pi_guid,@inP1,@inP2,@inP3,@inP4",
                parameters);
            var tableRecords = new JArray();
            // éåŽ†æ¯æ¡æ˜Žç»†æ•°æ®
            foreach (var record in details ?? Enumerable.Empty<dynamic>())
            {
                // ä¿®æ­£å­—段类型转换(数值类型去除字符串包裹)
                var fields = new JArray
                {
                    //new JObject { ["fieldName"] = "xh", ["fieldValue"] = record.xh?.ToString() ?? "" },
                    new JObject { ["fieldName"] = "jydh", ["fieldValue"] = record.jydh?.ToString() ?? "" },
                    new JObject { ["fieldName"] = "jyr", ["fieldValue"] = record.jyr?.ToString() ?? "" },
                    new JObject { ["fieldName"] = "xblb", ["fieldValue"] = record.xblb?.ToString() ?? "" },
                    new JObject {
                        ["fieldName"] = "jydrq",
                        // æ ¼å¼åŒ–为"yyyy-MM-dd"字符串
                        ["fieldValue"] = (record.jydrq != null
                            ? Convert.ToDateTime(record.jydrq).ToString("yyyy-MM-dd ")
                            : DateTime.Now.ToString("yyyy-MM-dd"))
                    },
                    // æ•°å€¼å­—段保持数字类型而非字符串
                    // ä¿®æ­£æ•°å€¼ç±»åž‹è½¬æ¢æ–¹å¼
                    new JObject { ["fieldName"] = "sjsl", ["fieldValue"] = (float)(record.sjsl ?? 0m) },
                    new JObject { ["fieldName"] = "cys", ["fieldValue"] = (float)(record.cys ?? 0) },
                    new JObject { ["fieldName"] = "bls", ["fieldValue"] = (float)(record.bls ?? 0) },
                    new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1, }
                };
                tableRecords.Add(new JObject
                {
                    ["recordOrder"] = 0,  // å®žé™…业务中可能需要根据行号设置
                    ["workflowRequestTableFields"] = fields
                });
            }
            return new JArray
            {
                new JObject
                {
                    ["tableDBName"] = "formtable_main_321_dt1",//测试:formtable_main_33_dt1
                    ["workflowRequestTableRecords"] = tableRecords
                }
            };
        }
        catch (Exception ex)
        {
            throw new Exception($"查询异常明细失败: {ex.Message}");
        }
        // // ä½¿ç”¨å‚数化查询获取明细数据
        // const string mainSql = @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl,
        //        chouQty AS cys, badQty AS bls, badProb AS bll,C.USER_NAME AS jyr
        //     from Mes_QC_Exceptional_Detail A
        //     LEFT JOIN MES_QA_ITEMS_DETECT_01 B ON A.releaseNo = B.release_no
        //     LEFT JOIN SYS_USER C ON C.ACCOUNT = B.fcheck_by
        //     WHERE pGuid = @guid";
        // var details = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid });
    }
    private JObject BuildOtherParams()
service/Warehouse/MesInvItemInCDetailsManager.cs
@@ -104,6 +104,33 @@
        }
        // ========== æ–°å¢žï¼šéªŒè¯å½“前库位与物料默认库位是否一致 ==========
        // èŽ·å–ç‰©æ–™ä¿¡æ¯
        var mesItems = Db.Queryable<MesItems>()
            .Where(s => s.Id == itemBarcodeDetails.ItemId)
            .First();
        if (mesItems == null)
            throw new Exception("找不到对应的物料信息!");
        // æ£€æŸ¥ç‰©æ–™æ˜¯å¦æœ‰é»˜è®¤åº“位设置
        if (!string.IsNullOrEmpty(mesItems.DepotCode))
        {
            // èŽ·å–ç‰©æ–™é»˜è®¤åº“ä½å¯¹åº”çš„ä»“åº“ä¿¡æ¯
            var defaultDepot = Db.Queryable<MesDepots>()
                .Where(d => d.DepotCode == mesItems.DepotCode)
                .First();
            if (mesItems.DepotCode != null && mesItems.DepotCode != "0")
            {
                // æ¯”较当前扫描的库位所属仓库编码与物料默认仓库编码是否一致
                if (mesDepost.DepotId?.ToString() != mesItems.DepotCode)
                {
                    throw new Exception($"当前库位所属仓库[{mesDepost.DepotId}]与物料默认仓库[{mesItems.DepotCode}]不一致,请扫描正确的库位!");
                }
            }
        }
        //num = Db.Queryable<MesInvItemInCDetails>()
        //    .Where(it => it.ItemBarcode == itemBarcode)
        //    .Count();
service/Wom/WomdaaManager.cs
@@ -1423,7 +1423,7 @@
        var sqlParams = new List<SugarParameter> { };
        var sql2 = new StringBuilder(@"
SELECT NAME,line_no FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no");
SELECT NAME,line_no,agvPostion FROM MES_WORKSHOP_LINE WHERE isAgv = 1 ORDER BY line_no");
        var XtItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
@@ -1505,6 +1505,7 @@
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                    new("@pi_xtNum", SqlDbType.NVarChar, 100) { Value = query.XtNum },
                    new("@in1", SqlDbType.NVarChar, 100) { Value = query.AgvDw },
                    new("@outMsg", SqlDbType.NVarChar, 2500) { Direction = ParameterDirection.Output },
                    new("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output }
                };
service/base/LoginService.cs
@@ -96,7 +96,7 @@
                    var icoimg = "";
                    if (mesFile != null)
                        icoimg = "http://192.168.1.145:81/upload/" +
                        icoimg = AppsettingsUtility.Settings.ImageUploadUrl +
                                 mesFile.UrlPath;
                    groupObj.child.Add(new MesSysPageview
util/AppSettings.cs
@@ -5,4 +5,5 @@
    public string TestErpUrl { get; set; }
    public string ProductionErpUrl { get; set; }
    public string DataBaseConn { get; set; }
    public string ImageUploadUrl { get; set; }
}
util/AppsettingsUtility.cs
@@ -11,6 +11,7 @@
        myOwn.TestErpUrl = configuration["AppSettings:TestErpUrl"];
        myOwn.ProductionErpUrl = configuration["AppSettings:ProductionErpUrl"];
        myOwn.DataBaseConn = configuration["AppSettings:DataBaseConn"];
        myOwn.ImageUploadUrl = configuration["AppSettings:ImageUploadUrl"];
        Settings = myOwn;
    }
}