diff --git a/bonus-modules/bonus-task/pom.xml b/bonus-modules/bonus-task/pom.xml index 6f7732e..a840097 100644 --- a/bonus-modules/bonus-task/pom.xml +++ b/bonus-modules/bonus-task/pom.xml @@ -92,6 +92,22 @@ lombok provided + + com.google.zxing + core + 3.3.0 + + + com.google.zxing + javase + 3.3.0 + + + + org.apache.commons + commons-compress + 1.22 + diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseBindController.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseBindController.java index 4aa6730..cd27a42 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseBindController.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseBindController.java @@ -4,22 +4,16 @@ import com.bonus.common.core.domain.ResultBean; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.page.TableDataInfo; import com.bonus.common.security.annotation.RequiresPermissions; -import com.bonus.purchase.domain.BpmPurchaseInfo; import com.bonus.purchase.dto.PurchaseBindDto; import com.bonus.purchase.dto.PurchaseDto; -import com.bonus.purchase.dto.PurchaseTaskDto; import com.bonus.purchase.service.BpmPurchaseBindService; -import com.bonus.purchase.service.impl.BpmPurchaseInfoService; import com.bonus.purchase.vo.PurchaseAcceptVo; import com.bonus.purchase.vo.PurchaseVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Positive; +import javax.servlet.http.HttpServletResponse; import java.util.List; -import java.util.Map; /** * 新购到货验收表(bpm_purchase_info)控制层 @@ -73,4 +67,13 @@ public class BpmPurchaseBindController extends BaseController { return ResultBean.toIsSuccess(1,"急急急"); } + /** + * 二维码生成下载 + */ + @PostMapping(value = "/downloadQrCode") + @RequiresPermissions("purchase:bpmPurchaseInfo:query") + public void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto) { + bpmPurchaseBindService.downloadQrCode(response, purchaseDto); + } + } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseStorageController.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseStorageController.java index 4815d67..fec258b 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseStorageController.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/controller/BpmPurchaseStorageController.java @@ -13,6 +13,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import javax.validation.constraints.Positive; @@ -27,7 +28,8 @@ import java.util.List; @RequestMapping("/purchase/store") public class BpmPurchaseStorageController extends BaseController { - @Autowired + + @Resource private BpmPurchaseStorageService purchaseStorageService; @Autowired diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/dto/PurchaseDto.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/dto/PurchaseDto.java index 4d4f6f0..f2bbcad 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/dto/PurchaseDto.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/dto/PurchaseDto.java @@ -1,6 +1,7 @@ package com.bonus.purchase.dto; import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; import lombok.Data; import javax.validation.constraints.NotNull; @@ -12,6 +13,7 @@ import java.util.List; * @create 2024/8/19 17:50 */ @Data +@Builder public class PurchaseDto { @ApiModelProperty(value = "id") @@ -47,4 +49,13 @@ public class PurchaseDto { @ApiModelProperty(value = "二级明细id") private String purchaseId; + + @ApiModelProperty(value = "采购数量") + private Integer num; + + @ApiModelProperty(value = "二维码code") + private String qrCode; + + @ApiModelProperty(value = "二维码curl") + private String qrUrl; } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/mapper/BpmPurchaseBindMapper.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/mapper/BpmPurchaseBindMapper.java index f3e94e5..3a302fb 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/mapper/BpmPurchaseBindMapper.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/mapper/BpmPurchaseBindMapper.java @@ -1,12 +1,10 @@ package com.bonus.purchase.mapper; -import com.bonus.base.api.domain.MaType; -import com.bonus.purchase.domain.BpmPurchaseInfo; +import com.bonus.purchase.dto.PurchaseBindDto; import com.bonus.purchase.dto.PurchaseDto; import com.bonus.purchase.vo.PurchaseAcceptVo; import com.bonus.purchase.vo.PurchaseVo; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,4 +22,30 @@ public interface BpmPurchaseBindMapper { List selectManageList(PurchaseDto purchaseDto); List getDetailsList(PurchaseDto record); + + /** + * 根据月份查找code + * @param genMonth + * @return + */ + List select(String genMonth); + + /** + * 插入数据 + * @param dto + */ + void insert(PurchaseDto dto); + + /** + * 更新状态 + * @param id + */ + void updateStatus(String id); + + /** + * 查询状态 + * @param purchaseDto + * @return + */ + List selectStatus(PurchaseDto purchaseDto); } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/BpmPurchaseBindService.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/BpmPurchaseBindService.java index 0928157..2f18b72 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/BpmPurchaseBindService.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/BpmPurchaseBindService.java @@ -1,12 +1,11 @@ package com.bonus.purchase.service; -import com.bonus.common.core.web.domain.AjaxResult; -import com.bonus.purchase.domain.BpmPurchaseInfo; import com.bonus.purchase.dto.PurchaseBindDto; import com.bonus.purchase.dto.PurchaseDto; import com.bonus.purchase.vo.PurchaseAcceptVo; import com.bonus.purchase.vo.PurchaseVo; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -20,4 +19,12 @@ public interface BpmPurchaseBindService { List getDetailsList(PurchaseDto record); int addBind(PurchaseBindDto bindDto); + + /** + * 下载二维码 + * @param purchaseDto + * @param response + * @return + */ + void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto); } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseAcceptServiceImpl.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseAcceptServiceImpl.java index 7463542..74b4e67 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseAcceptServiceImpl.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseAcceptServiceImpl.java @@ -104,16 +104,7 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService { PurchaseAcceptVo::getId, Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList()) )); - for (Map.Entry> entry : groupedByIdStatus.entrySet()) { - Integer id = entry.getKey(); - List statusList1 = entry.getValue(); - if (statusList1.contains(Constants.PENDING_BINDING)) { - //如果详情状态包含待绑定,则外部任务状态为待绑定 - result += bpmTaskMapper.updateStatusById(Constants.PENDING_BINDING, id); - } else if (!statusList1.contains(Constants.PENDING_BINDING) && statusList1.contains(Constants.PENDING_INVENTORY)) { - result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id); - } - } + result = getResult(result, groupedByIdStatus); if (result > 0) { return AjaxResult.success("批量验收合格成功"); } @@ -147,16 +138,7 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService { PurchaseAcceptVo::getId, Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList()) )); - for (Map.Entry> entry : groupedByIdStatus.entrySet()) { - Integer id = entry.getKey(); - List statusList1 = entry.getValue(); - if (statusList1.contains(Constants.PENDING_BINDING)) { - //如果详情状态包含待绑定,则外部任务状态为待绑定 - result += bpmTaskMapper.updateStatusById(Constants.PENDING_BINDING, id); - } else if (!statusList1.contains(Constants.PENDING_BINDING) && statusList1.contains(Constants.PENDING_INVENTORY)) { - result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id); - } - } + result = getResult(result, groupedByIdStatus); if (result > 0) { return AjaxResult.success("批量验收合格成功"); } @@ -167,6 +149,26 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService { return AjaxResult.error("操作失败"); } + /** + * 批量合格方法抽取 + * @param result + * @param groupedByIdStatus + * @return + */ + private int getResult(int result, Map> groupedByIdStatus) { + for (Map.Entry> entry : groupedByIdStatus.entrySet()) { + Integer id = entry.getKey(); + List statusList1 = entry.getValue(); + if (statusList1.contains(Constants.PENDING_BINDING)) { + //如果详情状态包含待绑定,则外部任务状态为待绑定 + result += bpmTaskMapper.updateStatusById(Constants.PENDING_BINDING, id); + } else if (!statusList1.contains(Constants.PENDING_BINDING) && statusList1.contains(Constants.PENDING_INVENTORY)) { + result += bpmTaskMapper.updateStatusById(Constants.PENDING_INVENTORY, id); + } + } + return result; + } + /** * 二级批量审批不合格 * @param purchaseDto @@ -190,17 +192,7 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService { PurchaseAcceptVo::getId, Collectors.mapping(PurchaseAcceptVo::getStatus, Collectors.toList()) )); - for (Map.Entry> entry : groupedByIdStatus.entrySet()) { - Integer id = entry.getKey(); - List statusList1 = entry.getValue(); - if (!statusList1.contains(Constants.PENDING_ACCEPTANCE) && statusList1.contains(Constants.PURCHASE_ACCEPTED) - && !statusList1.contains(Constants.PURCHASE_NO_PASSED)) { - //如果不包含47和49,则更新任务状态为48 全部通过 - result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_ACCEPTED, id); - } else if (!statusList1.contains(Constants.PENDING_ACCEPTANCE) && statusList1.contains(Constants.PURCHASE_NO_PASSED)) { - result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_NO_PASSED, id); - } - } + result = getAnInt(result, groupedByIdStatus); if (result > 0) { return AjaxResult.success("操作成功"); } @@ -210,4 +202,25 @@ public class BpmPurchaseAcceptServiceImpl implements BpmPurchaseAcceptService { } return AjaxResult.error("操作失败"); } + + /** + * 批量不合格方法抽取 + * @param result + * @param groupedByIdStatus + * @return + */ + private int getAnInt(int result, Map> groupedByIdStatus) { + for (Map.Entry> entry : groupedByIdStatus.entrySet()) { + Integer id = entry.getKey(); + List statusList1 = entry.getValue(); + if (!statusList1.contains(Constants.PENDING_ACCEPTANCE) && statusList1.contains(Constants.PURCHASE_ACCEPTED) + && !statusList1.contains(Constants.PURCHASE_NO_PASSED)) { + //如果不包含47和49,则更新任务状态为48 全部通过 + result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_ACCEPTED, id); + } else if (!statusList1.contains(Constants.PENDING_ACCEPTANCE) && statusList1.contains(Constants.PURCHASE_NO_PASSED)) { + result += bpmTaskMapper.updateStatusById(Constants.PURCHASE_NO_PASSED, id); + } + } + return result; + } } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseBindServiceImpl.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseBindServiceImpl.java index bf297ee..127ddfa 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseBindServiceImpl.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/service/impl/BpmPurchaseBindServiceImpl.java @@ -1,25 +1,32 @@ package com.bonus.purchase.service.impl; import com.alibaba.nacos.common.utils.CollectionUtils; -import com.bonus.common.core.web.domain.AjaxResult; -import com.bonus.purchase.domain.BpmPurchaseInfo; +import com.bonus.common.core.utils.DateTimeHelper; import com.bonus.purchase.dto.PurchaseBindDto; import com.bonus.purchase.dto.PurchaseDto; import com.bonus.purchase.mapper.BpmPurchaseAcceptMapper; import com.bonus.purchase.mapper.BpmPurchaseBindMapper; -import com.bonus.purchase.service.BpmPurchaseAcceptService; import com.bonus.purchase.service.BpmPurchaseBindService; -import com.bonus.purchase.utils.Constants; +import com.bonus.purchase.utils.QrCodeUtils; import com.bonus.purchase.vo.PurchaseAcceptVo; import com.bonus.purchase.vo.PurchaseVo; +import com.google.zxing.WriterException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @Author bonus @@ -31,6 +38,9 @@ public class BpmPurchaseBindServiceImpl implements BpmPurchaseBindService { @Resource private BpmPurchaseBindMapper mapper; + @Resource + private BpmPurchaseAcceptMapper acceptMapper; + @Override public List selectManageList(PurchaseDto purchaseDto) { @@ -58,4 +68,144 @@ public class BpmPurchaseBindServiceImpl implements BpmPurchaseBindService { return res; } + + /** + * 二维码下载 + * @param purchaseDto + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void downloadQrCode(HttpServletResponse response, PurchaseDto purchaseDto) { + //生成二维码 + if (purchaseDto.getId() != null) { + isDownLoad(purchaseDto); + String genMonth = DateTimeHelper.getNowMonth(); + //根据月份查找code + List codeList = mapper.select(genMonth); + int num = 0; + if (CollectionUtils.isNotEmpty(codeList)) { + PurchaseBindDto purchaseBindDto = codeList.get(0); + num = Integer.parseInt(purchaseBindDto.getMaCode().split("-")[1]); + } + List details = acceptMapper.getDetails(purchaseDto); + try { + Path downloadDir = Paths.get("qr_codes"); + Files.createDirectories(downloadDir); + ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); + if (CollectionUtils.isNotEmpty(details)) { + for (int i = 0; i < details.size(); i++) { + String materialModel = details.get(i).getMaterialModel(); + String materialName = details.get(i).getMaterialName(); + Integer typeId = details.get(i).getTypeId(); + Integer checkNum = details.get(i).getCheckNum(); + getString(purchaseDto, genMonth, num, downloadDir, zos, materialModel, materialName, typeId, checkNum); + num = num + checkNum; + } + zos.flush(); + zos.close(); + } + } catch (WriterException | IOException e) { + e.printStackTrace(); + } + }else if (purchaseDto.getPurchaseId() != null) { + isDownLoad(purchaseDto); + String genMonth = DateTimeHelper.getNowMonth(); + //根据月份查找code + List codeList = mapper.select(genMonth); + int num = 0; + if (CollectionUtils.isNotEmpty(codeList)) { + PurchaseBindDto purchaseBindDto = codeList.get(0); + num = Integer.parseInt(purchaseBindDto.getMaCode().split("-")[1]); + } + List details = acceptMapper.getDetails(purchaseDto); + try { + Path downloadDir = Paths.get("qr_codes"); + Files.createDirectories(downloadDir); + ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); + if(CollectionUtils.isNotEmpty(details)) { + String materialModel = details.get(0).getMaterialModel(); + String materialName = details.get(0).getMaterialName(); + Integer typeId = details.get(0).getTypeId(); + Integer checkNum = details.get(0).getCheckNum(); + purchaseDto.setId(details.get(0).getTaskId()); + getString(purchaseDto, genMonth, num, downloadDir, zos, materialModel, materialName, typeId, checkNum); + zos.flush(); + zos.close(); + } + } catch (WriterException | IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 方法抽取 + * @param purchaseDto + * @param genMonth + * @param num + * @param downloadDir + * @param zos + * @param materialModel + * @param materialName + * @param typeId + * @param checkNum + * @throws WriterException + * @throws IOException + */ + private void getString(PurchaseDto purchaseDto, String genMonth, int num, Path downloadDir, ZipOutputStream zos, String materialModel, String materialName, Integer typeId, Integer checkNum) throws WriterException, IOException { + for (int j = 1; j <= checkNum / 1000; j++) { + genMonth = genMonth.replace("-", ""); + String code = genMonth + "-" + String.format("%5d", num + j).replace(" ", "0"); + // 新购管理-二维码打印-新增 + String qrUrl = "D://files/" + "images" + "/" + code + ".jpg"; + String Path = "[" + materialModel + "-" + materialName + "]" + code + ".jpg"; + String baseText = "QR Code " + j; + BufferedImage qrCodeImage = QrCodeUtils.generateQRCodeImage(baseText, 300, 300); + java.nio.file.Path filePath = downloadDir.resolve(Path); + QrCodeUtils.saveQRCodeImage(qrCodeImage, filePath); + PurchaseDto dto = PurchaseDto.builder().id(purchaseDto.getId()).typeId(typeId).qrCode(code).qrUrl(qrUrl).build(); + mapper.insert(dto); + //修改任务表的是否下载状态 + mapper.updateStatus(purchaseDto.getId()); + extracted(zos, materialModel, materialName, code, qrUrl); + } + } + + /** + * 是否下载方法抽取 + * @param purchaseDto + */ + private void isDownLoad(PurchaseDto purchaseDto) { + List statusList =mapper.selectStatus(purchaseDto); + if (CollectionUtils.isNotEmpty(statusList) && statusList.contains(1)) { + throw new RuntimeException("该采购单二维码已生成,无法再次生成!"); + } + } + + /** + * 二维码下载方法抽取 + * @param zos + * @param materialModel + * @param materialName + * @param code + * @param qrUrl + * @throws IOException + */ + private void extracted(ZipOutputStream zos, String materialModel, String materialName, String code, String qrUrl) throws IOException { + // 判断路径是否存在 + File imageFile = new File(qrUrl); + if (!imageFile.exists()) { + return; + } + zos.setLevel(0); + zos.putNextEntry(new ZipEntry("[" + materialModel + "-" + materialName + "]" + code + ".jpg")); + InputStream fis = new FileInputStream(imageFile); + byte[] buffer = new byte[1024]; + int r = 0; + while ((r = fis.read(buffer)) != -1) { + zos.write(buffer, 0, r); + } + fis.close(); + } } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/utils/QrCodeUtils.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/utils/QrCodeUtils.java new file mode 100644 index 0000000..e1e2682 --- /dev/null +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/utils/QrCodeUtils.java @@ -0,0 +1,110 @@ +package com.bonus.purchase.utils; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * 二维码生成,保存,压缩包工具类 + * @Author ma_sh + * @create 2024/8/23 11:37 + */ +public class QrCodeUtils { + + /** + * 生成二维码图片 + * @param text 二维码内容 + * @param width 图片宽度 + * @param height 图片高度 + * @return 生成的二维码图片 + * @throws WriterException 如果二维码生成失败 + */ + public static BufferedImage generateQRCodeImage(String text, int width, int height) throws WriterException { + QRCodeWriter qrCodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); + return MatrixToImageWriter.toBufferedImage(bitMatrix); + } + + /** + * 将二维码图片保存到文件 + * @param qrCodeImage 二维码图片 + * @param filePath 文件路径 + * @throws IOException 如果保存文件失败 + */ + public static void saveQRCodeImage(BufferedImage qrCodeImage, Path filePath) throws IOException { + File outputFile = filePath.toFile(); + ImageIO.write(qrCodeImage, "jpg", outputFile); + } + + /** + * 压缩目录中的图片到ZIP文件 + * @param sourceDir 源目录 + * @param zipFilePath ZIP文件路径 + * @throws IOException 如果压缩过程失败 + */ + public static void zipImages(Path sourceDir, Path zipFilePath) throws IOException { + try (FileOutputStream fos = new FileOutputStream(zipFilePath.toFile()); + ZipArchiveOutputStream zos = new ZipArchiveOutputStream(fos)) { + + Files.walk(sourceDir) + .filter(Files::isRegularFile) + .forEach(file -> { + try { + ZipArchiveEntry zipEntry = new ZipArchiveEntry(file.toFile(), sourceDir.relativize(file).toString()); + zos.putArchiveEntry(zipEntry); + Files.copy(file, zos); + zos.closeArchiveEntry(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + } + + /*public static void main(String[] args) { + try { + Path downloadDir = Paths.get("qr_codes"); + Files.createDirectories(downloadDir); + + int width = 300; + int height = 300; + String baseText = "QR Code "; + + // 生成二维码 + for (int i = 1; i <= 2; i++) { + String text = baseText + i; + BufferedImage qrCodeImage = QRCodeUtils.generateQRCodeImage(text, width, height); + Path filePath = downloadDir.resolve("QRCode_" + i + ".jpg"); + QRCodeUtils.saveQRCodeImage(qrCodeImage, filePath); + System.out.println("Generated: " + filePath); + } + + // 压缩二维码图片 + Path zipFilePath = Paths.get("qr_codes.zip"); + zipImages(downloadDir, zipFilePath); + System.out.println("Images zipped to: " + zipFilePath); + + // 清理 + Files.walk(downloadDir) + .map(Path::toFile) + .forEach(File::delete); + Files.deleteIfExists(downloadDir); + + } catch (WriterException | IOException e) { + e.printStackTrace(); + } + }*/ +} + diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseAcceptVo.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseAcceptVo.java index cf047a5..7662bc1 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseAcceptVo.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseAcceptVo.java @@ -25,7 +25,7 @@ public class PurchaseAcceptVo { private String materialName; @ApiModelProperty("规格型号") - private String specificationCode; + private String materialModel; @ApiModelProperty(value="单位") private String unitName; @@ -92,4 +92,13 @@ public class PurchaseAcceptVo { @ApiModelProperty(value="备注") @Excel(name = "备注") private String remark; + + @ApiModelProperty(value = "二级明细id") + private String purchaseId; + + @ApiModelProperty(value = "管理类型0是编码1计数") + private String manageType; + + @ApiModelProperty(value = "任务id") + private String taskId; } diff --git a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseVo.java b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseVo.java index 2df2866..d94d51b 100644 --- a/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseVo.java +++ b/bonus-modules/bonus-task/src/main/java/com/bonus/purchase/vo/PurchaseVo.java @@ -81,4 +81,7 @@ public class PurchaseVo { @ApiModelProperty(value="备注") @Excel(name = "备注") private String remark; + + @ApiModelProperty(value = "管理类型0是编码1计数") + private String manageType; } diff --git a/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseAcceptMapper.xml b/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseAcceptMapper.xml index 16b0836..8e58bcc 100644 --- a/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseAcceptMapper.xml +++ b/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseAcceptMapper.xml @@ -40,7 +40,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND ( bt.`code` LIKE CONCAT('%',#{keyWord},'%') OR GROUP_CONCAT( mt.`name` ) LIKE CONCAT('%',#{keyWord},'%') - OR bp.tax_rate = #{keyWord} OR su.nick_name LIKE CONCAT('%',#{keyWord},'%') OR bt.remark LIKE CONCAT('%',#{keyWord},'%') ) @@ -57,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -125,4 +163,28 @@ AND bp.task_id = #{taskId,jdbcType=INTEGER} + + diff --git a/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseStorageMapper.xml b/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseStorageMapper.xml index ca10b84..1515586 100644 --- a/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseStorageMapper.xml +++ b/bonus-modules/bonus-task/src/main/resources/mapper/BpmPurchaseStorageMapper.xml @@ -38,7 +38,7 @@ SUM( bp.purchase_num ) AS purchaseNum, SUM( bp.purchase_price ) AS purchasePrice, SUM( bp.notax_price ) AS notaxPrice, - bt.creator AS createBy, + su.nick_name AS createBy, bt.create_time AS createTime, bt.`status` AS STATUS, sda.dict_label AS statusName, @@ -48,17 +48,17 @@ LEFT JOIN bpm_task bt ON bp.task_id = bt.id LEFT JOIN ma_type mt ON bp.type_id = mt.id LEFT JOIN sys_dict_data sda ON sda.dict_code = bt.`status` + LEFT JOIN sys_user su ON bt.creator = su.user_id WHERE bp.is_active = '1' - AND bt.arrival_time BETWEEN #{startTime} AND #{endTime} + AND ( bt.`code` LIKE CONCAT('%',#{keyWord},'%') OR mt1.`name` LIKE CONCAT('%',#{keyWord},'%') - OR bp.tax_rate = #{keyWord} - OR bt.creator LIKE CONCAT('%',#{keyWord},'%') + OR su.nick_name LIKE CONCAT('%',#{keyWord},'%') OR bt.remark LIKE CONCAT('%',#{keyWord},'%') ) @@ -79,11 +79,12 @@ sda.dict_label AS unitName, bp.purchase_price AS purchasePrice, bp.notax_price AS notaxPrice, - bp.purchase_num AS purchaseNum, + bp.bind_num AS purchaseNum, bs.`name` AS supplierName, bp.product_date AS productDate, bp.`status` AS STATUS, - sda1.dict_label AS statusName + sda1.dict_label AS statusName, + mt.manage_type AS manageType FROM bpm_purchase_info bp LEFT JOIN bpm_task bt ON bp.task_id = bt.id @@ -93,18 +94,18 @@ LEFT JOIN bm_supplier bs ON bp.supplier_id = bs.id LEFT JOIN sys_dict_data sda1 ON sda1.dict_code = bp.`status` WHERE - bp.is_acvtive = '1' + bp.is_active = '1' - AND ( - mt1.id = #{typeId} - OR mt.id = #{typeId} - ) + AND mt.id = #{typeId} AND bs.id = #{supplierId} - AND bp.product_date = #{productDate} + + + + AND bp.task_id = #{id}