guoshilong
2023-05-15 9eb308b02d64f53af83526180cb6e3b22b1588b5
巡查责任人报汛无异常流程
2 files modified
8 files added
469 ■■■■■ changed files
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/controller/ReportFloodRecordController.java 129 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/entity/ReportFloodRecord.java 99 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/mapper/ReportFloodRecordMapper.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/mapper/ReportFloodRecordMapper.xml 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/service/IReportFloodRecordService.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/service/impl/ReportFloodRecordServiceImpl.java 151 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/vo/ReportFloodRecordVO.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/constant/PersonType.java 28 ●●●●● patch | view | raw | blame | history
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";
}