package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.ShareCodeUtil; 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.MallMemberMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.mall.mapper.MallTeamLeaderMapper; import cc.mrbird.febs.mall.service.IAdminMallOrderService; import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService; import cc.mrbird.febs.mall.vo.ApiLeaderInfoVo; import cc.mrbird.febs.mall.vo.ApiLeaderListVo; import cc.mrbird.febs.mall.vo.ApiMallleaderStateVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.pay.model.OrderStateDto; import cc.mrbird.febs.pay.service.IXcxPayService; import cc.mrbird.febs.pay.util.WechatConfigure; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @Service @RequiredArgsConstructor public class ApiMallTeamLeaderServiceImpl extends ServiceImpl implements IApiMallTeamLeaderService { @Override @Transactional public FebsResponse applyLeader(ApiApplayLeaderDto apiApplayLeaderDto) { MallMember member = LoginUserUtil.getLoginUser(); Long memberId = member.getId(); 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("当前用户无法申请"); } MallTeamLeader mallTeamLeader = MallTeamLeaderConversion.INSTANCE.dtoToEntity(apiApplayLeaderDto); mallTeamLeader.setMemberId(memberId); mallTeamLeader.setState(MallTeamLeader.STATE_ING); mallTeamLeader.setUniqueCode(member.getInviteId()); this.baseMapper.insert(mallTeamLeader); return new FebsResponse().success().message("申请成功"); } @Override public List findLeaderListInPage(ApiLeaderListDto apiLeaderListDto) { Page page = new Page<>(apiLeaderListDto.getPageNum(), apiLeaderListDto.getPageSize()); IPage mallTeamLeaderIPage = this.baseMapper.selectApiLeaderListInPage(page, apiLeaderListDto); return MallTeamLeaderConversion.INSTANCE.entitysToVos(mallTeamLeaderIPage.getRecords()); } @Override public FebsResponse leaderState() { MallMember member = LoginUserUtil.getLoginUser(); Long memberId = member.getId(); ApiMallleaderStateVo apiMallleaderStateVo = new ApiMallleaderStateVo(); List mallTeamLeadersIng = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_ING); List mallTeamLeadersNo = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_NO); List mallTeamLeadersYes = this.baseMapper.selectListByMemberIdAndState(memberId, MallTeamLeader.STATE_YES); List 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) { 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()); return new FebsResponse().success().data(apiLeaderInfoVo); } @Override public List findLeaderOrderListInPage(ApiLeaderOrderListDto apiLeaderOrderListDto) { MallMember member = LoginUserUtil.getLoginUser(); IPage page = new Page<>(apiLeaderOrderListDto.getPageNum(), apiLeaderOrderListDto.getPageSize()); apiLeaderOrderListDto.setMemberId(member.getId()); IPage mallOrderInfos = this.baseMapper.selectApiLeaderOrderListInPage(page, apiLeaderOrderListDto); return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords()); } private final MallOrderInfoMapper mallOrderInfoMapper; private final MallTeamLeaderMapper mallTeamLeaderMapper; private final MallMemberMapper mallMemberMapper; private final IXcxPayService iXcxPayService; @Override @Transactional public FebsResponse leaderOrderConfirm(ApiLeaderOrderConfirmDto apiLeaderOrderConfirmDto) { String ids = apiLeaderOrderConfirmDto.getIds(); if(StrUtil.isEmpty(ids)){ return new FebsResponse().fail().message("请选择订单"); } List orderIds = StrUtil.splitTrim(ids, ","); for(String id : orderIds){ long orderId = Long.parseLong(id); MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); if(ObjectUtil.isEmpty(mallOrderInfo)){ continue; // return new FebsResponse().fail().message("订单不存在"); } Integer status = mallOrderInfo.getStatus(); if(OrderStatusEnum.WAIT_FINISH.getValue() != status){ continue; // return new FebsResponse().fail().message("订单不是待确认到货状态"); } mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()); mallOrderInfoMapper.updateById(mallOrderInfo); OrderStateDto orderStateDto = new OrderStateDto(); orderStateDto.setOrderNo(mallOrderInfo.getOrderNo()); orderStateDto.setGoodsName(getProductNames(mallOrderInfo.getMemberId(),mallOrderInfo.getId())); if(2 == mallOrderInfo.getIsHome()){ orderStateDto.setOrderState("已送达自提点"); }else{ orderStateDto.setOrderState("已送达自提点"); } String takeUniqueCode = mallOrderInfo.getTakeUniqueCode(); MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode); orderStateDto.setAddressArea(mallTeamLeader.getAddressArea()); orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId()); orderStateDto.setTemplateId(WechatConfigure.WX_ORDER_STATEMSG_TEMPLATE_ID); 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 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(); //特征码扫码 if(StrUtil.isNotEmpty(uniqueCode)){ mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode); //经纬度定位 }else if(longitude != 0 && latitude != 0){ mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude); //直接进入,默认选择列表第一个 }else{ List 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()); } return new FebsResponse().success().data(apiLeaderInfoVo); } @Override public FebsResponse findTeamOrderMarkCnt() { MallMember loginUser = LoginUserUtil.getLoginUser(); MallTeamLeader mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(loginUser.getInviteId()); String uniqueCode = mallTeamLeader.getUniqueCode(); List> maps = mallOrderInfoMapper.selectMemberOrderStatusCntByUniquecode(uniqueCode); Map orderCnt = new HashMap<>(); if (CollUtil.isNotEmpty(maps)) { for (Map map : maps) { orderCnt.put(map.get("status"), map.get("cnt")); } } Map result = new HashMap<>(); result.put("order", orderCnt); return new FebsResponse().success().data(result); } }