skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
@@ -29,6 +29,11 @@ String PATROL_KEY = "Patrol"; /** * 巡查流程标识 */ String REPORT_FLOOD_KEY = "ReportFlood"; /** * 请假流程标识 */ String LEAVE_KEY = "Leave"; skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java
@@ -38,6 +38,7 @@ static { BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave"); BUSINESS_TABLE.put(ProcessConstant.PATROL_KEY,"sm_patrol_task"); BUSINESS_TABLE.put(ProcessConstant.REPORT_FLOOD_KEY,"sm_report_flood_record"); } /** skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/controller/ReportFloodRecordController.java
New file @@ -0,0 +1,129 @@ package cn.gistack.sm.reportFlood.controller; import cn.gistack.sm.patrol.entity.PatrolConfig; import cn.gistack.sm.patrol.service.IPatrolConfigService; import cn.gistack.sm.reportFlood.entity.ReportFloodRecord; import cn.gistack.sm.reportFlood.service.IReportFloodRecordService; import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; import java.util.Arrays; /** * @Description: 报汛记录 */ @Slf4j @Api(tags="报汛记录") @RestController @RequestMapping("/reportFloodRecord/reportFloodRecord") @AllArgsConstructor public class ReportFloodRecordController extends BladeController { private IReportFloodRecordService reportFloodRecordService; /** * 分页列表查询 */ @ApiOperation(value="报汛记录-分页列表查询", notes="报汛记录-分页列表查询") @GetMapping(value = "/list") public R<IPage<ReportFloodRecord>> queryPageList(ReportFloodRecord reportFloodRecord, Query query) { IPage<ReportFloodRecord> pageList = reportFloodRecordService.selectReportFloodRecordPages(Condition.getPage(query),reportFloodRecord); return R.data(pageList); } /** * 添加 * * @param reportFloodRecord * @return */ @ApiOperation(value="报汛记录-添加", notes="报汛记录-添加") @PostMapping(value = "/add") public R add(@RequestBody ReportFloodRecord reportFloodRecord) { return R.data(reportFloodRecordService.save(reportFloodRecord)); } /** * 编辑 * * @param reportFloodRecord * @return */ @ApiOperation(value="报汛记录-编辑", notes="报汛记录-编辑") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public R edit(@RequestBody ReportFloodRecord reportFloodRecord) { return R.data(reportFloodRecordService.updateById(reportFloodRecord)); } /** * 通过id删除 * * @param id * @return */ @ApiOperation(value="报汛记录-通过id删除", notes="报汛记录-通过id删除") @DeleteMapping(value = "/delete") public R delete(@RequestParam(name="id",required=true) String id) { return R.data(reportFloodRecordService.removeById(id)); } /** * 批量删除 * * @param ids * @return */ @ApiOperation(value="报汛记录-批量删除", notes="报汛记录-批量删除") @DeleteMapping(value = "/deleteBatch") public R deleteBatch(@RequestParam(name="ids",required=true) String ids) { return R.data(this.reportFloodRecordService.removeByIds(Arrays.asList(ids.split(",")))); } /** * 通过id查询 * * @param id * @return */ @ApiOperation(value="报汛记录-通过id查询", notes="报汛记录-通过id查询") @GetMapping(value = "/queryById") public R queryById(@RequestParam(name="id",required=true) String id) { ReportFloodRecord reportFloodRecord = reportFloodRecordService.getById(id); return R.data(reportFloodRecord); } /**====================工作流==========================**/ /** * 新增或修改 * * @param reportFloodRecord * @return */ @ApiOperation(value="报汛记录-新增或修改", notes="报汛记录-新增或修改") @PostMapping(value = "/start-process") public R startProcess(@RequestBody ReportFloodRecord reportFloodRecord) { return R.status(reportFloodRecordService.startProcess(reportFloodRecord)); } /** * 完成任务 * * @param reportFloodRecord * @return */ @ApiOperation(value="报汛记录-新增或修改", notes="报汛记录-新增或修改") @PostMapping(value = "/complete-task") public R startProcess(@RequestBody ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser) { return R.status(reportFloodRecordService.completeTask(reportFloodRecord,taskUser,currentUser)); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/entity/ReportFloodRecord.java
New file @@ -0,0 +1,99 @@ package cn.gistack.sm.reportFlood.entity; import cn.gistack.flow.core.entity.FlowEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.springblade.core.mp.base.BaseEntity; /** * 报汛记录 */ @Data @TableName( value = "SM_REPORT_FLOOD_RECORD",autoResultMap = true) @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value="SM_REPORT_FLOOD_RECORD对象", description="报汛记录表") public class ReportFloodRecord extends FlowEntity { /** * 水库id */ @ApiModelProperty("水库id") private String reservoirId; /** * 今日降雨(毫米) */ @ApiModelProperty("今日降雨(毫米)") private String curDrp; /** * 系统监测水位(米) */ @ApiModelProperty("系统监测水位(米)") private String sysReport; /** * 人工观测水位差值 */ @ApiModelProperty("人工观测水位差值") private String personWatch; /** * 是否超溢洪道(1、是;2、否) */ @ApiModelProperty("是否超溢洪道(1、是;2、否)") private String isOver; /** * 超溢洪道(米) */ @ApiModelProperty("超溢洪道(米)") private String overZ; /** * 闸门状态(1、开启;2、关闭) */ @ApiModelProperty("闸门状态(1、开启;2、关闭)") private String gateStatus; /** * 内容 */ @ApiModelProperty("内容") private String content; /** * 图片 */ @ApiModelProperty("图片") @TableField(value = "images",typeHandler = FastjsonTypeHandler.class) private Object[] images; /** * 视频 */ @ApiModelProperty("视频") @TableField(value = "videos",typeHandler = FastjsonTypeHandler.class) private Object[] videos; /** * 1、自行处理;2、上报处理 */ @ApiModelProperty("1、自行处理;2、上报处理") private String solution; /** * 流程定义id */ private String processDefinitionId; /** * 流程实例id */ private String processInstanceId; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/mapper/ReportFloodRecordMapper.java
New file @@ -0,0 +1,17 @@ package cn.gistack.sm.reportFlood.mapper; import cn.gistack.sm.patrol.entity.PatrolConfig; import cn.gistack.sm.reportFlood.entity.ReportFloodRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @Description: 报汛记录 */ public interface ReportFloodRecordMapper extends BaseMapper<ReportFloodRecord> { List<ReportFloodRecord> selectReportFloodRecordPages(IPage<ReportFloodRecord> page, ReportFloodRecord reportFloodRecord); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/mapper/ReportFloodRecordMapper.xml
New file @@ -0,0 +1,9 @@ <?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="cn.gistack.sm.reportFlood.mapper.ReportFloodRecordMapper"> <select id="selectReportFloodRecordPages" resultType="cn.gistack.sm.reportFlood.entity.ReportFloodRecord"> </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/service/IReportFloodRecordService.java
New file @@ -0,0 +1,19 @@ package cn.gistack.sm.reportFlood.service; import cn.gistack.sm.patrol.entity.PatrolConfig; import cn.gistack.sm.reportFlood.entity.ReportFloodRecord; import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; /** * @Description: 报汛记录 */ public interface IReportFloodRecordService extends BaseService<ReportFloodRecord> { IPage<ReportFloodRecord> selectReportFloodRecordPages(IPage<ReportFloodRecord> page, ReportFloodRecord reportFloodRecord); boolean startProcess(ReportFloodRecord reportFloodRecord); boolean completeTask(ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/service/impl/ReportFloodRecordServiceImpl.java
New file @@ -0,0 +1,151 @@ package cn.gistack.sm.reportFlood.service.impl; import cn.gistack.flow.core.constant.ProcessConstant; import cn.gistack.flow.core.entity.BladeFlow; import cn.gistack.flow.core.feign.IFlowClient; import cn.gistack.flow.core.utils.FlowUtil; import cn.gistack.flow.core.utils.TaskUtil; import cn.gistack.sm.patrol.entity.PatrolTask; import cn.gistack.sm.reportFlood.entity.ReportFloodRecord; import cn.gistack.sm.reportFlood.mapper.ReportFloodRecordMapper; import cn.gistack.sm.reportFlood.service.IReportFloodRecordService; import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO; import cn.gistack.sm.sjztmd.constant.PersonType; import cn.gistack.sm.sjztmd.entity.AttResManagePerson; import cn.gistack.sm.sjztmd.service.IAttResManagePersonService; import cn.gistack.system.user.entity.User; import cn.gistack.system.user.feign.IUserClient; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.apache.ibatis.annotations.Param; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.StringUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX; @Service @AllArgsConstructor public class ReportFloodRecordServiceImpl extends BaseServiceImpl<ReportFloodRecordMapper, ReportFloodRecord> implements IReportFloodRecordService { private final IFlowClient flowClient; private final IAttResManagePersonService attResManagePersonService; private final IUserClient userClient; @Override public IPage<ReportFloodRecord> selectReportFloodRecordPages(IPage<ReportFloodRecord> page, ReportFloodRecord reportFloodRecord) { return page.setRecords(baseMapper.selectReportFloodRecordPages(page,reportFloodRecord)); } @Override @Transactional(rollbackFor = Exception.class) public boolean startProcess(ReportFloodRecord reportFloodRecord) { String businessTable = FlowUtil.getBusinessTable(ProcessConstant.REPORT_FLOOD_KEY); if (Func.isEmpty(reportFloodRecord.getId())) { save(reportFloodRecord); // 启动流程 Kv variables = Kv.create() .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, reportFloodRecord.getCreateUser()); //无异常/自行解决,把任务指定给自己 if (Func.equals(1,reportFloodRecord.getStatus())){ //无异常 variables.set("taskUser", TaskUtil.getTaskUser(reportFloodRecord.getCreateUser().toString())); }else { //异常 if (reportFloodRecord.getSolution().equals("1")) { //自行解决 variables.set("taskUser", TaskUtil.getTaskUser(reportFloodRecord.getCreateUser().toString())); }else{ //上报给技术责任人处理 User user = getUser(PersonType.TECH_PERSON, reportFloodRecord.getReservoirId()); if (ObjectUtil.isNotEmpty(user)){ variables.set("taskUser", TaskUtil.getTaskUser(user.getId().toString())); } } } R<BladeFlow> result = flowClient.startProcessInstanceById(reportFloodRecord.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(reportFloodRecord.getId())), variables); if (result.isSuccess()) { log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId()); // 返回流程id写入 reportFloodRecord.setProcessInstanceId(result.getData().getProcessInstanceId()); updateById(reportFloodRecord); if (Func.equals(1,reportFloodRecord.getStatus())){ //状态正常直接结束任务 ReportFloodRecordVO reportFloodRecordVO = new ReportFloodRecordVO(); reportFloodRecordVO.setReport(false); reportFloodRecordVO.setToDept(false); reportFloodRecordVO.setProcessInstanceId(reportFloodRecord.getProcessInstanceId()); R<BladeFlow> res = flowClient.getBladeFlow(reportFloodRecord.getId().toString(),reportFloodRecord.getCreateUser().toString()); if (res.isSuccess()){ reportFloodRecordVO.setFlow(res.getData()); completeTask(reportFloodRecordVO,reportFloodRecord.getCreateUser().toString(),reportFloodRecord.getCreateUser().toString()); }else { throw new ServiceException("完成报汛失败"); } } } else { throw new ServiceException("开启流程失败"); } } else { updateById(reportFloodRecord); } return true; } @Override public boolean completeTask(ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser) { BladeFlow flow = reportFloodRecord.getFlow(); String taskId = flow.getTaskId(); String processInstanceId = reportFloodRecord.getProcessInstanceId(); String comment = "完成"; // 创建变量 Map<String, Object> variables = flow.getVariables(); if (variables == null) { variables = Kv.create(); } //指定是否上报 variables.put(ProcessConstant.REPORT_KEY,reportFloodRecord.isReport()); //指定转交人 variables.put("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser)); //指定是否上报给部门 variables.put(ProcessConstant.TODEPT_KEY,reportFloodRecord.isToDept()); // 完成任务 flowClient.completeTask(taskId,processInstanceId,comment,variables); return true; } /** * 根据水库id和责任人类型获取用户 * @param type 责任人类型 * @param resGuid 水库id * @return */ public User getUser(String type,String resGuid){ AttResManagePerson attResManagePerson = new AttResManagePerson(); attResManagePerson.setResGuid(resGuid); List<AttResManagePerson> list = attResManagePersonService.list(Condition.getQueryWrapper(attResManagePerson)); //person_type人员类型: 1行政责任人,2主管责任人,3技术责任人,4管理责任人,5巡查责任人(确认) list.stream().filter(e->Func.equals(type,e.getType())).collect(Collectors.toList()); attResManagePerson = list.get(0); R<List<User>> res = userClient.userInfoByPhone("000000", attResManagePerson.getUserPhone()); if (res.isSuccess()){ return res.getData().get(0); }else { return null; } } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/vo/ReportFloodRecordVO.java
New file @@ -0,0 +1,11 @@ package cn.gistack.sm.reportFlood.vo; import cn.gistack.sm.reportFlood.entity.ReportFloodRecord; import lombok.Data; @Data public class ReportFloodRecordVO extends ReportFloodRecord { private boolean report; private boolean toDept; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/constant/PersonType.java
New file @@ -0,0 +1,28 @@ package cn.gistack.sm.sjztmd.constant; public interface PersonType { /** * 行政责任人 */ String ADMIN_PERSON = "1"; /** * 主管责任人 */ String SUPERVISOR_PERSON = "2"; /** * 技术责任人 */ String TECH_PERSON = "3"; /** * 管理责任人 */ String MANAGER_PERSON = "4"; /** * 巡查责任人 */ String PATROL_PERSON = "5"; }