Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
ab9c9890d0
|
@ -1,41 +1,32 @@
|
|||
package zcgj.zcdev.zcdev.fs.plugin.operate;
|
||||
|
||||
import kd.bos.algo.DataSet;
|
||||
import kd.bos.algo.Row;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.entity.ExtendedDataEntity;
|
||||
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
||||
import kd.bos.entity.plugin.AddValidatorsEventArgs;
|
||||
import kd.bos.entity.plugin.PreparePropertysEventArgs;
|
||||
import kd.bos.entity.validate.AbstractValidator;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.servicehelper.user.UserServiceHelper;
|
||||
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;
|
||||
import kd.bos.workflow.api.AgentExecution;
|
||||
import kd.bos.workflow.component.approvalrecord.IApprovalRecordGroup;
|
||||
import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 判断当前审批人是否为提交人
|
||||
* 综合岗和项目经理发起的报销,本人点提交提示必须执行转交
|
||||
*/
|
||||
public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn {
|
||||
|
||||
private static final Log log = LogFactory.getLog(ApprovalCheckFlowOp.class);
|
||||
@Override
|
||||
public void onPreparePropertys(PreparePropertysEventArgs e) {
|
||||
super.onPreparePropertys(e);
|
||||
e.getFieldKeys().add("formid");
|
||||
e.getFieldKeys().add("id");
|
||||
e.getFieldKeys().add("applier");
|
||||
//e.getFieldKeys().add("creator");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -49,13 +40,14 @@ public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn {
|
|||
public void validate() {
|
||||
ExtendedDataEntity[] extendedDataEntities = this.getDataEntities();
|
||||
Long currentUserId = UserServiceHelper.getCurrentUserId();
|
||||
|
||||
for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
|
||||
DynamicObject dataEntity = extendedDataEntity.getDataEntity();
|
||||
String billId = dataEntity.getString("id");
|
||||
String formid = dataEntity.getString("formid");
|
||||
//String formid = "zcgj_test_01";
|
||||
//获取报销人
|
||||
DynamicObject applier = dataEntity.getDynamicObject("applier");
|
||||
//DynamicObject applier = dataEntity.getDynamicObject("creator");
|
||||
Long applierId = applier.getLong("id");
|
||||
boolean isOk = true;
|
||||
//所有审批记录,从审批记录中获取已经审批过的人
|
||||
|
@ -64,15 +56,19 @@ public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn {
|
|||
for (IApprovalRecordGroup allApprovalRecord : allApprovalRecords) {
|
||||
String groupDecisionType = allApprovalRecord.getGroupDecisionType();
|
||||
//过滤提交的和待分配的任务
|
||||
if("submit".equals(groupDecisionType)){ //获取每个节点的审批类型 提交:submit
|
||||
Long userId = allApprovalRecord.getChildren().get(0).getUserId();//获取每个节点的审批人
|
||||
if(applierId.equals(userId) ){//如果审批不是申请人,则可以进行审批操作
|
||||
log.info("ApprovalCheckFlowOp: 操作节点编码:"+groupDecisionType);
|
||||
if("submit".equals(groupDecisionType)
|
||||
||"approve".equals(groupDecisionType)){ //获取每个节点的审批类型 提交:submit
|
||||
log.info("ApprovalCheckFlowOp: approve 申请人:"+applierId);
|
||||
//Long userId = allApprovalRecord.getChildren().get(0).getUserId();//获取每个节点的审批人
|
||||
log.info("ApprovalCheckFlowOp: approve 审批人:"+currentUserId);
|
||||
if(applierId.equals(currentUserId) ){//如果审批不是申请人,则可以进行审批操作
|
||||
isOk = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!isOk){
|
||||
this.addFatalErrorMessage(extendedDataEntity, "当前操作人为单据申请人,无法进行审批操作,请转给他人进行审批!");
|
||||
this.addFatalErrorMessage(extendedDataEntity, "当前审批人为单据申请人,无法进行审批操作,请转给他人进行审批!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@ public class WorkTask extends AbstractTask {
|
|||
|
||||
private static final Log log = LogFactory.getLog(WorkTask.class);
|
||||
|
||||
//发送物料库存至消息平台
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
long currUserId = requestContext.getCurrUserId();
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
package zcgj.zcdev.zcdev.fs.plugin.workflow;
|
||||
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;
|
||||
import kd.bos.workflow.component.approvalrecord.IApprovalRecordGroup;
|
||||
import kd.bos.workflow.engine.dynprocess.freeflow.WFAuditTask;
|
||||
import kd.bos.workflow.engine.dynprocess.freeflow.WFCustomParam;
|
||||
import kd.bos.workflow.engine.dynprocess.freeflow.WFFlowElement;
|
||||
import kd.ssc.task.dis.WorkLoad;
|
||||
import kd.ssc.task.dis.WorkerStatusPojo;
|
||||
|
||||
|
@ -20,16 +15,12 @@ import java.util.stream.Collectors;
|
|||
* 共享任务人员重分配
|
||||
*/
|
||||
public class WorkLoadExt extends WorkLoad {
|
||||
|
||||
private static final Log log = LogFactory.getLog(WorkLoadExt.class);
|
||||
|
||||
@Override
|
||||
public Set<Long> deletePerson4Return(Long groupId, DynamicObject task) {
|
||||
log.info("WorkLoadExt: deletePerson4Return -- start");
|
||||
Set<Long> longs = super.deletePerson4Return(groupId, task);
|
||||
//开发商标识
|
||||
String prefix ="zcgj";
|
||||
//是否自动审批通过
|
||||
boolean isAutoPass = false;
|
||||
boolean isVoucher = false;
|
||||
// 组->人映射,<组ID,组中人员工作状态信息>
|
||||
//获取所有的共享审批组
|
||||
Map<Long, List<WorkerStatusPojo>> groupPersonMap = getGroupPersonMap();
|
||||
|
@ -71,93 +62,51 @@ public class WorkLoadExt extends WorkLoad {
|
|||
}
|
||||
}
|
||||
|
||||
//通过billid获取流程实例id
|
||||
Long processInstanceIdByBusinessKey = WorkflowServiceHelper.getProcessInstanceIdByBusinessKey(billid);
|
||||
//通过流程实例id获取wf_task数据,用于获取和过滤共享节点的配置参数
|
||||
QFilter taskFilter1 = new QFilter("processinstanceid", QCP.equals, processInstanceIdByBusinessKey);
|
||||
DynamicObject[] taskDynamicObjects = BusinessDataServiceHelper.load("wf_task", "taskdefinitionkey", new QFilter[]{taskFilter1});
|
||||
//构建单据对象,用于查询单据的工作流流程元素数据
|
||||
DynamicObject billDynamicObject = BusinessDataServiceHelper.newDynamicObject(entityName);
|
||||
billDynamicObject.set("id",billid);
|
||||
List<WFFlowElement> processElements = WorkflowServiceHelper.getProcessElements(billDynamicObject, null);
|
||||
//查询流程元素数据
|
||||
List<WFFlowElement> sscApprove = processElements.stream().filter(e -> e.getId().equals(taskDynamicObjects[0].get("taskdefinitionkey"))).collect(Collectors.toList());
|
||||
WFFlowElement wfFlowElement = sscApprove.get(0);
|
||||
//获取流程配置参数
|
||||
List<WFCustomParam> customParams = ((WFAuditTask) wfFlowElement).getCustomParams();
|
||||
//遍历流程配置的参数,获取isVoucher用来判断当前节点是否要生成凭证
|
||||
for (WFCustomParam customParam : customParams) {
|
||||
String number = customParam.getNumber();
|
||||
String value = customParam.getValue();
|
||||
//如果当前节点需要生成凭证
|
||||
if(number.equals("isVoucher") && value.equals("true")){
|
||||
isVoucher= true;
|
||||
}
|
||||
}
|
||||
//当前共享组所有审批人员ID集合
|
||||
List<Long> sharedApprovers = workLoadList.stream().map(WorkerStatusPojo::getUserId).collect(Collectors.toList());
|
||||
//如果当前共享审批组里只有他一个人,则只分配给他,不移除审批人
|
||||
if(sharedApprovers.size() ==1){
|
||||
return longs;
|
||||
}
|
||||
//当前流程已经审批过的所有人员ID集合
|
||||
List<Long> localApprovers = approvalUserIds.stream().sorted().collect(Collectors.toList());
|
||||
Set<Long> localApprovers = approvalUserIds.stream().sorted().collect(Collectors.toSet());
|
||||
|
||||
//localApprovers.add(crtUserId);//测试
|
||||
|
||||
//获取需要移除的审批人和是否自动审批
|
||||
Map<String, Object> stringObjectMap = handleApproval(localApprovers, sharedApprovers);
|
||||
//Map<String, Object> stringObjectMap = handleApproval(localApprovers, sharedApprovers);
|
||||
|
||||
//是否自动审批
|
||||
isAutoPass = (boolean)stringObjectMap.get("isAutoPass");
|
||||
//需要移除的人员id集合
|
||||
Set<Long> userIdSet = (Set<Long>)stringObjectMap.get("removedApprovers");
|
||||
|
||||
//记录审批日期,如果需要自动审批则isapprovals设置为A
|
||||
String approvalsLogsEntityName = "zcgj_auto_approvals_logs";
|
||||
DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject(approvalsLogsEntityName);
|
||||
//日志编码
|
||||
dynamicObject.set("number",System.currentTimeMillis());
|
||||
//审批节点名称
|
||||
dynamicObject.set("name", string);
|
||||
//业务单据名称
|
||||
//dynamicObject.set(prefix+"_bill_name", billname);
|
||||
//业务单据id
|
||||
dynamicObject.set(prefix+"_billid", billid);
|
||||
//业务单据编码
|
||||
dynamicObject.set(prefix+"_bill_number", billnumber);
|
||||
//业务单据标识
|
||||
dynamicObject.set(prefix+"_bill_entityname", entityName);
|
||||
//业务单据共享中心id
|
||||
dynamicObject.set(prefix+"_bill_sscid",sscid);
|
||||
|
||||
//自动审批且不需要生成凭证则可以执行自动审批
|
||||
if(isAutoPass && !isVoucher){
|
||||
dynamicObject.set(prefix+"_isapprovals","A");//自动审批
|
||||
dynamicObject.set(prefix+"_remark","机器人自动审批且不需要生成凭证");
|
||||
}else{
|
||||
dynamicObject.set(prefix+"_isapprovals","B");//不自动审批
|
||||
dynamicObject.set(prefix+"_remark","需要审核人手动审批或需要生成凭证");
|
||||
}
|
||||
|
||||
Object[] save = SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
|
||||
//Set<Long> userIdSet = (Set<Long>)stringObjectMap.get("removedApprovers");
|
||||
|
||||
//循环判断当前单据的共享审批节点是否有本地已经审批过的人,如果有则进行移除
|
||||
//如果本地没有审批人,则不移除审批人
|
||||
if(userIdSet == null || userIdSet.isEmpty()||localApprovers.isEmpty()){
|
||||
if(localApprovers == null || localApprovers.isEmpty()){
|
||||
return longs;
|
||||
}
|
||||
//迭代审批人集合
|
||||
while (it.hasNext()) {
|
||||
WorkerStatusPojo person = it.next();
|
||||
Long userId = person.getUserId();
|
||||
if (userIdSet.contains(userId)) {
|
||||
if (localApprovers.contains(userId)) {
|
||||
// 记录删除的处理人
|
||||
longs.add(userId);
|
||||
log.info("WorkLoadExt: removeUserId :"+userId);
|
||||
//记录需要删除的审批人,返回后系统会自动移除该共享组的审批人
|
||||
delPersonsList.add(person);
|
||||
//迭代移除操作
|
||||
it.remove();
|
||||
}
|
||||
|
||||
//移除全部-测试用
|
||||
//it.remove();
|
||||
}
|
||||
|
||||
log.info("WorkLoadExt: 返回出来的用户Id");
|
||||
for (Long aLong : longs) {
|
||||
log.info("WorkLoadExt: returnUserId(移除分配的审批人Id) :"+aLong);
|
||||
}
|
||||
log.info("WorkLoadExt: deletePerson4Return -- end");
|
||||
return longs;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public final class CosmicLauncher {
|
|||
*/
|
||||
private static final String DEFAULT_COSMIT_HOME_PATH = System.getProperty("user.home").replaceAll("\\\\", "/") + "/cosmic/home";
|
||||
|
||||
private static final String PROJECT_HOME = "D:/WorkSpace/zcdev";
|
||||
private static final String PROJECT_HOME = "E:/code/zhongcai_dev";
|
||||
|
||||
private static final String LOCAL_IP = "127.0.0.1";
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
package zcgj.cosmic.debug;
|
||||
|
||||
import kd.cosmic.debug.tools.CosmicLauncher;
|
||||
import kd.sdk.bos.launch.Launcher;
|
||||
|
||||
/**
|
||||
* 启动本地应用程序(微服务节点)
|
||||
|
@ -21,16 +22,25 @@ public class DebugApplication {
|
|||
// Thread.currentThread().setContextClassLoader(new KDSecurityClassLoader(Thread.currentThread().getContextClassLoader()));
|
||||
|
||||
CosmicLauncher cosmic = new CosmicLauncher(false);
|
||||
// 关闭轻量环境,启用 redis、rabbitmq
|
||||
cosmic.setEnableLightWeightDeploy(false);
|
||||
|
||||
//debbugTopic 需要设置成每人都不同的
|
||||
String debbugTopic = "zzg";
|
||||
// 注册为消息队列消费者
|
||||
cosmic.setMqConsumerRegister(true, debbugTopic);
|
||||
|
||||
cosmic.setClusterNumber("cosmic");
|
||||
cosmic.setTenantNumber("ierp");
|
||||
|
||||
// cosmic.setConfigUrl("127.0.0.1:2181?user=zk&password=xxx");
|
||||
cosmic.setConfigUrl("192.168.10.210:2181?user=zookeeper&password=123456abc");
|
||||
|
||||
cosmic.setConfigUrl("192.168.10.210?user=zookeeper&password=123456abc");
|
||||
//cosmic.setConfigUrl("26.60.218.15?user=zookeeper&password=123456abc");
|
||||
|
||||
// cosmic.setMcServerUrl("http://127.0.0.1:8090");
|
||||
cosmic.setMcServerUrl("http://192.168.10.210:8090/");
|
||||
|
||||
// cosmic.setMcServerUrl("http://26.60.218.15:8090/");
|
||||
|
||||
// cosmic.setFsServerUrl("127.0.0.1", 8100);
|
||||
// cosmic.setImageServerUrl("127.0.0.1", 8100);
|
||||
|
||||
|
@ -38,7 +48,41 @@ public class DebugApplication {
|
|||
cosmic.setCosmicWebPort(8881);
|
||||
// cosmic.setDubboConfig(false, true, true);
|
||||
cosmic.start();
|
||||
|
||||
|
||||
//redis 47.101.159.154
|
||||
|
||||
// debbugTopic 需要设置成每人都不同的
|
||||
// String debbugTopic = "zzg";
|
||||
// 注册为消息队列消费者
|
||||
//cosmic.setMqConsumerRegister(true, debbugTopic);
|
||||
|
||||
|
||||
// rabbitmq配置
|
||||
/* {
|
||||
//MQ地址
|
||||
String mqHost = "139.224.101.245";
|
||||
String mqPort = "5672"; // 默认5672
|
||||
//MQ用戶名
|
||||
String mqUser = "admin";
|
||||
//MQ密碼
|
||||
String mqPwd = "admin";
|
||||
// MQ Ierp vhost
|
||||
String mqVhost = "ierp";
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("type=rabbitmq").append(System.getProperty("line.separator"))
|
||||
.append("host=").append(mqHost).append(System.getProperty("line.separator"))
|
||||
.append("port=").append(mqPort).append(System.getProperty("line.separator"))
|
||||
.append("user=").append(mqUser).append(System.getProperty("line.separator"))
|
||||
.append("password=").append(mqPwd).append(System.getProperty("line.separator"))
|
||||
.append("vhost=").append(mqVhost);
|
||||
cosmic.set("mq.server", builder.toString());
|
||||
}
|
||||
|
||||
// redis
|
||||
{
|
||||
String redisUrl = "47.101.159.154:6379";
|
||||
cosmic.set("redis.serversForCache", redisUrl);
|
||||
cosmic.set("redis.serversForSession", redisUrl);
|
||||
cosmic.set("algo.storage.redis.url", redisUrl);
|
||||
}*/
|
||||
}
|
||||
}
|
|
@ -3,13 +3,13 @@
|
|||
### If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
|
||||
### Website: https://developer.kingdee.com/developer?productLineId=29
|
||||
### Author: liebin.zheng
|
||||
### Generate Date: 2025-03-04 10:51:23
|
||||
### Generate Date: 2025-02-21 09:31:59
|
||||
### ----------------------------
|
||||
systemProp.kddt_version=2.2.0-Beta
|
||||
systemProp.template_type=app
|
||||
systemProp.groupId=zcgj.cosmic
|
||||
systemProp.artifactId=zcgj-cosmic
|
||||
systemProp.version=1.0.0
|
||||
##systemProp.version=1.0.0
|
||||
systemProp.ci_version=2.0
|
||||
systemProp.jdk.version=1.8
|
||||
systemProp.new_cosmic_project=true
|
||||
|
@ -18,7 +18,7 @@ systemProp.developer_flag=zcgj
|
|||
#--This is the project flag
|
||||
systemProp.project_flag=zcdev
|
||||
#--This is the project dir
|
||||
systemProp.project_dir=D:/WorkSpace/zcdev
|
||||
systemProp.project_dir=E:/code/zhongcai_dev
|
||||
#--This is the dir for cosmic project libs and static resouces
|
||||
systemProp.cosmic_home=D:/comsic/home
|
||||
#--Performance configuration for gradle build
|
||||
|
|
Loading…
Reference in New Issue