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); } /** 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); } 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(); } 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); } 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(); 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); } 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(); 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(); 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); } } 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> 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>