保障实施管理子系统业务流程操作说明

目录

一、接口模型实体类及流程Key

1、以入住办理审核流程为例

2、创建实体类的目的

3、流程Key(可以通过ext_act_flow_biz数据库表查询到)

二、流程图及节点设置

1、添加模型管理

2、设计流程图

3、配置节点

三、审批范围及审批按钮

1、审批范围

2、审批按钮


一、接口模型实体类及流程Key

1、以入住办理审核流程为例

package com.krt.business.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.krt.common.annotation.KrtActField;
import com.krt.common.base.BaseActEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 业务_新承业务实体类
 *
 * @author lf
 * @version 1.0
 * @date 2021-01-26 14:48
 */
@ApiModel(value = "业务_新承业务")
@Data
@TableName("business_into_house")
public class BusinessIntoHouse extends BaseActEntity {

    /**
     * ---------------------------------------基本信息------------------------------------
     */
    @ApiModelProperty(value = "流程ID")
    private String processId;

    @ApiModelProperty(value = "中签表id,prh_batch_winning.id")
    private Integer winningId;

    @ApiModelProperty(value = "中签批次id,根据apply_type_code路由关联对应的批次表")
    private Integer winningBatchId;

    @ApiModelProperty(value = "中签批次名称")
    private String winningBatchName;

    @ApiModelProperty(value = "允许受理新承业务开始日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date intoStartDate;

    @ApiModelProperty(value = "允许受理新承业务结束日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date intoEndDate;

    @ApiModelProperty(value = "状态:1待入驻、2已入住、3放弃承租、4不符合资格、5房管部待受理")
    private String status;

    @ApiModelProperty(value = "缴费状态:1缴费完成")
    private String payStatus;

    @ApiModelProperty(value = "核查是否结束:1是0否(所有单位都核查完毕)")
    private String checkIsEnd;

    @ApiModelProperty(value = "协查批次uuid")
    private String checkUuid;

    @ApiModelProperty(value = "申请时间")
    private Date businessApplyTime;

    @ApiModelProperty("房管所code")
    @KrtActField(name = "房管所code", isCascadeBusOrgan = true)
    private String hmsCode;

    @ApiModelProperty("房管所名字")
    private String hmsName;

    @ApiModelProperty("发票id")
    private Integer collectionId;

    @ApiModelProperty("发票经办人id")
    private Integer collectionUserId;

    @ApiModelProperty("保证金经办人id")
    private Integer bondUserId;

    @ApiModelProperty("业务区域类型,0市本级,1其他区域")
    private String businessType;

    /**
     * ---------------------------------------受理------------------------------------
     */
    @ApiModelProperty(value = "开户行")
    private String bankOpen;

    @ApiModelProperty(value = "银行账号")
    private String bankAccount;

    @ApiModelProperty(value = "处理结果:1通过2不通过")
    private String results;

    @ApiModelProperty(value = "处理结果内容")
    private String resultsContent;

    @ApiModelProperty(value = "处理人")
    private String resultUserName;

    @ApiModelProperty(value = "处理时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date resultsTime;

    @ApiModelProperty(value = "是否低保:1是0否")
    private String isSubsistence;

    /**
     * ---------------------------------------生成费用------------------------------------
     */
    @ApiModelProperty(value = "租金单价,单位:元")
    private BigDecimal rentUnit;

    @ApiModelProperty(value = "物业费单价,单位:元")
    private BigDecimal propertyUnit;

    @ApiModelProperty(value = "月应收租金,单位:元")
    private BigDecimal rentMonth;

    @ApiModelProperty(value = "月物业费,单位:元")
    private BigDecimal propertyMonth;

    @ApiModelProperty(value = "月租金(租金+物业费),单位:元")
    private BigDecimal rentPropertyMonth;

    @ApiModelProperty(value = "预缴租金开始年月,格式:2020-06")
    private String advanceStartMonth;

    @ApiModelProperty(value = "预缴租金结束年月")
    private String advanceEndMonth;

    @ApiModelProperty(value = "预缴租金+物业费,单位:元")
    private BigDecimal advanceRentProperty;

    @ApiModelProperty(value = "装修保证金")
    private BigDecimal bondRenovation;

    @ApiModelProperty(value = "租赁保证金")
    private BigDecimal bondRent;

    @ApiModelProperty(value = "水电保证金")
    private BigDecimal bondHydropower;

    @ApiModelProperty(value = "履约保证金")
    private BigDecimal bondPerformance;

    @ApiModelProperty(value = "合计费用")
    private BigDecimal costTotal;

    @ApiModelProperty(value = "费用生成人")
    private String genCostUserName;

    @ApiModelProperty(value = "费用生成时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date genCostTime;

    /**
     * ---------------------------------------费用审核------------------------------------
     */
    @ApiModelProperty(value = "缴费流水号")
    private String outNo;

    @ApiModelProperty(value = "缴费订单号")
    private String payOrderNo;

    @ApiModelProperty(value = "是否完成缴费:1是2否")
    private String payIsFinish;

    @ApiModelProperty(value = "缴费途径code,字典:支付宝/现金/转账/银行代扣/POS机/公对公转账")
    private String payWayCode;

    @ApiModelProperty(value = "缴费途径")
    private String payWayName;

    @ApiModelProperty(value = "财务确认人")
    private String checkCostUserName;

    @ApiModelProperty(value = "财务确认时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date checkCostTime;

    @ApiModelProperty("发票类型:0纸质,1电子")
    private String collectionType;

    @ApiModelProperty(value = "预缴发票")
    private String collectionAdvance;

    @ApiModelProperty(value = "装修发票")
    private String collectionRenovation;

    @ApiModelProperty(value = "租赁发票")
    private String collectionRent;

    @ApiModelProperty(value = "水电发票")
    private String collectionHydropower;

    @ApiModelProperty(value = "履约发票")
    private String collectionPerformance;

    /**
     * ---------------------------------------签订合同------------------------------------
     */
    @ApiModelProperty(value = "合同ID")
    private Integer contractId;

    @ApiModelProperty(value = "合同编号")
    private String contractCode;

    @ApiModelProperty(value = "合同年限")
    private Integer contractYears;

    @ApiModelProperty(value = "合同起始日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date contractStartDate;

    @ApiModelProperty(value = "合同截止日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date contractEndDate;

    @ApiModelProperty(value = "合同到期提前xx天提醒")
    private Integer contractExpireRemind;

    @ApiModelProperty(value = "合同是否签订,1是2否")
    private String contractIsSign;

    @ApiModelProperty(value = "合同生成人")
    private String genContractUserName;

    @ApiModelProperty(value = "合同生成时间")
    private Date genContractTime;

    @ApiModelProperty("手持身份证照片")
    private String holdCardPhoto;

    @ApiModelProperty("签名照片")
    private String signPhoto;

    @ApiModelProperty(value = "合同签订人")
    private String signContractUserName;

    @ApiModelProperty(value = "合同签订时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date signContractTime;

    @ApiModelProperty(value = "签订方式")
    @KrtActField(name = "签订方式", isJudg = true)
    private String signType;

    @ApiModelProperty(value = "签字时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date userSignTime;

    /**
     * ---------------------------------------验房------------------------------------
     */
    @ApiModelProperty(value = "验房确认:1合格、2不合格")
    private String inspectionResult;

    @ApiModelProperty(value = "是否完成验房:1是、0否")
    private String inspectionFinish;

    @ApiModelProperty(value = "是否移交钥匙:1是、0否")
    private String inspectionKey;

    @ApiModelProperty(value = "验房人")
    private String checkHouseUserName;

    @ApiModelProperty(value = "验房时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date checkHouseTime;

    /**
     * ---------------------------------------申诉------------------------------------
     */
    @ApiModelProperty(value = "申诉结果")
    private String appealResult;

    @ApiModelProperty(value = "申诉经办人")
    private String appealUserName;

    @ApiModelProperty(value = "申诉时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date appealTime;

    /**
     * ---------------------------------------放弃承租------------------------------------
     */
    @ApiModelProperty(value = "放弃承租经办人")
    private String backoutUserName;

    @ApiModelProperty(value = "放弃承租时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date backoutTime;

    /**
     * ---------------------------------------app字段------------------------------------
     */
    @ApiModelProperty(value = "app提交")
    private String appApply;

    @ApiModelProperty(value = "备注")
    private String remark;

    @ApiModelProperty("验房原因")
    private String checkHouseReason;

    @ApiModelProperty("退回原因")
    private String backReason;

    @TableField(exist = false)
    @ApiModelProperty("保证金id1")
    private Integer refundId;

    @TableField(exist = false)
    @ApiModelProperty("租金id")
    private Integer rentId;
}

2、创建实体类的目的

       在系统管理-->业务流程-->业务流程树管理-->添加业务流程的时候有一个业务类(回调)路径,指定的就是审批数据实体类,类型为业务类时,如果业务类(回调)路径不指定或没有创建实体类的情况下,会出现该业务类不存在.

3、流程Key(可以通过ext_act_flow_biz数据库表查询到)

审核流程中的唯一标识,目的是通过流程Key(act_key)和流程status(act_status)去获取用户的审批环节.

部分代码:

注:因为该业务有导入功能,导入市级和导入县级数据(CheckIn和prhIntoCounty),根据导入的数据不同去走不同的审批流程.

<!-- 带参数查询公租房_批次_中签信息列表 -->
<select id="selectPageListByDTO2" resultType="com.krt.business.vo.PrhBatchWinningListVO">
    select
    <include refid="columnSql"></include>
    s3.advance_id AS advanceId,
    s1.assignee_ AS dealId,
    s2.act_key AS actKey,
    s2.biz_id AS bizId,
    s1.proc_inst_id_ AS instanceId,
    s1.id_ AS taskId,
    s2.pdf_id AS pdfId,
    s4.node_action as nodeAction,
    s4.node_id as nodeId
    from
    (select
    <include refid="columnSql2"></include>
    from prh_batch_winning s1
    left join business_into_house s2 on s1.id = s2.winning_id
    where 1=1
    <if test="organIds!=null and organIds.size()>0">
        and s1.hms_code in
        <foreach collection="organIds" item="organId" separator="," open="(" close=")">
            #{organId}
        </foreach>
    </if>
    <include refid="whereSql"></include>
    ) s9
    left join ( select
    pdf_id, code, act_key, act_name, biz_id, name, instance_id, start_user_Id, start_user_name
    from ext_act_flow_biz
    where act_status = '2' and act_key in('CheckIn','prhIntoCounty')) s2 on s2.biz_id = s9.business_id
    left join ( select id_, name_, create_time_, proc_inst_id_, assignee_, task_def_key_ from act_ru_task ) s1 on
    s1.proc_inst_id_ = s2.instance_id
    left join ( select advance_id, task_id from ext_act_task_log ) s3 on s3.task_id = s1.id_
    left join (select node_id,node_action from ext_act_node_set)s4 on s1.task_def_key_ = s4.node_id
</select>

二、流程图及节点设置

1、添加模型管理

根据业务去查找所创建业务流程树的流程key.

2、设计流程图

3、配置节点

(1)PC表单:指定的是审批过程中的页面,每一个节点都需要配置表单,便于进入下一个审批页面.

(2)可修改信息:出现该多选框的原因是实体类中加上了@KrtActField注解,目的是在表单中该字段是可修改的.

三、审批范围及审批按钮

1、审批范围

       需要配置角色和组织机构

根据我的业务需求(保障实施管理子系统),导入中签数据(prh_batch)的同时,代码会检测房源表(room_housing)中的分配状态,如果房源是未分配和可用空房,那么会获取到房源表中的数据并且存放到中签表中,这时数据经过了一次过滤,拿到了房源表的hms_code字段并插入到中签表中,拿hms_code的目的是通过中签表中的hms_code去比对机构表(sys_organ)中的code,如果是相等的话,那么该角色就是该节点审批人.

(1)因为我的业务审批范围是小区物业经办人,首先我们需要给”小区物业经办人“角色添加数据权限和资源权限

(2)添加组织机构

          目的:对应的是哪个组织.

 这边机构代码对应的就是中签表中的hms_code.

(3)添加用户账号

2、审批按钮

加上审批按钮的目的是表单回调 退回 提交(进入下一个节点审批)等操作

回调的状态分为:自定义回调和状态回调

自定义回调:通过业务流程树管理添加,在需要进行自己业务处理的情况下使用自定义回调.

状态回调:通过字典添加.系统管理下的字典管理中添加,表单提交回退等状态变更的情况下使用状态回调.

{
    title: "业务状态", data: "status",
    render: function (data, type, row) {
        return handleApplyState(data, row);
    }
}, {
    title: "操作", data: "id", orderable: false,
    "render": function (data, type, row) {
        var button = "";
        var rowStatus = row.status;
        var name = krt.util.getDic("into_house_status", rowStatus);
        name = name.replace("待", "");
        var button_new = "";
        //预处理人
        var advanceId = row.advanceId ? row.advanceId.split(",") : [];
        //办理人
        var dealId = row.dealId;

(1)在页面配置按钮功能,根据提交之后的状态去实现不同页面的跳转以及显示的按钮,为什么会走工作流的原因,通过actKey、bizId、instanceId、taskId、pdfId与后台接口进行绑定,从而通过status确定走到哪一步流程.

部分代码:

} else if (row.status == '10') {
    if (((dealId === null || dealId === "") && advanceId.indexOf(userId) >= 0) || dealId === userId || userId === '1') {
        button += '<@shiro.hasPermission  name="businessIntoHouse:businessIntoHouse:examination">'
            + '<button class="btn btn-xs btn-success" onclick="doTask(\'' + row.actKey + '\',\'' + row.bizId + '\',\'' + row.instanceId + '\',\'' + row.taskId + '\',\'' + row.pdfId + '\')">'
            + '<i class="fa fa-check fa-btn"></i>确认费用到账'
            + '</button>'
            + '</@shiro.hasPermission>';
    }
    button += '<@shiro.hasPermission  name="businessIntoHouse:businessIntoHouse:backout">'
        + '<button class="btn btn-xs btn-danger backoutBtn" rid="' + row.id + '">'
        + '<i class="fa fa-close fa-btn"></i>放弃承租'
        + '</button>'
        + '</@shiro.hasPermission>';
    button += printCostButton;
} else if (row.status == '11') {
    if (((dealId === null || dealId === "") && advanceId.indexOf(userId) >= 0) || dealId === userId || userId === '1') {
        button += '<@shiro.hasPermission  name="businessIntoHouse:businessIntoHouse:genContrac">'
            + '<button class="btn btn-xs btn-success" onclick="doTask(\'' + row.actKey + '\',\'' + row.bizId + '\',\'' + row.instanceId + '\',\'' + row.taskId + '\',\'' + row.pdfId + '\')">'
            + '<i class="fa fa-check fa-btn"></i>生成合同'
            + '</button>'
            + '</@shiro.hasPermission>';
    }

(2)在进入工作流之前会先保存业务草稿数据,具体代码:

//非区域版的,进入工作流
flowBusinessService.insertDraft(prhBatch);
actService.autoStartFlow(BusinessNumKeyEnum.GZF_BATCH_AUTH.getActKey(), prhBatch.getId(), 0, "系统导入");

(3)审批流程执行的过程中都会经过这一部分代码:

任务审批、流程信息、历史审批、流程图数据

根据processTaskDTO.setUrl(nodeSet.getPcForm());(也就是节点设置PC表单页面路径),获取业务具体走哪个审核流程.

/**
 * 任务详情
 *
 * @param processTaskDTO 办理流程任务dto
 * @return String
 */
@GetMapping("act/deal/taskInfo")
public String taskInfo(ProcessTaskDTO processTaskDTO, String flag) {
    //1:查看任务 2:办理任务
    boolean b = "2".equals(flag) || "1".equals(flag);
    Assert.validate(!b, "参数flag错误!");
    ExtActNodeSet nodeSet;
    String isDoTask = "2";
    if (isDoTask.equals(flag)) {
        //办理
        Task task = taskService.createTaskQuery().taskId(processTaskDTO.getTaskId()).singleResult();
        //查询节点
        nodeSet = nodeSetService.selectOne(Wrappers.<ExtActNodeSet>lambdaQuery().eq(ExtActNodeSet::getNodeId, task.getTaskDefinitionKey()));
    } else {
        //查看 返回结束节点的url,而不是审批节点
        ExtActModel actModel = actModelService.selectOne(Wrappers.<ExtActModel>lambdaQuery().eq(ExtActModel::getModelKey, processTaskDTO.getActKey()));
        Model model = repositoryService.getModel(actModel.getModelId());
        //判断是否使用结束节点
        String nodeType = GlobalConstant.YesNo.YES.getValue().equals(processTaskDTO.getIsEnd()) ? ActConstant.NodeType.END.getValue() : ActConstant.NodeType.EXAMINE.getValue();
        nodeSet = nodeSetService.selectOne(
                Wrappers.<ExtActNodeSet>lambdaQuery()
                        .eq(ExtActNodeSet::getModelId, model.getId())
                        .eq(ExtActNodeSet::getFlowNodeType, nodeType), false);
    }
    Assert.isBlank(nodeSet.getPcForm(), "流程表单路径未填写");
    processTaskDTO.setUrl(nodeSet.getPcForm());
    processTaskDTO.setNodeId(nodeSet.getNodeId());
    request.setAttribute("flag", flag);
    request.setAttribute("nodeSet", nodeSet);
    request.setAttribute("processTaskDTO", processTaskDTO);
    return "act/deal/taskInfo";
}


版权声明:本文为private_name原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。