添加单独打票相关mq处理
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.chaozhanggui.system.cashierservice.entity;
|
package com.chaozhanggui.system.cashierservice.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -37,7 +38,8 @@ public class TbOrderDetail implements Serializable {
|
|||||||
private BigDecimal priceAmount;
|
private BigDecimal priceAmount;
|
||||||
private BigDecimal packAmount;
|
private BigDecimal packAmount;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.chaozhanggui.system.cashierservice.entity;
|
package com.chaozhanggui.system.cashierservice.entity;
|
||||||
|
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@ToString
|
||||||
public class TbPrintMachine implements Serializable {
|
public class TbPrintMachine implements Serializable {
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.chaozhanggui.system.cashierservice.entity;
|
package com.chaozhanggui.system.cashierservice.entity;
|
||||||
|
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@ToString
|
||||||
public class TbPrintMachineWithBLOBs extends TbPrintMachine implements Serializable {
|
public class TbPrintMachineWithBLOBs extends TbPrintMachine implements Serializable {
|
||||||
private String config;
|
private String config;
|
||||||
|
|
||||||
@@ -24,4 +27,4 @@ public class TbPrintMachineWithBLOBs extends TbPrintMachine implements Serializa
|
|||||||
public void setCategoryList(String categoryList) {
|
public void setCategoryList(String categoryList) {
|
||||||
this.categoryList = categoryList == null ? null : categoryList.trim();
|
this.categoryList = categoryList == null ? null : categoryList.trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.chaozhanggui.system.cashierservice.mybatis;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.chaozhanggui.system.cashierservice.entity.TbCashierCart;
|
||||||
|
import com.chaozhanggui.system.cashierservice.entity.TbOrderDetail;
|
||||||
|
|
||||||
|
public interface MPOrderDetailMapper extends BaseMapper<TbOrderDetail> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,459 @@
|
|||||||
|
package com.chaozhanggui.system.cashierservice.rabbit;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.chaozhanggui.system.cashierservice.dao.*;
|
||||||
|
import com.chaozhanggui.system.cashierservice.entity.*;
|
||||||
|
import com.chaozhanggui.system.cashierservice.model.CategoryInfo;
|
||||||
|
import com.chaozhanggui.system.cashierservice.model.OrderDetailPO;
|
||||||
|
import com.chaozhanggui.system.cashierservice.mybatis.MPOrderDetailMapper;
|
||||||
|
import com.chaozhanggui.system.cashierservice.mybatis.MpPrintMachineMapper;
|
||||||
|
import com.chaozhanggui.system.cashierservice.util.*;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@Service
|
||||||
|
public class PrintConsumer {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
TbShopUserMapper tbShopUserMapper;
|
||||||
|
@Autowired
|
||||||
|
private TbOrderInfoMapper tbOrderInfoMapper;
|
||||||
|
@Autowired
|
||||||
|
private TbPrintMachineMapper tbPrintMachineMapper;
|
||||||
|
@Autowired
|
||||||
|
private TbCashierCartMapper tbCashierCartMapper;
|
||||||
|
@Autowired
|
||||||
|
private TbProductSkuMapper tbProductSkuMapper;
|
||||||
|
@Autowired
|
||||||
|
private TbShopInfoMapper tbShopInfoMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TbProductMapper tbProductMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TbOrderDetailMapper tbOrderDetailMapper;
|
||||||
|
@Autowired
|
||||||
|
|
||||||
|
private RedisUtil redisUtils;
|
||||||
|
|
||||||
|
private final RedisTemplate<String, Object> redisTemplate;
|
||||||
|
@Autowired
|
||||||
|
private MpPrintMachineMapper mpPrintMachineMapper;
|
||||||
|
@Autowired
|
||||||
|
private MPOrderDetailMapper mPOrderDetailMapper;
|
||||||
|
|
||||||
|
public PrintConsumer(RedisTemplate<String, Object> redisTemplate) {
|
||||||
|
this.redisTemplate = redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RabbitListener(queues = {RabbitConstants.QUEUE_PRINT_DISHES})
|
||||||
|
public void printDishesListener(JSONObject jsonObject) {
|
||||||
|
try {
|
||||||
|
log.info("打印消息mq 接收到打印菜品消息,消息内容: {}", jsonObject);
|
||||||
|
Integer orderId = jsonObject.getInteger("orderId");
|
||||||
|
JSONArray orderDetailIds = jsonObject.getJSONArray("orderDetailIds");
|
||||||
|
Boolean isReturn = jsonObject.getBoolean("isReturn");
|
||||||
|
|
||||||
|
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(orderId);
|
||||||
|
if (ObjectUtil.isEmpty(orderInfo)) {
|
||||||
|
log.error("没有对应的订单信息");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<TbOrderDetail> orderDetails = mPOrderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
|
||||||
|
.in(TbOrderDetail::getId, orderDetailIds));
|
||||||
|
getPrintMachine(Integer.valueOf(orderInfo.getShopId()), "cash").forEach(machine -> {
|
||||||
|
log.info("打印机信息: {}", machine);
|
||||||
|
JSONObject config = JSONObject.parseObject(machine.getConfig());
|
||||||
|
String model = config.getString("model");
|
||||||
|
if (!"one".equals(model)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CategoryInfo> categoryInfos = JSONUtil.parseJSONStr2TList(config.getJSONArray("categoryList").toString(), CategoryInfo.class);
|
||||||
|
orderDetails.forEach(item -> {
|
||||||
|
printDishesTicket(isReturn, machine, item, orderInfo, categoryInfos);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("打印菜品失败", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@RabbitListener(queues = {RabbitConstants.QUEUE_PRINT_PLACE})
|
||||||
|
public void printPlaceListener(JSONObject jsonObject) {
|
||||||
|
try {
|
||||||
|
log.info("打印消息mq 接收到打印结算单消息,消息内容: {}", jsonObject);
|
||||||
|
Integer orderId = jsonObject.getInteger("orderId");
|
||||||
|
Boolean isReturn = jsonObject.getBoolean("isReturn");
|
||||||
|
|
||||||
|
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(orderId);
|
||||||
|
if (ObjectUtil.isEmpty(orderInfo)) {
|
||||||
|
log.error("没有对应的订单信息");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
|
||||||
|
if (shopInfo == null) {
|
||||||
|
log.error("店铺信息不存在");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPrintMachine(shopInfo.getId(), "cash").forEach(machine -> {
|
||||||
|
log.info("打印机信息: {}", machine);
|
||||||
|
JSONObject config = JSONObject.parseObject(machine.getConfig());
|
||||||
|
String model = config.getString("model");
|
||||||
|
if (!"normal".equals(model)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printPlaceTicket(isReturn, machine, orderInfo, shopInfo);
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("打印菜品失败", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<TbPrintMachine> getPrintMachine(Integer shopId, String subType) {
|
||||||
|
TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(shopId);
|
||||||
|
if (ObjectUtil.isEmpty(shopInfo)) {
|
||||||
|
log.error("店铺信息不存在");
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<TbPrintMachine> list = mpPrintMachineMapper.selectList(new LambdaQueryWrapper<TbPrintMachine>()
|
||||||
|
.eq(TbPrintMachine::getStatus, 1)
|
||||||
|
.eq(TbPrintMachine::getShopId, shopId)
|
||||||
|
.eq(TbPrintMachine::getSubType, subType)
|
||||||
|
.eq(TbPrintMachine::getConnectionType, "network"));
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
log.error("店铺未配置打印机,店铺id: {}", shopId);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
log.info("打印机列表: {}", list);
|
||||||
|
return list;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打印菜品单
|
||||||
|
*
|
||||||
|
* @param isReturn 是否退款单
|
||||||
|
*/
|
||||||
|
private void printDishesTicket(boolean isReturn, TbPrintMachine tbPrintMachineWithBLOBs, TbOrderDetail item, TbOrderInfo orderInfo, List<CategoryInfo> categoryInfos) {
|
||||||
|
log.info("开始打印一菜一品票据,商品名:{}", item.getProductName());
|
||||||
|
if (item.getProductId().equals(-999)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String categoryId = tbProductMapper.selectByPrimaryKey(item.getProductId()).getCategoryId();
|
||||||
|
TbProductSkuWithBLOBs sku = tbProductSkuMapper.selectByPrimaryKey(item.getProductSkuId());
|
||||||
|
if (sku == null) {
|
||||||
|
log.error("商品不存在, id: {}", item.getProductSkuId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
long count = categoryInfos.stream().filter(c ->
|
||||||
|
c.getId().toString().equals(categoryId)
|
||||||
|
).count();
|
||||||
|
|
||||||
|
if (count == 0) {
|
||||||
|
log.warn("分类未添加菜品: {} : {}", item.getProductName(), sku.getSpecSnap());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String remark = StrUtil.isNotBlank(sku.getSpecSnap()) ? sku.getSpecSnap() : "";
|
||||||
|
item.setRemark(remark);
|
||||||
|
|
||||||
|
String data;
|
||||||
|
String voiceJson;
|
||||||
|
if (isReturn) {
|
||||||
|
|
||||||
|
data = PrinterUtils.getPrintData("return",
|
||||||
|
StrUtil.isBlank(orderInfo.getTableName()) ? orderInfo.getMasterId() : orderInfo.getTableName(),
|
||||||
|
DateUtils.getTime(new Date(orderInfo.getCreatedAt())), item.getProductName(), Math.abs(item.getNum()), remark);
|
||||||
|
voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔退款订单,请及时处理\"}";
|
||||||
|
PrinterUtils.printTickets(voiceJson, 3, 1, tbPrintMachineWithBLOBs.getAddress(), data);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
data = PrinterUtils.getPrintData("", orderInfo.getMasterId(),
|
||||||
|
DateUtils.getTime(new Date(orderInfo.getCreatedAt())), item.getProductName(),
|
||||||
|
item.getNum(), remark);
|
||||||
|
voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔新的订单,请及时处理\"}";
|
||||||
|
PrinterUtils.printTickets(voiceJson, 3, 1, tbPrintMachineWithBLOBs.getAddress(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打印结算单
|
||||||
|
*/
|
||||||
|
private void printPlaceTicket(boolean isReturn, TbPrintMachine printMachine, TbOrderInfo orderInfo, TbShopInfo shopInfo) {
|
||||||
|
|
||||||
|
List<TbOrderDetail> tbOrderDetails = tbOrderDetailMapper.selectAllByOrderId(orderInfo.getId());
|
||||||
|
if (!tbOrderDetails.isEmpty()) {
|
||||||
|
List<OrderDetailPO.Detail> detailList = new ArrayList<>();
|
||||||
|
tbOrderDetails.parallelStream().forEach(it -> {
|
||||||
|
|
||||||
|
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getProductSkuId()));
|
||||||
|
String remark = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
|
||||||
|
remark = tbProductSkuWithBLOBs.getSpecSnap();
|
||||||
|
}
|
||||||
|
OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getProductName(), it.getNum().toString(), it.getPriceAmount().toPlainString(), remark);
|
||||||
|
detailList.add(detail);
|
||||||
|
|
||||||
|
});
|
||||||
|
String balance = "0";
|
||||||
|
|
||||||
|
if ("deposit".equals(orderInfo.getPayType())) {
|
||||||
|
TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMemberId()));
|
||||||
|
if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
|
||||||
|
balance = user.getAmount().toPlainString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!detailList.isEmpty()) {
|
||||||
|
if (isReturn) {
|
||||||
|
OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印",
|
||||||
|
ObjectUtil.isEmpty(orderInfo.getMasterId()) ||
|
||||||
|
ObjectUtil.isNull(orderInfo.getMasterId()) ? orderInfo.getTableName() : orderInfo.getMasterId(),
|
||||||
|
orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())),
|
||||||
|
"【POS-1】001", orderInfo.getPayAmount().toPlainString(), balance, orderInfo.getPayType(),
|
||||||
|
"0", detailList, orderInfo.getRemark(), null, null);
|
||||||
|
|
||||||
|
String printType = "退款单";
|
||||||
|
|
||||||
|
String data = PrinterUtils.getCashPrintData(detailPO, printType, "return");
|
||||||
|
String voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔新的订单,请及时处理\"}";
|
||||||
|
PrinterUtils.printTickets(voiceJson, 1, 1, printMachine.getAddress(), data);
|
||||||
|
} else {
|
||||||
|
OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印",
|
||||||
|
orderInfo.getOrderType().equals("miniapp") ? orderInfo.getTableName() : orderInfo.getMasterId(),
|
||||||
|
orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())),
|
||||||
|
"【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance,
|
||||||
|
(ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()),
|
||||||
|
"0", detailList, orderInfo.getRemark(), orderInfo.getDiscountAmount() != null ? orderInfo.getDiscountAmount().toPlainString() : null,
|
||||||
|
orderInfo.getDiscountRatio() != null ? orderInfo.getDiscountRatio().toPlainString() : null);
|
||||||
|
detailPO.setOutNumber(orderInfo.getOutNumber());
|
||||||
|
String printType = "结算单";
|
||||||
|
String data = PrinterUtils.getCashPrintData(detailPO, printType, orderInfo.getOrderType());
|
||||||
|
String voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔新的订单,请及时处理\"}";
|
||||||
|
PrinterUtils.printTickets(voiceJson, 3, 1, printMachine.getAddress(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void fePrinter(TbPrintMachine tbPrintMachineWithBLOBs, String model, TbOrderInfo orderInfo, TbShopInfo shopInfo, String printerNum, List<CategoryInfo> categoryInfos) {
|
||||||
|
String orderId = orderInfo.getId().toString();
|
||||||
|
switch (tbPrintMachineWithBLOBs.getSubType()) {
|
||||||
|
case "label": //标签打印机
|
||||||
|
List<TbCashierCart> cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(), "final");
|
||||||
|
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
|
||||||
|
cashierCarts.parallelStream().forEach(it -> {
|
||||||
|
|
||||||
|
String categoryId;
|
||||||
|
if (ObjectUtil.isEmpty(it.getCategoryId())) {
|
||||||
|
categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
|
||||||
|
} else {
|
||||||
|
categoryId = it.getCategoryId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Long count = categoryInfos.stream().filter(c ->
|
||||||
|
c.getId().toString().equals(categoryId)
|
||||||
|
).count();
|
||||||
|
|
||||||
|
log.info("获取当前类别是否未打印类别:{}", count);
|
||||||
|
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
|
||||||
|
String remark = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
|
||||||
|
remark = tbProductSkuWithBLOBs.getSpecSnap();
|
||||||
|
}
|
||||||
|
for (int i = 0; i < it.getNumber(); i++) {
|
||||||
|
FeieyunPrintUtil.printLabelMsg(tbPrintMachineWithBLOBs.getAddress(), orderInfo.getTableName(), it.getName(), 1, DateUtils.getTimes(new Date(orderInfo.getCreatedAt())), it.getSalePrice().toPlainString(), remark);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "cash": //小票打印机
|
||||||
|
switch (model) {
|
||||||
|
case "normal": //普通出单
|
||||||
|
|
||||||
|
if ("return".equals(orderInfo.getOrderType())) {
|
||||||
|
List<TbOrderDetail> tbOrderDetails = tbOrderDetailMapper.selectAllByOrderId(Integer.valueOf(orderId));
|
||||||
|
if (ObjectUtil.isNotEmpty(tbOrderDetails) && tbOrderDetails.size() > 0) {
|
||||||
|
List<OrderDetailPO.Detail> detailList = new ArrayList<>();
|
||||||
|
tbOrderDetails.parallelStream().forEach(it -> {
|
||||||
|
String categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
|
||||||
|
|
||||||
|
Long count = categoryInfos.stream().filter(c ->
|
||||||
|
c.getId().toString().equals(categoryId)
|
||||||
|
).count();
|
||||||
|
log.info("获取当前类别是否未打印类别:{}", count);
|
||||||
|
|
||||||
|
|
||||||
|
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getProductSkuId()));
|
||||||
|
String remark = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
|
||||||
|
remark = tbProductSkuWithBLOBs.getSpecSnap();
|
||||||
|
}
|
||||||
|
OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getProductName(), it.getNum().toString(), it.getPriceAmount().toPlainString(), remark);
|
||||||
|
detailList.add(detail);
|
||||||
|
|
||||||
|
});
|
||||||
|
String balance = "0";
|
||||||
|
|
||||||
|
if ("deposit".equals(orderInfo.getPayType())) {
|
||||||
|
TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMemberId()));
|
||||||
|
if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
|
||||||
|
balance = user.getAmount().toPlainString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
|
||||||
|
// OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
|
||||||
|
OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", ObjectUtil.isEmpty(orderInfo.getMasterId()) || ObjectUtil.isNull(orderInfo.getMasterId()) ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList, orderInfo.getRemark(), orderInfo.getDiscountAmount().toPlainString(), orderInfo.getDiscountRatio().toPlainString());
|
||||||
|
|
||||||
|
String printType = "退款单";
|
||||||
|
|
||||||
|
String data = PrinterUtils.getCashPrintData(detailPO, printType, "return");
|
||||||
|
// String voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔新的订单,请及时处理\"}";
|
||||||
|
// PrinterUtils.printTickets(voiceJson,1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
cashierCarts = cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(), "final");
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
|
||||||
|
List<OrderDetailPO.Detail> detailList = new ArrayList<>();
|
||||||
|
cashierCarts.parallelStream().forEach(it -> {
|
||||||
|
String categoryId;
|
||||||
|
if (ObjectUtil.isEmpty(it.getCategoryId())) {
|
||||||
|
categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
|
||||||
|
} else {
|
||||||
|
categoryId = it.getCategoryId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Long count = categoryInfos.stream().filter(c ->
|
||||||
|
c.getId().toString().equals(categoryId)
|
||||||
|
).count();
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
|
||||||
|
String remark = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
|
||||||
|
remark = tbProductSkuWithBLOBs.getSpecSnap();
|
||||||
|
}
|
||||||
|
OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getName(), it.getNumber().toString(), it.getTotalAmount().toPlainString(), remark);
|
||||||
|
detailList.add(detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
String balance = "0";
|
||||||
|
|
||||||
|
if ("deposit".equals(orderInfo.getPayType())) {
|
||||||
|
TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMemberId()));
|
||||||
|
if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
|
||||||
|
balance = user.getAmount().toPlainString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
|
||||||
|
OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getOrderType().equals("miniapp") ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, (ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()), "0", detailList, orderInfo.getRemark(), null, null);
|
||||||
|
String printType = "结算单";
|
||||||
|
|
||||||
|
if ("return".equals(orderInfo.getOrderType())) {
|
||||||
|
printType = "退款单";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FeieyunPrintUtil.getCashPrintData(detailPO, tbPrintMachineWithBLOBs.getAddress(), printType, printType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "one": //一菜一品
|
||||||
|
|
||||||
|
if (!orderInfo.getStatus().equals("unpaid")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cashierCarts = tbCashierCartMapper.selectByOrderId(orderId, "final");
|
||||||
|
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
|
||||||
|
|
||||||
|
cashierCarts.parallelStream().forEach(it -> {
|
||||||
|
|
||||||
|
String categoryId;
|
||||||
|
if (ObjectUtil.isEmpty(it.getCategoryId())) {
|
||||||
|
categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
|
||||||
|
} else {
|
||||||
|
categoryId = it.getCategoryId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Long count = categoryInfos.stream().filter(c ->
|
||||||
|
c.getId().toString().equals(categoryId)
|
||||||
|
).count();
|
||||||
|
|
||||||
|
if (count > 0) {
|
||||||
|
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
|
||||||
|
String remark = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
|
||||||
|
remark = tbProductSkuWithBLOBs.getSpecSnap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FeieyunPrintUtil.getPrintData(tbPrintMachineWithBLOBs.getAddress(), orderInfo.getMasterId(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), it.getName(), it.getNumber(), remark);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "category": //分类出单
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "kitchen": //出品打印机
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,20 +15,20 @@ import org.springframework.context.annotation.Scope;
|
|||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class RabbitConfig {
|
public class RabbitConfig {
|
||||||
|
|
||||||
@Value("${spring.rabbitmq.host}")
|
@Value("${spring.rabbitmq.host}")
|
||||||
private String host;
|
private String host;
|
||||||
|
|
||||||
@Value("${spring.rabbitmq.port}")
|
@Value("${spring.rabbitmq.port}")
|
||||||
private int port;
|
private int port;
|
||||||
|
|
||||||
@Value("${spring.rabbitmq.username}")
|
@Value("${spring.rabbitmq.username}")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
@Value("${spring.rabbitmq.password}")
|
@Value("${spring.rabbitmq.password}")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public ConnectionFactory connectionFactory() {
|
public ConnectionFactory connectionFactory() {
|
||||||
@@ -39,7 +39,7 @@ public class RabbitConfig {
|
|||||||
connectionFactory.setPublisherConfirms(true);
|
connectionFactory.setPublisherConfirms(true);
|
||||||
return connectionFactory;
|
return connectionFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
//必须是prototype类型
|
//必须是prototype类型
|
||||||
@@ -51,12 +51,12 @@ public class RabbitConfig {
|
|||||||
public DirectExchange defaultExchange_Register() {
|
public DirectExchange defaultExchange_Register() {
|
||||||
return new DirectExchange(RabbitConstants.CART_ORDER_COLLECT_PUT);
|
return new DirectExchange(RabbitConstants.CART_ORDER_COLLECT_PUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Queue queuePut_Register() {
|
public Queue queuePut_Register() {
|
||||||
return new Queue(RabbitConstants.CART_ORDER_COLLECT_QUEUE_PUT, true); //队列持久
|
return new Queue(RabbitConstants.CART_ORDER_COLLECT_QUEUE_PUT, true); //队列持久
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Binding bindingPut_Register() {
|
public Binding bindingPut_Register() {
|
||||||
return BindingBuilder.bind(queuePut_Register()).to(defaultExchange_Register()).with(RabbitConstants.CART_ORDER_COLLECT_ROUTINGKEY_PUT);
|
return BindingBuilder.bind(queuePut_Register()).to(defaultExchange_Register()).with(RabbitConstants.CART_ORDER_COLLECT_ROUTINGKEY_PUT);
|
||||||
@@ -142,7 +142,28 @@ public class RabbitConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 打印出票
|
||||||
|
@Bean
|
||||||
|
DirectExchange printExchange() {
|
||||||
|
return new DirectExchange(RabbitConstants.EXCHANGE_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
Queue printDishesQueue() {
|
||||||
|
return new Queue(RabbitConstants.QUEUE_PRINT_DISHES);
|
||||||
|
}
|
||||||
|
@Bean
|
||||||
|
Binding bindingDishedPrint(Queue printDishesQueue, DirectExchange printExchange) {
|
||||||
|
return BindingBuilder.bind(printDishesQueue).to(printExchange).with(RabbitConstants.ROUTING_KEY_PRINT_DISHES);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
Queue printPlaceQueue() {
|
||||||
|
return new Queue(RabbitConstants.QUEUE_PRINT_PLACE);
|
||||||
|
}
|
||||||
|
@Bean
|
||||||
|
Binding bindingPlacePrint(Queue printPlaceQueue, DirectExchange printExchange) {
|
||||||
|
return BindingBuilder.bind(printPlaceQueue).to(printExchange).with(RabbitConstants.ROUTING_KEY_PRINT_PLACE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,4 +58,13 @@ public interface RabbitConstants {
|
|||||||
public static final String BALANCE_QUEUE_PUT="balance_queue_put";
|
public static final String BALANCE_QUEUE_PUT="balance_queue_put";
|
||||||
|
|
||||||
public static final String BALANCE_ROUTINGKEY_PUT="balance_routingkey_put";
|
public static final String BALANCE_ROUTINGKEY_PUT="balance_routingkey_put";
|
||||||
|
|
||||||
|
// 打印出票
|
||||||
|
String EXCHANGE_PRINT = "exchange.print";
|
||||||
|
// 菜品打印
|
||||||
|
String QUEUE_PRINT_DISHES = "queue.dishes.print";
|
||||||
|
String ROUTING_KEY_PRINT_DISHES = "routing.dishes.print";
|
||||||
|
// 下单打印
|
||||||
|
String QUEUE_PRINT_PLACE = "queue.place.order.print";
|
||||||
|
String ROUTING_KEY_PRINT_PLACE = "routing.place.order.print";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user