聊天室创建工单
This commit is contained in:
@@ -47,8 +47,10 @@ public class WorkcaseController {
|
||||
@PostMapping
|
||||
public ResultDomain<TbWorkcaseDTO> createWorkcase(@RequestBody TbWorkcaseDTO workcase) {
|
||||
ValidationResult vr = ValidationUtils.validate(workcase, Arrays.asList(
|
||||
ValidationUtils.requiredString("deviceNamePlateImg", "设备名称牌图片"),
|
||||
ValidationUtils.requiredString("type", "问题类型"),
|
||||
ValidationUtils.requiredString("userId", "用户ID"),
|
||||
ValidationUtils.requiredString("type", "问题类型")
|
||||
ValidationUtils.requiredString("username", "用户名称")
|
||||
));
|
||||
if (!vr.isValid()) {
|
||||
return ResultDomain.failure(vr.getAllErrors());
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.xyzh.api.workcase.dto.TbWorkcaseDTO;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseDeviceDTO;
|
||||
import org.xyzh.api.workcase.dto.TbWorkcaseProcessDTO;
|
||||
import org.xyzh.api.workcase.service.WorkcaseService;
|
||||
import org.xyzh.common.auth.utils.LoginUtil;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
@@ -19,6 +20,8 @@ import org.xyzh.workcase.enums.WorkcaseProcessAction;
|
||||
import org.xyzh.workcase.mapper.TbWorkcaseDeviceMapper;
|
||||
import org.xyzh.workcase.mapper.TbWorkcaseMapper;
|
||||
import org.xyzh.workcase.mapper.TbWorkcaseProcessMapper;
|
||||
import org.xyzh.api.workcase.dto.TbChatRoomDTO;
|
||||
import org.xyzh.api.workcase.service.ChatRoomService;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
|
||||
@@ -35,11 +38,36 @@ public class WorkcaseServiceImpl implements WorkcaseService {
|
||||
@Autowired
|
||||
private TbWorkcaseDeviceMapper workcaseDeviceMapper;
|
||||
|
||||
@Autowired
|
||||
private ChatRoomService chatRoomService;
|
||||
|
||||
// ====================== 工单管理 ======================
|
||||
|
||||
@Override
|
||||
public ResultDomain<TbWorkcaseDTO> createWorkcase(TbWorkcaseDTO workcase) {
|
||||
logger.info("创建工单: userId={}, type={}", workcase.getUserId(), workcase.getType());
|
||||
logger.info("创建工单: userId={}, type={}, roomId={}", workcase.getUserId(), workcase.getType(), workcase.getRoomId());
|
||||
|
||||
// 如果没有 roomId,先创建聊天室
|
||||
boolean needCreateRoom = (workcase.getRoomId() == null || workcase.getRoomId().isEmpty());
|
||||
if (needCreateRoom) {
|
||||
logger.info("未提供 roomId,先创建聊天室");
|
||||
TbChatRoomDTO chatRoom = new TbChatRoomDTO();
|
||||
chatRoom.setGuestId(workcase.getUserId());
|
||||
chatRoom.setGuestName(workcase.getUsername());
|
||||
chatRoom.setRoomType("workcase");
|
||||
chatRoom.setRoomName("工单客服-" + workcase.getUsername());
|
||||
chatRoom.setStatus("active");
|
||||
chatRoom.setCreator(workcase.getCreator());
|
||||
|
||||
ResultDomain<TbChatRoomDTO> roomResult = chatRoomService.createChatRoom(chatRoom);
|
||||
if (!roomResult.getSuccess() || roomResult.getData() == null) {
|
||||
logger.error("创建聊天室失败: {}", roomResult.getMessage());
|
||||
return ResultDomain.failure("创建聊天室失败: " + roomResult.getMessage());
|
||||
}
|
||||
|
||||
workcase.setRoomId(roomResult.getData().getRoomId());
|
||||
logger.info("聊天室创建成功: roomId={}", workcase.getRoomId());
|
||||
}
|
||||
|
||||
if (workcase.getWorkcaseId() == null || workcase.getWorkcaseId().isEmpty()) {
|
||||
workcase.setWorkcaseId(IdUtil.generateUUID());
|
||||
@@ -53,9 +81,11 @@ public class WorkcaseServiceImpl implements WorkcaseService {
|
||||
if (workcase.getEmergency() == null || workcase.getEmergency().isEmpty()) {
|
||||
workcase.setEmergency("normal");
|
||||
}
|
||||
workcase.setCreator(LoginUtil.getCurrentUserId());
|
||||
|
||||
int rows = workcaseMapper.insertWorkcase(workcase);
|
||||
if (rows > 0) {
|
||||
// 创建工单处理记录
|
||||
TbWorkcaseProcessDTO process = new TbWorkcaseProcessDTO();
|
||||
process.setProcessId(IdUtil.generateUUID());
|
||||
process.setOptsn(IdUtil.getOptsn());
|
||||
@@ -65,9 +95,16 @@ public class WorkcaseServiceImpl implements WorkcaseService {
|
||||
process.setCreator(workcase.getCreator());
|
||||
workcaseProcessMapper.insertWorkcaseProcess(process);
|
||||
|
||||
syncWorkcaseToCrm(workcase);
|
||||
sendWechatKefuWelcome(workcase);
|
||||
// 如果是新创建的聊天室,更新聊天室的 workcaseId
|
||||
|
||||
logger.info("更新聊天室的工单ID: roomId={}, workcaseId={}", workcase.getRoomId(), workcase.getWorkcaseId());
|
||||
TbChatRoomDTO updateRoom = new TbChatRoomDTO();
|
||||
updateRoom.setRoomId(workcase.getRoomId());
|
||||
updateRoom.setWorkcaseId(workcase.getWorkcaseId());
|
||||
chatRoomService.updateChatRoom(updateRoom);
|
||||
|
||||
|
||||
syncWorkcaseToCrm(workcase);
|
||||
return ResultDomain.success("创建成功", workcase);
|
||||
}
|
||||
return ResultDomain.failure("创建失败");
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
<update id="updateChatRoom" parameterType="org.xyzh.api.workcase.dto.TbChatRoomDTO">
|
||||
UPDATE workcase.tb_chat_room
|
||||
<set>
|
||||
<if test="workcaseId != null">workcase_id = #{workcaseId},</if>
|
||||
<if test="roomName != null and roomName != ''">room_name = #{roomName},</if>
|
||||
<if test="roomType != null and roomType != ''">room_type = #{roomType},</if>
|
||||
<if test="status != null and status != ''">status = #{status},</if>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
<resultMap id="BaseResultMap" type="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
<id column="workcase_id" property="workcaseId" jdbcType="VARCHAR"/>
|
||||
<result column="room_id" property="roomId" jdbcType="VARCHAR"/>
|
||||
<result column="optsn" property="optsn" jdbcType="VARCHAR"/>
|
||||
<result column="user_id" property="userId" jdbcType="VARCHAR"/>
|
||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
||||
@@ -27,13 +28,13 @@
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
workcase_id, optsn, user_id, username, phone, type, device, device_code, device_name_plate, device_name_plate_img,
|
||||
workcase_id, room_id, optsn, user_id, username, phone, type, device, device_code, device_name_plate, device_name_plate_img,
|
||||
address, description, imgs, emergency, status, processor, creator, create_time, update_time, delete_time, deleted
|
||||
</sql>
|
||||
|
||||
<insert id="insertWorkcase" parameterType="org.xyzh.api.workcase.dto.TbWorkcaseDTO">
|
||||
INSERT INTO workcase.tb_workcase (
|
||||
optsn, workcase_id, user_id, username, phone, type, device_name_plate_img, creator
|
||||
optsn, workcase_id, room_id, user_id, username, phone, type, device_name_plate_img, creator
|
||||
<if test="device != null">, device</if>
|
||||
<if test="deviceCode != null">, device_code</if>
|
||||
<if test="deviceNamePlate != null">, device_name_plate</if>
|
||||
@@ -44,7 +45,7 @@
|
||||
<if test="status != null">, status</if>
|
||||
<if test="processor != null">, processor</if>
|
||||
) VALUES (
|
||||
#{optsn}, #{workcaseId}, #{userId}, #{username}, #{phone}, #{type}, #{deviceNamePlateImg}, #{creator}
|
||||
#{optsn}, #{workcaseId}, #{roomId}, #{userId}, #{username}, #{phone}, #{type}, #{deviceNamePlateImg}, #{creator}
|
||||
<if test="device != null">, #{device}</if>
|
||||
<if test="deviceCode != null">, #{deviceCode}</if>
|
||||
<if test="deviceNamePlate != null">, #{deviceNamePlate}</if>
|
||||
|
||||
Reference in New Issue
Block a user