From 7f2d3e9bcb89311a5cbfaa617fde71ea412f9bc3 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 16 Sep 2022 11:01:34 +0800 Subject: [PATCH] 20220902 --- src/main/resources/mapper/modules/MallElectronicFenceMapper.xml | 11 +++ src/main/resources/mapper/modules/MallTeamLeaderMapper.xml | 18 ++++++ src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java | 2 src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java | 20 +++++- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java | 59 +++++++++++++++---- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 16 ++-- src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java | 2 src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java | 4 + src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java | 3 + src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java | 2 11 files changed, 113 insertions(+), 26 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java index 6db1995..70544d8 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java @@ -44,7 +44,7 @@ }) @PostMapping(value = "/leaderList") public FebsResponse leaderList(@RequestBody @Valid ApiLeaderListDto apiLeaderListDto) { - return new FebsResponse().success().data(iApiMallTeamLeaderService.findLeaderListInPage(apiLeaderListDto)); + return iApiMallTeamLeaderService.findLeaderListInPage(apiLeaderListDto); } /** diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java index fb408d8..b5ed132 100644 --- a/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallTeamLeaderConversion.java @@ -25,5 +25,5 @@ public abstract MallTeamLeader adminDtoToEntity(AdminLeaderAddDto adminLeaderAddDto); - + public abstract ApiLeaderListVo entityToApiVo(MallTeamLeader mallTeamLeader); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java index 67fbc22..3e0e550 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallElectronicFenceMapper.java @@ -4,7 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface MallElectronicFenceMapper extends BaseMapper<MallElectronicFence> { MallElectronicFence selectByTeamLeaderCode(@Param("teamLeaderCode")String uniqueCode); + + List<MallElectronicFence> selectAllOnlineLeader(); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java index c44fce7..499da52 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallTeamLeaderMapper.java @@ -32,4 +32,6 @@ IPage<MallLeaderStock> selectleaderGoodsStockListInPage(Page<MallLeaderStock> page, @Param("record")MallLeaderStock mallLeaderStock); MallTeamLeader selectLeaderByUniqueCodeAndOrderBycreateTime(@Param("uniqueCode")String inviteId); + + MallTeamLeader selectByFenceIdAndFenceNameAndLonAndLat(@Param("longitude")Double longitude, @Param("latitude")Double latitude,@Param("fenceId")String gfid, @Param("fenceName")String gfname); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java index 12b69cc..83825fa 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java @@ -14,7 +14,7 @@ FebsResponse applyLeader(ApiApplayLeaderDto apiApplayLeaderDto); - List<ApiLeaderListVo> findLeaderListInPage(ApiLeaderListDto apiLeaderListDto); + FebsResponse findLeaderListInPage(ApiLeaderListDto apiLeaderListDto); FebsResponse leaderState(); diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java index 32dc633..a7c9f40 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IMallElectronicFenceService.java @@ -16,5 +16,8 @@ String fenceDelete(String gaodeKey,String serviceId,String fenceId); + /* + {"data":{"count":1,"results":[{"gfid":800899,"gfname":"87053658_fence","in":0}]},"errcode":10000,"errdetail":null,"errmsg":"OK"} + */ String fenceToLocation(String gaodeKey,String serviceId,String locationLonglat,String fenceId); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 86f5b94..f9b0dc0 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -96,14 +96,14 @@ //订单范围内才允许下单 MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId()); - MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); - if(ObjectUtil.isNotEmpty(mallElectronicFence)){ - String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(), - mallElectronicFence.getServiceId(), address.getLongitude() + "," + address.getLatitude(), mallElectronicFence.getGid()); - if("1".equals(inStr)){ - throw new FebsException("不在当前团长的配送范围内"); - } - } +// MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); +// if(ObjectUtil.isNotEmpty(mallElectronicFence)){ +// String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(), +// mallElectronicFence.getServiceId(), address.getLongitude() + "," + address.getLatitude(), mallElectronicFence.getGid()); +// if("1".equals(inStr)){ +// throw new FebsException("不在当前团长的配送范围内"); +// } +// } String orderNo = MallUtils.getOrderNum(); MallOrderInfo orderInfo = new MallOrderInfo(); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java index 52a049b..8c0aa60 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java @@ -2,9 +2,9 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.*; +import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.LoginUserUtil; -import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.mall.conversion.MallLeaderAchieveConversion; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; @@ -12,19 +12,20 @@ import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; -import cc.mrbird.febs.mall.service.IAdminMallOrderService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.pay.model.OrderStateDto; import cc.mrbird.febs.pay.service.IXcxPayService; -import cc.mrbird.febs.pay.util.WechatConfigure; import cc.mrbird.febs.pay.util.WeixinServiceUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -36,10 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j @Service @@ -64,6 +62,8 @@ private final MallMoneyFlowMapper mallMoneyFlowMapper; private final MallGoodsMapper mallGoodsMapper; private final MallGoodsSkuMapper mallGoodsSkuMapper; + private final MallElectronicFenceMapper mallElectronicFenceMapper; + private final IMallElectronicFenceServiceImpl iMallElectronicFenceService; @Override @Transactional @@ -89,11 +89,47 @@ return new FebsResponse().success().message("申请成功"); } + + @Override - public List<ApiLeaderListVo> findLeaderListInPage(ApiLeaderListDto apiLeaderListDto) { - Page<MallTeamLeader> page = new Page<>(apiLeaderListDto.getPageNum(), apiLeaderListDto.getPageSize()); - IPage<MallTeamLeader> mallTeamLeaderIPage = this.baseMapper.selectApiLeaderListInPage(page, apiLeaderListDto); - return MallTeamLeaderConversion.INSTANCE.entitysToVos(mallTeamLeaderIPage.getRecords()); + public FebsResponse findLeaderListInPage(ApiLeaderListDto apiLeaderListDto) { + //根据当前位置的经纬度查询在所属配送区域内的团长 + List<MallElectronicFence> mallElectronicFences = mallElectronicFenceMapper.selectAllOnlineLeader(); + List<ApiLeaderListVo> apiLeaderListVos = new ArrayList<>(); + if(CollUtil.isEmpty(mallElectronicFences)){ + return new FebsResponse().success().data(apiLeaderListVos); + } + StringBuffer fenceIdStringBuffer = new StringBuffer(); + for(MallElectronicFence mallElectronicFence : mallElectronicFences){ + fenceIdStringBuffer.append(mallElectronicFence.getGid()).append(","); + } + String fenceIdStr = fenceIdStringBuffer.substring(0, fenceIdStringBuffer.length() - 1); + //{"data":{"count":1,"results":[{"gfid":800899,"gfname":"87053658_fence","in":0}]},"errcode":10000,"errdetail":null,"errmsg":"OK"} + String resultsStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFences.get(0).getGKey(), + mallElectronicFences.get(0).getServiceId(), + apiLeaderListDto.getLongitude() + "," + apiLeaderListDto.getLatitude(), + fenceIdStr); + if("fail".equals(resultsStr)){ + return new FebsResponse().success().data(apiLeaderListVos); + } + + JSONArray objects = JSONUtil.parseArray(resultsStr); + for(Object obj : objects){ + //{"gfid":800899,"gfname":"87053658_fence","in":0} + JSONObject jsonObject = JSONUtil.parseObj(obj); + String gfid = jsonObject.get("gfid").toString(); + String in = jsonObject.get("in").toString(); + String gfname = jsonObject.get("gfname").toString(); + //指定坐标是否在围栏中 + //1:在, + //0:不在; + if("1".equals(in)){ + MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectByFenceIdAndFenceNameAndLonAndLat(apiLeaderListDto.getLongitude(), apiLeaderListDto.getLatitude(),gfid,gfname); + ApiLeaderListVo apiLeaderListVo = MallTeamLeaderConversion.INSTANCE.entityToApiVo(mallTeamLeader); + apiLeaderListVos.add(apiLeaderListVo); + } + } + return new FebsResponse().success().data(apiLeaderListVos); } @Override @@ -237,7 +273,6 @@ //经纬度定位 }else if(longitude != 0 && latitude != 0){ mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude); - //直接进入,默认选择列表第一个 }else{ List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList(); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java index bc83c2f..4ae5911 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/IMallElectronicFenceServiceImpl.java @@ -4,6 +4,8 @@ import cc.mrbird.febs.mall.entity.MallElectronicFence; import cc.mrbird.febs.mall.mapper.MallElectronicFenceMapper; import cc.mrbird.febs.mall.service.IMallElectronicFenceService; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -274,11 +276,23 @@ String dataStr = maps.get("data").toString(); cn.hutool.json.JSONObject dataResults = JSONUtil.parseObj(dataStr); String resultsStr = dataResults.get("results").toString(); - cn.hutool.json.JSONObject resultsStrJson = JSONUtil.parseObj(resultsStr); - String in = resultsStrJson.get("in").toString(); - return in; + return resultsStr; }else{ return "fail"; } } + + public static void main(String[] args) { + String result = "{\"data\":{\"count\":1,\"results\":[{\"gfid\":800899,\"gfname\":\"87053658_fence\",\"in\":0}]},\"errcode\":10000,\"errdetail\":null,\"errmsg\":\"OK\"}"; + cn.hutool.json.JSONObject maps = JSONUtil.parseObj(result); + String dataStr = maps.get("data").toString(); + cn.hutool.json.JSONObject dataResults = JSONUtil.parseObj(dataStr); + String resultsStr = dataResults.get("results").toString(); + JSONArray jsonArray = JSONUtil.parseArray(resultsStr); + System.out.print(jsonArray); + Object o = jsonArray.get(0); + JSONObject jsonObject1 = JSONUtil.parseObj(jsonArray.get(0)); + String in = jsonObject1.get("in").toString(); + System.out.print(in); + } } diff --git a/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml b/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml index 10b5edf..3d4f944 100644 --- a/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml +++ b/src/main/resources/mapper/modules/MallElectronicFenceMapper.xml @@ -5,4 +5,15 @@ <select id="selectByTeamLeaderCode" resultType="cc.mrbird.febs.mall.entity.MallElectronicFence"> select * from mall_electronic_fence where team_leader_code=#{teamLeaderCode} </select> + + <select id="selectAllOnlineLeader" resultType="cc.mrbird.febs.mall.entity.MallElectronicFence"> + SELECT + a.* + FROM + mall_electronic_fence a + INNER JOIN mall_team_leader b ON a.team_leader_code = b.unique_code + WHERE + b.state = 1 + AND b.online_state = 1 + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml index 90324c4..2b6fb88 100644 --- a/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml +++ b/src/main/resources/mapper/modules/MallTeamLeaderMapper.xml @@ -186,4 +186,22 @@ limit 1 </select> + <select id="selectByFenceIdAndFenceNameAndLonAndLat" resultType="cc.mrbird.febs.mall.entity.MallTeamLeader"> + select + a.*, + ROUND( + 6378.138 * 2 * ASIN( + SQRT( + POW(SIN((#{latitude} * PI() / 180 - a.latitude * PI() / 180) / 2),2) + + COS(40.0497810000 * PI() / 180) * COS(a.latitude * PI() / 180) + * POW(SIN((#{longitude} * PI() / 180 - a.longitude * PI() / 180) / 2),2) + ) + ) * 1000 + ) AS distance + from mall_team_leader a + inner join mall_electronic_fence b on b.team_leader_code = a.unique_code + where b.gid = #{fenceId} + and b.fence_name = #{fenceName} + </select> + </mapper> \ No newline at end of file -- Gitblit v1.9.1