From af02b8ed318d4f307d0f77167e85f48a7ceb4169 Mon Sep 17 00:00:00 2001 From: mashuai Date: Tue, 31 Dec 2024 17:15:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BmQrcodeInfoController.java | 26 ++- .../material/basic/domain/BmQrcodeInfo.java | 45 ++++- .../basic/mapper/BmQrcodeInfoMapper.java | 15 ++ .../basic/service/IBmQrcodeInfoService.java | 13 +- .../service/impl/BmQrcodeInfoServiceImpl.java | 167 +++++++++++++++++- .../material/basic/BmQrcodeInfoMapper.xml | 78 ++++++-- 6 files changed, 321 insertions(+), 23 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrcodeInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrcodeInfoController.java index d33b0590..2e39c878 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrcodeInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmQrcodeInfoController.java @@ -2,7 +2,13 @@ package com.bonus.material.basic.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import cn.hutool.core.convert.Convert; +import com.bonus.common.biz.config.ListPagingUtil; +import com.bonus.common.core.utils.ServletUtils; import com.bonus.common.log.enums.OperaType; +import com.bonus.material.basic.domain.BmQrBoxInfo; +import com.bonus.material.basic.domain.InputRecordInfo; import com.bonus.material.common.annotation.PreventRepeatSubmit; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -42,7 +48,7 @@ public class BmQrcodeInfoController extends BaseController * 查询二维码管理列表 */ @ApiOperation(value = "查询二维码管理列表") - @RequiresPermissions("basic:info:list") + //@RequiresPermissions("basic:info:list") @GetMapping("/list") public TableDataInfo list(BmQrcodeInfo bmQrcodeInfo) { @@ -84,10 +90,24 @@ public class BmQrcodeInfoController extends BaseController @PreventRepeatSubmit @RequiresPermissions("basic:info:add") @SysLog(title = "二维码管理", businessType = OperaType.INSERT, logType = 1,module = "仓储管理->新增二维码管理") - @PostMapping + @PostMapping("/add") public AjaxResult add(@RequestBody BmQrcodeInfo bmQrcodeInfo) { - return toAjax(bmQrcodeInfoService.insertBmQrcodeInfo(bmQrcodeInfo)); + return bmQrcodeInfoService.insertBmQrcodeInfo(bmQrcodeInfo); + } + + /** + * 下载二维码 + * @param bmQrcodeInfo + * @param response + */ + @ApiOperation(value = "下载二维码") + @PreventRepeatSubmit + //@RequiresPermissions("basic:info:download") + @PostMapping("/download") + public void download(@RequestBody BmQrcodeInfo bmQrcodeInfo, HttpServletResponse response) + { + bmQrcodeInfoService.download(bmQrcodeInfo, response); } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrcodeInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrcodeInfo.java index 5cd913fb..e508a8aa 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrcodeInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrcodeInfo.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.ToString; import com.bonus.common.core.web.domain.BaseEntity; +import java.util.List; + /** * 二维码管理对象 bm_qrcode_info * @@ -23,30 +25,63 @@ public class BmQrcodeInfo extends BaseEntity /** 二维码ID */ private Long qrId; + @ApiModelProperty(value = "二维码id集合") + private List qrIds; + /** 二维码 */ - @Excel(name = "二维码") @ApiModelProperty(value = "二维码") private String qrCode; + @ApiModelProperty(value = "二维码路径") + private String qrUrl; + /** 类型ID */ - @Excel(name = "类型ID") @ApiModelProperty(value = "类型ID") private Long typeId; + @ApiModelProperty(value = "类型名称") + private String typeName; + + @ApiModelProperty(value = "规格信号") + private String typeModelName; + + @ApiModelProperty(value = "设备编码") + private String maCode; + /** 二维码类型 */ - @Excel(name = "二维码类型") @ApiModelProperty(value = "二维码类型") private String qrType; /** 任务ID */ - @Excel(name = "任务ID") @ApiModelProperty(value = "任务ID") private Long taskId; /** 数据所属组织 */ - @Excel(name = "数据所属组织") @ApiModelProperty(value = "数据所属组织") private Long companyId; + @ApiModelProperty(value = "绑定状态") + private String bindStatus; + + @ApiModelProperty(value = "绑定状态名称") + private String bindStatusName; + + @ApiModelProperty(value="开始时间") + private String startTime; + + @ApiModelProperty(value="结束时间") + private String endTime; + + @ApiModelProperty(value="关键字") + private String keyWord; + + @ApiModelProperty(value="二维码数量") + private int qrNum; + + @ApiModelProperty(value="生产厂家id") + private Long supplierId; + + @ApiModelProperty(value="生产厂家名称") + private String supplierName; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrcodeInfoMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrcodeInfoMapper.java index a2793464..464c865a 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrcodeInfoMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrcodeInfoMapper.java @@ -2,6 +2,7 @@ package com.bonus.material.basic.mapper; import java.util.List; import com.bonus.material.basic.domain.BmQrcodeInfo; +import org.apache.ibatis.annotations.Param; /** * 二维码管理Mapper接口 @@ -58,4 +59,18 @@ public interface BmQrcodeInfoMapper * @return 结果 */ public int deleteBmQrcodeInfoByQrIds(Long[] qrIds); + + /** + * 根据月份查询 + * @param genMonth + * @return + */ + List selectByMonth(String genMonth); + + /** + * 查询详情 + * @param qrIds + * @return + */ + List getDetails(@Param("list") List qrIds); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmQrcodeInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmQrcodeInfoService.java index 309a81ad..6a0941e7 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmQrcodeInfoService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmQrcodeInfoService.java @@ -1,8 +1,12 @@ package com.bonus.material.basic.service; import java.util.List; + +import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.basic.domain.BmQrcodeInfo; +import javax.servlet.http.HttpServletResponse; + /** * 二维码管理Service接口 * @@ -33,7 +37,7 @@ public interface IBmQrcodeInfoService * @param bmQrcodeInfo 二维码管理 * @return 结果 */ - public int insertBmQrcodeInfo(BmQrcodeInfo bmQrcodeInfo); + public AjaxResult insertBmQrcodeInfo(BmQrcodeInfo bmQrcodeInfo); /** * 修改二维码管理 @@ -58,4 +62,11 @@ public interface IBmQrcodeInfoService * @return 结果 */ public int deleteBmQrcodeInfoByQrId(Long qrId); + + /** + * 下载二维码 + * @param bmQrcodeInfo + * @param response + */ + void download(BmQrcodeInfo bmQrcodeInfo, HttpServletResponse response); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrcodeInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrcodeInfoServiceImpl.java index 225d7c28..bde58c65 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrcodeInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrcodeInfoServiceImpl.java @@ -1,13 +1,32 @@ package com.bonus.material.basic.service.impl; +import java.io.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import com.bonus.common.biz.config.BackstageApplication; +import com.bonus.common.biz.config.DateTimeHelper; +import com.bonus.common.biz.config.QrCodeUtils; +import com.bonus.common.biz.domain.purchase.PurchaseDto; +import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.purchase.domain.vo.PurchaseVo; +import com.google.zxing.WriterException; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.bonus.material.basic.mapper.BmQrcodeInfoMapper; import com.bonus.material.basic.domain.BmQrcodeInfo; import com.bonus.material.basic.service.IBmQrcodeInfoService; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + /** * 二维码管理Service业务层处理 * @@ -17,7 +36,7 @@ import com.bonus.material.basic.service.IBmQrcodeInfoService; @Service public class BmQrcodeInfoServiceImpl implements IBmQrcodeInfoService { - @Autowired + @Resource private BmQrcodeInfoMapper bmQrcodeInfoMapper; /** @@ -51,10 +70,50 @@ public class BmQrcodeInfoServiceImpl implements IBmQrcodeInfoService * @return 结果 */ @Override - public int insertBmQrcodeInfo(BmQrcodeInfo bmQrcodeInfo) + public AjaxResult insertBmQrcodeInfo(BmQrcodeInfo bmQrcodeInfo) { bmQrcodeInfo.setCreateTime(DateUtils.getNowDate()); - return bmQrcodeInfoMapper.insertBmQrcodeInfo(bmQrcodeInfo); + bmQrcodeInfo.setCreateBy(SecurityUtils.getUserId().toString()); + String genMonth = DateTimeHelper.getNowMonth(); + List list = bmQrcodeInfoMapper.selectByMonth(genMonth); + BmQrcodeInfo bean = null; + int num = 0; + int result = 0; + if (list != null && list.size() > 0) { + bean = list.get(0); + num = Integer.parseInt(bean.getQrCode().split("-")[1]); + } + for (int j = 1; j <= bmQrcodeInfo.getQrNum(); j++) { + genMonth = genMonth.replace("-", ""); + String code = genMonth + "-" + String.format("%5d", num + j).replace(" ", "0"); + // 新购管理-二维码打印-新增 + String url = BackstageApplication.getUrl() + "backstage/machine/qrCodePage?qrcode=" + code; + // // 二维码的图片格式 + String format = "jpg"; + //设置路径 + String mkdirsName = "images"; + // linux 系统路径 + String saveDirectory = "/data/imw/" + mkdirsName + "/"; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + //本地路径 + saveDirectory = "D://files/" + mkdirsName + "/"; + } + // 生成二维码 + File files = new File(saveDirectory); + if (!files.exists()) { + files.mkdirs(); + } + QrCodeUtils.generateQRImage(url, saveDirectory, code + ".jpg", format); + String qrUrl = saveDirectory + code + ".jpg"; + bmQrcodeInfo.setQrCode(code); + bmQrcodeInfo.setQrUrl(qrUrl); + result += bmQrcodeInfoMapper.insertBmQrcodeInfo(bmQrcodeInfo); + } + if (result > 0) { + return AjaxResult.success("二维码生成成功"); + } + return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); } /** @@ -93,4 +152,106 @@ public class BmQrcodeInfoServiceImpl implements IBmQrcodeInfoService { return bmQrcodeInfoMapper.deleteBmQrcodeInfoByQrId(qrId); } + + /** + * 下载二维码 + * @param bmQrcodeInfo + * @param response + */ + @Override + public void download(BmQrcodeInfo bmQrcodeInfo, HttpServletResponse response) { + if (bmQrcodeInfo == null || CollectionUtils.isEmpty(bmQrcodeInfo.getQrIds())) { + throw new RuntimeException("下载二维码信息不能为空"); + } + Set addedEntries = new HashSet<>(); + try (OutputStream os = response.getOutputStream(); + ZipOutputStream zos = new ZipOutputStream(os)) { + //二维码下载 + handlePurchaseId(addedEntries, bmQrcodeInfo, zos); + zos.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 处理二维码下载 + * @param addedEntries + * @param bmQrcodeInfo + * @param zos + */ + private void handlePurchaseId(Set addedEntries, BmQrcodeInfo bmQrcodeInfo, ZipOutputStream zos) throws IOException { + List details = bmQrcodeInfoMapper.getDetails(bmQrcodeInfo.getQrIds()); + if (CollectionUtils.isNotEmpty(details)) { + for (BmQrcodeInfo detail : details) { + String typeName = detail.getTypeName(); + String typeModelName = detail.getTypeModelName(); + String path = detail.getQrUrl(); + String qrCode = detail.getQrCode(); + path = path.replace("filePath", "/data/imw"); + extractedQrCode(qrCode); + extracted(addedEntries, zos, typeName, typeModelName, qrCode, path); + } + } + } + + /** + * 二维码生产方法抽取 + * @param qrCode + */ + private void extractedQrCode(String qrCode) { + // 新购管理-二维码打印-新增 + String url = BackstageApplication.getUrl() + "backstage/machine/qrCodePage?qrcode=" + qrCode; + // // 二维码的图片格式 + String format = "jpg"; + //设置路径 + String mkdirsName = "images"; + // linux 系统路径 + String saveDirectory = "/data/imw/" + mkdirsName + "/"; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + //本地路径 + saveDirectory = "D://files/" + mkdirsName + "/"; + } + // 生成二维码 + File files = new File(saveDirectory); + if (!files.exists()) { + files.mkdirs(); + } + QrCodeUtils.generateQRImage(url, saveDirectory, qrCode + ".jpg", format); + } + + /** + * 二维码下载方法抽取 + * @param zos + * @param typeName + * @param typeModelName + * @param code + * @param path + * @throws IOException + */ + private void extracted(Set addedEntries, ZipOutputStream zos, String typeName, String typeModelName, String code, String path) throws IOException { + // 判断路径是否存在 + File imageFile = new File(path); + if (!imageFile.exists()) { + return; + } + String entryName = "[" + typeName + "-" + typeModelName + "]" + code + ".jpg"; + if (addedEntries.contains(entryName)) { + System.out.println("Duplicate entry skipped: " + entryName); + return; + } + addedEntries.add(entryName); + zos.setLevel(0); + zos.putNextEntry(new ZipEntry(entryName)); + try (InputStream fis = new FileInputStream(imageFile)) { + byte[] buffer = new byte[1024]; + int r; + while ((r = fis.read(buffer)) != -1) { + zos.write(buffer, 0, r); + } + } + zos.closeEntry(); + } } + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrcodeInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrcodeInfoMapper.xml index b2d26b5d..e7c58167 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrcodeInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrcodeInfoMapper.xml @@ -21,26 +21,79 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select qr_id, qr_code, type_id, qr_type, task_id, create_by, create_time, update_by, update_time, remark, company_id from bm_qrcode_info - - + + + + + + + insert into bm_qrcode_info qr_code, + qr_url, type_id, qr_type, task_id, @@ -50,9 +103,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_time, remark, company_id, + supplier_id, #{qrCode}, + #{qrUrl}, #{typeId}, #{qrType}, #{taskId}, @@ -62,6 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{updateTime}, #{remark}, #{companyId}, + #{supplierId},