|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|