package com.panzhihua.sangeshenbian.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.exceptions.ServiceException; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.redis.RedisUtils; import com.panzhihua.sangeshenbian.model.dto.UserIdentityDTO; import com.panzhihua.sangeshenbian.model.entity.Banner; import com.panzhihua.sangeshenbian.model.entity.PartyMember; import com.panzhihua.sangeshenbian.model.entity.SystemUser; import com.panzhihua.sangeshenbian.model.entity.SystemUserLevel; import com.panzhihua.sangeshenbian.model.query.BasePage; import com.panzhihua.sangeshenbian.model.vo.ComplaintTodoVO; import com.panzhihua.sangeshenbian.model.vo.MessageNotificationVO; import com.panzhihua.sangeshenbian.model.vo.PartyCardInfoVO; import com.panzhihua.sangeshenbian.service.*; import com.panzhihua.sangeshenbian.utils.BaiduMapUtil; import com.panzhihua.sangeshenbian.warpper.IdentityInformation; import com.panzhihua.sangeshenbian.warpper.IdentityInformationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import java.util.*; /** * @author mitao * @date 2025/2/23 */ @RestController @RequestMapping("/applet/home") @RequiredArgsConstructor(onConstructor_ = @Lazy) @Api(tags = "首页相关接口") public class HomeController extends BaseController { private final IBannerService bannerService; private final IMessageNotificationService messageNotificationService; private final IComplaintService complaintService; private final ISystemUserService systemUserService; private final IPartyMemberService partyMemberService; private final RedisUtils redisUtils; private final IdentityInformationService identityInformationService; private final ISystemUserLevelService systemUserLevelService; @ApiOperation("获取banner列表") @GetMapping("/banner-list") public R> getBannerList() { return R.ok(bannerService.list()); } @GetMapping("/party-card-info") @ApiOperation("获取党员证信息") public R getPartyCardInfo() { LoginUserInfoVO loginUserInfo = getLoginUserInfo(); // 获取党员信息 PartyMember partyMember = partyMemberService.getOne(new LambdaQueryWrapper() .eq(PartyMember::getPhone, loginUserInfo.getPhone()) .eq(PartyMember::getAuditStatus, 1) .eq(PartyMember::getDelFlag, 0)); PartyCardInfoVO partyCardInfoVO = new PartyCardInfoVO(); partyCardInfoVO.setAvatar(partyMember.getAvatar()); partyCardInfoVO.setName(partyMember.getName()); partyCardInfoVO.setIdCard(partyMember.getIdNumber()); partyCardInfoVO.setDistricts(partyMember.getDistricts()); partyCardInfoVO.setStreet(partyMember.getStreet()); partyCardInfoVO.setCommunity(partyMember.getCommunity()); partyCardInfoVO.setPartyOrganization(partyMember.getPartyOrganization()); return R.ok(partyCardInfoVO); } @PostMapping("/message") @ApiOperation("获取消息列表") public R> getMessageList(@RequestBody BasePage page) { return R.ok(messageNotificationService.getMessageList(page, getUserId())); } @PostMapping("/todo-list") @ApiOperation("获取待办诉求") public R> getTodoList(@RequestBody BasePage page) { return R.ok(complaintService.getTodoList(page, getLoginUserInfo())); } @GetMapping("/current-user-info") @ApiOperation("获取三个身边当前用户信息 用于判断用户是否是上级") public R getCurrentUserInfo() { SystemUser systemUser = systemUserService.getSystemUserAdminByPhone(getLoginUserInfo().getPhone()).orElse(null); Object o1 = redisUtils.get("identity:" + getLoginUserInfo().getPhone()); if(o1!=null){ UserIdentityDTO o2 = (UserIdentityDTO) o1; Integer levelId = o2.getLevelId(); if(levelId!=null) { SystemUserLevel systemUserLevel = systemUserLevelService.getById(levelId); systemUser.setLevelId(systemUserLevel.getLevel()); } } return R.ok(systemUser); } /** * 标记已读 */ @PostMapping("/read") @ApiOperation("标记已读") public R read() { messageNotificationService.read(getLoginUserInfo()); return R.ok(); } /** * 百度地图圆形区域检索 * * @param query * @param location * @return */ @GetMapping("/search-location") @ApiOperation("百度地图圆形区域检索") public R searchLocation(String query, String location) { return R.ok(BaiduMapUtil.searchLocation(query, location)); } @GetMapping("/geoconv") @ApiOperation("百度地图经纬度转换") public R geoconv(String coords) { try { return R.ok(BaiduMapUtil.geoconv(coords)); } catch (Exception e) { throw new RuntimeException(e); } } /** * 获取身份信息 */ @GetMapping("/identity-info") @ApiOperation("获取身份信息") public R getIdentityInfo() { LoginUserInfoVO loginUserInfo = getLoginUserInfo(); IdentityInformation identityInformation = identityInformationService.getIdentityInformation(loginUserInfo); IdentityInformationVO identityInformationVO = new IdentityInformationVO(); BeanUtils.copyProperties(identityInformation, identityInformationVO); return R.ok(identityInformationVO); } /** * 切换身份 */ @GetMapping("/change-identity") @ApiOperation("切换身份") @ApiImplicitParams({ @ApiImplicitParam(name = "identity", value = "身份 1:党员 2:管理员", required = true, dataType = "Integer"), @ApiImplicitParam(name = "levelId", value = "身份层级id,党员身份不传,管理员必传", required = true, dataType = "Integer") }) public R changeIdentity(@RequestParam(value = "identity", required = true) Integer identity, @RequestParam(value = "levelId", required = false) Integer levelId) { LoginUserInfoVO loginUserInfo = getLoginUserInfo(); if (identity.equals(2) && Objects.isNull(levelId)) { throw new ServiceException("管理员所属层级id不能为空"); } // 存储到Redis redisUtils.set("identity:" + loginUserInfo.getPhone(), UserIdentityDTO.builder() .identity(identity) .levelId(levelId) .build()); return R.ok(); } /** * 提示内容确认 */ @GetMapping("/confirm-content") @ApiOperation("提示内容确认") public R confirmContent() { LoginUserInfoVO loginUserInfo = getLoginUserInfo(); redisUtils.set("confirmContent:" + loginUserInfo.getPhone(), 1); return R.ok(); } }