4 月更文挑战第26天 | 基于java的校园二手商品交易系统的开发14

162 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情

今天这个章节,主要是校园二手商品交易系统的一个拓展功能,二维码的生成。

public static String genQRCodePic(int orderType, String orderNo, String splitOrderNo, int versionNumber,
			QRCodeFileProperties qrCodeFileProps) {
	String qrCodeContent = null;
	String qrCodeFileName = null;

	StringBuilder sBuilder = new StringBuilder();
	sBuilder.append(orderType);
	sBuilder.append("_");
	sBuilder.append(orderNo);
	sBuilder.append("_");
	sBuilder.append(splitOrderNo);
	sBuilder.append("_");
	sBuilder.append(versionNumber);
	qrCodeContent = sBuilder.toString();

	qrCodeFileName = qrCodeFileProps.getFilePath() + "/" + qrCodeContent + ".png";
	QRCodeUtil.createQRCode(qrCodeFileName, qrCodeContent, 90, 90);
	return qrCodeFileName;
}

生成二维码图片方法: 1、方法上面传过来多个参数,int orderType, String orderNo, String splitOrderNo, int versionNumber比如订单类型,订单编号,拆单编号,版本号。而QRCodeFileProperties是一个配置对象,里面存放的是文件路径这个属性,也就是说方法里面,最后一个参数是文件路径,这个是放二维码图片路径的。

2、定义qrCodeContent图片内容,会存放上面说的几个参数信息,qrCodeFileName二维码文件的名字。

3、StringBuilder类型拼接各个参数信息,最后转成String类型,放入到qrCodeContent

4、qrCodeFileName拼接路径+qrCodeContent得到二维码文件的名字。

5、调用createQRCode方法,具体的逻辑,后面会介绍。

public static void createQRCode(String qrCodefilePath, String contents, int width, int height) {
	Map<EncodeHintType, Object> hints = new HashMap<>();
	hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
	hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
	hints.put(EncodeHintType.MARGIN, 0);
	try {
		BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
		Path file = new File(qrCodefilePath).toPath();
		MatrixToImageWriter.writeToPath(bitMatrix, "png", file);
	} catch (WriterException | IOException e) {
		e.printStackTrace();
		logger.error("createQRCode err:" + e.getMessage());
	}
}

1、createQRCode这个方法呢,叫创建二维码,Map<EncodeHintType, Object>以map的形式,存放编码格式,设置边缘,设置错误信息等。

2、以MultiFormatWriter的方式写入进去

3、会报写入异常WriterException 或者网络传输异常IOException

public static String genHandleBorderProdQRCodePic(int orderType, String handleBorderStkTransOrderNo,
			ProdProcess prodProcess, QRCodeFileProperties qrCodeFileProps) {
	String qrCodeContent = null;
	String qrCodeFileName = null;

	StringBuilder sBuilder = new StringBuilder();
	sBuilder.append(orderType);
	sBuilder.append("_");
	sBuilder.append(prodProcess.getNo());
	sBuilder.append("_");
	sBuilder.append(prodProcess.getName());
	sBuilder.append("_");
	sBuilder.append(prodProcess.getProcessStkTransType());
	sBuilder.append("_");
	sBuilder.append(handleBorderStkTransOrderNo);

	qrCodeContent = sBuilder.toString();
	qrCodeFileName = qrCodeFileProps.getFilePath() + "/" + handleBorderStkTransOrderNo + ".png";
	QRCodeUtil.createQRCode(qrCodeFileName, qrCodeContent, 90, 90);
	return qrCodeFileName;
}

进行实战,举例来实现二维码功能

1、方法里面的参数信息和之前的是差不多的,订单类型,出库编号,工序编号,文件路径等信息。

2、定义qrCodeContent图片内容,会存放上面说的几个参数信息,qrCodeFileName二维码文件的名字,拼接路径再加二维码文件名字。

3、调用createQRCode方法,传入维码文件的名字,图片内容,以及90 *90的长宽大小