package cn.lili.modules.system.serviceimpl; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.SwitchEnum; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.OperationalJudgment; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.logistics.LogisticsPluginFactory; import cn.lili.modules.logistics.entity.dto.LabelOrderDTO; import cn.lili.modules.logistics.entity.enums.LogisticsEnum; import cn.lili.modules.member.service.StoreLogisticsService; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.enums.DeliverStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.LogisticsSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.mapper.LogisticsMapper; import cn.lili.modules.system.service.LogisticsService; import cn.lili.modules.system.service.SettingService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import groovy.util.logging.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * 物流公司业务层实现 * * @author Chopper * @since 2020/11/17 8:02 下午 */ @Slf4j @Service public class LogisticsServiceImpl extends ServiceImpl implements LogisticsService { @Autowired private LogisticsPluginFactory logisticsPluginFactory; @Autowired private OrderService orderService; @Autowired private OrderItemService orderItemService; @Autowired private StoreLogisticsService storeLogisticsService; @Autowired private StoreDetailService storeDetailService; @Autowired private SettingService settingService; @Override public Traces getLogisticTrack(String logisticsId, String logisticsNo, String phone) { try { return logisticsPluginFactory.filePlugin().pollQuery(this.getById(logisticsId), logisticsNo, phone); } catch (Exception e) { log.error("获取物流公司错误", e); } return null; } @Override public Traces getLogisticMapTrack(String logisticsId, String logisticsNo, String phone, String from, String to) { try { return logisticsPluginFactory.filePlugin().pollMapTrack(this.getById(logisticsId), logisticsNo, phone, from, to); } catch (Exception e) { log.error("获取物流公司错误", e); } return null; } @Override public Map labelOrder(String orderSn, String logisticsId) { //获取设置 LogisticsSetting logisticsSetting = this.getLogisticsSetting(); //获取订单及子订单 Order order = OperationalJudgment.judgment(orderService.getBySn(orderSn)); if ((LogisticsEnum.SHUNFENG.name().equals(logisticsSetting.getType()) && order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && order.getOrderStatus().equals(OrderStatusEnum.DELIVERED.name())) || (order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) && order.getOrderStatus().equals(OrderStatusEnum.UNDELIVERED.name()))) { //订单货物 List orderItems = orderItemService.getByOrderSn(orderSn); //获取对应物流 Logistics logistics; if(LogisticsEnum.SHUNFENG.name().equals(logisticsSetting.getType())){ logistics = this.getOne(new LambdaQueryWrapper().eq(Logistics::getCode,"SF")); }else{ logistics = this.getById(logisticsId); } // 店铺-物流公司设置 LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreLogistics::getLogisticsId, logistics.getId()); lambdaQueryWrapper.eq(StoreLogistics::getStoreId, order.getStoreId()); StoreLogistics storeLogistics = storeLogisticsService.getOne(lambdaQueryWrapper); //获取店家信息 StoreDeliverGoodsAddressDTO storeDeliverGoodsAddressDTO = storeDetailService.getStoreDeliverGoodsAddressDto(order.getStoreId()); LabelOrderDTO labelOrderDTO = new LabelOrderDTO(); labelOrderDTO.setOrder(order); labelOrderDTO.setOrderItems(orderItems); labelOrderDTO.setLogistics(logistics); labelOrderDTO.setStoreLogistics(storeLogistics); labelOrderDTO.setStoreDeliverGoodsAddressDTO(storeDeliverGoodsAddressDTO); //触发电子面单 return logisticsPluginFactory.filePlugin().labelOrder(labelOrderDTO); } else { throw new ServiceException(ResultCode.ORDER_LABEL_ORDER_ERROR); } } @Override public String sfCreateOrder(OrderDetailVO orderDetailVO) { return logisticsPluginFactory.filePlugin().createOrder(orderDetailVO); } @Override public List getOpenLogistics() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Logistics::getDisabled, SwitchEnum.OPEN.name()); return this.list(queryWrapper); } @Override public LogisticsSetting getLogisticsSetting() { Setting setting = settingService.get(SettingEnum.LOGISTICS_SETTING.name()); return JSONUtil.toBean(setting.getSettingValue(), LogisticsSetting.class); } }