| package cc.mrbird.febs.mall.service.impl; | 
|   | 
| 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.SpringContextHolder; | 
| import cc.mrbird.febs.mall.conversion.MallLeaderAchieveConversion; | 
| import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; | 
| import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion; | 
| import cc.mrbird.febs.mall.dto.*; | 
| import cc.mrbird.febs.mall.entity.*; | 
| import cc.mrbird.febs.mall.mapper.*; | 
| 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.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; | 
| import lombok.RequiredArgsConstructor; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.collections.CollectionUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.math.BigDecimal; | 
| import java.util.*; | 
|   | 
| @Slf4j | 
| @Service | 
| @RequiredArgsConstructor | 
| public class ApiMallTeamLeaderServiceImpl extends ServiceImpl<MallTeamLeaderMapper, MallTeamLeader> implements IApiMallTeamLeaderService { | 
|   | 
|   | 
|     private final MallOrderInfoMapper mallOrderInfoMapper; | 
|     private final MallTeamLeaderMapper mallTeamLeaderMapper; | 
|     private final MallMemberMapper mallMemberMapper; | 
|     private final IXcxPayService iXcxPayService; | 
|     private final SpringContextHolder springContextHolder; | 
|     private final DataDictionaryCustomMapper dataDictionaryCustomMapper; | 
|     private final MallOrderItemMapper mallOrderItemMapper; | 
|     private final MallRefundMapper mallRefundMapper; | 
|     @Autowired | 
|     private WeixinServiceUtil weixinServiceUtil; | 
|     private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); | 
|     private final IMallMoneyFlowService mallMoneyFlowService; | 
|     private final IApiMallMemberWalletService memberWalletService; | 
|     private final MallLeaderAchieveMapper mallLeaderAchieveMapper; | 
|     private final MallMoneyFlowMapper mallMoneyFlowMapper; | 
|     private final MallGoodsMapper mallGoodsMapper; | 
|     private final MallGoodsSkuMapper mallGoodsSkuMapper; | 
|     private final MallElectronicFenceMapper mallElectronicFenceMapper; | 
|     private final IMallElectronicFenceServiceImpl iMallElectronicFenceService; | 
|     private final MallLeaderDefaultMapper mallLeaderDefaultMapper; | 
|   | 
|     @Override | 
|     @Transactional | 
|     public FebsResponse applyLeader(ApiApplayLeaderDto apiApplayLeaderDto) { | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         Long memberId = member.getId(); | 
|         MallTeamLeader mallTeamLeaderAdd = new MallTeamLeader(); | 
|         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(apiApplayLeaderDto.getName()); | 
|                 mallTeamLeaderAdd.setPhone(apiApplayLeaderDto.getPhone()); | 
|                 mallTeamLeaderAdd.setAddressPic(apiApplayLeaderDto.getAddressPic()); | 
|                 mallTeamLeaderAdd.setAddressArea(apiApplayLeaderDto.getAddressArea()); | 
|                 mallTeamLeaderAdd.setDetailAddress(apiApplayLeaderDto.getDetailAddress()); | 
|                 mallTeamLeaderAdd.setLongitude(apiApplayLeaderDto.getLongitude()); | 
|                 mallTeamLeaderAdd.setLatitude(apiApplayLeaderDto.getLatitude()); | 
|                 mallTeamLeaderAdd.setState(MallTeamLeader.STATE_ING); | 
|                 //申请团长默认关闭返利,返利比例为0 | 
|                 mallTeamLeaderAdd.setProfitSwitch(2); | 
|                 mallTeamLeaderAdd.setBonusPercent("0"); | 
|                 this.baseMapper.updateById(mallTeamLeaderAdd); | 
|             } | 
|         }else{ | 
|             MallTeamLeader mallTeamLeader = MallTeamLeaderConversion.INSTANCE.dtoToEntity(apiApplayLeaderDto); | 
|             mallTeamLeader.setMemberId(memberId); | 
|             mallTeamLeader.setState(MallTeamLeader.STATE_ING); | 
|             mallTeamLeader.setUniqueCode(member.getInviteId()); | 
|             //申请团长默认关闭返利,返利比例为0 | 
|             mallTeamLeader.setProfitSwitch(2); | 
|             mallTeamLeader.setBonusPercent("0"); | 
|             this.baseMapper.insert(mallTeamLeader); | 
|         } | 
|         return new FebsResponse().success().message("申请成功"); | 
|     } | 
|   | 
|   | 
|     @Override | 
|     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 | 
|     public FebsResponse leaderState() { | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         Long memberId = member.getId(); | 
|         ApiMallleaderStateVo apiMallleaderStateVo = new ApiMallleaderStateVo(); | 
|         List<MallTeamLeader> mallTeamLeadersIng = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_ING); | 
|         List<MallTeamLeader> mallTeamLeadersNo = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_NO); | 
|         List<MallTeamLeader> mallTeamLeadersYes = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_YES); | 
|         List<MallTeamLeader> mallTeamLeadersCancel = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_CANCEL); | 
|         if(CollUtil.isNotEmpty(mallTeamLeadersIng) ||CollUtil.isNotEmpty(mallTeamLeadersYes)){ | 
|             apiMallleaderStateVo.setState(2); | 
|         }else if(CollUtil.isNotEmpty(mallTeamLeadersNo)){ | 
|             apiMallleaderStateVo.setState(1); | 
|         }else if(CollUtil.isNotEmpty(mallTeamLeadersCancel)){ | 
|             apiMallleaderStateVo.setState(2); | 
|         }else{ | 
|             apiMallleaderStateVo.setState(1); | 
|         } | 
|         return new FebsResponse().success().data(apiMallleaderStateVo); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse getApiLeaderInfoVoById(Long id) { | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id); | 
|         ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo(); | 
|         apiLeaderInfoVo.setId(mallTeamLeader.getId()); | 
|         apiLeaderInfoVo.setName(mallTeamLeader.getName()); | 
|         apiLeaderInfoVo.setPhone(mallTeamLeader.getPhone()); | 
|         apiLeaderInfoVo.setAddressPic(mallTeamLeader.getAddressPic()); | 
|         apiLeaderInfoVo.setUniqueCode(mallTeamLeader.getUniqueCode()); | 
|         apiLeaderInfoVo.setProvince(mallTeamLeader.getProvince()); | 
|         apiLeaderInfoVo.setCity(mallTeamLeader.getCity()); | 
|         apiLeaderInfoVo.setTownship(mallTeamLeader.getTownship()); | 
|         apiLeaderInfoVo.setDetailAddress(mallTeamLeader.getDetailAddress()); | 
|         apiLeaderInfoVo.setAddressArea(mallTeamLeader.getAddressArea()); | 
|         MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); | 
|         if(ObjectUtil.isNotEmpty(mallElectronicFence)){ | 
|             String longLatStr = mallElectronicFence.getLonglatiarr(); | 
|             apiLeaderInfoVo.setLonglatiarr(longLatStr); | 
|         } | 
|         MallLeaderDefault mallLeaderDefault1 = mallLeaderDefaultMapper.selectByMemberId(member.getId()); | 
|         if(ObjectUtil.isNotEmpty(mallLeaderDefault1)){ | 
|             mallLeaderDefaultMapper.deleteById(mallLeaderDefaultMapper.selectByMemberId(member.getId()).getId()); | 
|         } | 
|         MallLeaderDefault mallLeaderDefault = new MallLeaderDefault(); | 
|         mallLeaderDefault.setMemberId(member.getId()); | 
|         mallLeaderDefault.setUniqueCode(mallTeamLeader.getUniqueCode()); | 
|         mallLeaderDefaultMapper.insert(mallLeaderDefault); | 
|         return new FebsResponse().success().data(apiLeaderInfoVo); | 
|     } | 
|   | 
|     @Override | 
|     public List<OrderListVo> findLeaderOrderListInPage(ApiLeaderOrderListDto apiLeaderOrderListDto) { | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         IPage<MallOrderInfo> page = new Page<>(apiLeaderOrderListDto.getPageNum(), apiLeaderOrderListDto.getPageSize()); | 
|         apiLeaderOrderListDto.setMemberId(member.getId()); | 
| //        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiLeaderOrderListInPage(page, apiLeaderOrderListDto); | 
|         IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiLeaderOrderListInPage(page, apiLeaderOrderListDto); | 
|         if(CollUtil.isNotEmpty(mallOrderInfos.getRecords())){ | 
|             for(MallOrderInfo mallOrderInfo : mallOrderInfos.getRecords()){ | 
|                 Long orderInfoId = mallOrderInfo.getId(); | 
|                 List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfoId); | 
|                 if(CollUtil.isNotEmpty(mallOrderItemList)){ | 
|                     mallOrderInfo.setItems(mallOrderItemList); | 
|                 } | 
|             } | 
|         } | 
|         return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords()); | 
|     } | 
|   | 
|     @Override | 
|     @Transactional | 
|     public FebsResponse leaderOrderConfirm(ApiLeaderOrderConfirmDto apiLeaderOrderConfirmDto) { | 
|         log.info("确认到达"+apiLeaderOrderConfirmDto.getIds()); | 
|         List<String> idsStr = StrUtil.splitTrim(apiLeaderOrderConfirmDto.getIds(),","); | 
|         if(CollUtil.isEmpty(idsStr)){ | 
|             return new FebsResponse().fail().message("请选择订单"); | 
|         } | 
|         for(String orderIdStr : idsStr){ | 
|             long orderId = Long.parseLong(orderIdStr); | 
|             MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); | 
|             if(ObjectUtil.isEmpty(mallOrderInfo)){ | 
|                 continue; | 
| //                return new FebsResponse().fail().message("订单不存在"); | 
|             } | 
|             Integer status = mallOrderInfo.getStatus() == null ? 0 : mallOrderInfo.getStatus(); | 
|             Integer deliveryState = mallOrderInfo.getDeliveryState() == null ? 0 : mallOrderInfo.getDeliveryState(); | 
|             if(OrderStatusEnum.WAIT_FINISH.getValue() != status || 2 != deliveryState){ | 
|                 continue; | 
| //                return new FebsResponse().fail().message("订单不是待确认到货状态"); | 
|             } | 
|             mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()); | 
|             mallOrderInfoMapper.updateById(mallOrderInfo); | 
|   | 
|             OrderStateDto orderStateDto = new OrderStateDto(); | 
|             String productNames = getProductNames(mallOrderInfo.getMemberId(), mallOrderInfo.getId()); | 
|             orderStateDto.setGoodsName(StrUtil.sub(productNames,0,20)+"..."); | 
|             String takeUniqueCode = mallOrderInfo.getTakeUniqueCode(); | 
|             MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode); | 
|             orderStateDto.setAddressArea(mallTeamLeader.getAddressArea()); | 
|             orderStateDto.setDetailAddress(StrUtil.sub(mallTeamLeader.getDetailAddress(),0,20)+"..."); | 
|             orderStateDto.setLeaderPhone(mallTeamLeader.getPhone()); | 
|             orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId()); | 
|             DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getCode()); | 
|             orderStateDto.setTemplateId(dataDictionaryCustom.getValue()); | 
|             orderStateDto.setRemark("果蔬等生鲜,请尽快取货"); | 
|             iXcxPayService.pushOrderToAddress(orderStateDto); | 
|         } | 
|         return new FebsResponse().success().message("确认成功"); | 
|     } | 
|   | 
|     /** | 
|      * 根据用户ID和订单ID获取所购买商品名称 | 
|      * @return 所含商品名称(多个以","隔开) | 
|      */ | 
|     public String getProductNames(Long memberId, Long orderId) { | 
|         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderByMemberIdAndId(memberId, orderId); | 
|         List<MallOrderItem> details = mallOrderInfo.getItems(); | 
|         if (CollectionUtils.isEmpty(details)) { | 
|             return ""; | 
|         } | 
|         StringBuffer productNameBuffer = new StringBuffer(); | 
|         Integer maxLength = 30; | 
|         for (int i = 0; i< details.size(); i++) { | 
|             MallOrderItem mallOrderItem = details.get(i); | 
|             String goodsName = mallOrderItem.getGoodsName(); | 
|             if (goodsName == null) { | 
|                 continue; | 
|             } | 
|             if (i == 0 && goodsName.length() > maxLength) { | 
|                 productNameBuffer.append(goodsName.substring(0, maxLength) + "..."); | 
|                 break; | 
|             } | 
|             if ((productNameBuffer.length() + goodsName.length()) > maxLength) { | 
|                 productNameBuffer.append("等"); | 
|                 break; | 
|             } | 
|             productNameBuffer.append(goodsName + ","); | 
|         } | 
|         String productNames = productNameBuffer.toString(); | 
|         if (productNames.endsWith(",")) { | 
|             productNames = productNames.substring(0, productNames.length() - 1); | 
|         } | 
|         if (productNames.endsWith(",等")) { | 
|             productNames = productNames.substring(0, productNames.length() - 2) + "等"; | 
|         } | 
|         return productNames; | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse leaderTitle(ApiLeaderTitleDto apiLeaderTitleDto) { | 
|         String uniqueCode = apiLeaderTitleDto.getUniqueCode(); | 
|         Double longitude = apiLeaderTitleDto.getLongitude() == null ? 0 : apiLeaderTitleDto.getLongitude(); | 
|         Double latitude = apiLeaderTitleDto.getLatitude() == null ? 0 : apiLeaderTitleDto.getLatitude(); | 
|         ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo(); | 
|         MallTeamLeader mallTeamLeader = new MallTeamLeader(); | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         MallLeaderDefault mallLeaderDefault = mallLeaderDefaultMapper.selectByMemberId(member.getId()); | 
|         if(ObjectUtil.isNotEmpty(mallLeaderDefault)){ | 
|             mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(mallLeaderDefault.getUniqueCode()); | 
|         }else{ | 
|             //特征码扫码 | 
|             if(StrUtil.isNotEmpty(uniqueCode)){ | 
|                 mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode); | 
|   | 
|                 //经纬度定位 | 
|             }else if(longitude != 0 && latitude != 0){ | 
|                 mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude); | 
|                 //直接进入,默认选择列表第一个 | 
|             }else{ | 
|                 List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList(); | 
|                 if(CollUtil.isNotEmpty(mallTeamLeaderList)){ | 
|                     mallTeamLeader = mallTeamLeaderList.get(0); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         if(ObjectUtil.isNotEmpty(mallTeamLeader)){ | 
|             apiLeaderInfoVo.setId(mallTeamLeader.getId()); | 
|             apiLeaderInfoVo.setName(mallTeamLeader.getName()); | 
|             apiLeaderInfoVo.setPhone(mallTeamLeader.getPhone()); | 
|             apiLeaderInfoVo.setAddressPic(mallTeamLeader.getAddressPic()); | 
|             apiLeaderInfoVo.setUniqueCode(mallTeamLeader.getUniqueCode()); | 
|             apiLeaderInfoVo.setProvince(mallTeamLeader.getProvince()); | 
|             apiLeaderInfoVo.setCity(mallTeamLeader.getCity()); | 
|             apiLeaderInfoVo.setTownship(mallTeamLeader.getTownship()); | 
|             apiLeaderInfoVo.setDetailAddress(mallTeamLeader.getDetailAddress()); | 
|             apiLeaderInfoVo.setAddressArea(mallTeamLeader.getAddressArea()); | 
|             MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); | 
|             if(ObjectUtil.isNotEmpty(mallElectronicFence)){ | 
|                 apiLeaderInfoVo.setLonglatiarr(mallElectronicFence.getLonglatiarr()); | 
|             } | 
|             apiLeaderInfoVo.setLongitude(mallTeamLeader.getLongitude()); | 
|             apiLeaderInfoVo.setLatitude(mallTeamLeader.getLatitude()); | 
|         } | 
|         if(ObjectUtil.isEmpty(apiLeaderInfoVo)){ | 
|             return new FebsResponse().success(); | 
|         } | 
|         return new FebsResponse().success().data(apiLeaderInfoVo); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse findTeamOrderMarkCnt() { | 
|         MallMember loginUser = LoginUserUtil.getLoginUser(); | 
|         Long memberId = loginUser.getId(); | 
|         MallMember mallMember = mallMemberMapper.selectById(memberId); | 
|         if(ObjectUtil.isEmpty(mallMember)){ | 
|             return new FebsResponse().success(); | 
|         } | 
|         log.info(mallMember.getInviteId()); | 
|         MallTeamLeader mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(mallMember.getInviteId()); | 
|         if(ObjectUtil.isEmpty(mallTeamLeader)){ | 
|             return new FebsResponse().success(); | 
|         } | 
|         String uniqueCode = mallTeamLeader.getUniqueCode(); | 
|         List<Map<String, Integer>> maps = mallOrderInfoMapper.selectMemberOrderStatusCntByUniquecode(uniqueCode); | 
|         Map<Integer, Integer> orderCnt = new HashMap<>(); | 
|         if (CollUtil.isNotEmpty(maps)) { | 
|             for (Map<String, Integer> map : maps) { | 
|                 orderCnt.put(map.get("status"), map.get("cnt")); | 
|             } | 
|         } | 
|         Map<String, Object> result = new HashMap<>(); | 
|         result.put("order", orderCnt); | 
|         return new FebsResponse().success().data(result); | 
|     } | 
|   | 
|     @Override | 
|     @Transactional | 
|     public FebsResponse leaderRefundOrder(ApiLeaderRefundOrderDto apiLeaderRefundOrderDto) { | 
|         //获取退款订单信息 | 
|         Long orderId = apiLeaderRefundOrderDto.getOrderId(); | 
|         Long itemId = apiLeaderRefundOrderDto.getItemId(); | 
|   | 
|         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); | 
|         MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId); | 
|         List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId, orderId, 3); | 
|         if(CollUtil.isEmpty(mallRefundEntities)){ | 
|             return new FebsResponse().fail().message("退款失败,请联系客服人员"); | 
|         } | 
|         MallRefundEntity mallRefundEntity = mallRefundEntities.get(0); | 
|   | 
|         Integer agreeState = apiLeaderRefundOrderDto.getAgreeState() == null? 2:apiLeaderRefundOrderDto.getAgreeState(); | 
|         if(2 == agreeState){ | 
|             //更新订单详情 | 
|             mallOrderItem.setState(1); | 
|             mallOrderItemMapper.updateById(mallOrderItem); | 
|             //更新退款订单 | 
|             mallRefundEntity.setState(2); | 
|             mallRefundEntity.setUpdatedTime(DateUtil.date()); | 
|             mallRefundMapper.updateById(mallRefundEntity); | 
|             return new FebsResponse().success().message("操作成功"); | 
|         }else{//退款订单编号 | 
|             String orderNo = mallOrderInfo.getOrderNo(); | 
|             //退款退款编号 | 
|             String refundNo = mallRefundEntity.getRefundNo(); | 
|             //退款订单金额 | 
|             BigDecimal orderAmount = mallOrderInfo.getAmount(); | 
|             BigDecimal aa = new BigDecimal(100); | 
|             int orderMoney = orderAmount.multiply(aa).intValue(); | 
|   | 
|             //退款退款金额 | 
|             BigDecimal refundAmount = mallRefundEntity.getAmount(); | 
|             BigDecimal bb = new BigDecimal(100); | 
|             int refundMoney = refundAmount.multiply(bb).intValue(); | 
|   | 
|             //余额支付退款 | 
|             if(mallRefundEntity.getType() == 3){ | 
|                 //更新订单详情 | 
|                 mallOrderItem.setState(3); | 
|                 mallOrderItemMapper.updateById(mallOrderItem); | 
|                 //更新库存信息 | 
|                 MallGoods mallGoods = mallGoodsMapper.selectById(mallOrderItem.getGoodsId()); | 
|                 mallGoods.setStock(mallGoods.getStock() + mallOrderItem.getCnt()); | 
|                 mallGoods.setVolume(mallGoods.getVolume() - mallOrderItem.getCnt()); | 
|                 mallGoodsMapper.updateById(mallGoods); | 
|   | 
|                 MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(mallOrderItem.getSkuId()); | 
|                 mallGoodsSku.setStock(mallGoodsSku.getStock() + mallOrderItem.getCnt()); | 
|                 mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - mallOrderItem.getCnt()); | 
|                 mallGoodsSkuMapper.updateById(mallGoodsSku); | 
|                 //更新退款订单 | 
|                 mallRefundEntity.setState(1); | 
|                 mallRefundEntity.setUpdatedTime(DateUtil.date()); | 
|                 mallRefundMapper.updateById(mallRefundEntity); | 
|                 mallMoneyFlowService.addMoneyFlow(mallOrderInfo.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); | 
|   | 
|                 List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByNotInStateAndOrderId(3,orderId); | 
|                 if(CollUtil.isEmpty(mallOrderItemList)){ | 
|                     MallOrderInfo mallOrderRefund = mallOrderInfoMapper.selectById(orderId); | 
|                     mallOrderRefund.setStatus(6); | 
|                     mallOrderInfoMapper.updateById(mallOrderRefund); | 
|                 } | 
|                 memberWalletService.add(refundAmount, mallOrderInfo.getMemberId(), "balance"); | 
|                 return new FebsResponse().success().message("退款成功"); | 
|             } | 
|   | 
|             Boolean flag = false; | 
|             Boolean debug = xcxProperties.getDebug(); | 
|             if (debug) { | 
|                 boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null); | 
|                 flag = b; | 
|             } else { | 
|                 log.info("开始调用退款接口。。。退款编号为{}", refundNo); | 
|                 boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orderMoney, refundMoney, null); | 
|                 flag = b; | 
|             } | 
|   | 
|             if(flag){ | 
|                 //更新订单详情 | 
|                 mallOrderItem.setState(3); | 
|                 mallOrderItemMapper.updateById(mallOrderItem); | 
|                 //更新库存信息 | 
|                 MallGoods mallGoods = mallGoodsMapper.selectById(mallOrderItem.getGoodsId()); | 
|                 mallGoods.setStock(mallGoods.getStock() + mallOrderItem.getCnt()); | 
|                 mallGoods.setVolume(mallGoods.getVolume() - mallOrderItem.getCnt()); | 
|                 mallGoodsMapper.updateById(mallGoods); | 
|   | 
|                 MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(mallOrderItem.getSkuId()); | 
|                 mallGoodsSku.setStock(mallGoodsSku.getStock() + mallOrderItem.getCnt()); | 
|                 mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - mallOrderItem.getCnt()); | 
|                 mallGoodsSkuMapper.updateById(mallGoodsSku); | 
|   | 
|                 //更新退款订单 | 
|                 mallRefundEntity.setState(1); | 
|                 mallRefundEntity.setUpdatedTime(DateUtil.date()); | 
|                 mallRefundMapper.updateById(mallRefundEntity); | 
|                 mallMoneyFlowService.addMoneyFlow(mallOrderInfo.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); | 
|   | 
|                 List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByNotInStateAndOrderId(3,orderId); | 
|                 if(CollUtil.isEmpty(mallOrderItemList)){ | 
|                     MallOrderInfo mallOrderRefund = mallOrderInfoMapper.selectById(orderId); | 
|                     mallOrderRefund.setStatus(6); | 
|                     mallOrderInfoMapper.updateById(mallOrderRefund); | 
|                 } | 
|             }else{ | 
|   | 
|                 //更新订单详情 | 
|                 mallOrderItem.setState(1); | 
|                 mallOrderItemMapper.updateById(mallOrderItem); | 
|   | 
|                 mallRefundEntity.setState(2); | 
|                 mallRefundMapper.updateById(mallRefundEntity); | 
|                 return new FebsResponse().fail().message("退款失败,请联系客服人员"); | 
|             } | 
|             return new FebsResponse().success().message("退款成功"); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse refundOrderInfo(ApiRefundOrderInfoDto apiRefundOrderInfoDto) { | 
|         Long orderId = apiRefundOrderInfoDto.getOrderId(); | 
|         Long itemId = apiRefundOrderInfoDto.getItemId(); | 
|   | 
|         List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId, orderId, null); | 
|         if(CollUtil.isEmpty(mallRefundEntities)){ | 
|             return new FebsResponse().fail().message("退款信息不存在"); | 
|         } | 
|         return new FebsResponse().success().data(mallRefundEntities.get(0)); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse leaderProfit() { | 
|         MallMember loginUser = LoginUserUtil.getLoginUser(); | 
|         ApiLeaderProfitVo apiLeaderProfitVo = new ApiLeaderProfitVo(); | 
|   | 
|         BigDecimal totalProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(),MoneyFlowTypeEnum.LEADERACHIEVE.getValue(),null,null,null); | 
|         apiLeaderProfitVo.setTotalProfit(totalProfit); | 
|         BigDecimal todayProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(), | 
|                 MoneyFlowTypeEnum.LEADERACHIEVE.getValue(), | 
|                 null,DateUtil.date(), | 
|                 null); | 
|         apiLeaderProfitVo.setTodayProfit(todayProfit); | 
|   | 
|         BigDecimal monthProfit = mallMoneyFlowMapper.selectAmountByFlowtypeAndType(loginUser.getId(),FlowTypeEnum.BALANCE.getValue(), | 
|                 MoneyFlowTypeEnum.LEADERACHIEVE.getValue(), | 
|                 null,null, | 
|                 DateUtil.date()); | 
|         apiLeaderProfitVo.setMonthProfit(monthProfit); | 
|         String inviteId = loginUser.getInviteId(); | 
|         MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(inviteId); | 
|         Integer profitSwitch = mallTeamLeader.getProfitSwitch() == null ? 2:mallTeamLeader.getProfitSwitch(); | 
|         if(2 == profitSwitch){ | 
|             apiLeaderProfitVo.setWaitProfit(BigDecimal.ZERO); | 
|         }else{ | 
|             BigDecimal waitProfit = mallLeaderAchieveMapper.selectProfitByStateAndDateTimeAndUniqueCode(1,null,loginUser.getInviteId()).setScale(2,BigDecimal.ROUND_DOWN); | 
|             apiLeaderProfitVo.setWaitProfit(waitProfit); | 
|         } | 
|   | 
|         return new FebsResponse().success().data(apiLeaderProfitVo); | 
|     } | 
|   | 
|     @Override | 
|     public List<ApiOrderProfitVo> findLeaderProfitListInPage(ApiOrderProfitDto apiOrderProfitDto) { | 
|         MallMember member = LoginUserUtil.getLoginUser(); | 
|         IPage<MallLeaderAchieve> page = new Page<>(apiOrderProfitDto.getPageNum(), apiOrderProfitDto.getPageSize()); | 
|         apiOrderProfitDto.setInvitedId(member.getInviteId()); | 
|         IPage<MallLeaderAchieve> mallLeaderAchieves = mallLeaderAchieveMapper.selectApiLeaderProfitListInPage(page, apiOrderProfitDto); | 
|         return MallLeaderAchieveConversion.INSTANCE.entitysToVos(mallLeaderAchieves.getRecords()); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse findSomeLeaderListInPage(ApiLeaderListDto apiLeaderListDto) { | 
|         Page<MallTeamLeader> page = new Page<>(apiLeaderListDto.getPageNum(), apiLeaderListDto.getPageSize()); | 
|         IPage<MallTeamLeader> mallTeamLeaderIPage = this.baseMapper.selectApiLeaderListInPage(page, apiLeaderListDto); | 
|         List<ApiLeaderListVo> apiLeaderListVos = new ArrayList<>(); | 
|   | 
|         DataDictionaryCustom rangeSwitchDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode()); | 
|         if (ObjectUtil.isNotNull(rangeSwitchDic)) { | 
|             int rangeSwitch = Integer.parseInt(rangeSwitchDic.getValue()); | 
|             if(1 == rangeSwitch){ | 
|                 DataDictionaryCustom rangeSizeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode()); | 
|                 double rangeSize = Double.parseDouble(rangeSizeDic.getValue())*1000; | 
|                 for(MallTeamLeader mallTeamLeader : mallTeamLeaderIPage.getRecords()){ | 
|                     Double distance = mallTeamLeader.getDistance(); | 
|                     if(distance <= rangeSize){ | 
|                         ApiLeaderListVo apiLeaderListVo = MallTeamLeaderConversion.INSTANCE.entityToApiVo(mallTeamLeader); | 
|                         apiLeaderListVos.add(apiLeaderListVo); | 
|                     } | 
|                 } | 
|             }else{ | 
|                 apiLeaderListVos = MallTeamLeaderConversion.INSTANCE.entitysToVos(mallTeamLeaderIPage.getRecords()); | 
|             } | 
|         } | 
|         return new FebsResponse().success().data(apiLeaderListVos); | 
|     } | 
|   | 
|     @Override | 
|     public FebsResponse noLoginLeaderTitle(ApiLeaderTitleDto apiLeaderTitleDto) { | 
|         String uniqueCode = apiLeaderTitleDto.getUniqueCode(); | 
|         Double longitude = apiLeaderTitleDto.getLongitude() == null ? 0 : apiLeaderTitleDto.getLongitude(); | 
|         Double latitude = apiLeaderTitleDto.getLatitude() == null ? 0 : apiLeaderTitleDto.getLatitude(); | 
|         ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo(); | 
|         MallTeamLeader mallTeamLeader = new MallTeamLeader(); | 
|         //特征码扫码 | 
|         if(StrUtil.isNotEmpty(uniqueCode)){ | 
|             mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode); | 
|   | 
|             //经纬度定位 | 
|         }else if(longitude != 0 && latitude != 0){ | 
|             mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude); | 
|             //直接进入,默认选择列表第一个 | 
|         }else{ | 
|             List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList(); | 
|             if(CollUtil.isNotEmpty(mallTeamLeaderList)){ | 
|                 mallTeamLeader = mallTeamLeaderList.get(0); | 
|             } | 
|         } | 
|   | 
|         if(ObjectUtil.isNotEmpty(mallTeamLeader)){ | 
|             apiLeaderInfoVo.setId(mallTeamLeader.getId()); | 
|             apiLeaderInfoVo.setName(mallTeamLeader.getName()); | 
|             apiLeaderInfoVo.setPhone(mallTeamLeader.getPhone()); | 
|             apiLeaderInfoVo.setAddressPic(mallTeamLeader.getAddressPic()); | 
|             apiLeaderInfoVo.setUniqueCode(mallTeamLeader.getUniqueCode()); | 
|             apiLeaderInfoVo.setProvince(mallTeamLeader.getProvince()); | 
|             apiLeaderInfoVo.setCity(mallTeamLeader.getCity()); | 
|             apiLeaderInfoVo.setTownship(mallTeamLeader.getTownship()); | 
|             apiLeaderInfoVo.setDetailAddress(mallTeamLeader.getDetailAddress()); | 
|             apiLeaderInfoVo.setAddressArea(mallTeamLeader.getAddressArea()); | 
|             MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode()); | 
|             if(ObjectUtil.isNotEmpty(mallElectronicFence)){ | 
|                 apiLeaderInfoVo.setLonglatiarr(mallElectronicFence.getLonglatiarr()); | 
|             } | 
|             apiLeaderInfoVo.setLongitude(mallTeamLeader.getLongitude()); | 
|             apiLeaderInfoVo.setLatitude(mallTeamLeader.getLatitude()); | 
|         } | 
|         if(ObjectUtil.isEmpty(apiLeaderInfoVo)){ | 
|             return new FebsResponse().success(); | 
|         } | 
|         return new FebsResponse().success().data(apiLeaderInfoVo); | 
|     } | 
|   | 
| } |