123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- package com.ydd.module.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.google.common.collect.Lists;
- import com.ydd.api.DeliveryService;
- import com.ydd.common.core.domain.entity.SysUser;
- import com.ydd.common.core.page.PageResult;
- import com.ydd.common.enums.DeliveryTypeEnums;
- import com.ydd.common.enums.UserTypeEnums;
- import com.ydd.common.exception.CustomException;
- import com.ydd.module.constants.AppConstant;
- import com.ydd.module.domain.*;
- import com.ydd.module.dto.DeliveryDto;
- import com.ydd.module.dto.DeliveryInfo;
- import com.ydd.module.dto.DspDeliveryListDto;
- import com.ydd.module.dto.ShopDeliveryBindDto;
- import com.ydd.module.enums.IsDeleteEnum;
- import com.ydd.module.enums.ListSizeEnum;
- import com.ydd.module.enums.MemberTypeEnum;
- import com.ydd.module.enums.StatusEnum;
- import com.ydd.module.mapper.DspDeliveryMapper;
- import com.ydd.module.service.*;
- import com.ydd.system.mapper.SysConfigMapper;
- import com.ydd.system.service.ISysConfigService;
- import com.ydd.third.common.dto.FengniaoV3Token;
- import com.ydd.third.common.vo.ResObject;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- /**
- * 服务商配送平台Service业务层处理
- *
- * @author douya
- * @date 2021-02-01
- */
- @Service
- public class DspDeliveryServiceImpl extends ServiceImpl<DspDeliveryMapper, DspDelivery> implements IDspDeliveryService {
- @Resource
- private IDspConfigService iDspConfigService;
- @Resource
- private IShopDeliveryService iShopDeliveryService;
- @Resource
- private IShopDeliveryBindService iShopDeliveryBindService;
- @Resource
- private IMemberService iMemberService;
- @Resource
- private DeliveryService fengniaoClient;
- @Resource
- private IMemberConfigService iMemberConfigService;
- @Resource
- private ISysConfigService iSysConfigService;
- @Override
- public List<DspDelivery> queryList(SysUser user) {
- return baseMapper.selectByDspId(user);
- }
- @Override
- public PageResult queryPage(Page page, DspDelivery dspDelivery) {
- List<DspDelivery> list = baseMapper.queryPage(page, dspDelivery);
- page.setRecords(list);
- return new PageResult(page);
- }
- @Override
- public Integer statisticsUseDeliveryNum(Long id, Integer status) {
- return baseMapper.statisticsUseDeliveryNum(id, status);
- }
- @Override
- public Boolean createDspDelivery(DspDelivery dspDelivery) {
- //平台名称校验
- List<DspDelivery> list = baseMapper.selectByName(dspDelivery.getName());
- if (list.size() > ListSizeEnum.ZERO.getSize()) {
- throw new CustomException("已存在该配送平台,请确认后重新操作!");
- }
- //创建默认的配送平台(没有绑定渠道商的平台)
- dspDelivery.setStatus(StatusEnum.SHOW.getStatus());
- baseMapper.insert(dspDelivery);
- //查询出所有渠道商(包括被禁用的)创建对应的配送平台,默认未启用
- List<DspConfig> dspList = iDspConfigService.selectDspListByStatus(null);
- //渠道商的配送平台
- List<DspDelivery> dspDeliveryList = new ArrayList<>();
- dspList.stream().forEach(dspConfig -> {
- DspDelivery dspDelivery1 = new DspDelivery();
- BeanUtils.copyProperties(dspDelivery, dspDelivery1);
- dspDelivery1.setStatus(StatusEnum.STOP.getStatus());
- dspDelivery1.setDspId(dspConfig.getId());
- dspDelivery1.setParentId(dspDelivery.getId().intValue());
- dspDeliveryList.add(dspDelivery1);
- });
- //批量保存已存在渠道商的配送平台
- if (dspDeliveryList.size() > ListSizeEnum.ZERO.getSize()) {
- for (DspDelivery delivery : dspDeliveryList) {
- baseMapper.insert(delivery);
- if (delivery.getDspId()!=null) {
- //查询开启自动配送的用户配置
- List<MemberConfig> memberConfigList = iMemberConfigService.list(new QueryWrapper<MemberConfig>().eq("open_autodelivery", StatusEnum.SHOW.status));
- if (memberConfigList!=null&&memberConfigList.size()>0){
- for (MemberConfig memberConfig : memberConfigList) {
- String autodeliveryIds="";
- if (memberConfig.getAutodeliveryIds()!=null) {
- autodeliveryIds=memberConfig.getAutodeliveryIds();
- }
- memberConfig.setAutodeliveryIds(autodeliveryIds +delivery.getId());
- iMemberConfigService.updateById(memberConfig);
- }
- }
- }
- }
- }
- return true;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void changeStatus(Long id, SysUser user) {
- DspDelivery dspDelivery = baseMapper.getById(id);
- //防止渠道商身份误操作平台配置
- if (dspDelivery.getParentId() == null) {
- if (!user.getType().equals(UserTypeEnums.PLATFORM.getCode())) {
- throw new CustomException("风险操作,已被系统拦截!");
- }
- //平台禁用配送通道时,关闭所有渠道商的该通道
- if (dspDelivery.getStatus().equals(StatusEnum.SHOW.getStatus())) {
- baseMapper.updateAllDeliveryByParentId(dspDelivery.getId(), StatusEnum.STOP.getStatus());
- //关闭时候,将此运力从配置表中移除
- // List<MemberConfig> memberConfigList = iMemberConfigService.list(new QueryWrapper<MemberConfig>().eq("open_autodelivery", StatusEnum.SHOW.status));
- // if (memberConfigList!=null&&memberConfigList.size()>0){
- // for (MemberConfig memberConfig : memberConfigList) {
- // String autodeliveryIds=memberConfig.getAutodeliveryIds();
- // if (memberConfig.getAutodeliveryIds()!=null) {
- // if (memberConfig.getAutodeliveryIds().contains(",")) {
- // autodeliveryIds=memberConfig.getAutodeliveryIds()+",";
- // }
- // autodeliveryIds=memberConfig.getAutodeliveryIds().replaceAll(autodeliveryIds,"");
- // }
- // memberConfig.setAutodeliveryIds(autodeliveryIds);
- // iMemberConfigService.updateById(memberConfig);
- // }
- // }
- }
- } else if (dspDelivery.getStatus().equals(StatusEnum.STOP.getStatus())) {
- //开启配送通道之前,校验平台是否关闭该配送通道
- if (dspDelivery.getStatus().equals(StatusEnum.STOP.getStatus())) {
- DspDelivery dspDeliverys = this.getById(dspDelivery.getParentId());
- if (dspDeliverys.getStatus().equals(StatusEnum.STOP.getStatus())) {
- throw new CustomException("管理员已关闭该配送通道,开启失败!");
- }
- }
- //校验参数是否配置,没有则不允许开启
- Boolean flg = true;
- if (StringUtils.isEmpty(dspDelivery.getAppId()) &&
- StringUtils.isEmpty(dspDelivery.getAppKey()) &&
- StringUtils.isEmpty(dspDelivery.getAppSecret()) &&
- StringUtils.isEmpty(dspDelivery.getAuthUrl())) {
- flg = false;
- }
- if (!flg) {
- throw new CustomException("开启失败,请先完成该配送平台的参数配置!");
- }
- //查询开启自动配送的用户配置
- // List<MemberConfig> memberConfigList = iMemberConfigService.list(new QueryWrapper<MemberConfig>().eq("open_autodelivery", StatusEnum.SHOW.status));
- // if (memberConfigList!=null&&memberConfigList.size()>0){
- // for (MemberConfig memberConfig : memberConfigList) {
- // String autodeliveryIds="";
- // if (memberConfig.getAutodeliveryIds()!=null) {
- // autodeliveryIds=memberConfig.getAutodeliveryIds();
- // }
- // memberConfig.setAutodeliveryIds(autodeliveryIds +dspDelivery.getId());
- // iMemberConfigService.updateById(memberConfig);
- // }
- // }
- }
- baseMapper.updateStatusById(getStatus(dspDelivery),id);
- }
- public Integer getStatus(DspDelivery dspDelivery) {
- return dspDelivery.getStatus().equals(StatusEnum.SHOW.getStatus()) ?
- StatusEnum.STOP.getStatus() : StatusEnum.SHOW.getStatus();
- }
- @Override
- public List<DspDelivery> getSysConfig() {
- return baseMapper.getSysConfig();
- }
- @Override
- public List<DspDelivery> selectDspDeliverys() {
- return baseMapper.selectDspDeliverys();
- }
- @Override
- public List<DspDelivery> selectDspDeliverysTwo() {
- return baseMapper.selectDspDeliverysTwo();
- }
- @Override
- public List<DspDelivery> selectOrderDspDeliverys() {
- List<DspDelivery> dspDeliveryList = baseMapper.selectOrderDspDeliverys();
- DspDelivery dspDelivery = new DspDelivery();
- dspDelivery.setId(100L);
- dspDelivery.setName("其它平台");
- dspDeliveryList.add(dspDelivery);
- return dspDeliveryList;
- }
- @Override
- public List<DspDelivery> queryPageDspDeliverys(Page page) {
- return baseMapper.queryPageDspDeliverys(page);
- }
- @Override
- public void createList(List<DspDelivery> list) {
- if (list.size() > 0) {
- this.saveBatch(list, list.size());
- }
- }
- @Override
- public List<DeliveryDto> floorList() {
- return baseMapper.findFloorList();
- }
- @Override
- public Boolean updateDspDeliveryById(DspDelivery dspDelivery, SysUser user) {
- if (user.getType().equals(UserTypeEnums.PLATFORM.getCode()) && dspDelivery.getParentId() == null) {
- //批量更新所有渠道商的基础配置
- List<DspDelivery> list = baseMapper.selectByParentId(dspDelivery.getId());
- list.stream().forEach(dspDeliverys -> {
- dspDeliverys.setName(dspDelivery.getName());
- dspDeliverys.setLogo(dspDelivery.getLogo());
- dspDeliverys.setPcLogo(dspDelivery.getPcLogo());
- dspDeliverys.setWebsite(dspDelivery.getWebsite());
- });
- list.add(dspDelivery);
- this.updateBatchById(list, list.size());
- } else {
- this.updateById(dspDelivery);
- }
- return true;
- }
- @Override
- public DspDelivery findOne(Integer type) {
- return baseMapper.selectOne(new QueryWrapper<DspDelivery>().eq("type", type).isNotNull("parent_id"));
- }
- @Override
- public DeliveryInfo findInfoOne(Integer id, Long merchantId) {
- Member member = iMemberService.findOne(merchantId);
- DeliveryInfo info = new DeliveryInfo();
- DspDelivery delivery = baseMapper.selectOne(new QueryWrapper<DspDelivery>().eq("id", id).isNotNull("parent_id"));
- BeanUtils.copyProperties(delivery, info);
- info.setPreferredDelivery(StatusEnum.STOP.getStatus());
- if (merchantId != null) {
- ShopDelivery shopDelivery = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).isNull("shop_id"));
- if (shopDelivery != null) {
- info.setAuthToken(shopDelivery.getAuthToken());
- info.setPreferredDelivery(shopDelivery.getPreferredDelivery());
- info.setThirdShopId(shopDelivery.getThirdShopId());
- if(info.getType().equals(DeliveryTypeEnums.UUPT.getType())){
- info.setShopId(shopDelivery.getThirdShopId());
- }
- if(info.getType().equals(DeliveryTypeEnums.AIPT.getType())){
- info.setPhone(shopDelivery.getAccount());
- }
- }
- //达达和点我达特殊处理
- if (info.getType().equals(DeliveryTypeEnums.DADA.getType()) || info.getType().equals(DeliveryTypeEnums.DWD.getType())) {
- ShopDelivery sd = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).eq("shop_id", member.getShopId()));
- if (sd != null) {
- info.setShopId(sd.getThirdShopId());
- }else {
- //如果默认店铺被删了,则取列表第一个
- List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status));
- if (CollectionUtils.isNotEmpty(deliveries)){
- info.setShopId(deliveries.get(0).getThirdShopId());
- }
- }
- }
- if (info.getType().equals(DeliveryTypeEnums.FENG_NIAO.getType())||info.getType().equals(DeliveryTypeEnums.FENG_NIAO_PT.getType())){
- ShopDelivery sd = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", member.getMerchantId()).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).eq("shop_id", member.getShopId()));
- if (sd != null) {
- info.setThirdShopId(sd.getThirdShopId());
- }else {
- //如果默认店铺被删了,则取列表第一个
- List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", member.getMerchantId()).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).isNotNull("third_shop_id"));
- if (CollectionUtils.isNotEmpty(deliveries)){
- info.setThirdShopId(deliveries.get(0).getThirdShopId());
- }
- }
- }
- }
- return info;
- }
- @Override
- public List<DeliveryInfo> findList(Member member, Long shopId, Integer transport, List<Integer> types, Integer defaultShop) {
- List<DspDelivery> list = baseMapper.selectList(new QueryWrapper<DspDelivery>()
- .isNotNull("parent_id")
- .eq("status", StatusEnum.SHOW.status)
- .eq("deleted", IsDeleteEnum.NORMAL.status)
- .in(CollectionUtils.isNotEmpty(types), "type", types));
- List<DeliveryInfo> infos = Lists.newArrayList();
- for (DspDelivery delivery : list) {
- // 判断运力类型, 货运只能使用货拉拉, 其他不可使用货拉拉
- if (transport == 0) {
- if (DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())) {
- continue;
- }
- } else if (transport == 1) {
- if (!DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())) {
- continue;
- }
- }
- DeliveryInfo info = new DeliveryInfo();
- BeanUtils.copyProperties(delivery, info);
- Integer isMine = 0;
- if (member.getMerchantId() != null) {
- // 非 顺丰(100米内)、蜂鸟、美团跑腿运力之外, 商家门店账号个人地址发单,也可计价自运力
- if (!(info.getType().equals(DeliveryTypeEnums.SHUN_FENG.getType()) && defaultShop != 0)
- && !info.getType().equals(DeliveryTypeEnums.FENG_NIAO.getType())
- && !info.getType().equals(DeliveryTypeEnums.FENG_NIAO_PT.getType())
- && !info.getType().equals(DeliveryTypeEnums.MEI_TUAN_ZB.getType())
- && shopId == null) {
- shopId = member.getShopId();
- }
- ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(member.getMerchantId(), shopId, delivery.getId(), delivery.getType());
- if (shopDeliveryBind != null) {
- info.setAuthToken(shopDeliveryBind.getAuthToken());
- info.setThirdShopId(shopDeliveryBind.getThirdShopId());
- isMine = 1;
- if (info.getType().equals(DeliveryTypeEnums.DADA.getType())){
- info.setShopId(shopDeliveryBind.getDadaShopNo());
- info.setDadaThirdShopId(shopDeliveryBind.getThirdShopId());
- }
- if (info.getType().equals(DeliveryTypeEnums.DADA_YZ.getType())) {
- info.setShopId(shopDeliveryBind.getDadaYzShopNo());
- info.setDadaThirdShopId(shopDeliveryBind.getThirdShopId());
- }
- if(info.getType().equals(DeliveryTypeEnums.UUPT.getType())){
- info.setShopId(shopDeliveryBind.getThirdShopId());
- }
- if (info.getType().equals(DeliveryTypeEnums.AIPT.getType())){
- info.setPhone(shopDeliveryBind.getAccount());
- }
- }
- if (info.getType().equals(DeliveryTypeEnums.DADA.getType()) ||
- info.getType().equals(DeliveryTypeEnums.DADA_YZ.getType()) ||
- info.getType().equals(DeliveryTypeEnums.DWD.getType()) ||
- info.getType().equals(DeliveryTypeEnums.FENG_NIAO.getType()) ||
- info.getType().equals(DeliveryTypeEnums.FENG_NIAO_PT.getType()) ||
- info.getType().equals(DeliveryTypeEnums.HUO_LA_LA.getType()) ||
- info.getType().equals(DeliveryTypeEnums.MEI_TUAN.getType())||
- info.getType().equals(DeliveryTypeEnums.SHAN_SONG.getType()) ||
- info.getType().equals(DeliveryTypeEnums.SHUN_FENG.getType())) {
- ShopDelivery sd = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", member.getMerchantId()).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).eq("shop_id", shopId).eq("bind_status",1));
- if (isMine == 0 && info.getType().equals(DeliveryTypeEnums.DADA.getType()) || info.getType().equals(DeliveryTypeEnums.DADA_YZ.getType())) {
- if (sd != null && sd.getThirdShopId() != null) {
- info.setShopId(sd.getThirdShopId());
- } else {
- // 如果默认店铺被删了,则取列表第一个
- List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", member.getMerchantId()).eq("delivery_id", delivery.getId())
- .eq("deleted", IsDeleteEnum.NORMAL.status).isNotNull("third_shop_id"));
- if (CollectionUtils.isNotEmpty(deliveries)){
- info.setShopId(deliveries.get(0).getThirdShopId());
- }
- }
- }
- if(sd != null && sd.getThirdShopId() != null && (info.getType().equals(DeliveryTypeEnums.FENG_NIAO.getType())
- || info.getType().equals(DeliveryTypeEnums.FENG_NIAO_PT.getType())
- || info.getType().equals(DeliveryTypeEnums.HUO_LA_LA.getType())
- || info.getType().equals(DeliveryTypeEnums.MEI_TUAN.getType()))) {
- info.setThirdShopId(sd.getThirdShopId());
- }
- if (DeliveryTypeEnums.SHAN_SONG.getType().equals(info.getType())) {
- if(sd != null && sd.getThirdShopId() != null){
- info.setShopId(sd.getThirdShopId());
- } else {
- info.setShopId(null);
- }
- }
- }
- }
- if ((delivery.getType().equals(DeliveryTypeEnums.DADA.getType()) || delivery.getType().equals(DeliveryTypeEnums.DADA_YZ.getType())) && member.getMemberType().equals(MemberTypeEnum.PERSON.type)){
- info.setIsMerchant(StatusEnum.SHOW.status);
- }
- info.setPreferredDelivery(StatusEnum.STOP.getStatus());
- info.setIsMine(isMine);
- infos.add(info);
- }
- return infos;
- }
- @Override
- public DspDelivery findById(Long id) {
- return baseMapper.getById(id);
- }
- @Override
- public List<DspDelivery> selectDspDeliverysByTime() {
- List<DspDelivery> dspDeliveries = baseMapper.selectDspDeliverysByTime();
- return dspDeliveries;
- }
- @Override
- public void fengNiaoTask() {
- try {
- List<DspDelivery> deliverys = baseMapper.selectDspDeliverysByTime();
- if (deliverys != null && deliverys.size() > 0) {
- for (DspDelivery delivery : deliverys) {
- if ((System.currentTimeMillis()-delivery.getCreateTime().getTime())/1000>delivery.getReExpireIn()){
- log.error("蜂鸟刷新token商户id:"+delivery.getShopId()+"刷新token失败,token过期");
- continue;
- }
- ResObject<FengniaoV3Token> resObject = fengniaoClient.fengniaoRefreshToken(delivery.getRefreshToken(), delivery.getShopId());
- delivery.setExpiresIn(resObject.getData().getExpireIn());
- delivery.setRefreshToken(resObject.getData().getRefreshToken());
- delivery.setAuthToken(resObject.getData().getAccessToken());
- delivery.setCreateTime(new Date());
- baseMapper.updateById(delivery);
- }
- }
- } catch (Exception e) {
- log.error("蜂鸟刷新token定时任务出现异常", e);
- e.printStackTrace();
- }
- }
- /**
- * 查询门店没有绑定的运力
- * @param dtos
- * @return
- */
- @Override
- public List<DspDelivery> findNotBindByIds(List<DeliveryDto> dtos) {
- return baseMapper.findNotBindByIds(dtos);
- }
- @Override
- public List<ShopDeliveryBindDto> getDeliveryList() {
- return baseMapper.getDeliveryList();
- }
- @Override
- public List<DspDeliveryListDto> getCustomerServiceList() {
- List<DspDeliveryListDto> customerServiceList = baseMapper.getCustomerServiceList();
- String lieBaoCustomerPhone = iSysConfigService.selectConfigByKey(AppConstant.LIEBAOAI_CUSTOMER_PHONE_KEY);
- DspDeliveryListDto dto = new DspDeliveryListDto();
- dto.setId(0L);
- dto.setName("猎豹AI");
- dto.setLogo(AppConstant.LIE_BAO_LOGO);
- dto.setCustomerPhone(lieBaoCustomerPhone == null ? AppConstant.LIE_BAO_CUSTOMER_PHONE: lieBaoCustomerPhone);
- customerServiceList.add(customerServiceList.size(), dto);
- return customerServiceList;
- }
- }
|