cnf
2025-05-07 964b796bb505b036953d16b652c66b03e3616d23
StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs
@@ -19,6 +19,10 @@
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;
@@ -56,8 +60,8 @@
        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 = "dingyzos0r1bizj7g6lr",
            AppSecret = "-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH",
            AppKey = "ding8nmegrbi29a78ze0",
            AppSecret = "CwWeKXzItBJktsVhGoZi73Ts79bP8qp3FuLmS5PtJgNmMxrWFaqdQQTY0RqCRQSC",
        };
        try
@@ -99,7 +103,7 @@
        };
        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest processForecastRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest
        {
            ProcessCode = "PROC-BBA5632D-DC7C-4267-A3E2-757E2B7023BC",
            ProcessCode = "PROC-4F4B3976-BA15-47EF-9A3C-3A07AC07DFEA",
            DeptId = 1,
            UserId = "923188102",
            FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues>
@@ -124,6 +128,85 @@
        }
    }
    /**
    * 获取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");
    }
    /**
     * 启动钉钉工作流实例
@@ -132,19 +215,22 @@
    public string GetProcessNo(GetQcIssueResultDetail getQcIssueResultDetail)
    {
        var db = SqlSugarHelper.GetInstance();
        var mapping = db.Queryable<DingNameCode>()
            .Where(t => t.DingDingName == getQcIssueResultDetail.Fname)
        var stafflist = db.Queryable<DingNameCode>()
            .Where(t => t.STAFF_NO == getQcIssueResultDetail.StaffNo)
            .Select(t => new DingNameCode
            {
               DingDingCode=t.DingDingCode,
                STAFF_NAME = t.STAFF_NAME,
                PHONE_NUMBER = t.PHONE_NUMBER
            })
            .ToList();
        if (mapping.Any())
        {
            string UserId = mapping.FirstOrDefault().DingDingCode;
        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);
@@ -163,68 +249,69 @@
            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-K2AD4O5B",
                Value = getQcIssueResultDetail.ItemName,
                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_DYFD1EESLVC0",
                Value = getQcIssueResultDetail.ItemModel,
                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 = "TextField_1AVN2BNVY1OG0",
                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_1DKEMESOOGSG0",
                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 = "DDDateField_20LKOACGMLXC0",
                Value = DateTime.Now.ToString("yyyy-MM-dd"),
                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 = "TextField_WBNBWGFHR000",
                Value = getQcIssueResultDetail.CgOrder,
                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 = "TextareaField_1ZP3BDPMYY800",
                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 = "SignatureField_SKF9Q82DZUO0",
                Value = getQcIssueResultDetail.Fname,
                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_1AK82Q8A2NB40",
                Value = "退货",
                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 = "TextareaField_1LM82CPPR35S0",
                Value = "挑选内容",
                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 = "TextareaField_AK4JLDDNS2O0",
                Value = "让步接收内容",
                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 = "TextareaField_K69R6770WLS0",
                Value = "退货备注",
                Name = "DDPhotoField_QD15KYR764G0\r\n",
                Value = "测试不良图片",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues13 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
                Name = "TextareaField_194UFGLMI02O0",
                Value = "报废备注",
                Name = "DDAttachment_GLZLFSIWK9S0\r\n",
                Value = "附件",
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues14 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
            {
@@ -245,42 +332,42 @@
            {
                ActionerKey = "null",
                ActionerUserIds = new List<string>
            {
               UserId
            },
                {
                   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
            },
                {
                    UserId
                },
            };
            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest
            {
                OriginatorUserId = UserId,
                ProcessCode = "PROC-BBA5632D-DC7C-4267-A3E2-757E2B7023BC",
                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,formComponentValues10, formComponentValues11, formComponentValues12, formComponentValues13, formComponentValues14
            },
                {
                     formComponentValues1,formComponentValues2,formComponentValues3, formComponentValues4, formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8,
                     formComponentValues9,formComponentValues10, formComponentValues11
                },
                TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
            {
                targetSelectActioners0
            },
                {
                    targetSelectActioners0
                },
                Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
            {
                approvers0
            },
                {
                    approvers0
                },
                CcList = new List<string>
            {
               UserId
            },
                {
                   UserId
                },
                CcPosition = "START",
            };
@@ -307,8 +394,9 @@
                return $"Exception: {_err.Message}";
            }
        }
        else {
            return "您不是公司成员或还未被加入到数据库中或名字填写错误,总之未找到匹配的用户信息";
        else
        {
            return "查不到您的手机号";
        }
    }
@@ -513,4 +601,40 @@
    }
   
}
// 响应模型
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;
    }
}