package com.ruixiangtech.ticket.ticket;

import com.ruixiangtech.ticket.exception.CustomException;
import com.ruixiangtech.ticket.system.config.SystemConfigService;
import com.ruixiangtech.ticket.user.User;
import com.ruixiangtech.ticket.user.UserService;
import com.ruixiangtech.ticket.util.BasicUtil;
import com.ruixiangtech.ticket.util.ResultEntity;
import com.ruixiangtech.ticket.util.ResultWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

@RestController
@Slf4j
@RequestMapping(value = "/ticket", produces = "application/json;")
public class TicketController {

    private final TicketService ticketService;
    private final SystemConfigService systemConfigService;
    private final UserService userService;

    public TicketController(TicketService ticketService, SystemConfigService systemConfigService, UserService userService) {
        this.ticketService = ticketService;
        this.systemConfigService = systemConfigService;
        this.userService = userService;
    }

    @RequestMapping("/list")
    public ResultEntity list(@RequestBody HashMap<String, String> body) {
        // 获取openid
        BasicUtil.mapFieldsKeyExistsCheck(body, new String[]{"openId"});
        String openId = body.get("openId");

        // 根据openid获取用户信息
        User selectUser = (User) userService.selectByOpenId(openId).getData("object");
        if (selectUser == null) {
            return ResultEntity.error("用户不存在");
        }

        // 获取工单列表
        return ResultEntity.success("获取成功", ticketService.selectByBelongUser(selectUser.getId()));
    }

    @RequestMapping("/listByStatus")
    public ResultEntity listById(@RequestBody HashMap<String, String> body) {
        BasicUtil.mapFieldsKeyExistsCheck(body, new String[]{"status", "openId"});
        Integer status = Integer.parseInt(body.get("status"));
        String openId = body.get("openId");

        // 根据openid获取用户信息
        User selectUser = (User) userService.selectByOpenId(openId).getData("object");
        if (selectUser == null) {
            return ResultEntity.error("用户不存在");
        }

        return ResultEntity.success("", ticketService.selectByStatus(status, selectUser.getId()));
    }

    @RequestMapping("/submit")
    public ResultEntity submit(@Validated(Ticket.submit.class) @RequestBody Ticket ticket) {
        // 获取openid
        HashMap<String, String> properties = ticket.getProperties();

        if (!properties.containsKey("openId"))
            return ResultEntity.error("openId不能为空");

        // 根据openid获取用户信息
        ResultWrapper resultWrapper = userService.selectByOpenId(properties.get("openId"));
        User selectUser = (User) resultWrapper.getData("object");
        if (!resultWrapper.getResultBoolean()) {
            return ResultEntity.error("用户不存在");
        }

        // 提交数据库
        ticket.setBelongUser(selectUser.getId());
        if (ticketService.insert(ticket) == 1) {
            return ResultEntity.success("提交成功", new HashMap<String, Integer>() { {
                put("handle_time", systemConfigService.getSystemConfig().getHandleTime());
            }});
        } else {
            return ResultEntity.error("提交失败");
        }
    }

    @RequestMapping("/claim")
    public ResultEntity claim(@Validated(Ticket.claim.class) @RequestBody Ticket ticket) {
        Ticket foundTicket = ticketService.selectById(ticket.getId());
        BasicUtil.assertCondition(foundTicket != null, "工单不存在");
        BasicUtil.assertCondition(foundTicket.getStatus() == 0 || foundTicket.getStatus() == 3, "只有未被处理的工单才能认领");

        if (foundTicket.getStatus() == 0) {
            ticket.setStatus(1);
        } else if (foundTicket.getStatus() == 3) {
            ticket.setStatus(4);
        } else {
            throw new CustomException("工单状态错误");
        }

        if (ticketService.claim(ticket) == 1) {
            return ResultEntity.success("认领成功");
        } else {
            return ResultEntity.error("认领失败");
        }
    }

    @RequestMapping("/reply")
    public ResultEntity reply(@Validated(Ticket.reply.class) @RequestBody Ticket ticket) {
        Ticket foundTicket = ticketService.selectById(ticket.getId());
        BasicUtil.assertCondition(foundTicket != null, "工单不存在");
        BasicUtil.assertCondition(foundTicket.getStatus() == 1 || foundTicket.getStatus() == 4, "只有被认领的工单才能回复");

        if (foundTicket.getStatus() == 1) {
            ticket.setStatus(2);
        } else if (foundTicket.getStatus() == 4) {
            ticket.setStatus(5);
        } else {
            throw new CustomException("工单状态错误");
        }

        if (ticketService.reply(ticket) == 1) {
            return ResultEntity.success("回复成功");
        } else {
            return ResultEntity.error("回复失败");
        }
    }

    @RequestMapping("/reconsider")
    public ResultEntity update(@Validated(Ticket.reconsider.class) @RequestBody Ticket ticket) {
        Ticket foundTicket = ticketService.selectById(ticket.getId());
        BasicUtil.assertCondition(foundTicket != null, "工单不存在");
        BasicUtil.assertCondition(foundTicket.getStatus() == 2, "只有首次被处理的工单才能复议");

        if (ticketService.update(ticket) == 1) {
            return ResultEntity.success("更新成功");
        } else {
            return ResultEntity.error("更新失败");
        }
    }
}
工单管理接口 - RuixiangTech Ticket系统

原文地址: https://www.cveoy.top/t/topic/mTZk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录