xiaoyong931011
2022-09-29 ca6b150d7b1ab8261cd7c9f336b8b9d65d9e808f
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -4,7 +4,9 @@
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;
@@ -14,11 +16,14 @@
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;
@@ -42,10 +47,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Slf4j
@Service
@@ -58,6 +60,9 @@
    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) {
@@ -82,6 +87,10 @@
    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;
    }
@@ -89,6 +98,9 @@
    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("团长信息不存在,刷新重试");
        }
@@ -97,10 +109,10 @@
//            return new FebsResponse().fail().message("只有【待审核】状态才能提交!");
//        }
        Double bonusPercent = Double.parseDouble(mallTeamLeader.getBonusPercent());
        if(1 <= bonusPercent || 0 > bonusPercent){
            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);
@@ -118,7 +130,7 @@
    @Override
    public List<AdminSelectListLeaderVo> selectList(MallTeamLeader mallTeamLeader) {
        List<AdminSelectListLeaderVo> list = new ArrayList<>();
        List<MallTeamLeader> mallTeamLeaders = this.baseMapper.getMallTeamLeaderList();
        List<MallTeamLeader> mallTeamLeaders = this.baseMapper.getAllMallTeamLeaderList();
        if(CollUtil.isNotEmpty(mallTeamLeaders)){
            for(MallTeamLeader teamLeader : mallTeamLeaders){
                AdminSelectListLeaderVo adminSelectListLeaderVo = new AdminSelectListLeaderVo();
@@ -133,6 +145,9 @@
    @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("团长信息不存在");
        }
@@ -159,6 +174,7 @@
        Long memberId = adminLeaderAddDto.getMemberId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        MallTeamLeader mallTeamLeaderAdd = new MallTeamLeader();
        if(ObjectUtil.isEmpty(mallMember)){
            return new FebsResponse().fail().message("刷新页面重试");
        }
@@ -170,17 +186,33 @@
        if(CollUtil.isNotEmpty(mallTeamLeaderCancel)){
            return new FebsResponse().fail().message("当前用户无法申请");
        }
        Double bonusPercent = Double.parseDouble(adminLeaderAddDto.getBonusPercent());
        if(1 <= bonusPercent || 0 > bonusPercent){
            return new FebsResponse().fail().message("请输入合适的百分比小数");
        List<MallTeamLeader> mallTeamLeaderNo = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_NO);
        if(CollUtil.isNotEmpty(mallTeamLeaderNo)){
            mallTeamLeaderAdd = mallTeamLeaderNo.get(0);
        }
        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);
        this.baseMapper.insert(mallTeamLeader);
//        Double bonusPercent = Double.parseDouble(adminLeaderAddDto.getBonusPercent());
//        if(1 <= bonusPercent || 0 > bonusPercent){
//            return new FebsResponse().fail().message("请输入合适的百分比小数");
//        }
        if(ObjectUtil.isNotEmpty(mallTeamLeaderAdd)){
            mallTeamLeaderAdd = MallTeamLeaderConversion.INSTANCE.adminDtoToEntity(adminLeaderAddDto);
            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);
        }
        return new FebsResponse().success();
    }
@@ -214,63 +246,141 @@
        return new FebsResponse().success();
    }
    @Override
    public FebsResponse addFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto) {
        String gdFence = createGDFence(adminLeaderAddFenceDto);
        if("fail".equals(gdFence)){
            return new FebsResponse().fail().message("高德创建电子围栏失败!");
    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;
            }
        }
        MallElectronicFence mallElectronicFence = MallElectronicFenceConversion.INSTANCE.dtoToEntity(adminLeaderAddFenceDto);
        mallElectronicFence.setDelFlag(1);
        mallElectronicFence.setProhibit(1);
        mallElectronicFence.setGid(gdFence);
        mallElectronicFence.setGaodeKey(adminLeaderAddFenceDto.getGaodeKey());
        mallElectronicFenceMapper.insert(mallElectronicFence);
//            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();
    }
    public String createGDFence(AdminLeaderAddFenceDto adminLeaderAddFenceDto){
        String url = "https://restapi.amap.com/v4/geofence/meta?key=";
        String gaodeKey = adminLeaderAddFenceDto.getGaodeKey();
        url =url+gaodeKey;
        HttpPost httpPost = new HttpPost(url);
        Map<String,String> map = new HashMap<>();
        String fenceName = adminLeaderAddFenceDto.getFenceName();
        map.put("name",fenceName);
        String longlatiarr = adminLeaderAddFenceDto.getLonglatiarr();
        if(null!=longlatiarr&&!"".equals(longlatiarr)){
            map.put("points",longlatiarr);
    @Override
    public FebsResponse startOnline(Long id) {
        MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallTeamLeader)){
            return new FebsResponse().fail().message("团长信息不存在,刷新重试");
        }
        map.put("enable","true");
        map.put("valid_time","2054-12-30");
        map.put("repeat","Mon,Tues,Wed,Thur,Fri,Sat,Sun");
        //map.put("time","00:00,11:59;13:00,20:59");
        map.put("desc",fenceName);
        map.put("alert_condition","enter;leave");
        System.out.println(map);
        String  param= JSON.toJSONString(map);
        String result = null;
        try {
            result = HttpCurlUtil.sendPostHttp(url, param);
        } catch (IOException e) {
            e.printStackTrace();
        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();
    }
        System.out.println("==高德返回"+result);
        JSONObject maps = JSONUtil.parseObj(result);
        String errmsg = maps.get("errmsg").toString();
        String str2 = maps.get("data").toString();
        JSONObject maps2 = JSONUtil.parseObj(str2);
        String statusGaode = maps2.get("status").toString();
        String gid="";
        if(statusGaode.equals("0")){
            gid = maps2.get("gid").toString();
    @Override
    public FebsResponse closeOnline(Long id) {
        MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallTeamLeader)){
            return new FebsResponse().fail().message("团长信息不存在,刷新重试");
        }
        if(null!=gid&&!"".equals(gid)){
            return gid;
        }else{
            return "fail";
        }
        mallTeamLeader.setOnlineState(2);
        this.baseMapper.updateById(mallTeamLeader);
        return new FebsResponse().success();
    }
}