From 792a3fd6845a1c9a7a0f4252689009b8519b4535 Mon Sep 17 00:00:00 2001 From: linhw <5331581+linhw11@user.noreply.gitee.com> Date: Wed, 15 May 2024 17:45:31 +0800 Subject: [PATCH] ~ --- server/like-common/pom.xml | 7 + .../java/com/mdd/common/entity/AddressVo.java | 24 +++ .../java/com/mdd/common/entity/AppCircle.java | 5 + .../mdd/common/entity/AppCircleAddress.java | 39 +++++ .../common/mapper/AppCircleAddressMapper.java | 13 ++ .../mdd/common/mapper/AppCircleMapper.java | 11 ++ .../java/com/mdd/common/vo/AppCircleVo.java | 75 +++++++++ .../main/resources/mapper/AppCircleMapper.xml | 92 +++++++++++ .../AppCircleAddressController.java | 69 ++++++++ .../front/controller/AppCircleController.java | 18 +++ .../service/IAppCircleAddressService.java | 60 +++++++ .../mdd/front/service/IAppCircleService.java | 4 + .../impl/AppCircleAddressServiceImpl.java | 153 ++++++++++++++++++ .../service/impl/AppCircleServiceImpl.java | 121 +++++++++++++- .../AppCircleAddressCreateValidate.java | 27 ++++ .../AppCircleAddressSearchValidate.java | 23 +++ .../AppCircleAddressUpdateValidate.java | 36 +++++ .../front/vo/AppCircleAddressDetailVo.java | 28 ++++ .../front/vo/AppCircleAddressListedVo.java | 34 ++++ .../com/mdd/front/vo/AppCircleListedVo.java | 15 ++ 20 files changed, 853 insertions(+), 1 deletion(-) create mode 100644 server/like-common/src/main/java/com/mdd/common/entity/AddressVo.java create mode 100644 server/like-common/src/main/java/com/mdd/common/entity/AppCircleAddress.java create mode 100644 server/like-common/src/main/java/com/mdd/common/mapper/AppCircleAddressMapper.java create mode 100644 server/like-common/src/main/java/com/mdd/common/vo/AppCircleVo.java create mode 100644 server/like-common/src/main/resources/mapper/AppCircleMapper.xml create mode 100644 server/like-front/src/main/java/com/mdd/front/controller/AppCircleAddressController.java create mode 100644 server/like-front/src/main/java/com/mdd/front/service/IAppCircleAddressService.java create mode 100644 server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleAddressServiceImpl.java create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressCreateValidate.java create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressSearchValidate.java create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressUpdateValidate.java create mode 100644 server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressDetailVo.java create mode 100644 server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressListedVo.java diff --git a/server/like-common/pom.xml b/server/like-common/pom.xml index 08b8f42..c1b205d 100644 --- a/server/like-common/pom.xml +++ b/server/like-common/pom.xml @@ -214,6 +214,13 @@ com.github.binarywang weixin-java-pay + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.2.10 + \ No newline at end of file diff --git a/server/like-common/src/main/java/com/mdd/common/entity/AddressVo.java b/server/like-common/src/main/java/com/mdd/common/entity/AddressVo.java new file mode 100644 index 0000000..5e28221 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/entity/AddressVo.java @@ -0,0 +1,24 @@ +package com.mdd.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("途经位置经纬度信息") +public class AddressVo implements Serializable { + + private static final long serialVersionUID = 1L; + + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + +} \ No newline at end of file diff --git a/server/like-common/src/main/java/com/mdd/common/entity/AppCircle.java b/server/like-common/src/main/java/com/mdd/common/entity/AppCircle.java index c666d96..367d6fe 100644 --- a/server/like-common/src/main/java/com/mdd/common/entity/AppCircle.java +++ b/server/like-common/src/main/java/com/mdd/common/entity/AppCircle.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.List; @Data @ApiModel("圈子信息实体") @@ -69,4 +70,8 @@ public class AppCircle implements Serializable { @ApiModelProperty(value = "删除时间") private Long deleteTime; + private String adminIds; + + private List ids; + } \ No newline at end of file diff --git a/server/like-common/src/main/java/com/mdd/common/entity/AppCircleAddress.java b/server/like-common/src/main/java/com/mdd/common/entity/AppCircleAddress.java new file mode 100644 index 0000000..9ddbacb --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/entity/AppCircleAddress.java @@ -0,0 +1,39 @@ +package com.mdd.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("圈子途径位置信息实体") +public class AppCircleAddress implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + + @ApiModelProperty(value = "创建时间") + private Long createTime; + + @ApiModelProperty(value = "更新时间") + private Long updateTime; + + @ApiModelProperty(value = "删除时间") + private Long deleteTime; + +} \ No newline at end of file diff --git a/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleAddressMapper.java b/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleAddressMapper.java new file mode 100644 index 0000000..bce74e4 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleAddressMapper.java @@ -0,0 +1,13 @@ +package com.mdd.common.mapper; + +import com.mdd.common.core.basics.IBaseMapper; +import com.mdd.common.entity.AppCircleAddress; +import org.apache.ibatis.annotations.Mapper; + +/** + * 圈子途径位置信息Mapper + * @author LikeAdmin + */ +@Mapper +public interface AppCircleAddressMapper extends IBaseMapper { +} diff --git a/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleMapper.java b/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleMapper.java index 0ab8330..4be6c8b 100644 --- a/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleMapper.java +++ b/server/like-common/src/main/java/com/mdd/common/mapper/AppCircleMapper.java @@ -1,8 +1,13 @@ package com.mdd.common.mapper; import com.mdd.common.core.basics.IBaseMapper; +import com.mdd.common.entity.AddressVo; import com.mdd.common.entity.AppCircle; +import com.mdd.common.vo.AppCircleVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 圈子信息Mapper @@ -10,4 +15,10 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface AppCircleMapper extends IBaseMapper { + List circleList(AppCircle appCircle); + List recommendCircleList(AppCircle appCircle); + + List listFriendByUserId(@Param("ids") List ids); + + List circleUserGroupUser(@Param("circleId") Long circleId); } diff --git a/server/like-common/src/main/java/com/mdd/common/vo/AppCircleVo.java b/server/like-common/src/main/java/com/mdd/common/vo/AppCircleVo.java new file mode 100644 index 0000000..7142480 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/vo/AppCircleVo.java @@ -0,0 +1,75 @@ +package com.mdd.common.vo; + +import com.mdd.common.entity.AppCircleAddress; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +@ApiModel("圈子信息列表Vo") +public class AppCircleVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "圈子名字") + private String name; + + @ApiModelProperty(value = "圈子封面") + private String imgUrl; + + @ApiModelProperty(value = "圈子类型1私密群2好友圈3位置圈") + private Integer type; + + @ApiModelProperty(value = "圈子类型补充1固定位置2可变位置") + private Integer typeInfo; + + @ApiModelProperty(value = "创建用户") + private Integer userId; + + @ApiModelProperty(value = "是否开启sos通知1是2否") + private Integer isSos; + + @ApiModelProperty(value = "sos消耗金额") + private Integer sosUse; + + @ApiModelProperty(value = "圈子内容是否仅圈友可写入1是2否") + private Integer isWrite; + + @ApiModelProperty(value = "圈子内容是否仅圈友可见1是2否") + private Integer isRead; + + @ApiModelProperty(value = "加入是否需要审核") + private Integer isCheck; + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + @ApiModelProperty(value = "用户数量") + private Integer userNum; + + @ApiModelProperty(value = "是否管理员1是2否") + private Integer isAdmin; + + @ApiModelProperty(value = "距离") + private String distance; + + @ApiModelProperty(value = "途经位置经纬度列表") + private List addressVoList; + + +} diff --git a/server/like-common/src/main/resources/mapper/AppCircleMapper.xml b/server/like-common/src/main/resources/mapper/AppCircleMapper.xml new file mode 100644 index 0000000..5de0552 --- /dev/null +++ b/server/like-common/src/main/resources/mapper/AppCircleMapper.xml @@ -0,0 +1,92 @@ + + + + + a.id as "id", + a.name as "name", + a.img_url as "img_url", + a.content as "content", + a.type as "type", + a.type_info as "typeInfo", + a.user_id as "userId", + a.is_sos as "isSos", + a.sos_use as "sosUse", + a.is_write as "isWrite", + a.is_read as "isRead", + a.is_check as "isCheck", + a.longitude as "longitude", + a.latitude as "latitude", + a.is_delete as "isDelete", + a.create_time as "createTime", + a.update_time as "updateTime", + a.delete_time as "deleteTime" + + + + + + + + + + + \ No newline at end of file diff --git a/server/like-front/src/main/java/com/mdd/front/controller/AppCircleAddressController.java b/server/like-front/src/main/java/com/mdd/front/controller/AppCircleAddressController.java new file mode 100644 index 0000000..b5793db --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/controller/AppCircleAddressController.java @@ -0,0 +1,69 @@ +package com.mdd.front.controller; + +import com.mdd.front.aop.Log; +import com.mdd.front.service.IAppCircleAddressService; +import com.mdd.front.validate.common.IdValidate; +import com.mdd.front.validate.AppCircleAddressCreateValidate; +import com.mdd.front.validate.AppCircleAddressUpdateValidate; +import com.mdd.front.validate.AppCircleAddressSearchValidate; +import com.mdd.front.validate.common.PageValidate; +import com.mdd.front.vo.AppCircleAddressListedVo; +import com.mdd.front.vo.AppCircleAddressDetailVo; +import com.mdd.common.core.AjaxResult; +import com.mdd.common.core.PageResult; +import com.mdd.common.validator.annotation.IDMust; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("api/address") +@Api(tags = "圈子途径位置信息管理") +public class AppCircleAddressController { + + @Resource + IAppCircleAddressService iAppCircleAddressService; + + @GetMapping("/list") + @ApiOperation(value="圈子途径位置信息列表") + public AjaxResult> list(@Validated PageValidate pageValidate, + @Validated AppCircleAddressSearchValidate searchValidate) { + PageResult list = iAppCircleAddressService.list(pageValidate, searchValidate); + return AjaxResult.success(list); + } + + @GetMapping("/detail") + @ApiOperation(value="圈子途径位置信息详情") + public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { + AppCircleAddressDetailVo detail = iAppCircleAddressService.detail(id); + return AjaxResult.success(detail); + } + + @Log(title = "圈子途径位置信息新增") + @PostMapping("/add") + @ApiOperation(value="圈子途径位置信息新增") + public AjaxResult add(@Validated @RequestBody AppCircleAddressCreateValidate createValidate) { + iAppCircleAddressService.add(createValidate); + return AjaxResult.success(); + } + + @Log(title = "圈子途径位置信息编辑") + @PostMapping("/edit") + @ApiOperation(value="圈子途径位置信息编辑") + public AjaxResult edit(@Validated @RequestBody AppCircleAddressUpdateValidate updateValidate) { + iAppCircleAddressService.edit(updateValidate); + return AjaxResult.success(); + } + + @Log(title = "圈子途径位置信息删除") + @PostMapping("/del") + @ApiOperation(value="圈子途径位置信息删除") + public AjaxResult del(@Validated @RequestBody IdValidate idValidate) { + iAppCircleAddressService.del(idValidate.getId()); + return AjaxResult.success(); + } + +} diff --git a/server/like-front/src/main/java/com/mdd/front/controller/AppCircleController.java b/server/like-front/src/main/java/com/mdd/front/controller/AppCircleController.java index fed8737..403c062 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/AppCircleController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/AppCircleController.java @@ -1,5 +1,7 @@ package com.mdd.front.controller; +import com.github.pagehelper.PageInfo; +import com.mdd.common.vo.AppCircleVo; import com.mdd.front.aop.Log; import com.mdd.front.service.IAppCircleService; import com.mdd.front.validate.AppCircleCreateValidate; @@ -35,6 +37,22 @@ public class AppCircleController { return AjaxResult.success(list); } + @GetMapping("/circleList") + @ApiOperation(value="我的圈子列表") + public AjaxResult> circleList(@Validated PageValidate pageValidate, + @Validated AppCircleSearchValidate searchValidate) { + PageInfo list = iAppCircleService.circleList(pageValidate, searchValidate); + return AjaxResult.success(list); + } + + @GetMapping("/recommendCircleList") + @ApiOperation(value="推荐圈子列表") + public AjaxResult> recommendCircleList(@Validated PageValidate pageValidate, + @Validated AppCircleSearchValidate searchValidate) { + PageInfo list = iAppCircleService.recommendCircleList(pageValidate, searchValidate); + return AjaxResult.success(list); + } + @GetMapping("/detail") @ApiOperation(value="圈子信息详情") public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { diff --git a/server/like-front/src/main/java/com/mdd/front/service/IAppCircleAddressService.java b/server/like-front/src/main/java/com/mdd/front/service/IAppCircleAddressService.java new file mode 100644 index 0000000..583c0fd --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/service/IAppCircleAddressService.java @@ -0,0 +1,60 @@ +package com.mdd.front.service; + +import com.mdd.front.validate.common.PageValidate; +import com.mdd.front.validate.AppCircleAddressCreateValidate; +import com.mdd.front.validate.AppCircleAddressUpdateValidate; +import com.mdd.front.validate.AppCircleAddressSearchValidate; +import com.mdd.front.vo.AppCircleAddressListedVo; +import com.mdd.front.vo.AppCircleAddressDetailVo; +import com.mdd.common.core.PageResult; + +/** + * 圈子途径位置信息服务接口类 + * @author LikeAdmin + */ +public interface IAppCircleAddressService { + + /** + * 圈子途径位置信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + PageResult list(PageValidate pageValidate, AppCircleAddressSearchValidate searchValidate); + + /** + * 圈子途径位置信息详情 + * + * @author LikeAdmin + * @param id 主键ID + * @return AppCircleAddressDetailVo + */ + AppCircleAddressDetailVo detail(Integer id); + + /** + * 圈子途径位置信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + void add(AppCircleAddressCreateValidate createValidate); + + /** + * 圈子途径位置信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + void edit(AppCircleAddressUpdateValidate updateValidate); + + /** + * 圈子途径位置信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/server/like-front/src/main/java/com/mdd/front/service/IAppCircleService.java b/server/like-front/src/main/java/com/mdd/front/service/IAppCircleService.java index c7e1d57..60651a0 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IAppCircleService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IAppCircleService.java @@ -1,6 +1,8 @@ package com.mdd.front.service; +import com.github.pagehelper.PageInfo; import com.mdd.common.core.AjaxResult; +import com.mdd.common.vo.AppCircleVo; import com.mdd.front.validate.common.PageValidate; import com.mdd.front.validate.AppCircleCreateValidate; import com.mdd.front.validate.AppCircleUpdateValidate; @@ -24,6 +26,8 @@ public interface IAppCircleService { * @return PageResult */ PageResult list(PageValidate pageValidate, AppCircleSearchValidate searchValidate); + PageInfo circleList(PageValidate pageValidate, AppCircleSearchValidate searchValidate); + PageInfo recommendCircleList(PageValidate pageValidate, AppCircleSearchValidate searchValidate); /** * 圈子信息详情 diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleAddressServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleAddressServiceImpl.java new file mode 100644 index 0000000..4e2f1e5 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleAddressServiceImpl.java @@ -0,0 +1,153 @@ +package com.mdd.front.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.yulichang.query.MPJQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mdd.front.validate.common.PageValidate; +import com.mdd.front.service.IAppCircleAddressService; +import com.mdd.front.validate.AppCircleAddressCreateValidate; +import com.mdd.front.validate.AppCircleAddressUpdateValidate; +import com.mdd.front.validate.AppCircleAddressSearchValidate; +import com.mdd.front.vo.AppCircleAddressListedVo; +import com.mdd.front.vo.AppCircleAddressDetailVo; +import com.mdd.common.config.GlobalConfig; +import com.mdd.common.core.PageResult; +import com.mdd.common.entity.AppCircleAddress; +import com.mdd.common.mapper.AppCircleAddressMapper; +import com.mdd.common.util.ListUtils; +import com.mdd.common.util.TimeUtils; +import com.mdd.common.util.UrlUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 圈子途径位置信息实现类 + * @author LikeAdmin + */ +@Service +public class AppCircleAddressServiceImpl implements IAppCircleAddressService { + + @Resource + AppCircleAddressMapper appCircleAddressMapper; + + /** + * 圈子途径位置信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageValidate pageValidate, AppCircleAddressSearchValidate searchValidate) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("id"); + + appCircleAddressMapper.setSearch(queryWrapper, searchValidate, new String[]{ + "=:circleId@circle_id:int", + "=:longitude:str", + "=:latitude:str", + }); + + IPage iPage = appCircleAddressMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for(AppCircleAddress item : iPage.getRecords()) { + AppCircleAddressListedVo vo = new AppCircleAddressListedVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 圈子途径位置信息详情 + * + * @author LikeAdmin + * @param id 主键参数 + * @return AppCircleAddress + */ + @Override + public AppCircleAddressDetailVo detail(Integer id) { + AppCircleAddress model = appCircleAddressMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + AppCircleAddressDetailVo vo = new AppCircleAddressDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 圈子途径位置信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + @Override + public void add(AppCircleAddressCreateValidate createValidate) { + AppCircleAddress model = new AppCircleAddress(); + model.setCircleId(createValidate.getCircleId()); + model.setLongitude(createValidate.getLongitude()); + model.setLatitude(createValidate.getLatitude()); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setUpdateTime(System.currentTimeMillis() / 1000); + appCircleAddressMapper.insert(model); + } + + /** + * 圈子途径位置信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + @Override + public void edit(AppCircleAddressUpdateValidate updateValidate) { + AppCircleAddress model = appCircleAddressMapper.selectOne( + new QueryWrapper() + .eq("id", updateValidate.getId()) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(updateValidate.getId()); + model.setCircleId(updateValidate.getCircleId()); + model.setLongitude(updateValidate.getLongitude()); + model.setLatitude(updateValidate.getLatitude()); + model.setUpdateTime(System.currentTimeMillis() / 1000); + appCircleAddressMapper.updateById(model); + } + + /** + * 圈子途径位置信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + @Override + public void del(Integer id) { + AppCircleAddress model = appCircleAddressMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + appCircleAddressMapper.delete(new QueryWrapper().eq("id", id)); + } + +} diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleServiceImpl.java index b9b30be..0ce0591 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/AppCircleServiceImpl.java @@ -3,26 +3,37 @@ package com.mdd.front.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.mdd.common.core.AjaxResult; +import com.mdd.common.entity.AppCircleAddress; import com.mdd.common.entity.AppCircleUser; +import com.mdd.common.entity.AppFriend; +import com.mdd.common.mapper.AppCircleAddressMapper; import com.mdd.common.mapper.AppCircleUserMapper; +import com.mdd.common.mapper.AppFriendMapper; +import com.mdd.common.vo.AppCircleVo; import com.mdd.front.validate.common.PageValidate; import com.mdd.front.service.IAppCircleService; import com.mdd.front.validate.AppCircleCreateValidate; import com.mdd.front.validate.AppCircleUpdateValidate; import com.mdd.front.validate.AppCircleSearchValidate; -import com.mdd.front.vo.AppCircleListedVo; + import com.mdd.front.vo.AppCircleDetailVo; import com.mdd.common.core.PageResult; import com.mdd.common.entity.AppCircle; import com.mdd.common.mapper.AppCircleMapper; import com.mdd.common.util.TimeUtils; +import com.mdd.front.vo.AppCircleListedVo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; + +import static java.lang.Math.*; /** * 圈子信息实现类 @@ -34,9 +45,15 @@ public class AppCircleServiceImpl implements IAppCircleService { @Resource AppCircleMapper appCircleMapper; + @Resource + AppCircleAddressMapper appCircleAddressMapper; + @Resource AppCircleUserMapper appCircleUserMapper; + @Resource + AppFriendMapper appFriendMapper; + /** * 圈子信息列表 * @@ -84,6 +101,97 @@ public class AppCircleServiceImpl implements IAppCircleService { return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); } + @Override + public PageInfo circleList(PageValidate pageValidate, AppCircleSearchValidate searchValidate) { + AppCircle appCircle = new AppCircle(); + BeanUtils.copyProperties(searchValidate,appCircle); + Integer pageSize = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + PageHelper.startPage(pageSize, limit); + PageInfo page = new PageInfo(appCircleMapper.circleList(appCircle)); + List list = page.getList(); + for (AppCircleVo circle : list) { + // 计算位置 + if (circle.getType() == 3) { + circle.setDistance(calculateDistance( + Double.valueOf(searchValidate.getLatitude()),Double.valueOf(searchValidate.getLongitude()), + Double.valueOf(circle.getLatitude()),Double.valueOf(circle.getLongitude()))); + // 途经位置 + if (circle.getTypeInfo() == 2) { + List appCircleAddresses = appCircleAddressMapper.selectList(new QueryWrapper() + .eq("circle_id",circle.getId()) + ); + circle.setAddressVoList(appCircleAddresses); + } + } + } + page.setList(list); + return page; + } + + @Override + public PageInfo recommendCircleList(PageValidate pageValidate, AppCircleSearchValidate searchValidate) { + AppCircle appCircle = new AppCircle(); + BeanUtils.copyProperties(searchValidate,appCircle); + if (appCircle.getType() == null) { + appCircle.setType(2); + } + // 查询我的好友 + List friends = appFriendMapper.selectList(new QueryWrapper() + .eq("user_id",appCircle.getUserId()) + ); + List friendIds = friends.stream().map(x->x.getFriendId()).collect(Collectors.toList()); + // 好友的圈子 + if (friendIds != null && friendIds.size() > 0) { + List circleIds = appCircleMapper.listFriendByUserId(friendIds); + appCircle.setIds(circleIds); + } + Integer pageSize = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + PageHelper.startPage(pageSize, limit); + PageInfo page = new PageInfo(appCircleMapper.recommendCircleList(appCircle)); + List list = page.getList(); + for (AppCircleVo circle : list) { + // 计算位置 + if (circle.getType() == 3) { + circle.setDistance(calculateDistance( + Double.valueOf(searchValidate.getLatitude()),Double.valueOf(searchValidate.getLongitude()), + Double.valueOf(circle.getLatitude()),Double.valueOf(circle.getLongitude()))); + // 途经位置 + if (circle.getTypeInfo() == 2) { + List appCircleAddresses = appCircleAddressMapper.selectList(new QueryWrapper() + .eq("circle_id",circle.getId()) + ); + circle.setAddressVoList(appCircleAddresses); + } + } + } + page.setList(list); + return page; + } + + private static final double EARTH_RADIUS = 6371000; // 地球半径,单位米 + + public static String calculateDistance(double lat1, double lon1, double lat2, double lon2) { + double latDistance = toRadians(lat2 - lat1); + double lonDistance = toRadians(lon2 - lon2); + double a = sin(latDistance / 2) * sin(latDistance / 2) + + cos(toRadians(lat1)) * cos(toRadians(lat2)) * + sin(lonDistance / 2) * sin(lonDistance / 2); + double c = 2 * atan2(sqrt(a), sqrt(1 - a)); + String d = (EARTH_RADIUS * c) + ""; + d = d.substring(0,d.indexOf(".")); + return d; + } + + public static void main(String[] args) { + // 示例:计算从当前地址(纬度40.7128,经度-74.0060)到另一个地址的距离 + String distance = calculateDistance(31.191648 + , 121.313248, 31.183105 + , 121.263785); + System.out.println("距离: " + distance + " 米"); + } + /** * 圈子信息详情 * @@ -137,6 +245,7 @@ public class AppCircleServiceImpl implements IAppCircleService { model.setLatitude(createValidate.getLatitude()); model.setCreateTime(System.currentTimeMillis() / 1000); model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setAdminIds(model.getUserId() + ","); appCircleMapper.insert(model); // 保存群主为群内用户信息 @@ -146,7 +255,17 @@ public class AppCircleServiceImpl implements IAppCircleService { appCircleUser.setUserId(createValidate.getUserId()); appCircleUser.setLatitude(createValidate.getLatitude()); appCircleUser.setLongitude(createValidate.getLongitude()); + appCircleUser.setCreateTime(System.currentTimeMillis() / 1000); appCircleUserMapper.insert(appCircleUser); + + if (createValidate.getTypeInfo() == 2) { + AppCircleAddress appCircleAddress = new AppCircleAddress(); + appCircleAddress.setCircleId(model.getId()); + appCircleAddress.setLatitude(model.getLatitude()); + appCircleAddress.setLongitude(model.getLongitude()); + appCircleAddress.setCreateTime(System.currentTimeMillis() / 1000); + appCircleAddressMapper.insert(appCircleAddress); + } return AjaxResult.success(); } diff --git a/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressCreateValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressCreateValidate.java new file mode 100644 index 0000000..6e320d4 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressCreateValidate.java @@ -0,0 +1,27 @@ +package com.mdd.front.validate; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; +import javax.validation.constraints.*; + +@Data +@ApiModel("圈子途径位置信息创建参数") +public class AppCircleAddressCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "circleId参数缺失") + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @NotNull(message = "longitude参数缺失") + @ApiModelProperty(value = "经度") + private String longitude; + + @NotNull(message = "latitude参数缺失") + @ApiModelProperty(value = "纬度") + private String latitude; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressSearchValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressSearchValidate.java new file mode 100644 index 0000000..401ecc2 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressSearchValidate.java @@ -0,0 +1,23 @@ +package com.mdd.front.validate; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; + +@Data +@ApiModel("圈子途径位置信息搜素参数") +public class AppCircleAddressSearchValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressUpdateValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressUpdateValidate.java new file mode 100644 index 0000000..060c5ac --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/AppCircleAddressUpdateValidate.java @@ -0,0 +1,36 @@ +package com.mdd.front.validate; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; +import javax.validation.constraints.*; +import com.mdd.common.validator.annotation.IDMust; + +/** + * 圈子途径位置信息参数 + * @author LikeAdmin + */ +@Data +@ApiModel("圈子途径位置信息更新参数") +public class AppCircleAddressUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @IDMust(message = "id参数必传且需大于0") + @ApiModelProperty(value = "主键") + private Integer id; + + @NotNull(message = "circleId参数缺失") + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @NotNull(message = "longitude参数缺失") + @ApiModelProperty(value = "经度") + private String longitude; + + @NotNull(message = "latitude参数缺失") + @ApiModelProperty(value = "纬度") + private String latitude; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressDetailVo.java b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressDetailVo.java new file mode 100644 index 0000000..ab6c027 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressDetailVo.java @@ -0,0 +1,28 @@ +package com.mdd.front.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("圈子途径位置信息详情Vo") +public class AppCircleAddressDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + + +} diff --git a/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressListedVo.java b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressListedVo.java new file mode 100644 index 0000000..7ee74a3 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleAddressListedVo.java @@ -0,0 +1,34 @@ +package com.mdd.front.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("圈子途径位置信息列表Vo") +public class AppCircleAddressListedVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "圈子id") + private Integer circleId; + + @ApiModelProperty(value = "经度") + private String longitude; + + @ApiModelProperty(value = "纬度") + private String latitude; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + +} diff --git a/server/like-front/src/main/java/com/mdd/front/vo/AppCircleListedVo.java b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleListedVo.java index 5424f7a..65cd608 100644 --- a/server/like-front/src/main/java/com/mdd/front/vo/AppCircleListedVo.java +++ b/server/like-front/src/main/java/com/mdd/front/vo/AppCircleListedVo.java @@ -1,10 +1,13 @@ package com.mdd.front.vo; +import com.mdd.common.entity.AddressVo; +import com.mdd.common.entity.AppCircleAddress; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.List; @Data @ApiModel("圈子信息列表Vo") @@ -57,5 +60,17 @@ public class AppCircleListedVo implements Serializable { @ApiModelProperty(value = "更新时间") private String updateTime; + @ApiModelProperty(value = "用户数量") + private Integer userNum; + + @ApiModelProperty(value = "是否管理员1是2否") + private Integer isAdmin; + + @ApiModelProperty(value = "距离") + private String distance; + + @ApiModelProperty(value = "途经位置经纬度列表") + private List addressVoList; + }