Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r21881 -r21900 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 21881) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 21900) @@ -340,6 +340,29 @@ */ public final static String APPLICATION_FORM_TYPE_SPLIT = "2"; + + /** + * processStatus、currentNodeDefinitionId、currentNodeDefinitionName是审批流程相关的信息(目前只有高值耗材申请单有审批流程,之所以放在这里是为了以后的扩展) + */ + /** + * 审批流程的状态(有三个值,分别为:“未启动”、“启动中”、“已结束”) + */ + private String processStatus = PROCESSSTATUS_NOT_STARTED; + + public static String PROCESSSTATUS_NOT_STARTED = "未启动"; + public static String PROCESSSTATUS_START_PROCESS = "启动中"; + public static String PROCESSSTATUS_BE_THROUGH_WITH = "已结束"; + + /** + * 当前审批节点id + */ + private Long currentNodeDefinitionId; + + /** + * 当前审批节点名称 + */ + private String currentNodeDefinitionName; + @Override @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -1129,4 +1152,29 @@ public void setApplicantCode(String applicantCode) { this.applicantCode = applicantCode; } + + public String getProcessStatus() { + return processStatus; + } + + public void setProcessStatus(String processStatus) { + this.processStatus = processStatus; + } + + public Long getCurrentNodeDefinitionId() { + return currentNodeDefinitionId; + } + + public void setCurrentNodeDefinitionId(Long currentNodeDefinitionId) { + this.currentNodeDefinitionId = currentNodeDefinitionId; + } + + public String getCurrentNodeDefinitionName() { + return currentNodeDefinitionName; + } + + public void setCurrentNodeDefinitionName(String currentNodeDefinitionName) { + this.currentNodeDefinitionName = currentNodeDefinitionName; + } + } Index: forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java (revision 21900) @@ -0,0 +1,22 @@ +package com.forgon.workflow.service; + +import com.forgon.tools.hibernate.BasePoManager; +import com.forgon.workflow.model.NodeDefinition; + +/** + * + * @author Chenjiaru 2018-01-09 + * 审批节点的业务接口 + * + */ +public interface NodeDefinitionManager extends BasePoManager { + + /** + * 获取申请单下一个审批节点对象(如果返回空则说明审批流程已经结束了). + * @param formType 申请单类型 + * @param formId 申请单id + * @return + */ + public NodeDefinition getNextNodeDefinition(String formType, Long formId); + +} Index: forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (revision 0) +++ forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (revision 21900) @@ -0,0 +1,56 @@ +package com.forgon.workflow.service; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.string.StringTools; +import com.forgon.workflow.model.NodeDefinition; +import com.forgon.workflow.model.WorkFlow; + +public class NodeDefinitionManagerImpl extends BasePoManagerImpl implements NodeDefinitionManager { + + @Override + public NodeDefinition getNextNodeDefinition(String formType, Long formId) { + NodeDefinition nextNodeDefinition = null; + if (StringTools.isNotBlank(formType) && DatabaseUtil.isPoIdValid(formId)) { + WorkFlow workFlow = (WorkFlow) objectDao.getBySql(WorkFlow.class.getSimpleName(), String.format("where po.invoicePlanType='%s' ", formType)); + if (workFlow != null) { + String sequenceNumberSql = ""; + Long currentNodeDefinitionId = getCurrentNodeDefinitionIdByFormId(formId); + if (DatabaseUtil.isPoIdValid(currentNodeDefinitionId)) { + sequenceNumberSql = String.format("(select nd.sequenceNumber from NodeDefinition nd where nd.id=%s)", currentNodeDefinitionId); + } else { + sequenceNumberSql = "0"; + } + nextNodeDefinition = (NodeDefinition) objectDao.getBySql(NodeDefinition.class.getSimpleName(), + String.format("where po.workFlow.id=%s and po.sequenceNumber > %s order by po.sequenceNumber", workFlow.getId(), sequenceNumberSql)); + } + } else { + throw new RuntimeException("参数异常!"); + } + return nextNodeDefinition; + } + + + /** + * 根据申请单id获取此申请单当前的审批节点id + * @param formId + * @return + */ + private Long getCurrentNodeDefinitionIdByFormId(Long formId) { + ResultSet result = objectDao.executeSql(String.format("select ip.currentNodeDefinitionId from InvoicePlan ip where ip.id=%s", formId)); + try { + while(result.next()){ + return result.getLong("currentNodeDefinitionId"); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + throw new RuntimeException(String.format("id为%s的申请单不存在", formId)); + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java =================================================================== diff -u -r21813 -r21900 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 21813) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 21900) @@ -25,6 +25,7 @@ import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.workflow.service.WorkFlowApprovalTaskManager; public class ExpensiveGoodsApplicationManagerImpl extends BasePoManagerImpl implements ExpensiveGoodsApplicationManager { @@ -89,6 +90,10 @@ expensiveGoodsApplication.setSpelling(GB2Alpha.string2Alpha(depart)); expensiveGoodsApplication.setWbCode(GB2WB.getWBCode(depart)); objectDao.saveOrUpdate(expensiveGoodsApplication); + if (commit && (StringTools.isBlank(expensiveGoodsApplication.getProcessStatus()) + || expensiveGoodsApplication.getProcessStatus().equals(ExpensiveGoodsApplication.PROCESSSTATUS_NOT_STARTED))) { +// WorkFlowApprovalTaskManager + } } else { throw new RuntimeException("申请项不能为空!"); } Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r21871 -r21900 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 21871) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 21900) @@ -2313,6 +2313,22 @@ class="com.forgon.workflow.dwr.table.WorkFlowTableManager"> + + + + + + + + + PROPAGATION_REQUIRED + + + + + + + Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/expensivegoodsapplication/ExpensiveGoodsApplication.java =================================================================== diff -u -r21801 -r21900 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/expensivegoodsapplication/ExpensiveGoodsApplication.java (.../ExpensiveGoodsApplication.java) (revision 21801) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/expensivegoodsapplication/ExpensiveGoodsApplication.java (.../ExpensiveGoodsApplication.java) (revision 21900) @@ -78,26 +78,6 @@ */ private String doctor; - /** - * 审批流程的状态(有三个值,分别为:“未启动”、“启动中”、“已结束”) - */ - private String processStatus = PROCESSSTATUS_NOT_STARTED; - - public static String PROCESSSTATUS_NOT_STARTED = "未启动"; - public static String PROCESSSTATUS_START_PROCESS = "启动中"; - public static String PROCESSSTATUS_BE_THROUGH_WITH = "已结束"; - - /** - * 当前审批节点id - */ - private Long currentNodeDefinitionId; - - /** - * 当前审批节点名称 - */ - private String currentNodeDefinitionName; - - public String getHospitalNumber() { return hospitalNumber; } @@ -193,29 +173,5 @@ public void setDoctor(String doctor) { this.doctor = doctor; } - - public String getProcessStatus() { - return processStatus; - } - - public void setProcessStatus(String processStatus) { - this.processStatus = processStatus; - } - - public Long getCurrentNodeDefinitionId() { - return currentNodeDefinitionId; - } - - public void setCurrentNodeDefinitionId(Long currentNodeDefinitionId) { - this.currentNodeDefinitionId = currentNodeDefinitionId; - } - - public String getCurrentNodeDefinitionName() { - return currentNodeDefinitionName; - } - - public void setCurrentNodeDefinitionName(String currentNodeDefinitionName) { - this.currentNodeDefinitionName = currentNodeDefinitionName; - } }