Merge remote-tracking branch 'origin/master'

This commit is contained in:
Tankaikai
2025-03-12 14:18:00 +08:00
3 changed files with 50 additions and 19 deletions

View File

@@ -17,5 +17,10 @@ public class OrderInfoPrintDTO{
*/ */
@NotNull(message = "id不为空") @NotNull(message = "id不为空")
private Long id; private Long id;
/**
* 0结算单 1退款单
*/
@NotNull(message = "打印类型不为空")
private Integer type;
} }

View File

@@ -5,12 +5,14 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.czg.order.entity.OrderDetail; import com.czg.order.entity.OrderDetail;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@@ -87,7 +89,7 @@ public interface PrinterImpl {
price = addSpace(price, b2); price = addSpace(price, b2);
num = addSpace(num, b3); num = addSpace(num, b3);
total = addSpace(total, b4); total = addSpace(total, b4);
String otherStr = " %s%s %s".formatted(price, num, total); String otherStr = " %s%s%s".formatted(price, num, total);
int titleByteLen = StrUtil.bytes(title, CharsetUtil.CHARSET_GBK).length; int titleByteLen = StrUtil.bytes(title, CharsetUtil.CHARSET_GBK).length;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@@ -171,7 +173,7 @@ public interface PrinterImpl {
// data.append("<OUT:15>"); // data.append("<OUT:15>");
// data.append("<BR>"); // data.append("<BR>");
// 18个空格 12 // 18个空格 12
data.append(getFormatLabel("品名 数量 小计", signLabelInfo.s)) data.append(getFormatLabel("品名 数量 小计 ", signLabelInfo.s))
.append(signLabelInfo.br); .append(signLabelInfo.br);
// data.append("<S>品名 数量 小计</S><BR>"); // data.append("<S>品名 数量 小计</S><BR>");
data.append(getFormatLabel("--------------------------------", signLabelInfo.s)) data.append(getFormatLabel("--------------------------------", signLabelInfo.s))
@@ -180,7 +182,7 @@ public interface PrinterImpl {
for (OrderDetail detail : detailList) { for (OrderDetail detail : detailList) {
String number = detail.getNum().stripTrailingZeros().toPlainString(); String number = detail.getNum().stripTrailingZeros().toPlainString();
String row = getRow(detail.getProductName(), "", number, String row = getRow(detail.getProductName(), "", number,
toPlainStr(detail.getPayAmount().stripTrailingZeros().toPlainString()), 23, 0, 5, 4); toPlainStr(detail.getPayAmount().stripTrailingZeros().toPlainString()), 21, 0, 5, 6);
data.append(row); data.append(row);
if (StrUtil.isNotBlank(detail.getSkuName())) { if (StrUtil.isNotBlank(detail.getSkuName())) {
data.append(getFormatLabel(StrUtil.format("规格:{}", detail.getSkuName()), signLabelInfo.s)) data.append(getFormatLabel(StrUtil.format("规格:{}", detail.getSkuName()), signLabelInfo.s))
@@ -194,12 +196,15 @@ public interface PrinterImpl {
if (!JSONUtil.isTypeJSONArray(proGroupInfo)) { if (!JSONUtil.isTypeJSONArray(proGroupInfo)) {
continue; continue;
} }
JSONArray subItems = JSONUtil.parseArray(proGroupInfo); JSONArray subItems = com.alibaba.fastjson2.JSONArray.parseArray(proGroupInfo);
for (int i = 0; i < subItems.size(); i++) { for (Object subItem : subItems) {
String proName = subItems.getJSONObject(i).getStr("proName"); JSONObject jsonObject = (JSONObject) subItem;
int qty = subItems.getJSONObject(i).getInt("number"); jsonObject.getJSONArray("goods").forEach(item -> {
String subRow = getRow(" - " + proName, "", qty + ".00", "0.00", 20, 0, 3, 6); String proName = ((JSONObject) item).getString("proName");
data.append(subRow); String qty = ((JSONObject) item).getString("number");
String subRow = getRow(" - " + proName, "", qty, "0.00", 21, 0, 5, 6);
data.append(subRow);
});
} }
} }
if (ObjectUtil.isNotNull(printInfoDTO.getDiscountAmount())) { if (ObjectUtil.isNotNull(printInfoDTO.getDiscountAmount())) {
@@ -319,12 +324,16 @@ public interface PrinterImpl {
// builder.append("<S><L>备注: ").append(note).append(" </L></S><BR>"); // builder.append("<S><L>备注: ").append(note).append(" </L></S><BR>");
} }
if (!StrUtil.isBlank(proGroupInfo) && JSONUtil.isTypeJSONArray(proGroupInfo)) { if (!StrUtil.isBlank(proGroupInfo) && JSONUtil.isTypeJSONArray(proGroupInfo)) {
JSONArray subItems = JSONUtil.parseArray(proGroupInfo); JSONArray subItems = JSONArray.parseArray(proGroupInfo);
for (int i = 0; i < subItems.size(); i++) { for (Object subItem : subItems) {
String proName = subItems.getJSONObject(i).getStr("proName"); JSONObject jsonObject = (JSONObject) subItem;
int qty = subItems.getJSONObject(i).getInt("number"); jsonObject.getJSONArray("goods").forEach(item -> {
builder.append(StrUtil.format("({}) x {}", proName, qty)) String proName = ((JSONObject) item).getString("proName");
.append(signLabelInfo.br); String qty = ((JSONObject) item).getString("number -> 1");
builder.append(StrUtil.format("({}) x {}", proName, qty))
.append(signLabelInfo.br);
});
// builder.append("<CS:32>(").append(i + 1).append(")").append(proName).append(" x ").append(qty).append("</CS><BR>"); // builder.append("<CS:32>(").append(i + 1).append(")").append(proName).append(" x ").append(qty).append("</CS><BR>");
} }
} }
@@ -390,7 +399,11 @@ public interface PrinterImpl {
* @return 填充之后的字符串 * @return 填充之后的字符串
*/ */
default String addSpace(String str, int size) { default String addSpace(String str, int size) {
return StrUtil.fillAfter(str, ' ', size); int len = str.length();
if (len < size) {
str = str + " ".repeat(size - len);
}
return str;
} }
/** /**
@@ -427,8 +440,20 @@ public interface PrinterImpl {
* @return 添加间距的字符串 * @return 添加间距的字符串
*/ */
default String titleAddSpace(String str, int b1) { default String titleAddSpace(String str, int b1) {
int byteLen = StrUtil.bytes(str, CharsetUtil.CHARSET_GBK).length; int k = 0;
return StrUtil.fillAfter(str, ' ', b1 - byteLen); try {
k = str.getBytes("GBK").length;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
str = str + " ".repeat(Math.max(0, b1 - k));
return str;
}
public static void main(String[] args) {
System.out.println("水煮肉片".length());
System.out.println( StrUtil.repeat(' ', 8));
System.out.println(StrUtil.fillAfter("水煮肉片", ' ', 21));
} }
/** /**

View File

@@ -706,6 +706,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderInfo.setSeatAmount(shopInfo.getTableFee().multiply(new BigDecimal(param.getSeatNum()))); orderInfo.setSeatAmount(shopInfo.getTableFee().multiply(new BigDecimal(param.getSeatNum())));
orderInfo.setSeatNum(param.getSeatNum()); orderInfo.setSeatNum(param.getSeatNum());
} }
orderInfo.setTableCode(param.getTableCode());
orderInfo.setPlaceNum(param.getPlaceNum()); orderInfo.setPlaceNum(param.getPlaceNum());
orderInfo.setOriginAmount(param.getOriginAmount()); orderInfo.setOriginAmount(param.getOriginAmount());
orderInfo.setOrderAmount(BigDecimal.ZERO); orderInfo.setOrderAmount(BigDecimal.ZERO);