From 3d57edf374036f476ead41a70791fc63fb09585a Mon Sep 17 00:00:00 2001 From: zt Date: Wed, 27 Aug 2025 16:43:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusMrpBaseController.java | 11 ++++ .../service/IBusMrpBaseService.java | 6 ++ .../service/impl/BusMrpBaseServiceImpl.java | 18 ++++++ .../impl/BusPurchaseDocServiceImpl.java | 59 ++++++++++++++++++- .../DesVolumeFileViewerVo.java | 2 +- .../filter/RoleCandidateExcludeFilter.java | 4 ++ 6 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/filter/RoleCandidateExcludeFilter.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java index 191eafaa..2ff36d2c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java @@ -1,5 +1,6 @@ package org.dromara.cailiaoshebei.controller; +import java.math.BigDecimal; import java.util.List; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -128,6 +129,16 @@ public class BusMrpBaseController extends BaseController { return toAjax(busMrpBaseService.batchAddOrUpdate(dto)); } + /** + * 获取剩余量 + */ + @GetMapping("/remaining") + public R remaining(Long suppliespriceId) { + BigDecimal remaining = busMrpBaseService.remaining(suppliespriceId); + BusBillofquantities byId = busBillofquantitiesService.getById(suppliespriceId); + return R.ok(byId.getQuantity().subtract(remaining).intValue()); + } + /** * 导入物资需求批次计划 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java index e3754f63..a70d5fc4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java @@ -12,6 +12,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.bind.annotation.RequestBody; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; @@ -82,4 +83,9 @@ public interface IBusMrpBaseService extends IService{ * 导入物资需求批次计划 */ Boolean importData(BusMrpExportDto dto); + + /** + * 获取物资已有数量 + */ + BigDecimal remaining(Long suppliespriceId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java index 3e019345..53df7145 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java @@ -264,6 +264,24 @@ public class BusMrpBaseServiceImpl extends ServiceImpl existingList = planservice.list( + Wrappers.lambdaQuery(BusMaterialbatchdemandplan.class) + .eq(BusMaterialbatchdemandplan::getSuppliespriceId, suppliespriceId) // 排除当前批次 + ); + if(CollectionUtil.isEmpty(existingList)){ + return BigDecimal.ZERO; + } + + return existingList.stream() + .map(BusMaterialbatchdemandplan::getDemandQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusPurchaseDocServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusPurchaseDocServiceImpl.java index e5a7fba7..11af841a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusPurchaseDocServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusPurchaseDocServiceImpl.java @@ -59,6 +59,8 @@ import java.io.*; import java.math.BigDecimal; import java.net.FileNameMap; import java.net.URLConnection; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -350,10 +352,12 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl items = new ArrayList<>(); + List planDocAssociationList = planDocAssociationService.lambdaQuery() + .eq(BusPlanDocAssociation::getDocId, purchaseDoc.getId()) + .list(); + if (CollUtil.isNotEmpty(planDocAssociationList)) { + List planIds = planDocAssociationList.stream() + .map(BusPlanDocAssociation::getPlanId) + .toList(); + items = materialbatchdemandplanService.listByIds(planIds); + } + BusPurchaseDocWordDto data = this.getReplacementDto(purchaseDoc, items); + + // 生成文件并直接写入响应流 + try (InputStream is = getClass().getClassLoader().getResourceAsStream(constant.PURCHASE_DOC_TEMPLATE_PATH)) { + if (is == null) { + throw new ServiceException("模板文件不存在"); + } + + // 配置模板渲染策略 + LoopRowTableRenderPolicy hackLoopTableRenderPolicy = new LoopRowTableRenderPolicy(); + Configure config = Configure.builder() + .bind("items", hackLoopTableRenderPolicy) + .build(); + + // 编译模板并渲染数据 + XWPFTemplate template = XWPFTemplate.compile(is, config); + template.render(data); + + // 设置响应头信息 + String fileName = constant.getBusPurchaseDocFileName(purchaseDoc); + response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())); + response.setCharacterEncoding("UTF-8"); + + // 直接通过模板的write方法写入响应流 + try (OutputStream os = response.getOutputStream()) { + template.write(os); + os.flush(); + } + template.close(); + } catch (IOException e) { + log.error("生成Word文件失败", e); + throw new OssException("生成Word文件失败,错误信息: " + e.getMessage()); + } } + /** * 根据主键查询详情PDF地址 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefileviewer/DesVolumeFileViewerVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefileviewer/DesVolumeFileViewerVo.java index 40e85c40..edddcd0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefileviewer/DesVolumeFileViewerVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/volumefileviewer/DesVolumeFileViewerVo.java @@ -40,7 +40,7 @@ public class DesVolumeFileViewerVo implements Serializable { /** * 用户ID */ - @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "userId") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "userId") private String userName; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/filter/RoleCandidateExcludeFilter.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/filter/RoleCandidateExcludeFilter.java new file mode 100644 index 00000000..78768d32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/filter/RoleCandidateExcludeFilter.java @@ -0,0 +1,4 @@ +package org.dromara.workflow.filter; + +public class RoleCandidateExcludeFilter { +}