zhubaomin
2025-04-14 d2263e86d837ef331d77fd39dccd79f100041e76
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/issue/IssueCtrl.java
New file
@@ -0,0 +1,161 @@
package com.dy.pipIrrWechat.issue;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.pojoSe.SeIssueReport;
import com.dy.pipIrrGlobal.pojoSe.SeReportReply;
import com.dy.pipIrrGlobal.voSe.VoIssueReport;
import com.dy.pipIrrGlobal.voSe.VoIssueReportReply;
import com.dy.pipIrrWechat.issue.dto.DtoDeleteParam;
import com.dy.pipIrrWechat.issue.dto.DtoReportReply;
import com.dy.pipIrrWechat.issue.qo.QoIssueReport;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
 * @author ZhuBaoMin
 * @date 2024-10-30 10:34
 * @LastEditTime 2024-10-30 10:34
 * @Description 农户问题上报控制类
 */
@Slf4j
@RestController
@RequestMapping(path="issue")
@RequiredArgsConstructor
public class IssueCtrl {
    private final IssueSv issueSv;
    /**
     * 添加农户问题上报
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "addIssueReport")
    @Transactional(rollbackFor = Exception.class)
    public BaseResponse<Boolean> addIssueReport(@RequestBody @Valid SeIssueReport po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String result = issueSv.addIssueReport(po);
        if(!result.equals("success")) {
            return BaseResponseUtils.buildErrorMsg(result);
        }
        return BaseResponseUtils.buildSuccess(true) ;
    }
    /**
     * 根据指定条件获取农户问题上报
     * @param vo
     * @return
     */
    @GetMapping(path = "/getIssueReports")
    public BaseResponse<QueryResultVo<List<VoIssueReport>>> getIssueReports(QoIssueReport vo) {
        try {
            //QueryResultVo<List<VoIssueReport_temp>> res = issueSv.getIssueReports(vo);
            return BaseResponseUtils.buildSuccess(issueSv.getIssueReports(vo));
        } catch (Exception e) {
            log.error("获取农户问题上报记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 逻辑删除农户问题上报,删除前先判断要删除的上报是否存在
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "deleteIssueReport")
    public BaseResponse<Boolean> deleteIssueReport(@RequestBody @Valid DtoDeleteParam po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        // 根据上报ID及农户ID获取未删除的上报,删除上报判断使用
        SeIssueReport seIssueReport = issueSv.getReport(po.getIssueReportId(), po.getClientId());
        if(seIssueReport == null) {
            return BaseResponseUtils.buildErrorMsg("您要删除的问题上报不存在");
        }
        try {
            Integer recordCount = Optional.ofNullable(issueSv.deleteIssueReport(po.getIssueReportId())).orElse(0);
            if (recordCount == 0) {
                return BaseResponseUtils.buildErrorMsg("农户问题上报删除失败");
            }else {
                return BaseResponseUtils.buildSuccess();
            }
        } catch (Exception e) {
            log.error("农户问题上报删除失败", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 回复农户问题上报
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "replyReport")
    @Transactional(rollbackFor = Exception.class)
    public BaseResponse<Boolean> replyReport(@RequestBody @Valid DtoReportReply po, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        // 添加上报回复记录
        SeReportReply seReportReply = new SeReportReply();
        seReportReply.setReportId(po.getReportId());
        seReportReply.setReplyContent(po.getReplyContent());
        seReportReply.setReplyTime(new Date());
        seReportReply.setReplierId(po.getReplierId());
        Long reportReplyId = issueSv.insertReportReply(seReportReply);
        if(reportReplyId == null) {
            return BaseResponseUtils.buildErrorMsg("回复农户问题上报失败");
        }
        // 修改问题上报状态为已回复
        SeIssueReport seIssueReport = new SeIssueReport();
        seIssueReport.setId(po.getReportId());
        seIssueReport.setState((byte)2);
        Integer issueReportId = issueSv.updateIssueReport(seIssueReport);
        if(issueReportId == null) {
            return BaseResponseUtils.buildErrorMsg("农户问题上报修改失败");
        }
        return BaseResponseUtils.buildSuccess(true) ;
    }
    /**
     * 根据问题上报ID获取上报回复信息
     * @param reportId
     * @return
     */
    @GetMapping(path = "/getReportReply")
    public BaseResponse<VoIssueReportReply> getReportReply(@RequestParam("reportId") Long reportId) {
        if(reportId == null) {
            return BaseResponseUtils.buildErrorMsg("请选择一个问题上报");
        }
        try {
            return BaseResponseUtils.buildSuccess(issueSv.getReportReplyByReportId(reportId));
        } catch (Exception e) {
            log.error("获取上报回复信息录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
}