src/main/java/org/springblade/common/utils/CommonUtil.java
@@ -16,6 +16,12 @@ */ package org.springblade.common.utils; import org.springblade.core.tool.utils.StringUtil; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * 通用工具类 * @@ -23,4 +29,29 @@ */ public class CommonUtil { /** * 生成随时间自增变化的编号 * @param prefixStr 前缀 * @param maxNumber 最大值 * @return */ public final static String createNo(String prefixStr,String maxNumber){ SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); String caseNo=""; if (StringUtil.isNotBlank(maxNumber)) { DecimalFormat decimalFormat = new DecimalFormat("000000"); String dateStr = df.format(new Date()); int preLength = maxNumber.indexOf(prefixStr) > -1 ? prefixStr.length():0; String value = maxNumber.substring(dateStr.length() + 5 + preLength, maxNumber.length()); int i = Integer.parseInt(value) + 1; String k = decimalFormat.format(i); // 订单号 caseNo= prefixStr + dateStr + k; } else { //初始、默认值 caseNo = prefixStr + df.format(new Date()) + "000001"; } return caseNo; } } src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -19,9 +19,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; src/main/java/org/springblade/flow/core/constant/ProcessConstant.java
@@ -29,6 +29,11 @@ String LEAVE_KEY = "Leave"; /** * 请假流程标识 */ String AUDIT_KEY = "Audit"; /** * 报销流程标识 */ String EXPENSE_KEY = "Expense"; src/main/java/org/springblade/flow/core/utils/FlowUtil.java
@@ -37,6 +37,7 @@ static { BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave"); BUSINESS_TABLE.put(ProcessConstant.AUDIT_KEY, "sys_application"); } /** src/main/java/org/springblade/modules/application/controller/ApplicationController.java
@@ -24,13 +24,17 @@ import javax.validation.Valid; import org.springblade.Application; import org.springblade.common.cache.UserCache; import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.demo.leave.entity.ProcessLeave; import org.springblade.modules.application.entity.*; import org.springblade.modules.enterprise.entity.EnterpriseEntity; import org.springblade.modules.reject.entity.RejectEntity; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.application.vo.ApplicationVO; @@ -100,7 +104,7 @@ @PostMapping("/saveVo") @ApiOperationSupport(order = 4) @ApiOperation(value = "自定义新增", notes = "传入applicationVo") public R save(@Valid @RequestBody ApplicationEntity application, @RequestBody BasicInfoEntity basicInfoEntity, @RequestBody CarEntity carEntity, public R saveVo(@Valid @RequestBody ApplicationEntity application, @RequestBody BasicInfoEntity basicInfoEntity, @RequestBody CarEntity carEntity, @RequestBody PlanEntity planEntity, @RequestBody SchemeEntity schemeEntity, @RequestBody GoodsEntity goodsEntity) { return R.status(applicationService.saveVo(application,basicInfoEntity,carEntity,planEntity,schemeEntity,goodsEntity)); } @@ -145,6 +149,41 @@ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(applicationService.deleteLogic(Func.toLongList(ids))); } //================================工作流======================================== /** * 申请表 工作流开始 */ @PostMapping("/start-process") @ApiOperationSupport(order = 4) @ApiOperation(value = "工作流开始", notes = "传入applicationVo") public R startProcess(@Valid @RequestBody ApplicationEntity application, @RequestBody BasicInfoEntity basicInfoEntity, @RequestBody CarEntity carEntity, @RequestBody PlanEntity planEntity, @RequestBody SchemeEntity schemeEntity, @RequestBody GoodsEntity goodsEntity) { return R.status(applicationService.startProcess(application,basicInfoEntity,carEntity,planEntity,schemeEntity,goodsEntity)); } /** * 详情 * * @param businessId 主键 */ @GetMapping("/process-detail") public R<ApplicationVO> detail(Long businessId) { ApplicationEntity detail = applicationService.getById(businessId); ApplicationVO applicationVO = applicationService.getVo(detail); applicationVO.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName()); return R.data(applicationVO); } /** * 完成任务 * * @param flow 审核信息 */ @PostMapping("complete-task") @ApiOperationSupport(order = 7) @ApiOperation(value = "完成任务", notes = "传入流程信息") public R completeTask(@ApiParam("任务信息") @RequestBody BladeFlow flow, @RequestBody ApplicationEntity applicationEntity, @RequestBody RejectEntity rejectEntity) { return R.status(applicationService.completeTask(flow,applicationEntity,rejectEntity)); } } src/main/java/org/springblade/modules/application/entity/ApplicationEntity.java
@@ -25,6 +25,7 @@ import java.util.Date; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.flow.core.entity.FlowEntity; /** * 申请表 实体类 @@ -36,7 +37,7 @@ @TableName(value = "sys_application",autoResultMap = true) @ApiModel(value = "Application对象", description = "申请表") @EqualsAndHashCode(callSuper = true) public class ApplicationEntity extends TenantEntity { public class ApplicationEntity extends FlowEntity { /** * 关联的用户id */ @@ -47,6 +48,16 @@ */ @ApiModelProperty(value = "申请编号") private String no; /** * 货物分类 */ @ApiModelProperty(value = "货物分类") private String goodsCategory; /** * 货物类别 */ @ApiModelProperty(value = "货物类别") private String goodsType; /** * 道路运输经营许可证图片 */ @@ -82,5 +93,16 @@ */ @ApiModelProperty(value = "完善意见") private String suggestion; /** * 流程定义id */ private String processDefinitionId; /** * 流程实例id */ private String processInstanceId; /** * 审批人 */ private String taskUser; } src/main/java/org/springblade/modules/application/mapper/ApplicationMapper.java
@@ -16,6 +16,7 @@ */ package org.springblade.modules.application.mapper; import org.apache.ibatis.annotations.Param; import org.springblade.modules.application.entity.ApplicationEntity; import org.springblade.modules.application.vo.ApplicationVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -37,7 +38,13 @@ * @param application * @return */ List<ApplicationVO> selectApplicationPage(IPage page, ApplicationVO application); List<ApplicationVO> selectApplicationPage(IPage page, @Param("application") ApplicationVO application); /** * 获取最大编号 * @return */ ApplicationEntity getMaxNoEntity(); ApplicationEntity getByNo(@Param("no") String no); } src/main/java/org/springblade/modules/application/mapper/ApplicationMapper.xml
@@ -6,18 +6,12 @@ <resultMap id="applicationResultMap" type="org.springblade.modules.application.vo.ApplicationVO"> <result column="id" property="id"/> <result column="no" property="no"/> <result column="basic_info_id" property="basicInfoId"/> <result column="scheme_id" property="schemeId"/> <result column="plan_id" property="planId"/> <result column="goods_id" property="goodsId"/> <result column="car_id" property="carId"/> <result column="road_license_url" property="roadLicenseUrl"/> <result column="id_license_url" property="idLicenseUrl"/> <result column="license_url" property="licenseUrl"/> <result column="skeleton_url" property="skeletonUrl"/> <result column="attorney_url" property="attorneyUrl"/> <result column="suggestion" property="suggestion"/> <result column="tenant_id" property="tenantId"/> <result column="create_user" property="createUser"/> <result column="create_dept" property="createDept"/> <result column="create_time" property="createTime"/> @@ -44,6 +38,15 @@ LEFT JOIN sys_application_goods goods ON goods.application_id = app.id LEFT JOIN sys_enterprise enterprise ON enterprise.user_id = app.user_id AND enterprise.is_deleted = 0 where app.is_deleted = 0 <if test="application.userId != null and application.userId !='' "> AND app.user_id = #{application.userId} </if> </select> <select id="getMaxNoEntity" resultType="org.springblade.modules.application.entity.ApplicationEntity"> SELECT * from sys_application where is_deleted = 0 ORDER BY create_time DESC LIMIT 1 </select> <select id="getByNo" resultType="org.springblade.modules.application.entity.ApplicationEntity"> SELECT * FROM sys_application WHERE is_deleted = 0 AND no = #{no} </select> src/main/java/org/springblade/modules/application/service/IApplicationService.java
@@ -17,10 +17,12 @@ package org.springblade.modules.application.service; import org.springblade.Application; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.modules.application.entity.*; import org.springblade.modules.application.vo.ApplicationVO; import org.springblade.core.mp.base.BaseService; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.reject.entity.RejectEntity; /** * 申请表 服务类 @@ -43,5 +45,28 @@ ApplicationVO getVo(ApplicationEntity application); ApplicationEntity getMaxNoEntity(); Boolean updateVoById(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity); ApplicationEntity getByNo(String no); /** * application 工作流 * @param application * @param basicInfoEntity * @param carEntity * @param planEntity * @param schemeEntity * @param goodsEntity * @return */ Boolean startProcess(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity); /** * 审核信息 * @param flow * @return */ Boolean completeTask(BladeFlow flow, ApplicationEntity applicationEntity, RejectEntity rejectEntity); } src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java
@@ -16,9 +16,26 @@ */ package org.springblade.modules.application.service.impl; import com.aliyun.oss.ServiceException; import lombok.AllArgsConstructor; import org.flowable.bpmn.model.*; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springblade.common.utils.CommonUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.flow.business.service.IFlowService; import org.springblade.flow.core.constant.ProcessConstant; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.core.utils.FlowUtil; import org.springblade.flow.core.utils.TaskUtil; import org.springblade.modules.application.entity.*; import org.springblade.modules.application.service.*; import org.springblade.modules.application.vo.ApplicationVO; @@ -26,10 +43,14 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.modules.application.wrapper.ApplicationWrapper; import org.springblade.modules.enterprise.wrapper.EnterpriseWrapper; import org.springblade.modules.reject.entity.RejectEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; /** * 申请表 服务实现类 @@ -46,6 +67,11 @@ private final IGoodsService goodsService; private final ICarService carService; private final IFlowService flowService; private final TaskService taskService; private final RuntimeService runtimeService; private final RepositoryService repositoryService; @Override public IPage<ApplicationVO> selectApplicationPage(IPage<ApplicationVO> page, ApplicationVO application) { return page.setRecords(baseMapper.selectApplicationPage(page, application)); @@ -54,6 +80,15 @@ @Transactional @Override public Boolean saveVo(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity) { boolean result = false; //保存 ApplicationEntity applicationEntity = getMaxNoEntity(); String str = ""; if (applicationEntity != null) { str = applicationEntity.getNo(); } application.setNo(CommonUtil.createNo("", str)); boolean save = super.save(application); basicInfoEntity.setApplicationId(application.getId().toString()); @@ -70,8 +105,9 @@ carEntity.setApplicationId(application.getId().toString()); boolean c = carService.save(carEntity); result = b && p && s && g && c && save; return b&&p&&s&&g&&c&&save; return result; } @Override @@ -110,4 +146,134 @@ return b&&p&&s&&g&&c&&update; } @Override public ApplicationEntity getByNo(String no) { return baseMapper.getByNo(no); } @Override public Boolean startProcess(ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity) { boolean result = false; String businessTable = FlowUtil.getBusinessTable(ProcessConstant.AUDIT_KEY); if (Func.isEmpty(application.getId())) { //保存 ApplicationEntity applicationEntity = getMaxNoEntity(); String str = ""; if (applicationEntity != null) { str = applicationEntity.getNo(); } application.setNo(CommonUtil.createNo("", str)); boolean save = super.save(application); basicInfoEntity.setApplicationId(application.getId().toString()); boolean b = basicInfoService.save(basicInfoEntity); planEntity.setApplicationId(application.getId().toString()); boolean p = planService.save(planEntity); schemeEntity.setApplicationId(application.getId().toString()); boolean s = schemeService.save(schemeEntity); goodsEntity.setApplicationId(application.getId().toString()); boolean g = goodsService.save(goodsEntity); carEntity.setApplicationId(application.getId().toString()); boolean c = carService.save(carEntity); result = b && p && s && g && c && save; //启动流程 Kv variables = Kv.create() .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, basicInfoEntity.getName()) .set("taskUser", TaskUtil.getTaskUser(application.getTaskUser())); BladeFlow flow = flowService.startProcessInstanceById(application.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(application.getId())), variables); if (Func.isNotEmpty(flow)) { log.error("流程已启动,流程ID:" + flow.getProcessInstanceId()); // 返回流程id写入leave application.setProcessInstanceId(flow.getProcessInstanceId()); updateById(application); } else { throw new ServiceException("开启流程失败"); } } else { updateById(application); } return result; } @Override public Boolean completeTask(BladeFlow flow, ApplicationEntity applicationEntity, RejectEntity rejectEntity) { String taskId = flow.getTaskId(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); // 通过任务对象获取流程实例 ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); // 通过流程实例获取“业务键” String businessKey = pi.getBusinessKey().split(":")[1]; //获取实例对象改变业务状态 ApplicationEntity entity = getById(businessKey); if (!StringUtil.isBlank(applicationEntity.getSuggestion())){ entity.setSuggestion(applicationEntity.getSuggestion()); } if (entity.getStatus() == 1){ entity.setStatus(2); } String processInstanceId = flow.getProcessInstanceId(); String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT); // 增加评论 if (StringUtil.isNoneBlank(processInstanceId, comment)) { taskService.addComment(taskId, processInstanceId, comment); } // 创建变量 Map<String, Object> variables = flow.getVariables(); if (variables == null) { variables = Kv.create(); } variables.put("suggestion",Func.toStr(applicationEntity.getSuggestion(),"")); variables.put(ProcessConstant.PASS_KEY, flow.isPass()); // 完成任务 taskService.complete(taskId, variables); //判读是否有末尾节点 if (getEndNode(task,entity.getProcessDefinitionId())){ //判断是否pass if ((Boolean)variables.get(ProcessConstant.PASS_KEY)){ //改变业务状态 entity.setStatus(10); //生成通行证 } } updateById(entity); return true; } /** * 获取最大编号 * * @return */ public ApplicationEntity getMaxNoEntity() { return baseMapper.getMaxNoEntity(); } public boolean getEndNode(Task task,String definitionId){ BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId); FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows(); for (SequenceFlow outgoingFlow : outgoingFlows) { FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement(); if (targetFlowElement instanceof EndEvent){ return true; } } return false; } } src/main/java/org/springblade/modules/enterprise/wrapper/EnterpriseWrapper.java
@@ -18,6 +18,7 @@ import org.springblade.core.mp.support.BaseEntityWrapper; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.modules.enterprise.entity.EnterpriseEntity; import org.springblade.modules.enterprise.vo.EnterpriseVO; import java.util.Objects; @@ -36,6 +37,7 @@ @Override public EnterpriseVO entityVO(EnterpriseEntity enterprise) { if (ObjectUtil.isNotEmpty(enterprise)){ EnterpriseVO enterpriseVO = Objects.requireNonNull(BeanUtil.copy(enterprise, EnterpriseVO.class)); //User createUser = UserCache.getUser(enterprise.getCreateUser()); @@ -44,6 +46,10 @@ //enterpriseVO.setUpdateUserName(updateUser.getName()); return enterpriseVO; }else { return null; } } src/main/java/org/springblade/modules/reject/controller/RejectController.java
New file @@ -0,0 +1,126 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import lombok.AllArgsConstructor; import javax.validation.Valid; import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.modules.reject.vo.RejectVO; import org.springblade.modules.reject.wrapper.RejectWrapper; import org.springblade.modules.reject.service.IRejectService; import org.springblade.core.boot.ctrl.BladeController; /** * 拒绝申请表 控制器 * * @author BladeX * @since 2022-12-15 */ @RestController @AllArgsConstructor @RequestMapping("reject/reject") @Api(value = "拒绝申请表", tags = "拒绝申请表接口") public class RejectController extends BladeController { private final IRejectService rejectService; /** * 拒绝申请表 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入reject") public R<RejectVO> detail(RejectEntity reject) { RejectEntity detail = rejectService.getOne(Condition.getQueryWrapper(reject)); return R.data(RejectWrapper.build().entityVO(detail)); } /** * 拒绝申请表 分页 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入reject") public R<IPage<RejectVO>> list(RejectEntity reject, Query query) { IPage<RejectEntity> pages = rejectService.page(Condition.getPage(query), Condition.getQueryWrapper(reject)); return R.data(RejectWrapper.build().pageVO(pages)); } /** * 拒绝申请表 自定义分页 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入reject") public R<IPage<RejectVO>> page(RejectVO reject, Query query) { IPage<RejectVO> pages = rejectService.selectRejectPage(Condition.getPage(query), reject); return R.data(pages); } /** * 拒绝申请表 新增 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入reject") public R save(@Valid @RequestBody RejectEntity reject) { return R.status(rejectService.save(reject)); } /** * 拒绝申请表 修改 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入reject") public R update(@Valid @RequestBody RejectEntity reject) { return R.status(rejectService.updateById(reject)); } /** * 拒绝申请表 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入reject") public R submit(@Valid @RequestBody RejectEntity reject) { return R.status(rejectService.saveOrUpdate(reject)); } /** * 拒绝申请表 删除 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "逻辑删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(rejectService.deleteLogic(Func.toLongList(ids))); } } src/main/java/org/springblade/modules/reject/dto/RejectDTO.java
New file @@ -0,0 +1,34 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.dto; import org.springblade.modules.reject.entity.RejectEntity; import lombok.Data; import lombok.EqualsAndHashCode; /** * 拒绝申请表 数据传输对象实体类 * * @author BladeX * @since 2022-12-15 */ @Data @EqualsAndHashCode(callSuper = true) public class RejectDTO extends RejectEntity { private static final long serialVersionUID = 1L; } src/main/java/org/springblade/modules/reject/entity/RejectEntity.java
New file @@ -0,0 +1,55 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; /** * 拒绝申请表 实体类 * * @author BladeX * @since 2022-12-15 */ @Data @TableName("sys_reject") @ApiModel(value = "Reject对象", description = "拒绝申请表") @EqualsAndHashCode(callSuper = true) public class RejectEntity extends TenantEntity { /** * 申请编号 */ @ApiModelProperty(value = "申请编号") private String no; /** * 拒绝理由 */ @ApiModelProperty(value = "拒绝理由") private String rejectReason; /** * 备注 */ @ApiModelProperty(value = "备注") private String remark; } src/main/java/org/springblade/modules/reject/mapper/RejectMapper.java
New file @@ -0,0 +1,43 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.mapper; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.modules.reject.vo.RejectVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; /** * 拒绝申请表 Mapper 接口 * * @author BladeX * @since 2022-12-15 */ public interface RejectMapper extends BaseMapper<RejectEntity> { /** * 自定义分页 * * @param page * @param reject * @return */ List<RejectVO> selectRejectPage(IPage page, RejectVO reject); } src/main/java/org/springblade/modules/reject/mapper/RejectMapper.xml
New file @@ -0,0 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.springblade.modules.reject.mapper.RejectMapper"> <!-- 通用查询映射结果 --> <resultMap id="rejectResultMap" type="org.springblade.modules.reject.entity.RejectEntity"> <result column="id" property="id"/> <result column="no" property="no"/> <result column="reject_reason" property="rejectReason"/> <result column="remark" property="remark"/> <result column="tenant_id" property="tenantId"/> <result column="create_user" property="createUser"/> <result column="create_dept" property="createDept"/> <result column="create_time" property="createTime"/> <result column="update_user" property="updateUser"/> <result column="update_time" property="updateTime"/> <result column="status" property="status"/> <result column="is_deleted" property="isDeleted"/> </resultMap> <select id="selectRejectPage" resultMap="rejectResultMap"> select * from sys_reject where is_deleted = 0 </select> </mapper> src/main/java/org/springblade/modules/reject/service/IRejectService.java
New file @@ -0,0 +1,42 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.service; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.modules.reject.vo.RejectVO; import org.springblade.core.mp.base.BaseService; import com.baomidou.mybatisplus.core.metadata.IPage; /** * 拒绝申请表 服务类 * * @author BladeX * @since 2022-12-15 */ public interface IRejectService extends BaseService<RejectEntity> { /** * 自定义分页 * * @param page * @param reject * @return */ IPage<RejectVO> selectRejectPage(IPage<RejectVO> page, RejectVO reject); } src/main/java/org/springblade/modules/reject/service/impl/RejectServiceImpl.java
New file @@ -0,0 +1,57 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.service.impl; import org.springblade.modules.application.entity.ApplicationEntity; import org.springblade.modules.application.service.IApplicationService; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.modules.reject.vo.RejectVO; import org.springblade.modules.reject.mapper.RejectMapper; import org.springblade.modules.reject.service.IRejectService; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; /** * 拒绝申请表 服务实现类 * * @author BladeX * @since 2022-12-15 */ @Service public class RejectServiceImpl extends BaseServiceImpl<RejectMapper, RejectEntity> implements IRejectService { @Autowired IApplicationService applicationService; @Override public IPage<RejectVO> selectRejectPage(IPage<RejectVO> page, RejectVO reject) { return page.setRecords(baseMapper.selectRejectPage(page, reject)); } @Override public boolean save(RejectEntity entity) { boolean save = super.save(entity); ApplicationEntity applicationEntity = applicationService.getByNo(entity.getNo()); applicationEntity.setStatus(99); boolean update = applicationService.updateById(applicationEntity); return update&&save; } } src/main/java/org/springblade/modules/reject/vo/RejectVO.java
New file @@ -0,0 +1,35 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.vo; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.core.tool.node.INode; import lombok.Data; import lombok.EqualsAndHashCode; /** * 拒绝申请表 视图实体类 * * @author BladeX * @since 2022-12-15 */ @Data @EqualsAndHashCode(callSuper = true) public class RejectVO extends RejectEntity { private static final long serialVersionUID = 1L; } src/main/java/org/springblade/modules/reject/wrapper/RejectWrapper.java
New file @@ -0,0 +1,50 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.reject.wrapper; import org.springblade.core.mp.support.BaseEntityWrapper; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.modules.reject.entity.RejectEntity; import org.springblade.modules.reject.vo.RejectVO; import java.util.Objects; /** * 拒绝申请表 包装类,返回视图层所需的字段 * * @author BladeX * @since 2022-12-15 */ public class RejectWrapper extends BaseEntityWrapper<RejectEntity, RejectVO> { public static RejectWrapper build() { return new RejectWrapper(); } @Override public RejectVO entityVO(RejectEntity reject) { RejectVO rejectVO = Objects.requireNonNull(BeanUtil.copy(reject, RejectVO.class)); //User createUser = UserCache.getUser(reject.getCreateUser()); //User updateUser = UserCache.getUser(reject.getUpdateUser()); //rejectVO.setCreateUserName(createUser.getName()); //rejectVO.setUpdateUserName(updateUser.getName()); return rejectVO; } }