package com.yeshi.location.app.controller.client.api;
|
|
import com.google.gson.*;
|
import com.yeshi.location.app.entity.location.SimpleLocationInfo;
|
import com.yeshi.location.app.entity.sos.EmergencyContacts;
|
import com.yeshi.location.app.entity.sos.SOSRecord;
|
import com.yeshi.location.app.entity.sos.SOSRecordList;
|
import com.yeshi.location.app.entity.sos.SOSTargetInfo;
|
import com.yeshi.location.app.entity.user.UserInfo;
|
import com.yeshi.location.app.service.inter.sos.EmergencyContactsService;
|
import com.yeshi.location.app.service.inter.sos.SOSRecordListService;
|
import com.yeshi.location.app.service.inter.sos.SOSRecordService;
|
import com.yeshi.location.app.service.inter.sos.SOSTargetInfoService;
|
import com.yeshi.location.app.service.inter.user.UserInfoService;
|
import com.yeshi.location.app.service.query.sos.EmergencyContactsQuery;
|
import com.yeshi.location.app.service.query.sos.SOSRecordQuery;
|
import com.yeshi.location.app.service.query.sos.SOSTargetInfoQuery;
|
import com.yeshi.location.app.utils.Constant;
|
import com.yeshi.location.app.utils.annotation.UserLogin;
|
import com.yeshi.location.app.vo.AcceptData;
|
import com.yeshi.location.app.vo.sos.EmergencyContactsVO;
|
import com.yeshi.location.app.vo.sos.SOSRecordVO;
|
import com.yeshi.location.app.vo.user.SimpleUserInfo;
|
import net.sf.json.JSONObject;
|
import net.sf.json.util.JSONUtils;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.TimeUtil;
|
|
import javax.annotation.Resource;
|
import java.lang.reflect.Type;
|
import java.util.*;
|
|
/**
|
* @author hxh
|
* @title: UserController
|
* @description: 用户接口
|
* @date 2021/11/16 17:37
|
*/
|
@Controller
|
@RequestMapping("api/v1/sos")
|
public class SOSController {
|
|
@Resource
|
private SOSRecordService sosRecordService;
|
@Resource
|
private EmergencyContactsService emergencyContactsService;
|
@Resource
|
private SOSTargetInfoService sosTargetInfoService;
|
|
@Resource
|
private SOSRecordListService sosRecordListService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("addEmergencyContacts")
|
public String addEmergencyContacts(AcceptData acceptData, Long uid, String name, String phone, String remarks) {
|
if (StringUtil.isNullOrEmpty(name)) {
|
return JsonUtil.loadFalseResult("请上传昵称");
|
}
|
|
if (StringUtil.isNullOrEmpty(phone) || !StringUtil.isMobile(phone)) {
|
return JsonUtil.loadFalseResult("电话号码格式不对");
|
}
|
|
if (remarks != null && remarks.length() > 128) {
|
return JsonUtil.loadFalseResult("备注过长");
|
}
|
|
UserInfo userInfo = userInfoService.selectValidByPhone(acceptData.getSystem(), phone);
|
|
if (userInfo == null) {
|
return JsonUtil.loadFalseResult("该手机号尚未注册应用");
|
}
|
|
EmergencyContacts contacts = new EmergencyContacts();
|
contacts.setTargetName(name);
|
contacts.setTargetPhone(phone);
|
contacts.setTargetUid(userInfo.getId());
|
contacts.setUid(uid);
|
contacts.setRemarks(remarks);
|
|
try {
|
emergencyContactsService.add(contacts);
|
return JsonUtil.loadTrueResult("");
|
} catch (Exception e) {
|
return JsonUtil.loadFalseResult(e.getMessage());
|
}
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("listEmergencyContacts")
|
public String listEmergencyContacts(AcceptData acceptData, Long uid) {
|
EmergencyContactsQuery query = new EmergencyContactsQuery();
|
query.setUid(uid);
|
List<EmergencyContacts> list = emergencyContactsService.list(query, 1, Constant.PAGE_SIZE);
|
List<EmergencyContactsVO> voList = new ArrayList<>();
|
if (list != null && list.size() > 0) {
|
List<Long> uidList = new ArrayList<>();
|
for (EmergencyContacts contacts : list) {
|
uidList.add(contacts.getTargetUid());
|
}
|
List<UserInfo> userInfoList = userInfoService.list(uidList);
|
Map<Long, SimpleUserInfo> map = new HashMap<>();
|
for (UserInfo user : userInfoList) {
|
map.put(user.getId(), new SimpleUserInfo(user.getId(), user.getNickName(), user.getPortrait()));
|
}
|
for (EmergencyContacts contacts : list) {
|
voList.add(EmergencyContactsVO.create(contacts, map.get(contacts.getTargetUid())));
|
}
|
}
|
long count = emergencyContactsService.count(query);
|
JSONObject data = new JSONObject();
|
data.put("list", voList);
|
data.put("count", count);
|
return JsonUtil.loadTrueResult(data);
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("deleteEmergencyContacts")
|
public String deleteEmergencyContacts(AcceptData acceptData, Long uid, String id) {
|
EmergencyContacts contacts = emergencyContactsService.get(id);
|
if (contacts == null) {
|
return JsonUtil.loadFalseResult("该紧急联系人不存在");
|
}
|
if (!contacts.getUid().equals(uid)) {
|
return JsonUtil.loadFalseResult("无删除权限");
|
}
|
emergencyContactsService.delete(Arrays.asList(new String[]{contacts.getId()}));
|
return JsonUtil.loadTrueResult("");
|
}
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("updateEmergencyContacts")
|
public String updateEmergencyContacts(AcceptData acceptData, Long uid, String id, String name, String phone, String remarks) {
|
EmergencyContacts contacts = emergencyContactsService.get(id);
|
if (contacts == null) {
|
return JsonUtil.loadFalseResult("该紧急联系人不存在");
|
}
|
if (!contacts.getUid().equals(uid)) {
|
return JsonUtil.loadFalseResult("无修改权限");
|
}
|
EmergencyContacts update = new EmergencyContacts();
|
update.setId(id);
|
if (!StringUtil.isNullOrEmpty(phone)) {
|
UserInfo userInfo = userInfoService.selectValidByPhone(acceptData.getSystem(), phone);
|
if (userInfo == null) {
|
return JsonUtil.loadFalseResult("该手机号尚未注册应用");
|
}
|
update.setTargetUid(userInfo.getId());
|
update.setTargetPhone(phone);
|
}
|
update.setTargetName(name);
|
update.setRemarks(remarks);
|
emergencyContactsService.update(update);
|
return JsonUtil.loadTrueResult("");
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("addSOSRecord")
|
public String addSOSRecord(AcceptData acceptData, Long uid, SimpleLocationInfo location) {
|
if (location == null || location.getLongitude() == null || location.getLatitude() == null || location.getAddress() == null) {
|
return JsonUtil.loadFalseResult("定位失败");
|
}
|
|
EmergencyContactsQuery query = new EmergencyContactsQuery();
|
query.setUid(uid);
|
long count = emergencyContactsService.count(query);
|
if (count == 0) {
|
return JsonUtil.loadFalseResult("请先添加紧急联系人");
|
}
|
List<EmergencyContacts> list = emergencyContactsService.list(query, 1, Constant.PAGE_SIZE);
|
|
SOSRecord record = new SOSRecord();
|
record.setUid(uid);
|
record.setLocation(location);
|
record.setContent("");
|
try {
|
sosRecordService.add(record);
|
|
for (EmergencyContacts contacts : list) {
|
SOSTargetInfo info = new SOSTargetInfo();
|
info.setSosId(record.getId());
|
info.setUid(uid);
|
info.setTargetUid(contacts.getTargetUid());
|
sosTargetInfoService.add(info);
|
}
|
return JsonUtil.loadTrueResult("");
|
} catch (Exception e) {
|
return JsonUtil.loadFalseResult(e.getMessage());
|
}
|
}
|
|
/**
|
* @return java.lang.String
|
* @author hxh
|
* @description 获取SOS记录
|
* @date 11:55 2021/11/22
|
* @param: acceptData
|
* @param: uid
|
* @param: page 页码
|
**/
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("getSOSRecordList")
|
public String getSOSRecordList(AcceptData acceptData, Long uid, int page) {
|
UserInfo user = userInfoService.get(uid);
|
|
List<SOSRecordList> recordLists = sosRecordListService.listByUid(uid, page, Constant.PAGE_SIZE);
|
//查询详情
|
List<String> sosIds = new ArrayList<>();
|
List<String> targetIds = new ArrayList<>();
|
for (SOSRecordList recordList : recordLists) {
|
if (recordList.getType() == SOSRecordList.SOSRecordType.initiative) {
|
sosIds.add(recordList.getSourceId());
|
} else {
|
targetIds.add(recordList.getSourceId());
|
}
|
}
|
|
List<SOSRecordVO> voList = new ArrayList<>();
|
List<Long> targetUids = new ArrayList<>();
|
List<SOSRecord> recordList;
|
List<UserInfo> userList;
|
|
//--------求助-------
|
if (sosIds.size() > 0) {
|
recordList = sosRecordService.listDetail(sosIds);
|
|
for (SOSRecord record : recordList) {
|
for (SOSTargetInfo targetInfo : record.getTargetList()) {
|
targetUids.add(targetInfo.getTargetUid());
|
}
|
}
|
//查询备注昵称
|
Map<Long, String> nickNameMap = new HashMap<>();
|
EmergencyContactsQuery query = new EmergencyContactsQuery();
|
query.setUid(uid);
|
List<EmergencyContacts> contacts = emergencyContactsService.list(query, 1, Constant.PAGE_SIZE);
|
for (EmergencyContacts contact : contacts) {
|
nickNameMap.put(contact.getTargetUid(), contact.getTargetName());
|
//删除原始昵称
|
if (!StringUtil.isNullOrEmpty(contact.getTargetName())) {
|
targetUids.remove(contact.getTargetUid());
|
}
|
}
|
//查询原始昵称
|
userList = userInfoService.list(targetUids);
|
for (UserInfo u : userList) {
|
nickNameMap.put(u.getId(), u.getNickName());
|
}
|
|
|
for (SOSRecord record : recordList) {
|
SOSRecordVO vo = new SOSRecordVO();
|
vo.setCreateTime(record.getCreateTime());
|
vo.setDesc(SOSRecordVO.getDesc(record, true));
|
vo.setFrom("由自己发出");
|
vo.setLocation(record.getLocation());
|
vo.setPhone(null);
|
vo.setPortrait(user.getPortrait());
|
vo.setTargetDesc(SOSRecordVO.getTargetDesc(record.getTargetList(), nickNameMap));
|
voList.add(vo);
|
}
|
}
|
|
|
if (targetIds.size() > 0) {
|
//---------被求助--------
|
targetUids.clear();
|
|
//转换
|
List<SOSTargetInfo> targetInfoList = sosTargetInfoService.listByIds(targetIds);
|
sosIds = new ArrayList<>();
|
for (SOSTargetInfo info : targetInfoList) {
|
sosIds.add(info.getSosId());
|
}
|
|
//转换
|
recordList = sosRecordService.listByIds(sosIds);
|
Map<String, SOSRecord> recordMap = new HashMap<>();
|
for (SOSRecord r : recordList) {
|
recordMap.put(r.getId(), r);
|
targetUids.add(r.getUid());
|
}
|
|
Map<Long, UserInfo> userInfoMap = new HashMap<>();
|
userList = userInfoService.list(targetUids);
|
for (UserInfo u : userList) {
|
userInfoMap.put(u.getId(), u);
|
}
|
|
|
for (SOSTargetInfo targetInfo : targetInfoList) {
|
SOSRecordVO vo = new SOSRecordVO();
|
vo.setCreateTime(targetInfo.getCreateTime());
|
vo.setDesc(SOSRecordVO.getDesc(recordMap.get(targetInfo.getSosId()), false));
|
vo.setFrom("由好友发出");
|
vo.setLocation(recordMap.get(targetInfo.getSosId()).getLocation());
|
vo.setPhone(userInfoMap.get(recordMap.get(targetInfo.getSosId()).getUid()).getPhone());
|
vo.setPortrait(userInfoMap.get(recordMap.get(targetInfo.getSosId()).getUid()).getPortrait());
|
vo.setTargetDesc(null);
|
voList.add(vo);
|
}
|
}
|
long count = sosRecordListService.countByUid(uid);
|
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
|
|
@Override
|
public JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) {
|
return date == null ? new JsonPrimitive("") : new JsonPrimitive(TimeUtil.getGernalTime(date.getTime(), "yyyy.MM.dd HH:mm"));
|
}
|
}).create();
|
|
JSONObject data = new JSONObject();
|
data.put("count", count);
|
data.put("list", gson.toJson(voList));
|
return JsonUtil.loadTrueResult(data);
|
}
|
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("clearSOSRecord")
|
public String clearSOSRecord(AcceptData acceptData, Long uid) {
|
sosRecordListService.deleteAll(uid);
|
return JsonUtil.loadTrueResult("");
|
}
|
|
|
/**
|
* @return java.lang.String
|
* @author hxh
|
* @description 获取想我求救的SOS
|
* @date 13:08 2021/11/27
|
* @param: acceptData
|
* @param: uid
|
**/
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("getTargetSOSRecord")
|
public String getTargetSOSRecord(AcceptData acceptData, Long uid) {
|
|
SOSTargetInfoQuery query = new SOSTargetInfoQuery();
|
query.setTargetUid(uid);
|
query.setStatus(SOSTargetInfo.STATUS_UNREAD);
|
List<SOSTargetInfo> list = sosTargetInfoService.list(query, 1, 1);
|
if (list == null || list.size() == 0) {
|
return JsonUtil.loadFalseResult("暂无求助");
|
}
|
return JsonUtil.loadTrueResult(list.get(0));
|
|
}
|
|
@UserLogin(uid = "#uid")
|
@ResponseBody
|
@RequestMapping("readTargetSOS")
|
public String readTargetSOS(AcceptData acceptData, Long uid, String id) {
|
|
SOSTargetInfo targetInfo = sosTargetInfoService.get(id);
|
if (targetInfo == null) {
|
return JsonUtil.loadFalseResult("求助信息不存在");
|
}
|
|
if (!targetInfo.getTargetUid().equals(uid)) {
|
return JsonUtil.loadFalseResult("不是你的求助信息");
|
}
|
SOSTargetInfo update = new SOSTargetInfo();
|
update.setId(id);
|
update.setStatus(SOSTargetInfo.STATUS_READ);
|
update.setStatusDesc("已查阅");
|
update.setReadTime(new Date());
|
sosTargetInfoService.update(update);
|
return JsonUtil.loadTrueResult("");
|
}
|
}
|