Commit a23b40bd authored by Allen Chen's avatar Allen Chen

commit

parent 54e51e85
......@@ -3,25 +3,25 @@ package org.ta.pddserver.config;
public class PddAPIConfig {
// 临沂海际韩国集运 生产环境参数
// 应用基础参数
public static final String CLIENT_ID = "8f5f3f9c92e847b2894fc9c0afce3d61";
public static final String CLIENT_SECRET = "281d79ad5117d20a51efb9e7b0d5f7ee336399b0";
// 基础API地址
public static final String URL = "https://ark-api.pinduoduo.com/ark/router";
// 工单API地址
public static final String URL_GD = "https://gw-api.pinduoduo.com/api/router";
// 基础API地址
// public static final String CLIENT_ID = "8f5f3f9c92e847b2894fc9c0afce3d61";
// public static final String CLIENT_SECRET = "281d79ad5117d20a51efb9e7b0d5f7ee336399b0";
// // 基础API地址
// public static final String URL = "https://ark-api.pinduoduo.com/ark/router";
// // 工单API地址
// public static final String URL_GD = "https://gw-api.pinduoduo.com/api/router";
//
// // 基础API地址
public static final String BASE_URL = "https://gw-api.pinduoduo.com/api/router";
// 临沂海际韩国集运 测试环境参数
// // 应用基础参数
// public static final String CLIENT_ID = "d0217707e1194c46b57e696ac7619a06";
// public static final String CLIENT_SECRET = "a5aba84483d8387030899f01276b06a194942470";
// // 基础API地址
// public static final String URL = "https://opengw-api.hutaojie.com/ark/router";
// // 工单API地址
// public static final String URL_GD = "https://opengw-api.hutaojie.com/api/router";
// 应用基础参数
public static final String CLIENT_ID = "d0217707e1194c46b57e696ac7619a06";
public static final String CLIENT_SECRET = "a5aba84483d8387030899f01276b06a194942470";
// 基础API地址
public static final String URL = "https://opengw-api.hutaojie.com/ark/router";
// 工单API地址
public static final String URL_GD = "https://opengw-api.hutaojie.com/api/router";
......
......@@ -98,7 +98,7 @@ public class DataGetController {
PddLogisticsCoTrackNotifyResponse response = JSON.parseObject(resp, PddLogisticsCoTrackNotifyResponse.class);
log.info("response = {}", JSON.toJSONString(response));
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true, "操作成功");
}
/*出库详情*/
......@@ -113,7 +113,7 @@ public class DataGetController {
map.put("detail", list);
map.put("receiver", collectOrderReceiverDetailResponse);
map.put("logistics", logistics);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map, "");
}
/*待拣货列表*/
......@@ -123,7 +123,7 @@ public class DataGetController {
if (collectOrderListRequest.getSize() > 100) {
collectOrderListRequest.setSize(100);
}
return JsonResponse.generateLocalCommonSuccessResponse(collectOrderImpl.getList(collectOrderListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(collectOrderImpl.getList(collectOrderListRequest), "");
}
private PddLogisticsCoTrackNotifyRequest.DataObject getDataObject(String code) {
......
......@@ -54,7 +54,7 @@ public class PddGDController {
/*工单列表*/
@PostMapping("/ticketList")
public JSONObject ticketList(HttpServletRequest request, @RequestBody TicketListRequest ticketListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(gdTicketImpl.getListByRequest(ticketListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(gdTicketImpl.getListByRequest(ticketListRequest), "");
}
/*工单详情*/
......@@ -75,7 +75,7 @@ public class PddGDController {
map.put("attachment", list);
map.put("reply", gDReplyList);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map, "");
}
/*上传图片*/
......@@ -97,7 +97,7 @@ public class PddGDController {
Map<String, Object> map = new HashMap<>();
map.put("image", image);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map, "");
}
......@@ -170,7 +170,7 @@ public class PddGDController {
}
return JsonResponse.generateLocalCommonSuccessResponse(replyRepsonse.getIs_success());
return JsonResponse.generateLocalCommonSuccessResponse(replyRepsonse.getIs_success(), "");
}
......@@ -179,7 +179,7 @@ public class PddGDController {
@PostMapping("/ticketFresh")
public JSONObject freshFromPdd(HttpServletRequest request) {
gdOperator.getGdTickets();
return JsonResponse.generateLocalCommonSuccessResponse("OK");
return JsonResponse.generateLocalCommonSuccessResponse("", "OK");
}
}
......@@ -14,7 +14,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.ta.pddserver.config.PddAPIConfig;
import org.ta.pddserver.entity.*;
import org.ta.pddserver.lotto.ImagePdfCollectGenerator;
import org.ta.pddserver.lotto.ImagePdfGenerator;
import org.ta.pddserver.lotto.ImagePdfUnpackGenerator;
import org.ta.pddserver.lotto.LottoLabelInfo;
import org.ta.pddserver.model.api.request.*;
import org.ta.pddserver.model.api.response.*;
......@@ -96,7 +98,7 @@ public class PddLocalController {
)
@PostMapping("/logOrderList")
public JSONObject logOrderList(HttpServletRequest request, @RequestBody LogOrderListRequest logOrderListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(logOrderImpl.getListByRequest(logOrderListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(logOrderImpl.getListByRequest(logOrderListRequest),"");
}
@PostMapping("/logOrderInfo")
......@@ -108,7 +110,7 @@ public class PddLocalController {
map.put("info", logOrderInfoResponse);
map.put("detailList", logOrderMailDetailList);
map.put("itemList", logOrderItemList);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
/*包裹列表*/
......@@ -119,7 +121,7 @@ public class PddLocalController {
)
@PostMapping("/logOrderMailDetailList")
public JSONObject logOrderMailDetailList(HttpServletRequest request, @RequestBody LogOrderMailDetailListRequest logOrderMailDetailListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(logOrderMailDetailImpl.getListByCodeNo(logOrderMailDetailListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(logOrderMailDetailImpl.getListByCodeNo(logOrderMailDetailListRequest),"");
}
/*运单号查询*/
......@@ -131,7 +133,7 @@ public class PddLocalController {
@PostMapping("/mailNoSelect")
public JSONObject mailNoSelect(HttpServletRequest request, @RequestBody MailNoRequest mailNoRequest) {
MailNoResponse mailNoResponse = logOrderMailDetailImpl.getInfoByMailNo(mailNoRequest.getMailNo());
return JsonResponse.generateLocalCommonSuccessResponse(mailNoResponse);
return JsonResponse.generateLocalCommonSuccessResponse(mailNoResponse,"");
}
/*待拆包列表*/
......@@ -143,7 +145,7 @@ public class PddLocalController {
@PostMapping("/packageNoticeList")
public JSONObject packageNoticeList(HttpServletRequest request, @RequestBody PackageNoticeRequest packageNoticeRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(packageNoticeImpl.getList(packageNoticeRequest));
return JsonResponse.generateLocalCommonSuccessResponse(packageNoticeImpl.getList(packageNoticeRequest),"");
}
/*待拆包查询*/
......@@ -169,7 +171,7 @@ public class PddLocalController {
map.put("logOrder", unpackNoticeEntity);
map.put("list", list);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
// /*出库列表*/
......@@ -193,7 +195,7 @@ public class PddLocalController {
@PostMapping("/collectOrderList")
public JSONObject collectOrderList(HttpServletRequest request, @RequestBody CollectOrderListRequest collectOrderListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(collectOrderImpl.getList(collectOrderListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(collectOrderImpl.getList(collectOrderListRequest),"");
}
/*出库详情*/
......@@ -214,7 +216,7 @@ public class PddLocalController {
map.put("detail", orderDetailList);
map.put("receiver", collectReceiver);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
// /*拆包列表*/
......@@ -268,7 +270,7 @@ public class PddLocalController {
map.put("collectOutMailDetail", mailDetailEntity);
map.put("list", list);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
......@@ -302,7 +304,7 @@ public class PddLocalController {
// map.put("list", list);
// map.put("collectOutMailDetail", collectOutMailDetail);
return JsonResponse.generateLocalCommonSuccessResponse(map);
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
/*签收*/
......@@ -317,6 +319,8 @@ public class PddLocalController {
boolean key = false;
String str = "";
String action = receiveRequest.getAction();
PddServiceConsoFirstBizActionNotifyRequest notifyRequest = new PddServiceConsoFirstBizActionNotifyRequest();
......@@ -402,7 +406,7 @@ public class PddLocalController {
}
str = "签收成功";
} else if (action.equals("warehouse_reject_sign")) {
notifyRequest.setBizActionDesc("仓库拒签");
......@@ -422,10 +426,14 @@ public class PddLocalController {
notifyRequest.setResult(notifyResult);
logOrderMailDetailIoEntity.setStatus(StatusEnum.REJECTED.getCode());
str = "仓库拒签";
} else if (action.equals("destroy")) {
notifyRequest.setBizActionDesc("包裹销毁");
notifyResult.setCode(0);
logOrderMailDetailIoEntity.setStatus(StatusEnum.DESTROY.getCode());
str = "包裹销毁";
}
notifyRequest.setResult(notifyResult);
......@@ -461,7 +469,7 @@ public class PddLocalController {
// ioEntity.setResp(resp);
// logOrderMailDetailIo.save(ioEntity);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,str);
}
/*入库*/
......@@ -566,7 +574,7 @@ public class PddLocalController {
logOrderImpl.updateById(logOrderEntity);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
/**
......@@ -659,7 +667,7 @@ public class PddLocalController {
logOrderMailDetailImpl.updateById(mailNoResponse);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
/**
......@@ -816,7 +824,7 @@ public class PddLocalController {
collectOrderImpl.updateById(collectOrderEntity);
}
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
/*收到出库通知后 开始拣货 拣货完成 */
......@@ -961,7 +969,7 @@ public class PddLocalController {
}
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
......@@ -1187,7 +1195,7 @@ public class PddLocalController {
}
collectOrderImpl.updateOrderStatus(StatusEnum.FINISHOUTBOUND.getCode(), collectOrderResponse.getUid());
return JsonResponse.generateLocalCommonSuccessResponse(outBoundRequest.getOutPackageList());
return JsonResponse.generateLocalCommonSuccessResponse(outBoundRequest.getOutPackageList(),"");
}
/*拣货完成后出库*/
......@@ -1347,7 +1355,7 @@ public class PddLocalController {
}
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
/* 无主件号识别快递包裹识别 */
......@@ -1386,7 +1394,7 @@ public class PddLocalController {
if (response != null) {
String logisticsOrderCode = response.getLogisticsOrderCode();
if (logisticsOrderCode != null) {
return JsonResponse.generateLocalCommonSuccessResponse(response);
return JsonResponse.generateLocalCommonSuccessResponse(response,"");
}
}
return JsonResponse.generateOpenCommonFailedResponse(-1, "该包裹信息无法识别");
......@@ -1443,7 +1451,7 @@ public class PddLocalController {
JSONObject response = JSONObject.parseObject(resp).getJSONObject("response");
if (response != null) {
if (response.getBoolean("success")) {
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
}
return JsonResponse.generateOpenCommonFailedResponse(-1, "问题件申报失败");
......@@ -1454,7 +1462,7 @@ public class PddLocalController {
/*区域列表*/
@PostMapping("/areaList")
public JSONObject areaList(HttpServletRequest request, @RequestBody AreaListRequest areaListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(areaImpl.areaList(areaListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(areaImpl.areaList(areaListRequest),"");
}
/*区域新增*/
......@@ -1484,7 +1492,7 @@ public class PddLocalController {
response.setCode(response.getCode() + '>' + response.getPlace());
}
}
return JsonResponse.generateLocalCommonSuccessResponse(response);
return JsonResponse.generateLocalCommonSuccessResponse(response,"");
}
/*确认上架*/
......@@ -1499,33 +1507,33 @@ public class PddLocalController {
}
storageEntity.setPlace(storageRequest.getPlace());
storageImpl.updateById(storageEntity);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"上架成功");
}
/*待拆包列表*/
@PostMapping("/unpackNoticeList")
public JSONObject unpackNoticeList(HttpServletRequest request, @RequestBody UnpackNoticeListRequest unpackNoticeListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(unpackNoticeImpl.getListByRequest(unpackNoticeListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(unpackNoticeImpl.getListByRequest(unpackNoticeListRequest),"");
}
/*详情列表*/
@PostMapping("/storageList")
public JSONObject storageList(HttpServletRequest request, @RequestBody StorageListRequest storageListRequest) {
List<StorageListResponse> list = storageImpl.storageList(storageListRequest.getLogisticsOrderCode());
return JsonResponse.generateLocalCommonSuccessResponse(list);
Map<String, Object> map = storageImpl.storageList(storageListRequest.getLogisticsOrderCode());
return JsonResponse.generateLocalCommonSuccessResponse(map,"");
}
/*待出库列表*/
@PostMapping("/outboundNoticeList")
public JSONObject outboundNoticeList(HttpServletRequest request, @RequestBody OutboundNoticeListRequest outboundNoticeListRequest) {
return JsonResponse.generateLocalCommonSuccessResponse(outboundNoticeImpl.getListByRequest(outboundNoticeListRequest));
return JsonResponse.generateLocalCommonSuccessResponse(outboundNoticeImpl.getListByRequest(outboundNoticeListRequest),"");
}
/*拣货下架*/
@PostMapping("/storageDel")
public JSONObject storageDel(HttpServletRequest request, @RequestBody StorageDelRequest storageDelRequest) {
List<StorageListResponse> list = storageImpl.storageList(storageDelRequest.getLogisticsOrderCode());
List<StorageListResponse> list = storageImpl.storageLists(storageDelRequest.getLogisticsOrderCode());
List<String> toMailList = new ArrayList<>();
List<StorageListResponse> toRemoveList = new ArrayList<>();
......@@ -1568,7 +1576,7 @@ public class PddLocalController {
unpackNoticeImpl.updateStatusByOrderCode(storageDelRequest.getLogisticsOrderCode(), StatusEnum.UNPACKFINISHPICK.getCode());
}
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
......@@ -1603,8 +1611,69 @@ public class PddLocalController {
JSONObject result = new JSONObject();
result.put("mailNo", mailNo);
result.put("file", Base64.getEncoder().encodeToString(bytes));
return JsonResponse.generateLocalCommonSuccessResponse(result);
return JsonResponse.generateLocalCommonSuccessResponse(result,"");
}
/*拆包PDF*/
@PostMapping("/unpackLabel")
public JSONObject unpackLabel(HttpServletRequest request, HttpServletResponse response, @RequestBody UnpackNoticeRequest unpackNoticeRequest) {
String orderCode = unpackNoticeRequest.getOrderCode();
UnpackNoticeEntity unpackNoticeEntity = unpackNoticeImpl.getByCode(orderCode);
if (unpackNoticeEntity == null) {
return JsonResponse.generateLocalCommonFailedResponse("-1", "未找到拆包信息");
}
List<UnpackMailDetailEntity> list = unpackMailDetailImpl.getListByCode(unpackNoticeRequest.getOrderCode());
//
// if (lottoLabelInfo == null) {
// return JsonResponse.generateLocalCommonFailedResponse("-1", "获取快递终端信息异常");
// }
byte[] bytes = ImagePdfUnpackGenerator.generatePdfWithUnpackTextImage(
orderCode);
if (bytes == null) {
return JsonResponse.generateLocalCommonFailedResponse("-1", "面单制作失败");
}
JSONObject result = new JSONObject();
result.put("orderCode", orderCode);
result.put("file", Base64.getEncoder().encodeToString(bytes));
return JsonResponse.generateLocalCommonSuccessResponse(result,"");
}
/*出库PDF*/
@PostMapping("/collectLabel")
public JSONObject collectLabel(HttpServletRequest request, HttpServletResponse response, @RequestBody UnpackNoticeRequest unpackNoticeRequest) {
String orderCode = unpackNoticeRequest.getOrderCode();
CollectOrderEntity collectOrderEntity = collectOrderImpl.getAllInfoByOrderCode(orderCode);
if (collectOrderEntity == null) {
return JsonResponse.generateLocalCommonFailedResponse("-1", "未找到出库信息");
}
List<CollectMailDetailEntity> mailDetailList = collectMailDetailImpl.getListByOrderCode(orderCode);
//
// if (lottoLabelInfo == null) {
// return JsonResponse.generateLocalCommonFailedResponse("-1", "获取快递终端信息异常");
// }
byte[] bytes = ImagePdfCollectGenerator.generatePdfWithCollectTextImage(
orderCode);
if (bytes == null) {
return JsonResponse.generateLocalCommonFailedResponse("-1", "面单制作失败");
}
JSONObject result = new JSONObject();
result.put("orderCode", orderCode);
result.put("file", Base64.getEncoder().encodeToString(bytes));
return JsonResponse.generateLocalCommonSuccessResponse(result,"");
}
}
......@@ -89,4 +89,10 @@ public class CollectOrderEntity {
@TableField(value = "stationCode")
private String stationCode;
/**
* 打印次数
*/
@TableField(value = "num")
private Integer num;
}
......@@ -52,6 +52,9 @@ public class UnpackNoticeEntity {
@TableField(value = "receiverDetail")
private String receiverDetail;
@TableField(value = "num")
private Integer num;
public String getUid() {
return uid;
}
......
package org.ta.pddserver.lotto;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.properties.HorizontalAlignment;
import java.io.ByteArrayOutputStream;
public class ImagePdfCollectGenerator {
public static byte[] generatePdfWithCollectTextImage(String orderCode) {
try {
// 1. 将文字转为图片(示例:韩文“안녕하세요,世界!”)
byte[] imageBytes = TextToImageCollectUtils.textToImage(
orderCode
);
// return imageBytes;
// 2. 初始化PDF
ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(pdfBaos);
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc, new PageSize((int) (150 * 300 / 25.4), (int) (100 * 300 / 25.4)));
// 3. 将图片嵌入PDF
ImageData imageData = ImageDataFactory.create(imageBytes);
Image image = new Image(imageData);
// 设置图片在PDF中居中显示
image.setHorizontalAlignment(HorizontalAlignment.LEFT);
document.add(image);
// 4. 关闭文档
document.close();
return pdfBaos.toByteArray();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public static byte[] generateCode() throws Exception {
ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(pdfBaos);
PdfDocument pdfDoc = new PdfDocument(writer);
// 2. 初始化PDF
Document document = new Document(pdfDoc, new PageSize((int) (150 * 300 / 25.4), (int) (100 * 300 / 25.4)));
for (int i = 1; i < 10; i ++) {
for (int i1 = 1; i1 < 12; i1 ++) {
for (int i2 = 1; i2 < 5; i2 ++) {
for (int i3 = 1; i3 < 3; i3 ++) {
if (i3 == 2 && (i2 == 1|| i2 == 4)) {
continue;
}
// 1. 将文字转为图片(示例:韩文“안녕하세요,世界!”)
String code = "A" + i + "-" + i1 + "-" + i2 + "-" + i3;
byte[] imageBytes = TextToImageUtils.commonBarCodeToImage(code);
// 3. 将图片嵌入PDF
ImageData imageData = ImageDataFactory.create(imageBytes);
Image image = new Image(imageData);
// 设置图片在PDF中居中显示
image.setHorizontalAlignment(HorizontalAlignment.LEFT);
document.add(image);
}
}
}
}
// 4. 关闭文档
document.close();
return pdfBaos.toByteArray();
}
}
\ No newline at end of file
package org.ta.pddserver.lotto;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.properties.HorizontalAlignment;
import java.io.ByteArrayOutputStream;
public class ImagePdfUnpackGenerator {
public static byte[] generatePdfWithUnpackTextImage(String orderCode) {
try {
// 1. 将文字转为图片(示例:韩文“안녕하세요,世界!”)
byte[] imageBytes = TextToImageUnpackUtils.textToImage(
orderCode
);
// return imageBytes;
// 2. 初始化PDF
ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(pdfBaos);
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc, new PageSize((int) (150 * 300 / 25.4), (int) (100 * 300 / 25.4)));
// 3. 将图片嵌入PDF
ImageData imageData = ImageDataFactory.create(imageBytes);
Image image = new Image(imageData);
// 设置图片在PDF中居中显示
image.setHorizontalAlignment(HorizontalAlignment.LEFT);
document.add(image);
// 4. 关闭文档
document.close();
return pdfBaos.toByteArray();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public static byte[] generateCode() throws Exception {
ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(pdfBaos);
PdfDocument pdfDoc = new PdfDocument(writer);
// 2. 初始化PDF
Document document = new Document(pdfDoc, new PageSize((int) (150 * 300 / 25.4), (int) (100 * 300 / 25.4)));
for (int i = 1; i < 10; i ++) {
for (int i1 = 1; i1 < 12; i1 ++) {
for (int i2 = 1; i2 < 5; i2 ++) {
for (int i3 = 1; i3 < 3; i3 ++) {
if (i3 == 2 && (i2 == 1|| i2 == 4)) {
continue;
}
// 1. 将文字转为图片(示例:韩文“안녕하세요,世界!”)
String code = "A" + i + "-" + i1 + "-" + i2 + "-" + i3;
byte[] imageBytes = TextToImageUtils.commonBarCodeToImage(code);
// 3. 将图片嵌入PDF
ImageData imageData = ImageDataFactory.create(imageBytes);
Image image = new Image(imageData);
// 设置图片在PDF中居中显示
image.setHorizontalAlignment(HorizontalAlignment.LEFT);
document.add(image);
}
}
}
}
// 4. 关闭文档
document.close();
return pdfBaos.toByteArray();
}
}
\ No newline at end of file
package org.ta.pddserver.lotto;
import com.itextpdf.commons.utils.Base64;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
public class TextToImageCollectUtils {
/**
* 将文字转换为图片(PNG格式)
* @param text 待转换的文字(支持中文、韩文等)
* @param code1 条形码
* @param fontSize 字体大小
* @param width 图片宽度
* @param height 图片高度
* @return 图片字节数组(PNG格式)
*/
/**
* 生成面单
* @param orderCode 快递面单
* @return 面单byte
* @throws Exception 异常
*/
public static byte[] textToImage( String orderCode) throws Exception {
int width = 2268;
int height = 1512;
int startX = 60;
int startY = 60;
// 1. 创建 BufferedImage 作为画布
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
System.out.println("width = " + width + ", height = " + height);
Graphics2D g2d = image.createGraphics();
// 设置绘图属性(抗锯齿、渲染质量等)
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 文字抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); // 文字平滑
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // 渲染质量
// 2. 设置背景为白色
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
// 3、默认字体
Font font0 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 86);
Font font01 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 70);
Font font1 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 52);
g2d.setColor(Color.BLACK); // 文字颜色
Font font2 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 46);
// logo1
String logo1String = "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";
byte[] logo1Byte = Base64.decode(logo1String);
ByteArrayInputStream logo1ByteIs = new ByteArrayInputStream(logo1Byte);
BufferedImage logo1Img = ImageIO.read(logo1ByteIs);
g2d.drawImage(logo1Img, startX + 0, startY + 0, 610, 70, null);
// logo2
// String logo2String = "iVBORw0KGgoAAAANSUhEUgAAAJwAAAB4CAYAAAAHbZvZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEQzRkU2MjU3RjJCMTFGMDkwNzFDQzQwMUFFNEE3REMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEQzRkU2MjY3RjJCMTFGMDkwNzFDQzQwMUFFNEE3REMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0RDNGRTYyMzdGMkIxMUYwOTA3MUNDNDAxQUU0QTdEQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0RDNGRTYyNDdGMkIxMUYwOTA3MUNDNDAxQUU0QTdEQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Poa5e5EAAAETSURBVHja7NwxDkBQEEVRT+zVmqz20fxWI0Q4p/r15GaoJm0neMpsBAiOz1rGI8lmHNzl+HVbbTh8UhEcCA7BgeAQHIIDwSE4EByCA8EhOAQHgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7Bwan86eTqW2/gjdtpNhwIDsGB4BAcgjMCBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOBAcgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOBAcgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOAQHgkNwIDgEByfS1hSw4RAcXLYLMADPTBHnat0YcgAAAABJRU5ErkJggg==";
// byte[] logo2Byte = Base64.decode(logo2String);
// ByteArrayInputStream logo2ByteIs = new ByteArrayInputStream(logo2Byte);
// BufferedImage logo2Img = ImageIO.read(logo2ByteIs);
// g2d.drawImage(logo2Img, 1540, 540, 610, 466, null);
// 打印时间
g2d.setFont(font2);
g2d.drawString("2025.11.13", startX + 1600, startY + 76);
// 打印次数
g2d.drawString("1/1", startX + 2080, startY + 76);
// 商品信息
g2d.setFont(font1);
g2d.drawString("상품명: E-commerce consuming goods", startX + 0, startY + 700);
// 辅助文字
g2d.setFont(font1);
g2d.drawString("배송비고:", startX + 0, startY + 1220);
// 集运单号
g2d.setFont(font1);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
FontMetrics metrics = g2d.getFontMetrics();
int x = (width - metrics.stringWidth(orderCode)) / 2; // 水平居中
g2d.drawString(orderCode, startX + x, startY + 1370);
g2d.dispose();
// 6. 将图片转为字节数组(PNG格式)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
return baos.toByteArray();
}
public static String generateSplitMailCode(String mailCode) {
return mailCode.substring(0, 4) + "-" + mailCode.substring(4, 8) + "-" + mailCode.substring(8, 12);
}
public static byte[] commonBarCodeToImage( String mailCode
) throws Exception {
int width = 1770;
int height = 1180;
int startX = 0;
int startY = 0;
// 1. 创建 BufferedImage 作为画布
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
System.out.println("width = " + width + ", height = " + height);
Graphics2D g2d = image.createGraphics();
// 设置绘图属性(抗锯齿、渲染质量等)
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 文字抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); // 文字平滑
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // 渲染质量
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// 2. 设置背景为白色
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
g2d.setColor(Color.BLACK);
// 集运单号
Font font0 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 140);
g2d.setFont(font0);
FontMetrics metrics = g2d.getFontMetrics();
int x = (width - metrics.stringWidth(mailCode)) / 2; // 水平居中
g2d.drawString(mailCode, startX + 500, 160);
g2d.drawString(mailCode, startX + 500, 1000);
byte[] code4Bytes = BarcodeUtils.generate39Barcode(mailCode, 1300, 500);
ByteArrayInputStream code4BytesIs = new ByteArrayInputStream(code4Bytes);
BufferedImage code4Img = ImageIO.read(code4BytesIs);
// 条形码2
g2d.drawImage(code4Img, startX + 200, startY + 260, 1300, 500, null);
g2d.dispose();
// 6. 将图片转为字节数组(PNG格式)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
return baos.toByteArray();
}
}
package org.ta.pddserver.lotto;
import com.itextpdf.commons.utils.Base64;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
public class TextToImageUnpackUtils {
/**
* 将文字转换为图片(PNG格式)
* @param text 待转换的文字(支持中文、韩文等)
* @param code1 条形码
* @param fontSize 字体大小
* @param width 图片宽度
* @param height 图片高度
* @return 图片字节数组(PNG格式)
*/
/**
* 生成面单
* @param orderCode 快递面单
* @return 面单byte
* @throws Exception 异常
*/
public static byte[] textToImage( String orderCode) throws Exception {
int width = 2268;
int height = 1512;
int startX = 60;
int startY = 60;
// 1. 创建 BufferedImage 作为画布
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
System.out.println("width = " + width + ", height = " + height);
Graphics2D g2d = image.createGraphics();
// 设置绘图属性(抗锯齿、渲染质量等)
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 文字抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); // 文字平滑
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // 渲染质量
// 2. 设置背景为白色
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
// 3、默认字体
Font font0 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 86);
Font font01 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 70);
Font font1 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 52);
g2d.setColor(Color.BLACK); // 文字颜色
Font font2 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 46);
// logo1
String logo1String = "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";
byte[] logo1Byte = Base64.decode(logo1String);
ByteArrayInputStream logo1ByteIs = new ByteArrayInputStream(logo1Byte);
BufferedImage logo1Img = ImageIO.read(logo1ByteIs);
g2d.drawImage(logo1Img, startX + 0, startY + 0, 610, 70, null);
// logo2
// String logo2String = "iVBORw0KGgoAAAANSUhEUgAAAJwAAAB4CAYAAAAHbZvZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEQzRkU2MjU3RjJCMTFGMDkwNzFDQzQwMUFFNEE3REMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEQzRkU2MjY3RjJCMTFGMDkwNzFDQzQwMUFFNEE3REMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0RDNGRTYyMzdGMkIxMUYwOTA3MUNDNDAxQUU0QTdEQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0RDNGRTYyNDdGMkIxMUYwOTA3MUNDNDAxQUU0QTdEQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Poa5e5EAAAETSURBVHja7NwxDkBQEEVRT+zVmqz20fxWI0Q4p/r15GaoJm0neMpsBAiOz1rGI8lmHNzl+HVbbTh8UhEcCA7BgeAQHIIDwSE4EByCA8EhOAQHgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7Bwan86eTqW2/gjdtpNhwIDsGB4BAcgjMCBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOBAcgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOBAcgkNwIDgEB4JDcAgOBIfgQHAIDgSH4BAcCA7BgeAQHAgOwSE4EByCA8EhOAQHgkNwIDgEByfS1hSw4RAcXLYLMADPTBHnat0YcgAAAABJRU5ErkJggg==";
// byte[] logo2Byte = Base64.decode(logo2String);
// ByteArrayInputStream logo2ByteIs = new ByteArrayInputStream(logo2Byte);
// BufferedImage logo2Img = ImageIO.read(logo2ByteIs);
// g2d.drawImage(logo2Img, 1540, 540, 610, 466, null);
// 打印时间
g2d.setFont(font2);
g2d.drawString("2025.11.13", startX + 1600, startY + 76);
// 打印次数
g2d.drawString("1/1", startX + 2080, startY + 76);
// 商品信息
g2d.setFont(font1);
g2d.drawString("상품명: E-commerce consuming goods", startX + 0, startY + 700);
// 辅助文字
g2d.setFont(font1);
g2d.drawString("배송비고:", startX + 0, startY + 1220);
// 集运单号
g2d.setFont(font1);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
FontMetrics metrics = g2d.getFontMetrics();
int x = (width - metrics.stringWidth(orderCode)) / 2; // 水平居中
g2d.drawString(orderCode, startX + x, startY + 1370);
g2d.dispose();
// 6. 将图片转为字节数组(PNG格式)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
return baos.toByteArray();
}
public static String generateSplitMailCode(String mailCode) {
return mailCode.substring(0, 4) + "-" + mailCode.substring(4, 8) + "-" + mailCode.substring(8, 12);
}
public static byte[] commonBarCodeToImage( String mailCode
) throws Exception {
int width = 1770;
int height = 1180;
int startX = 0;
int startY = 0;
// 1. 创建 BufferedImage 作为画布
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
System.out.println("width = " + width + ", height = " + height);
Graphics2D g2d = image.createGraphics();
// 设置绘图属性(抗锯齿、渲染质量等)
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 文字抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); // 文字平滑
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); // 渲染质量
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// 2. 设置背景为白色
g2d.setColor(Color.white);
g2d.fillRect(0, 0, width, height);
g2d.setColor(Color.BLACK);
// 集运单号
Font font0 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("./HYGothic.ttf")).deriveFont((float) 140);
g2d.setFont(font0);
FontMetrics metrics = g2d.getFontMetrics();
int x = (width - metrics.stringWidth(mailCode)) / 2; // 水平居中
g2d.drawString(mailCode, startX + 500, 160);
g2d.drawString(mailCode, startX + 500, 1000);
byte[] code4Bytes = BarcodeUtils.generate39Barcode(mailCode, 1300, 500);
ByteArrayInputStream code4BytesIs = new ByteArrayInputStream(code4Bytes);
BufferedImage code4Img = ImageIO.read(code4BytesIs);
// 条形码2
g2d.drawImage(code4Img, startX + 200, startY + 260, 1300, 500, null);
g2d.dispose();
// 6. 将图片转为字节数组(PNG格式)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
return baos.toByteArray();
}
}
......@@ -30,10 +30,10 @@ public interface CollectOrderMapper extends BaseMapper<CollectOrderEntity> {
@Select("SELECT `uid`, `orderCode`, `itemQuantityTotal`, `tradeOrderActualAmountTotal`,`segmentCode`, `consoType`, `deliveryType` FROM `collect_order` WHERE `orderCode` = #{orderCode};")
CollectOrderInfoResponse getInfoByOrderCode(@Param("orderCode") String orderCode);
@Select("SELECT COUNT(*) FROM (SELECT a.`uid` FROM `collect_order` a LEFT JOIN `collect_mail_detail` b ON a.`orderCode` = b.`orderCode` WHERE a.`orderCode` LIKE '%${orderCode}%' AND a.`status` LIKE '%${status}%' GROUP BY a.`uid`) t; ")
@Select("SELECT COUNT(*) FROM (SELECT a.`uid` FROM `collect_order` a LEFT JOIN `collect_mail_detail` b ON a.`orderCode` = b.`orderCode` WHERE a.`orderCode` LIKE '%${orderCode}%' AND a.`status` LIKE '%${status}%' ${str} GROUP BY a.`uid`) t; ")
Integer countUsable(CollectOrderListRequest param);
@Select("SELECT a.`uid`, a.`orderCode`, a.`itemQuantityTotal`, GROUP_CONCAT(b.`mailNo` SEPARATOR ';') as mailNo, a.`created` FROM `collect_order` a LEFT JOIN `collect_mail_detail` b ON a.`orderCode` = b.`orderCode` WHERE a.`orderCode` LIKE '%${orderCode}%' AND a.`status` LIKE '%${status}%' GROUP BY a.`uid` ORDER BY a.`created` DESC LIMIT #{offset}, #{size}; ")
@Select("SELECT a.`uid`, a.`orderCode`, a.`itemQuantityTotal`, GROUP_CONCAT(b.`mailNo` SEPARATOR ';') as mailNo, a.`created`, a.`num` FROM `collect_order` a LEFT JOIN `collect_mail_detail` b ON a.`orderCode` = b.`orderCode` WHERE a.`orderCode` LIKE '%${orderCode}%' AND a.`status` LIKE '%${status}%' ${str} GROUP BY a.`uid` ORDER BY a.`created` DESC LIMIT #{offset}, #{size}; ")
List<CollectOrderListResponse> getListByRequest(CollectOrderListRequest param);
@Select("SELECT * FROM `collect_order` WHERE `orderCode` = #{orderCode};")
......
......@@ -35,10 +35,10 @@ public interface StorageMapper extends BaseMapper<StorageEntity> {
@Select("SELECT `code`, `place` FROM `storage` WHERE `mailNo` = #{mailNo}")
StorageResponse storageSelect(@Param("mailNo") String mailNo);
@Select("SELECT a.`mailNo`, a.`code` , a.`place` FROM `storage` a, `unpack_mail_detail` b WHERE b.`orderCode` = #{logisticsOrderCode} AND b.`mailNo` = a.`mailNo`")
@Select("SELECT a.`mailNo`, a.`code` , a.`place` FROM `storage` a, `unpack_mail_detail` b WHERE b.`orderCode` = #{logisticsOrderCode} AND b.`mailNo` = a.`mailNo` ORDER BY a.`place`")
List<StorageListResponse> storageUnpackList(@Param("logisticsOrderCode") String logisticsOrderCode);
@Select("SELECT a.`mailNo`, a.`code` , a.`place` FROM `storage` a, `collect_mail_detail` b WHERE b.`orderCode` = #{logisticsOrderCode} AND b.`mailNo` = a.`mailNo`")
@Select("SELECT a.`mailNo`, a.`code` , a.`place` FROM `storage` a, `collect_mail_detail` b WHERE b.`orderCode` = #{logisticsOrderCode} AND b.`mailNo` = a.`mailNo` ORDER BY a.`place`")
List<StorageListResponse> storageCollectList(@Param("logisticsOrderCode") String logisticsOrderCode);
@Delete("DELETE FROM `storage` WHERE `mailNo` IN ${ids}")
......
......@@ -24,10 +24,10 @@ public interface UnpackNoticeMapper extends BaseMapper<UnpackNoticeEntity> {
UnpackNoticeEntity selectByOrderCode(String orderCode);
@Select("SELECT count(`uid`) FROM `unpack_notice` WHERE `status` = 1 ")
@Select("SELECT count(`uid`) FROM `unpack_notice` WHERE `status` = 1 ${str}")
Integer countUsable(UnpackNoticeListRequest param);
@Select("SELECT `orderCode`, `status`, `mailDetails` FROM `unpack_notice` WHERE `status` = 1 ORDER BY `uid` DESC LIMIT #{offset}, #{size}; ")
@Select("SELECT `orderCode`, `status`, `mailDetails`, `num` FROM `unpack_notice` WHERE `status` = 1 ${str} ORDER BY `uid` DESC LIMIT #{offset}, #{size}; ")
List<UnpackNoticeListResponse> getListByRequest(UnpackNoticeListRequest param);
@Update("UPDATE `unpack_notice` SET `status` = ${status} WHERE `orderCode` = #{orderCode} ")
......
......@@ -25,4 +25,8 @@ public class CollectOrderListRequest extends PageTool {
requiredMode = Schema.RequiredMode.REQUIRED // 必填
)
private int status;
private int num;
private String str;
}
......@@ -6,5 +6,7 @@ import org.ta.pddserver.model.common.PageTool;
@Data
public class UnpackNoticeListRequest extends PageTool {
private int num;
private String str;
}
package org.ta.pddserver.model.api.request;
import lombok.Data;
import org.ta.pddserver.model.common.PageTool;
@Data
public class UnpackNoticeRequest {
private String orderCode;
}
......@@ -15,4 +15,5 @@ public class CollectOrderListResponse {
private String created;
private int num;
}
......@@ -10,4 +10,6 @@ public class UnpackNoticeListResponse {
private int status;
private String mailDetails;
private int num;
}
......@@ -36,7 +36,7 @@ public class AreaImpl extends ServiceImpl<AreaMapper, AreaEntity> implements Are
AreaEntity ae = baseMapper.getInfoByCode(areaEntity.getCode());
if(ae ==null){
baseMapper.insert(areaEntity);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}else {
return JsonResponse.generateLocalCommonFailedResponse("-1", "区域已存在");
}
......@@ -61,7 +61,7 @@ public class AreaImpl extends ServiceImpl<AreaMapper, AreaEntity> implements Are
}
}
}
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
public JSONObject areaDele(AreaEntity areaEntity) {
......@@ -74,7 +74,7 @@ public class AreaImpl extends ServiceImpl<AreaMapper, AreaEntity> implements Are
ae.setState(-1);
baseMapper.updateById(ae);
return JsonResponse.generateLocalCommonSuccessResponse(true);
return JsonResponse.generateLocalCommonSuccessResponse(true,"");
}
public List<AreaEntity> getList() {
......
......@@ -29,6 +29,14 @@ public class CollectOrderImpl extends ServiceImpl<CollectOrderMapper, CollectOrd
}
public Map getList(CollectOrderListRequest param) {
if(param.getNum() == 0){
param.setStr(" AND a.`num` = 0");
}else if(param.getNum() == 1){
param.setStr(" AND a.`num` > 0");
}else {
param.setStr("");
}
Integer count = baseMapper.countUsable(param);
param.checkPage(count,20);
List<CollectOrderListResponse> list = baseMapper.getListByRequest(param);
......
......@@ -11,7 +11,9 @@ import org.ta.pddserver.model.api.response.StorageListResponse;
import org.ta.pddserver.model.api.response.StorageResponse;
import org.ta.pddserver.service.StorageService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
......@@ -46,11 +48,37 @@ public class StorageImpl extends ServiceImpl<StorageMapper, StorageEntity> imple
return baseMapper.storageSelect(mailNo);
}
public List<StorageListResponse> storageList(String logisticsOrderCode) {
public Map<String, Object> storageList(String logisticsOrderCode) {
Map<String, Object> map = new HashMap<>();
List<StorageListResponse> list = baseMapper.storageUnpackList(logisticsOrderCode);
map.put("type", "unpack");
if (list == null || list.isEmpty()) {
list = baseMapper.storageCollectList(logisticsOrderCode);
map.put("type", "collect");
}
map.put("list", list);
return map;
}
public List<StorageListResponse> storageLists(String logisticsOrderCode) {
List<StorageListResponse> list = baseMapper.storageUnpackList(logisticsOrderCode);
if (list == null || list.isEmpty()) {
list = baseMapper.storageCollectList(logisticsOrderCode);
}
return list;
}
......
......@@ -22,6 +22,14 @@ public class UnpackNoticeImpl extends ServiceImpl<UnpackNoticeMapper, UnpackNoti
}
public Map<String, Object> getListByRequest(UnpackNoticeListRequest param) {
if(param.getNum() == 0){
param.setStr(" AND `num` = 0");
}else if(param.getNum() == 1){
param.setStr(" AND `num` > 0");
}else {
param.setStr("");
}
Integer count = baseMapper.countUsable(param);
param.checkPage(count,20);
List<UnpackNoticeListResponse> list = baseMapper.getListByRequest(param);
......
......@@ -38,10 +38,11 @@ public class JsonResponse {
return resp;
}
public static JSONObject generateLocalCommonSuccessResponse(Object data) {
public static JSONObject generateLocalCommonSuccessResponse(Object data, String message) {
JSONObject resp = new JSONObject();
resp.put("success", true);
resp.put("reason_code", "0");
resp.put("message", message);
if (data != null) {
resp.put("data", data);
}
......
......@@ -7,12 +7,12 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://192.168.2.222:3306/pdd_api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
# username: root
# password: root
url: jdbc:mysql://lyhj-mysql.mysql.rds.aliyuncs.com:3306/pdd_prod?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
username: pdd
password: pdd123
url: jdbc:mysql://192.168.2.222:3306/pdd_api?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
username: root
password: root
# url: jdbc:mysql://lyhj-mysql.mysql.rds.aliyuncs.com:3306/pdd_prod?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
# username: pdd
# password: pdd123
# url: jdbc:mysql://rm-j6cv8n7zx12x0sqreuo.mysql.rds.aliyuncs.com:3306/pdd_prod?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
# username: pdd
# password: pdd123
......@@ -26,8 +26,8 @@ spring:
application:
name: PddServer
server:
# port: 9000 # 正式端口号 - 向拼多多正式环境开放接口
port: 9100 # 正式端口号 - 向海际系统正式环境开放接口
port: 9000 # 正式端口号 - 向拼多多正式环境开放接口
# port: 9100 # 正式端口号 - 向海际系统正式环境开放接口
# port: 8600 # 测试端口号
logging:
level:
......@@ -41,4 +41,4 @@ mybatis-plus:
pdd:
jyt: 0
gd: 0
lotto: 1
\ No newline at end of file
lotto: 0
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment