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 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 getLeaderListInPage(MallTeamLeader mallTeamLeader, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMallActSetVos = this.baseMapper.selectLeaderListInPage(page, mallTeamLeader); List 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 selectList(MallTeamLeader mallTeamLeader) { List list = new ArrayList<>(); List 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 leaderGoodsUpdate(QueryRequest request, MallLeaderStock mallLeaderStock) { Integer goodsNumber = mallGoodsMapper.selectCount(new QueryWrapper<>()); Page page = new Page<>(request.getPageNum(), goodsNumber); IPage mallTeamLeaders = this.baseMapper.selectleaderGoodsStockListInPage(page, mallLeaderStock); return mallTeamLeaders; } @Override public FebsResponse addLeader(AdminLeaderAddDto adminLeaderAddDto) { Long memberId = adminLeaderAddDto.getMemberId(); MallMember mallMember = mallMemberMapper.selectById(memberId); if(ObjectUtil.isEmpty(mallMember)){ return new FebsResponse().fail().message("刷新页面重试"); } List mallTeamLeaders = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_ING); if(CollUtil.isNotEmpty(mallTeamLeaders)){ return new FebsResponse().fail().message("正在申请中"); } List mallTeamLeaderCancel = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_CANCEL); 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("请输入合适的百分比小数"); // } 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); 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 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()); }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(); } }