package com.ydd.app.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ydd.api.PrintApi; import com.ydd.app.service.ApiWaimaiPrintService; import com.ydd.common.enums.WaimaiTypeEnums; import com.ydd.common.exception.CustomException; import com.ydd.common.utils.DateUtils; import com.ydd.common.utils.StringUtils; import com.ydd.module.domain.DspWaimai; import com.ydd.module.domain.ShopDevice; import com.ydd.module.domain.WaimaiOrder; import com.ydd.module.domain.WaimaiOrderDetail; import com.ydd.module.enums.OrderStatusEnum; import com.ydd.module.service.*; import com.ydd.third.common.vo.waimai.eleme.api.entity.order.OActivity; import com.ydd.third.common.vo.waimai.meituan.MeituanOrderExtraVo; import com.ydd.third.print.request.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Project:lb-server * Class: * ApiWaimaiServiceImpl * Description:TODO * Time:2021/3/2 17:16 * * @author zoe */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = @Autowired) public class ApiWaimaiPrintServiceImpl implements ApiWaimaiPrintService { private final IShopService iShopService; private final IDspWaimaiService iDspWaimaiService; private final IWaimaiOrderService iWaimaiOrderService; private final IWaimaiOrderDetailService iWaimaiOrderDetailService; private final IShopDeviceService iShopDeviceService; private final PrintApi unifiedPrintService; /** * 打印外卖单 * * @param waimaiId */ @Override public void printWaimai(Long waimaiId) { //获取所有设备 WaimaiOrder waimaiOrder = iWaimaiOrderService.getById(waimaiId); List deviceDtos = iShopDeviceService.list(new QueryWrapper().eq("shop_id", waimaiOrder.getShopId()).eq("status", 1).eq("deleted", 0)); if (CollectionUtils.isEmpty(deviceDtos)) { throw new CustomException("暂无可用的设备"); }else{ if(deviceDtos.get(0).getOpenOrderPrint()==0){ throw new CustomException("请开启自动接单打印"); } } List printDeviceDtos = new ArrayList<>(); for (ShopDevice shopDevice : deviceDtos) { PrintDeviceDto printDeviceDto = new PrintDeviceDto(); BeanUtil.copyProperties(shopDevice, printDeviceDto); printDeviceDtos.add(printDeviceDto); } List detailList = iWaimaiOrderDetailService.list(new QueryWrapper().eq("waimai_order_id", waimaiId)); PrintOrderDto printOrderDto = new PrintOrderDto(); BeanUtil.copyProperties(waimaiOrder, printOrderDto); printOrderDto.setEncryptRecipientPhone(waimaiOrder.getRecipientPhone()); // 取消单 if (waimaiOrder.getStatus().equals(OrderStatusEnum.CANCEL.status)){ printOrderDto.setOrderStatus(OrderStatusEnum.CANCEL.status); } if (waimaiOrder.getCaution().contains("收餐人隐私号")){ printOrderDto.setCaution(waimaiOrder.getCaution().substring(0,waimaiOrder.getCaution().indexOf("收餐人隐私号"))); }else { printOrderDto.setCaution(waimaiOrder.getCaution()); } if (waimaiOrder.getDeliveryTime()!=0) { String deliverTimeStr = com.ydd.third.common.utils.DateUtils.format( new Date(waimaiOrder.getDeliveryTime()*1000),"MM月dd日 HH:mm")+"送达"; printOrderDto.setDeliveryTime(deliverTimeStr); } List goodsDtos = Lists.newArrayList(); for (WaimaiOrderDetail waimaiOrderDetail : detailList) { PrintOrderGoodsDto printOrderGoodsDto = new PrintOrderGoodsDto(); BeanUtil.copyProperties(waimaiOrderDetail, printOrderGoodsDto); StringBuilder spec = new StringBuilder(); if(StringUtils.isNotBlank(waimaiOrderDetail.getFoodProperty())){ spec.append(waimaiOrderDetail.getFoodProperty()); } if(StringUtils.isNotBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(",").append(waimaiOrderDetail.getSpec()); }else if(StringUtils.isBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(waimaiOrderDetail.getSpec()); } if(StringUtils.isNotBlank(spec.toString())){ printOrderGoodsDto.setFoodName(waimaiOrderDetail.getFoodName()+"("+spec.toString()+")"); } goodsDtos.add(printOrderGoodsDto); } DspWaimai dspWaimai= iDspWaimaiService.getById(waimaiOrder.getWaimaiId()); List actDtos = new ArrayList<>(); if(StringUtils.isNotBlank(waimaiOrder.getExtras())){ // JSONObject json = JSON.parseObject(waimaiOrder.getExtras()); if(WaimaiTypeEnums.E_LE_ME.getType().equals(dspWaimai.getType())){ List list = JSONArray.parseArray(waimaiOrder.getExtras(),OActivity.class); if(CollectionUtils.isNotEmpty(list)){ for(OActivity activity:list){ if(activity!=null){ PrintOrderActDto actDto = new PrintOrderActDto(); actDto.setAmount(activity.getAmount()+""); actDto.setName(activity.getName()); actDto.setType(activity.getType()); actDtos.add(actDto); } } } }else if(WaimaiTypeEnums.MEI_TUAN.getType().equals(dspWaimai.getType())){ List list =JSONArray.parseArray(waimaiOrder.getExtras(),MeituanOrderExtraVo.class); if(CollectionUtils.isNotEmpty(list)){ for(MeituanOrderExtraVo vo:list){ if(vo!=null&&vo.getRemark()!=null){ PrintOrderActDto actDto = new PrintOrderActDto(); actDto.setAmount(vo.getReduceFee()+""); actDto.setType(vo.getType()+""); actDto.setName(vo.getRemark()); actDtos.add(actDto); } } } }else if(WaimaiTypeEnums.E_LE_ME_RETAIL.getType().equals(dspWaimai.getType())){ JSONArray array = JSONArray.parseArray(waimaiOrder.getExtras()); if(array!=null&&array.size()>0){ for(int i=0;i0?1:0); if(waimaiOrder.getOrderTime()!=null){ printOrderDto.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,waimaiOrder.getOrderTime())); }else { printOrderDto.setCreateTime(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS)); } printOrderDto.setOrderSource(dspWaimai.getName()); printOrderDto.setShopName(waimaiOrder.getPoiName()); printOrderDto.setOrderGoodsDtoList(goodsDtos); printOrderDto.setRecipientPrivacyPhone(waimaiOrder.getReceiptPrivacyPhone()); if (waimaiOrder.getLogisticsCode()!=null&&!waimaiOrder.getLogisticsCode().equals("0000") && !waimaiOrder.getLogisticsCode().equals("5001") && !waimaiOrder.getLogisticsCode().equals("00009003")){ // String addRess = orderVo.getRecipientAddressDesensitization().replaceAll("\\d+", "*"); printOrderDto.setRecipientAddress(waimaiOrder.getRecipientAddressDesensitization()); }else { printOrderDto.setRecipientAddress(waimaiOrder.getRecipientAddress()); } printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId())); printOrderDto.setQrCode(waimaiOrder.getOutOrderId()); //手动打印, 强制 PrintDto dto = new PrintDto(); dto.setPrintOrderDto(printOrderDto); dto.setDeviceDtoList(printDeviceDtos); dto.setIsforce(true); unifiedPrintService.printOrder(dto); } /** * 打印测试设备外卖单 * * @param waimaiId */ @Override public boolean printTestWaimai(String deviceSn, Long waimaiId,String qrCode) { WaimaiOrder waimaiOrder = iWaimaiOrderService.getById(waimaiId); List shopDevices = iShopDeviceService.list( new QueryWrapper() .eq("device_sn", deviceSn) .eq("status", 1) // .eq("shop_id","197") ); if (shopDevices == null) { return false; } if (shopDevices.get(0).getOnlineStatus() == 2) { return false; } PrintDeviceDto printDeviceDto = new PrintDeviceDto(); BeanUtil.copyProperties(shopDevices.get(0), printDeviceDto); //打印一次 printDeviceDto.setPrintCustomerCount(Integer.parseInt(shopDevices.get(0).getPrintCustomerCount()+"")); printDeviceDto.setPrintMerchantCount(Integer.parseInt(shopDevices.get(0).getPrintMerchantCount()+"")); printDeviceDto.setPrintKitchenCount(Integer.parseInt(shopDevices.get(0).getPrintKitchenCount()+"")); List detailList = iWaimaiOrderDetailService.list(new QueryWrapper().eq("waimai_order_id", waimaiId)); PrintOrderDto printOrderDto = new PrintOrderDto(); BeanUtil.copyProperties(waimaiOrder, printOrderDto); printOrderDto.setEncryptRecipientPhone(waimaiOrder.getRecipientPhone()); if (waimaiOrder.getDeliveryTime()!=0) { String deliverTimeStr = com.ydd.third.common.utils.DateUtils.format( new Date(waimaiOrder.getDeliveryTime()*1000),"MM月dd日 HH:mm")+"送达"; printOrderDto.setDeliveryTime(deliverTimeStr); } List goodsDtos = Lists.newArrayList(); for (WaimaiOrderDetail waimaiOrderDetail : detailList) { PrintOrderGoodsDto printOrderGoodsDto = new PrintOrderGoodsDto(); BeanUtil.copyProperties(waimaiOrderDetail, printOrderGoodsDto); StringBuilder spec = new StringBuilder(); if(StringUtils.isNotBlank(waimaiOrderDetail.getFoodProperty())){ spec.append(waimaiOrderDetail.getFoodProperty()); } if(StringUtils.isNotBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(",").append(waimaiOrderDetail.getSpec()); }else if(StringUtils.isBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(waimaiOrderDetail.getSpec()); } if(StringUtils.isNotBlank(spec.toString())){ printOrderGoodsDto.setFoodName(waimaiOrderDetail.getFoodName()+"("+spec.toString()+")"); } goodsDtos.add(printOrderGoodsDto); } DspWaimai dspWaimai= iDspWaimaiService.getById(waimaiOrder.getWaimaiId()); List actDtos = new ArrayList<>(); if(StringUtils.isNotBlank(waimaiOrder.getExtras())){ // JSONObject json = JSON.parseObject(waimaiOrder.getExtras()); if(WaimaiTypeEnums.E_LE_ME.getType().equals(dspWaimai.getType())){ List list = JSONArray.parseArray(waimaiOrder.getExtras(),OActivity.class); if(CollectionUtils.isNotEmpty(list)){ for(OActivity activity:list){ if(activity!=null){ PrintOrderActDto actDto = new PrintOrderActDto(); actDto.setAmount(activity.getAmount()+""); actDto.setName(activity.getName()); actDto.setType(activity.getType()); actDtos.add(actDto); } } } }else if(WaimaiTypeEnums.MEI_TUAN.getType().equals(dspWaimai.getType())){ List list =JSONArray.parseArray(waimaiOrder.getExtras(),MeituanOrderExtraVo.class); if(CollectionUtils.isNotEmpty(list)){ for(MeituanOrderExtraVo vo:list){ if(vo!=null&&vo.getRemark()!=null){ PrintOrderActDto actDto = new PrintOrderActDto(); actDto.setAmount(vo.getReduceFee()+""); actDto.setName(vo.getRemark()); actDto.setType(vo.getType()+""); actDtos.add(actDto); } } } }else if(WaimaiTypeEnums.E_LE_ME_RETAIL.getType().equals(dspWaimai.getType())){ JSONArray array = JSONArray.parseArray(waimaiOrder.getExtras()); if(array!=null&&array.size()>0){ for(int i=0;i0?1:0); if(waimaiOrder.getOrderTime()!=null){ printOrderDto.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,waimaiOrder.getOrderTime())); }else { printOrderDto.setCreateTime(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS)); } printOrderDto.setOrderSource(dspWaimai.getName()); printOrderDto.setShopName(waimaiOrder.getPoiName()); printOrderDto.setOrderGoodsDtoList(goodsDtos); // printOrderDto.setOrderStatus(OrderStatusEnum.CANCEL.status); printOrderDto.setQrCode(qrCode); if (!waimaiOrder.getLogisticsCode().equals("0000") && !waimaiOrder.getLogisticsCode().equals("5001") && !waimaiOrder.getLogisticsCode().equals("00009003")){ // String addRess = orderVo.getRecipientAddressDesensitization().replaceAll("\\d+", "*"); printOrderDto.setRecipientAddress(waimaiOrder.getRecipientAddressDesensitization()); }else { printOrderDto.setRecipientAddress(waimaiOrder.getRecipientAddress()); } printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId())); //手动打印, 强制 PrintDto dto = new PrintDto(); dto.setPrintOrderDto(printOrderDto); dto.setPrintDeviceDto(printDeviceDto); dto.setShopId(waimaiOrder.getShopId()); dto.setIsforce(true); unifiedPrintService.printTestOrder(dto); return true; } /** * 打印外卖单 * * @param waimaiOrder */ @Override public void autoPrintWaimai(WaimaiOrder waimaiOrder, List detailList) { //获取所有设备 List deviceDtos = iShopDeviceService.list(new QueryWrapper().eq("shop_id", waimaiOrder.getShopId()).eq("status", 1).eq("open_order_print", 1)); if (CollectionUtils.isEmpty(deviceDtos)) { return; } List printDeviceDtos = new ArrayList<>(); for (ShopDevice shopDevice : deviceDtos) { PrintDeviceDto printDeviceDto = new PrintDeviceDto(); BeanUtil.copyProperties(shopDevice, printDeviceDto); printDeviceDtos.add(printDeviceDto); } PrintOrderDto printOrderDto = new PrintOrderDto(); BeanUtil.copyProperties(waimaiOrder, printOrderDto); // printOrderDto.setEncryptRecipientPhone(waimaiOrder.getRecipientPhone()); List goodsDtos = Lists.newArrayList(); for (WaimaiOrderDetail waimaiOrderDetail : detailList) { PrintOrderGoodsDto printOrderGoodsDto = new PrintOrderGoodsDto(); BeanUtil.copyProperties(waimaiOrderDetail, printOrderGoodsDto); log.info("打印菜品:" + JSONObject.toJSONString(printOrderGoodsDto)); goodsDtos.add(printOrderGoodsDto); } printOrderDto.setShopName(iShopService.getShopName(waimaiOrder.getShopId())); printOrderDto.setOrderGoodsDtoList(goodsDtos); printOrderDto.setRecipientPrivacyPhone(waimaiOrder.getReceiptPrivacyPhone()); printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId())); printOrderDto.setQrCode(waimaiOrder.getOutOrderId()); //手动打印, 强制 PrintDto dto = new PrintDto(); dto.setPrintOrderDto(printOrderDto); dto.setDeviceDtoList(printDeviceDtos); dto.setIsforce(true); unifiedPrintService.printOrder(dto); } @Override public void autoPrintWaimaiNew(PrintOrderDto printOrderDto, List detailList,Long shopId,WaimaiOrder waimaiOrder) { //获取所有设备 List deviceDtos = iShopDeviceService.list(new QueryWrapper().eq("shop_id", shopId).eq("status", 1).eq("open_order_print", 1)); if (printOrderDto.getOrderStatus() != null){ // 取消订单打印 deviceDtos = iShopDeviceService.list(new QueryWrapper().eq("shop_id", shopId).eq("status", 1).eq("open_order_cancel_print", 1).eq("deleted",0)); } if (CollectionUtils.isEmpty(deviceDtos)) { return; } List printDeviceDtos = new ArrayList<>(); for (ShopDevice shopDevice : deviceDtos) { PrintDeviceDto printDeviceDto = new PrintDeviceDto(); BeanUtil.copyProperties(shopDevice, printDeviceDto); printDeviceDtos.add(printDeviceDto); } // PrintOrderDto printOrderDto = new PrintOrderDto(); // BeanUtil.copyProperties(waimaiOrder, printOrderDto); List goodsDtos = Lists.newArrayList(); for (WaimaiOrderDetail waimaiOrderDetail : detailList) { PrintOrderGoodsDto printOrderGoodsDto = new PrintOrderGoodsDto(); BeanUtil.copyProperties(waimaiOrderDetail, printOrderGoodsDto); StringBuilder spec = new StringBuilder(); if(StringUtils.isNotBlank(waimaiOrderDetail.getFoodProperty())){ spec.append(waimaiOrderDetail.getFoodProperty()); } if(StringUtils.isNotBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(",").append(waimaiOrderDetail.getSpec()); }else if(StringUtils.isBlank(spec.toString())&&StringUtils.isNotBlank(waimaiOrderDetail.getSpec())){ spec.append(waimaiOrderDetail.getSpec()); } if(StringUtils.isNotBlank(spec.toString())){ printOrderGoodsDto.setFoodName(waimaiOrderDetail.getFoodName()+"("+spec.toString()+")"); } log.info("打印菜品:" + JSONObject.toJSONString(printOrderGoodsDto)); goodsDtos.add(printOrderGoodsDto); } // printOrderDto.setShopName(iShopService.getShopName(waimaiOrder.getShopId())); printOrderDto.setOrderGoodsDtoList(goodsDtos); // 发票信息 if (StringUtils.isNotBlank(waimaiOrder.getInvoiceTitle())){ printOrderDto.setInvoiceTitle(waimaiOrder.getInvoiceTitle()); } if (StringUtils.isNotBlank(waimaiOrder.getTaxpayerId())){ printOrderDto.setTaxpayerId(waimaiOrder.getTaxpayerId()); } printOrderDto.setRecipientPrivacyPhone(waimaiOrder.getReceiptPrivacyPhone()); printOrderDto.setEncryptRecipientPhone(waimaiOrder.getRecipientPhone()); printOrderDto.setOpenQrCode(iShopService.getOpenQrCode(waimaiOrder.getShopId())); printOrderDto.setQrCode(waimaiOrder.getOutOrderId()); //手动打印, 强制 PrintDto dto = new PrintDto(); dto.setPrintOrderDto(printOrderDto); dto.setDeviceDtoList(printDeviceDtos); dto.setIsforce(true); unifiedPrintService.printOrder(dto); } }