| package cc.mrbird.febs.mall.service.impl; | 
|   | 
| import cc.mrbird.febs.common.entity.FebsResponse; | 
| import cc.mrbird.febs.common.entity.QueryRequest; | 
| import cc.mrbird.febs.common.enumerates.FlowTypeEnum; | 
| import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; | 
| import cc.mrbird.febs.common.properties.XcxProperties; | 
| import cc.mrbird.febs.common.utils.HttpCurlUtil; | 
| import cc.mrbird.febs.common.utils.SpringContextHolder; | 
| import cc.mrbird.febs.mall.conversion.MallElectronicFenceConversion; | 
| import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; | 
| import cc.mrbird.febs.mall.dto.AdminLeaderAddDto; | 
| import cc.mrbird.febs.mall.dto.AdminLeaderAddFenceDto; | 
| import cc.mrbird.febs.mall.dto.AdminLeaderUpdateDto; | 
| import cc.mrbird.febs.mall.dto.ApiApplayLeaderDto; | 
| import cc.mrbird.febs.mall.entity.*; | 
| import cc.mrbird.febs.mall.mapper.*; | 
| import cc.mrbird.febs.mall.service.IAdminMallTeamLeaderService; | 
| import cc.mrbird.febs.mall.service.IMallElectronicFenceService; | 
| import cc.mrbird.febs.mall.vo.AdminMallActSetVo; | 
| import cc.mrbird.febs.mall.vo.AdminMallTeamLeaderVo; | 
| import cc.mrbird.febs.mall.vo.AdminSelectListLeaderVo; | 
| import cn.hutool.core.collection.CollUtil; | 
| 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.alibaba.fastjson.JSON; | 
| 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
| import com.google.common.collect.Lists; | 
| import lombok.RequiredArgsConstructor; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.http.Consts; | 
| import org.apache.http.NameValuePair; | 
| import org.apache.http.client.entity.UrlEncodedFormEntity; | 
| import org.apache.http.client.methods.HttpPost; | 
| import org.apache.http.client.utils.HttpClientUtils; | 
| import org.apache.http.entity.ContentType; | 
| import org.apache.http.message.BasicNameValuePair; | 
| import org.apache.poi.ss.formula.functions.T; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.io.IOException; | 
| import java.math.BigDecimal; | 
| import java.util.*; | 
|   | 
| @Slf4j | 
| @Service | 
| @RequiredArgsConstructor | 
| @Transactional | 
| public class AdminMallTeamLeaderServiceImpl extends ServiceImpl<MallTeamLeaderMapper, MallTeamLeader> implements IAdminMallTeamLeaderService { | 
|   | 
|     private final MallLeaderStockMapper mallLeaderStockMapper; | 
|     private final MallGoodsMapper mallGoodsMapper; | 
|     private final MallMemberMapper mallMemberMapper; | 
|     private final MallMoneyFlowMapper mallMoneyFlowMapper; | 
|     private final MallElectronicFenceMapper mallElectronicFenceMapper; | 
|     private final IMallElectronicFenceService iMallElectronicFenceService; | 
|     private final SpringContextHolder springContextHolder; | 
|     private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); | 
|   | 
|     @Override | 
|     public IPage<AdminMallTeamLeaderVo> getLeaderListInPage(MallTeamLeader mallTeamLeader, QueryRequest request) { | 
|         Page<AdminMallTeamLeaderVo> page = new Page<>(request.getPageNum(), request.getPageSize()); | 
|         IPage<AdminMallTeamLeaderVo> adminMallActSetVos = this.baseMapper.selectLeaderListInPage(page, mallTeamLeader); | 
|   | 
|         List<AdminMallTeamLeaderVo> records = adminMallActSetVos.getRecords(); | 
|         if(CollUtil.isNotEmpty(adminMallActSetVos.getRecords())){ | 
|             for(AdminMallTeamLeaderVo adminMallTeamLeaderVo : records){ | 
|                 BigDecimal totalProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(adminMallTeamLeaderVo.getMemberId(), | 
|                         FlowTypeEnum.BALANCE.getValue(), MoneyFlowTypeEnum.LEADERACHIEVE.getValue(), | 
|                         null,null,null).setScale(2,BigDecimal.ROUND_DOWN); | 
|                 adminMallTeamLeaderVo.setTotalProfit(totalProfit); | 
|             } | 
|         } | 
|   | 
|   | 
|         return adminMallActSetVos; | 
|     } | 
|   | 
|     @Override | 
|     public AdminMallTeamLeaderVo getMallTeamLederInfoById(long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         AdminMallTeamLeaderVo adminMallTeamLeaderVo = MallTeamLeaderConversion.INSTANCE.entityToVo(mallTeamLeader); | 
|         MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); | 
|         if(ObjectUtil.isNotEmpty(mallElectronicFence)){ | 
|             adminMallTeamLeaderVo.setLonglatiarr(mallElectronicFence.getLonglatiarr()); | 
|         } | 
|         return adminMallTeamLeaderVo; | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse leaderUpdate(MallTeamLeader mallTeamLeader) { | 
|         Long id = mallTeamLeader.getId(); | 
|         MallTeamLeader mallTeamLeaders = this.baseMapper.selectById(id); | 
|         if(1 == mallTeamLeaders.getOnlineState()){ | 
|             return new FebsResponse().fail().message("请先让团长离线"); | 
|         } | 
|         if(ObjectUtil.isEmpty(mallTeamLeaders)){ | 
|             return new FebsResponse().fail().message("团长信息不存在,刷新重试"); | 
|         } | 
| //        Integer state = mallTeamLeader.getState(); | 
| //        if(MallTeamLeader.STATE_ING != state){ | 
| //            return new FebsResponse().fail().message("只有【待审核】状态才能提交!"); | 
| //        } | 
|   | 
| //        Double bonusPercent = Double.parseDouble(mallTeamLeader.getBonusPercent()); | 
| //        if(1 <= bonusPercent || 0 > bonusPercent){ | 
| //            return new FebsResponse().fail().message("请输入合适的百分比小数"); | 
| //        } | 
|         int isOk = mallTeamLeader.getIsOk(); | 
|         if(MallTeamLeader.STATE_YES == isOk){ | 
|             mallTeamLeader.setState(MallTeamLeader.STATE_YES); | 
|             mallTeamLeader.setProfitSwitch(2); | 
|             this.baseMapper.updateById(mallTeamLeader); | 
|         } | 
|         if(MallTeamLeader.STATE_NO == isOk){ | 
|             mallTeamLeader.setState(MallTeamLeader.STATE_NO); | 
|             mallTeamLeader.setProfitSwitch(2); | 
|             this.baseMapper.updateById(mallTeamLeader); | 
|         } | 
|         return new FebsResponse().success().message("审核成功"); | 
|     } | 
|   | 
|     @Override | 
|     public List<AdminSelectListLeaderVo> selectList(MallTeamLeader mallTeamLeader) { | 
|         List<AdminSelectListLeaderVo> list = new ArrayList<>(); | 
|         List<MallTeamLeader> mallTeamLeaders = this.baseMapper.getAllMallTeamLeaderList(); | 
|         if(CollUtil.isNotEmpty(mallTeamLeaders)){ | 
|             for(MallTeamLeader teamLeader : mallTeamLeaders){ | 
|                 AdminSelectListLeaderVo adminSelectListLeaderVo = new AdminSelectListLeaderVo(); | 
|                 adminSelectListLeaderVo.setUniqueCode(teamLeader.getUniqueCode()); | 
|                 adminSelectListLeaderVo.setName(teamLeader.getName()); | 
|                 list.add(adminSelectListLeaderVo); | 
|             } | 
|         } | 
|         return list; | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse leaderCancel(Long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(1 == mallTeamLeader.getOnlineState()){ | 
|             return new FebsResponse().fail().message("请先让团长离线"); | 
|         } | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().fail().message("团长信息不存在"); | 
|         } | 
|         Integer state = mallTeamLeader.getState(); | 
|         if(MallTeamLeader.STATE_YES != state){ | 
|             return new FebsResponse().fail().message("团长的状态不是审核通过"); | 
|         } | 
|         mallTeamLeader.setState(MallTeamLeader.STATE_CANCEL); | 
|         this.baseMapper.updateById(mallTeamLeader); | 
|         return new FebsResponse().success().message("已取消"); | 
|     } | 
|   | 
|     @Override | 
|     public IPage<MallLeaderStock> leaderGoodsUpdate(QueryRequest request, MallLeaderStock mallLeaderStock) { | 
|   | 
|         Integer goodsNumber = mallGoodsMapper.selectCount(new QueryWrapper<>()); | 
|         Page<MallLeaderStock> page = new Page<>(request.getPageNum(), goodsNumber); | 
|         IPage<MallLeaderStock> mallTeamLeaders = this.baseMapper.selectleaderGoodsStockListInPage(page, mallLeaderStock); | 
|         return mallTeamLeaders; | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse addLeader(AdminLeaderAddDto adminLeaderAddDto) { | 
|   | 
|         Long memberId = adminLeaderAddDto.getMemberId(); | 
|         MallMember mallMember = mallMemberMapper.selectById(memberId); | 
|         MallTeamLeader mallTeamLeaderAdd = new MallTeamLeader(); | 
|         if(ObjectUtil.isEmpty(mallMember)){ | 
|             return new FebsResponse().fail().message("刷新页面重试"); | 
|         } | 
|         List<MallTeamLeader> mallTeamLeaders = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_ING); | 
|         if(CollUtil.isNotEmpty(mallTeamLeaders)){ | 
|             return new FebsResponse().fail().message("正在申请中"); | 
|         } | 
|         List<MallTeamLeader> mallTeamLeaderCancel = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_CANCEL); | 
|         if(CollUtil.isNotEmpty(mallTeamLeaderCancel)){ | 
|             return new FebsResponse().fail().message("当前用户无法申请"); | 
|         } | 
|         List<MallTeamLeader> mallTeamLeaderNo = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_NO); | 
|         if(CollUtil.isNotEmpty(mallTeamLeaderNo)){ | 
|             mallTeamLeaderAdd = mallTeamLeaderNo.get(0); | 
|             if(ObjectUtil.isNotEmpty(mallTeamLeaderAdd)){ | 
|                 mallTeamLeaderAdd.setName(adminLeaderAddDto.getName()); | 
|                 mallTeamLeaderAdd.setPhone(adminLeaderAddDto.getPhone()); | 
|                 mallTeamLeaderAdd.setAddressPic(adminLeaderAddDto.getAddressPic()); | 
|                 mallTeamLeaderAdd.setAddressArea(adminLeaderAddDto.getAddressArea()); | 
|                 mallTeamLeaderAdd.setDetailAddress(adminLeaderAddDto.getDetailAddress()); | 
|                 mallTeamLeaderAdd.setLongitude(adminLeaderAddDto.getLongitude()); | 
|                 mallTeamLeaderAdd.setLatitude(adminLeaderAddDto.getLatitude()); | 
|                 mallTeamLeaderAdd.setState(MallTeamLeader.STATE_YES); | 
|                 //申请团长默认关闭返利,返利比例为0 | 
|                 mallTeamLeaderAdd.setProfitSwitch(2); | 
|                 mallTeamLeaderAdd.setBonusPercent("0"); | 
|                 this.baseMapper.updateById(mallTeamLeaderAdd); | 
|             } | 
|         }else{ | 
|             MallTeamLeader mallTeamLeader = MallTeamLeaderConversion.INSTANCE.adminDtoToEntity(adminLeaderAddDto); | 
|             mallTeamLeader.setUniqueCode(mallMember.getInviteId()); | 
|             mallTeamLeader.setMemberId(memberId); | 
|             mallTeamLeader.setPhone(mallMember.getPhone()); | 
|             mallTeamLeader.setName(mallMember.getName()); | 
|             mallTeamLeader.setState(MallTeamLeader.STATE_YES); | 
|             //申请团长默认关闭返利,返利比例为0 | 
|             mallTeamLeader.setProfitSwitch(2); | 
|             mallTeamLeader.setBonusPercent("0"); | 
|             this.baseMapper.insert(mallTeamLeader); | 
|         } | 
| //        Double bonusPercent = Double.parseDouble(adminLeaderAddDto.getBonusPercent()); | 
| //        if(1 <= bonusPercent || 0 > bonusPercent){ | 
| //            return new FebsResponse().fail().message("请输入合适的百分比小数"); | 
| //        } | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse startProfit(Long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().fail().message("团长信息不存在,刷新重试"); | 
|         } | 
|         Integer state = mallTeamLeader.getState(); | 
|         if(1!=state){ | 
|             return new FebsResponse().fail().message("目前还不是团长,无法操作"); | 
|         } | 
|         mallTeamLeader.setProfitSwitch(1); | 
|         this.baseMapper.updateById(mallTeamLeader); | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse closeProfit(Long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().fail().message("团长信息不存在,刷新重试"); | 
|         } | 
|         Integer state = mallTeamLeader.getState(); | 
|         if(1!=state){ | 
|             return new FebsResponse().fail().message("目前还不是团长,无法操作"); | 
|         } | 
|         mallTeamLeader.setProfitSwitch(2); | 
|         this.baseMapper.updateById(mallTeamLeader); | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
|     public static void main(String[] args) { | 
|   | 
|         String ss = "{\"results\":[{\"name\":\"yiyuanshucai\",\"sid\":792477},{\"name\":\"yiyuanshucai1\",\"sid\":792477}]}"; | 
|         String serviceName = ""; | 
|         JSONObject jsonObject = JSONUtil.parseObj(ss); | 
|         String results = jsonObject.get("results").toString(); | 
|         JSONArray jsonArray = JSONUtil.parseArray(results); | 
|         System.out.print(jsonArray); | 
|         for(Object jsonArray1 : jsonArray){ | 
|             System.out.print(jsonArray1); | 
|             JSONObject jsonObject1 = JSONUtil.parseObj(jsonArray1); | 
|             String name = jsonObject1.get("name").toString(); | 
|             System.out.print(name); | 
|             if("yiyuanshucai".equals(name)){ | 
|                 serviceName= name; | 
|                 break; | 
|             } | 
|         } | 
| //            String name = jsonObjectStr.get("name").toString(); | 
| //            String sid = jsonObjectStr.get("sid").toString(); | 
| //            if("yiyuanshucai".equals(name)){ | 
| //                System.out.print(name); | 
| //                System.out.print(sid); | 
| //            } | 
|     } | 
|     @Override | 
|     @Transactional | 
|     public FebsResponse addFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto) { | 
|         Long id = adminLeaderAddFenceDto.getId(); | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(1 == mallTeamLeader.getOnlineState()){ | 
|             return new FebsResponse().fail().message("请先让团长离线"); | 
|         } | 
|         //如果电子围栏表为空, | 
|         //先查询服务是否已经创建, | 
|         //没有,再创建服务。 | 
|         List<MallElectronicFence> mallElectronicFences = mallElectronicFenceMapper.selectList(new QueryWrapper<>()); | 
|         String serviceId = ""; | 
|         if(CollUtil.isEmpty(mallElectronicFences)){ | 
|             String resultStr = iMallElectronicFenceService.trackServiceInfo(xcxProperties.getGaodeKey()); | 
|             if("fail".equals(resultStr)){ | 
|                 return new FebsResponse().fail().message("高德地图查询服务失败"); | 
|             } | 
|             log.info(resultStr); | 
|             if("null".equals(resultStr) || StrUtil.isBlank(resultStr)){ | 
|                 serviceId = iMallElectronicFenceService.trackServiceAdd(xcxProperties.getGaodeKey(), xcxProperties.getServiceName()); | 
|             }else{ | 
|                 JSONObject jsonObject = JSONUtil.parseObj(resultStr); | 
|                 String results = jsonObject.get("results").toString(); | 
|                 JSONArray jsonArray = JSONUtil.parseArray(results); | 
|                 for(Object jsonArray1 : jsonArray){ | 
|                     JSONObject jsonObject1 = JSONUtil.parseObj(jsonArray1); | 
|                     String name = jsonObject1.get("name").toString(); | 
|                     String sid = jsonObject1.get("sid").toString(); | 
|                     if(xcxProperties.getServiceName().equals(name)){ | 
|                         serviceId= sid; | 
|                         break; | 
|                     } | 
|                 } | 
|             } | 
|         }else{ | 
|             serviceId = mallElectronicFences.get(0).getServiceId(); | 
|         } | 
|         if("fail".equals(serviceId)){ | 
|             return new FebsResponse().fail().message("高德地图创建服务失败"); | 
|         } | 
|         String uniqueCode = mallTeamLeader.getUniqueCode(); | 
|         MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(uniqueCode); | 
|         if(ObjectUtil.isEmpty(mallElectronicFence)){ | 
|             //新增 | 
|             //新增围栏 | 
|             String fenceId = iMallElectronicFenceService.fenceAdd(xcxProperties.getGaodeKey(), serviceId | 
|                     , mallTeamLeader.getUniqueCode()+"_fence", adminLeaderAddFenceDto.getLonglatiarr()); | 
|   | 
|             if("fail".equals(fenceId)){ | 
|                 return new FebsResponse().fail().message("高德地图创建多边形围栏失败"); | 
|             } | 
|             MallElectronicFence mallElectronicFenceAdd = new MallElectronicFence(); | 
|             mallElectronicFenceAdd.setFenceName(mallTeamLeader.getUniqueCode()+"_fence"); | 
|             mallElectronicFenceAdd.setFenceType(4); | 
|             mallElectronicFenceAdd.setGid(fenceId); | 
|             mallElectronicFenceAdd.setProhibit(1); | 
|             mallElectronicFenceAdd.setDelFlag(1); | 
|             mallElectronicFenceAdd.setGKey(xcxProperties.getGaodeKey()); | 
|             mallElectronicFenceAdd.setLonglatiarr(adminLeaderAddFenceDto.getLonglatiarr()); | 
|             mallElectronicFenceAdd.setTeamLeaderCode(uniqueCode); | 
|             mallElectronicFenceAdd.setServiceId(serviceId); | 
|             mallElectronicFenceMapper.insert(mallElectronicFenceAdd); | 
|         }else{ | 
|             //删除电子围栏 | 
|             if(StrUtil.isEmpty(adminLeaderAddFenceDto.getLonglatiarr())){ | 
|                 iMallElectronicFenceService.fenceDelete(xcxProperties.getGaodeKey(),serviceId,mallElectronicFence.getGid()); | 
|                 mallElectronicFenceMapper.deleteById(mallElectronicFence.getId()); | 
|             }else{ | 
|                 String fenceUpdate = iMallElectronicFenceService.fenceUpdate(xcxProperties.getGaodeKey(), serviceId, | 
|                         mallElectronicFence.getGid(), mallElectronicFence.getFenceName(), | 
|                         adminLeaderAddFenceDto.getLonglatiarr()); | 
|                 if("fail".equals(fenceUpdate)){ | 
|                     return new FebsResponse().fail().message("高德地图更新多边形围栏失败"); | 
|                 } | 
|                 mallElectronicFence.setLonglatiarr(adminLeaderAddFenceDto.getLonglatiarr()); | 
|                 mallElectronicFenceMapper.updateById(mallElectronicFence); | 
|             } | 
|         } | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse startOnline(Long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().fail().message("团长信息不存在,刷新重试"); | 
|         } | 
|         Integer state = mallTeamLeader.getState(); | 
|         if(1!=state){ | 
|             return new FebsResponse().fail().message("目前还不是团长,无法操作"); | 
|         } | 
| //        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); | 
| //        if(ObjectUtil.isEmpty(mallElectronicFence)){ | 
| //            return new FebsResponse().fail().message("请先设置配送范围"); | 
| //        } | 
|         mallTeamLeader.setOnlineState(1); | 
|         this.baseMapper.updateById(mallTeamLeader); | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse closeOnline(Long id) { | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().fail().message("团长信息不存在,刷新重试"); | 
|         } | 
|         mallTeamLeader.setOnlineState(2); | 
|         this.baseMapper.updateById(mallTeamLeader); | 
|         return new FebsResponse().success(); | 
|     } | 
|   | 
| } |