zhubaomin
2024-11-08 3fdbd0285c393968fdc83b737d2a3af0105ad859
工单4个接口
9个文件已修改
2个文件已删除
2个文件已添加
607 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VofeedbackReply.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeProcessingResultMapper.java
@@ -24,4 +24,11 @@
    int updateByPrimaryKeySelective(OpeProcessingResult record);
    int updateByPrimaryKey(OpeProcessingResult record);
    /**
     * 根据workOrderId获取未删除的处理结果数量,添加结果上报前判断使用
     * @param workOrderId
     * @return
     */
    Integer getValidResultCount(Long workOrderId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java
@@ -4,11 +4,15 @@
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
 * @date 2024-11-06 11:33
 * @LastEditTime 2024-11-06 11:33
 * @date 2024-11-07 15:38
 * @LastEditTime 2024-11-07 15:38
 * @Description
 */
@@ -32,4 +36,34 @@
     * @return
     */
    VoWorkOrder getWorkOrderById(Long workOrderId);
    /**
     * 获取指定派单人的指定未删除工单,删除工单前判断使用使用
     * @param dispatcherId
     * @param workOrderId
     * @return
     */
    OpeWorkOrder getWorkOrder(@Param("dispatcherId")Long dispatcherId, @Param("workOrderId")Long workOrderId);
    /**
     * 逻辑删除一个未删除的工单
     * @param workOrderId
     * @return
     */
    Integer deleteWorkOrder(Long workOrderId);
    /**
     * 根据指定条件获取工单数量
     * @param params
     * @return
     */
    Long getWorkOrdersCount(Map<?, ?> params);
    /**
     * 根据指定条件获取工单
     * @param params
     * @return
     */
    List<VoWorkOrder> getWorkOrders(Map<?, ?> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeProcessingResult.java
@@ -10,6 +10,7 @@
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.dy.common.po.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import java.math.BigDecimal;
@@ -42,12 +43,14 @@
    * 工单ID
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @NotNull(message = "必须选择一个工单")
    private Long workOrderId;
    /**
    * 巡检员ID
    */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @NotNull(message = "巡检员不能为空")
    private Long inspectorId;
    /**
@@ -87,6 +90,7 @@
    * 任务完成时间;精确到分
    */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    @NotNull(message = "任务完成时间不能为空")
    private Date completeTime;
    /**
@@ -96,7 +100,7 @@
    private Date reportTime;
    /**
    * 状态;1-草稿,2-已上报,3-已通过,4-已驳回
    * 状态;1-已上报,2-已通过,3-已驳回
    */
    private Byte state;
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoOp/OpeWorkOrder.java
@@ -81,6 +81,16 @@
    private Date dispatchTime;
    /**
     * 农户问题上报ID
     */
    private Long clientReportId;
    /**
     * 巡检员问题上报ID
     */
    private Long inspectorReportId;
    /**
    * 状态;1-未完成,2-已完成
    */
    private Byte state;
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java
@@ -17,9 +17,15 @@
 */
@Data
@JsonPropertyOrder({"dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "dispatchTime", "rejectTimes"})
@JsonPropertyOrder({"workOrderId", "dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "clientReportId", "inspectorReportId", "completeTime", "dispatchTime", "rejectTimes", "state", "processingState"})
public class VoWorkOrder implements BaseEntity {
    public static final long serialVersionUID = 202411061524001L;
    /**
     * 工单ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long workOrderId;
    /**
     * 派单人ID
@@ -71,12 +77,41 @@
    private Date deadLine;
    /**
     * 农户问题上报ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long clientReportId;
    /**
     * 巡检员问题上报ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long inspectorReportId;
    /**
     * 任务完成时间;精确到分
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date completeTime;
    /**
     * 派单时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dispatchTime;
    /**
     * 驳回次数
     */
    private Integer rejectTimes;
    /**
     * 工单状态
     */
    private String state;
    /**
     * 处理状态
     */
    private String processingState;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/Vofeedback.java
File was deleted
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VofeedbackReply.java
File was deleted
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeProcessingResultMapper.xml
@@ -194,4 +194,9 @@
      deleted = #{deleted,jdbcType=BIGINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据workOrderId获取未删除的处理结果数量,添加结果上报前判断使用-->
  <select id="getValidResultCount" resultType="java.lang.Integer">
    SELECT COUNT(*) FROM  ope_processing_result WHERE deleted = 0 AND work_order_id = #{workOrderId}
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
@@ -13,6 +13,8 @@
    <result column="dead_line" jdbcType="TIMESTAMP" property="deadLine" />
    <result column="complete_time" jdbcType="TIMESTAMP" property="completeTime" />
    <result column="dispatch_time" jdbcType="TIMESTAMP" property="dispatchTime" />
    <result column="client_report_id" jdbcType="BIGINT" property="clientReportId" />
    <result column="inspector_report_id" jdbcType="BIGINT" property="inspectorReportId" />
    <result column="state" jdbcType="TINYINT" property="state" />
    <result column="reject_times" jdbcType="INTEGER" property="rejectTimes" />
    <result column="deleted" jdbcType="BIGINT" property="deleted" />
@@ -20,7 +22,8 @@
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, dispatcher_id, inspector_id, task_type_id, task_content, complete_criteria, dead_line, 
    complete_time, dispatch_time, `state`, reject_times, deleted
    complete_time, dispatch_time, client_report_id, inspector_report_id, `state`, reject_times,
    deleted
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
@@ -39,13 +42,13 @@
    insert into ope_work_order (id, dispatcher_id, inspector_id, 
      task_type_id, task_content, complete_criteria, 
      dead_line, complete_time, dispatch_time, 
      `state`, reject_times, deleted
      )
      client_report_id, inspector_report_id, `state`,
      reject_times, deleted)
    values (#{id,jdbcType=BIGINT}, #{dispatcherId,jdbcType=BIGINT}, #{inspectorId,jdbcType=BIGINT}, 
      #{taskTypeId,jdbcType=BIGINT}, #{taskContent,jdbcType=VARCHAR}, #{completeCriteria,jdbcType=VARCHAR}, 
      #{deadLine,jdbcType=TIMESTAMP}, #{completeTime,jdbcType=TIMESTAMP}, #{dispatchTime,jdbcType=TIMESTAMP}, 
      #{state,jdbcType=TINYINT}, #{rejectTimes,jdbcType=INTEGER}, #{deleted,jdbcType=BIGINT}
      )
      #{clientReportId,jdbcType=BIGINT}, #{inspectorReportId,jdbcType=BIGINT}, #{state,jdbcType=TINYINT},
      #{rejectTimes,jdbcType=INTEGER}, #{deleted,jdbcType=BIGINT})
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder">
    <!--@mbg.generated-->
@@ -77,6 +80,12 @@
      </if>
      <if test="dispatchTime != null">
        dispatch_time,
      </if>
      <if test="clientReportId != null">
        client_report_id,
      </if>
      <if test="inspectorReportId != null">
        inspector_report_id,
      </if>
      <if test="state != null">
        `state`,
@@ -115,6 +124,12 @@
      </if>
      <if test="dispatchTime != null">
        #{dispatchTime,jdbcType=TIMESTAMP},
      </if>
      <if test="clientReportId != null">
        #{clientReportId,jdbcType=BIGINT},
      </if>
      <if test="inspectorReportId != null">
        #{inspectorReportId,jdbcType=BIGINT},
      </if>
      <if test="state != null">
        #{state,jdbcType=TINYINT},
@@ -155,6 +170,12 @@
      <if test="dispatchTime != null">
        dispatch_time = #{dispatchTime,jdbcType=TIMESTAMP},
      </if>
      <if test="clientReportId != null">
        client_report_id = #{clientReportId,jdbcType=BIGINT},
      </if>
      <if test="inspectorReportId != null">
        inspector_report_id = #{inspectorReportId,jdbcType=BIGINT},
      </if>
      <if test="state != null">
        `state` = #{state,jdbcType=TINYINT},
      </if>
@@ -178,6 +199,8 @@
      dead_line = #{deadLine,jdbcType=TIMESTAMP},
      complete_time = #{completeTime,jdbcType=TIMESTAMP},
      dispatch_time = #{dispatchTime,jdbcType=TIMESTAMP},
      client_report_id = #{clientReportId,jdbcType=BIGINT},
      inspector_report_id = #{inspectorReportId,jdbcType=BIGINT},
      `state` = #{state,jdbcType=TINYINT},
      reject_times = #{rejectTimes,jdbcType=INTEGER},
      deleted = #{deleted,jdbcType=BIGINT}
@@ -187,6 +210,7 @@
  <!--根据主键获取工单视图对象-->
  <select id="getWorkOrderById" resultType="com.dy.pipIrrGlobal.voOp.VoWorkOrder">
    SELECT
        ord.id AS workOrderId,
        ord.dispatcher_id AS dispatcherId,
        us1.name AS dispatcher,
        ord.inspector_id AS inspectorId,
@@ -195,12 +219,117 @@
        ord.task_content AS taskContent,
        ord.complete_criteria AS completeCriteria,
        ord.dead_line AS deadLine,
        ord.client_report_id AS clientReportId,
        ord.inspector_report_id AS inspectorReportId,
        ord.complete_time AS completeTime,
        ord.dispatch_time AS dispatchTime,
        ord.reject_times AS rejectTimes
        ord.reject_times AS rejectTimes,
        CASE
            WHEN ord.state = 1 THEN '未完成'
            WHEN ord.state = 2 THEN '已完成'
        END AS state,
        CASE
            WHEN res.state = 1 THEN    '已上报'
            WHEN res.state = 2 THEN    '已通过'
            WHEN res.state = 3 THEN    '已驳回'
            ELSE '未上报'
        END AS processingState
    FROM ope_work_order ord
        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
        INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
        LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
    WHERE ord.deleted = 0 AND ord.id = #{workOrderId}
  </select>
  <!--获取指定派单人的指定未删除工单,删除工单前判断使用使用-->
  <select id="getWorkOrder" resultType="com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder">
    SELECT * FROM ope_work_order
    WHERE deleted = 0 AND id = #{workOrderId} AND dispatcher_id = #{dispatcherId} LIMIT 1
  </select>
  <!--逻辑删除一个未删除的工单-->
  <update id="deleteWorkOrder">
    UPDATE ope_work_order SET deleted = UNIX_TIMESTAMP() WHERE deleted = 0 AND id = #{workOrderId}
  </update>
<!--  根据指定条件获取工单数量-->
  <select id="getWorkOrdersCount" resultType="java.lang.Long">
    select
      COUNT(*) AS recordCount
    FROM ope_work_order ord
    INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
    INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
    INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
    LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
    <where>
      AND ord.deleted = 0
      <if test = "dispatcher != null and dispatcher !=''">
        AND us1.name like CONCAT('%',#{dispatcher},'%')
      </if>
      <if test = "inspector != null and inspector !=''">
        AND us2.name like CONCAT('%',#{inspector},'%')
      </if>
      <if test = "timeStart != null and timeStop != null">
        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
      </if>
    </where>
  </select>
  <select id="getWorkOrders" resultType="com.dy.pipIrrGlobal.voOp.VoWorkOrder">
    SELECT
        ord.id AS workOrderId,
        ord.dispatcher_id AS dispatcherId,
        us1.name AS dispatcher,
        ord.inspector_id AS inspectorId,
        us2.name AS inspector,
        typ.task_type AS taskType,
        ord.task_content AS taskContent,
        ord.complete_criteria AS completeCriteria,
        ord.dead_line AS deadLine,
        ord.client_report_id AS clientReportId,
        ord.inspector_report_id AS inspectorReportId,
        ord.complete_time AS completeTime,
        ord.dispatch_time AS dispatchTime,
        ord.reject_times AS rejectTimes,
        CASE
            WHEN ord.state = 1 THEN '未完成'
            WHEN ord.state = 2 THEN '已完成'
        END AS state,
        CASE
            WHEN res.state = 1 THEN    '已上报'
            WHEN res.state = 2 THEN    '已通过'
            WHEN res.state = 3 THEN    '已驳回'
            ELSE '未上报'
        END AS processingState
    FROM ope_work_order ord
        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
        INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
        LEFT JOIN ope_processing_result res ON res.work_order_id = ord.id
    <where>
      AND ord.deleted = 0
      <if test = "dispatcher != null and dispatcher !=''">
        AND us1.name like CONCAT('%',#{dispatcher},'%')
      </if>
      <if test = "inspector != null and inspector !=''">
        AND us2.name like CONCAT('%',#{inspector},'%')
      </if>
      <if test = "timeStart != null and timeStop != null">
        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
      </if>
    </where>
    ORDER BY ord.dispatch_time DESC
    <trim prefix="limit " >
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
      </if>
    </trim>
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
@@ -1,9 +1,12 @@
package com.dy.pipIrrApp.workOrder;
import com.alibaba.fastjson2.JSON;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrApp.workOrder.dto.DtoDeleteWorkOrder;
import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import jakarta.validation.Valid;
@@ -21,12 +24,10 @@
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
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 org.springframework.web.bind.annotation.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
/**
@@ -69,6 +70,10 @@
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if(po.getClientReportId() != null && po.getInspectorReportId() != null) {
            return BaseResponseUtils.buildErrorMsg("工单仅能关联一个问题上报");
        }
        Long workOrderId = workOrderSv.insertWorkOrder(po);
        if(workOrderId == null || workOrderId == 0) {
            return BaseResponseUtils.buildErrorMsg("创建工单失败");
@@ -79,7 +84,7 @@
            return BaseResponseUtils.buildErrorMsg("获取工单失败");
        }
        if(!sendWorkOrder(voWorkOrder)) {
        if(!sendWorkOrder(voWorkOrder, workOrderId)) {
            return BaseResponseUtils.buildErrorMsg("工单推送失败");
        }
@@ -87,17 +92,20 @@
    }
    /**
     * 推送工单
     * @param voWorkOrder
     * 通过RocketMQ推送工单主键
     * @param voWorkOrder 工单视图对象
     * @param workOrderId 工单ID
     * @return
     * @throws MQClientException
     * @throws MQBrokerException
     * @throws RemotingException
     * @throws InterruptedException
     */
    private Boolean sendWorkOrder(VoWorkOrder voWorkOrder) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
    private Boolean sendWorkOrder(VoWorkOrder voWorkOrder, Long workOrderId) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
        String tag = voWorkOrder.getInspector();
        String key = voWorkOrder.getInspectorId().toString();
        String message = JSON.toJSONString(voWorkOrder);
        //String message = JSON.toJSONString(voWorkOrder);
        String message = workOrderId.toString();
        DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(nameServer);
@@ -111,4 +119,88 @@
        return true;
    }
    /**
     * 逻辑删除指定派单人的指定未删除工单
     * 先判断指定派单人、未删除的指定工单是否存在
     * @param deleteWorkOrder 删除工单传输类
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "deleteWorkOrder")
    @SsoAop()
    public BaseResponse<Boolean> deleteWorkOrder(@RequestBody @Valid DtoDeleteWorkOrder deleteWorkOrder, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        OpeWorkOrder workOrder = workOrderSv.getWorkOrder(deleteWorkOrder.getDispatcherId(), deleteWorkOrder.getWorkOrderId());
        if(workOrder == null) {
            return BaseResponseUtils.buildErrorMsg("您要删除的工单不存在");
        }
        if(workOrderSv.deleteWorkOrder(deleteWorkOrder.getWorkOrderId()) == 0) {
            return BaseResponseUtils.buildErrorMsg("工单删除失败");
        }
        return BaseResponseUtils.buildSuccess();
    }
    /**
     * 根据指定条件获取未删除的工单列表
     * @param qo
     * @return
     */
    @GetMapping(path = "/getWorkOrders")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoWorkOrder>>> getWorkOrders(QoWorkOrder qo){
        try {
            return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrders(qo));
        } catch (Exception e) {
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * 获取工单详情
     * @param workOrderId
     * @return
     */
    @GetMapping(path = "/getOneWorkOrder")
    public BaseResponse<VoWorkOrder> getOneWorkOrder(@RequestParam("workOrderId") Long workOrderId) {
        try {
            return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrderById(workOrderId));
        } catch (Exception e) {
            log.error("获取工单详情异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 上报工单处理结果
     *      判断该工单是否存在有效的处理结果,如果存在则提示用户该工单已存在处理结果
     *      添加处理结果回复
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "addProcessingResult")
    @Transactional(rollbackFor = Exception.class)
    public BaseResponse<Boolean> addProcessingResult(@RequestBody @Valid OpeProcessingResult po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if(workOrderSv.hasValidProcessingResult(po.getWorkOrderId())) {
            return BaseResponseUtils.buildErrorMsg("该工单存在有效的处理结果");
        }
        Long processingResultId = workOrderSv.insertProcessingResult(po);
        if(processingResultId == null) {
            return BaseResponseUtils.buildErrorMsg("上报工单处理结果失败");
        }
        return BaseResponseUtils.buildSuccess(true) ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
@@ -1,13 +1,20 @@
package com.dy.pipIrrApp.workOrder;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
import com.dy.pipIrrGlobal.daoOp.OpeProcessingResultMapper;
import com.dy.pipIrrGlobal.daoOp.OpeWorkOrderMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author ZhuBaoMin
@@ -21,6 +28,9 @@
public class WorkOrderSv {
    @Autowired
    private OpeWorkOrderMapper opeWorkOrderMapper;
    @Autowired
    private OpeProcessingResultMapper opeProcessingResultMapper;
    /**
     * 添加工单记录
@@ -38,11 +48,75 @@
    }
    /**
     * 根据主键获取工单视图对象
     * 获取指定派单人的指定未删除工单,删除工单前判断使用使用
     * @param dispatcherId
     * @param workOrderId
     * @return
     */
    public OpeWorkOrder getWorkOrder(Long dispatcherId, Long workOrderId) {
        return opeWorkOrderMapper.getWorkOrder(dispatcherId, workOrderId);
    }
    /**
     * 逻辑删除一个未删除的工单
     * @param workOrderId
     * @return
     */
    public Integer deleteWorkOrder(Long workOrderId) {
        return opeWorkOrderMapper.deleteWorkOrder(workOrderId);
    }
    /**
     * 根据指定条件获取工单
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoWorkOrder>> getWorkOrders(QoWorkOrder qo) {
        qo.completionTime() ;
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        Long itemTotal = opeWorkOrderMapper.getWorkOrdersCount(params);
        QueryResultVo<List<VoWorkOrder>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = opeWorkOrderMapper.getWorkOrders(params);
        return rsVo ;
    }
    /**
     * 根据工单主键获取工单视图对象
     * @param workOrderId
     * @return
     */
    public VoWorkOrder getWorkOrderById(Long workOrderId) {
        return opeWorkOrderMapper.getWorkOrderById(workOrderId);
    }
    /**
     * 根据workOrderId获取未删除的处理结果数量,添加结果上报前判断使用
     * @param workOrderId
     * @return
     */
    public Boolean hasValidProcessingResult(Long workOrderId) {
        if (opeProcessingResultMapper.getValidResultCount(workOrderId) == 0) {
            return false;
        }
        return true;
    }
    /**
     * 上报工单处理结果
     * @param po
     * @return
     */
    public Long insertProcessingResult(OpeProcessingResult po) {
        po.setReportTime(new Date());
        po.setState((byte)1);
        po.setDeleted(0L);
        opeProcessingResultMapper.insert(po);
        return po.getId();
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/dto/DtoDeleteWorkOrder.java
New file
@@ -0,0 +1,28 @@
package com.dy.pipIrrApp.workOrder.dto;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-11-07 13:43
 * @LastEditTime 2024-11-07 13:43
 * @Description 删除工单传输类
 */
@Data
public class DtoDeleteWorkOrder {
    public static final long serialVersionUID = 202411071344001L;
    /**
     * 派单人ID
     */
    @NotNull(message = "派单人不能为空")
    private Long dispatcherId;
    /**
     * 工单ID
     */
    @NotNull(message = "工单不能为空")
    private Long workOrderId;
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
New file
@@ -0,0 +1,44 @@
package com.dy.pipIrrApp.workOrder.qo;
import com.dy.common.webUtil.QueryConditionVo;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-11-07 17:07
 * @LastEditTime 2024-11-07 17:07
 * @Description
 */
@Data
public class QoWorkOrder extends QueryConditionVo {
    /**
     * 派单人姓名
     */
    private String dispatcher;
    /**
     * 巡检员姓名
     */
    private String inspector;
    /**
     * 查询开始时间
     */
    private String timeStart;
    /**
     * 查询结束时间
     */
    private String timeStop;
    public void completionTime(){
        if(this.timeStart != null && !this.timeStart.trim().equals("")) {
            this.timeStart = timeStart + " 00:00:00";
        }
        if(this.timeStop != null && !this.timeStart.trim().equals("")) {
            this.timeStop = timeStop + " 23:59:59";
        }
    }
}