using AlibabaCloud.SDK.Dingtalkh5package_1_0.Models;
using AlibabaCloud.SDK.Dingtalkvillage_1_0.Models;
using DSWeb.Areas.CommMng.DAL;
using DSWeb.Areas.Dispatch.Helper;
using DSWeb.Areas.MvcShipping.DB;
using DSWeb.Areas.MvcShipping.Job;
using DSWeb.Areas.MvcShipping.Models.MsOpSeaeBaoXian;
using DSWeb.Common.DB;
using HcUtility.Comm;
using java.rmi.server;
using java.util;
using log4net;
using Microsoft.Office.Interop.Excel;
using Newtonsoft.Json;
using NPOI.OpenXmlFormats.Wordprocessing;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics.Contracts;
using System.IO;
using System.Linq;
using System.Runtime.Caching;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Web;
using Tea;
using static DSWeb.Areas.CommMng.Controllers.WorkFlowController;
using static DSWeb.Areas.MvcShipping.Helper.DingTalk_SendAuditWork;
using Newtonsoft.Json.Linq;
using sun.tools.jar.resources;
using System.Data.Entity.Migrations;
using AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models;
using NPOI.SS.Formula.Functions;
using System.Text.RegularExpressions;
using DSWeb.MvcShipping.Models.DingTalkSet;
using HcUtility.Core;
using DSWeb.MvcShipping.DAL.MsCodeDingTalkSet;
using DSWeb.Areas.Account.DAL.Chfee_Payapplication;
using DSWeb.MvcShipping.DAL.Chfee_AuditDAL;
using DSWeb.Areas.MvcShipping.DAL;
using DSWeb.MvcShipping.DAL.MsChFeeDAL;
using DSWeb.MvcShipping.Models.MsOp_BLISSUE;
using DSWeb.Areas.MvcShipping.DAL.MsOp_BLISSUE;
using static java.security.cert.CertPathValidatorException;
namespace DSWeb.Areas.Dispatch.Helper
{
public static class DingTalkHelper
{
public static readonly string DingTalkAccessTokenStoreKey = "DingTalkToken";
private static ILog logger = LogManager.GetLogger("DingTalkHelper");
///
/// 发送工作通知
/// https://open-dev.dingtalk.com/apiExplorer#/?devType=org&api=dingtalk.oapi.message.corpconversation.asyncsend_v2
///
///
///
///
///
public static bool SendMessage(string uid, string msg)
{
DingTalkContext dingTalkContext = new DingTalkContext();
var pAgentid = dingTalkContext.ParamSets.FirstOrDefault(p => p.PARAMNAME == "DingTalkAgentid");
if (pAgentid == null || string.IsNullOrWhiteSpace(pAgentid.PARAMVALUE))
{
throw new Exception("钉钉Agentid参数配置错误");
}
var user = dingTalkContext.Users.FirstOrDefault(u => u.GID == uid);
if (user != null && !string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
var token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
var json = new
{
agent_id = pAgentid.PARAMVALUE,
userid_list = user.DingTalkAccount,
msg = new
{
msgtype = "text",
text = new
{
content = msg
}
}
};
string resp = WebRequestHelper.DoPost($"https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={token}", JsonConvert.SerializeObject(json));
logger.Debug(resp);
var jsonObj = JsonConvert.DeserializeAnonymousType(resp, new
{
errcode = 0,
errmsg = "",
task_id = ""
});
if (jsonObj.errcode == 0)
{
return true;
}
}
return false;
}
///
/// 读取实例当前值 data内容是json文本
///
///
///
public static DBResult DingTalk_Instanceinfo(string instanceId) {
//https://open.dingtalk.com/document/isvapp-server/queries-a-process-instance-based-on-its-id
var result = new DBResult();
DingTalk_Instanceinfo dh = new DingTalk_Instanceinfo();
dh.MakeSendMessage(instanceId);//i0P82FAHT_G9TWJmavxGdg03131673000830
result = dh.DoSend();
return result;
}
//public static DBResult DingTalk_ReadWMSINInstance(string instanceId)
//{
// var result = new DBResult();
// var instanceiddic = BasicDataRefDAL.GetLogicInfo(wmsno, "钉钉审批");
// if (instanceiddic == null || !instanceiddic.ContainsKey("instanceId"))
// {
// return result.SetErrorInfo(wmsno + "没有进行钉钉审批");
// }
// else
// {
// }
// var _r = DingTalk_Instanceinfo(instanceId);
// if (!_r.Success)
// {
// return _r;
// }
// 如果成功 用数据对象解析结果 并做相应处理
//}
public static DBResult Send_SubmitAudit(CodeDingTalkSet TalkSet, List TalkSetDetail,string BILLNO, ModelObjectBillHead MasterDB, List FenDb1, string uid,long deptid)
{
var result = new DBResult();
DingTalk_Send_Audit dh = new DingTalk_Send_Audit(TalkSet, uid);
result = dh.MakeSendMessage(TalkSet,TalkSetDetail, BILLNO, MasterDB, FenDb1, deptid);
if (!result.Success)
{
return result;
}
result = dh.DoSend();
return result;
}
public static DBResult SubmitBack(CodeDingTalkSet TalkSet, string BILLNO, string uid)
{
var result = new DBResult();
DingTalk_Send_Audit dh = new DingTalk_Send_Audit(TalkSet, uid);
result = dh.MakeSubmitBackMessage(TalkSet, BILLNO);
if (!result.Success)
{
return result;
}
result = dh.DoSendSubmitBack();
return result;
}
public static DBResult SubmitAuditBack(CodeDingTalkSet TalkSet,string BILLNO, string uid)
{
var result = new DBResult();
DingTalk_Send_Audit dh = new DingTalk_Send_Audit(TalkSet, uid);
result = dh.MakeSubmitAuditBackMessage(TalkSet, BILLNO);
if (!result.Success)
{
return result;
}
result = dh.DoSendSubmitAuditBack();
return result;
}
public static DBResult Audit(CodeDingTalkSet TalkSet, string BILLNO, string uid)
{
var result = new DBResult();
DingTalk_Send_Audit dh = new DingTalk_Send_Audit(TalkSet, uid);
result = dh.MakeAuditMessage(TalkSet, BILLNO);
if (!result.Success)
{
return result;
}
result = dh.DoSendSubmitAuditBack();
return result;
}
public static DBResult CallBack(DingCallBackInfo DingCallBackInfo)
{
var result = new DBResult();
var DingTalkSet = MsCodeDingTalkSetDAL.GetData("PROCID='"+ DingCallBackInfo.processCode+ "' AND ISENABLE=1", "");
if (DingTalkSet == null || !DingTalkSet.ISENABLE)
{
return result;
}
if (DingTalkSet.MODULENAME == "付款申请"|| DingTalkSet.MODULENAME == "付费申请") {
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", DingCallBackInfo.processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var BILLNO = lv["BSNO"];
// if (DingCallBackInfo.EventType == "bpms_instance_change" && DingCallBackInfo.result == "agree"&&DingCallBackInfo.type=="finish")
if (DingCallBackInfo.result == "agree" && DingCallBackInfo.type == "finish")
{
BasicDataRefDAL.SaveLog("AuditList" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var Payapplist = ChpayapplicationDAL.GetAuditAllDataList("i.BILLNO='"+BILLNO+"'");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("FeeSettleAudit", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='"+ DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = ChpayapplicationDAL.AuditList(Payapplist, user.GID);
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = ChpayapplicationDAL.AuditList(Payapplist, RECEIVER[0].GID);
}
}
}
else if (DingCallBackInfo.type == "finish"&&DingCallBackInfo.result == "refuse")
{
BasicDataRefDAL.SaveLog("AuditBackList"+BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var Payapplist = ChpayapplicationDAL.GetAuditAllDataList("i.BILLNO='" + BILLNO + "'");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("FeeSettleAudit", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = ChpayapplicationDAL.AuditList(Payapplist, user.GID);
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = ChpayapplicationDAL.AuditBackList(Payapplist, RECEIVER[0].GID, "");
}
}
}
}
}else
if (DingTalkSet.MODULENAME == "整票费用审核")
{
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", DingCallBackInfo.processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var BILLNO = lv["BSNO"];
if ( DingCallBackInfo.result == "agree" && DingCallBackInfo.type == "finish")
{
BasicDataRefDAL.SaveLog("BLAuditList" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = Chfee_AuditDAL.GetBillAllDataList("MASTERNO='" + BILLNO + "'");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("BLFeeAudit", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = Chfee_AuditDAL.AuditListBL(user.GID, billlist, "");
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = Chfee_AuditDAL.AuditListBL(RECEIVER[0].GID, billlist, "");
}
}
}
else if (DingCallBackInfo.type == "finish" && DingCallBackInfo.result == "refuse")
{
BasicDataRefDAL.SaveLog("AuditBLBackList" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = Chfee_AuditDAL.GetBillAllDataList("MASTERNO='" + BILLNO + "'");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("BLFeeAudit", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = Chfee_AuditDAL.AuditBackBL(user.GID, billlist, "", "", "");
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = Chfee_AuditDAL.AuditBackBL(RECEIVER[0].GID, billlist, "", "", "");
}
}
}
}
}else
if (DingTalkSet.MODULENAME == "特放申请")
{
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", DingCallBackInfo.processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var BILLNO = lv["BSNO"];
if (DingCallBackInfo.result == "agree" && DingCallBackInfo.type == "finish")
{
BasicDataRefDAL.SaveLog("特放申请审核" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = MsOp_BLISSUEDAL.GetSPList(0, 1, "ob.GID='"+ BILLNO + "'", "");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("MsOp_BLISSUE_SP", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = MsOp_BLISSUEDAL.SP_Audit(billlist, user.GID, "");
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = MsOp_BLISSUEDAL.SP_Audit(billlist, RECEIVER[0].GID, "");
}
}
}
else if (DingCallBackInfo.type == "finish" && DingCallBackInfo.result == "refuse")
{
BasicDataRefDAL.SaveLog("特放申请审核驳回" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = MsOp_BLISSUEDAL.GetSPList(0, 1, "ob.GID='" + BILLNO + "'", "");
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID("MsOp_BLISSUE_SP", BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
result = MsOp_BLISSUEDAL.SP_AuditBack(billlist, user.GID, "");
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
result = MsOp_BLISSUEDAL.SP_AuditBack(billlist, RECEIVER[0].GID, "");
}
}
}
}
}
else
if (DingTalkSet.MODULENAME == "费用申请修改")
{
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", DingCallBackInfo.processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var BILLNO = lv["BSNO"];
if (DingCallBackInfo.result == "agree" && DingCallBackInfo.type == "finish")
{
BasicDataRefDAL.SaveLog("AuditFeeShen" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = Chfee_AuditDAL.GetBillAllDataList("BSNO IN (SELECT BSNO FROM CH_FEE WHERE GID='" + BILLNO + "')");
var workflowname = Chfee_AuditDAL.getWorkFlowNameByoptype(billlist[0].OPTYPE);
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID(workflowname, BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
var feelist = MsChFeeDAL.GetAllDataList("GID='" + BILLNO + "'");
result = Chfee_AuditDAL.AuditShen(billlist[0].OPTYPE, user.GID, BILLNO, feelist[0].FeeStatus, feelist[0].BsNo, workflowname);
}
else
{
if (!string.IsNullOrEmpty(user.GID))
{
var feelist = MsChFeeDAL.GetAllDataList("GID='" + BILLNO + "'");
result = Chfee_AuditDAL.AuditShen(billlist[0].OPTYPE, user.GID, BILLNO, feelist[0].FeeStatus, feelist[0].BsNo, workflowname);
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
var feelist = MsChFeeDAL.GetAllDataList("GID='" + BILLNO + "'");
result = Chfee_AuditDAL.AuditShen(billlist[0].OPTYPE, RECEIVER[0].GID, BILLNO, feelist[0].FeeStatus, feelist[0].BsNo, workflowname);
}
}
}
}
else if (DingCallBackInfo.type == "finish" && DingCallBackInfo.result == "refuse")
{
BasicDataRefDAL.SaveLog("AuditFeeShen" + BILLNO, "admin", "钉钉回调", "bpms_instance_change");
var billlist = Chfee_AuditDAL.GetBillAllDataList("BSNO IN (SELECT BSNO FROM CH_FEE WHERE GID='"+ BILLNO + "')");
var workflowname = Chfee_AuditDAL.getWorkFlowNameByoptype(billlist[0].OPTYPE);
var WorkFlowID = WorkFlowDAL.GetBSNOWorkFlowID(workflowname, BILLNO)[0].GID;
var user = BasicDataRefDAL.GetUserLinkRef("u.DingTalkAccount='" + DingCallBackInfo.staffId + "'");
if (!string.IsNullOrEmpty(user.GID))
{
var feelist = MsChFeeDAL.GetAllDataList("GID='" + BILLNO + "'");
result = Chfee_AuditDAL.AuditBackShen(billlist[0].OPTYPE, user.GID, feelist, "", workflowname);
}
else
{
var RECEIVER = WorkFlowDAL.GetAuditor(WorkFlowID, "1");
if (RECEIVER != null && RECEIVER.Count != 0)
{
var feelist = MsChFeeDAL.GetAllDataList("GID='" + BILLNO + "'");
result = Chfee_AuditDAL.AuditBackShen(billlist[0].OPTYPE, RECEIVER[0].GID, feelist, "", workflowname);
}
}
}
}
}
return result;
}
}
public class DingTalkSendHelper {
public DingTalkSendHelper() { }
public string url { get; set; }
public string uid { get; set; }
public object SendObject { get; set; }
public SysParamSet pAgentid { get; set; }
public DSWeb.Areas.MvcShipping.DB.User user { get; set; } = null;
public object jsonObj { get; set; }
public Dictionary dicObj { get; set; } = new Dictionary();
public string json { get; set; }
public string token { get; set; }
public Dictionary HeaderDic { get; set; }
private static ILog logger = LogManager.GetLogger("DingTalkHelper");
public DingTalkContext dingTalkContext { get; set; } = new DingTalkContext();
DBResult result { get; set; } = new DBResult();
public DBResult getUser()
{
user = dingTalkContext.Users.FirstOrDefault(u => u.GID == uid);
if (user == null || string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
result.SetErrorInfo("用户没有维护钉钉userid");
return result;
}
result.OK();
return result;
}
public DBResult GetAgentid() {
result = new DBResult();
pAgentid = dingTalkContext.ParamSets.FirstOrDefault(p => p.PARAMNAME == "DingTalkAgentid");
if (pAgentid == null || string.IsNullOrWhiteSpace(pAgentid.PARAMVALUE))
{
result.SetErrorInfo("钉钉Agentid参数配置错误");
return result;
}
result.OK();
return result;
}
public DBResult DoSend() {
var result = new DBResult();
string resp = WebRequestHelper.DoPost(url, JsonConvert.SerializeObject(jsonObj));
logger.Debug(resp);
result.setMessage(true,"发送成功", jsonObj);
return result;
}
public DBResult DoSendBack_Header()
{
var result = new DBResult();
string resp = "";
if (jsonObj != null)
{
BasicDataRefDAL.SaveLog("url:" + url + "header:" + JsonConvert.SerializeObject(HeaderDic) + " body:" + JsonConvert.SerializeObject(jsonObj), "", "钉钉审核", "发出");
resp = WebRequestHelper.DoPost_Header(url, HeaderDic, jsonObj);
BasicDataRefDAL.SaveLog(resp, "", "钉钉审核撤销", "返回");
}
else
{
resp = WebRequestHelper.DoPost_Header(url, HeaderDic);
}
logger.Debug(resp);
result.setMessage(true, "发送成功", resp);
return result;
}
public DBResult DoSend_Header()
{
var result = new DBResult();
string resp = "";
if (jsonObj != null)
{
BasicDataRefDAL.SaveLog("url:" + url+ "header:" +JsonConvert.SerializeObject(HeaderDic)+" body:"+ JsonConvert.SerializeObject(jsonObj),"","钉钉审核","发出");
resp=WebRequestHelper.DoPost_Header(url, HeaderDic, jsonObj);
BasicDataRefDAL.SaveLog(resp, "", "钉钉审核", "返回");
}
else {
resp=WebRequestHelper.DoPost_Header(url, HeaderDic);
}
logger.Debug(resp);
result.setMessage(true, "发送成功", resp);
return result;
}
public DBResult DoGet_Header_Param()
{
var result = new DBResult();
string resp = WebRequestHelper.DoGet_Header_Param(url, HeaderDic, dicObj);
//logger.Debug(resp);
result.setMessage(true, "发送成功", resp);
return result;
}
public static object JsonToObject(string jsonString, object obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
return serializer.ReadObject(mStream);
}
}
public class DingTalk_SendWorkMessage : DingTalkSendHelper {
public DingTalk_SendWorkMessage(string uid) {
this.uid = uid;
}
public DBResult MakeSendMessage(string msg) {
var result = new DBResult();
result = GetAgentid();
if (!result.Success) return result;
result = getUser();
if (!result.Success) return result;
jsonObj = new
{
agent_id = pAgentid.PARAMVALUE,
userid_list = user.DingTalkAccount,
msg = new
{
msgtype = "text",
text = new
{
content = msg
}
}
};
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={token}";
result.OK();
return result;
}
}
public class DingTalk_SendAuditWork : DingTalkSendHelper
{
public string BSNO { get; set; }
public DingTalk_SendAuditWork()
{
}
public DingTalk_SendAuditWork(string uid)
{
this.uid = uid;
getUser();
}
public class DingTalkFormField {
public string name { get; set; }
public string value { get; set; }
public DingTalkFormField(string name, string value)
{
this.name = name;
this.value = value;
}
}
public class DingTalkForm_approvers
{
public string actionType { get; set; }
public List userIds { get; set; }
public DingTalkForm_approvers(string actionType, List userIds)
{
this.actionType = actionType;
this.userIds = userIds;
}
}
public class DingTalk_OAAuditBody {
public long deptId { get; set; }
public List approvers { get; set; } = new List();
public long microappAgentId { get; set; }
public string originatorUserId { get; set; }
public string processCode { get; set; }
public List formComponentValues { get; set; } = new List();
}
public class User
{
public string userId { get; set; }
}
public class updateProcessInstanceRequests
{
public string processInstanceId { get; set; }
public bool isSystem { get; set; }
public string remark { get; set; }
public string operatingUserId { get; set; }
}
public class DingTalk_OAAuditStatus
{
public updateProcessInstanceRequests updateProcessInstanceRequests { get; set; }
// public List updateProcessInstanceRequests { get; set; } = new List();
}
public DBResult cansend_in(string wmsno)
{
var result = new DBResult();
result.OK();
return result;
}
public bool cansend_out(string BSNO) {
return true;
}
public virtual DBResult MakeSendMessage(CodeDingTalkSet TalkSet, List TalkSetDetail,string BILLNO, ModelObjectBillHead MasterDB, List FenDb1,long deptid)
{
var result = new DBResult();
return result;
}
public virtual DBResult MakeSubmitBackMessage(CodeDingTalkSet TalkSet, string billnos)
{
var result = new DBResult();
return result;
}
public virtual DBResult MakeSubmitAuditBackMessage(CodeDingTalkSet TalkSet, string billnos)
{
var result = new DBResult();
return result;
}
public virtual DBResult MakeAuditMessage(CodeDingTalkSet TalkSet, string billnos)
{
var result = new DBResult();
return result;
}
public class DingTalk_SendAuditResult {
public string instanceId { get; set; }
}
public DBResult DoSend() {
var result = base.DoSend_Header();
if (result.Success) {
try
{
var jo = new DingTalk_SendAuditResult();
jo = (DingTalk_SendAuditResult)JsonToObject(result.Data.ToString(), jo);
var dic = new Dictionary
{
{ "instanceId", jo.instanceId }
};
BasicDataRefDAL.SaveLogicInfo(BSNO, "钉钉审批", dic);
}catch(Exception ex)
{
}
}
return result;
}
}
public class DingTalk_Send_Audit : DingTalk_SendAuditWork
{
public DingTalk_Send_Audit(CodeDingTalkSet TalkSet, string uid)
{
this.uid = uid;
getUser();
}
public override DBResult MakeSendMessage(CodeDingTalkSet TalkSet, List TalkSetDetailList,string BILLNO, ModelObjectBillHead MasterDB, List FenDb1,long deptid)
{
var result = new DBResult();
try
{
if (string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
return result.SetErrorInfo("请配置用户的钉钉id");
}
BSNO = BILLNO;
DingTalk_OAAuditBody body = new DingTalk_OAAuditBody();
var app = DingTalkApp.GetDingTalkApp(TalkSet);
//var dp = app.GetProcess(TalkSet);
body.deptId = deptid;//
//获取用户的钉钉id
var dtc = new DingTalkContext();
body.microappAgentId =Convert.ToInt64(TalkSet.AGENTID);//
body.originatorUserId = user.DingTalkAccount;
body.processCode = TalkSet.PROCID;
var bodylist = new List>();
var DDFIELDNAME = "";
foreach (var item in FenDb1)
{
var newrk = new List();
foreach (var TalkSetDetail in TalkSetDetailList) {
if (TalkSetDetail.TABLETYPE == "明细数据1") {
var fieldname = TalkSetDetail.DFIELDNAME;
var fieldvalue = "";
if (!string.IsNullOrEmpty(TalkSetDetail.DEFAULTVALUE)) fieldvalue = TalkSetDetail.DEFAULTVALUE;
else {
var propArr = item.GetType().GetProperties();
var prop = propArr.FirstOrDefault(p => p.Name.ToLower() == TalkSetDetail.FIELDNAME.ToLower());
if (prop != null) {
if (prop.PropertyType.Name =="Decimal")
{
fieldvalue = Convert.ToDecimal(prop.GetValue(item)).ToString("0.00").Trim();
}
else
fieldvalue = prop.GetValue(item).ToString();
}
}
var FormField = new DingTalkFormField(fieldname, fieldvalue);
newrk.Add(FormField);
DDFIELDNAME = TalkSetDetail.DDFIELDNAME;
}
}
bodylist.Add(newrk);
}
body.formComponentValues = new List();
foreach (var TalkSetDetail in TalkSetDetailList)
{
if (TalkSetDetail.TABLETYPE == "主数据")
{
var fieldname = TalkSetDetail.DFIELDNAME;
var fieldvalue = "";
if (!string.IsNullOrEmpty(TalkSetDetail.DEFAULTVALUE)) fieldvalue = TalkSetDetail.DEFAULTVALUE;
else
{
var propArr = MasterDB.GetType().GetProperties();
var prop = propArr.FirstOrDefault(p => p.Name.ToLower() == TalkSetDetail.FIELDNAME.ToLower());
if (prop != null)
{
if (prop.PropertyType.Name == "Decimal")
{
fieldvalue = Convert.ToDecimal(prop.GetValue(MasterDB)).ToString("0.00").Trim();
}
else
fieldvalue = prop.GetValue(MasterDB).ToString();
}
}
var FormField = new DingTalkFormField(fieldname, fieldvalue);
body.formComponentValues.Add(FormField);
}
if (bodylist != null && bodylist.Count != 0) {
body.formComponentValues.Add(new DingTalkFormField(DDFIELDNAME, JsonConvert.SerializeObject(bodylist)));
}
}
jsonObj = body;
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://api.dingtalk.com/v1.0/workflow/processInstances";
HeaderDic = new Dictionary
{
{ "x-acs-dingtalk-access-token", token }
};
result.OK();
return result;
}
catch (Exception e)
{
return result.SetErrorInfo(e.Message);
}
}
public override DBResult MakeSubmitBackMessage(CodeDingTalkSet TalkSet, string billno)
{
var result = new DBResult();
try
{
if (string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
return result.SetErrorInfo("请配置用户的钉钉id");
}
var instanceId = BasicDataRefDAL.GetLogicValue("钉钉审批", "instanceId", billno);
var app = DingTalkApp.GetDingTalkApp(TalkSet);
//DingTalk_OAAuditStatus body = new DingTalk_OAAuditStatus();
//var updateProcessInstanceRequestsList = new List();
//var billList = billnos.Split(',');
//foreach (var bill in billList)
//{
//var updateProcessInstanceRequests = new updateProcessInstanceRequests();
//var instanceId = BasicDataRefDAL.GetLogicValue("钉钉审批", "instanceId", billno);
// if (!string.IsNullOrEmpty(instanceId))
// {
// updateProcessInstanceRequests.processInstanceId = instanceId;
// updateProcessInstanceRequests.isSystem =true;
// updateProcessInstanceRequests.operatingUserId = user.DingTalkAccount;
// //updateProcessInstanceRequestsList.Add(updateProcessInstanceRequests);
// }
////}
//body.updateProcessInstanceRequests = updateProcessInstanceRequests;
//jsonObj = updateProcessInstanceRequests;
result = DingTalkHelper.DingTalk_Instanceinfo(instanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
var tasklist = di.result.tasks;
var usertask = tasklist.Find(x => x.userId == user.DingTalkAccount);
if (usertask == null)
{
return result.SetErrorInfo("未找到钉钉工作流审核人!");
}
var Auditexecute = new terminate();
Auditexecute.processInstanceId = instanceId;
Auditexecute.operatingUserId = user.DingTalkAccount;
Auditexecute.isSystem = true;
Auditexecute.remark = "";
jsonObj = Auditexecute;
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://api.dingtalk.com/v1.0/workflow/processInstances/terminate";
HeaderDic = new Dictionary
{
{ "x-acs-dingtalk-access-token", token }
};
result.OK();
return result;
}
catch (Exception e)
{
return result.SetErrorInfo(e.Message);
}
}
public override DBResult MakeSubmitAuditBackMessage(CodeDingTalkSet TalkSet,string billno)
{
var result = new DBResult();
try
{
if (string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
return result.SetErrorInfo("请配置用户的钉钉id");
}
var instanceId = BasicDataRefDAL.GetLogicValue("钉钉审批", "instanceId", billno);
var app = DingTalkApp.GetDingTalkApp(TalkSet);
//DingTalk_OAAuditStatus body = new DingTalk_OAAuditStatus();
//var updateProcessInstanceRequestsList = new List();
//var billList = billnos.Split(',');
//foreach (var bill in billList)
//{
//var updateProcessInstanceRequests = new updateProcessInstanceRequests();
//var instanceId = BasicDataRefDAL.GetLogicValue("钉钉审批", "instanceId", billno);
// if (!string.IsNullOrEmpty(instanceId))
// {
// updateProcessInstanceRequests.processInstanceId = instanceId;
// updateProcessInstanceRequests.isSystem =true;
// updateProcessInstanceRequests.operatingUserId = user.DingTalkAccount;
// //updateProcessInstanceRequestsList.Add(updateProcessInstanceRequests);
// }
////}
//body.updateProcessInstanceRequests = updateProcessInstanceRequests;
//jsonObj = updateProcessInstanceRequests;
result = DingTalkHelper.DingTalk_Instanceinfo(instanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
var tasklist = di.result.tasks;
var usertask = tasklist.Find(x => x.userId == user.DingTalkAccount);
if (usertask == null)
{
return result.SetErrorInfo("未找到钉钉工作流审核人!");
}
var Auditexecute = new execute();
Auditexecute.processInstanceId = instanceId;
Auditexecute.actionerUserId = user.DingTalkAccount;
Auditexecute.result = "refuse";
Auditexecute.taskId = usertask.taskId;
jsonObj = Auditexecute;
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://api.dingtalk.com/v1.0/workflow/processInstances/execute";
HeaderDic = new Dictionary
{
{ "x-acs-dingtalk-access-token", token }
};
result.OK();
return result;
}
catch (Exception e)
{
return result.SetErrorInfo(e.Message);
}
}
public override DBResult MakeAuditMessage(CodeDingTalkSet TalkSet, string billno)
{
var result = new DBResult();
try
{
if (string.IsNullOrWhiteSpace(user.DingTalkAccount))
{
return result.SetErrorInfo("请配置用户的钉钉id");
}
var app = DingTalkApp.GetDingTalkApp(TalkSet);
var instanceId = BasicDataRefDAL.GetLogicValue("钉钉审批", "instanceId", billno);
result = DingTalkHelper.DingTalk_Instanceinfo(instanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
var tasklist = di.result.tasks;
var usertask = tasklist.Find(x => x.userId == user.DingTalkAccount);
if (usertask == null) {
return result.SetErrorInfo("未找到钉钉工作流审核人!");
}
var Auditexecute = new execute();
Auditexecute.processInstanceId = instanceId;
Auditexecute.actionerUserId = user.DingTalkAccount;
Auditexecute.result = "agree";
Auditexecute.taskId = usertask.taskId;
jsonObj = Auditexecute;
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://api.dingtalk.com/v1.0/workflow/processInstances/execute";
HeaderDic = new Dictionary
{
{ "x-acs-dingtalk-access-token", token }
};
result.OK();
return result;
}
catch (Exception e)
{
return result.SetErrorInfo(e.Message);
}
}
public class CallbackResult
{
public bool success { get; set; }
}
public DBResult DoSendSubmitBack()
{
var result = base.DoSendBack_Header();
if (result.Success)
{
try
{
var objRtn = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(result.Data.ToString(), new CallbackResult());
result.Success = objRtn.success;
//BasicDataRefDAL.SaveLogicInfo(BSNO, "钉钉审批", dic);
}
catch (Exception ex)
{
}
}
return result;
}
public DBResult DoSendSubmitAuditBack()
{
var result = base.DoSend_Header();
if (result.Success)
{
try
{
var objRtn = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(result.Data.ToString(),new CallbackResult());
result.Success = objRtn.success;
//BasicDataRefDAL.SaveLogicInfo(BSNO, "钉钉审批", dic);
}
catch (Exception ex)
{
}
}
return result;
}
public DBResult DoSend()
{
var result = base.DoSend_Header();
if (result.Success)
{
try
{
var jo = new DingTalk_SendAuditResult();
jo = (DingTalk_SendAuditResult)JsonToObject(result.Data.ToString(), jo);
var dic = new Dictionary();
dic.Add("instanceId", jo.instanceId);
BasicDataRefDAL.SaveLogicInfo(BSNO, "钉钉审批", dic);
}
catch (Exception ex)
{
}
}
return result;
}
}
public class DingTalk_Instanceinfo : DingTalkSendHelper {
public string instanceId { get; set; }
public DingTalk_Instanceinfo()
{
//this.uid = uid;
}
public DBResult MakeSendMessage(string instanceId )
{
this.instanceId = instanceId;
var result = new DBResult();
jsonObj = null;
token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
url = $"https://api.dingtalk.com/v1.0/workflow/processInstances" ;
dicObj= new Dictionary {
{"processInstanceId",instanceId }
};
HeaderDic = new Dictionary
{
{ "x-acs-dingtalk-access-token", token }
};
result.OK();
return result;
}
//public DBResult GetProcessInstances(string instanceId)
//{
// this.instanceId = instanceId;
// var result = new DBResult();
// jsonObj = null;
// token = MemoryCache.Default[DingTalkTokenJob.DingTalkAccessTokenStoreKey].ToString();
// url = $"https://api.dingtalk.com/v1.0/workflow/processInstances";
// dicObj = new Dictionary {
// {"processInstanceId",instanceId }
// };
// HeaderDic = new Dictionary
// {
// { "x-acs-dingtalk-access-token", token }
// };
// result.OK();
// return result;
//}
public DBResult DoSend()
{
var result = base.DoGet_Header_Param();
if (result.Success)
{
try
{
BasicDataRefDAL.SaveLog(result.Data.ToString(), uid, "读取业务信息","返回");
//jo = (DingTalk_Instanceinfo)JsonToObject(result.Data.ToString(), jo);
}
catch (Exception ex)
{
}
}
return result;
}
}
#region 处理钉钉回调返回值
public class DingTalkCallbackDealHelper
{
public string processInstanceId { get; set; }
public string processCode { get; set; }
public string type { get; set; }
public DingTalkCallbackDealHelper() { }
public DingTalkCallbackDealHelper(string instanceId) {
processInstanceId = instanceId;
}
public DingTalkCallbackDealHelper(CallBackInfo callbackinfo)
{
processInstanceId = callbackinfo.processInstanceId;
processCode = callbackinfo.processCode;
type = callbackinfo.type;
}
///
/// 已不使用 改为在子类内各自实现
///
///
public DBResult ReadDingtalkInstanceinfo()
{
var result = new DBResult();
//var userid=
try
{
//如果是费用入账动作 且配置了钉钉审批入库 则调用
result = DingTalkHelper.DingTalk_Instanceinfo(processInstanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
//根据内容修改wms和wmsin值
var cdc = new CommonDataContext();
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var wmsno = lv["BSNO"];
var wmsold = new DSWeb.MvcShipping.Models.WMS.WMS_IN_OLD(wmsno);
var wms = wmsold.wms;
var wmslist = wmsold.wms_in;
//var wms = cdc.wms.FirstOrDefault(x => x.WMSNO == wmsno);
//var wmslist = new List();
//if (wms != null) {
// wmslist = cdc.wms_in.Where(x => x.ASSOCIATEDNO == wms.GID).ToList();
//}
var updwmsinlist = new List();
var newwmsinlist = new List();
var 车辆信息 = new wms_in_md();
foreach (var item in di.result.formComponentValues)
{
//从其中查找货物信息 并更新至当前
if (item.name == "客户名称")
{
//var cust=cdc.info_client.Where(x=>x.SHORTNAME==item.value || x.DESCRIPTION==item.value)
}
if (item.name == "入库日期")
{
wms.WMSDATE = Convert.ToDateTime(item.value);
}
if (item.name == "入库信息")
{
var 入库信息list = FormComponentValues.GetRowValues(item.value);
if (入库信息list != null)
{
foreach (var DingWmsin in 入库信息list)
{
var 提单号 = DingWmsin.getValue("提单号");
var 箱号 = DingWmsin.getValue("箱号");
if (wmslist.Exists(x => x.BLNO == 提单号 && x.CNTRNO == 箱号))
{
var updrec = wmslist.First(x => x.BLNO == 提单号 && x.CNTRNO == 箱号);
//new DingTalkFormField("提单号", item.BLNO),
//new DingTalkFormField("箱号", item.CNTRNO),
//new DingTalkFormField("品名", item.GOODSNAME),
//new DingTalkFormField("重量", item.GOODSRKSL.ToString()),
//new DingTalkFormField("件数", item.GOODSPACK.ToString()),
//new DingTalkFormField("尺码", item.CHIMA1.ToString()),
//new DingTalkFormField("库位", item.CHIMA1.ToString())
updrec.GOODSNAME = DingWmsin.getValue("品名");
if (wms.CHARGEUNIT == "吨" || wms.CHARGEUNIT == "千克")
{
updrec.GOODSRKSL = DingWmsin.getValue_decimal("重量");
updrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
//updrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
updrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
updrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
updrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
if (wms.CHARGEUNIT == "CBM")
{
updrec.GOODSRKSL = DingWmsin.getValue_decimal("尺码");
updrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
//updrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
updrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
updrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
updrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
updrec.GOODSPACK = DingWmsin.getValue_decimal("件数");
updrec.AREANAME = DingWmsin.getValue("库位");
updrec.DODATE = wms.WMSDATE;
updwmsinlist.Add(updrec);
}
else
{
var newrec = new wms_in_md();
newrec.ASSOCIATEDNO = wms.GID;
newrec.GID = Guid.NewGuid().ToString();
newrec.BLNO = DingWmsin.getValue("提单号");
newrec.CNTRNO = DingWmsin.getValue("箱号");
newrec.CLIENTNAME = wms.CUSTOMERNAME;
newrec.DODATE = wms.WMSDATE;
newrec.GOODSNAME = DingWmsin.getValue("品名");
if (wms.CHARGEUNIT == "吨" || wms.CHARGEUNIT == "千克")
{
newrec.GOODSRKSL = DingWmsin.getValue_decimal("重量");
newrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
//newrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
newrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
newrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
newrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
if (wms.CHARGEUNIT == "CBM")
{
newrec.GOODSRKSL = DingWmsin.getValue_decimal("尺码");
newrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
//newrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
newrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
newrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
newrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
newrec.GOODSPACK = DingWmsin.getValue_decimal("件数");
newrec.AREANAME = DingWmsin.getValue("库位");
newrec.CREATETIME = DateTime.Now;
newrec.CHARGEUNIT = wms.CHARGEUNIT;
newrec.CORPID = wms.CORPID;
newwmsinlist.Add(newrec);
}
}
}
}
if (item.name == "车队信息")
{
var 车队信息list = FormComponentValues.GetRowValues(item.value);
if (车队信息list != null && 车队信息list.Count > 0)
{
var 车队name = 车队信息list[0].getValue("车队");
var 车队 = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == 车队name);
if (车队 != null && 车队.SHORTNAME != null && 车队.SHORTNAME != "")
{
车辆信息.CHEDUIID = 车队.GID;
车辆信息.TRUCKNO = 车队信息list[0].getValue("车牌号");
}
}
}
}
cdc.wms.AddOrUpdate(wms);
if (updwmsinlist != null && updwmsinlist.Count > 0)
{
foreach (var item in updwmsinlist)
{
item.CHEDUIID = 车辆信息.CHEDUIID;
item.TRUCKNO = 车辆信息.TRUCKNO;
cdc.wms_in.AddOrUpdate(item);
}
}
if (newwmsinlist != null && newwmsinlist.Count > 0)
{
foreach (var item in newwmsinlist)
{
item.CHEDUIID = 车辆信息.CHEDUIID;
item.TRUCKNO = 车辆信息.TRUCKNO;
cdc.wms_in.AddOrUpdate(item);
}
}
wms.ISLOCK2 = false;
cdc.wms.AddOrUpdate(wms);
cdc.SaveChanges();
//然后执行入库的费用入账原逻辑
DSWeb.MvcShipping.DAL.WMSNewDAL.WMSNewDAL.DoWMSLOCK("'"+wmsno+"'");
}
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return result;
}
}
public class OperationRecords
{
///
///
///
public string date { get; set; }
///
///
///
public string result { get; set; }
///
///
///
public string type { get; set; }
///
///
///
public string userId { get; set; }
}
public class FormComponentValues
{
///
///
///
public string componentType { get; set; }
///
/// 客户名称
///
public string name { get; set; }
///
///
///
public string bizAlias { get; set; }
///
///
///
public string id { get; set; }
///
/// 众盈
///
public string value { get; set; }
public static List GetRowValues(string value)
{
//用value值文本来解析成 行信息
var result = new List();
if (value.Contains("\"rowValue\""))
{
try
{
var jarr = JArray.Parse(value);
foreach (var item in jarr)
{
var obj = item as JObject;
var row =JsonConvert.DeserializeObject(obj.ToString());
result.Add(row);
}
}
catch (Exception ex)
{ }
}
return result;
}
}
public class execute
{
///
///
///
public string processInstanceId { get; set; }
///
///
///
public string remark { get; set; }
///
///
///
public string result { get; set; }
///
///
///
public string actionerUserId { get; set; }
///
///
///
public long? taskId { get; set; }
///
///
}
public class terminate
{
///
///
///
public string processInstanceId { get; set; }
///
///
///
public string remark { get; set; }
///
///
///
public bool isSystem { get; set; }
///
///
///
public string operatingUserId { get; set; }
///
///
}
public class Tasks
{
///
///
///
public string result { get; set; }
///
///
///
public string activityId { get; set; }
///
///
///
public string finishTime { get; set; }
///
///
///
public string pcUrl { get; set; }
///
///
///
public string createTime { get; set; }
///
///
///
public string mobileUrl { get; set; }
///
///
///
public string userId { get; set; }
///
///
///
public long? taskId { get; set; }
///
///
///
public string status { get; set; }
}
public class Result
{
///
///
///
public string finishTime { get; set; }
///
///
///
public List attachedProcessInstanceIds { get; set; }
///
///
///
public string businessId { get; set; }
///
/// 邓羽提交的入库统计
///
public string title { get; set; }
///
///
///
public string originatorDeptId { get; set; }
///
///
///
public List operationRecords { get; set; }
///
///
///
public List formComponentValues { get; set; }
///
///
///
public string result { get; set; }
///
///
///
public string bizAction { get; set; }
///
///
///
public string createTime { get; set; }
///
///
///
public string originatorUserId { get; set; }
///
///
///
public List tasks { get; set; }
///
/// 青岛诚锐众盈货运代理有限公司
///
public string originatorDeptName { get; set; }
///
///
///
public string status { get; set; }
}
public class DingTalkInstanceinfo
{
///
///
///
public Result result { get; set; }
///
///
///
public bool success { get; set; }
}
public class 行信息
{
public List row { get; set; }
}
public class row
{
public List rowValue { get; set; }
public string rowNumber { get; set; }
public string getValue(string fieldname)
{
var result = "";
if (rowValue.Exists(x => x.label == fieldname))
{
result = rowValue.First(x => x.label == fieldname).value;
}
return result;
}
public decimal getValue_decimal(string fieldname)
{
var resultstr = "";
var result = 0M;
if (rowValue.Exists(x => x.label == fieldname))
{
resultstr = rowValue.First(x => x.label == fieldname).value;
}
//return result;
//提取带有小数点的数字,该方式会将所有带有小数的数字拼接在一起,如:"ABC#123.56@AS8.9测试"提取出来就是123.568.9
var result2 = Regex.Replace(resultstr, @"[^\d.\d]", "");
//如果是数字,则转换为decimal类型
if (Regex.IsMatch(result2, @"^[+-]?\d*[.]?\d*$"))
{
result = decimal.Parse(result2);
}
return result;
}
}
public class rowValue
{
public string bizAlias { get; set; }
public string label { get; set; }
public string value { get; set; }
public string key { get; set; }
}
public class DingCallBackInfo
{
///
///
///
public string processInstanceId { get; set; }
///
///
///
public string corpId { get; set; }
///
///
///
public string EventType { get; set; }
///
///
///
public string businessId { get; set; }
///
/// 邓羽提交的入货通知
///
public string title { get; set; }
///
///
///
public string type { get; set; }
///
///
///
public long? createTime { get; set; }
///
///
///
public string processCode { get; set; }
///
///
///
public string bizCategoryId { get; set; }
///
///
///
public string businessType { get; set; }
///
///
///
public string staffId { get; set; }
public string result { get; set; }
///
///
///
public long? taskId { get; set; }
}
#endregion
#region 钉钉业务类
public class DingTalkApp {
public string token { get; set; }
public string aes_key { get; set; }
public string appkey { get; set; }
public long agentid { get; set; }
public long deptid { get; set; }
public static DingTalkApp GetDingTalkApp(CodeDingTalkSet TalkSet)
{
var result = new DingTalkApp();
result.token = TalkSet.APITOKEN;
result.aes_key = TalkSet.APPSECRET;
result.appkey = TalkSet.APPKEY;
result.agentid =Convert.ToInt64(TalkSet.AGENTID);
return result;
}
public static DingTalkProcess GetProcess(CodeDingTalkSet TalkSet) {
var result = new DingTalkProcess();
result.processname = TalkSet.PROCNAME;
result.processCode = TalkSet.PROCID;
return result;
}
public DingTalkProcess GetDingTalkProcessByProcessCode(CodeDingTalkSet TalkSet)
{
var processdic = new Dictionary {
{ TalkSet.PROCID,TalkSet.PROCNAME}
};
if (processdic.ContainsKey(TalkSet.PROCID))
{
return GetProcess(TalkSet);
}
else { return new DingTalkProcess(); }
}
public void Getappinfo(ref DingTalkProcess process) {
process.token = token;
process.aes_key = aes_key;
process.appkey = appkey;
process.agentid = agentid;
process.deptid = deptid;
}
}
public class DingTalkProcess: DingTalkApp
{
public string processname { get; set; }
public string processCode { get; set; }
//public string callbackstr { get; set; }
public DingTalkCallbackDealHelper callbackinfo { get; set; }
public void SaveCallBack(CallBackInfo _callbackinfo) {
callbackinfo = new DingTalkCallbackDealHelper(_callbackinfo);
}
public DingTalkProcess() { }
public DingTalkProcess(string processname) { this.processname = processname; }
///
/// 这些数值来自于钉钉中某个组织的某个应用。一个应用可以监听多个实际业务的返回值
///
///
///
public virtual DBResult DoDeal() { return new DBResult(); }
}
public class DingTalkProcess_测试入货通知 : DingTalkProcess
{
public DingTalkProcess_测试入货通知(string processname)
{
this.processname = processname;
//token = "zbGFOwrH6zCvq3VE3izLmWRTNUC1YcX";
//aes_key = "sb6GkCKsUwNQo3RKbX1MzHKea1ZsE221n3xQ9hwJBMK";
//appkey = "dingsaofiohmsrcbxyef";
//agentid = 2298782307;
processCode = "PROC-0DC40EA2-E9D2-4917-A597-AD77EC055C49";
}
public override DBResult DoDeal() {
var result = new DBResult();
//根据processinstancid 读取审批实例信息
var 返回结果Str = DingTalkHelper.DingTalk_Instanceinfo(callbackinfo.processInstanceId);
//解析返回结果
return result;
}
}
public class DingTalkProcess_诚锐入库 : DingTalkProcess
{
public DingTalkProcess_诚锐入库(string processname) {
this.processname = processname;
//token = "CWhvNvfyuNf9D8halMs5PyHV70CrFx3E";
//aes_key = "O5u6L8YnUaucnC8FyFNMeMeGE5uoYSAGFGdg3rOHftt";
//appkey = "dingkt5caipnn4fbuqsf";
//agentid = 2365401074;
processCode = "PROC-0888A19C-0562-42AC-A9C6-24E4C4398410";
}
public override DBResult DoDeal()
{
//return new DBResult();
if (callbackinfo.type == "finish")
{
return ReadDingtalkInstanceinfo(callbackinfo.processInstanceId);
}
else {
return new DBResult();
}
}
public DBResult ReadDingtalkInstanceinfo(string processInstanceId)
{
var result = new DBResult();
//var userid=
try
{
//如果是费用入账动作 且配置了钉钉审批入库 则调用
result = DingTalkHelper.DingTalk_Instanceinfo(processInstanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
//根据内容修改wms和wmsin值
var cdc = new CommonDataContext();
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var wmsno = lv["BSNO"];
var wmsold = new DSWeb.MvcShipping.Models.WMS.WMS_IN_OLD(wmsno);
var wms = wmsold.wms;
var wmslist = wmsold.wms_in;
//var wms = cdc.wms.FirstOrDefault(x => x.WMSNO == wmsno);
//var wmslist = new List();
//if (wms != null) {
// wmslist = cdc.wms_in.Where(x => x.ASSOCIATEDNO == wms.GID).ToList();
//}
var updwmsinlist = new List();
var newwmsinlist = new List();
var 车辆信息 = new wms_in_md();
foreach (var item in di.result.formComponentValues)
{
//从其中查找货物信息 并更新至当前
if (item.name == "客户名称")
{
//var cust=cdc.info_client.Where(x=>x.SHORTNAME==item.value || x.DESCRIPTION==item.value)
}
if (item.name == "入库日期")
{
wms.WMSDATE = Convert.ToDateTime(item.value);
wms.STARTBILLINGDATE= Convert.ToDateTime(item.value);
wms.STARTBILLINGDATEAP = Convert.ToDateTime(item.value);
}
if (item.name == "入库信息")
{
var 入库信息list = FormComponentValues.GetRowValues(item.value);
if (入库信息list != null)
{
foreach (var DingWmsin in 入库信息list)
{
//var 提单号 = DingWmsin.getValue("提单号");
//var 箱号 = DingWmsin.getValue("箱号");
var wmsingid= DingWmsin.getValue("唯一标识");
if (wmslist.Exists(x => x.GID== wmsingid))
{
var updrec = wmslist.First(x => x.GID == wmsingid);
//new DingTalkFormField("提单号", item.BLNO),
//new DingTalkFormField("箱号", item.CNTRNO),
//new DingTalkFormField("品名", item.GOODSNAME),
//new DingTalkFormField("重量", item.GOODSRKSL.ToString()),
//new DingTalkFormField("件数", item.GOODSPACK.ToString()),
//new DingTalkFormField("尺码", item.CHIMA1.ToString()),
//new DingTalkFormField("库位", item.CHIMA1.ToString())
updrec.BLNO = DingWmsin.getValue("提单号");
updrec.CNTRNO = DingWmsin.getValue("箱号");
updrec.GOODSNAME = DingWmsin.getValue("品名");
if (wms.CHARGEUNIT == "吨" || wms.CHARGEUNIT == "千克")
{
updrec.GOODSRKSL = DingWmsin.getValue_decimal("重量");
updrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
updrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
updrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue_decimal("重量"));
updrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue_decimal("尺码"));
updrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue_decimal("尺码"));
}
if (wms.CHARGEUNIT == "CBM")
{
updrec.GOODSRKSL = DingWmsin.getValue_decimal("尺码");
updrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
updrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
updrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
updrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
updrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
updrec.GOODSPACK = DingWmsin.getValue_decimal("件数");
updrec.AREANAME = DingWmsin.getValue("库位");
updrec.DODATE = wms.WMSDATE;
//if(string.IsNullOrWhiteSpace(DingWmsin.getValue("车牌号")))
updrec.TRUCKNO = DingWmsin.getValue("车牌号");
var 车队name= DingWmsin.getValue("车队");
var 车队infoclient = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == 车队name);
if(车队infoclient!=null && !string.IsNullOrWhiteSpace( 车队infoclient.SHORTNAME))
updrec.CHEDUIID = 车队infoclient.GID;
updrec.DODATE = wms.WMSDATE;
updwmsinlist.Add(updrec);
}
else
{
var newrec = new wms_in_md();
newrec.ASSOCIATEDNO = wms.GID;
newrec.GID = Guid.NewGuid().ToString();
newrec.BLNO = DingWmsin.getValue("提单号");
newrec.CNTRNO = DingWmsin.getValue("箱号");
newrec.CLIENTNAME = wms.CUSTOMERNAME;
newrec.DODATE = wms.WMSDATE;
newrec.GOODSNAME = DingWmsin.getValue("品名");
if (wms.CHARGEUNIT == "吨" || wms.CHARGEUNIT == "千克")
{
newrec.GOODSRKSL = DingWmsin.getValue_decimal("重量");
newrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
newrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
newrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
newrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
newrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
if (wms.CHARGEUNIT == "CBM")
{
newrec.GOODSRKSL = DingWmsin.getValue_decimal("尺码");
newrec.GOODSSTOCK = DingWmsin.getValue_decimal("重量");
newrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
newrec.SHIJIZHONGLIANG = Convert.ToDouble(DingWmsin.getValue("重量"));
newrec.CHIMA1 = Convert.ToDouble(DingWmsin.getValue("尺码"));
newrec.SHIJICHIMA = Convert.ToDouble(DingWmsin.getValue("尺码"));
}
newrec.GOODSPACK = DingWmsin.getValue_decimal("件数");
newrec.AREANAME = DingWmsin.getValue("库位");
newrec.CREATETIME = DateTime.Now;
newrec.CHARGEUNIT = wms.CHARGEUNIT;
newrec.CORPID = wms.CORPID;
newrec.TRUCKNO = DingWmsin.getValue("车牌号");
var 车队name = DingWmsin.getValue("车队");
var 车队infoclient = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == 车队name);
if (车队infoclient != null && string.IsNullOrWhiteSpace(车队infoclient.SHORTNAME))
newrec.CHEDUIID = 车队infoclient.SHORTNAME;
newwmsinlist.Add(newrec);
}
}
}
}
//if (item.name == "车队信息")
//{
// var 车队信息list = FormComponentValues.GetRowValues(item.value);
// if (车队信息list != null && 车队信息list.Count > 0)
// {
// var 车队name = 车队信息list[0].getValue("车队");
// var 车队 = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == 车队name);
// if (车队 != null && 车队.SHORTNAME != null && 车队.SHORTNAME != "")
// {
// 车辆信息.CHEDUIID = 车队.GID;
// 车辆信息.TRUCKNO = 车队信息list[0].getValue("车牌号");
// }
// }
//}
}
cdc.wms.AddOrUpdate(wms);
if (updwmsinlist != null && updwmsinlist.Count > 0)
{
foreach (var item in updwmsinlist)
{
cdc.wms_in.AddOrUpdate(item);
}
//20230209 根据明细数据重新计算头表数据
var 件数 = updwmsinlist.Sum(s => s.GOODSPACK);
var 重量 = updwmsinlist.Sum(s => s.GOODSKGS);
var 入库量 = updwmsinlist.Sum(s => s.GOODSRKSL);
var 尺码 = updwmsinlist.Sum(s => s.CHIMA1);
wms.GOODSPACK = 件数;
wms.GOODSPACKSTOCK = 件数;
wms.GOODSPACKACTUAL = 件数;
wms.GOODSRKSL = 入库量;
wms.GOODSRKSLACTUAL = 入库量;
wms.GOODSSTOCK = 入库量;
wms.GOODSKGS = 重量;
cdc.wms.AddOrUpdate(wms);
}
if (newwmsinlist != null && newwmsinlist.Count > 0)
{
foreach (var item in newwmsinlist)
{
item.CHEDUIID = 车辆信息.CHEDUIID;
item.TRUCKNO = 车辆信息.TRUCKNO;
cdc.wms_in.AddOrUpdate(item);
}
}
wms.ISLOCK2 = false;
cdc.wms.AddOrUpdate(wms);
cdc.SaveChanges();
//然后执行入库的费用入账原逻辑
DSWeb.MvcShipping.DAL.WMSNewDAL.WMSNewDAL.DoWMSLOCK("'" + wmsno + "'");
}
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return result;
}
}
public class DingTalkProcess_诚锐出库 : DingTalkProcess
{
public DingTalkProcess_诚锐出库(string processname)
{
this.processname = processname;
//token = "CWhvNvfyuNf9D8halMs5PyHV70CrFx3E";
//aes_key = "O5u6L8YnUaucnC8FyFNMeMeGE5uoYSAGFGdg3rOHftt";
//appkey = "dingkt5caipnn4fbuqsf";
//agentid = 2365401074;
processCode = "PROC-7F3CA810-FB06-4E59-867F-49C42BFC25FB";
}
public override DBResult DoDeal()
{
//return new DBResult();
if (callbackinfo.type == "finish")
{
return ReadDingtalkInstanceinfo(callbackinfo.processInstanceId);
}
else
{
return new DBResult();
}
}
public DBResult ReadDingtalkInstanceinfo(string processInstanceId)
{
var result = new DBResult();
//var userid=
try
{
result = DingTalkHelper.DingTalk_Instanceinfo(processInstanceId);
DingTalkInstanceinfo di = DSWeb.MvcShipping.Helper.JsonConvert.Deserialize(result.Data.ToString());
//根据内容修改wms_out_detail的值
var cdc = new CommonDataContext();
var lv = BasicDataRefDAL.GetLogicHaveValue("钉钉审批", "instanceId", processInstanceId);
if (lv != null && lv.ContainsKey("instanceId"))
{
var BSNO = lv["BSNO"];
var wmsold = new DSWeb.MvcShipping.Models.WMS.WMS_OUT_OLD(BSNO);
var wms_out = wmsold.wms_out;
var wms_out_detaillist = wmsold.wms_out_detail;
List updwmslist = new List();
var 车辆信息 = new wms_in_md();
foreach (var item in di.result.formComponentValues)
{
//从其中查找货物信息 并更新至当前
//if (item.name == "客户名称")
//{
// //var cust=cdc.info_client.Where(x=>x.SHORTNAME==item.value || x.DESCRIPTION==item.value)
//}
if (item.name == "出库日期")
{
wms_out.DODATE = Convert.ToDateTime(item.value);
cdc.wms_out.AddOrUpdate(wms_out);
}
if (item.name == "出库信息")
{
var 出库信息list = FormComponentValues.GetRowValues(item.value);
if (出库信息list != null)
{
foreach (var DingWmsin in 出库信息list)
{
//var 提单号 = DingWmsin.getValue("提单号");
//var 箱号 = DingWmsin.getValue("箱号");
//var 品名 = DingWmsin.getValue("品名");
var gid= DingWmsin.getValue("唯一标识");
if (wmsold.VW_WMS_OUT_DETAIL.Exists(x => x.GID_OUT == gid))
{
//var _outrec= wmsold.VW_WMS_OUT_DETAIL.First(x => x.GID_OUT == gid);
var updrec = wms_out_detaillist.First(x => x.GID== gid);
//new DingTalkFormField("提单号", item.BLNO),
//new DingTalkFormField("箱号", item.CNTRNO),
//new DingTalkFormField("品名", item.GOODSNAME),
//new DingTalkFormField("重量", item.GOODSRKSL.ToString()),
//new DingTalkFormField("件数", item.GOODSPACK.ToString()),
//new DingTalkFormField("尺码", item.CHIMA1.ToString()),
//new DingTalkFormField("库位", item.CHIMA1.ToString())
updrec.GOODSNAME = DingWmsin.getValue("品名");
if (wms_out.CHARGEUNIT == "吨" || wms_out.CHARGEUNIT == "千克")
{
updrec.GOODSPFSL = DingWmsin.getValue_decimal("重量");
updrec.GOODSKGS = DingWmsin.getValue_decimal("重量");
}
if (wms_out.CHARGEUNIT == "CBM")
{
updrec.GOODSPFSL = DingWmsin.getValue_decimal("尺码");
updrec.GOODSKGS =0;
}
updrec.GOODSPACK = DingWmsin.getValue("件数");
//updrec.AREANAME = DingWmsin.getValue("库位");
//updrec.DODATE = wms_out.DODATE;
updwmslist.Add(updrec);
}
else
{
}
}
}
}
if (item.name == "车辆信息")
{
var 车队信息list = FormComponentValues.GetRowValues(item.value);
if (车队信息list != null && 车队信息list.Count > 0)
{
车辆信息.TRUCKNO = 车队信息list[0].getValue("车牌号");
}
}
}
//cdc.wms.AddOrUpdate(wms);
if (updwmslist != null && updwmslist.Count > 0)
{
foreach (var item in updwmslist)
{
//item.CHEDUIID = 车辆信息.CHEDUIID;
item.TRUCKNO = 车辆信息.TRUCKNO;
cdc.wms_out_detail.AddOrUpdate(item);
}
}
cdc.SaveChanges();
//20230221 根据明细总数合计一下原业务的合计数
wms_out.SetSum(updwmslist);
cdc.SaveChanges();
//然后执行出库的费用入账原逻辑
var outtype = wms_out.IsDetail == "1" ? "StockOutDetail" : "StockOut";
DSWeb.MvcShipping.DAL.WMSOUT_GuiGeDAL.WMSOUT_GuiGeDAL.DoSetislock(wms_out.GID, (bool)wms_out.EIP, outtype,wms_out.CREATEUSER);
}
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return result;
}
}
#endregion
}