feat: 合并急救员建群逻辑到createGroupMag,新增参与工单列表接口

1. createGroupMag增加addCareUsersToGroup调用,自动拉入关爱联络员+急救员
2. 废除createGroupMagFirstAider(标记@Deprecated)
3. 新增/myparticipatedOrders接口,app端查询当前登录人参与的应急工单列表

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-20 15:51:33 +08:00
co-authored by Claude
parent be701122ca
commit 38a0aa07dd
8 changed files with 202 additions and 24 deletions
@@ -104,7 +104,8 @@ public class EmergencyApiController {
return Result.OK(emergencyApiService.createGroupMag(name, longitude, latitude, type));
}
@Operation(summary = "创建群聊-应急就医-急救员(不发起音视频通话,自动拉入关爱联络员和急救员)")
@Deprecated
@Operation(summary = "[已废弃] 创建群聊-应急就医-急救员,请使用 /createGroupMag")
@GetMapping(value = "/createGroupMagFirstAider")
public Result<CreateGroupMagVO> createGroupMagFirstAider(@RequestParam("name") String name,
@RequestParam("longitude") String longitude,
@@ -18,6 +18,7 @@ import com.renkang.emergency.entity.OrderDetail;
import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.entity.vo.EmployeeVO;
import com.renkang.emergency.entity.vo.GroupMemberVO;
import com.renkang.emergency.entity.vo.MyParticipatedOrderVO;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
@@ -328,4 +329,12 @@ public class EmergencyOrderApiController {
return Result.OK(emergencyOrderApiService.searchEmployee(realname, orgCode, workNo, phone, excludeSessionId, pageNo, pageSize));
}
@Operation(summary = "查询当前登录人参与的应急工单列表")
@GetMapping("/myParticipatedOrders")
public Result<IPage<MyParticipatedOrderVO>> myParticipatedOrders(
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
return Result.OK(emergencyOrderApiService.myParticipatedOrders(pageNo, pageSize));
}
}
@@ -34,8 +34,9 @@ public interface EmergencyApiService {
CreateGroupMagVO createGroupMag(String name, String longitude, String latitude, String type);
/**
* 创建群聊-应急就医-急救员(不发起音视频通话,额外拉入关爱联络员和急救员)
* [已废弃] 创建群聊-应急就医-急救员,请使用 {@link #createGroupMag}
*/
@Deprecated
CreateGroupMagVO createGroupMagFirstAider(String name, String longitude, String latitude);
Result<Map<String, Object>> createGroupMagIntervene(String name, String longitude, String latitude, String type);
@@ -16,6 +16,7 @@ import com.renkang.emergency.entity.OrderSendRecord;
import com.renkang.emergency.entity.TblHelpCentorVo;
import com.renkang.emergency.entity.vo.EmployeeVO;
import com.renkang.emergency.entity.vo.GroupMemberVO;
import com.renkang.emergency.entity.vo.MyParticipatedOrderVO;
import java.util.Date;
import java.util.List;
@@ -86,4 +87,9 @@ public interface EmergencyOrderApiService {
IPage<EmployeeVO> searchEmployee(String realname, String orgCode, String workNo, String phone, String excludeSessionId, Integer pageNo, Integer pageSize);
/**
* 查询当前登录人参与的应急工单列表(sessionNow=1
*/
IPage<MyParticipatedOrderVO> myParticipatedOrders(Integer pageNo, Integer pageSize);
}
@@ -890,6 +890,8 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
String orderId = this.call(emergencyCall);
//保存参与应急的人员信息 PS: 不想大改之前的代码逻辑此处 没有将同一条记录的赋值逻辑合并
saveOderOperationInfo(orderId, sessionId, majorsId, operatorsId, majorsTwoId, rs.getCenterId(), conSessionRequestDO.getAccountList());
// 自动拉入关爱联络员+急救员1+急救员2(不阻断主流程)
addCareUsersToGroup(sysUser.getId(), sessionId, orderId);
imrs.getResult().put("member", userList);
imrs.getResult().put("tfNew", "1");
imrs.getResult().put("id", orderId);
@@ -899,6 +901,7 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
return createGroupMagVO;
}
@Deprecated
@Transactional(rollbackFor = Exception.class)
@Override
public CreateGroupMagVO createGroupMagFirstAider(String name, String longitude, String latitude) {
@@ -21,6 +21,7 @@ import com.renkang.emergency.constant.EmergencyConstants;
import com.renkang.emergency.entity.*;
import com.renkang.emergency.entity.vo.EmployeeVO;
import com.renkang.emergency.entity.vo.GroupMemberVO;
import com.renkang.emergency.entity.vo.MyParticipatedOrderVO;
import com.renkang.emergency.manager.EmergencyCacheManager;
import com.renkang.emergency.manager.EmergencyCloudManager;
import com.renkang.emergency.mapper.*;
@@ -928,6 +929,60 @@ public class EmergencyOrderApiServiceImpl implements EmergencyOrderApiService {
return targetPage;
}
@Override
public IPage<MyParticipatedOrderVO> myParticipatedOrders(Integer pageNo, Integer pageSize) {
String userId = GlobalUtils.getLoginUser().getId();
// 1. 查当前登录人参与的所有工单ID(去重)
List<String> orderIds = orderOperatorMapper.selectList(
new LambdaQueryWrapper<OrderOperator>()
.select(OrderOperator::getOrderId)
.eq(OrderOperator::getUserId, userId)
).stream().map(OrderOperator::getOrderId).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(orderIds)) {
return new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10);
}
// 2. 查正在应急的工单
Page<Order> page = new Page<>(pageNo != null ? pageNo : 1, pageSize != null ? pageSize : 10);
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Order::getId, orderIds);
wrapper.eq(Order::getSessionNow, true);
wrapper.eq(Order::getDelFlag, CommonConstant.DEL_FLAG_0);
wrapper.eq(Order::getStatus, 1);
wrapper.orderByDesc(Order::getCreateTime);
IPage<Order> srcPage = orderMapper.selectPage(page, wrapper);
// 3. 映射VO
Page<MyParticipatedOrderVO> targetPage = new Page<>(srcPage.getCurrent(), srcPage.getSize(), srcPage.getTotal());
if (CollectionUtils.isEmpty(srcPage.getRecords())) {
return targetPage;
}
List<MyParticipatedOrderVO> records = srcPage.getRecords().stream().map(order -> {
MyParticipatedOrderVO vo = new MyParticipatedOrderVO();
vo.setOrderId(order.getId());
vo.setSessionId(order.getSessionId());
vo.setSalvageUserName(order.getSalvageUserName());
vo.setSalvageUserSex(order.getSalvageUserSex());
vo.setSalvageUserAvatar(order.getSalvageUserAvatar());
vo.setSalvageUserAge(order.getSalvageUserAge());
vo.setSalvageUserMobile(order.getSalvageUserMobile());
vo.setOrderStatus(order.getOrderStatus());
vo.setInitTime(order.getCreateTime());
// 解析部门(防NPE
if (StrUtil.isNotBlank(order.getSalvageUserDepart())) {
SysDepart secondDepart = emergencyCacheManager.getUserSecondDepart(order.getSalvageUserDepart());
SysDepart depart = emergencyCacheManager.getUserDepart(order.getSalvageUserDepart());
if (secondDepart != null) {
vo.setOrgName(secondDepart.getDepartName());
}
if (depart != null) {
vo.setDeptName(depart.getDepartName());
}
}
return vo;
}).collect(Collectors.toList());
targetPage.setRecords(records);
return targetPage;
}
private List<SessionOrderUser> convertOrder(List<Order> orders) {
if (CollectionUtils.isEmpty(orders)) {
return Collections.emptyList();