package com.sobey.cmop.mvc.web.audit; import java.util.Map; import javax.servlet.ServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.sobey.cmop.mvc.comm.BaseController; import com.sobey.cmop.mvc.constant.AccountConstant; import com.sobey.cmop.mvc.constant.AuditConstant; import com.sobey.cmop.mvc.entity.Apply; import com.sobey.cmop.mvc.entity.Audit; import com.sobey.cmop.mvc.entity.AuditFlow; import com.sobey.framework.utils.Servlets; /** * ApplyAuditController负责服务申请Apply审批的管理 * * @author liukai * */ @Controller @RequestMapping(value = "/audit") public class ApplyAuditController extends BaseController { private static final String REDIRECT_SUCCESS_URL = "redirect:/audit/apply/"; /** * 显示所有的apply list */ @RequestMapping(value = "apply") public String list(@RequestParam(value = "page", defaultValue = "1") int pageNumber, @RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize, Model model, ServletRequest request) { Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, REQUEST_PREFIX); model.addAttribute("page", comm.auditService.getAuditApplyPageable(searchParams, pageNumber, pageSize)); // 将搜索条件编码成字符串,分页的URL model.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, REQUEST_PREFIX)); return "audit/apply/auditApplyList"; } /** * 邮件里面执行审批操作(服务申请Apply) * * @param applyId * 服务申请单ID * @param userId * 审批人ID * @param result * 审批结果 * @param opinion * 审批意见 * @param model * @return */ @RequestMapping(value = "apply/auditOk") public String auditOk(@RequestParam(value = "applyId") Integer applyId, @RequestParam(value = "userId") Integer userId, @RequestParam(value = "result") String result, @RequestParam(value = "opinion", required = false, defaultValue = "") String opinion, Model model) { String message; if (comm.auditService.isAudited(comm.applyService.getApply(applyId), userId)) { // 该服务申请已审批过. message = "你已审批"; } else { // 获得指定apply当前审批记录 Audit audit = this.getCurrentApplyAudit(userId, applyId); audit.setResult(result); audit.setOpinion(opinion); boolean flag = comm.auditService.saveAuditToApply(audit, applyId, userId); message = flag ? "审批操作成功" : "审批操作失败,请稍后重试"; } model.addAttribute("message", message); return "audit/auditOk"; } /** * 跳转到Apply审批页面. * * <pre> * 通过userId来区分页面或邮件进入 * 页面进来userId为0,这个时候取当前UserId. 邮件进来的UserId就不为0. * </pre> * * @param userId * */ @RequestMapping(value = "/apply/{id}", method = RequestMethod.GET) public String apply(@PathVariable("id") Integer applyId, @RequestParam(value = "userId", required = false, defaultValue = "0") Integer userId, @RequestParam(value = "result", required = false, defaultValue = "") String result, @RequestParam(value = "view", required = false, defaultValue = "") String view, Model model) { Apply apply = comm.applyService.getApply(applyId); String returnUrl = ""; if (StringUtils.isEmpty(view) && comm.auditService.isAudited(apply, userId)) { // 判断该服务申请已审批过. model.addAttribute("message", "你已审批"); returnUrl = "audit/auditOk"; } else { model.addAttribute("result", result); model.addAttribute("view", view); // 页面进来userId为0,这个时候取当前UserId. 邮件进来的UserId就不为0. model.addAttribute("userId", AccountConstant.FROM_PAGE_USER_ID.equals(userId) ? getCurrentUserId() : userId); model.addAttribute("apply", apply); // TODO 成本核算 model.addAttribute("sumCost", comm.costService.costPrice(apply)); model.addAttribute("audits", comm.auditService.getAuditListByApplyId(applyId)); returnUrl = "audit/apply/auditApplyForm"; } return returnUrl; } /** * 审批 * * @param applyId * applyId * @param userId * 审批人Id * @param result * 审批结果 * @param opinion * 审批内容 * @param redirectAttributes * @return */ @RequestMapping(value = "/apply/{applyId}", method = RequestMethod.POST) public String saveApply(@PathVariable(value = "applyId") Integer applyId, @RequestParam(value = "userId") Integer userId, @RequestParam(value = "result") String result, @RequestParam(value = "opinion", defaultValue = "") String opinion, RedirectAttributes redirectAttributes) { // 获得指定apply当前审批记录 Audit audit = this.getCurrentApplyAudit(userId, applyId); audit.setOpinion(opinion); audit.setResult(result); boolean flag = comm.auditService.saveAuditToApply(audit, applyId, userId); String message = flag ? "审批操作成功" : "审批操作失败,请稍后重试"; redirectAttributes.addFlashAttribute("message", message); return REDIRECT_SUCCESS_URL; } /** * 获得指定apply当前审批记录 * * 根据applyId,auditFlow获得状态为"待审批"的audit. 此audit为申请人或上级审批人进行操作时,插入下级审批人的audit中的临时数据. * * @param userId * 审批人Id * @param applyId * 服务申请单Id * @return */ private Audit getCurrentApplyAudit(Integer userId, Integer applyId) { Integer flowType = AuditConstant.FlowType.资源申请_变更的审批流程.toInteger(); AuditFlow auditFlow = comm.auditService.findAuditFlowByUserIdAndFlowType(userId, flowType); Integer status = AuditConstant.AuditStatus.待审批.toInteger(); return comm.auditService.findAuditByApplyIdAndStatusAndAuditFlow(applyId, status, auditFlow); } }