sjz
2025-05-09 597f8e08e6264b2143454e40a7be553d1e8b6df7
2025/5/9 沈
已添加19个文件
已修改10个文件
1838 ■■■■■ 文件已修改
.vs/HM-C#/v17/.wsuo 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HM-C#/v17/DocumentLayout.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/VSWorkspaceState.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/ErpItems.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/MES.Service.csproj 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/LtsLlj.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/MesItems.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/resources/TopSdk.dll 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/PLM/PLMManager.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs 764 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Config/appsettings.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Controllers/Base/LoginController.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Controllers/PLM/PLMController.cs 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HM-C#/v17/.wsuo
Binary files differ
.vs/HM-C#/v17/DocumentLayout.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
{
  "Version": 1,
  "WorkspaceRootPath": "D:\\VISUAL STUDIOS JOB\\HM\\HM-C#\\",
  "Documents": [],
  "DocumentGroupContainers": [
    {
      "Orientation": 0,
      "VerticalTabListWidth": 256,
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": -1,
          "Children": [
            {
              "$type": "Bookmark",
              "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
            }
          ]
        }
      ]
    }
  ]
}
.vs/VSWorkspaceState.json
@@ -2,5 +2,6 @@
  "ExpandedNodes": [
    ""
  ],
  "SelectedNode": "\\MESApplication.sln",
  "PreviewInSolutionExplorer": false
}
StandardInterface/MES.Service/Dto/webApi/ErpItems.cs
@@ -79,4 +79,8 @@
     public string? F_DCSL { get; set; }    //倒冲数量
    public string? F_BZGS { get; set; }    //标准工时
    public string? F_FZMC { get; set; }    //物料分组名称(类型名称)
    public string? MJBM { get; set; }    //模具编码(名称)
      public string? KHWLBM { get; set; }   //客户物料编码
    public string? YS { get; set; }      //颜色
    public string? NEXT_GX { get; set; }      //下道工序
}
StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@

namespace MES.Service.Dto.webApi.PLM;
public class BaseObject
{
    //实体主键
    public long? FID { get; set; }
    //编码
    public string? FCode { get; set; }
    //名称
    public string? FName { get; set; }
}
StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Dto.webApi.PLM;
public class RelatedObject
{
    //实体主键
    public long? FID { get; set; }
    //物料编码
    public string? FRE_FCode { get; set; }
    //相关对象
    public long? FRelatedObject { get; set; }
}
StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Dto.webApi.PLM;
public class StdDocument
{
    //实体主键
    public long? FID { get; set; }
    //编码
    public string? FCode { get; set; }
    //名称
    public string? FName { get; set; }
    //物理文件名
    public string? FPhysicalFileName { get; set; }
    //物理文件
    public string? FFileId { get; set; }
    //关联对象 è½¬çš„ pdf
    public string? FRelevantObject { get; set; }
}
StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
using Newtonsoft.Json;
using System.Collections.Generic;
public class ErpQcIssueResult
{
    public string? ProcessNo { get; set; }
    public string? FReview { get; set; }
    public string? QcStatus { get; set; }  // åŽŸQCSTATU改为规范命名
    // æ–°å¢žåˆå¹¶å­—段
    public string? Remark { get; set; }
    public int? ApplicationQuantity { get; set; }  // ä¿æŒå¯ç©ºæ€§
    public string? Reason { get; set; }
    public string? BadCauses { get; set; }
    public string? AffiliatedWorkshop { get; set; }
    public string? ItemName { get; set; }
    public string? SupplierName { get; set; }
    public string? ItemNo { get; set; }
    public List<string> Applicants { get; set; } = new List<string>();
    public List<string> ApplicationDepartments { get; set; } = new List<string>();
}
StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Dto.webApi.QcIssueResult;
public class QcIssueResult
{
    public ErpQcIssueResult ErpQcIssueResult { get; set; }
}
StandardInterface/MES.Service/MES.Service.csproj
@@ -7,12 +7,19 @@
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="AlibabaCloud.SDK.Dingtalk" Version="2.1.99" />
        <PackageReference Include="Masuit.Tools.Core" Version="2024.3.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.4" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
        <PackageReference Include="SqlSugarCore" Version="5.1.4.158" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="Dto\webApi\SRM\" />
      <Folder Include="Dto\webApi\新文件夹\" />
      <Folder Include="Modes\SRM\" />
      <Folder Include="service\SRM\" />
    </ItemGroup>
@@ -21,6 +28,9 @@
      <Reference Include="Kingdee.CDP.WebApi.SDK">
        <HintPath>resources\Kingdee.CDP.WebApi.SDK.dll</HintPath>
      </Reference>
      <Reference Include="TopSdk">
        <HintPath>resources\TopSdk.dll</HintPath>
      </Reference>
    </ItemGroup>
</Project>
StandardInterface/MES.Service/Modes/LtsLlj.cs
@@ -147,6 +147,18 @@
    public string? SuppName { get; set; }
    /// <summary>
    ///     ç»„织编码
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTID")]
    public string? DEPARTMENTID { get; set; }
    /// <summary>
    ///     ç»„织名称
    /// </summary>
    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
    public string? DEPARTMENTNAME { get; set; }
    /// <summary>
    ///     ç‰©æ–™è§„æ ¼
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_MODEL")]
StandardInterface/MES.Service/Modes/MesItems.cs
@@ -482,5 +482,26 @@
    /// </summary>
    [SugarColumn(ColumnName = "WLFZMC")]
    public string? WLFZMC { get; set; }
    /// <summary>
    ///     æ¨¡å…·ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "MJBM")]
    public string? MJBM { get; set; }
    /// <summary>
    ///     å®¢æˆ·ç‰©æ–™ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "KHWLBM")]
    public string? KHWLBM { get; set; }
    /// <summary>
    ///     é¢œè‰²
    /// </summary>
    [SugarColumn(ColumnName = "YS")]
    public string? YS { get; set; }
    /// <summary>
    ///     ä¸‹é“工序
    /// </summary>
    [SugarColumn(ColumnName = "NEXT_GX")]
    public string? Next_Gx { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
//钉钉用户内码对应表
[SugarTable("MES_STAFF")]
internal class DingNameCode
{
    [SugarColumn(ColumnName = "STAFF_NO")]
    public string? STAFF_NO { get; set; }
    //钉钉用户内码
    [SugarColumn(ColumnName = "STAFF_NAME")]
    public string? STAFF_NAME { get; set; }
    //钉钉用户名称
    [SugarColumn(ColumnName = "PHONE_NUMBER")]
    public string? PHONE_NUMBER { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
public class GetQcIssueResultDetail
{
    //申请数量
    public string? FbatchQty { get; set; }
    //产品名称
    public string? ItemName { get; set; }
    //规格编码
    public string? ItemNo { get; set; }
    //供应商名称
    public string? SuppName { get; set; }
    //测试产品质量状况及申请原因
    public string? AppicationReason { get; set; }
    //订单号(采购单号)
    public string? BadReason { get; set; }
    //备注
    public string? remark { get; set; }
    //检验单号
    public string? ReleaseNo { get; set; }
    //用户内码
    public string? StaffNo { get; set; }
    //评审状态
    public string? IqcStatus { get; set; }
    //申请部门
    public string? Department { get; set; }
    //申请部门
    public string? WorkShop { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
//异常处置单结果表
[SugarTable("MES_QCISSUE_RESULT_APPLICANT")]
public class IqcApplicant
{
    //SEQ_QCISSUE_RESULT_APPLICANT
    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT_APPLICANT")]
    public decimal Id { get; set; }
    //申请人ID
    [SugarColumn(ColumnName = "APPLICANTID")]
    public string? APPLICANTID { get; set; }
    //流程号
    [SugarColumn(ColumnName = "INSTANCEID")]
    public string? INSTANCEID { get; set; }
    //申请人名字
    [SugarColumn(ColumnName = "APPLICANTNAME")]
    public string? APPLICANTNAME { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
//异常处置单结果表
[SugarTable("MES_QCISSUE_RESULT_DEPARTMENT")]
public class IqcDepartment
{
    //SEQ_QCISSUE_RESULT_DEPARTMENT
    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT_DEPARTMENT")]
    public decimal Id { get; set; }
    //申请部门名称
    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
    public string? DEPARTMENTNAME { get; set; }
    //流程号
    [SugarColumn(ColumnName = "INSTANCEID")]
    public string? INSTANCEID { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
//异常处置单结果表
[SugarTable("MES_QCISSUE_RESULT")]
public class QcIssueResults
{
    //SEQ_MES_SCZZD
    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT")]
    public decimal Id { get; set; }
    //来料检验单号
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    //流程号
    [SugarColumn(ColumnName = "INSTANCEID")]
    public string? INSTANCEID { get; set; }
    //处理结果
    [SugarColumn(ColumnName = "FREVIEW")]
    public string? FReview { get; set; }
    //异常处置单是否被拒绝
    [SugarColumn(ColumnName = "QCSTATU")]
    public string? QcStatu { get; set; }
    //申请数量
    [SugarColumn(ColumnName = "APPLICATIONNUM")]
    public string? APPLICATIONNUM { get; set; }
    //不良原因
    [SugarColumn(ColumnName = "BADCAUSES")]
    public string? BADCAUSES { get; set; }
    //所属车间
    [SugarColumn(ColumnName = "BELONGINGWORKSHOP")]
    public string? BELONGINGWORKSHOP { get; set; }
    //评审状态
    [SugarColumn(ColumnName = "REVIEWSTATUS")]
    public string? REVIEWSTATUS { get; set; }
    //物料名称
    [SugarColumn(ColumnName = "ITEMNAME")]
    public string? ITEMNAME { get; set; }
    //物料编码
    [SugarColumn(ColumnName = "ITEMNO")]
    public string? ITEMNO { get; set; }
    //供应商名称
    [SugarColumn(ColumnName = "SUPPLIERNAME")]
    public string? SUPPLIERNAME { get; set; }
    //备注
    [SugarColumn(ColumnName = "REMARK")]
    public string? REMARK { get; set; }
    //产品质量状况及申请原因
    [SugarColumn(ColumnName = "APPLICATIONRESON")]
    public string? APPLICATIONRESON { get; set; }
}
StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.Modes.QcIssueResult;
[SugarTable("MES_QA_ITEMS_DETECT_01")]
public class UpdateMesQaItems
{
    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID",
        IsPrimaryKey = true)]
    public decimal Id { get; set; }
    //送货单号
    [SugarColumn(ColumnName = "RELEASE_NO")]
    public string? ReleaseNo { get; set; }
    //送货单号
    [SugarColumn(ColumnName = "FNG_HANDLE")]
    public string? FngHandle { get; set; }
    //送货单号
    [SugarColumn(ColumnName = "FMRMODE")]
    public string? FMRMODE { get; set; }
    //送货单号
    [SugarColumn(ColumnName = "IS_SJ")]
    public decimal? ISSJ { get; set; }
    //送货单号
    [SugarColumn(ColumnName = "SJ_NO")]
    public string? SJ_NO { get; set; }
}
StandardInterface/MES.Service/resources/TopSdk.dll
Binary files differ
StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs
@@ -218,6 +218,10 @@
             F_DCSL     =item.F_DCSL,
            F_BZGS     =item.F_BZGS,
            WLFZMC=item.F_FZMC,
            MJBM =item.MJBM,
            KHWLBM =item.KHWLBM,
            YS=item.YS,
            Next_Gx = item.NEXT_GX,
        };
    }
StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs
@@ -94,9 +94,9 @@
            .Deleteable<MesRohInData>()
            .Where(s => decimals.Contains(s.Id))
            .ExecuteCommand() > 0;
        if (update && insertOrUpdate) return true;
        throw new NotImplementedException("更新失败");
        return true;
     /*   if (update && insertOrUpdate) return true;
        throw new NotImplementedException("更新失败");*/
    }
    // æ’入或更新数据的方法
StandardInterface/MES.Service/service/PLM/PLMManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
using Kingdee.CDP.WebApi.SDK;
using MES.Service.Dto.webApi.PLM;
using System.Diagnostics;
using System.Text;
namespace MES.Service.service.PLM;
public class PLMManager
{
    public List<StdDocument> RetrieveDrawings(string ItemNo)
    {
        List<BaseObject> baseObjects = GetPlmCfgBase(ItemNo);
        Debug.WriteLine($"第一完整内容(JSON): {Newtonsoft.Json.JsonConvert.SerializeObject(baseObjects, Newtonsoft.Json.Formatting.Indented)}");
        // æ£€æŸ¥è¿”回结果是否为空
        if (baseObjects == null || !baseObjects.Any())
        {
            throw new NotImplementedException("返回结果为空");
        }
        else
        {
            List<RelatedObject> relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID);
            Debug.WriteLine($"第二完整内容(JSON): {Newtonsoft.Json.JsonConvert.SerializeObject(relatedObjects, Newtonsoft.Json.Formatting.Indented)}");
            // æ£€æŸ¥è¿”回结果是否为空
            if (relatedObjects == null || !relatedObjects.Any())
            {
                throw new NotImplementedException("返回结果为空");
            }
            List<StdDocument> stdDocuments = GetPlmStdDocument(relatedObjects);
            return stdDocuments;
        }
    }
    #region 1.通过物料编码(需要唯一)获取物料id
    public List<BaseObject> GetPlmCfgBase(string ItemNo)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_BASE";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        //string fieldKeys = "FCode,FFileId,FRelevantObject";
        //string FilterString = "FID='-2146304'";
        string fieldKeys = "FID,FCode,FName";
        string FilterString = string.Format(@"FCode='{0}'", ItemNo);
        string OrderString = "";
        int TopRowCount = 0;
        int StartRow = 0;
        int Limit = 0;
        var param = new QueryParam()
        {
            FormId = formId,
            FieldKeys = fieldKeys,
            FilterString = FilterString,
            OrderString = OrderString,
            TopRowCount = TopRowCount,
            StartRow = StartRow,
            Limit = Limit
        };
        //调用接口
        var result = client.ExecuteBillQuery(param.ToJson());
        Debug.WriteLine($"第一个元素内容: {result}");
        return result.Select(s =>
        {
            var entity = new BaseObject
            {
                FID = (long)s[0],
                FCode = (string)s[1],
                FName = (string)s[2],
            };
            return entity;
        }).ToList();
    }
    #endregion
    #region 2.通过物料id获取相关对象【下载需要的文档】的id
    public List<RelatedObject> GetPlmCfgRelatedObject(long? FRelatedObject)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_RELATEDOBJECT";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        //string fieldKeys = "FCode,FFileId,FRelevantObject";
        //string FilterString = "FID='-2146304'";
        string fieldKeys = "FID,FRE_FCode,FRelatedObject";
        string FilterString = string.Format(@"FRelatedObject='{0}'", FRelatedObject);
        string OrderString = "";
        int TopRowCount = 0;
        int StartRow = 0;
        int Limit = 0;
        var param = new QueryParam()
        {
            FormId = formId,
            FieldKeys = fieldKeys,
            FilterString = FilterString,
            OrderString = OrderString,
            TopRowCount = TopRowCount,
            StartRow = StartRow,
            Limit = Limit
        };
        //调用接口
        var result = client.ExecuteBillQuery(param.ToJson());
        Debug.WriteLine(result);
        return result.Select(s =>
        {
            var entity = new RelatedObject
            {
                FID = (long)s[0],
                FRE_FCode = (string)s[1],
                FRelatedObject = (long)s[2],
            };
            return entity;
        }).ToList();
    }
    #endregion
    #region 3.根据文档id获取文档物理文件id
    public List<StdDocument> GetPlmStdDocument(List<RelatedObject> relatedObjects)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        string formId = "PLM_STD_DOCUMENT";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        string fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject";
        // æå– FID å€¼
        var fidList = relatedObjects.Select(obj => obj.FID.ToString()).ToList();
        // å°† FID å€¼ç”¨é€—号分隔,并包裹在单引号中
        string fids = string.Join(",", fidList.Select(fid => $"'{fid}'"));
        // æž„建 FilterString
        string FilterString = $"FID in ({fids})";
        string OrderString = "";
        int TopRowCount = 0;
        int StartRow = 0;
        int Limit = 0;
        var param = new QueryParam()
        {
            FormId = formId,
            FieldKeys = fieldKeys,
            FilterString = FilterString,
            OrderString = OrderString,
            TopRowCount = TopRowCount,
            StartRow = StartRow,
            Limit = Limit
        };
        //调用接口
        var result = client.ExecuteBillQuery(param.ToJson());
        return result.Select(s =>
        {
            var entity = new StdDocument
            {
                FID = (long)s[0],
                FCode = (string)s[1],
                FName = (string)s[2],
                FPhysicalFileName = (string)s[3],
                FFileId = (string)s[4],
                FRelevantObject = (string)s[5],
            };
            return entity;
        }).ToList();
    }
    #endregion
}
StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
using Newtonsoft.Json.Linq;
using System.Net;
using System.Text;
namespace ConsoleApp1
{
    #region 1.根据文档物理文件id获取文档流数据
    public class WarehouseDownloadDoc()
    {
        private string _cloudUrl = "http://47.96.178.105/k3cloud";
        private string _warehouse = "http://183.129.128.254:8081/CloudPLMWarehouse";
        #region æ–‡æ¡£æœåŠ¡å™¨ä¸Šä¸‹æ–‡
        private string WarehouseCTX
        {
            get
            {
                string json = "{\"ap1\":{ \"AcctID\":\"" + "68044981e73323" + "\",\"Username\":\"广深\",\"Password\":\"gs@123456\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
                var resp = GetResponse("http://47.96.178.105/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
                string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
                var result = JObject.Parse(ret)["Context"];
                string token = result["UserToken"].ToString();
                var warehouseCtx = string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl, JObject.Parse(ret)["KDSVCSessionId"].ToString());//安全新方式
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));
            }
        }
        #endregion
        #region ç‰©ç†æ–‡ä»¶id
        private string GetFileId(string fileId)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId));
        }
        #endregion
        #region ç”µå­ä»“访问凭证
        private string Token
        {
            get
            {
                var token = Guid.NewGuid().ToString();
                return token;
            }
        }
        #endregion
        #region å‘送请求
        public Stream SendRequest(string op, string fileId)
        {
            var header = new Dictionary<string, string>()
            {
                {"FileID" ,GetFileId(fileId) },
                { "CTX",WarehouseCTX},
                { "token", Token },
                { "PLM_ACCESS_TYPE","pure" }
            };
            return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header, !op.Equals("Download"));
        }
        #endregion
        #region è¯·æ±‚çš„URL
        private string RequestUrl(string op)
        {
            return _warehouse + "/" + op;
        }
        #endregion
        #region èŽ·å–å“åº”
        private HttpWebResponse GetResponse(string url, string bodyJson, Dictionary<string, string> header)
        {
            byte[] data = Encoding.UTF8.GetBytes(bodyJson);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = WebRequestMethods.Http.Post;
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            if (header != null)
            {
                foreach (var p in header)
                {
                    request.Headers.Add(p.Key, p.Value);
                }
            }
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = null;
            try
            {
                resp = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                var res = ex.Response;
                if (res != null)
                {
                    string statusBase64 = ((HttpWebResponse)ex.Response).StatusDescription;//base64编码后的报错信息
                }
            }
            return resp;
        }
        #endregion
        #region ä¿å­˜æ–‡ä»¶åˆ°æœ¬åœ°
        /*private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
        {
            var resp = GetResponse(url, bodyJson, header);
            var resultJson = string.Empty;
            Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate);
            int packageSize = 1024 * 1024;
            byte[] buffer = new byte[packageSize];
            using (stream)
            {
                using (Stream outputStream = resp.GetResponseStream())
                {
                    int readLength = 0;
                    while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0)
                    {
                        stream.Write(buffer, 0, readLength);
                        stream.Flush();
                    }
                    outputStream.Close();
                }
                stream.Close();
            }
        }*/
        #endregion
        #region è¿”回文件流给前端
        private Stream PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
        {
            var resp = GetResponse(url, bodyJson, header);
            return resp.GetResponseStream(); // ç›´æŽ¥è¿”回响应流
        }
        #endregion
    }
    #endregion
}
StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,764 @@
using System;
using System.Collections.Generic;
using AlibabaCloud.OpenApiClient.Models;
using AlibabaCloud.SDK.Dingtalkworkflow_1_0;
using AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models;
using AlibabaCloud.SDK.Dingtalkoauth2_1_0;
using AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models;
using AlibabaCloud.TeaUtil.Models;
using Tea;
using System.Diagnostics;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
using MES.Service.DB;
using MES.Service.Modes.QcIssueResult;
using MES.Service.Dto.webApi.QcIssueResult;
//using MES.Service.Dto.webApi.DeliveryNote;
//using MES.Service.Modes.DeliveryNote;
using Newtonsoft.Json;
using Oracle.ManagedDataAccess.Client;
using System.Data;
using System.Reflection;
using System.Text;
using DingTalk.Api;
using System.Net.Http;
namespace MES.Service.service.QcIssueResult;
//异常处置单结果表
[SugarTable("MES_QA_ITEMS_DETECT_01")]
public class QcIssueResultManager : Repository<QcIssueResults>
{
    /**
     * ä½¿ç”¨ Token åˆå§‹åŒ–账号Client
     * @return Client
     * @throws Exception
     */
    public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient()
    {
        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
        config.Protocol = "https";
        config.RegionId = "central";
        return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);
    }
    public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1()
    {
        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
        config.Protocol = "https";
        config.RegionId = "central";
        return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);
    }
    /**
     * èŽ·å–é’‰é’‰çš„ Access Token
     * @return string è¿”回获取到的 Access Token
     */
    public string GetToken()
    {
        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1();
        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
        {
            AppKey = "ding8nmegrbi29a78ze0",
            AppSecret = "CwWeKXzItBJktsVhGoZi73Ts79bP8qp3FuLmS5PtJgNmMxrWFaqdQQTY0RqCRQSC",
        };
        try
        {
            var response = client.GetAccessToken(getAccessTokenRequest);
            return response.Body.AccessToken; // è¿”回获取到的 Access Token
        }
        catch (TeaException err)
        {
            Console.WriteLine($"TeaException: Code={err.Code}, Message={err.Message}");
            return null;
        }
        catch (Exception _err)
        {
            Console.WriteLine($"Exception: {_err.Message}");
            return null;
        }
    }
    /**
     * æŸ¥çœ‹æœ‰æ— è‡ªé€‰å®¡æ‰¹èŠ‚ç‚¹
     * @return string è¿”回启动结果
     */
    public string GetForecast()
    {
        // èŽ·å– Access Token
        string accessToken = GetToken();
        if (string.IsNullOrEmpty(accessToken))
        {
            return "获取 Access Token å¤±è´¥";
        }
        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders processForecastHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders();
        processForecastHeaders.XAcsDingtalkAccessToken = accessToken;
        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues formComponentValues0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues
        {
            Name = "PhoneField",
            Value = "123xxxxxxxx",
        };
        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest processForecastRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest
        {
            ProcessCode = "PROC-4F4B3976-BA15-47EF-9A3C-3A07AC07DFEA",
            DeptId = 1,
            UserId = "923188102",
            FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues>
            {
                formComponentValues0
            },
        };
        try
        {
            var response = client.ProcessForecastWithOptions(processForecastRequest, processForecastHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
            return $"钉钉工作流实例启动成功: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
        }
        catch (TeaException err)
        {
            return $"TeaException: Code={err.Code}, Message={err.Message}";
        }
        catch (Exception _err)
        {
            return $"Exception: {_err.Message}";
        }
    }
    /**
    * èŽ·å–userid
    * @return string è¿”回启动结果
    */
    public HttpClient _httpClient;
    public string DingTalkService()
    {
        _httpClient = new HttpClient();
        _httpClient.Timeout = TimeSpan.FromSeconds(30);
        return "1";
    }
    public async Task<string> GetUserId(string phone)
    {
        // å‚数验证
        if (string.IsNullOrWhiteSpace(phone))
            throw new ArgumentException("手机号不能为空", nameof(phone));
        // èŽ·å–è®¿é—®ä»¤ç‰Œ
        string accessToken = GetToken();
        // è°ƒç”¨çŽ°æœ‰æ–¹æ³•
        return await GetUserIdByMobile(accessToken, phone);
    }
    public async Task<string> GetUserIdByMobile(string accessToken, string mobile)
    {
        // å‚数验证
        if (string.IsNullOrWhiteSpace(accessToken))
            throw new ArgumentException("Access token cannot be empty", nameof(accessToken));
        if (string.IsNullOrWhiteSpace(mobile) || !IsValidMobile(mobile))
            throw new ArgumentException("Invalid mobile number", nameof(mobile));
        try
        {
            // æž„造请求URL
            var url = $"https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token={accessToken}";
            string m = DingTalkService();
            // æž„造请求体
            var requestBody = new { mobile };
            var jsonContent = JsonConvert.SerializeObject(requestBody);
            var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
            // å‘送请求
            var response = await _httpClient.PostAsync(url, content);
            // å¤„理响应
            response.EnsureSuccessStatusCode();
            var responseBody = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<DingTalkResponse>(responseBody);
            // å¤„理业务逻辑错误
            if (result?.Errcode != 0)
                throw new DingTalkApiException(result?.Errcode ?? -1, result?.Errmsg ?? "Unknown error");
            return result?.Result?.UserId ?? throw new InvalidOperationException("User ID not found in response");
        }
        catch (HttpRequestException ex)
        {
            throw new DingTalkApiException(500, $"HTTP request failed: {ex.Message}", ex);
        }
        catch (JsonException ex)
        {
            throw new DingTalkApiException(500, $"JSON parsing failed: {ex.Message}", ex);
        }
    }
    private bool IsValidMobile(string mobile)
    {
        // ç®€å•的手机号格式验证
        return !string.IsNullOrEmpty(mobile) && mobile.Length == 11 && mobile.StartsWith("1");
    }
    /**
     * å¯åŠ¨é’‰é’‰å·¥ä½œæµå®žä¾‹
     * @return string è¿”回启动结果
     */
    public string GetProcessNo(GetQcIssueResultDetail getQcIssueResultDetail)
    {
        var db = SqlSugarHelper.GetInstance();
        var stafflist = db.Queryable<DingNameCode>()
            .Where(t => t.STAFF_NO == getQcIssueResultDetail.StaffNo)
            .Select(t => new DingNameCode
            {
                STAFF_NAME = t.STAFF_NAME,
                PHONE_NUMBER = t.PHONE_NUMBER
            })
            .ToList();
        if (stafflist.Any())
        {
            Task<string> task = GetUserId(stafflist[0].PHONE_NUMBER);
            string UserId = task.Result;
            string applicationUser = $"[\"{UserId}\"]";
            // ä½¿ç”¨ JSON åºåˆ—化输出对象的详细内容
            string getQcIssueResultDetailJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented);
            Debug.WriteLine("GetQcIssueResultDetail: " + getQcIssueResultDetailJson);
            // èŽ·å– Access Token
            string accessToken = GetToken();
            if (string.IsNullOrEmpty(accessToken))
            {
                return "获取 Access Token å¤±è´¥";
            }
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders();
            Debug.WriteLine(accessToken);
            startProcessInstanceHeaders.XAcsDingtalkAccessToken = accessToken; // ä½¿ç”¨èŽ·å–åˆ°çš„ Access Token
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextField_K5AVR59BD28",
                Value = getQcIssueResultDetail.ItemNo,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextField_1LW382XRH1DS0",
                Value = getQcIssueResultDetail.ItemName,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "NumberField_UKE91Z101BK0",
                Value = getQcIssueResultDetail.FbatchQty,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextField_1QM2NWE9T3Y80",
                Value = getQcIssueResultDetail.SuppName,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues5 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextField_1DAQ9890FDWG0",
                Value = getQcIssueResultDetail.AppicationReason,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues6 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDSelectField_76Z6HC5W1F0",
                Value = getQcIssueResultDetail.BadReason,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues7 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextField_3B85TFIK9Z60",
                Value = getQcIssueResultDetail.remark,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues8 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "InnerContactField_WVZLUIPZ9J40",
                Value = applicationUser,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues9 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDSelectField_1AL6MWUUUOHS0",
                Value = getQcIssueResultDetail.IqcStatus,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues10 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DepartmentField_10ZVNJNJCRJK0",
                Value = getQcIssueResultDetail.Department,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues11 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDSelectField_HG2SQUPO2NK0",
                Value = getQcIssueResultDetail.WorkShop,
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues12 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDPhotoField_QD15KYR764G0",
                Value = "测试不良图片",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues13 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDAttachment_GLZLFSIWK9S0",
                Value = "附件",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues14 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDSelectField_1RN2L4RWQ0AO0",
                Value = "否",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues15 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "InnerContactField_WNG7AU9R2AO0",
                Value = "加签",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues16 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "DDAttachment_23VB5MMC1R1C0",
                Value = "附件",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners targetSelectActioners0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners
            {
                ActionerKey = "null",
                ActionerUserIds = new List<string>
                {
                   UserId
                },
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers
            {
                ActionType = "OR",
                UserIds = new List<string>
                {
                    UserId
                },
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest
            {
                OriginatorUserId = UserId,
                ProcessCode = "PROC-4F4B3976-BA15-47EF-9A3C-3A07AC07DFEA",
                DeptId = 1,
                FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues>
                {
                     formComponentValues1,formComponentValues2,formComponentValues3, formComponentValues4, formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8,
                     formComponentValues9, formComponentValues11
                },
                TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
                {
                    targetSelectActioners0
                },
                Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
                {
                    approvers0
                },
                CcList = new List<string>
                {
                   UserId
                },
                CcPosition = "START",
            };
            // åºåˆ—化 FormComponentValues åˆ—表为 JSON æ ¼å¼
            string formComponentValuesJson = JsonConvert.SerializeObject(startProcessInstanceRequest.FormComponentValues, Formatting.Indented);
            Debug.WriteLine("FormComponentValues: " + formComponentValuesJson);
            try
            {
                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
                Debug.WriteLine("startProcessInstanceRequest内容:");
                Debug.WriteLine(requestContent);
                var response = client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions());
                return $"钉钉工作流实例启动成功: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
            }
            catch (TeaException err)
            {
                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
                Debug.WriteLine("startProcessInstanceRequest内容:");
                Debug.WriteLine(startProcessInstanceRequest);
                return $"TeaException: Code={err.Code}, Message={err.Message}";
            }
            catch (Exception _err)
            {
                return $"Exception: {_err.Message}";
            }
        }
        else
        {
            return "查不到您的手机号";
        }
    }
    /**
     * å°†å¸¦æœ‰æµç¨‹å·å’Œæ£€éªŒå•号的新记录插入表中
     */
    public dynamic SaveProcessNo(string ReleaseNo, string ProcessNo, string StaffNo, string Department)
    {
        var QcIssueResults = GetQcIssueResults(ReleaseNo, ProcessNo);
        var ApplicantResults = GetApplicantResults(ProcessNo, StaffNo);
        var DepartmentResults = GetDepartmentResults(ProcessNo, Department);
        var db = SqlSugarHelper.GetInstance();
        db.Insertable(ApplicantResults).ExecuteCommand(); // æ’入申请人数据
        db.Insertable(DepartmentResults).ExecuteCommand(); // æ’入部门数据
        return UseTransaction(db =>
        {
            try
            {
                // ç»Ÿä¸€ä½¿ç”¨äº‹åŠ¡db
                //SaveOrUpdateApplicantData(db, ApplicantResults);
                //SaveOrUpdateDepartmentData(db, DepartmentResults);
                SaveOrUpdateData(db, QcIssueResults);
                return 1;
            }
            catch
            {
                db.RollbackTran();
                throw;
            }
        });
    }
    public QcIssueResults GetQcIssueResults(string ReleaseNo, string ProcessNo)
    {
        var QcIssueResults = new QcIssueResults
        {
            INSTANCEID = ProcessNo,
            ReleaseNo = ReleaseNo,
            QcStatu = ""
        };
        return QcIssueResults;
    }
    public IqcApplicant GetApplicantResults(string ProcessNo, string StaffNo)
    {
        var db = SqlSugarHelper.GetInstance();
        var stafflist = db.Queryable<DingNameCode>()
           .Where(t => t.STAFF_NO == StaffNo)
           .Select(t => new DingNameCode
           {
               STAFF_NAME = t.STAFF_NAME,
               PHONE_NUMBER = t.PHONE_NUMBER
           })
           .ToList();
        var ApplicantResults = new IqcApplicant
        {
            INSTANCEID = ProcessNo,
            APPLICANTID = StaffNo,
            APPLICANTNAME = stafflist[0].STAFF_NAME
        };
        return ApplicantResults;
    }
    public IqcDepartment GetDepartmentResults(string ProcessNo, string Department)
    {
        var DepartmentResults = new IqcDepartment
        {
            INSTANCEID = ProcessNo,
            DEPARTMENTNAME = Department
        };
        return DepartmentResults;
    }
    /**
    * æ ¹æ®æµç¨‹å·æ›´æ–°è¡¨çš„记录
    */
    public dynamic Save(ErpQcIssueResult erpQcIssueResult)
    {
        //var json = JsonConvert.SerializeObject(erpQcIssueResult);
        ////var saveSuccess = UseTransaction(db =>
        ////{
        ////    var data = GetMesQcIssueResults(erpQcIssueResult);
        ////    return SaveOrUpdateData(db, data);
        ////});
        //return new
        //{
        //    SerializedPayload = json,
        //    ServerTime = DateTime.UtcNow.ToString("O")
        //};
        var mesQcIssueResults = GetMesQcIssueResults(erpQcIssueResult);
        return UseTransaction(db =>
        {
            return SaveOrUpdateData(db, mesQcIssueResults) ? 1 : 0;
        }) > 0;
    }
    public QcIssueResults GetMesQcIssueResults(ErpQcIssueResult erpQcIssueResult)
    {
        var mesQcIssueResults = new QcIssueResults
        {
            INSTANCEID = erpQcIssueResult.ProcessNo,
            FReview = erpQcIssueResult.FReview,
            APPLICATIONNUM = erpQcIssueResult.ApplicationQuantity.ToString(),
            BADCAUSES = erpQcIssueResult.BadCauses,
            BELONGINGWORKSHOP = erpQcIssueResult.AffiliatedWorkshop,
            REVIEWSTATUS = erpQcIssueResult.FReview,
            QcStatu = erpQcIssueResult.QcStatus,
            ITEMNAME = erpQcIssueResult.ItemName,
            ITEMNO = erpQcIssueResult.ItemNo,
            SUPPLIERNAME = erpQcIssueResult.SupplierName,
            REMARK = erpQcIssueResult.Remark,
            APPLICATIONRESON=erpQcIssueResult.Reason
        };
        return mesQcIssueResults;
    }
    /**
    * æ’入和更新数据库表
    */
    private bool SaveOrUpdateData(SqlSugarScope db, QcIssueResults qcIssueResults)
    {
        // æŸ¥è¯¢ QcIssueResults è¡¨ä¸­æ˜¯å¦å­˜åœ¨åŒ¹é…çš„记录
        var mapping = db.Queryable<QcIssueResults>()
            .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID)
            .Select(t => new QcIssueResults
            {
                ReleaseNo = t.ReleaseNo,
            })
            .ToList();
        if (mapping.Any())
        {
            if (qcIssueResults.QcStatu == "拒绝")
            {
                string ReleaseNo = mapping.FirstOrDefault().ReleaseNo;
                // åªæ›´æ–° ReleaseNo å’Œ FReview ä¸¤ä¸ªå­—段
                var updateResult = db.Updateable<QcIssueResults>()
                    .SetColumns(t => new QcIssueResults
                    {
                        ReleaseNo = ReleaseNo,
                        INSTANCEID = qcIssueResults.INSTANCEID,
                        FReview = qcIssueResults.FReview,
                        APPLICATIONNUM = qcIssueResults.APPLICATIONNUM,
                        BADCAUSES = qcIssueResults.BADCAUSES,
                        BELONGINGWORKSHOP = qcIssueResults.BELONGINGWORKSHOP,
                        REVIEWSTATUS = qcIssueResults.REVIEWSTATUS,
                        QcStatu = qcIssueResults.QcStatu,
                        ITEMNAME = qcIssueResults.ITEMNAME,
                        ITEMNO = qcIssueResults.ITEMNO,
                        SUPPLIERNAME = qcIssueResults.SUPPLIERNAME,
                        REMARK = qcIssueResults.REMARK,
                        APPLICATIONRESON=qcIssueResults.APPLICATIONRESON
                    })
                    .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID) // æ˜¾å¼æŒ‡å®šæ›´æ–°æ¡ä»¶
                    .ExecuteCommand();
                // æŸ¥è¯¢ UpdateMesQaItems è¡¨ä¸­æ˜¯å¦å­˜åœ¨åŒ¹é…çš„记录
                var existingRecord = db.Queryable<UpdateMesQaItems>()
                    .Where(it => it.ReleaseNo == ReleaseNo)
                    .First(); // ä½¿ç”¨ First èŽ·å–ç¬¬ä¸€æ¡è®°å½•
                Debug.WriteLine($"查询到的 mapping: {JsonConvert.SerializeObject(existingRecord)}");
                if (existingRecord != null)
                {
                    try
                    {
                        //定义输入参数
                        var inputParam1 = new SugarParameter("pi_no", existingRecord.ReleaseNo);
                        var inputParam2 = new SugarParameter("pi_user", "PL017");
                        // å®šä¹‰è¾“出参数
                        var outParam1 = new SugarParameter("po_result", null, true);
                        var outParam2 = new SugarParameter("po_msg", null, true);
                        // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
                        Db.Ado.ExecuteCommand("BEGIN PRC_MES_IQC_CG_REVOCK(:pi_no,:pi_user,:po_result,:po_msg ); END;", inputParam1, inputParam2, outParam1, outParam2);
                        // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
                        int result = int.Parse((string)outParam1.Value);
                        string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
                        if (result == 1)
                        {
                            //存储过程失败则事务进行回滚
                            db.Ado.RollbackTran();
                            throw new Exception(message);
                        }
                        // æäº¤äº‹åŠ¡
                        db.Ado.CommitTran();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Exception: " + ex.Message);
                        return false;
                    }
                }
                else
                {
                    throw new Exception("未找到需要更新的记录");
                }
            }
            else
            {
                string ReleaseNo = mapping.FirstOrDefault().ReleaseNo;
                // åªæ›´æ–° ReleaseNo å’Œ FReview ä¸¤ä¸ªå­—段
                var updateResult = db.Updateable<QcIssueResults>()
                    .SetColumns(t => new QcIssueResults
                    {
                        ReleaseNo = ReleaseNo,
                        INSTANCEID = qcIssueResults.INSTANCEID,
                        FReview = qcIssueResults.FReview,
                        APPLICATIONNUM = qcIssueResults.APPLICATIONNUM,
                        BADCAUSES = qcIssueResults.BADCAUSES,
                        BELONGINGWORKSHOP = qcIssueResults.BELONGINGWORKSHOP,
                        REVIEWSTATUS = qcIssueResults.REVIEWSTATUS,
                        QcStatu = qcIssueResults.QcStatu,
                        ITEMNAME = qcIssueResults.ITEMNAME,
                        ITEMNO = qcIssueResults.ITEMNO,
                        SUPPLIERNAME = qcIssueResults.SUPPLIERNAME,
                        REMARK = qcIssueResults.REMARK,
                        APPLICATIONRESON = qcIssueResults.APPLICATIONRESON
                    })
                    .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID) // æ˜¾å¼æŒ‡å®šæ›´æ–°æ¡ä»¶
                    .ExecuteCommand();
                // æŸ¥è¯¢ UpdateMesQaItems è¡¨ä¸­æ˜¯å¦å­˜åœ¨åŒ¹é…çš„记录
                var existingRecord = db.Queryable<UpdateMesQaItems>()
                    .Where(it => it.ReleaseNo == ReleaseNo)
                    .First(); // ä½¿ç”¨ First èŽ·å–ç¬¬ä¸€æ¡è®°å½•
                Debug.WriteLine($"查询到的 mapping: {JsonConvert.SerializeObject(existingRecord)}");
                if (existingRecord != null)
                {
                    // æ›´æ–° UpdateMesQaItems è¡¨ä¸­çš„字段
                    existingRecord.FngHandle = qcIssueResults.REVIEWSTATUS;
                    if (existingRecord.FngHandle == "退货")
                    {
                        existingRecord.FMRMODE = "退料补料";
                    }
                    else
                    {
                        existingRecord.FMRMODE = null;
                    }
                    // æ‰§è¡Œæ›´æ–°æ“ä½œ
                    updateResult = db.Updateable(existingRecord).ExecuteCommand();
                    if (updateResult > 0)
                    {
                        try
                        {
                            //定义输入参数
                            var inputParam1 = new SugarParameter("PI_BILLNO", ReleaseNo);
                            var inputParam2 = new SugarParameter("PI_USER", "PL017");
                            var inputParam3 = new SugarParameter("PI_HANDLE", existingRecord.FngHandle);
                            var inputParam4 = new SugarParameter("PI_TLFS", existingRecord.FMRMODE);
                            var inputParam5 = new SugarParameter("PI_REMARK", "");
                            // å®šä¹‰è¾“出参数
                            var outParam1 = new SugarParameter("PO_RESULT", null, true);
                            var outParam2 = new SugarParameter("PO_MSG", null, true);
                            // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
                            Db.Ado.ExecuteCommand("BEGIN PRC_MES_IQC_CG_SUBMIT(:PI_BILLNO,:PI_BILLNO,:PI_HANDLE,:PI_TLFS,:PI_REMARK,:PO_RESULT,:PO_MSG); END;", inputParam1, inputParam2, inputParam3, inputParam4, inputParam5, outParam1, outParam2);
                            // èŽ·å–è¾“å‡ºå‚æ•°çš„å€¼
                            int result = int.Parse((string)outParam1.Value);
                            string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
                            if (result == 1)
                            {
                                //存储过程失败则事务进行回滚
                                db.Ado.RollbackTran();
                                throw new Exception(message);
                            }
                            // æäº¤äº‹åŠ¡
                            db.Ado.CommitTran();
                            return true;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Exception: " + ex.Message);
                            return false;
                        }
                    }
                    return updateResult > 0; // å¦‚果更新成功,返回 true
                }
                else
                {
                    throw new Exception("未找到需要更新的记录");
                }
            }
        }
        else
        {
            // å¦‚æžœ mapping ä¸ºç©ºï¼Œæ’入新记录到 QcIssueResults è¡¨
            var orUpdate = base.Insert(qcIssueResults);
            if (orUpdate) return true;
            throw new NotImplementedException("插入或更新失败");
        }
    }
}
// å“åº”模型
public class DingTalkResponse
{
    [JsonProperty("errcode")]
    public int Errcode { get; set; }
    [JsonProperty("errmsg")]
    public string Errmsg { get; set; }
    [JsonProperty("result")]
    public UserResult Result { get; set; }
}
public class UserResult
{
    [JsonProperty("userid")]
    public string UserId { get; set; }
}
// è‡ªå®šä¹‰å¼‚常
public class DingTalkApiException : Exception
{
    public int ErrorCode { get; }
    public DingTalkApiException(int errorCode, string message) : base(message)
    {
        ErrorCode = errorCode;
    }
    public DingTalkApiException(int errorCode, string message, Exception innerException)
        : base(message, innerException)
    {
        ErrorCode = errorCode;
    }
}
StandardInterface/MESApplication/Config/appsettings.json
@@ -8,10 +8,10 @@
  },
  "AllowedHosts": "*",
  "Version": "1.0.0",
  "X-KDApi-AcctID": "61ce591aee4c5a",
  "X-KDApi-UserName": "mes",
  "X-KDApi-AppID": "310228_4f7q68lG0OG9w9XL5e3q0bXqzgQV4toK",
  "X-KDApi-AppSec": "db05ae60d70e4bd0a8bdb974f8030f6f",
  "X-KDApi-AcctID": "68044981e73323",
  "X-KDApi-UserName": "广深",
  "X-KDApi-AppID": "310990_x3cJ16Do6vC539TFW+6pRy1E6MQ+xooO",
  "X-KDApi-AppSec": "817a815631c24517b931ecebe8f8eae1",
  "X-KDApi-LCID": "2052",
  "X-KDApi-ServerUrl": "http://121.36.245.199/K3cloud/"
  "X-KDApi-ServerUrl": "http://47.96.178.105/k3cloud"
}
StandardInterface/MESApplication/Controllers/Base/LoginController.cs
@@ -1,9 +1,10 @@
using System.Dynamic;
using MES.Service.Dto.@base;
using MES.Service.Dto.@base;
using MES.Service.service;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Dynamic;
namespace MESApplication.Controllers.Base;
@@ -105,4 +106,43 @@
            return ResponseResult.ResponseError(ex);
        }
    }
    public class Root
    {
        public string version { get; set; }
        public string apkUrl { get; set; }
    }
    /// <summary>
    ///    èŽ·å–App最新版本信息
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    [HttpPost("getAppUpgradeInfo")]
    public async Task<ResponseResult> getAppUpgradeInfo()
    {
        try
        {
            HttpClient client = new();
            var requestUrl = $"http://192.168.1.104:8081/UpgradeInformation.json";
            var response = await client.GetAsync(requestUrl);
            response.EnsureSuccessStatusCode(); // æ£€æŸ¥HTTP状态码
            var responseContent = await response.Content.ReadAsStringAsync();
            var a = JsonConvert.DeserializeObject<Root>(responseContent);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = a
            };
        }
        catch (Exception ex)
        {
            return null;
        }
    }
}
StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs
@@ -34,6 +34,7 @@
        entity.Data = JsonConvert.SerializeObject(rohIn);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        entity.Route= rohIn.ErpRohIn.FBillNo;
        try
        {
            dynamic resultInfos = new ExpandoObject();
StandardInterface/MESApplication/Controllers/PLM/PLMController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
using ConsoleApp1;
using MES.Service.service.PLM;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using System.Dynamic;
using System.IO;
namespace MESApplication.Controllers.PLM;
[ApiController]
[Route("api/PLM")]
public class PLMController : ControllerBase
{
    private readonly PLMManager m = new();
    private readonly WarehouseDownloadDoc wdd = new();
    //RetrieveDrawings  è°ƒå–图纸
    [HttpPost("RetrieveDrawings")]
    public ResponseResult RetrieveDrawings(string ItemNo)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos = m.RetrieveDrawings(ItemNo);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
            catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //RetrieveImageFile  è°ƒå–上传到服务器的拍摄文件
    [HttpGet("GetImageNames")]
    public IActionResult GetImageNames(string releaseNo)
    {
        // æ‹¼æŽ¥æœ¬åœ°æ–‡ä»¶ç³»ç»Ÿè·¯å¾„
        string basePath = @"D:\MES_FTP\IQC\"; // æœåС噍D盘下的基础路径
        string folderPath = Path.Combine(basePath, releaseNo); // åŠ¨æ€æ‹¼æŽ¥å•å·å¯¹åº”çš„æ–‡ä»¶å¤¹è·¯å¾„
        // æ£€æŸ¥æ–‡ä»¶å¤¹æ˜¯å¦å­˜åœ¨
        if (!Directory.Exists(folderPath))
        {
            return NotFound($"文件夹 {folderPath} ä¸å­˜åœ¨ã€‚请检查路径是否正确。");
        }
        // èŽ·å–æ–‡ä»¶å¤¹ä¸­çš„æ‰€æœ‰å›¾ç‰‡æ–‡ä»¶åç§°
        string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
        // èŽ·å–æ–‡ä»¶çš„å®Œæ•´è·¯å¾„ï¼Œå¹¶è¿”å›žä¸€ä¸ªåŒ…å«æ–‡ä»¶åå’Œå®Œæ•´è·¯å¾„çš„å¯¹è±¡
        var imageFiles = Directory.GetFiles(folderPath)
            .Where(file => imageExtensions.Any(ext => file.ToLower().EndsWith(ext)))
            .Select(file => new
            {
                FileName = Path.GetFileName(file), // æ–‡ä»¶å
                FilePath = file,
                FileBasePath = ConvertFileToBase64(file) // æ–‡ä»¶çš„ Base64 æ•°æ® // æ–‡ä»¶çš„完整路径
            });
        return Ok(new { success = true, data = imageFiles });
    }
    private string ConvertFileToBase64(string filePath)
    {
        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
        return Convert.ToBase64String(fileBytes);
    }
    [HttpPost("DeleteImageFile")]
    public IActionResult DeleteImageFile([FromQuery] string filePath)
    {
        // æ£€æŸ¥æ–‡ä»¶è·¯å¾„是否为空
        if (string.IsNullOrWhiteSpace(filePath))
        {
            return BadRequest("文件路径不能为空");
        }
        // ç¡®ä¿è·¯å¾„是绝对路径(可以根据需要调整)
        filePath = Path.GetFullPath(filePath);
        // æ£€æŸ¥æ–‡ä»¶æ˜¯å¦å­˜åœ¨
        if (!System.IO.File.Exists(filePath))
        {
            return NotFound("文件不存在");
        }
        try
        {
            // åˆ é™¤æ–‡ä»¶
            System.IO.File.Delete(filePath);
            return Ok("文件删除成功");
        }
        catch (System.Exception ex)
        {
            // æ•获异常并返回错误信息
            return StatusCode(500, $"删除文件时发生错误: {ex.Message}");
        }
    }
    //RetrieveDrawings  è°ƒå–图纸
    [HttpPost("OpenDrawings")]
    public IActionResult OpenDrawings(string fileId,string fName)
    {
        try
        {
            var resultInfos = wdd.SendRequest("Download", fileId);
            return File(resultInfos, "application/octet-stream", fName);
        }
        catch (Exception ex)
        {
            return StatusCode(500, new ResponseResult
            {
                status = 1,
                message = ex.Message,
                data = null
            });
        }
    }
}
StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
using MES.Service.Dto.webApi;
using MES.Service.Dto.webApi.QcIssueResult;
using MES.Service.Modes;
using MES.Service.Modes.QcIssueResult;
//using MES.Service.Modes.SentLaboratory;
using MES.Service.service;
using MES.Service.service.QcIssueResult;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Diagnostics;
using System.Dynamic;
using System.Net;
using System.Text;
using System.Text.Json.Nodes;
using System.Web;
namespace MESApplication.Controllers.QcIssueResult;
[ApiController]
[Route("api/[controller]")]
public class QcIssueResultController : ControllerBase
{
    private readonly MessageCenterManager _manager = new();
    private readonly QcIssueResultManager m = new();
    private readonly string METHOD = "POST";
    private readonly string TableName = "MES_QCISSUE_RESULT";
    private readonly string URL = "http://localhost:10054/api/QcIssueResult/";
    [HttpPost("GetProcessNo")]
    public IActionResult StartDingtalkProcess([FromBody] GetQcIssueResultDetail getQcIssueResultDetail)
    {
        try
        {
            // æ–°å¢žURL解码处理逻辑
            DecodeUrlEncodedProperties(getQcIssueResultDetail);
            // è°ƒç”¨ QcIssueResultManager ä¸­çš„ GetProcessNo æ–¹æ³•来启动钉钉工作流实例
            string result = m.GetProcessNo(getQcIssueResultDetail);
            string getLaboratoryDetailsJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented);
            Debug.WriteLine("getQcIssueResultDetail: " + getLaboratoryDetailsJson);
            string jsonPart = result.Substring(result.IndexOf("{"));
            JObject jsonObject = JObject.Parse(jsonPart);
            // æå–instanceId的值
            string instanceId = jsonObject["InstanceId"].ToString();
            dynamic resultInfos = new ExpandoObject();
            string ProcessNo = instanceId;
            var save = m.SaveProcessNo(getQcIssueResultDetail.ReleaseNo, instanceId,getQcIssueResultDetail.StaffNo,getQcIssueResultDetail.Department);
            resultInfos.tbBillList = save;
            return Ok(result);
        }
        catch (Exception ex)
        {
            // æ•获异常并返回错误信息
            return StatusCode(500, $"启动钉钉工作流实例失败: {ex.Message}");
        }
    }
    // æ–°å¢žè§£ç æ–¹æ³•
    private void DecodeUrlEncodedProperties(object obj)
    {
        if (obj == null) return;
        var properties = obj.GetType().GetProperties();
        foreach (var prop in properties)
        {
            // åªå¤„理字符串类型的属性
            if (prop.PropertyType == typeof(string) && prop.CanWrite)
            {
                var value = prop.GetValue(obj) as string;
                if (!string.IsNullOrEmpty(value))
                {
                    // ä½¿ç”¨UTF8编码进行解码
                    var decodedValue = HttpUtility.UrlDecode(value, Encoding.UTF8);
                    prop.SetValue(obj, decodedValue);
                }
            }
        }
    }
    [HttpPost("Save")]
    public ResponseResult Save(ErpQcIssueResult erpQcIssueResult)
    {
        var entity = new MessageCenter();
        entity.TableName = TableName;
        entity.Url = URL + "Save";
        entity.Method = METHOD;
        entity.Data = JsonConvert.SerializeObject(erpQcIssueResult);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var save = m.Save(erpQcIssueResult);
            //resultInfos.tbBillList = save;
            //entity.Result = 0;
            //if (save) entity.Result = 1;
            //entity.DealWith = 1;
            //_manager.save(entity);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = save
            };
        }
        catch (Exception ex)
        {
            entity.Result = 0;
            entity.DealWith = 0;
            entity.ResultData = ex.Message;
            _manager.save(entity);
            return ResponseResult.ResponseError(ex);
        }
    }
}