Files
SIPAIIS_WMS_JSSW/src/com/sipai/controller/administration/TemporaryController.java
2026-01-16 14:13:44 +08:00

430 lines
18 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.sipai.controller.administration;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONArray;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sipai.entity.activiti.WorkTask;
import com.sipai.entity.administration.Temporary;
import com.sipai.entity.business.BusinessUnit;
import com.sipai.entity.business.BusinessUnitAudit;
import com.sipai.entity.business.BusinessUnitHandle;
import com.sipai.entity.business.BusinessUnitRecord;
import com.sipai.entity.user.Company;
import com.sipai.entity.user.User;
import com.sipai.service.activiti.WorkflowProcessDefinitionService;
import com.sipai.service.activiti.WorkflowService;
import com.sipai.service.administration.TemporaryService;
import com.sipai.service.business.BusinessUnitAuditService;
import com.sipai.service.business.BusinessUnitHandleService;
import com.sipai.service.user.UnitService;
import com.sipai.service.user.UserService;
import com.sipai.tools.ActivitiUtil;
import com.sipai.tools.CommString;
import com.sipai.tools.CommUtil;
@Controller
@RequestMapping("/administration/temporary")
public class TemporaryController {
@Resource
private TemporaryService temporaryService;
@Resource
private UnitService unitService;
@Resource
private WorkflowProcessDefinitionService workflowProcessDefinitionService;
@Resource
private BusinessUnitHandleService businessUnitHandleService;
@Resource
private BusinessUnitAuditService businessUnitAuditService;
@Resource
private WorkflowService workflowService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Resource
private UserService userService;
@RequestMapping("/showList.do")
public String showList(HttpServletRequest request, Model model) {
return "/administration/temporaryList";
}
@RequestMapping("/getList.do")
public ModelAndView getList(HttpServletRequest request,Model model,
@RequestParam(value = "page") Integer page,
@RequestParam(value = "rows") Integer rows,
@RequestParam(value = "sort", required = false) String sort,
@RequestParam(value = "order", required = false) String order) {
User cu = (User) request.getSession().getAttribute("cu");
if (sort==null || sort.equals("id")) {
sort = " insdt ";
}
if (order == null) {
order = " desc ";
}
String orderstr = " order by "+sort+" "+order;
String wherestr = " where 1=1 ";
if (request.getParameter("search_code")!= null && !request.getParameter("search_code").isEmpty()) {
wherestr += " and unit_id = '"+request.getParameter("search_code")+"'";
}
PageHelper.startPage(page, rows);
List<Temporary> list = this.temporaryService.selectListByWhere(wherestr+orderstr);
PageInfo<Temporary> pInfo = new PageInfo<Temporary>(list);
JSONArray jsonArray = JSONArray.fromObject(list);
String result = "{\"total\":"+pInfo.getTotal()+",\"rows\":"+jsonArray+"}";
model.addAttribute("result",result);
return new ModelAndView("result");
}
@RequestMapping("/add.do")
public String doadd (HttpServletRequest request,Model model) {
String companyId = request.getParameter("companyId");
Company company = this.unitService.getCompById(companyId);
String id = company.getEname()+"-ZZYA-"+CommUtil.nowDate().replaceAll("[[\\s-:punct:]]","");
model.addAttribute("id",id);
model.addAttribute("company",company);
return "/administration/temporaryAdd";
}
@RequestMapping("/save.do")
public String dosave(HttpServletRequest request,Model model,
@ModelAttribute Temporary temporary) {
User cu = (User) request.getSession().getAttribute("cu");
temporary.setInsdt(CommUtil.nowDate());
temporary.setInsuser(cu.getId());
int result = this.temporaryService.save(temporary);
String resultstr = "{\"res\":\""+result+"\",\"id\":\""+temporary.getId()+"\"}";
model.addAttribute("result",resultstr);
return "result";
}
@RequestMapping("/delete.do")
public String dodelete(HttpServletRequest request,Model model,
@RequestParam(value = "id") String id) {
int result = this.temporaryService.deleteById(id);
model.addAttribute("result",result);
return "result";
}
@RequestMapping("/deletes.do")
public String dodeletes(HttpServletRequest request,Model model,
@RequestParam(value = "ids") String ids){
ids = ids.replace(",","','");
int result = this.temporaryService.deleteByWhere("where id in ('"+ids+"')");
model.addAttribute("result",result);
return "result";
}
@RequestMapping("/edit.do")
public String doedit(HttpServletRequest request,Model model,
@RequestParam(value = "id") String id) {
Temporary temporary = this.temporaryService.selectById(id);
model.addAttribute("temporary", temporary);
return "/administration/temporaryEdit";
}
@RequestMapping("/update.do")
public String doupdate(HttpServletRequest request,Model model,
@ModelAttribute Temporary temporary) {
User cu = (User) request.getSession().getAttribute("cu");
temporary.setInsdt(CommUtil.nowDate());
temporary.setInsuser(cu.getId());
int result = this.temporaryService.update(temporary);
String resstr="{\"res\":\""+result+"\",\"id\":\""+temporary.getId()+"\"}";
model.addAttribute("result", resstr);
return "result";
}
@RequestMapping("/view.do")
public String doview(HttpServletRequest request,Model model,
@RequestParam(value = "id") String id){
Temporary temporary = this.temporaryService.selectById(id);
model.addAttribute("temporary", temporary);
return "/administration/temporaryView";
}
/**
* 更新,启动指标审核流程
* */
@RequestMapping("/startProcess.do")
public String dostartProcess(HttpServletRequest request,Model model,
@ModelAttribute Temporary temporary){
User cu= (User)request.getSession().getAttribute("cu");
temporary.setInsuser(cu.getId());
temporary.setInsdt(CommUtil.nowDate());
int result=0;
try {
result =this.temporaryService.startProcess(temporary);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
String resstr="{\"res\":\""+result+"\",\"id\":\""+temporary.getId()+"\"}";
model.addAttribute("result", resstr);
return "result";
}
/**
* 查看指标处理流程详情
* @param request
* @param model
* @return
*/
@RequestMapping("/showProcessTemporaryView.do")
public String showProcessTemporaryView(HttpServletRequest request,Model model){
String temporaryId = request.getParameter("id");
Temporary temporary = this.temporaryService.selectById(temporaryId);
request.setAttribute("business", temporary);
List<BusinessUnitRecord> businessUnitRecords = new ArrayList<>();
BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(temporary);
businessUnitRecords.add(businessUnitRecord);
List<WorkTask> workTasks=workflowProcessDefinitionService.getAllPDTask(temporary.getProcessdefid(), "desc");
List<String> keys=new ArrayList<>();
for (WorkTask workTask : workTasks) {
keys.add(workTask.getTaskKey());
}
Set set = new HashSet();
set.addAll(keys);
keys=new ArrayList<>();
keys.addAll(set);
for (String item : keys) {
switch (item) {
case BusinessUnit.UNIT_Temporary_HANDLE:
List<BusinessUnitHandle> list = businessUnitHandleService.selectListByWhere("where businessid='"+temporaryId+"' ");
for (BusinessUnitHandle businessUnitHandle : list) {
businessUnitRecord = new BusinessUnitRecord(businessUnitHandle);
businessUnitRecords.add(businessUnitRecord);
}
break;
case BusinessUnit.UNIT_Temporary_AUDIT:
List<BusinessUnitAudit> list_audit = businessUnitAuditService.selectListByWhere("where businessid='"+temporaryId+"' ");
for (BusinessUnitAudit businessUnitAudit : list_audit) {
businessUnitRecord = new BusinessUnitRecord(businessUnitAudit);
businessUnitRecords.add(businessUnitRecord);
}
break;
default:
break;
}
}
//展示最新任务是否签收
String processId = temporary.getProcessid();
List<HistoricTaskInstance> list=this.workflowService.getHistoryService() // 历史相关Service
.createHistoricTaskInstanceQuery() // 创建历史任务实例查询
.processInstanceId(processId) // 用流程实例id查询
.list();
for (HistoricTaskInstance task : list) {
if (task.getAssignee()==null || task.getClaimTime()==null) {
continue;
}
businessUnitRecord = new BusinessUnitRecord(task);
businessUnitRecords.add(businessUnitRecord);
}
Collections.sort(businessUnitRecords, new Comparator<BusinessUnitRecord>() {
public int compare(BusinessUnitRecord o1, BusinessUnitRecord o2) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try{
Date dt1 = df.parse(o1.getInsdt());
Date dt2 = df.parse(o2.getInsdt());
if (dt1.getTime() > dt2.getTime()) {
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
return -1;
} else {
return 0;
}
}catch(Exception e){
e.printStackTrace();
return 0;
}
}
});
JSONArray jsonArray =JSONArray.fromObject(businessUnitRecords);
model.addAttribute("businessUnitRecords",jsonArray);
//检测流程实例是否结束,结束则历史记录最后节点变化
long num =runtimeService.createProcessInstanceQuery().processInstanceId(temporary.getProcessid()).count();
if(num>0){
model.addAttribute("finishFlag", false);
}else{
model.addAttribute("finishFlag", true);
}
if(request.getParameter("inModal")!=null){
//判断显示在流程处理模态框右侧
return "administration/temporaryExecuteViewInModal";
}else{
return "administration/temporaryExecuteView";
}
}
/**
* 显示指标审核
* */
@RequestMapping("/showAuditTemporary.do")
public String showAuditTemporary(HttpServletRequest request,Model model){
String taskId = request.getParameter("taskId");
String processInstanceId = request.getParameter("processInstanceId");
BusinessUnitAudit businessUnitAudit=new BusinessUnitAudit();
Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
model.addAttribute("taskName", task.getName());
businessUnitAudit.setId(CommUtil.getUUID());
businessUnitAudit.setProcessid(processInstanceId);
businessUnitAudit.setTaskid(taskId);
ProcessInstance pInstance=runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
businessUnitAudit.setBusinessid(pInstance.getBusinessKey());
businessUnitAudit.setTaskdefinitionkey(task.getTaskDefinitionKey());
model.addAttribute("businessUnitAudit", businessUnitAudit);
String temporaryId= pInstance.getBusinessKey();
Temporary temporary = this.temporaryService.selectById(temporaryId);
model.addAttribute("temporary", temporary);
//获取任务下一节点若为任务节点则显示目标用户div否则不显示
List<ActivityImpl> activityImpls=workflowProcessDefinitionService.getNEXTActivities(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
if (activityImpls.size()>0) {
model.addAttribute("showTargetUsersFlag", true);
}else{
model.addAttribute("showTargetUsersFlag", false);
}
return "administration/temporaryAudit";
}
/**
* 流程流转
* */
@RequestMapping("/AuditTemporary.do")
public String doAuditTemporary(HttpServletRequest request,Model model,
@ModelAttribute BusinessUnitAudit businessUnitAudit){
User cu= (User)request.getSession().getAttribute("cu");
int result=0;
businessUnitAudit.setInsuser(cu.getId());
businessUnitAudit.setInsdt(CommUtil.nowDate());
result =this.temporaryService.doAudit(businessUnitAudit);
String resstr="{\"res\":\""+result+"\",\"id\":\""+businessUnitAudit.getId()+"\"}";
model.addAttribute("result", resstr);
return "result";
}
/**
* 显示指标业务处理
* */
@RequestMapping("/showTemporaryHandle.do")
public String showTemporaryHandle(HttpServletRequest request,Model model){
String taskId = request.getParameter("taskId");
String processInstanceId = request.getParameter("processInstanceId");
String unitId = request.getParameter("unitId");
ProcessInstance pInstance=runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
BusinessUnitHandle businessUnitHandle = new BusinessUnitHandle();
Task task = this.taskService.createTaskQuery().taskId(taskId).singleResult();
model.addAttribute("taskName", task.getName());
List<BusinessUnitHandle> businessUnitHandles = this.businessUnitHandleService.selectListByWhere("where processid='"+processInstanceId+"' and taskId='"+taskId+"'");
if(businessUnitHandles!= null && businessUnitHandles.size()>0){
businessUnitHandle = businessUnitHandles.get(0);
//若任务退回后需更新新的任务id
businessUnitHandle.setTaskid(taskId);
}else{
businessUnitHandle.setId(CommUtil.getUUID());
businessUnitHandle.setProcessid(processInstanceId);
businessUnitHandle.setTaskid(taskId);
businessUnitHandle.setBusinessid(pInstance.getBusinessKey());
businessUnitHandle.setTaskdefinitionkey(task.getTaskDefinitionKey());
businessUnitHandle.setUnitid(unitId);
}
String userIds = businessUnitHandle.getTargetusers();
if(userIds!= null && !userIds.isEmpty()){
List<User> users = userService.selectListByWhere("where id in('"+userIds.replace(",", "','")+"')");
String targetUsersName ="";
for (User user : users) {
if(!targetUsersName.isEmpty()){
targetUsersName+=",";
}
targetUsersName+=user.getCaption();
}
model.addAttribute("targetUsersName", targetUsersName);
}
model.addAttribute("businessUnitHandle", businessUnitHandle);
model.addAttribute("nowDate", CommUtil.nowDate());
String temporaryId = pInstance.getBusinessKey();
Temporary temporary = this.temporaryService.selectById(temporaryId);
List<BusinessUnitAudit> list = this.businessUnitAuditService.selectListByWhere("where businessId = '"+temporaryId+"' order by insdt desc ");
if(list!=null && list.size()>0){
model.addAttribute("businessUnitAudit", list.get(0));
}
model.addAttribute("temporary", temporary);
return "administration/temporaryHandle";
}
/**
* 流程流程,指标业务处理提交
* */
@RequestMapping("/submitTemporaryHandle.do")
public String dosubmitTemporaryHandle(HttpServletRequest request,Model model,
@ModelAttribute BusinessUnitHandle businessUnitHandle){
String routeNum=request.getParameter("routeNum");
User cu= (User)request.getSession().getAttribute("cu");
int result=0;
if(!this.businessUnitHandleService.checkExit(businessUnitHandle)) {
businessUnitHandle.setInsuser(cu.getId());
businessUnitHandle.setInsdt(CommUtil.nowDate());
result =this.businessUnitHandleService.save(businessUnitHandle);
}else {
result =this.businessUnitHandleService.update(businessUnitHandle);
}
try {
Map<String, Object> variables = new HashMap<String, Object>();
variables =ActivitiUtil.fixVariableWithRoute(variables, true, routeNum);
variables.put(CommString.ACTI_KEK_Candidate_Users, businessUnitHandle.getTargetusers());
variables.put(CommString.ACTI_KEK_Assignee, null);
taskService.complete(businessUnitHandle.getTaskid(), variables);
//发送消息
if(businessUnitHandle.getTargetusers()!=null && !businessUnitHandle.getTargetusers().isEmpty()){
//补全所有字段信息
businessUnitHandle = businessUnitHandleService.selectById(businessUnitHandle.getId());
BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(businessUnitHandle);
businessUnitRecord.sendMessage(businessUnitHandle.getTargetusers(),"");
}
this.temporaryService.updateStatus(businessUnitHandle.getBusinessid());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
result=0;
}
String resstr="{\"res\":\""+result+"\",\"id\":\""+businessUnitHandle.getId()+"\"}";
model.addAttribute("result", resstr);
return "result";
}
}