You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/Areas/CommMng/Controllers/WorkFlowController.cs

444 lines
16 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DSWeb.Areas.CommMng.DAL;
using DSWeb.Areas.CommMng.Models;
using DSWeb.Areas.OA.Models.WorkFlow;
using DSWeb.Areas.Import.Models.XXH;
using DSWeb.TruckMng.Helper;
using DSWeb.TruckMng.Comm.Cookie;
using Dingtalk;
using System.IO;
using System.Net.Http;
using System.Text;
using DSWeb.Areas.MvcShipping.Job;
using System.Runtime.Caching;
using DSWeb.Areas.MvcShipping.Models.Message.VGM;
using DSWeb.Areas.MvcShipping.Helper;
using HcUtility.Comm;
using DSWeb.MvcShipping.DAL.MsSysParamSet;
using NPOI.SS.Formula.Functions;
using sun.security.krb5.@internal.crypto;
namespace DSWeb.Areas.CommMng.Controllers
{
[JsonRequestBehavior]
public class WorkFlowController : Controller
{
//
// GET: /Import/XXH
public ActionResult Index()
{
return View();
}
//
// GET: /Import/XXH/Edit
public ActionResult Edit()
{
return View();
}
//提交审核
//开启工作流运行流程向workflow_Using表中插入数据。
/*
public ContentResult WorkFlowStart(string WorkFlowName, string BSNO, string USERID)
{
//var _count = 0;
//var corpid = Convert.ToString(Session["COMPANYID"]);
//var USERID = Convert.ToString(Session["USERID"]);
//var DEPTGID = Convert.ToString(Session["DEPTGID"]);
var Result = WorkFlowDAL.WorkFlowStart(WorkFlowName,BSNO, USERID);
var json = JsonConvert.Serialize(
new { Success = Result.Success, Message = Result.Message,totalCount=Result.totalCount });
return new ContentResult() { Content = json };
}*/
//撤回提交
public ContentResult WrokFlowReset(string WorkFlowName, string BSNO,string USERID)
{
//var corpid = Convert.ToString(Session["COMPANYID"]);
var Result = WorkFlowDAL.WorkFlowReset(WorkFlowName, BSNO, USERID);
var json = JsonConvert.Serialize(
new { Success = Result.Success, Message = Result.Message, totalCount = Result.totalCount });
return new ContentResult() { Content = json };
}
//通过工作流名称和用户名称获取该用户工作流ID
public WorkFlowmb GetWorkFlowID(string WorkFlowName)
{ //workflow.gid workflow_step.gid,userid
//var DEPTGID = Convert.ToString(Session["DEPTGID"]);
var UserID = Convert.ToString(CookieConfig.GetCookie_UserId(Request));
var _r = WorkFlowDAL.GetWorkFlowmb(WorkFlowName, UserID);
WorkFlowmb head = new WorkFlowmb();
if (_r.Success) head = (WorkFlowmb)_r.Data;
return head;
}
//通过工作流名称获取该用户工作流step
public JsonResult GetWorkFlowStep(string WorkFlowName)
{ //workflow.gid workflow_step.gid,userid
var OrgCode = Convert.ToString(CookieConfig.GetCookie_OrgCode(Request));
var UserID = Convert.ToString(CookieConfig.GetCookie_UserId(Request));
var evList = WorkFlowDAL.GetWorkFlowStep(WorkFlowName, UserID);
if (evList.Count == 0)
{
return Json(new { success = false });
}
else
{
return Json(new { success = true, data = evList.ToList() });
}
}
//获取工作流当前状态
public JsonResult GetWorkFlowBSNO(string WorkFlowName, string STEPNO)
{ //workflow.gid workflow_step.gid,userid
var USERID = Convert.ToString(CookieConfig.GetCookie_UserId(Request));
//由某一工作流环节调取由本方法获取该userid该stepid所能操作的bsno列表并返回。
//Workflow_usingmb head = null;
var WorkFlowID = GetWorkFlowID(WorkFlowName).GID;
if (WorkFlowID == null)
{
return Json(new { success = false, Message = "未找到相应工作流" });
}
List<WorkFlow_Usingmb> evList = WorkFlowDAL.GetWorkFlowBSNOList(WorkFlowID, System.Int32.Parse(STEPNO), USERID);
if (evList.Count == 0)
{
return Json(new { success = false });
}
else
{
return Json(new { success = true, data = evList.ToList() });
}
}
//获取某项业务的工作流当前状态
public JsonResult GetBSNOWorkFlowState(string WORKFLOWID, string BSNO)
{
var USERID = Convert.ToString(CookieConfig.GetCookie_UserId(Request));
//由某一工作流环节调取由本方法获取该userid该stepid所能操作的bsno列表并返回。
//Workflow_usingmb head = null;
//var WorkFlowID = GetWorkFlowID(WorkFlowName).GID;
if (WORKFLOWID == null)
{
return Json(new { success = false });
}
List<BSNOWorkFlowStatemb> evList = WorkFlowDAL.GetBSNOWorkFlow(WORKFLOWID, BSNO);
if (evList.Count == 0)
{
return Json(new { success = false });
}
else
{
return Json(new { success = true, data = evList.ToList() });
}
}
/// <summary>
/// *
/// </summary>
/// <param name="GID"></param>
/// <returns></returns>
/*
public Resultmb GetNeedAudit(string GID)
{
//HTmb head = null;
var _count = WorkFlowDAL.GetNeedAudit(GID);
var _result = new Resultmb();
if (_count == 0)
{
_result.Success = true;
}
else {
_result.Success = false;
_result.Message = "不能修改,还有" + _count.ToString() + "条业务等待此步骤审核,请将这些业务审核通过或完全撤回后再修改";
}
return _result;
}
*/
/// <summary>
///
/// </summary>
/// <param name="GID"></param>
/// <returns></returns>
public ContentResult GetCanChange(string GID)
{
//HTmb head = null;
var _CanChange = WorkFlowDAL.GetCanChange(GID);
var _result = new Resultmb();
if (_CanChange.ChangeStep==false)
{
_result.Success = false;
_result.Message = "不能修改,还有业务等待此步骤审核,请将这些业务审核通过或完全撤回后再修改";
}
else
{
_result.Success = true;
}
var jsonRespose = new JsonResponse
{
Success = _result.Success,
Message = _result.Message,
//Data = XXHDAL.GetData("M.ContractNo='" + head.ContractNo + "'")
};
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
public ContentResult GetCanChange_UserPath(string USERID,string TYPENO,string NewWorkFlowID)
{
//HTmb head = null;
var _result = WorkFlowDAL.GetCanChange_UserPath(USERID, TYPENO, NewWorkFlowID);
var Result = new Resultmb();
if (_result == false)
{
Result.Success = false;
Result.Message = "不能修改,还有业务等待此步骤审核,请将这些业务审核通过或完全撤回后再修改";
}
else
{
Result.Success = true;
}
var jsonRespose = new JsonResponse
{
Success = Result.Success,
Message = Result.Message,
//Data = XXHDAL.GetData("M.ContractNo='" + head.ContractNo + "'")
};
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
/// <summary>
/// 钉钉审批 返回解析
/// </summary>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <returns></returns>
[System.Web.Mvc.HttpPost]
public string DingdingCallback(string signature, string timestamp, string nonce)
{
//JeffSoft.Logger.Error("DingdingCallback Success:" + signature + "," + timestamp + "");
//第一部分
//这两句代码是为了接收body体中传入的加密json串
StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8);
var strJson = new StringBuilder();
string line = null;
while (((line = sr.ReadLine())) != null)
{
strJson.Append(line);
}
//BasicDataRefDAL.SaveLog("["+signature+"]["+ timestamp+"]["+ nonce+"]"+"["+ strJson + "]", "admin", "钉钉回调", "保存");
//反序列化json串拿去加密字符串
var objRtn = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(strJson.ToString(), new { encrypt = "" });
string ever = objRtn.encrypt;
var appname = MsSysParamSetDAL.GetSysParamValue("DingTalkAppName");
//var 钉钉应用 = DingTalkApp.GetDingTalkApp("诚锐东胜对接");
var = DingTalkApp.GetDingTalkApp(appname);
//钉钉应用=DingTalkProcess.GetDingTalkProcessByProcessCode(callbackinfo.processCode);
//实例化钉钉解密类构造参数为对应的 应用中的token、aes_key、AppKey值
DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(.token, .aes_key, .appkey);
//定义字符串接收解密后的值
string text = dingTalkEncryptor.getDecryptMsg(signature, timestamp, nonce, ever);
//JeffSoft.Logger.Error("dingTalkEncryptor.getDecryptMsg:" + text + "");
BasicDataRefDAL.SaveLog( text , "admin", "钉钉回调", "保存1");
var callbackinfo = JsonConvert.Deserialize<CallBackInfo>(text);
var = .GetDingTalkProcessByProcessCode(callbackinfo.processCode);
.SaveCallBack(callbackinfo);
//var objRtn2 = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(text.ToString(), new { EventType = "" });
//var _jsstr = JsonConvert.Serialize(objRtn2);
//BasicDataRefDAL.SaveLog(_jsstr, "admin", "钉钉回调", "保存2");
//取出事件类型字段
//JeffSoft.Logger.Error("DingdingCallback Success,EventType:" + EventType + "");
//第二部分
// { //判断事件类型是否是日程事件
if ("bpms_instance_change" == callbackinfo.EventType)
{
var DingCallBackMsg = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(text.ToString(), new DingCallBackMsg());
var DDtitle = DingCallBackMsg.title;
var DDresult = DingCallBackMsg.result;
var mes = string.Format("bpms_instance_change Success,title:{0},result:{1}", DDtitle, DDresult);
.DoDeal();
//if ()
//result = DingTalkHelper.DingTalk_Instanceinfo("i0P82FAHT_G9TWJmavxGdg03131673000830");
//var _jsstr3 = JsonConvert.Serialize(objRtn2);
//BasicDataRefDAL.SaveLog(_jsstr, "admin", "钉钉回调", "保存3");
//JeffSoft.Logger.Error(mes);
}
//第三部分
//返回加密字符串
var msg = dingTalkEncryptor.getEncryptedMap("success");
var msg_signature = msg["msg_signature"];
var encrypt = msg["encrypt"];
var timeStamp = msg["timeStamp"];
var nonce1 = msg["nonce"];
var v = new
{
msg_signature = msg["msg_signature"],
encrypt = msg["encrypt"],
timeStamp = msg["timeStamp"],
nonce = msg["nonce"],
};
//var obj = new { success = r };
// return Json(obj);
var data = Newtonsoft.Json.JsonConvert.SerializeObject(v);
return data;
}
[System.Web.Mvc.HttpPost]
public string Test_DingdingCallback(string text)
{
var result = "";
try {
var _r = new DBResult();
var appname = MsSysParamSetDAL.GetSysParamValue("DingTalkAppName");
//var 钉钉应用 = DingTalkApp.GetDingTalkApp("诚锐东胜对接");
var = DingTalkApp.GetDingTalkApp(appname);
//钉钉应用=DingTalkProcess.GetDingTalkProcessByProcessCode(callbackinfo.processCode);
//实例化钉钉解密类构造参数为对应的 应用中的token、aes_key、AppKey值
DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(.token, .aes_key, .appkey);
//定义字符串接收解密后的值
//JeffSoft.Logger.Error("dingTalkEncryptor.getDecryptMsg:" + text + "");
BasicDataRefDAL.SaveLog(text, "admin", "钉钉回调", "测试1");
var callbackinfo = JsonConvert.Deserialize<CallBackInfo>(text);
var = .GetDingTalkProcessByProcessCode(callbackinfo.processCode);
.SaveCallBack(callbackinfo);
// { //判断事件类型是否是日程事件
if ("bpms_instance_change" == callbackinfo.EventType)
{
var DingCallBackMsg = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(text.ToString(), new DingCallBackMsg());
var DDtitle = DingCallBackMsg.title;
var DDresult = DingCallBackMsg.result;
var mes = string.Format("bpms_instance_change Success,title:{0},result:{1}", DDtitle, DDresult);
_r= .DoDeal();
//if ()
//result = DingTalkHelper.DingTalk_Instanceinfo("i0P82FAHT_G9TWJmavxGdg03131673000830");
//var _jsstr3 = JsonConvert.Serialize(objRtn2);
//BasicDataRefDAL.SaveLog(_jsstr, "admin", "钉钉回调", "保存3");
//JeffSoft.Logger.Error(mes);
}
var data = Newtonsoft.Json.JsonConvert.SerializeObject(_r);
return data;
}
catch(Exception ex)
{
return ex.Message;
}
}
public class CallBackInfo
{
/// <summary>
///
/// </summary>
public string processInstanceId { get; set; }
/// <summary>
///
/// </summary>
public string corpId { get; set; }
/// <summary>
///
/// </summary>
public string EventType { get; set; }
/// <summary>
///
/// </summary>
public string businessId { get; set; }
/// <summary>
/// 邓羽提交的入货通知
/// </summary>
public string title { get; set; }
/// <summary>
///
/// </summary>
public string type { get; set; }
/// <summary>
///
/// </summary>
public long? createTime { get; set; }
/// <summary>
///
/// </summary>
public string processCode { get; set; }
/// <summary>
///
/// </summary>
public string bizCategoryId { get; set; }
/// <summary>
///
/// </summary>
public string businessType { get; set; }
/// <summary>
///
/// </summary>
public string staffId { get; set; }
/// <summary>
///
/// </summary>
public long? taskId { get; set; }
}
}
}