修改会签节点可撤回,增加自定义常用联系人,修改推送oa待办数据不准问题,修改生成word特殊字符的名称无法生成问题

master
孙亮 3 months ago
parent fc963301af
commit 53efd3b009

@ -189,4 +189,31 @@ function IsSaveDtl() {
});
return regInput;
}
}
function chart() {
var trs = $('.table.wupop tbody tr');
var pushArray = [];
for (var i = 0; i < trs.length; i++) {
var index = i;
var trData = $($('table tbody tr')[index]).data().data;
trData.FK_Flow = GetQueryString("FK_Flow");
pushArray.push(trData);
}
//localStorage.setItem('pushArray', JSON.stringify(pushArray));
let dtlData = JSON.stringify(pushArray);
let body = {}
body.code = '@host#control#openPage';
body.data = {
newPage: false,
params: {
dtlData
},
moduleId: 'b9ff8cfe-005a-1833-9445-bed425bf623a'
}
body.msg = '跳转';
body.to = 'iBKLinker-union-framework';
body.from = 'prd';
window.top?.postMessage(body, '*')
}

@ -20,7 +20,7 @@
</head>
<body>
<h3>单组织版-集团版-SAAS登陆</h3>
<%-- <h3>单组织版-集团版-SAAS登陆</h3>
<ul>
<li><a href="/Portal/Standard/Login.htm">用户登录 /Portal/Standard/Login.htm</a></li>
</ul>
@ -51,7 +51,7 @@
<h3>JFlow</h3>
<ul>
<li><a href="http://localhost:8085">http://localhost:8085 - JFlow </a></li>
</ul>
</ul>--%>
</body>
</html>

@ -87,7 +87,7 @@
</head>
<body>
<h3>单组织版-集团版-SAAS登陆</h3>
<!--<h3>单组织版-集团版-SAAS登陆</h3>
<ul>
<li><a href="/Portal/Standard/Login.htm">用户登录 /Portal/Standard/Login.htm</a></li>
</ul>
@ -118,6 +118,6 @@
<h3>JFlow</h3>
<ul>
<li><a href="http://localhost:8085">http://localhost:8085 - JFlow </a></li>
</ul>
</ul>-->
</body>
</html>

@ -312,7 +312,7 @@
<section class="login-form">
<div class="set-right-login">
<div class="login-form-header">
<div>驰骋软件</div>
<div>工作台</div>
</div>
<div class="login-form-body">
<form id="cc" class="form-signin">

@ -379,7 +379,7 @@ function FileShowWayTable(athDesc, dbs, uploadUrl) {
_html += "<a href=\"javascript:GFDoDown('" + db.MyPK + "','" + athDesc.MyPK + "');\">下移</a >";
}
if (athDesc.IsChangeFileName == 1 && athDesc.IsReadonly != 1) {
_html += "<a href=\"javascript:ChangeFileName('" + db.MyPK + "' )\">修改文件名</a >";
_html += "<a href=\"javascript:ChangeFileName('" + db.MyPK + "','" + db.FileName +"' )\">修改文件名</a >";
}
if (isHaveSort == true)
_html += "<a href='javaScript:void(0)' onclick='changeSort(\"" + sort + "\",\"" + athDesc.MyPK + "\")'>上传</a>";
@ -446,9 +446,7 @@ function FileShowWayTable(athDesc, dbs, uploadUrl) {
_html += "<td><a href=\"\" onclick='return SaveUpload(\"" + athDesc.MyPK + "\",\"" + uploadUrl + "\")'>保存</a></td>";
} else
_html += "<td></td>";
}
}
_html += "</tr>";
}

@ -846,6 +846,7 @@
//添加删除,保存列
var delTh = "";
var impModel = sys_MapDtl.ImpModel;
var BtnLabs = sys_MapDtl.BtnLab;
var IsExp = sys_MapDtl.IsImp;//导出
var th = $("<th style='width:120px;white-space: nowrap;'" + rowspan + "></th>");
var imgStr = "";
@ -865,6 +866,17 @@
imgStr += '<img title="选项" style="width: 40px;padding: 0px 5px;cursor:pointer;" src="../Img/Btn/import.png" onclick="Option(' + impModel + ');" />';
}
if (BtnLabs.length > 0) {
var BtnLab = BtnLabs.split(",");
for (var i = 0; i < BtnLab.length; i++) {
var str = BtnLab[i];
if (str == "")
continue;
var strs = str.split("@");
imgStr += "<button title='" + strs[0] + "' type='button' class='layui-btn layui-btn-primary layui-btn-sm' onclick='" + strs[1] + "'><i class='layui-icon layui-icon-export'></i>" + strs[0] + "</button>";
}
}
if (isShowFull != "1")
//imgStr += '<img title="全屏显示" style="width: 30px;padding: 0px 5px;cursor:pointer;" src="../Img/Full.png" onclick="WindowOpenDtl()" />'

@ -96,6 +96,34 @@
margin-bottom: 10px;
padding-bottom: 5px;
}
/*常用联系人*/
.captionHeader {
border-top: 1px solid #dfe7ec;
height: 50px;
overflow: hidden;
}
.rect {
display: block;
float: left;
width: 5px;
height: 23px;
margin-left: 5px;
margin-top: 23px;
background-color: #4942E4;
}
.caption {
display: block;
float: left;
margin-top: 20px;
margin-left: 5px;
font-size: 20px;
font-weight: bold;
width: 15%;
}
</style>
<script type="text/javascript">
var param = {};
@ -107,6 +135,7 @@
if (isFrameCross == null || isFrameCross == undefined || isFrameCross == "" || isFrameCross == "null")
isFrameCross = 0;
var pageFrom = GetQueryString("PageFrom");
var selectType = "select";
//判断读秒关闭的参数是否存在
if ("undefined" == typeof WF_WorkOpt_LeftSecond) {
var WF_WorkOpt_LeftSecond = 30;
@ -136,10 +165,23 @@
window.parent.close();
return;
}
var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
handler.AddUrlData(); //参数:ToNode,FK_Flow,FK_Node,WorkID
var callerData = handler.DoMethodReturnString("AccepterOfGenerCaller_Init");
if (callerData.indexOf('err@') == 0) {
alert(callerData);
window.parent.close();
return;
}
//获得结果集.该结果集有如下数据: SELECT * FROM WF_SelectAccper
var sas = JSON.parse(data);
var sasCaller = JSON.parse(callerData);
BindTable(sas); //开始渲染列表.
//开始渲染列表.
BindTable(sas);
BindTableCallers(sasCaller);
//初始化人员选择窗口
@ -159,6 +201,24 @@
$('body').append($(selectEmpModalHtml));
//常用联系人
var selectEmpModalHtml2 = '<div class="modal fade" id="SelectEmpsModal2">' +
'<div class="modal-dialog" style="width:700px;">'
+ '<div class="modal-content" style="">'
+ '<div class="modal-header">'
+ '<button type="button" class="close" style="color:#000;opacity:1;" data-dismiss="modal" aria-hidden="true">&times;</button>'
+ '<h4 class="modal-title">接受人</h4>'
+ '</div>'
+ '<div class="modal-body" style="border-radius: 0px; ">'
+ '<iframe style="width:100%;border:0px;height:400px;" id="iframeSelectEmpsForm2" name="iframeSelectEmpsForm2"></iframe>'
+ '</div>'
+ '</div><!-- /.modal-content -->'
+ '</div><!-- /.modal-dialog -->'
+ '</div>';
$('body').append($(selectEmpModalHtml2));
//获得部门编号.
var u = new WebUser();
@ -176,6 +236,17 @@
var iframeUrl = url + "&SelectedEmps=" + selectEmpNo;
$('#iframeSelectEmpsForm').attr('src', iframeUrl);
$('#SelectEmpsModal').modal().show();
selectType = "select";
});
$(".Msg").hide();
$('#Btn_SelectEmps2').bind('click', function () {
var iframeUrl = url + "&SelectedEmps=" + selectEmpNo;
$('#iframeSelectEmpsForm2').attr('src', iframeUrl);
$('#SelectEmpsModal2').modal().show();
selectType = "callers";
});
$(".Msg").hide();
@ -224,24 +295,76 @@
selectEmpNo += sa.FK_Emp + ","
}
}
function BindTableCallers(sas) {
//得到行对象
function ClearTable() {
var isDel = true;
var toNodeID = GetQueryString("ToNode");
var sa = new Entity("BP.WF.Template.Selector", toNodeID);
if (sa.IsSimpleSelector == 1) { //是否单项选择.
isDel = false; //如果是单项选择,就可以有移除按钮.
isSigleSelect = true;
}
IsSimpleSelector = sa.IsSimpleSelector;
selectEmp = "";
selectEmpNo = "";
for (var i = 0; i < sas.length; i++) {
var sa = sas[i];
var row = "";
row += "<tr>";
row += "<td style='width:20px;'><input type='checkbox' name='Callers' id='" + sa.Callers +"' /></td>";
row += "<td>" + (i + 1) + "</td>";
//row += "<td>" + sa.FK_Emp + "</td>";
row += "<td>" + sa.EmpName + "</td>";
row += "<td title='" + sa.DeptName + "' >" + sa.DeptName + "</td>";
var table = $("#Table1");
var tbody = $("#Table1 tbody");
var trArr = $("#Table1 tbody tr");
for (var i = 0; i < trArr.length; i++) {
if (isDel == true)
row += "<td style='width:40px;'><a href=\"javascript:DeleteItCaller('" + sa.MyPK + "');\" ><i class=icon-close></i> 移除</a></td>";
else
row += "<td style='width:40px;'> <a href=\"javascript:alert('当前节点是单选节点,当前处理人是默认自动计算的处理人,请选择一个处理人,系统就会自动替换掉。');\">帮助</a></td>";
var tr = trArr[i];
console.info(tr.id);
if (tr.id == "title")
continue;
row += "</tr>";
tbody.empty();
$("#Table2 tbody").append(row);
selectEmp += sa.EmpName + ",";
selectEmpNo += sa.FK_Emp + ","
}
}
//得到行对象
function ClearTable(selectType) {
if (selectType == "select") {
var table = $("#Table1");
var tbody = $("#Table1 tbody");
var trArr = $("#Table1 tbody tr");
for (var i = 0; i < trArr.length; i++) {
var tr = trArr[i];
console.info(tr.id);
if (tr.id == "title")
continue;
tbody.empty();
}
} else {
var table = $("#Table2");
var tbody = $("#Table2 tbody");
var trArr = $("#Table2 tbody tr");
for (var i = 0; i < trArr.length; i++) {
var tr = trArr[i];
console.info(tr.id);
if (tr.id == "title")
continue;
tbody.empty();
}
}
}
function Ref() {
Reload();
}
@ -262,6 +385,22 @@
Reload();
return;
}
function DeleteItCaller(mypk) {
var en = new Entity("BP.WF.Template.SelectCaller", mypk);
en.Delete();
Reload();
return;
}
function selectAllRows() {
var checkboxes = document.querySelectorAll('tbody input[type="checkbox"]');
var selectAllCheckbox = document.getElementById('selectAll');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = selectAllCheckbox.checked;
}
}
//确定 执行下一步接受人员列表操作.
function AddEmps(isSend) {
@ -273,11 +412,16 @@
AddEmpsExt(isSend, emps);
}
function AddEmpsExt(isSend, emps) {
function AddEmpsExt(isSend, emps, selectType) {
var data;
var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
handler.AddUrlData(); //参数ToNode, WorkID,FK_Node,FK_Flow
handler.AddPara("AddEmps", emps); //要增加的人员,多个可以用逗号分开.
var data = handler.DoMethodReturnString("AccepterOfGener_AddEmps");
if (selectType == "select") {
data = handler.DoMethodReturnString("AccepterOfGener_AddEmps");
} else {
data = handler.DoMethodReturnString("AccepterOfGener_AddCalls");
}
if (data.indexOf('err@') == 0) {
alert(data);
@ -295,9 +439,13 @@
SendIt();
return;
}
ClearTable();
ClearTable(selectType);
var gwls = JSON.parse(data);
BindTable(gwls);
if (selectType == "select") {
BindTable(gwls);
} else {
BindTableCallers(gwls);
}
document.getElementById("TB_Emps").value = ""; //把人员的文本框清空.
return;
@ -347,9 +495,27 @@
return;
}
var table1 = document.getElementById('Table1');
var rows1 = table1.getElementsByTagName('tr');
var table2 = document.getElementById('Table2');
var rows2 = table2.getElementsByTagName('tr');
var callerFilds = "";
var inputArray = $("input[type='checkbox']:checked");
for (var i = 0; i < inputArray.length; i++) {
var input = inputArray[i];
callerFilds += input.id + ",";
}
if (rows1.length < 2 || callerFilds == "") {
alert("请选中人员再点击发送。");
return;
}
var httphandler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
httphandler.AddUrlData(); //FK_Flow,FK_Node,WorkID,FID,ToNode 等参数.
httphandler.AddPara("Callers", callerFilds);
$("#Btn_Send").attr("disabled", "disabled"); //把发送按钮设置不可用.
$("#Btn_Send").text("正在发送请稍候...");
$("#Btn_Close").attr("disabled", "disabled"); //关闭按钮设置不可以用.
@ -361,6 +527,11 @@
DealErrMsg(data);
if (msgTech == "") {
var find = 'err@';
var re = new RegExp(find, 'g');
data = data.replace(re, '');
//alert(data);
$(".Msg").show();
$(".Msg").html(data);
$(".Msg").css("color", "red");
@ -370,6 +541,8 @@
$("#Btn_Send").text("发送");
$("#Btn_Close").attr("disabled", false);
$("#Btn_SelectEmps").attr("disabled", false);
$("#Btn_SelectEmps2").attr("disabled", false);
return;
}
if (isFrameCross == 0) {
@ -429,6 +602,7 @@
//隐藏table.
document.getElementById("Table1").style.display = "none";
document.getElementById("divCallers").style.display = "none";
document.getElementById("TB_Emps").style.display = "none";
//document.getElementById("Btn_SelectEmps").style.display = "none";
@ -525,17 +699,29 @@
//设置选中的人员
function selectEmpsWindowClose(data) {
$('#SelectEmpsModal').modal('hide');
$('#SelectEmpsModal2').modal('hide');//常用联系人的
if (data == '取消') {
return;
}
//返回的人员编号.
var val = frames["iframeSelectEmpsForm"].window.returnVal.No;
var val;//通用选择器
if (selectType == "callers") {
val = frames["iframeSelectEmpsForm2"].window.returnVal.No;//常用联系人
} else {
val = frames["iframeSelectEmpsForm"].window.returnVal.No;
}
AddEmpsExt(false, val, selectType); //调用增加接受人方法, fase=不让其发送. val= 选择的人员编号.
// alert(val);
AddEmpsExt(false, val); //调用增加接受人方法, fase=不让其发送. val= 选择的人员编号.
//AddEmpsExt(false, val); //调用增加接受人方法, fase=不让其发送. val= 选择的人员编号.
//$('#TB_Emps').val(frames["iframeSelectEmpsForm"].window.returnVal.No);
}
@ -631,6 +817,18 @@
}
//显示隐藏常用联系人
function Show() {
var c = document.getElementById('Callers');
if (c.style.display === 'none') {
c.style.display = 'block';
document.querySelector('#Show').innerText = '隐藏';
} else {
document.querySelector('#Show').innerText = '显示';
c.style.display = 'none';
}
}
</script>
@ -671,8 +869,6 @@
</div>
<div class="form-unit">选择接收人</div>
</div>
<table class="table table-striped" id="Table1" style="width:98%;padding:5px; margin:10px;">
<!-- <caption>下一步接受人员列表</caption>-->
<thead>
@ -699,27 +895,77 @@
<div id="SelectEmp"></div>
</div>
<div style="margin-top:-4px;" >
<div style="margin-top:-4px;">
<button id="Btn_SelectEmps">
<img src="../Img/Btn/AddLeader.png" /> 选人
</button>
</div>
</div>
<div id="next">
<button onclick="Send();" id="Btn_Send">
<img src="../Img/Btn/Send.png" /> 发送
</button>
<button onclick="DelayedSend();" id="Btn_DelayedSend" style="display:none">
<img src="../Img/Btn/Send.png" /> 延期发送
</button>
<button onclick="CloseModel();" id="Btn_Close">
<img src="../Img/Btn/Close.png" /> 关闭
</button>
</div>
<!--显示常用联系人-->
<div id="divCallers">
<div class="captionHeader">
<span class="rect"></span>
<span class="caption">常用联系人</span>
<button onclick="Show();" id="Show" style="margin-top: 20px;">显示</button>
</div>
<div id="Callers" style="margin-top:20px;">
<table class="table table-striped" id="Table2" style="width:98%;padding:5px; margin:10px;">
<!-- <caption>下一步接受人员列表</caption>-->
<thead>
<tr id="title" class="Sum">
<td><input type="checkbox" id="selectAll" onchange="selectAllRows()" /></td>
<td style="width:40px; font-weight:bolder">#</td>
<!--<th>编号 </th>-->
<td style="width:30%; font-weight:bolder">姓名</td>
<!--<td style="width:40%; font-weight:bolder">部门 &nbsp; - &nbsp; <a href="javascript:Ref()">刷新</a></td>-->
<td style="width:40%; font-weight:bolder">部门</td>
<td style="width:60px; font-weight:bolder" colspan="3">操作</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
<div style="margin-left:20px;display:flex;justify-content:space-between;">
<div style="display:flex;margin-top:4px">
<div>
<input type="text" id="TB_Emps" name="TB_Emps"
title="输入: zs或zhangs或zhangsan"
placeholder="查张三,您可输入: zs或zhangs或zhangsan"
value='' style="width: 350px; height: 25px;" />
<div id="SelectEmp"></div>
</div>
<div style="margin-top:-4px;">
<button id="Btn_SelectEmps2">
<img src="../Img/Btn/AddLeader.png" /> 选人
</button>
</div>
</div>
</div>
</div>
</div>
<!--执行发送-->
<div id="next">
<button onclick="Send();" id="Btn_Send">
<img src="../Img/Btn/Send.png" /> 发送
</button>
<button onclick="DelayedSend();" id="Btn_DelayedSend" style="display:none">
<img src="../Img/Btn/Send.png" /> 延期发送
</button>
<button onclick="CloseModel();" id="Btn_Close">
<img src="../Img/Btn/Close.png" /> 关闭
</button>
</div>
</body>
</body>
</html>

@ -88,10 +88,21 @@
//如果是一个url.
if (data.indexOf('file@') == 0) {
data = data.replace('file@', '');
if (data.indexOf('rtf@') != -1) {
window.location.href = filterXSS(data).replace('rtf@', '');
data = filterXSS(data).replace('rtf@', '');
if (data.lastIndexOf('/') == -1) {
data = ReplaceName(data);
window.location.href = filterXSS(data);
}
var filePath = data.substring(0, data.lastIndexOf('/') + 1);
var fileName = data.substring(data.lastIndexOf('/') + 1);
fileName = ReplaceName(fileName);
data = filePath + fileName;
window.location.href = filterXSS(data);
return;
} else {
data = data.replace('word@', '');
if (plant == 'CCFlow') {
@ -168,10 +179,21 @@
}
//如果是一个url.
if (data.indexOf('url@') == 0) {
data = data.replace('url@', '');
data = data.replace('file@', '');
if (data.indexOf('rtf@') != -1) {
window.location.href = filterXSS(data).replace('rtf@', '');
data = filterXSS(data).replace('rtf@', '');
if (data.lastIndexOf('/') == -1) {
data = ReplaceName(data);
window.location.href = filterXSS(data);
}
var filePath = data.substring(0, data.lastIndexOf('/') + 1);
var fileName = data.substring(data.lastIndexOf('/') + 1);
fileName = ReplaceName(fileName);
data = filePath + fileName;
window.location.href = filterXSS(data);
return;
} else {
data = data.replace('word@', '');
@ -190,10 +212,21 @@
//如果是一个url.
if (data.indexOf('file@') == 0) {
data = data.replace('file@', '');
if (data.indexOf('rtf@') != -1) {
window.location.href = filterXSS(data).replace('rtf@', '');
data = filterXSS(data).replace('rtf@', '');
if (data.lastIndexOf('/') == -1) {
data = ReplaceName(data);
window.location.href = filterXSS(data);
}
var filePath = data.substring(0, data.lastIndexOf('/') + 1);
var fileName = data.substring(data.lastIndexOf('/') + 1);
fileName = ReplaceName(fileName);
data = filePath + fileName;
window.location.href = filterXSS(data);
return;
} else {
data = data.replace('word@', '');
if (plant == 'CCFlow') {
@ -286,6 +319,17 @@
}
}
function ReplaceName(fileName) {
fileName = fileName.replace(/%/g, "%25");
fileName = fileName.replace(/\+/g, "%2B");
fileName = fileName.replace(/ /g, "%20");
fileName = fileName.replace(/\//g, "%2F");
fileName = fileName.replace(/\?/g, "%3F");
fileName = fileName.replace(/#/g, "%23");
fileName = fileName.replace(/&/g, "%26");
fileName = fileName.replace(/=/g, "%3D");
return fileName;
}
</script>
<link href="../../DataUser/Style/ccbpm.css" rel="stylesheet" type="text/css" />

@ -1,5 +1,6 @@
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.WF;
using System;
using System.Collections.Generic;
@ -38,7 +39,7 @@ namespace BP.Demo
{
BP.DA.DBAccess.RunSQL("UPDATE " + pTable2 + " SET BFSJ = '" + BFParas.Rows[0][2] + "' WHERE OID=" + BFParas.Rows[0][1]);
}
}
catch (Exception ex) {
return ex.Message;

@ -126,6 +126,10 @@ namespace BP.Sys
/// </summary>
public const string UrlDtl = "UrlDtl";
/// <summary>
/// 扩展按钮
/// </summary>
public const String BtnLab = "BtnLab";
/// <summary>
/// 移动端显示方式
/// </summary>
public const string MobileShowModel = "MobileShowModel";
@ -1283,6 +1287,8 @@ namespace BP.Sys
map.AddTBInt(MapDtlAttr.EditModel, 0, "行数据显示格式", false, false);
map.AddTBString(MapDtlAttr.UrlDtl, null, "自定义Url", true, false, 0, 200, 20, true);
map.AddTBString(MapDtlAttr.BtnLab, null, "扩展按钮", true, false, 0, 200, 20, true);
map.AddTBString(MapDtlAttr.ColAutoExp, null, "列字段计算", true, false, 0, 200, 20, true);
map.AddTBInt(MapDtlAttr.MobileShowModel, 0, "移动端数据显示格式", false, false);
map.AddTBString(MapDtlAttr.MobileShowField, null, "移动端列表显示字段", true, false, 0, 100, 20);

@ -646,6 +646,7 @@
<Compile Include="Template\NodeTeam.cs" />
<Compile Include="Template\Part.cs" />
<Compile Include="Template\PowerModel.cs" />
<Compile Include="Template\SelectCaller.cs" />
<Compile Include="Template\SQLTemplate.cs" />
<Compile Include="Template\DirectionStation.cs" />
<Compile Include="Template\SFlow\SubFlowHandGuide.cs" />

@ -3,6 +3,7 @@ using System.Data;
using BP.DA;
using BP.Sys;
using BP.En;
using BP.Web;
namespace BP.WF.Data.AdminGroup
{

@ -59,7 +59,36 @@ namespace BP.WF
//ps.SQL = "SELECT count(b.WorkID) as Num FROM WF_Generworkflow a JOIN WF_GenerWorkerList b ON a.WorkID=b.WorkID WHERE b.FK_Emp=" + dbstr + "FK_Emp AND b.IsPass=0 AND a.WFState <> 0 " + wfSql;
ps.SQL = "SELECT count(WorkID) as Num FROM WF_EmpWorks where WFSTATE>1 and Tasksta = 0 AND FK_Emp ="+dbstr+" FK_Emp "+wfSql;
ps.Add("FK_Emp", userNo);
return DBAccess.RunSQLReturnValInt(ps);
//获得授权信息.
Auths aths = new Auths();
aths.Retrieve(AuthAttr.AutherToEmpNo, userNo);
string sql = "SELECT A.*, null as Auther FROM WF_EmpWorks A WHERE TaskSta <0 AND A.FK_Emp='" + userNo + "' ";
foreach (Auth ath in aths)
{
string todata = ath.TakeBackDT.Replace("-", "");
if (DataType.IsNullOrEmpty(ath.TakeBackDT) == false)
{
int mydt = int.Parse(todata);
int nodt = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
if (mydt < nodt)
continue;
sql += " UNION ";
if (ath.AuthType == AuthorWay.SpecFlows)
sql += "SELECT A.*,'" + ath.Auther + "' as Auther FROM WF_EmpWorks A WHERE FK_Emp='" + ath.Auther + "' AND FK_Flow='" + ath.FlowNo + "' ";
else
sql += "SELECT A.*,'" + ath.Auther + "' as Auther FROM WF_EmpWorks A WHERE FK_Emp='" + ath.Auther + "' ";
}
}
DataTable dt2 = DBAccess.RunSQLReturnTable(sql);
int num = DBAccess.RunSQLReturnValInt(ps) - dt2.Rows.Count;
return num;
}
}
@ -78,7 +107,34 @@ namespace BP.WF
//ps.SQL = "SELECT count(b.WorkID) as Num FROM WF_Generworkflow a JOIN WF_GenerWorkerList b ON a.WorkID=b.WorkID WHERE b.FK_Emp=" + dbstr + "FK_Emp AND b.IsPass=0 AND a.WFState <> 0 " + wfSql;
ps.SQL = "SELECT count(WorkID) as Num FROM WF_EmpWorks where WFSTATE >1 and Tasksta = 0 AND FK_Emp = " + dbstr + " FK_Emp " + wfSql;
ps.Add("FK_Emp", userNo);
nums = DBAccess.RunSQLReturnValInt(ps);
//获得授权信息.
Auths aths = new Auths();
aths.Retrieve(AuthAttr.AutherToEmpNo, userNo);
string sql = "SELECT A.*, null as Auther FROM WF_EmpWorks A WHERE TaskSta <0 AND A.FK_Emp='" + userNo + "' ";
foreach (Auth ath in aths)
{
string todata = ath.TakeBackDT.Replace("-", "");
if (DataType.IsNullOrEmpty(ath.TakeBackDT) == false)
{
int mydt = int.Parse(todata);
int nodt = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
if (mydt < nodt)
continue;
sql += " UNION ";
if (ath.AuthType == AuthorWay.SpecFlows)
sql += "SELECT A.*,'" + ath.Auther + "' as Auther FROM WF_EmpWorks A WHERE FK_Emp='" + ath.Auther + "' AND FK_Flow='" + ath.FlowNo + "' ";
else
sql += "SELECT A.*,'" + ath.Auther + "' as Auther FROM WF_EmpWorks A WHERE FK_Emp='" + ath.Auther + "' ";
}
}
DataTable dt2 = DBAccess.RunSQLReturnTable(sql);
nums = DBAccess.RunSQLReturnValInt(ps) - dt2.Rows.Count;
}
return nums;
@ -6735,6 +6791,8 @@ namespace BP.WF
todoEmps += emp.UserID + "," + emp.Name + ";";
num++;
emps.AddEntity(emp);
}
#endregion 处理要调整到的人员
@ -6747,6 +6805,18 @@ namespace BP.WF
//给当前人员产生待办,删除他.
GenerWorkerList gwl = new GenerWorkerList();
//移交后写入最新待办,调整人@BKGY
string sql3 = "select WorkID,FK_Emp from WF_GenerWorkerlist where WorkID = '"+ workid + "' AND FK_Node = '"+ gwf.NodeID + "'";
DataTable dtNum = DBAccess.RunSQLReturnTable(sql3);
string sql2 = "";
foreach (DataRow dr in dtNum.Rows)
{
//流程调整前写入最新待办 调整节点@BKGY
sql2 = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql2 += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + dr[1] + "','" + BP.WF.Dev2Interface.EmpWorksNums(dr[1].ToString()) + "','0')";
DBAccess.RunSQL(sql2);
}
//删除当前节点的d待办.
gwl.Delete(GenerWorkerListAttr.WorkID, workid, GenerWorkerListAttr.FK_Node, gwf.NodeID);
//删除要调整到的节点数据.
@ -6777,6 +6847,12 @@ namespace BP.WF
gwl.FlowNo = nd.FlowNo;
gwl.ItIsEnable = true;
gwl.Insert();
//调整后写入最新待办,被调整人@BKGY
sql2 = "";
sql2 = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql2 += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + emp.UserID + "','" + BP.WF.Dev2Interface.EmpWorksNums(emp.UserID) + "','0')";
DBAccess.RunSQL(sql2);
todoEmpsExts += item.UserID + "," + item.Name + ";";
}
@ -10315,6 +10391,74 @@ namespace BP.WF
cdEvent.Wait();
#endregion
}
/// <summary>
/// 增加下一步骤的常用联系人
/// </summary>
/// <param name="toNodeID">到达的节点ID</param>
/// <param name="emps">如果多个就用逗号分开</param>
/// <param name="Del_Selected">是否删除历史选择</param>
public static void Node_AddNextStepCalls(int toNodeID, string emps, bool del_Selected = true)
{
if (DataType.IsNullOrEmpty(emps) == true)
return;
string selectEmps = ",";
string sql = "SELECT MyPK,FK_Emp,FK_Node,Tag FROM WF_SelectCallers WHERE FK_Node = " + toNodeID + " AND FK_Emp = '" + WebUser.No + "'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow item in dt.Rows)
selectEmps += item[1].ToString() + ",";
string[] empStrs = emps.Split(',');
if (empStrs.Length == 0) return;
#region 筛选需要执行的任务
dt = DBAccess.RunSQLReturnTable("Select e.FK_Dept, e.No as UserID, e.Name, d.Name as FK_DeptText from Port_Emp e left join port_dept d on e.FK_Dept = d.No where e.No IN ('" + String.Join("','", empStrs) + "')");
List<DataRow> empRowList = new List<DataRow>();
foreach (DataRow dr in dt.Rows)
{
string empNo = dr[1].ToString();
if (selectEmps.IndexOf("," + empNo + ",") >= 0)
continue;
empRowList.Add(dr);
}
int taskCount = empRowList.Count;
string userNo = WebUser.No;
if (taskCount == 0) return; // 没有任务直接返回
#endregion
#region 多线程并行写入
CountdownEvent cdEvent = new CountdownEvent(taskCount);
empRowList.ForEach(dr =>
{
ThreadPool.QueueUserWorkItem(o =>
{
_semaphore.Wait();
try
{
string empNo = dr[1].ToString();
string MyPK = toNodeID + "_" + empNo + "_"+ userNo;
sql = "INSERT INTO WF_SelectCallers (MyPK, Callers, FK_Node,FK_Emp,EmpName, DeptName,FK_Dept) VALUES ";
sql += "( '" + MyPK + "','" + empNo + "'," + toNodeID + ",'" + userNo + "','" + dr[2] + "','" + dr[3] + "','" + dr["FK_Dept"] + "' )";
DBAccess.RunSQL(sql);
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError("插入人员" + dr[1].ToString() + "失败, " + ex.Message);
}
finally
{
_semaphore.Release();
//affectRows++;
cdEvent.Signal();
}
});
});
cdEvent.Wait();
#endregion
}
/// <summary>
/// 增加下一步骤的接受人(用于当前步骤向下一步骤发送时增加接受人)
/// </summary>

@ -273,11 +273,11 @@ namespace BP.WF.HttpHandler
//sql = "SELECT WorkID,FK_Emp,FK_Node,WhoExeIt From WF_GenerWorkerlist WHERE FK_Emp='" + WebUser.No + "' AND ((IsPass=0 AND WhoExeIt=1) OR IsPass=1) AND IsEnable=1 AND WorkID=" + this.WorkID;
//BKGY 撤销发送
sql = "SELECT WorkID,FK_Emp,FK_Node,IsPass From WF_GenerWorkerlist WHERE WorkID=" + this.WorkID +" And FK_Node='"+ gwf.NodeID+"'";
sql = "SELECT WorkID,FK_Emp,FK_Node,WhoExeIt,IsPass,FK_Emp From WF_GenerWorkerlist WHERE WorkID=" + this.WorkID +" And FK_Node='"+ gwf.NodeID+"'";
DataTable dtt = DBAccess.RunSQLReturnTable(sql);
bool isCanShowUnSend = true;
foreach (DataRow item in dtt.Rows) {
if (item["IsPass"].ToString() == "1") {
if (item["IsPass"].ToString() == "1" && nd.TodolistModel != BP.WF.TodolistModel.Teamup) {
isCanShowUnSend = false;
break;
}

@ -849,10 +849,12 @@ namespace BP.WF.HttpHandler
fileModelT = "word";
#region BKGY替换word名称 20231026 sunliang
string sql = "select TITLE from WF_GENERWORKFLOW where workid='" + WorkID + "'";
string name = DBAccess.RunSQLReturnString(sql);
var s = name.Split('_');
string da = s[0].ToString().Replace("#", "号") + ".doc";
da = da.Replace("+", "、");
string da = DBAccess.RunSQLReturnString(sql);
var s = da.Split('_');
da = s[0] + ".doc";
//string da = s[0].ToString().Replace("#", "号") + ".doc";
//da = da.Replace("+", "、");
//da = "sfsf.doc";
#endregion
string billUrl = "url@" + fileModelT + "@" + BP.WF.Glo.CCFlowAppPath + "DataUser/Bill/" + path + da;
@ -1666,6 +1668,65 @@ namespace BP.WF.HttpHandler
}
return sas;
}
public string AccepterOfGenerCaller_Init()
{
//到达的节点ID.
int toNodeID = this.GetRequestValInt("ToNode");
string emps = this.GetRequestVal("AddEmps");
string sql = "SELECT MyPK,FK_Emp,FK_Node,Callers,Tag,EmpName,DeptName FROM WF_SelectCallers WHERE FK_Node = " + toNodeID + " AND FK_Emp = '" + WebUser.No + "'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (BP.Difference.SystemConfig.AppCenterDBFieldCaseModel == FieldCaseModel.UpperCase)
{
dt.Columns["MYPK"].ColumnName = "MyPK";
dt.Columns["FK_EMP"].ColumnName = "FK_Emp";
dt.Columns["FK_NODE"].ColumnName = "FK_Node";
dt.Columns["CALLERS"].ColumnName = "Callers";
dt.Columns["TAG"].ColumnName = "Tag";
dt.Columns["EMPNAME"].ColumnName = "EmpName";
dt.Columns["DEPTNAME"].ColumnName = "DeptName";
}
return BP.Tools.Json.ToJson(dt);
}
/// <summary>
/// 增加常用联系人
/// </summary>
/// <returns></returns>
public string AccepterOfGener_AddCalls()
{
try
{
//到达的节点ID.
int toNodeID = this.GetRequestValInt("ToNode");
string emps = this.GetRequestVal("AddEmps");
//增加到里面去.
BP.WF.Dev2Interface.Node_AddNextStepCalls(toNodeID, emps, false);
string sql = "SELECT MyPK,FK_Emp,FK_Node,Callers,Tag,EmpName,DeptName FROM WF_SelectCallers WHERE FK_Node = " + toNodeID + " AND FK_Emp = '" + WebUser.No + "'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (BP.Difference.SystemConfig.AppCenterDBFieldCaseModel == FieldCaseModel.UpperCase)
{
dt.Columns["MYPK"].ColumnName = "MyPK";
dt.Columns["FK_EMP"].ColumnName = "FK_Emp";
dt.Columns["FK_NODE"].ColumnName = "FK_Node";
dt.Columns["CALLERS"].ColumnName = "Callers";
dt.Columns["TAG"].ColumnName = "Tag";
dt.Columns["EMPNAME"].ColumnName = "EmpName";
dt.Columns["DEPTNAME"].ColumnName = "DeptName";
}
return BP.Tools.Json.ToJson(dt);
}
catch (Exception ex)
{
if (ex.Message.Contains("INSERT") == true)
return "err@人员名称重复,导致部分人员插入失败.";
return "err@" + ex.Message;
}
}
/// <summary>
/// 增加接收人.
/// </summary>
@ -1705,6 +1766,7 @@ namespace BP.WF.HttpHandler
try
{
int toNodeID = this.GetRequestValInt("ToNode");
string empNo = WebUser.No;
if (toNodeID != 0) //排除协作模式下的会签
{
Node nd = new Node(toNodeID);
@ -1716,7 +1778,16 @@ namespace BP.WF.HttpHandler
ps.Add("FK_Node", toNodeID);
ps.Add("WorkID", this.WorkID);
int num = DBAccess.RunSQLReturnValInt(ps, 0);
if (num == 0)
//查询常用联系人
string[] callers = this.GetRequestVal("Callers").Split(',');
foreach (string caller in callers)
{
DBAccess.RunSQL("UPDATE WF_SELECTCALLERS SET STA=1 WHERE MYPK='" + toNodeID + "_" + caller + "_" + WebUser.No + "'");
}
//ps.Add("FK_Emp", empNo);
//ps.SQL = "SELECT count(FK_Emp) as Num FROM WF_SelectCallers WHERE FK_Node=" + SystemConfig.AppCenterDBVarStr + "FK_Node AND FK_Emp=" + SystemConfig.AppCenterDBVarStr + "FK_Emp ORDER BY IDX";
//int num2 = DBAccess.RunSQLReturnValInt(ps,0);
if (num == 0 && callers.Length == 0)
return "err@请指定下一步工作的处理人.";
Selector sr = new Selector(toNodeID);
if (sr.ItIsSimpleSelector == true)

@ -284,6 +284,33 @@ namespace BP.WF.Template
ps.Add("WorkID", this.currWn.HisWork.OID);
ps.SQL = "SELECT FK_Emp FROM WF_SelectAccper WHERE FK_Node=" + dbStr + "FK_Node AND WorkID=" + dbStr + "WorkID AND AccType=0 ORDER BY IDX";
dt = DBAccess.RunSQLReturnTable(ps);
dt.PrimaryKey = new DataColumn[] { dt.Columns["FK_Emp"] };
//查询常用联系人
ps.Add("FK_Emp", empNo);
ps.SQL = "SELECT Callers FROM WF_SelectCallers WHERE Sta='1' AND FK_Node=" + dbStr + "FK_Node AND FK_Emp=" + dbStr + "FK_Emp ORDER BY IDX";
//添加常用联系人
DataTable dt2 = dt.Clone();
dt2 = DBAccess.RunSQLReturnTable(ps);
dt2.Columns["CALLERS"].ColumnName = "FK_EMP";
if (dt2.Rows.Count > 0)
{
foreach (DataRow dr in dt2.Rows)
{
DataRow mydr = dt.NewRow();
if (dt.Rows.Contains(dr[0].ToString()) == true)
continue;
mydr[0] = dr[0];
dt.Rows.Add(mydr);
}
}
//恢复数据状态
ps.SQL = "UPDATE WF_SelectCallers Set Sta='0' WHERE FK_Node=" + dbStr + "FK_Node AND FK_Emp=" + dbStr + "FK_Emp";
ps.Add("FK_Emp", empNo);
ps.Add("FK_Node", this.town.HisNode.NodeID);
DBAccess.RunSQL(ps);
if (dt.Rows.Count == 0)
{
/*从上次发送设置的地方查询. */

@ -869,6 +869,7 @@ namespace BP.WF.Template.Frm
map.AddTBString(MapDtlAttr.UrlDtl, null, "自定义Url", true, false, 0, 200, 20, true);
map.AddTBString(MapDtlAttr.BtnLab, null, "扩展按钮", true, false, 0, 200, 20, true);
map.AddTBString(MapDtlAttr.ColAutoExp, null, "列字段计算", true, false, 0, 200, 20, true);
map.SetHelperAlert(MapDtlAttr.ColAutoExp, "用于计算指定列字段求和/求平均例如:@ShuLiang=Sum@DanJia=Sum@XiaoJi=Sum");

@ -0,0 +1,348 @@
using System;
using System.Collections;
using BP.DA;
using BP.En;
using BP.Port;
namespace BP.WF.Template
{
/// <summary>
/// 选择接受人属性
/// </summary>
public class SelectCallerAttr
{
/// <summary>
/// 节点
/// </summary>
public const string FK_Node = "FK_Node";
/// <summary>
/// 到人员
/// </summary>
public const string FK_Emp = "FK_Emp";
/// <summary>
/// 操作员名称
/// </summary>
public const string EmpName = "EmpName";
/// <summary>
/// 部门编号
/// </summary>
public const string FK_Dept = "FK_Dept";
/// <summary>
/// 部门名称
/// </summary>
public const string DeptName = "DeptName";
/// <summary>
/// 记录人
/// </summary>
public const string Callers = "Callers";
/// <summary>
/// 顺序号
/// </summary>
public const string Idx = "Idx";
/// <summary>
/// 维度标记
/// </summary>
public const string Tag = "Tag";
}
/// <summary>
/// 选择接受人
/// 节点的到人员有两部分组成.
/// 记录了从一个节点到其他的多个节点.
/// 也记录了到这个节点的其他的节点.
/// </summary>
public class SelectCaller : EntityMyPK
{
#region 基本属性
/// <summary>
/// UI界面上的访问控制
/// </summary>
public override UAC HisUAC
{
get
{
UAC uac = new UAC();
uac.OpenAll();
return uac;
}
}
/// <summary>
///节点
/// </summary>
public int NodeID
{
get
{
return this.GetValIntByKey(SelectCallerAttr.FK_Node);
}
set
{
this.SetValByKey(SelectCallerAttr.FK_Node, value);
}
}
/// <summary>
/// 到人员
/// </summary>
public string EmpNo
{
get
{
return this.GetValStringByKey(SelectCallerAttr.FK_Emp);
}
set
{
this.SetValByKey(SelectCallerAttr.FK_Emp, value);
}
}
/// <summary>
/// 标记
/// </summary>
public string Tag
{
get
{
return this.GetValStringByKey(SelectCallerAttr.Tag);
}
set
{
this.SetValByKey(SelectCallerAttr.Tag, value);
}
}
/// <summary>
/// 人员名称
/// </summary>
public string EmpName
{
get
{
string s= this.GetValStringByKey(SelectCallerAttr.EmpName);
if (DataType.IsNullOrEmpty(s) == true)
s = this.EmpNo;
return s;
}
set
{
this.SetValByKey(SelectCallerAttr.EmpName, value);
}
}
/// <summary>
/// 部门名称
/// </summary>
public string DeptName
{
get
{
return this.GetValStringByKey(SelectCallerAttr.DeptName);
}
set
{
this.SetValByKey(SelectCallerAttr.DeptName, value);
}
}
/// <summary>
/// 接收人
/// </summary>
public string Callers
{
get
{
return this.GetValStringByKey(SelectCallerAttr.Callers);
}
set
{
this.SetValByKey(SelectCallerAttr.Callers, value);
}
}
/// <summary>
/// 顺序号
/// </summary>
public int Idx
{
get
{
return this.GetValIntByKey(SelectCallerAttr.Idx);
}
set
{
this.SetValByKey(SelectCallerAttr.Idx, value);
}
}
/// <summary>
/// 工作应完成日期(计划)
/// </summary>
public string DeptNo
{
get
{
return this.GetValStringByKey(SelectCallerAttr.FK_Dept);
}
set
{
this.SetValByKey(SelectCallerAttr.FK_Dept, value);
}
}
#endregion
#region 构造方法
/// <summary>
/// 选择接受人
/// </summary>
public SelectCaller()
{
}
public SelectCaller(string mypk)
{
this.setMyPK(mypk);
this.Retrieve();
}
/// <summary>
/// 重写基类方法
/// </summary>
public override Map EnMap
{
get
{
if (this._enMap != null)
return this._enMap;
Map map = new Map("WF_SelectCallers", "选择常用联系人");
map.AddMyPK();
map.AddTBInt(SelectCallerAttr.FK_Node, 0, "接受人节点", true, false);
map.AddTBString(SelectCallerAttr.FK_Emp, null, "FK_Emp", true, false, 0, 100, 10);
map.AddTBString(SelectCallerAttr.EmpName, null, "接收人名称", true, false, 0, 60, 10);
map.AddTBString(SelectCallerAttr.FK_Dept, null, "部门编号", true, false, 0, 400, 10);
map.AddTBString(SelectCallerAttr.DeptName, null, "部门名称", true, false, 0, 400, 10);
map.AddTBString(SelectCallerAttr.Callers, null, "被选择", true, false, 0, 100, 10);
map.AddTBString(SelectCallerAttr.Tag, null, "Tag", true, false, 0, 100, 10);
map.AddTBInt(SelectCallerAttr.Idx, 0, "顺序号(可以用于流程队列审核模式)", true, false);
/*
* add 2015-1-12.
* .
* ,
*
*/
map.AddTBString(SelectCallerAttr.Tag, null, "维度信息Tag", true, false, 0, 200, 10);
this._enMap = map;
return this._enMap;
}
}
#endregion
protected override bool beforeInsert()
{
return base.beforeInsert();
}
protected override bool beforeUpdateInsertAction()
{
if (this.DeptName.Length == 0)
{
bool isHavePathName = DBAccess.IsExitsTableCol("Port_Dept", "NameOfpath");
if (isHavePathName == true)
{
this.DeptName = DBAccess.RunSQLReturnStringIsNull("select a.NameOfPath from port_dept a,Port_Emp b where a.No=b.fk_dept and b.no='" + this.EmpNo + "'", "无");
if (this.DeptName == "无")
this.DeptName = DBAccess.RunSQLReturnStringIsNull("select a.name from port_dept a,Port_Emp b where a.No=b.fk_dept and b.no='" + this.EmpNo + "'", "无");
}
else
this.DeptName = DBAccess.RunSQLReturnStringIsNull("select a.name from port_dept a,Port_Emp b where a.No=b.fk_dept and b.no='" + this.EmpNo + "'", "无");
}
this.Callers = BP.Web.WebUser.No;
return base.beforeUpdateInsertAction();
}
}
/// <summary>
/// 选择接受人
/// </summary>
public class SelectCallers : EntitiesMyPK
{
/// <summary>
/// 他的到人员
/// </summary>
public Emps HisEmps
{
get
{
Emps ens = new Emps();
foreach (SelectCaller ns in this)
{
ens.AddEntity(new Emp(ns.EmpNo));
}
return ens;
}
}
/// <summary>
/// 他的工作节点
/// </summary>
public Nodes HisNodes
{
get
{
Nodes ens = new Nodes();
foreach (SelectCaller ns in this)
{
ens.AddEntity(new Node(ns.NodeID));
}
return ens;
}
}
/// <summary>
/// 选择接受人
/// </summary>
public SelectCallers() { }
/// <summary>
/// 查询出来选择的人员
/// </summary>
/// <param name="fk_flow"></param>
/// <param name="workid"></param>
public SelectCallers(Int64 FK_Emp)
{
BP.En.QueryObject qo = new QueryObject(this);
qo.AddWhere(SelectCallerAttr.FK_Emp, FK_Emp);
qo.addOrderByDesc(SelectCallerAttr.FK_Node,SelectCallerAttr.Idx);
qo.DoQuery();
}
/// <summary>
/// 得到它的 Entity
/// </summary>
public override Entity GetNewEntity
{
get
{
return new SelectCaller();
}
}
#region 为了适应自动翻译成java的需要,把实体转换成List.
/// <summary>
/// 转化成 java list,C#不能调用.
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.IList<SelectCaller> ToJavaList()
{
return (System.Collections.Generic.IList<SelectCaller>)this;
}
/// <summary>
/// 转化成list
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.List<SelectCaller> Tolist()
{
System.Collections.Generic.List<SelectCaller> list = new System.Collections.Generic.List<SelectCaller>();
for (int i = 0; i < this.Count; i++)
{
list.Add((SelectCaller)this[i]);
}
return list;
}
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
}
}

@ -113,6 +113,18 @@ namespace BP.WF
}
#endregion 判断是否是,admin的移交.
//移交后写入最新待办,被移交人@BKGY
sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + emp.No + "','" + BP.WF.Dev2Interface.EmpWorksNums(emp.UserID) + "','0')";
DBAccess.RunSQL(sql);
//移交后写入最新待办,移交人@BKGY
sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
//记录日志.
Glo.AddToTrack(ActionType.Shift, nd.FlowNo, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmp, emp.Name, msg, null);
@ -266,6 +278,12 @@ namespace BP.WF
string atPara1 = "@SendToEmpIDs=" + emp.UserID;
info += "@" + ExecEvent.DoNode(EventListNode.ShitAfter, nd, work, null, atPara1);
//移交后写入最新待办 被移交人@BKGY
string sql2 = "";
sql2 = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql2 += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + emp.UserID + "','" + BP.WF.Dev2Interface.EmpWorksNums(emp.UserID) + "','0')";
DBAccess.RunSQL(sql2);
//处理移交后发送的消息事件,发送消息.
PushMsgs pms1 = new PushMsgs();
pms1.Retrieve(PushMsgAttr.NodeID, nd.NodeID, PushMsgAttr.EventNo, EventListNode.ShitAfter);
@ -310,6 +328,12 @@ namespace BP.WF
Glo.AddToTrack(ActionType.Shift, nd.FlowNo, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmps, "移交给多个人", msg, null);
//移交后写入最新待办 移交人@BKGY
string sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
//移交后事件.
string atPara = "@SendToEmpIDs=" + toEmps;
WorkNode wn = new WorkNode(work, nd);

@ -193,6 +193,18 @@ namespace BP.WF
string sql = "UPDATE " + this.HisFlow.PTable + " SET WFState=" + (int)WFState.Delete + " WHERE OID=" + this.WorkID;
DBAccess.RunSQL(sql);
sql = "SELECT WorkID ,FK_Emp FROM WF_GenerWorkerlist WHERE WorkID=" + this.WorkID;
DataTable dtNum = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dtNum.Rows)
{
//流程删除前写入最新待办@BKGY
string sql2 = "";
sql2 = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql2 += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + dr[1] + "','" + BP.WF.Dev2Interface.EmpWorksNums(dr[1].ToString()) + "','0')";
DBAccess.RunSQL(sql2);
}
//删除他的工作者,不让其有待办.
sql = "DELETE FROM WF_GenerWorkerlist WHERE WorkID=" + this.WorkID;
DBAccess.RunSQL(sql);
@ -201,6 +213,8 @@ namespace BP.WF
gwf.WFState = BP.WF.WFState.Delete;
gwf.Update();
//调用结束后事件.
ExecEvent.DoFlow(EventListFlow.AfterFlowDel, wn, null);
}
@ -597,6 +611,18 @@ namespace BP.WF
pm.DoSendMessage(pnd, work, null, null, null, toEmps);
}
string sql = "SELECT WorkID ,FK_Emp FROM WF_GenerWorkerlist WHERE WorkID=" + workid;
DataTable dtNum = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dtNum.Rows)
{
//流程删除前写入最新待办@BKGY
string sql2 = "";
sql2 = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql2 += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + dr[1] + "','" + BP.WF.Dev2Interface.EmpWorksNums(dr[1].ToString()) + "','0')";
DBAccess.RunSQL(sql2);
}
//删除它的工作.
DBAccess.RunSQL("DELETE FROM WF_GenerWorkFlow WHERE (WorkID=" + workid + " OR FID=" + workid + " ) AND FK_Flow='" + gwf.FlowNo + "'");
DBAccess.RunSQL("DELETE FROM WF_GenerWorkerlist WHERE (WorkID=" + workid + " OR FID=" + workid + " ) AND FK_Flow='" + gwf.FlowNo + "'");
@ -1281,6 +1307,7 @@ namespace BP.WF
DBAccess.RunSQL(ps);
}
// 清除工作者.
ps = new Paras();
ps.SQL = "DELETE FROM WF_GenerWorkerlist WHERE WorkID=" + dbstr + "WorkID1 OR FID=" + dbstr + "WorkID2 ";
@ -1327,7 +1354,15 @@ namespace BP.WF
this.GenerSKeyWords(gwf, wn.rptGe);
//流程发送成功事件
string sendSuccess = ExecEvent.DoNode(EventListNode.SendSuccess, wn);
//流程结束后写入最新待办@BKGY
string sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
//调用结束后事件.
string result = ExecEvent.DoFlow(EventListFlow.FlowOverAfter, wn, null);
if (result != null)

@ -1130,6 +1130,13 @@ namespace BP.WF
}
String msg = this.HisWorkFlow.DoFlowOver(ActionType.FlowOver, "流程已经走到最后一个节点,流程成功结束。",
mynd, this.rptGe, 0, Executor, ExecutorName);
//流程结束后写入最新待办@BKGY
string sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
this.addMsg(SendReturnMsgFlag.End, msg);
this.addMsg(SendReturnMsgFlag.IsStopFlow, "1", BP.WF.Glo.multilingual("流程已经结束", "WorkNode", "wf_end_success"), SendReturnMsgType.Info);
@ -2180,6 +2187,36 @@ namespace BP.WF
this.HisWork.DirectUpdate();
}
//若当前待办是被授权的
Auths aths = new Auths();
aths.Retrieve(AuthAttr.AutherToEmpNo, this.Execer);
foreach (Auth ath in aths)
{
string todata = ath.TakeBackDT.Replace("-", "");
if (DataType.IsNullOrEmpty(ath.TakeBackDT) == false)
{
int mydt = int.Parse(todata);
int nodt = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
if (mydt > nodt)
{
ps.SQL = "SELECT count(WorkID) as Num FROM WF_GenerWorkerlist WHERE IsPass=0 AND FK_Node=" + dbStr + "FK_Node AND WorkID=" + dbStr + "WorkID AND FK_Emp = '" + ath.Auther + "'";
ps.Clear();
ps.Add("FK_Node", this.HisNode.NodeID);
ps.Add("WorkID", this.WorkID);
int num = DBAccess.RunSQLReturnValInt(ps, 0);
if (num > 0)
{
ps.SQL = "UPDATE WF_GenerWorkerlist SET IsPass=1,IsRead=1 WHERE WorkID=" + dbStr + "WorkID AND FK_Emp='" + ath.Auther + "' AND FK_Node=" + dbStr + "FK_Node";
ps.Clear();
ps.Add("FK_Node", this.HisNode.NodeID);
ps.Add("WorkID", this.WorkID);
DBAccess.RunSQL(ps);
}
}
}
}
#region 2014-08-02 删除了其他人员的待办,增加了 IsPass=0 参数.
if (this.town != null && this.town.HisNode.NodeID == this.HisNode.NodeID)
{
@ -2242,6 +2279,9 @@ namespace BP.WF
this.HisGenerWorkFlow.Update();
return BP.WF.Glo.multilingual("@流程已经完成.", "WorkNode", "workflow_completed");
}
#endregion 附属功能
/// <summary>
/// 普通节点到普通节点
@ -5604,6 +5644,8 @@ namespace BP.WF
//处理会签问题
this.addMsg(SendReturnMsgFlag.OverCurr, BP.WF.Glo.multilingual("@您已经完成签完工作. 当前未处理会签工作的人还有:{0}.", "WorkNode", "you_have_finished_1", todoEmps), null, SendReturnMsgType.Info);
this.addMsg("UnDo", "@<a href='./WorkOpt/UnSend.htm?DoType=UnSend&UserNo=" + WebUser.No + "&Token=" + WebUser.Token + "&WorkID=" + this.WorkID + "&FK_Flow=" + gwl.FlowNo + "' ><img src='" + BP.Difference.SystemConfig.HostURLOfBS + "/WF/Img/Action/UnSend.png' style=display:inline border=0/>撤销本次发送</a>.");
return true;
}
@ -7066,6 +7108,22 @@ namespace BP.WF
this.rptGe.FlowDaySpan = DataType.GeTimeLimits(this.rptGe.GetValStringByKey(GERptAttr.FlowStartRDT), DataType.CurrentDateTime);
this.rptGe.Update();
//协作时入待办数量@BKGY
string sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
//@BKGY
sql = "select FK_Emp from WF_GENERWORKERLIST where workid ='" + WorkID + "' and ISPASS='0'";
DataTable dt2 = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dt2.Rows)
{
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + dr[0].ToString() + "','" + BP.WF.Dev2Interface.EmpWorksNums(dr[0].ToString()) + "','0')";
DBAccess.RunSQL(sql);
}
return this.HisMsgObjs;
}
this.HisGenerWorkFlow.HuiQianTaskSta = HuiQianTaskSta.None;

@ -519,6 +519,7 @@ namespace BP.WF
DBAccess.RunSQL("UPDATE WF_GenerWorkerlist SET IsPass=0 WHERE WorkID=" + this.WorkID + " AND FK_Node=" + gwf.NodeID + " AND FK_Emp='" + WebUser.No + "'");
return "撤销成功";
}
}
//如果启用了对方已读,就不能撤销.
@ -534,11 +535,14 @@ namespace BP.WF
if (i >= 1)
return "err@当前待办已经有[" + i + "]个工作人员打开了该工作,您不能撤销.";
}
//对方已审批就不能撤销
int count = DBAccess.RunSQLReturnValInt("SELECT SUM(IsPass) AS Num FROM WF_GenerWorkerlist WHERE IsPass=1 AND (WorkID=" + this.WorkID + " OR WorkID=" + this.FID + ") AND FK_Node=" + gwf.NodeID + " AND FK_Emp!='" + WebUser.No + "'", 0);
if (count >= 1)
{
return "err@当前待办已经有[" + count + "]个工作人员处理了该工作,您不能撤销.";
if (this.UnSendToNode != nd.NodeID) {
//对方已审批就不能撤销
int count = DBAccess.RunSQLReturnValInt("SELECT SUM(IsPass) AS Num FROM WF_GenerWorkerlist WHERE IsPass=1 AND (WorkID=" + this.WorkID + " OR WorkID=" + this.FID + ") AND FK_Node=" + gwf.NodeID + " AND FK_Emp!='" + WebUser.No + "'", 0);
if (count >= 1)
{
return "err@当前待办已经有[" + count + "]个工作人员处理了该工作,您不能撤销.";
}
}
#region 如果是越轨流程状态 .
@ -658,6 +662,14 @@ namespace BP.WF
cancelToNodeID, WebUser.No);
gwl.PassInt = 0;
gwl.Update();
//撤销后后写入最新待办数量@BKGY
sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
return "@协作模式下,撤销成功.";
}
@ -943,6 +955,13 @@ namespace BP.WF
break;
}
}
//撤销后后写入最新待办数量@BKGY
sql = "";
sql = "INSERT INTO WEB_SOCKET (ID,USER_NO,EmpWorksNums,Flag) ";
sql += "VALUES(S_WEB_SOCKET.NEXTVAL,'" + WebUser.No + "','" + BP.WF.Dev2Interface.Todolist_EmpWorks + "','0')";
DBAccess.RunSQL(sql);
return "工作已经被您撤销到:" + cancelToNode.Name;
}
/// <summary>

Loading…
Cancel
Save