Browse Source

oaform修改

master
dimengzhe 4 months ago
parent
commit
36f3cc3134
  1. 33
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormRuleEnum.java
  2. 186
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java
  3. 31
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/SubmitDto.java
  4. 3
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApply.java
  5. 98
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyService.java
  6. 6
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/BusinessVariables.java

33
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormRuleEnum.java

@ -0,0 +1,33 @@
package com.yxt.anrui.oa.biz.oaform;
/**
* @description:
* @author: dimengzhe
* @date: 2025/1/10
**/
public enum OaFormRuleEnum {
/**
* 枚举
*/
DIRECTLY_UNDER(1, "取本部门直属上级角色的用户(上级角色sid、部门sid或部门sid获取部门主管人员"),
INSTITUTION(2, "获取本机构链(含集团、事业部、分公司部门)中角色的用户(角色sid,发起人orgsidPath)"),
OTHER_INSTITUTION(3, "获取其他机构链角色的用户(角色sid,机构sid])");
private int rule;
private String remarks;
public int getRule() {
return rule;
}
public String getRemarks() {
return remarks;
}
OaFormRuleEnum(int rule, String remarks) {
this.rule = rule;
this.remarks = remarks;
}
}

186
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java

@ -7,10 +7,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.oa.biz.oaform.flowable.*;
import com.yxt.anrui.oa.biz.oamendapply.OaMendApply;
import com.yxt.anrui.oa.biz.oamendapply.SubmitOaMendApplyDto;
import com.yxt.anrui.oa.feign.base.BillNo;
import com.yxt.anrui.oa.feign.base.Rule;
import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables;
import com.yxt.anrui.oa.feign.flowable.flow.FlowableFeign;
import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum;
import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign;
@ -63,22 +66,6 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
@Autowired
private SysUserFeign sysUserFeign;
/* public ResultBean<String> saveOrUpdateForm(OaFormDto dto) {
ResultBean<String> rb = ResultBean.fireFail();
String sid = dto.getSid();
if (StringUtils.isBlank(sid)) {//新增
OaForm oaForm = new OaForm();
BeanUtil.copyProperties(dto, oaForm, "sid");
baseMapper.insert(oaForm);
sid = oaForm.getSid();
} else {
OaForm oaForm = fetchBySid(sid);
BeanUtil.copyProperties(dto, oaForm, "sid");
baseMapper.updateById(oaForm);
}
return rb.success().setData(sid);
}*/
/**
* 保存oaform表单
*
@ -86,27 +73,54 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
* @return
*/
public ResultBean<String> saveOaForm(OaFormDto dto) {
// 初始化返回对象,默认失败
ResultBean<String> rb = ResultBean.fireFail();
// 创建OA表单对象
OaForm oaForm = new OaForm();
// 将DTO中部分属性复制到oaForm中,忽略不需要的字段(如billNo, orgSidPath)
BeanUtil.copyProperties(dto, oaForm, "billNo", "orgSidPath");
OrgVo orgVo = sysStaffOrgFeign.getOrgByPath(dto.getOrgSidPath()).getData();
BeanUtil.copyProperties(orgVo, oaForm);
// 生成单据编号
BillNo b = new BillNo();
b.setOrgCode(orgVo.getOrgCode());
b.setBillType(dto.getBillNo());
String bill = Rule.getBill(b);
int i = baseMapper.selectNum(bill);
String billNo = Rule.getBillNo(bill, i);
oaForm.setBillNo(billNo);
oaForm.setCreateOrgSid(oaForm.getUseOrgSid());
oaForm.setCreateOrgName(oaForm.getUseOrgName());
// 获取用户信息
SysUserVo sysUserVo = sysUserFeign.fetchBySid(dto.getCreateBySid()).getData();
oaForm.setCreateByName(sysUserVo.getName());
baseMapper.insert(oaForm);
return rb.success().setData(oaForm.getSid());
try {
// 获取组织信息,根据orgSidPath字段调用外部服务
OrgVo orgVo = sysStaffOrgFeign.getOrgByPath(dto.getOrgSidPath()).getData();
// 如果组织信息为空,返回失败信息
if (orgVo == null) {
return rb.setMsg("未找到对应的组织信息");
}
// 将组织信息复制到oaForm中
BeanUtil.copyProperties(orgVo, oaForm);
// 创建BillNo对象并设置相关信息,生成单据编号
BillNo b = new BillNo();
b.setOrgCode(orgVo.getOrgCode()); // 设置组织编码
b.setBillType(dto.getBillNo()); // 设置单据类型
// 获取生成的单据规则
String bill = Rule.getBill(b);
// 查询现有单据编号的计数值(如数据库中的已存在记录数)
int i = baseMapper.selectNum(bill);
// 根据计数值生成唯一的单据编号
String billNo = Rule.getBillNo(bill, i);
// 将生成的单据编号设置到oaForm中
oaForm.setBillNo(billNo);
// 设置创建组织信息,确保数据完整
oaForm.setCreateOrgSid(oaForm.getUseOrgSid());
oaForm.setCreateOrgName(oaForm.getUseOrgName());
// 获取用户信息,根据createBySid字段调用外部服务
SysUserVo sysUserVo = sysUserFeign.fetchBySid(dto.getCreateBySid()).getData();
// 如果用户信息为空,返回失败信息
if (sysUserVo == null) {
return rb.setMsg("未找到创建人信息");
}
// 设置创建人名称
oaForm.setCreateByName(sysUserVo.getName());
// 将oaForm保存到数据库
baseMapper.insert(oaForm);
// 返回成功的结果,带上新创建的表单ID
return rb.success().setData(oaForm.getSid());
} catch (Exception e) {
// 捕获异常并返回失败,附带异常信息
return rb.setMsg("保存失败,错误信息:" + e.getMessage());
}
}
public ResultBean<OaFormDetailsVo> fetchDetailsBySid(String sid) {
@ -415,17 +429,16 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
}
public ResultBean submit(BusinessVariables bv) {
public ResultBean submit1(BusinessVariables bv) {
String businessSid = bv.getBusinessSid();
String formSid = bv.getFormVariables().get("formSid").toString();
//启动流程
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
UpdateFlowFieldVo ufVo = voResultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(ufVo, oaFormFlowDto, "sid");
oaFormFlowDto.setSid(formSid);
oaFormFlowDto.setSid(businessSid);
updateFlow(oaFormFlowDto);
OaForm oaForm = fetchBySid(bv.getFormVariables().get("formSid").toString());
OaForm oaForm = fetchBySid(businessSid);
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
@ -450,4 +463,101 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
}
return voResultBean;
}
public ResultBean submit(SubmitDto dto) {
ResultBean rb = ResultBean.fireFail();
ResultBean<BusinessVariables> businessVariablesResultBean = getGatewayParameter(dto);
if (!businessVariablesResultBean.getSuccess()) {
return rb.setMsg(businessVariablesResultBean.getMsg());
}
BusinessVariables bv = businessVariablesResultBean.getData();
OaForm oaForm = fetchBySid(dto.getBusinessSid());
int r = submitBusinessData(dto);
if (r == 1) {
//启动流程
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
UpdateFlowFieldVo ufVo = voResultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(ufVo, oaFormFlowDto, "sid");
updateFlow(oaFormFlowDto);
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap((Map<String, Object>) bv.getFormVariables().get("app"));
messageFlowableQuery.setBusinessSid(dto.getBusinessSid());
messageFlowableQuery.setModuleName(oaForm.getFormType());
messageFlowableQuery.setMsgContent(oaForm.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle(oaForm.getFormType());
messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
return voResultBean;
} else if (r == 2) {
bv.setTaskId(oaForm.getTaskId());
bv.setTaskDefKey(oaForm.getNodeId());
bv.setComment("重新提交");
bv.setInstanceId(oaForm.getProcInstId());
return complete(bv);
}
return rb;
}
private synchronized int submitBusinessData(SubmitDto dto) {
int r = 0;
if (dto.isNew()) {
r = 1;
} else {
r = 2;
}
return r;
}
/**
* 构造流程及网关参数
*
* @param dto
* @return
*/
public ResultBean<BusinessVariables> getGatewayParameter(SubmitDto dto) {
ResultBean<BusinessVariables> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(dto, bv);
OaForm oaForm = fetchBySid(dto.getBusinessSid());
//用户的部门全路径sid
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaForm.getDeptSid()).getData();
bv.setOrgSidPath(deptVo.getOrgSidPath());
//流程定义id
bv.setModelId(dto.getProcDefId());
int rule = dto.getRule();
if (rule == OaFormRuleEnum.DIRECTLY_UNDER.getRule()) {
SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(oaForm.getDeptSid()).getData();
if (StringUtils.isBlank(organizationVo.getManagerSid())) {
return rb.setMsg("请先设置该部门的主管人员");
}
bv.setNextNodeUserSids(organizationVo.getManagerSid());
} else if (rule == OaFormRuleEnum.INSTITUTION.getRule()) {
} else if (rule == OaFormRuleEnum.OTHER_INSTITUTION.getRule()) {
} else {
bv.setNextNodeUserSids("");
}
return rb.success().setData(bv);
}
}

31
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/SubmitDto.java

@ -0,0 +1,31 @@
package com.yxt.anrui.oa.biz.oaform.flowable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: dimengzhe
* @date: 2025/1/10
**/
@Data
public class SubmitDto {
private String userSid;
@ApiModelProperty("业务sid")
private String businessSid;
@ApiModelProperty("流程定义id")
private String procDefId;
@ApiModelProperty("网关参数")
private Map<String, Object> formVariables;
@ApiModelProperty("下一环节处理人sids")
private String nextNodeUserSids;
@ApiModelProperty("下一处理人获取规则")
private int rule;
@ApiModelProperty("是否是首次提交")
private boolean isNew;
}

3
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApply.java

@ -63,9 +63,6 @@ public class OaMendApply extends BaseEntity {
@ApiModelProperty("关联审批单")
private String linkFormSids;
@TableField(exist = false)
private OaForm oaForm;
/* @ApiModelProperty("单据编号")
private String billNo;

98
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyService.java

@ -35,6 +35,7 @@ import com.yxt.anrui.oa.biz.oaform.OaForm;
import com.yxt.anrui.oa.biz.oaform.OaFormDto;
import com.yxt.anrui.oa.biz.oaform.OaFormService;
import com.yxt.anrui.oa.biz.oaform.flowable.OaFormFlowDto;
import com.yxt.anrui.oa.biz.oaform.flowable.SubmitDto;
import com.yxt.anrui.oa.feign.file.OaFileEnum;
import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables;
import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum;
@ -194,84 +195,41 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
public ResultBean submit(SubmitOaMendApplyDto dto) {
ResultBean rb = ResultBean.fireFail();
OaMendApply oaMendApply = fetchBySid(dto.getSid());
int r = submitBusinessData(dto, oaMendApply);
if (r == 3) {
return rb.setMsg("该申请不存在");
ResultBean<String> stringResultBean = saveOrUpdateDto(dto);
if (!stringResultBean.getSuccess()) {
return rb.setMsg(stringResultBean.getData());
}
if (r == 0) {
return rb.setMsg("操作失败!提交的数据不一致");
}
//新增修改保存
String businessSid = saveOrUpdateDto(dto).getData();
oaMendApply = fetchBySid(businessSid);
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
//创建BusinessVariables实体对象
BusinessVariables bv = new BusinessVariables();
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
variables.put("formSid", oaMendApply.getFormSid());
//用户的部门全路径sid
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaMendApply.getOaForm().getDeptSid()).getData();
bv.setOrgSidPath(deptVo.getOrgSidPath());
bv.setBusinessSid(businessSid);
bv.setUserSid(oaMendApply.getCreateBySid());
//若app移动端有此功能,则传递appMap参数
String businessSid = stringResultBean.getData();
SubmitDto submitDto = new SubmitDto();
submitDto.setUserSid(dto.getCreateBySid());
submitDto.setBusinessSid(businessSid);
Map<String, Object> formVariables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
variables.put("app", appMap);
//网关
//流程定义id
bv.setModelId(ProcDefEnum.OAMENDAPPLY.getProDefId());
SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(oaForm.getDeptSid()).getData();
if (StringUtils.isBlank(organizationVo.getManagerSid())) {
return rb.setMsg("请先设置该部门的主管人员");
}
bv.setNextNodeUserSids(organizationVo.getManagerSid());
bv.setFormVariables(variables);
if (r == 1) {
return oaFormService.submit(bv);
}
if (r == 2) {
// ToDo:驳回到发起人后再次提交
if (StringUtils.isBlank(dto.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
bv.setTaskId(oaMendApply.getOaForm().getTaskId());
bv.setTaskDefKey(oaMendApply.getOaForm().getNodeId());
bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交");
bv.setInstanceId(dto.getInstanceId());
bv.getFormVariables().put("formSid", oaMendApply.getFormSid());
return oaFormService.complete(bv);
}
return rb;
}
private synchronized int submitBusinessData(SubmitOaMendApplyDto dto, OaMendApply oaMendApply) {
int r = 0;
formVariables.put("app", appMap);
submitDto.setFormVariables(formVariables);
submitDto.setProcDefId(ProcDefEnum.OAMENDAPPLY.getProDefId());
//若申请单中选择了下一处理人,则需赋值给下一处理人字段
submitDto.setNextNodeUserSids("");
boolean isNew = false;
if (StringUtils.isBlank(dto.getSid())) {
r = 1;
isNew = true;
} else {
if (oaMendApply != null) {
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
String businessTaskId = oaMendApply.getOaForm().getTaskId();
if (StringUtils.isBlank(businessTaskId) && StringUtils.isBlank(dto.getTaskId())) {
//新提交
r = 1;
} else if (StringUtils.isNotBlank(businessTaskId) && businessTaskId.equals(dto.getTaskId())) {
//二次提交//只有数据一致的时候才能进行下一步
r = 2;
}
} else {
r = 3;
OaForm oaForm = oaFormService.fetchBySid(businessSid);
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isBlank(businessTaskId) && StringUtils.isBlank(dto.getTaskId())) {
//新提交
isNew = true;
} else if (StringUtils.isNotBlank(businessTaskId) && businessTaskId.equals(dto.getTaskId())) {
//二次提交//只有数据一致的时候才能进行下一步
isNew = false;
}
}
return r;
submitDto.setNew(isNew);
return oaFormService.submit(submitDto);
}
public ResultBean delAll(String[] sids) {

6
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/BusinessVariables.java

@ -19,7 +19,7 @@ public class BusinessVariables {
/**
* 分公司sid
*/
public static final String ORGPATH="orgPath";
public static final String ORGPATH = "orgPath";
/**
* 流程定义的id
*/
@ -59,7 +59,5 @@ public class BusinessVariables {
/**
* 业务参数按需传递
*/
private Map<String, Object> formVariables =new HashMap<>();
/* @ApiModelProperty("机构sid:切换结构使用")
private String orgPath;*/
private Map<String, Object> formVariables = new HashMap<>();
}

Loading…
Cancel
Save