Browse Source

Merge remote-tracking branch 'origin/master'

master
ligaode 4 months ago
parent
commit
36f8bff5b5
  1. 9
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java
  2. 5
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java
  3. 6
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysorganization/SysOrganizationFeign.java
  4. 5
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysorganization/SysOrganizationFeignFallback.java
  5. 3
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationMapper.java
  6. 11
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationMapper.xml
  7. 7
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationRest.java
  8. 10
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationService.java
  9. 65
      yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java
  10. 56
      yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java
  11. 7
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java
  12. 30
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java
  13. 2
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java
  14. 8
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml
  15. 366
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java
  16. 14
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/CompleteDto.java
  17. 16
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/DelegateQuery.java
  18. 21
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java
  19. 14
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeVo.java
  20. 27
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/OaFormFlowDto.java
  21. 14
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/TaskQuery.java
  22. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApply.java
  23. 4
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyDto.java
  24. 11
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java
  25. 33
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml
  26. 385
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyService.java
  27. 2
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/SubmitOaMendApplyDto.java
  28. 25
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeQuery.java
  29. 9
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/UpdateFlowFieldVo.java

9
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java

@ -11,6 +11,7 @@ public class UpdateFlowFieldVo {
private String taskDefKey; private String taskDefKey;
private String taskId; private String taskId;
private String nextNodeUserSids; private String nextNodeUserSids;
private String name;
public String getNextNodeUserSids() { public String getNextNodeUserSids() {
return nextNodeUserSids; return nextNodeUserSids;
@ -67,4 +68,12 @@ public class UpdateFlowFieldVo {
public void setTaskId(String taskId) { public void setTaskId(String taskId) {
this.taskId = taskId; this.taskId = taskId;
} }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} }

5
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java

@ -333,6 +333,7 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey());
updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid()); updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
} }
} }
@ -358,6 +359,7 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey());
updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid()); updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
} }
} }
@ -367,6 +369,7 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
updateFlowFieldVo.setTaskDefKey(task_def_key_); updateFlowFieldVo.setTaskDefKey(task_def_key_);
updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid()); updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
} }
@ -762,7 +765,7 @@ public class FlowService extends MybatisBaseService<FlowMapper, Flowable> {
List<String> uss = Arrays.asList(userSids.toString().split(",")); List<String> uss = Arrays.asList(userSids.toString().split(","));
List<String> uniqueList = new ArrayList<String>(new HashSet<String>(uss)); List<String> uniqueList = new ArrayList<String>(new HashSet<String>(uss));
uniqueList.removeIf(taskinstUserSidList::contains); uniqueList.removeIf(taskinstUserSidList::contains);
String userSidss = String.join(",",uniqueList); String userSidss = String.join(",", uniqueList);
mfq.setUserSids(userSidss); mfq.setUserSids(userSidss);
// mfq.setUserSids(userSids.toString()); // mfq.setUserSids(userSids.toString());
mfq.setOrgPath(createrOrgPath); mfq.setOrgPath(createrOrgPath);

6
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysorganization/SysOrganizationFeign.java

@ -224,4 +224,10 @@ public interface SysOrganizationFeign {
@ResponseBody @ResponseBody
@ApiOperation("根据code查询组织信息") @ApiOperation("根据code查询组织信息")
ResultBean<List<SysOrganization>> selectByOrgCodeAndPsid(@RequestParam("orgCode") String orgCode, @RequestParam("pSid") String pSid); ResultBean<List<SysOrganization>> selectByOrgCodeAndPsid(@RequestParam("orgCode") String orgCode, @RequestParam("pSid") String pSid);
@GetMapping("/selectStaffListByUseOrgSid")
@ResponseBody
@ApiOperation("当前分公司销售专员")
ResultBean<List<SysFinanceVo>> selectStaffListByUseOrgSid(@RequestParam("useOrgSid") String useOrgSid);
} }

5
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysorganization/SysOrganizationFeignFallback.java

@ -231,4 +231,9 @@ public class SysOrganizationFeignFallback implements SysOrganizationFeign {
public ResultBean<List<SysOrganization>> selectByOrgCodeAndPsid(String orgCode, String pSid) { public ResultBean<List<SysOrganization>> selectByOrgCodeAndPsid(String orgCode, String pSid) {
return null; return null;
} }
@Override
public ResultBean<List<SysFinanceVo>> selectStaffListByUseOrgSid(String useOrgSid) {
return null;
}
} }

3
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationMapper.java

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.portal.api.sysorganization.*; import com.yxt.anrui.portal.api.sysorganization.*;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo;
import com.yxt.anrui.terminal.api.base.common.FinanceVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
@ -140,4 +139,6 @@ public interface SysOrganizationMapper extends BaseMapper<SysOrganization> {
List<SysOrganizationVo> tranfour(String sid); List<SysOrganizationVo> tranfour(String sid);
List<SysOrganizationVo> tranFive(String sid); List<SysOrganizationVo> tranFive(String sid);
List<SysFinanceVo> selectStaffListByUseOrgSid(@Param("orgSidPath") String orgSidPath);
} }

11
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationMapper.xml

@ -315,4 +315,15 @@
WHERE orgAttributeKey = 'fwz_003' WHERE orgAttributeKey = 'fwz_003'
AND psid = #{sid} AND psid = #{sid}
</select> </select>
<select id="selectStaffListByUseOrgSid" resultType="com.yxt.anrui.portal.api.sysorganization.SysFinanceVo">
SELECT DISTINCT
u.sid userSid,
s.`name`
FROM sys_user as u
LEFT JOIN sys_user_role as ur ON u.sid = ur.userSid
LEFT JOIN sys_staffinfo as s ON u.staffSid = s.sid
LEFT JOIN sys_staff_org as o ON o.staffSid = s.sid
WHERE ur.roleSid = '89d7f310-a221-405b-858e-dd650e0993d5'
AND o.orgSidPath LIKE concat('%', #{orgSidPath}, '%')
</select>
</mapper> </mapper>

7
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationRest.java

@ -498,4 +498,11 @@ public class SysOrganizationRest implements SysOrganizationFeign {
List<SysOrganization> sysOrganization = sysOrganizationService.selectByOrgCodeAndPsid(orgCode,pSid); List<SysOrganization> sysOrganization = sysOrganizationService.selectByOrgCodeAndPsid(orgCode,pSid);
return rb.success().setData(sysOrganization); return rb.success().setData(sysOrganization);
} }
@Override
public ResultBean<List<SysFinanceVo>> selectStaffListByUseOrgSid(String useOrgSid) {
ResultBean rb = ResultBean.fireFail();
List<SysFinanceVo> voList = sysOrganizationService.selectStaffListByUseOrgSid(useOrgSid);
return rb.success().setData(voList);
}
} }

10
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysorganization/SysOrganizationService.java

@ -739,4 +739,14 @@ public class SysOrganizationService extends MybatisBaseService<SysOrganizationMa
public List<SysOrganizationVo> tranFive(String sid) { public List<SysOrganizationVo> tranFive(String sid) {
return baseMapper.tranFive(sid); return baseMapper.tranFive(sid);
} }
public List<SysFinanceVo> selectStaffListByUseOrgSid(String useOrgSid) {
SysOrganization sysOrganization = fetchById(useOrgSid);
if (null != sysOrganization) {
String orgSidPath = sysOrganization.getOrgSidPath();
List<SysFinanceVo> list = baseMapper.selectStaffListByUseOrgSid(orgSidPath);
return list;
}
return new ArrayList<>();
}
} }

65
yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java

@ -1,16 +1,20 @@
package com.yxt.anrui.oa.api; package com.yxt.anrui.oa.api;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.oa.biz.oaform.*; import com.yxt.anrui.oa.biz.oaform.*;
import com.yxt.anrui.oa.biz.oahireapply.OaHireApplyDetailsVo; import com.yxt.anrui.oa.biz.oaform.flowable.*;
import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyQuery; import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables;
import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyVo;
import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/** /**
* @description: 基础表单 * @description: 基础表单
* @author: dimengzhe * @author: dimengzhe
@ -31,11 +35,11 @@ public class OaFormRest {
return rb.success().setData(pv); return rb.success().setData(pv);
} }
@ApiOperation("新增或修改") /*@ApiOperation("新增或修改")
@PostMapping("/save") @PostMapping("/save")
ResultBean<String> save(@RequestBody OaFormDto dto) { ResultBean<String> save(@RequestBody OaFormDto dto) {
return oaFormService.saveOrUpdateForm(dto); return oaFormService.saveOrUpdateForm(dto);
} }*/
@ApiOperation("根据SID获取一条记录") @ApiOperation("根据SID获取一条记录")
@GetMapping("/fetchDetailsBySid/{sid}") @GetMapping("/fetchDetailsBySid/{sid}")
@ -51,5 +55,56 @@ public class OaFormRest {
return rb.success(); return rb.success();
} }
@ApiOperation(value = "办理(同意)")
@PostMapping("/complete")
public ResultBean complete(@Valid @RequestBody CompleteDto query) {
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
return oaFormService.complete(bv);
}
@ApiOperation(value = "获取上一个环节")
@GetMapping(value = "/getPreviousNodesForReject")
public ResultBean<List<NodeVo>> getPreviousNodesForReject(@Valid @SpringQueryMap NodeQuery query) {
return oaFormService.getPreviousNodesForReject(query);
}
@ApiOperation(value = "获取下一个环节")
@GetMapping(value = "/getNextNodesForSubmit")
public ResultBean<List<NodeVo>> getNextNodesForSubmit(@Valid @SpringQueryMap NodeQuery query) {
return oaFormService.getNextNodesForSubmit(query);
}
@ApiOperation(value = "驳回任务")
@PostMapping(value = "/reject")
public ResultBean reject(@Valid @RequestBody TaskQuery query) {
return oaFormService.reject(query);
}
@ApiOperation(value = "撤回流程")
@PostMapping(value = "/revokeProcess")
public ResultBean revokeProcess(@Valid @RequestBody TaskQuery query) {
return oaFormService.revokeProcess(query);
}
@ApiOperation(value = "终止任务")
@PostMapping(value = "/breakProcess")
public ResultBean breakProcess(@Valid @RequestBody TaskQuery query) {
return oaFormService.breakProcess(query);
}
@ApiOperation(value = "加签")
@PostMapping(value = "/delegate")
public ResultBean delegate(@RequestBody DelegateQuery query) {
return oaFormService.delegate(query);
}
@ApiOperation(value = "转办")
@PutMapping(value = "/assignTask")
@ResponseBody
public ResultBean assignTask(@RequestBody DelegateQuery query) {
return oaFormService.assignTask(query);
}
} }

56
yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java

@ -25,22 +25,15 @@
*********************************************************/ *********************************************************/
package com.yxt.anrui.oa.api; package com.yxt.anrui.oa.api;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.oa.biz.oaleaveapply.flowable.*;
import com.yxt.anrui.oa.biz.oamendapply.*; import com.yxt.anrui.oa.biz.oamendapply.*;
import com.yxt.anrui.oa.biz.oamendapply.flowable.*;
import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables;
import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import javax.validation.Valid; import javax.validation.Valid;
/** /**
@ -108,54 +101,5 @@ public class OaMendApplyRest {
return oaMendApplyService.submit(dto); return oaMendApplyService.submit(dto);
} }
@ApiOperation(value = "办理(同意)")
@PostMapping("/complete")
public ResultBean complete(@Valid @RequestBody OaLeaveApplyCompleteDto query) {
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
return oaMendApplyService.complete(bv);
}
@ApiOperation(value = "获取上一个环节")
@GetMapping(value = "/getPreviousNodesForReject")
public ResultBean<List<OaMendApplyNodeVo>> getPreviousNodesForReject(@Valid @SpringQueryMap OaMendApplyNodeQuery query) {
return oaMendApplyService.getPreviousNodesForReject(query);
}
@ApiOperation(value = "获取下一个环节")
@GetMapping(value = "/getNextNodesForSubmit")
public ResultBean<List<OaMendApplyNodeVo>> getNextNodesForSubmit(@Valid @SpringQueryMap OaMendApplyNodeQuery query) {
return oaMendApplyService.getNextNodesForSubmit(query);
}
@ApiOperation(value = "驳回任务")
@PostMapping(value = "/reject")
public ResultBean reject(@Valid @RequestBody OaMendApplyTaskQuery query) {
return oaMendApplyService.reject(query);
}
@ApiOperation(value = "撤回流程")
@PostMapping(value = "/revokeProcess")
public ResultBean revokeProcess(@Valid @RequestBody OaMendApplyTaskQuery query) {
return oaMendApplyService.revokeProcess(query);
}
@ApiOperation(value = "终止任务")
@PostMapping(value = "/breakProcess")
public ResultBean breakProcess(@Valid @RequestBody OaMendApplyTaskQuery query) {
return oaMendApplyService.breakProcess(query);
}
@ApiOperation(value = "加签")
@PostMapping(value = "/delegate")
public ResultBean delegate(@RequestBody OaMendApplyDelegateQuery query) {
return oaMendApplyService.delegate(query);
}
@ApiOperation(value = "转办")
@PutMapping(value = "/assignTask")
@ResponseBody
public ResultBean assignTask(@RequestBody OaMendApplyDelegateQuery query) {
return oaMendApplyService.assignTask(query);
}
} }

7
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java

@ -15,6 +15,11 @@ import java.util.Date;
@Data @Data
public class OaForm extends BaseEntity { public class OaForm extends BaseEntity {
private static final long serialVersionUID = 2307297366703765992L; private static final long serialVersionUID = 2307297366703765992L;
@ApiModelProperty("表单类别-流程名称")
private String formType;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("单据编号") @ApiModelProperty("单据编号")
private String billNo; private String billNo;
@ApiModelProperty("创建人") @ApiModelProperty("创建人")
@ -44,8 +49,6 @@ public class OaForm extends BaseEntity {
private String createOrgSid; private String createOrgSid;
@ApiModelProperty("创建组织") @ApiModelProperty("创建组织")
private String createOrgName; private String createOrgName;
@ApiModelProperty("关联审批单")
private String linkFormSids;
} }

30
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormDto.java

@ -14,35 +14,7 @@ import java.util.Date;
@Data @Data
public class OaFormDto { public class OaFormDto {
private String sid;
private String createBySid; private String createBySid;
@ApiModelProperty("创建人") private String orgSidPath;
private String createByName;
private String billNo; private String billNo;
@ApiModelProperty("公司sid")
private String useOrgSid;
@ApiModelProperty("公司名称")
private String useOrgName;
@ApiModelProperty("部门sid")
private String deptSid;
@ApiModelProperty("部门名称")
private String deptName;
@ApiModelProperty("办结日期")
private String finishTime;
@ApiModelProperty("实例id")
private String procInstId;
@ApiModelProperty("流程定义id")
private String procDefId;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty("环节id")
private String nodeId;
@ApiModelProperty("流程状态")
private String nodeState;
@ApiModelProperty("创建组织sid")
private String createOrgSid;
@ApiModelProperty("创建组织")
private String createOrgName;
@ApiModelProperty("关联审批单")
private String linkFormSids;
} }

2
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java

@ -21,4 +21,6 @@ public interface OaFormMapper extends BaseMapper<OaForm> {
IPage<OaFormVo> selectPageVo(IPage<OaForm> page, @Param(Constants.WRAPPER) QueryWrapper<OaForm> qw); IPage<OaFormVo> selectPageVo(IPage<OaForm> page, @Param(Constants.WRAPPER) QueryWrapper<OaForm> qw);
int updateFlowFiled(Map<String, Object> map); int updateFlowFiled(Map<String, Object> map);
String selectNum(String billNo);
} }

8
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml

@ -31,4 +31,12 @@
</if> </if>
WHERE sid = #{sid} WHERE sid = #{sid}
</update> </update>
<select id="selectNum" resultType="java.lang.String">
select RIGHT(billNo, 4)
from oa_form
where billNo LIKE concat(#{billNo}, '%')
order by billNo desc
limit 1
</select>
</mapper> </mapper>

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

@ -1,23 +1,43 @@
package com.yxt.anrui.oa.biz.oaform; package com.yxt.anrui.oa.biz.oaform;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.oa.biz.oahireapply.OaHireApplyDetailsVo; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApply; import com.yxt.anrui.oa.biz.oaform.flowable.*;
import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyQuery; import com.yxt.anrui.oa.feign.base.Rule;
import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyVo; 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.UpdateFlowFieldVo; 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;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo;
import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo;
import com.yxt.anrui.oa.feign.message.MessageFeign;
import com.yxt.anrui.oa.feign.message.MessageFlowVo;
import com.yxt.anrui.oa.feign.message.MessageFlowableQuery;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.anrui.oa.feign.portal.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.oa.feign.sysuser.SysUserFeign;
import com.yxt.anrui.oa.feign.sysuser.SysUserVo;
import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.StringUtils; import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map; import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/** /**
* @description: * @description:
@ -26,7 +46,22 @@ import java.util.Map;
**/ **/
@Service @Service
public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> { public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
public ResultBean<String> saveOrUpdateForm(OaFormDto dto) { @Autowired
private SysOrganizationFeign sysOrganizationFeign;
@Autowired
private FlowFeign flowFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
@Autowired
private FlowableFeign flowableFeign;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private SysUserFeign sysUserFeign;
/* public ResultBean<String> saveOrUpdateForm(OaFormDto dto) {
ResultBean<String> rb = ResultBean.fireFail(); ResultBean<String> rb = ResultBean.fireFail();
String sid = dto.getSid(); String sid = dto.getSid();
if (StringUtils.isBlank(sid)) {//新增 if (StringUtils.isBlank(sid)) {//新增
@ -40,6 +75,49 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
baseMapper.updateById(oaForm); baseMapper.updateById(oaForm);
} }
return rb.success().setData(sid); return rb.success().setData(sid);
}*/
public ResultBean<String> saveOaForm(OaFormDto dto) {
ResultBean<String> rb = ResultBean.fireFail();
OaForm oaForm = new OaForm();
String useOrgSid = sysStaffOrgFeign.getOrgSidByPath(dto.getOrgSidPath()).getData();
SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(useOrgSid).getData();
String deptName = "";
String deptSid = "";
List<String> split = Arrays.asList(dto.getOrgSidPath().split("/"));
if (split.size() > 1) {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData();
SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData();
deptName = sysOrganization1.getName();
deptSid = sysOrganization1.getSid();
} else {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData();
deptName = sysOrganization.getName();
deptSid = sysOrganization.getSid();
}
// 生成单据编号
String billNo = dto.getBillNo() + useOrgSid + DateUtil.format(DateUtil.date(), "yyyyMM");
String i = selectNum(billNo);
if (StringUtils.isNotBlank(i)) {
billNo = Rule.getBillNo(billNo, Integer.valueOf(i).intValue());
} else {
billNo = Rule.getBillNo(billNo, 0);
}
oaForm.setUseOrgSid(useOrgSid);
oaForm.setUseOrgName(organizationVo.getName());
oaForm.setDeptSid(deptSid);
oaForm.setDeptName(deptName);
oaForm.setBillNo(billNo);
oaForm.setCreateOrgSid(useOrgSid);
oaForm.setCreateOrgName(organizationVo.getName());
// 获取用户信息
SysUserVo sysUserVo = sysUserFeign.fetchBySid(dto.getCreateBySid()).getData();
oaForm.setCreateByName(sysUserVo.getName());
baseMapper.insert(oaForm);
return rb.success().setData(oaForm.getSid());
} }
public ResultBean<OaFormDetailsVo> fetchDetailsBySid(String sid) { public ResultBean<OaFormDetailsVo> fetchDetailsBySid(String sid) {
@ -66,7 +144,281 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
return rb.success(); return rb.success();
} }
public int updateFlow(Map<String, Object> map) { public int updateFlow(OaFormFlowDto oaFormFlowDto) {
OaForm oaForm = fetchBySid(oaFormFlowDto.getSid());
if (StringUtils.isBlank(oaForm.getFormType())) {
oaForm.setFormType(oaFormFlowDto.getName());
oaForm.setTitle(oaForm.getCreateByName() + "提交的" + oaFormFlowDto.getName());
updateFormType(oaForm);
}
Map<String, Object> map = BeanUtil.beanToMap(oaFormFlowDto);
return baseMapper.updateFlowFiled(map); return baseMapper.updateFlowFiled(map);
} }
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();
OaForm oaForm = fetchBySid(businessSid);
Map<String, Object> variables = new HashMap<>();
//网关
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
bv.setFormVariables(variables);
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaForm.getDeptSid()).getData();
bv.setOrgSidPath(deptVo.getOrgSidPath());
bv.setModelId(oaForm.getProcDefId());
if (bv.getTaskId().equals(oaForm.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(ufVo, oaFormFlowDto);
updateFlow(oaFormFlowDto);
if ("Event_end".equals(resultBean.getData().getTaskDefKey())) {
} else {
//极光推送
oaForm = fetchBySid(businessSid);
//==================================添加线程
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());
OaForm oaForms = oaForm;
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
ufVo.setProcDefId(oaForms.getProcDefId());
ufVo.setProcInsId(oaForms.getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName(oaForms.getFormType());
messageFlowableQuery.setMsgContent(oaForms.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle(oaForms.getFormType());
messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
}
return rb.success().setData(resultBean.getData());
} else {
return rb.setMsg("操作失败!提交的数据不一致");
}
}
public ResultBean<List<NodeVo>> getPreviousNodesForReject(NodeQuery query) {
ResultBean<List<NodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//查询业务信息
OaForm oaForm = fetchBySid(query.getBusinessSid());
//网关
bv.setModelId(oaForm.getProcDefId());
bv.setFormVariables(variables);
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<NodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), NodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean<List<NodeVo>> getNextNodesForSubmit(NodeQuery query) {
ResultBean<List<NodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//查询业务信息
OaForm oaForm = fetchBySid(query.getBusinessSid());
//网关
bv.setModelId(oaForm.getProcDefId());
bv.setFormVariables(variables);
//=======================================
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<NodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), NodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean reject(TaskQuery query) {
ResultBean rb = ResultBean.fireFail();
String businessSid = query.getBusinessSid();
OaForm oaForm = fetchBySid(businessSid);
if (oaForm == null) {
return rb.setMsg("该申请不存在");
}
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
//网关
flowTaskVo.setValues(variables);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.taskReject(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(ufVo, oaFormFlowDto);
updateFlow(oaFormFlowDto);
//极光推送
oaForm = fetchBySid(businessSid);
//==================================添加线程
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());
OaForm oaForms = oaForm;
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
ufVo.setProcInsId(oaForms.getProcInstId());
ufVo.setProcDefId(oaForms.getProcDefId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName(oaForms.getFormType());
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(oaForms.getProcInstId());
String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_();
List<String> receiveSidList = Arrays.asList(nextNodeUserSids.split(","));
if (receiveSidList.size() == 1 && receiveSidList.get(0).equals(oaForms.getCreateBySid())) {
messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交");
} else {
messageFlowableQuery.setMsgContent(oaForms.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
}
messageFlowableQuery.setMsgTitle(oaForms.getFormType());
messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
return rb.success();
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean revokeProcess(TaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
OaForm oaForm = fetchBySid(query.getBusinessSid());
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.revokeProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(resultBean.getData(), oaFormFlowDto);
updateFlow(oaFormFlowDto);
return rb.success().setData(resultBean.getData());
}
}
return rb.setMsg("操作失败,提交的数据不一致!");
}
public ResultBean breakProcess(TaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
OaForm oaForm = fetchBySid(query.getBusinessSid());
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (query.getUserSid().equals(oaForm.getCreateBySid())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(resultBean.getData(), oaFormFlowDto);
updateFlow(oaFormFlowDto);
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
BeanUtil.copyProperties(resultBean.getData(), oaFormFlowDto);
updateFlow(oaFormFlowDto);
return rb.success().setData(resultBean.getData());
}
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean delegate(DelegateQuery query) {
ResultBean rb = ResultBean.fireFail();
FlowDelegateQuery delegateQuery = new FlowDelegateQuery();
BeanUtil.copyProperties(query, delegateQuery);
flowFeign.delegate(delegateQuery);
return rb.success();
}
public ResultBean assignTask(DelegateQuery query) {
ResultBean rb = ResultBean.fireFail();
FlowDelegateQuery delegateQuery = new FlowDelegateQuery();
BeanUtil.copyProperties(query, delegateQuery);
flowFeign.assignTask(delegateQuery);
return rb.success();
}
public int updateFormType(OaForm oaForm) {
return baseMapper.updateById(oaForm);
}
public String selectNum(String billNo) {
return baseMapper.selectNum(billNo);
}
} }

14
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyCompleteDto.java → yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/CompleteDto.java

@ -1,4 +1,4 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable; package com.yxt.anrui.oa.biz.oaform.flowable;
import com.yxt.common.core.dto.Dto; import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -7,14 +7,14 @@ import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
/** /**
* @Author dimengzhe * @description:
* @Date 2022/9/6 14:57 * @author: dimengzhe
* @Description * @date: 2025/1/9
*/ **/
@Data @Data
public class OaMendApplyCompleteDto implements Dto { public class CompleteDto implements Dto {
private static final long serialVersionUID = 6378752532534735663L;
private static final long serialVersionUID = -252752211700409269L;
@ApiModelProperty(value = "用户sid") @ApiModelProperty(value = "用户sid")
private String userSid; private String userSid;
@ApiModelProperty(value = "节点id") @ApiModelProperty(value = "节点id")

16
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyDelegateQuery.java → yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/DelegateQuery.java

@ -1,19 +1,19 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable; package com.yxt.anrui.oa.biz.oaform.flowable;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
* @author Administrator * @description:
* @description * @author: dimengzhe
* @date 2023/9/28 9:28 * @date: 2025/1/9
*/ **/
@Data @Data
public class OaMendApplyDelegateQuery { public class DelegateQuery {
@ApiModelProperty @ApiModelProperty
private String userSid; private String userSid;
@ApiModelProperty("流程实例id") @ApiModelProperty("流程实例id")
// @JsonProperty("procInsId")
private String instanceId; private String instanceId;
@ApiModelProperty("任务Id") @ApiModelProperty("任务Id")
private String taskId; private String taskId;
@ -21,6 +21,4 @@ public class OaMendApplyDelegateQuery {
private String assignee; private String assignee;
@ApiModelProperty("填写意见") @ApiModelProperty("填写意见")
private String views; private String views;
} }

21
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java

@ -0,0 +1,21 @@
package com.yxt.anrui.oa.biz.oaform.flowable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @description:
* @author: dimengzhe
* @date: 2025/1/9
**/
@Data
public class NodeQuery {
@ApiModelProperty(value = "环节定义id")
@NotBlank(message = "参数错误:taskDefKey")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
}

14
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeVo.java → yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeVo.java

@ -1,19 +1,17 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable; package com.yxt.anrui.oa.biz.oaform.flowable;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
/** /**
* @Author dimengzhe * @description:
* @Date 2022/9/6 15:03 * @author: dimengzhe
* @Description * @date: 2025/1/9
*/ **/
@Data @Data
public class OaMendApplyNodeVo implements Vo { public class NodeVo {
private static final long serialVersionUID = -833419512294877848L;
@ApiModelProperty(value = "节点名称") @ApiModelProperty(value = "节点名称")
private String name; private String name;

27
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/OaFormFlowDto.java

@ -0,0 +1,27 @@
package com.yxt.anrui.oa.biz.oaform.flowable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2025/1/9
**/
@Data
public class OaFormFlowDto {
@ApiModelProperty("sid")
private String sid;
@ApiModelProperty("流程定义id")
private String procDefId;
@ApiModelProperty("流程状态")
private String nodeState;
@ApiModelProperty("流程实例id")
private String procInsId;
@ApiModelProperty("环节id")
private String taskDefKey;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty("流程名称")
private String name;
}

14
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyTaskQuery.java → yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/TaskQuery.java

@ -1,19 +1,17 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable; package com.yxt.anrui.oa.biz.oaform.flowable;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
/** /**
* @Author dimengzhe * @description:
* @Date 2022/9/6 15:06 * @author: dimengzhe
* @Description * @date: 2025/1/9
*/ **/
@Data @Data
public class OaMendApplyTaskQuery implements Query { public class TaskQuery {
private static final long serialVersionUID = 1288615499873178778L;
/** /**
* 终止驳回撤回 * 终止驳回撤回

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

@ -60,8 +60,11 @@ public class OaMendApply extends BaseEntity {
@ApiModelProperty("补卡时间") @ApiModelProperty("补卡时间")
private String time; private String time;
@ApiModelProperty("关联审批单")
private String linkFormSids;
@TableField(exist = false) @TableField(exist = false)
private OaForm oaForm = new OaForm(); private OaForm oaForm;
/* @ApiModelProperty("单据编号") /* @ApiModelProperty("单据编号")

4
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyDto.java

@ -58,11 +58,13 @@ public class OaMendApplyDto implements Dto {
private static final long serialVersionUID = -4536006302677264298L; private static final long serialVersionUID = -4536006302677264298L;
private String sid; private String sid;
private String createBySid; private String createBySid;
private String orgPath; private String orgSidPath;
@ApiModelProperty("补卡原因") @ApiModelProperty("补卡原因")
private String remarks; private String remarks;
@ApiModelProperty("补卡时间") @ApiModelProperty("补卡时间")
private String time; private String time;
@ApiModelProperty("关联审批单")
private String linkFormSids;
@ApiModelProperty("图片") @ApiModelProperty("图片")
private List<String> files = new ArrayList<>(); private List<String> files = new ArrayList<>();

11
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java

@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Map; import java.util.Map;
/** /**
@ -49,15 +50,13 @@ import java.util.Map;
@Mapper @Mapper
public interface OaMendApplyMapper extends BaseMapper<OaMendApply> { public interface OaMendApplyMapper extends BaseMapper<OaMendApply> {
IPage<OaMendApplyVo> selectPageVo(IPage<OaMendApply> page, @Param(Constants.WRAPPER) Wrapper<OaMendApply> qw); IPage<OaMendApplyVo> selectPageVo(IPage<OaMendApply> page, @Param(Constants.WRAPPER) Wrapper<OaMendApply> qw);
int updateFlowFiled(Map<String, Object> map); int selectBySid(String join);
int selectBySid(String join);
String selectNum(String billNo);
OaMendApplyDetailsVo fetchDetailsVoBySid(String sid); OaMendApplyDetailsVo fetchDetailsVoBySid(String sid);
OaMendApplyInitVo init(String sid); OaMendApplyInitVo init(String sid);
} }

33
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml

@ -26,37 +26,12 @@
</where> </where>
</select> </select>
<update id="updateFlowFiled">
UPDATE oa_mend_apply
SET nodeState=#{nodeState}, nodeId=#{taskDefKey}
<if test="nodeState == '已办结' or nodeState == '终止'">
, finishTime = NOW()
</if>
<if test="procDefId != null and procDefId != ''">
, procDefId=#{procDefId}
</if>
<if test="procInsId != null and procInsId != ''">
, procInstId=#{procInsId}
</if>
<if test="taskId != null and taskId != ''">
, taskId=#{taskId}
</if>
WHERE sid=#{sid}
</update>
<select id="selectBySid" resultType="int"> <select id="selectBySid" resultType="int">
SELECT COUNT(*) SELECT COUNT(*)
FROM oa_mend_apply FROM oa_mend_apply oa
WHERE nodeState != '待提交' left join oa_form ofm on oa.formSid = ofm.sid
and find_in_set(sid, #{list}) WHERE ofm.nodeState != '待提交'
</select> and find_in_set(oa.sid, #{list})
<select id="selectNum" resultType="java.lang.String">
select RIGHT(billNo, 4)
from oa_mend_apply
where billNo LIKE concat(#{billNo}, '%')
order by billNo desc
limit 1
</select> </select>
<select id="fetchDetailsVoBySid" resultType="com.yxt.anrui.oa.biz.oamendapply.OaMendApplyDetailsVo"> <select id="fetchDetailsVoBySid" resultType="com.yxt.anrui.oa.biz.oamendapply.OaMendApplyDetailsVo">

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

@ -26,8 +26,6 @@
package com.yxt.anrui.oa.biz.oamendapply; package com.yxt.anrui.oa.biz.oamendapply;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
@ -36,18 +34,12 @@ import com.yxt.anrui.oa.biz.oaappendix.OaAppendixService;
import com.yxt.anrui.oa.biz.oaform.OaForm; import com.yxt.anrui.oa.biz.oaform.OaForm;
import com.yxt.anrui.oa.biz.oaform.OaFormDto; import com.yxt.anrui.oa.biz.oaform.OaFormDto;
import com.yxt.anrui.oa.biz.oaform.OaFormService; import com.yxt.anrui.oa.biz.oaform.OaFormService;
import com.yxt.anrui.oa.biz.oamendapply.flowable.*; import com.yxt.anrui.oa.biz.oaform.flowable.OaFormFlowDto;
import com.yxt.anrui.oa.feign.base.Rule;
import com.yxt.anrui.oa.feign.file.OaFileEnum; 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.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.ProcDefEnum;
import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo; 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; import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo;
import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo;
import com.yxt.anrui.oa.feign.message.MessageFeign; import com.yxt.anrui.oa.feign.message.MessageFeign;
import com.yxt.anrui.oa.feign.message.MessageFlowVo; import com.yxt.anrui.oa.feign.message.MessageFlowVo;
import com.yxt.anrui.oa.feign.message.MessageFlowableQuery; import com.yxt.anrui.oa.feign.message.MessageFlowableQuery;
@ -55,7 +47,6 @@ import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.anrui.oa.feign.portal.sysstafforg.SysStaffOrgFeign; import com.yxt.anrui.oa.feign.portal.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.oa.feign.sysuser.SysUserFeign; import com.yxt.anrui.oa.feign.sysuser.SysUserFeign;
import com.yxt.anrui.oa.feign.sysuser.SysUserVo;
import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.config.component.FileUploadComponent;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.service.MybatisBaseService;
@ -66,13 +57,11 @@ import com.yxt.common.core.vo.PagerVo;
import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.stream.Collectors;
@Service @Service
public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, OaMendApply> { public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, OaMendApply> {
@ -80,18 +69,10 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
@Autowired @Autowired
private SysOrganizationFeign sysOrganizationFeign; private SysOrganizationFeign sysOrganizationFeign;
@Autowired @Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private FlowableFeign flowableFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
@Autowired
private FlowFeign flowFeign; private FlowFeign flowFeign;
@Autowired @Autowired
private MessageFeign messageFeign; private MessageFeign messageFeign;
@Autowired @Autowired
private SysUserFeign sysUserFeign;
@Autowired
private FileUploadComponent fileUploadComponent; private FileUploadComponent fileUploadComponent;
@Autowired @Autowired
private OaAppendixService oaAppendixService; private OaAppendixService oaAppendixService;
@ -174,48 +155,11 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
// 新建操作 // 新建操作
OaMendApply entity = new OaMendApply(); OaMendApply entity = new OaMendApply();
BeanUtil.copyProperties(dto, entity, "sid"); BeanUtil.copyProperties(dto, entity, "sid");
String useOrgSid = sysStaffOrgFeign.getOrgSidByPath(dto.getOrgPath()).getData();
SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(useOrgSid).getData();
String deptName = "";
String deptSid = "";
List<String> split = Arrays.asList(dto.getOrgPath().split("/"));
if (split.size() > 1) {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData();
SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData();
deptName = sysOrganization1.getName();
deptSid = sysOrganization1.getSid();
} else {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData();
deptName = sysOrganization.getName();
deptSid = sysOrganization.getSid();
}
// 生成单据编号
String billNo = "QJSQ" + useOrgSid + DateUtil.format(DateUtil.date(), "yyyyMM");
String i = baseMapper.selectNum(billNo);
if (StringUtils.isNotBlank(i)) {
billNo = Rule.getBillNo(billNo, Integer.valueOf(i).intValue());
} else {
billNo = Rule.getBillNo(billNo, 0);
}
OaForm oaForm = entity.getOaForm();
BeanUtil.copyProperties(dto, oaForm, "sid", "remarks");
oaForm.setUseOrgSid(useOrgSid);
oaForm.setUseOrgName(organizationVo.getName());
oaForm.setDeptSid(deptSid);
oaForm.setDeptName(deptName);
oaForm.setBillNo(billNo);
oaForm.setCreateOrgSid(useOrgSid);
oaForm.setCreateOrgName(organizationVo.getName());
// 获取用户信息
SysUserVo sysUserVo = sysUserFeign.fetchBySid(dto.getCreateBySid()).getData();
oaForm.setCreateByName(sysUserVo.getName());
OaFormDto oaFormDto = new OaFormDto(); OaFormDto oaFormDto = new OaFormDto();
BeanUtil.copyProperties(oaForm, oaFormDto, "sid"); BeanUtil.copyProperties(dto, oaFormDto, "sid");
ResultBean<String> resultBean = oaFormService.saveOrUpdateForm(oaFormDto); oaFormDto.setBillNo("BKSQ");
ResultBean<String> resultBean = oaFormService.saveOaForm(oaFormDto);
if (!resultBean.getSuccess()) { if (!resultBean.getSuccess()) {
return rb; return rb;
@ -289,12 +233,14 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaMendApply.getOaForm().getDeptSid()).getData(); SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaMendApply.getOaForm().getDeptSid()).getData();
bv.setOrgSidPath(deptVo.getOrgSidPath()); bv.setOrgSidPath(deptVo.getOrgSidPath());
//业务sid //业务sid
bv.setBusinessSid(businessSid); // bv.setBusinessSid(businessSid);
bv.setBusinessSid(oaMendApply.getFormSid());
//用户sid //用户sid
bv.setUserSid(oaMendApply.getCreateBySid()); bv.setUserSid(oaMendApply.getCreateBySid());
//若app移动端有此功能,则传递appMap参数 //若app移动端有此功能,则传递appMap参数
Map<String, Object> appMap = new HashMap<>(); Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid); // appMap.put("sid", businessSid);
appMap.put("sid", oaMendApply.getFormSid());
//需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。 //需和移动端沟通业务sid保存的属性具体值:appMap中sid不是固定的。移动端提供具体字段。
variables.put("app", appMap); variables.put("app", appMap);
//网关 //网关
@ -310,15 +256,9 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
if (r == 1) { if (r == 1) {
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv); ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
UpdateFlowFieldVo ufVo = voResultBean.getData(); UpdateFlowFieldVo ufVo = voResultBean.getData();
// updateFlowFiled(BeanUtil.beanToMap(ufVo)); OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();
//更新oaform中的流程数据 BeanUtil.copyProperties(ufVo, oaFormFlowDto);
ufVo.setSid(oaMendApply.getFormSid()); oaFormService.updateFlow(oaFormFlowDto);
oaFormService.updateFlow(BeanUtil.beanToMap(ufVo));
//极光推送
oaMendApply = fetchBySid(businessSid);
oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
//==================================添加线程 //==================================添加线程
try { try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
@ -326,9 +266,8 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
ExecutorService pool = new ThreadPoolExecutor(2, 100, ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
OaMendApply mendApply = oaMendApply; oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaForm = oaFormService.fetchBySid(mendApply.getFormSid()); OaForm finalOaForm = oaForm;
mendApply.setOaForm(oaForm);
Future future1 = pool.submit(() -> { Future future1 = pool.submit(() -> {
//极光推送 //极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
@ -337,9 +276,9 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
messageFlowableQuery.setUfVo(messageFlowVo); messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap); messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid); messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("补卡申请"); messageFlowableQuery.setModuleName(finalOaForm.getFormType());
messageFlowableQuery.setMsgContent(mendApply.getOaForm().getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); messageFlowableQuery.setMsgContent(finalOaForm.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("补卡申请"); messageFlowableQuery.setMsgTitle(finalOaForm.getFormType());
messageFeign.pushMessage(messageFlowableQuery); messageFeign.pushMessage(messageFlowableQuery);
}); });
} catch (Exception e) { } catch (Exception e) {
@ -357,7 +296,7 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
bv.setTaskDefKey(oaMendApply.getOaForm().getNodeId()); bv.setTaskDefKey(oaMendApply.getOaForm().getNodeId());
bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交");
bv.setInstanceId(dto.getInstanceId()); bv.setInstanceId(dto.getInstanceId());
return complete(bv); return oaFormService.complete(bv);
} }
return rb; return rb;
} }
@ -386,296 +325,6 @@ public class OaMendApplyService extends MybatisBaseService<OaMendApplyMapper, Oa
return r; return r;
} }
private int updateFlowFiled(Map<String, Object> map) {
return baseMapper.updateFlowFiled(map);
}
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();
OaMendApply oaMendApply = fetchBySid(businessSid);
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
Map<String, Object> variables = new HashMap<>();
//网关
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
//=======================================
bv.setFormVariables(variables);
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaMendApply.getOaForm().getDeptSid()).getData();
bv.setOrgSidPath(deptVo.getOrgSidPath());
bv.setModelId(oaMendApply.getOaForm().getProcDefId());
if (bv.getTaskId().equals(oaMendApply.getOaForm().getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
// updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
//更新oaform中的流程数据
ufVo.setSid(oaMendApply.getFormSid());
oaFormService.updateFlow(BeanUtil.beanToMap(ufVo));
if ("Event_end".equals(resultBean.getData().getTaskDefKey())) {
} else {
//极光推送
oaMendApply = fetchBySid(businessSid);
//==================================添加线程
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());
OaMendApply mendApply = oaMendApply;
oaForm = oaFormService.fetchBySid(mendApply.getFormSid());
mendApply.setOaForm(oaForm);
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
ufVo.setProcDefId(mendApply.getOaForm().getProcDefId());
ufVo.setProcInsId(mendApply.getOaForm().getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("补卡申请");
messageFlowableQuery.setMsgContent(mendApply.getOaForm().getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("补卡申请");
messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
}
return rb.success().setData(resultBean.getData());
} else {
return rb.setMsg("操作失败!提交的数据不一致");
}
}
public ResultBean<List<OaMendApplyNodeVo>> getPreviousNodesForReject(OaMendApplyNodeQuery query) {
ResultBean<List<OaMendApplyNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//查询业务信息
OaMendApply oaMendApply = fetchBySid(query.getBusinessSid());
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
//网关
bv.setModelId(oaMendApply.getOaForm().getProcDefId());
bv.setFormVariables(variables);
//=======================================
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<OaMendApplyNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), OaMendApplyNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean<List<OaMendApplyNodeVo>> getNextNodesForSubmit(OaMendApplyNodeQuery query) {
ResultBean<List<OaMendApplyNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//查询业务信息
OaMendApply oaMendApply = fetchBySid(query.getBusinessSid());
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
//网关
bv.setModelId(oaMendApply.getOaForm().getProcDefId());
bv.setFormVariables(variables);
//=======================================
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<OaMendApplyNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), OaMendApplyNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean reject(OaMendApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
String businessSid = query.getBusinessSid();
OaMendApply oaMendApply = fetchBySid(businessSid);
if (oaMendApply == null) {
return rb.setMsg("该申请不存在");
}
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
String businessTaskId = oaMendApply.getOaForm().getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
//网关
flowTaskVo.setValues(variables);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.taskReject(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
Map<String, Object> map = BeanUtil.beanToMap(ufVo);
//更新业务中的流程相关的参数
// updateFlowFiled(map);
//更新oaform中的流程数据
ufVo.setSid(oaMendApply.getFormSid());
oaFormService.updateFlow(BeanUtil.beanToMap(ufVo));
//极光推送
oaMendApply = fetchBySid(businessSid);
//==================================添加线程
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());
OaMendApply mendApply = oaMendApply;
oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
mendApply.setOaForm(oaForm);
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
String procId = mendApply.getOaForm().getProcInstId();
ufVo.setProcInsId(procId);
ufVo.setProcDefId(mendApply.getOaForm().getProcDefId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("补卡申请");
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(procId);
String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_();
List<String> receiveSidList = Arrays.asList(nextNodeUserSids.split(","));
if (receiveSidList.size() == 1 && receiveSidList.get(0).equals(mendApply.getCreateBySid())) {
messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交");
} else {
messageFlowableQuery.setMsgContent(mendApply.getOaForm().getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
}
messageFlowableQuery.setMsgTitle("补卡申请");
messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
return rb.success();
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean revokeProcess(OaMendApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
OaMendApply oaMendApply = fetchBySid(query.getBusinessSid());
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
String businessTaskId = oaMendApply.getOaForm().getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.revokeProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
// updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
//更新oaform中的流程数据
resultBean.getData().setSid(oaMendApply.getFormSid());
oaFormService.updateFlow(BeanUtil.beanToMap(resultBean.getData()));
return rb.success().setData(resultBean.getData());
}
}
return rb.setMsg("操作失败,提交的数据不一致!");
}
public ResultBean breakProcess(OaMendApplyTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
OaMendApply oaMendApply = fetchBySid(query.getBusinessSid());
OaForm oaForm = oaFormService.fetchBySid(oaMendApply.getFormSid());
oaMendApply.setOaForm(oaForm);
String businessTaskId = oaMendApply.getOaForm().getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (query.getUserSid().equals(oaMendApply.getCreateBySid())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
// updateFlowFiled(map);
//更新oaform中的流程数据
resultBean.getData().setSid(oaMendApply.getFormSid());
oaFormService.updateFlow(BeanUtil.beanToMap(resultBean.getData()));
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
// updateFlowFiled(map);
//更新oaform中的流程数据
resultBean.getData().setSid(oaMendApply.getFormSid());
oaFormService.updateFlow(BeanUtil.beanToMap(resultBean.getData()));
return rb.success().setData(resultBean.getData());
}
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean delegate(OaMendApplyDelegateQuery query) {
ResultBean rb = ResultBean.fireFail();
FlowDelegateQuery delegateQuery = new FlowDelegateQuery();
BeanUtil.copyProperties(query, delegateQuery);
flowFeign.delegate(delegateQuery);
return rb.success();
}
public ResultBean assignTask(OaMendApplyDelegateQuery query) {
ResultBean rb = ResultBean.fireFail();
FlowDelegateQuery delegateQuery = new FlowDelegateQuery();
BeanUtil.copyProperties(query, delegateQuery);
flowFeign.assignTask(delegateQuery);
return rb.success();
}
public ResultBean delAll(String[] sids) { public ResultBean delAll(String[] sids) {
ResultBean rb = ResultBean.fireFail(); ResultBean rb = ResultBean.fireFail();
//查询该sid中是否有流程不是待提交的 //查询该sid中是否有流程不是待提交的

2
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/SubmitOaMendApplyDto.java → yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/SubmitOaMendApplyDto.java

@ -1,4 +1,4 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable; package com.yxt.anrui.oa.biz.oamendapply;
import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyDto; import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyDto;
import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyDto; import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyDto;

25
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeQuery.java

@ -1,25 +0,0 @@
package com.yxt.anrui.oa.biz.oamendapply.flowable;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Author dimengzhe
* @Date 2022/9/6 15:04
* @Description
*/
@Data
public class OaMendApplyNodeQuery implements Query {
private static final long serialVersionUID = 9117613683840483366L;
@ApiModelProperty(value = "环节定义id")
@NotBlank(message = "参数错误:taskDefKey")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
@ApiModelProperty(value = "0 上一环节 1下一环节")
private Integer next;
}

9
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/UpdateFlowFieldVo.java

@ -9,6 +9,7 @@ public class UpdateFlowFieldVo {
private String taskDefKey; private String taskDefKey;
private String taskId; private String taskId;
private String nextNodeUserSids; private String nextNodeUserSids;
private String name;
public String getNextNodeUserSids() { public String getNextNodeUserSids() {
return nextNodeUserSids; return nextNodeUserSids;
@ -65,4 +66,12 @@ public class UpdateFlowFieldVo {
public void setTaskId(String taskId) { public void setTaskId(String taskId) {
this.taskId = taskId; this.taskId = taskId;
} }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} }

Loading…
Cancel
Save