package cn.timer.api.controller.spmk; import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONObject; import cn.timer.api.aspect.lang.annotation.Log; import cn.timer.api.aspect.lang.enums.BusinessType; import cn.timer.api.bean.qyzx.QyzxEmpEntAsso; import cn.timer.api.bean.spmk.SpmkApproveDetailSummary; import cn.timer.api.bean.spmk.SpmkApproveExecuteRecord; import cn.timer.api.bean.spmk.SpmkApproveSummary; import cn.timer.api.bean.spmk.SpmkExecutor; import cn.timer.api.bean.zzgl.ZzglAuth; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.config.enuminterface.SpmkEnumInterface.ApproveSummarySts; import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecutorSts; import cn.timer.api.config.enums.CommonEnum; import cn.timer.api.config.enums.SysRoleType; import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper; import cn.timer.api.dao.spmk.SpmkApproveExecuteRecordMapper; import cn.timer.api.dao.spmk.SpmkApproveSummaryMapper; import cn.timer.api.dao.spmk.SpmkExecutorMapper; import cn.timer.api.dto.spmk.AdminApprovingDto; import cn.timer.api.dto.spmk.FlowChildren; import cn.timer.api.dto.spmk.FromData; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import cn.timer.api.utils.redis.RedisUtil; import cn.timer.api.utils.router.RouterUtils; import cn.timer.api.utils.router.business.SpmkAssoBusiness; import cn.timer.api.utils.router.business.SpmkAssoBusinessFactory; import cn.timer.api.utils.router.enums.ApproveEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.Date; import java.util.List; @Slf4j @Api(tags = "3.0Admin审批模块") @RestController @Transactional @RequestMapping(value = "/admin/spmk", produces = { "application/json","multipart/form-data" }) public class AdminSpmkController { @Autowired private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper; @Autowired private SpmkApproveSummaryMapper spmkApproveSummaryMapper; @Autowired private SpmkExecutorMapper spmkExecutorMapper; @Autowired private SpmkAssoBusinessFactory spmkAssoBusinessFactory; @Autowired private SpmkApproveExecuteRecordMapper spmkApproveExecuteRecordMapper; private static com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); @Resource private RedisUtil redisUtil; //TODO 管理员审批 /** * 管理员审批 */ @PostMapping(value = "/approving") @ApiOperation(value = "1.审批人审批", httpMethod = "POST", notes = "审批人审批") @Transactional(rollbackFor = Exception.class) @ApiOperationSupport(order = 20) @Log(title = "审批-审批流程", businessType = BusinessType.UPDATE) public Result<Object> approving(@CurrentUser UserBean userBean,@Validated @RequestBody AdminApprovingDto approvingDto) throws Exception { /*判断是否有权限转派*/ //if(approvingDto.getSts()==4){ QyzxEmpEntAsso ent = QyzxEmpEntAsso.builder().build().selectOne(new QueryWrapper<QyzxEmpEntAsso>().lambda().eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode()).eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())); if(ent != null) { /*超管和管理员不受权限控制*/ if(ent.getUserType() == 2) { ZzglAuth zzglAuth = ZzglAuth.builder().build().selectOne(new QueryWrapper<ZzglAuth>().lambda().eq(ZzglAuth::getBmgwId, userBean.getUserInfo().getBmgwId()) .eq(ZzglAuth::getMenuId, "/Approvalspbutonspbuton020102")); if (zzglAuth == null) { return ResultUtil.error("您没有权限"); } } } //} Integer asId = approvingDto.getAsId(); //查询redis中当前有没有在被审批执行中,0是没有在执行,1是在执行 Integer approStatus=Integer.parseInt(redisUtil.get(asId.toString())==null?"0":redisUtil.get(asId.toString()).toString()); if(approStatus==1){ return ResultUtil.error("该审批已在审批中!"); }else{ redisUtil.set(asId.toString(),1,2); } SpmkApproveDetailSummary ad = SpmkApproveDetailSummary.builder().build().selectOne(new QueryWrapper<SpmkApproveDetailSummary>() .lambda() .select(SpmkApproveDetailSummary::getId, SpmkApproveDetailSummary::getRequestData, SpmkApproveDetailSummary::getFroms, SpmkApproveDetailSummary::getFlowChildren) .eq(SpmkApproveDetailSummary::getApproveSummaryId, asId)); // 查询 SpmkApproveSummary 状态, SpmkApproveSummary aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda() .select(SpmkApproveSummary::getSts) .eq(SpmkApproveSummary::getId, asId)); // if (aSummary.getSts() > ApproveSummarySts.IN.ordinal()) { // redisUtil.set(asId.toString(),0,500); // return ResultUtil.error("该审批已结束!"); // } // // // 查询该 审批的状态 是否为 1 审批中 // Integer count = SpmkExecutor.builder().build().selectCount(new QueryWrapper<SpmkExecutor>().lambda() // .eq(SpmkExecutor::getId, approvingDto.getExecutorId()) // .eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal())); // // if (count == 0) { // redisUtil.set(asId.toString(),0,500); // return ResultUtil.error("您已审批过!"); // } if ( spmkExecutorMapper.selectCount(new QueryWrapper<SpmkExecutor>().lambda() .eq(SpmkExecutor::getId, approvingDto.getExecutorId()) .eq(SpmkExecutor::getEmpNum, userBean.getEmpNum()) .eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal())) == 0) { Integer adminNum = new LambdaQueryChainWrapper<QyzxEmpEntAsso>(qyzxEmpEntAssoMapper) .eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum()) .eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode()) .in(QyzxEmpEntAsso::getUserType, SysRoleType.U_TYPE_ADMIN,SysRoleType.U_TYPE_C_ADMIN) .count(); if (adminNum <= 0) { redisUtil.set(asId.toString(),0,500); return ResultUtil.error("非当前审批人 或 管理员,无法操作!"); } } //如果是再次审批 SpmkApproveExecuteRecord spmkApproveExecuteRecord = SpmkApproveExecuteRecord.builder().id(approvingDto.getExecuteRecordId()).build().selectById(); if(spmkApproveExecuteRecord.getSts()>1){ spmkApproveExecuteRecordMapper.delExecuteRecord(approvingDto.getExecuteRecordId(), asId); } List<FlowChildren> listFlowChildren = jsonObject.parseArray(ad.getFlowChildren(),FlowChildren.class); RouterUtils.updateRefuseToAgree( listFlowChildren, asId, approvingDto.getExecuteRecordId(), approvingDto.getExecutorId(), approvingDto.getOpinion(), approvingDto.getSts(), aSummary.getSts(), approvingDto.getUser(), approvingDto.getSignatureImg(), userBean.getEmpNum(), approvingDto.getUserList(), approvingDto.getTypeIndex(), approvingDto.getUserIndex() ); // 更新 flowChildren SpmkApproveDetailSummary sadsUpdate = SpmkApproveDetailSummary.builder().id(ad.getId()).flowChildren(JSONArray.fromObject(listFlowChildren).toString()).build(); /*// 审批详情 审批时添加 附件 if(RequestDataUtils.addFileList(ad,approvingDto.getFileList())){ sadsUpdate.setRequestData(ad.getRequestData()); }*/ sadsUpdate.updateById(); //最后一条数据 FlowChildren fc = CollUtil.getLast(listFlowChildren); if (fc.getExecute() == "2") { // 查询 SpmkApproveSummary 状态 aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda() .select(SpmkApproveSummary::getSts,SpmkApproveSummary::getAssoType) .eq(SpmkApproveSummary::getId, asId)); // if (aSummary.getSts() != ApproveSummarySts.REFUSE.ordinal()) { SpmkApproveSummary.builder().id(asId).currentApprover(CommonEnum.NULL_STR.getDesc()).endTime(new Date()).sts(ApproveSummarySts.FINISH.ordinal()).build().updateById(); JSONObject jSONObject = jsonObject.parseObject(ad.getRequestData(),JSONObject.class); jSONObject.set("approveId", FromData.builder().value(String.valueOf(asId)).build()); jSONObject.set("orgCode", userBean.getOrgCode()); //审批完成后 业务 SpmkAssoBusiness sab = spmkAssoBusinessFactory.createSpmkService(ApproveEnum.getEnums(aSummary.getAssoType())); if (sab != null){ log.info("1----------{}",sab); } log.info("2----------{}", jSONObject); sab.handleApprove(jSONObject); } // } // }else { // redisUtil.set(asId.toString(),0,500); // return ResultUtil.error("该审批已结束!"); // } redisUtil.set(asId.toString(),0,500); return ResultUtil.success(); } /** * 删除-考核模板 @DeleteMapping(value = "/del_appraisal_t/{id}") @ApiOperation(value = "2.移除-审批人", httpMethod = "DELETE", notes = "移除-审批人") @ApiOperationSupport(order = 6) @Role public Result<Object> delAT(@CurrentUser UserBean userBean,@Validated @RequestBody AdminApprovingDto approvingDto) throws Exception { jxglAppraisalTMapper.delete(new QueryWrapper<JxglAppraisalT>().lambda().eq(JxglAppraisalT::getId, id) .eq(JxglAppraisalT::getOrgCode, userBean.getOrgCode())); return ResultUtil.success(); }*/ }