首页 > 其他 > 详细

服务大厅流程

时间:2019-11-08 18:05:11      阅读:70      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

  1 package com.gwt.flow.service.impl;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.ArrayList;
  5 import java.util.Date;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9 
 10 import org.springframework.beans.factory.annotation.Autowired;
 11 import org.springframework.stereotype.Service;
 12 
 13 import com.gwt.flow.entity.FuwuFlow;
 14 import com.gwt.flow.entity.FuwuFlowAudit;
 15 import com.gwt.flow.mapper.FuwuFlowAuditMapper;
 16 import com.gwt.flow.mapper.FuwuFlowMapper;
 17 import com.gwt.flow.mapper.FuwuFlowRecordMapper;
 18 import com.gwt.flow.service.FuwuFlowService;
 19 import com.gwt.flow.service.FuwuFlowStateService;
 20 import com.gwt.system.entity.SysUser;
 21 import com.gwt.system.mapper.SysUserMapper;
 22 
 23 @Service
 24 public class FuwuFlowServiceImpl implements FuwuFlowService{
 25 
 26     @Autowired
 27     private FuwuFlowStateService fuwuFlowStateService;
 28     
 29     @Autowired 
 30     private FuwuFlowRecordMapper fuwuFlowRecordMapper;
 31     
 32     @Autowired 
 33     private FuwuFlowAuditMapper fuwuFlowAuditMapper;
 34     
 35     @Autowired
 36     private SysUserMapper sysUserMapper;
 37     
 38     @Autowired
 39     private FuwuFlowMapper fuwuFlowMapper;
 40     
 41     @Override
 42     public String applyAndAuditFuwuFlow(FuwuFlowAudit fuwuFlowAudit,String bussionOrder,Double input) {
 43         // TODO Auto-generated method stub
 44         String flowCode = fuwuFlowAudit.getFlowCode();
 45         String flowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
 46         //表示同意与不同意,1表示同意,2表示不同意,0表示流程结束
 47         String isAudit = "1";
 48         //通过 查找下个节点以及下个审核人
 49         List<Map<String, String>> nodeUser = null;
 50         
 51         if(null!=bussionOrder) {
 52             //因为会议费的特殊性:他申请时无预约单号,因此预约单号放置与此处
 53             fuwuFlowAudit.setBussionOrder(bussionOrder);
 54         }
 55         
 56         //最后一位可能是0 1 2  0表示流程结束
 57         if(flowCode.substring(2, 3).equals("1")||flowCode.substring(2, 3).equals("2")) {
 58             //如果节点同意,就查找下个节点
 59             nodeUser = fuwuFlowStateService.getNodeUser(fuwuFlowAudit.getFlowCode(), fuwuFlowAudit.getFlowKey(), fuwuFlowAudit.getFlowAchieveAccount(), fuwuFlowAudit.getFlowAchieveUsername(),input);
 60 
 61             //处理特殊状态,特殊状态长度必然是1
 62             if(null!=nodeUser&&nodeUser.size()==1) {
 63                 if(null!=nodeUser.get(0).get("error")&&nodeUser.get(0).get("error").equals("-01")) {
 64                     // 返回 -01 表示不同意
 65                     //fuwuFlowAudit.setFlowTime(flowTime);
 66                     isAudit = "2";    
 67                     nodeUser = null;
 68                 }else if(null!=nodeUser.get(0).get("error")&&nodeUser.get(0).get("error").equals("-00")) {
 69                     // 返回 -00 表示流程结束
 70                     isAudit = "0";
 71                 }else if(null!=nodeUser.get(0).get("error")&&nodeUser.get(0).get("error").equals("-0")) {
 72                     // 返回 -0 表示 没有查询到下个节点用户,由用户自行定义处理结果
 73                     return "noUser";
 74                 }else if(null!=nodeUser.get(0).get("error")&&nodeUser.get(0).get("error").equals("-1#")) {
 75                     //表示回到第一步,取当前配置的节点,取流程保存的全局唯一用户
 76                 }else if(null!=nodeUser.get(0).get("error")&&nodeUser.get(0).get("error").indexOf("-2#")==0) {
 77                     //如果成立,那么第二个参数表示角色编号
 78                     String flowLastCode = nodeUser.get(0).get("flowLastCode");
 79                     String flowLastName = nodeUser.get(0).get("flowLastName");
 80                     //获得负责人信息
 81                     List<SysUser> userByDeptCode = sysUserMapper.getUserByDeptCode(fuwuFlowAudit.getFlowRole(),nodeUser.get(0).get("error").split("#")[1]);
 82                     
 83                     //表示未有查询到下个节点的用户信息
 84                     if(null==userByDeptCode||userByDeptCode.size()==0) {
 85                         return "noUser";
 86                     }
 87                     Map<String, String> tempMap =  null;
 88                     nodeUser = new ArrayList<Map<String,String>>();
 89                     for(SysUser sysUser:userByDeptCode) {
 90                         tempMap = new HashMap<String, String>();
 91                         tempMap.put("flowLastCode", flowLastCode);
 92                         tempMap.put("flowLastName", flowLastName);
 93                         tempMap.put("account", sysUser.getAccount());
 94                         tempMap.put("username", sysUser.getUsername());    
 95                         nodeUser.add(tempMap);
 96                     }
 97                 }
 98             }
 99             fuwuFlowAudit.setFlowTime(flowTime);
100         }else if(flowCode.substring(2, 3).equals("0")){
101             //表示流程结束(似乎是多余的,后续删)
102             isAudit = "0";
103         }
104 
105         if(null==fuwuFlowAudit.getfId()) {
106             //为空表示申请,申请时无需删除记录
107             //填充预约单号已放置与上面
108             //fuwuFlowAudit.setBussionOrder(bussionOrder);
109             fuwuFlowAudit.setFlowAchieveNowTime(flowTime);
110         }else {
111             //删除记录
112             FuwuFlowAudit deleteFuwuFlowAudit= new FuwuFlowAudit();
113             deleteFuwuFlowAudit.setfId(fuwuFlowAudit.getfId());
114             Long myDelete = fuwuFlowAuditMapper.myDelete(deleteFuwuFlowAudit);
115             if(myDelete == 0) {
116                 //返回flase
117                 return "noAuth";
118             }
119         }
120         //保存当前的下个节点,即默认节点
121         String flowLastNodeCode = fuwuFlowAudit.getFlowLastNodeCode();
122         String flowLastNodeName = fuwuFlowAudit.getFlowLastNodeName();
123         
124         
125         //插入记录表开始
126         //记录表的下个节点为审核节点
127         if(null==nodeUser && isAudit.equals("2")) {
128             //为空或不同意,下个节点不做处理
129         }else {
130             //同意,下个节点暂时设置为真实的下个节点
131             fuwuFlowAudit.setFlowLastNodeCode(nodeUser.get(0).get("flowLastCode"));
132             fuwuFlowAudit.setFlowLastNodeName(nodeUser.get(0).get("flowLastName"));
133         }
134         fuwuFlowRecordMapper.insertMySelective(fuwuFlowAudit);
135         //插入记录表结束
136         
137         if(!isAudit.equals("0")) {
138             if(null==nodeUser && isAudit.equals("2")) {
139                 //表示不同意
140                 fuwuFlowAudit.setFlowTime(null);
141                 fuwuFlowAudit.setFlowAudityj(null);
142                 fuwuFlowAudit.setFlowCode(null);
143                 fuwuFlowAudit.setFlowState(null);
144                 fuwuFlowAudit.setFlowAccount(fuwuFlowAudit.getFlowAchieveAccount());
145                 fuwuFlowAudit.setFlowUsername(fuwuFlowAudit.getFlowAchieveUsername());
146                 fuwuFlowAudit.setFlowAchieveLastTime(flowTime);
147                 fuwuFlowAudit.setFlowNowNodeCode(flowLastNodeCode);
148                 fuwuFlowAudit.setFlowNowNodeName(flowLastNodeName);
149                 //下个节点始终插入默认
150                 fuwuFlowAudit.setFlowLastNodeCode(flowLastNodeCode);
151                 fuwuFlowAudit.setFlowLastNodeName(flowLastNodeName);
152                 fuwuFlowAuditMapper.insertSelective(fuwuFlowAudit);
153             }else {
154                 for(Map<String, String> map:nodeUser) {
155                     fuwuFlowAudit.setFlowTime(null);
156                     fuwuFlowAudit.setFlowAudityj(null);
157                     fuwuFlowAudit.setFlowCode(null);
158                     fuwuFlowAudit.setFlowState(null);
159                     fuwuFlowAudit.setFlowAccount(map.get("account"));
160                     fuwuFlowAudit.setFlowUsername(map.get("username"));
161                     fuwuFlowAudit.setFlowAchieveLastTime(flowTime);
162                     fuwuFlowAudit.setFlowNowNodeCode(map.get("flowLastCode"));
163                     fuwuFlowAudit.setFlowNowNodeName(map.get("flowLastName"));
164                     //下个节点始终插入默认
165                     fuwuFlowAudit.setFlowLastNodeCode(flowLastNodeCode);
166                     fuwuFlowAudit.setFlowLastNodeName(flowLastNodeName);
167                     fuwuFlowAuditMapper.insertSelective(fuwuFlowAudit);
168                 }
169             }    
170         }
171 
172         return "success#"+isAudit;
173     }
174 
175     @Override
176     public void sendJhApply(String yyorderCode,String applyUser,String applyTime,String flowKey) {
177         //通过key查询规则
178         FuwuFlow fu= fuwuFlowMapper.selectByflowKey(flowKey);
179         Map<String, String> map=new HashMap<String, String>();
180         map.put("yyorderCode", yyorderCode);
181         map.put("applyUser", applyUser);
182         map.put("applyTime", applyTime);
183         map.put("rule", fu.getFlowRule());
184         // send
185     }
186     @Override
187     public void sendJhAudit(String yyorderCode,String auditUser,String auditTime) {
188         
189         Map<String, String> map=new HashMap<String, String>();
190         map.put("yyorderCode", yyorderCode);
191         map.put("auditUser", auditUser);
192         map.put("applyTime", auditTime);
193         // send
194     }
195 }
package com.gwt.flow.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gwt.flow.entity.FuwuFlowState;
import com.gwt.flow.mapper.FuwuFlowStateMapper;
import com.gwt.flow.service.FuwuFlowStateService;
import com.gwt.system.entity.SysRole;
import com.gwt.system.entity.SysUser;
import com.gwt.system.mapper.RoleUserMapper;
import com.gwt.system.mapper.SysRoleMapper;
import com.gwt.utils.MvelJavaFlow;

@Service
public class FuwuFlowStateServiceImpl implements FuwuFlowStateService {
    
    @Autowired
    private RoleUserMapper roleUserMapper;
    @Autowired
    private SysRoleMapper roleMapper;
    @Autowired
    private FuwuFlowStateMapper fuwuFlowStateMapper;
    
    @Override
    public List<Map<String, String>> getNodeUser(String flowCode, String flowKey, String account, String username,Double input) {
        List<Map<String, String>> reList = new ArrayList<Map<String, String>>();
        
        Map<String, String> reMap = new HashMap<String, String>();
        FuwuFlowState fuwuFlowState = new FuwuFlowState();
        fuwuFlowState.setFlowCode(flowCode);
        fuwuFlowState.setFlowKey(flowKey);
        List<FuwuFlowState> selectListSelective = fuwuFlowStateMapper.selectListSelective(fuwuFlowState);
        
        if(null == selectListSelective || selectListSelective.size()==0) {
            // 表示未查询到数据,数据异常
            reMap.put("flowLastCode", "");
            reMap.put("flowLastName", "");
            reMap.put("account", "");
            reMap.put("username", "");
            reMap.put("error", "-0");
            reList.add(reMap);
            return reList;
        }else {
            if(selectListSelective.size() == 1) {
                //需要判断是否有表达式,如果有就先执行表达式,查询如下个节点和下个节点的审批角色
                FuwuFlowState fuwuFlowState2 = selectListSelective.get(0);
                
                String flowLastCode = "";
                String flowLastName = "";
                List<SysUser> userByRole = null;
                if(fuwuFlowState2.getFlowLastCode().equals("01")) {
                    //返回的不同意节点是01,不做处理,标识符01必须传递
                    reMap.put("flowLastCode", "");
                    reMap.put("flowLastName", "");
                    reMap.put("account", "");
                    reMap.put("username", "");
                    
                    reMap.put("error", "-01");
                    reList.add(reMap);
                    return reList;
                }else if(fuwuFlowState2.getFlowLastCode().equals("00")) {
                    //表示流程结束
                    flowLastCode =  fuwuFlowState2.getFlowLastCode();
                    flowLastName = fuwuFlowState2.getFlowLastName();
                    reMap.put("flowLastCode", flowLastCode);
                    reMap.put("flowLastName", flowLastName);
                    reMap.put("account", "");
                    reMap.put("username", "");
                    
                    reMap.put("error", "-00");
                    reList.add(reMap);
                    return reList;
                }else if(null ==fuwuFlowState2.getFlowExpression()) {
                    // 未有表达式,执行下一步
                    flowLastCode =  fuwuFlowState2.getFlowLastCode();
                    flowLastName = fuwuFlowState2.getFlowLastName();
                    reMap.put("flowLastCode", flowLastCode);
                    reMap.put("flowLastName", flowLastName);
                    if(null==fuwuFlowState2.getFlowLastRole()) {
                        //没有配置角色,默认前端传递过来
                        reMap.put("account", "");
                        reMap.put("username", "");
                        reMap.put("error", "-0");
                        reList.add(reMap);
                        return reList;
                    }else {
                        userByRole = getUserByRole(fuwuFlowState2.getFlowLastRole());
                    }
                }else {
                    //有表达式,按照表达式获得节点信息
                    //通过表达式获得节点信息
                    MvelJavaFlow mvelJavaFlow = new MvelJavaFlow(fuwuFlowState2.getFlowExpression(),input);
                    String score = mvelJavaFlow.getScore();
                    if(score.equals("00")) {
                        reMap.put("flowLastCode", "00");
                        reMap.put("flowLastName", "已支付");
                        reMap.put("account", "");
                        reMap.put("username", "");
                        reMap.put("error", "-00");
                        reList.add(reMap);
                        return reList;
                    }else if(score.equals("-1#")) {
                        //表示无需查询节点,直接获取申请人信息
                        reMap.put("flowLastCode", selectListSelective.get(0).getFlowLastCode());
                        reMap.put("flowLastName", selectListSelective.get(0).getFlowLastName());
                        reMap.put("account", account);
                        reMap.put("username", username);
                        reList.add(reMap);
                        return reList;
                    }else if(score.indexOf("-2#")==0) {
                        //表示查询单位负责人
                        //根据申请人查询所属部门查询部门负责人
                        reMap.put("error", score);
                        reMap.put("flowLastCode", fuwuFlowState2.getFlowLastCode());
                        reMap.put("flowLastName", fuwuFlowState2.getFlowLastName());
                        reList.add(reMap);
                        return reList;
                    }else{
                        FuwuFlowState flowNode = new FuwuFlowState();
                        flowNode.setFlowKey(flowKey);
                        flowNode.setFlowLastCode(score);
                        //通过流程key和节点信息查询到下个节点信息,主要是获得下个节点信息和下个审核的角色信息
                        List<FuwuFlowState> selectListSelective2 = fuwuFlowStateMapper.selectListSelective(flowNode);
                        
                        //至少会查询到一个,未有查询到表示配置错误
                        FuwuFlowState fuwuFlowState3 = selectListSelective2.get(0);
                        //将节点信息保存
                        flowLastCode = fuwuFlowState3.getFlowLastCode();
                        flowLastName = fuwuFlowState3.getFlowLastName();
                        reMap.put("flowLastCode", flowLastCode);
                        reMap.put("flowLastName", flowLastName);
                        //获得审批人
                        if(null==fuwuFlowState3.getFlowLastRole()) {
                            //表示未配置,由前端传递
                            reMap.put("account", "");
                            reMap.put("username", "");
                            reMap.put("error", "-0");
                            reList.add(reMap);
                            return reList;
                        }else {
                            userByRole = getUserByRole(fuwuFlowState3.getFlowLastRole());
                        }    
                    }
                }
                
                if(null==userByRole||userByRole.size()==0) {
                    //表示根据角色未查询到人
                    reMap.put("account", "");
                    reMap.put("username", "");
                    reMap.put("error", "-0");
                    reList.add(reMap);
                    return reList;
                }else {
                    for(SysUser sysUser:userByRole) {
                        reMap = new HashMap<String, String>();
                        reMap.put("flowLastCode", flowLastCode);
                        reMap.put("flowLastName", flowLastName);
                        reMap.put("account", sysUser.getAccount());
                        reMap.put("username", sysUser.getUsername());
                        reList.add(reMap);
                    }
                }
            }else {
                //节点配置异常,应该查询到一条数据
                reMap.put("flowLastCode", "");
                reMap.put("flowLastName", "");
                reMap.put("account", "");
                reMap.put("username", "");
                reMap.put("error", "-0");
                reList.add(reMap);
            }
        }
        
        return reList;
    }

    private List<SysUser> getUserByRole(String flowLastRole) {
        List<SysUser> reSysUser = null;
        // 查询角色下的有用户
        SysRole sysRole = new SysRole();
        sysRole.setCode(flowLastRole);
        List<SysRole> selectListSelective = roleMapper.selectListSelective(sysRole);
        if(null==selectListSelective||selectListSelective.size()==0) {
        }else {
            reSysUser = roleUserMapper.selectRoleUsersByRole(selectListSelective.get(0).getId());
        }
        return reSysUser;
    }

}

 

服务大厅流程

原文:https://www.cnblogs.com/wcss/p/11821564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!