diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java index 92eccbfa..268ceb6e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java @@ -88,24 +88,26 @@ public class BusMaterialbatchdemandplanServiceImpl extends ServiceImpl queryPageList(BusMaterialbatchdemandplanBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - BusBiddingPlanBo bo1 = new BusBiddingPlanBo(); - bo1.setProjectId(bo.getProjectId()); - bo1.setType("2"); - bo1.setWinningBidderId(bo.getSupplierId()); - List busBiddingPlanVos = busBiddingPlanService.getBillofquantitiesLimitListVo(bo1); - if (busBiddingPlanVos == null || busBiddingPlanVos.isEmpty()) { - throw new ServiceException("该供应商暂无材料"); - } - Set hashSet = new HashSet<>(); - busBiddingPlanVos.stream().forEach(vo -> { - hashSet.add(vo.getName()+"+"+vo.getSpecification()); - }); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - List list = result.getRecords().stream().filter(vo -> { - String key = vo.getName() + "+" + vo.getSpecification(); // 拼接字符串(需与 Set 中格式一致) - return hashSet.contains(key); // 仅保留 Set 中存在的数据 - }).toList(); - result.setRecords(list); + if (bo.getSupplierId()!=null){ + BusBiddingPlanBo bo1 = new BusBiddingPlanBo(); + bo1.setProjectId(bo.getProjectId()); + bo1.setType("2"); + bo1.setWinningBidderId(bo.getSupplierId()); + List busBiddingPlanVos = busBiddingPlanService.getBillofquantitiesLimitListVo(bo1); + if (busBiddingPlanVos == null || busBiddingPlanVos.isEmpty()) { + throw new ServiceException("该供应商暂无材料"); + } + Set hashSet = new HashSet<>(); + busBiddingPlanVos.stream().forEach(vo -> { + hashSet.add(vo.getName()+"+"+vo.getSpecification()); + }); + List list = result.getRecords().stream().filter(vo -> { + String key = vo.getName() + "+" + vo.getSpecification(); // 拼接字符串(需与 Set 中格式一致) + return hashSet.contains(key); // 仅保留 Set 中存在的数据 + }).toList(); + result.setRecords(list); + } return TableDataInfo.build(result); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java index 8e16e9d8..b286ff18 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/common/utils/PdfBoxQrCodeGenerator.java @@ -224,6 +224,21 @@ public class PdfBoxQrCodeGenerator { // 二维码大小比例(页面宽高中较小值的20%) private static final float QR_SIZE_RATIO = 0.2f; + // 二维码大小比例(页面宽高中较小值的20%) + private static final float QR_SIZE = 60.0f; + + // 竖坐标 + private static final float V_QR_X = 232.0f; + + // 竖坐标 + private static final float V_QR_Y = 679.5f; + + // 横坐标 + private static final float H_QR_X = 1116.5f; + + // 横坐标 + private static final float H_QR_Y = 34.0f; + public static ByteArrayOutputStream addQRCodeToPDFOnAllPages(String srcPdf, byte[] qrCodeBytes, boolean isChangeFile) throws IOException { @@ -256,6 +271,10 @@ public class PdfBoxQrCodeGenerator { int numberOfPages = pdfDoc.getNumberOfPages(); for (int pageNum = 1; pageNum <= numberOfPages; pageNum++) { + if (pageNum == 1 && isChangeFile) { + continue; + } + PdfPage page = pdfDoc.getPage(pageNum); // 获取页面的所有边界框信息 @@ -266,25 +285,33 @@ public class PdfBoxQrCodeGenerator { Rectangle visibleArea = (cropBox != null) ? cropBox : mediaBox; // 计算页面宽高中较小的值 - float minDimension = Math.min(visibleArea.getWidth(), visibleArea.getHeight()); + // float minDimension = Math.min(visibleArea.getWidth(), visibleArea.getHeight()); // 动态计算二维码大小(页面宽高中较小值的20%) - float qrSize = minDimension * QR_SIZE_RATIO; + // float qrSize = minDimension * QR_SIZE_RATIO; // 输出页面尺寸信息 - System.out.println("页面 " + pageNum + " 尺寸: " + visibleArea.getWidth() + "x" + visibleArea.getHeight()); - System.out.println("页面 " + pageNum + " 二维码大小 (点): " + qrSize); + // System.out.println("页面 " + pageNum + " 尺寸: " + visibleArea.getWidth() + "x" + visibleArea.getHeight()); + // System.out.println("页面 " + pageNum + " 二维码大小 (点): " + qrSize); // 计算左上角的位置(PDF坐标系:原点在左下角) - float qrX = visibleArea.getLeft() + MARGIN; - float qrY = visibleArea.getTop() - qrSize - MARGIN; + // float qrX = visibleArea.getLeft() + MARGIN; + // float qrY = visibleArea.getTop() - qrSize - MARGIN; // 打印二维码位置信息 - System.out.println("页面 " + pageNum + " 左上角二维码位置: x=" + qrX + ", y=" + qrY); - + // System.out.println("页面 " + pageNum + " 左上角二维码位置: x=" + qrX + ", y=" + qrY); + float qrX; + float qrY; + if (visibleArea.getWidth() > visibleArea.getHeight()) { + qrX = H_QR_X; + qrY = H_QR_Y; + } else { + qrX = V_QR_X; + qrY = V_QR_Y; + } try { // 使用Canvas API添加左上角二维码 - addQRCodeWithCanvas(pdfDoc, page, qrCodeBytes, qrX, qrY, qrSize); + addQRCodeWithCanvas(pdfDoc, page, qrCodeBytes, qrX, qrY, QR_SIZE); } catch (Exception e) { System.err.println("在页面 " + pageNum + " 添加二维码时出错: " + e.getMessage()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index fd72aaa3..3a0b0504 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -16,6 +16,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.common.websocket.dto.WebSocketMessageDto; +import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.gps.domain.GpsManmachine; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.domain.vo.GpsProjectVo; @@ -39,6 +41,7 @@ import org.dromara.gps.service.IGpsEquipmentService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.Duration; import java.util.*; import java.util.stream.Collectors; @@ -212,8 +215,8 @@ public class GpsEquipmentServiceImpl extends ServiceImpl list = busBillofquantitiesLimitListService.queryList(bo); - ExcelUtil.exportExcel(list, "限价一览", BusBillofquantitiesLimitListVo.class, response); + if (LimitListTypeEnum.SUB_COMPANY.getCode().equals(bo.getType())){ + List list = busBillofquantitiesLimitListService.queryList(bo); + ExcelUtil.exportExcel(list, "限价一览", BusBillofquantitiesLimitListVo.class, response); + }else { + List list = busBillofquantitiesLimitListService.queryVoList(bo); + ExcelUtil.exportExcel(list, "限价一览", BusBillofquantitiesLimitListWuZiVo.class, response); + } } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java index 29a54e97..b1dab8d2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/BusBillofquantitiesLimitList.java @@ -99,6 +99,15 @@ public class BusBillofquantitiesLimitList extends BaseEntity { * 总价 */ // private BigDecimal price; + /** + * 供应单位 + */ + private String supplier; + + /** + * 合同编号 + */ + private String contractNumber; /** * 备注 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java index 5c22d147..2e3ea111 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/bo/BusBillofquantitiesLimitListBo.java @@ -95,6 +95,16 @@ public class BusBillofquantitiesLimitListBo extends BaseEntity { */ private BigDecimal taxRate; + /** + * 供应单位 + */ + private String supplier; + + /** + * 合同编号 + */ + private String contractNumber; + /** * 总价 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBiddingPlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBiddingPlanVo.java index ebac3a96..d91b561d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBiddingPlanVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBiddingPlanVo.java @@ -135,5 +135,10 @@ public class BusBiddingPlanVo implements Serializable { */ private Long winningBidderId; + /** + * 招标文件数量 + */ + private Long annexCount; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java index 6d34236d..de0fe078 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListVo.java @@ -135,6 +135,16 @@ public class BusBillofquantitiesLimitListVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 供应单位 + */ + private String supplier; + + /** + * 合同编号 + */ + private String contractNumber; + /** * 子节点 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListWuZiVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListWuZiVo.java new file mode 100644 index 00000000..3b2c777b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/domain/vo/BusBillofquantitiesLimitListWuZiVo.java @@ -0,0 +1,153 @@ +package org.dromara.tender.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.tender.domain.BusBillofquantitiesLimitList; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + + +/** + * 限价一览视图对象 bus_billofquantities_limit_list + * + * @author Lion Li + * @date 2025-08-19 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusBillofquantitiesLimitList.class) +public class BusBillofquantitiesLimitListWuZiVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 版本号 + */ + @ExcelProperty(value = "版本号") + private String versions; + + /** + * 表名 + */ + @ExcelProperty(value = "表名") + private String sheet; + + /** + * 子ID + */ + @ExcelProperty(value = "子ID") + private String sid; + + /** + * 父ID + */ + @ExcelProperty(value = "父ID") + private String pid; + + /** + * 编号 + */ + @ExcelProperty(value = "编号") + private String num; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String type; + + /** + * 名称 + */ + @ColumnWidth(50) + @ExcelProperty(value = "名称") + private String name; + + + /** + * 规格 + */ + @ExcelProperty(value = "规格") + private String specification; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal quantity; + + /** + * 使用数量 + */ + private BigDecimal useQuantity; + + /** + * 单价 + */ + @ExcelProperty(value = "单价") + private BigDecimal unitPrice; + + /** + * 税率 + */ + @ExcelProperty(value = "税率(%)") + private BigDecimal taxRate; + + /** + * 总价 + */ +// @ExcelProperty(value = "总价") + private BigDecimal price; + + /** + * 供应单位 + */ + @ExcelProperty(value = "供应单位") + private String supplier; + + /** + * 合同编号 + */ + @ExcelProperty(value = "合同编号") + private String contractNumber; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + + + /** + * 子节点 + */ + private List children = new ArrayList<>(); + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanAnnexService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanAnnexService.java index a57379f9..200a5aa4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanAnnexService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanAnnexService.java @@ -67,4 +67,6 @@ public interface IBusBiddingPlanAnnexService extends IService ids, Boolean isValid); + + Long getCount(Long id); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java index 68a12fd4..3881fafa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListWuZiVo; import org.springframework.web.multipart.MultipartFile; import java.util.Collection; @@ -109,4 +110,6 @@ public interface IBusBillofquantitiesLimitListService extends IService queryVoByIds(List ids); + + List queryVoList(BusBillofquantitiesLimitListBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanAnnexServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanAnnexServiceImpl.java index 5651de93..d0a7bb73 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanAnnexServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanAnnexServiceImpl.java @@ -130,4 +130,9 @@ public class BusBiddingPlanAnnexServiceImpl extends ServiceImpl 0; } + + @Override + public Long getCount(Long id) { + return baseMapper.selectCount(new LambdaQueryWrapper().eq(BusBiddingPlanAnnex::getBiddingPlanId,id)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java index 14421e31..6feda2d1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java @@ -90,6 +90,7 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl queryPageList(BusBiddingPlanBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(item -> item.setAnnexCount(busBiddingPlanAnnexService.getCount(item.getId()))); return TableDataInfo.build(result); } @@ -195,6 +196,9 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl0){ + throw new ServiceException("合同金额不能超过总价"); + } } } // validEntityBeforeSave(update); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java index 7426804d..c1f31454 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java @@ -22,10 +22,12 @@ import org.dromara.tender.domain.bo.BusBillofquantitiesLimitListBo; import org.dromara.tender.domain.bo.TenderAllVersionNumbersReq; import org.dromara.tender.domain.vo.BusBLimitListVersionsVo; import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo; +import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListWuZiVo; import org.dromara.tender.enums.LimitListTypeEnum; import org.dromara.tender.mapper.BusBillofquantitiesLimitListMapper; import org.dromara.tender.service.IBusBLimitListVersionsService; import org.dromara.tender.service.IBusBillofquantitiesLimitListService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -193,7 +195,6 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl busBillofquantities = new ArrayList(); @@ -270,6 +271,10 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl queryVoList(BusBillofquantitiesLimitListBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List listVoList = baseMapper.selectVoList(lqw); + List wuZiVoArrayList = new ArrayList<>(); + listVoList.forEach(item -> { + BusBillofquantitiesLimitListWuZiVo vo = new BusBillofquantitiesLimitListWuZiVo(); + BeanUtils.copyProperties(item, vo); + wuZiVoArrayList.add(vo); + }); + return wuZiVoArrayList; + } + /** * 递归构建树形结构 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml index be001c58..dbab0013 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml @@ -97,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bbll.quantity as quantity, bbll.unit_price as unitPrice, bbll.tax_rate as taxRate, + bbll.supplier as supplier, + bbll.contract_number as contractNumber, bbll.remark as remark, SUM(btpll.num) AS useQuantity FROM @@ -138,6 +140,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bbll.quantity as quantity, bbll.tax_rate as taxRate, bbll.unit_price as unitPrice, + bbll.supplier as supplier, + bbll.contract_number as contractNumber, bbll.remark as remark, SUM(btpll.num) AS useQuantity FROM diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 542a82e5..95ba89a9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -205,7 +205,7 @@ public class WorkflowGlobalListener implements GlobalListener { //给处理人发消息重新统计数据 if (task != null) { - flwCommonService.sendCountMessage(task.getId()); + flwCommonService.sendCountMessage(task); } // 只有办理或者退回的时候才执行消息通知和抄送 if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus()) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java index 879dd871..e9df5cf6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java @@ -1,5 +1,6 @@ package org.dromara.workflow.service; +import org.dromara.warm.flow.core.entity.Task; import org.dromara.workflow.domain.bo.FlowCopyBo; import java.util.List; @@ -32,7 +33,7 @@ public interface IFlwCommonService { /** * 发送统计消息 */ - void sendCountMessage(Long taskId); + void sendCountMessage(Task task); /** * 发送抄送消息 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java index db50bccb..d313e088 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java @@ -15,21 +15,30 @@ import org.dromara.common.sse.config.SseProperties; import org.dromara.common.sse.dto.SeeMessageContentDto; import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.enums.SkipType; +import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.NodeService; +import org.dromara.warm.flow.core.service.UserService; +import org.dromara.warm.flow.orm.entity.FlowDefinition; +import org.dromara.warm.flow.orm.entity.FlowNode; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.domain.bo.FlowCopyBo; import org.dromara.workflow.service.IFlwCommonService; +import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwTaskAssigneeService; import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @@ -59,9 +68,9 @@ public class FlwCommonServiceImpl implements IFlwCommonService { return List.of(); } IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class); - String processedBys = CollUtil.join(permissionList, StringUtils.SEPARATOR); + String processedBys = CollUtil.join(permissionList, StringUtils.SEPARATOR); // 根据 processedBy 前缀判断处理人类型,分别获取用户列表 - List users = taskAssigneeService.fetchUsersByStorageIds(processedBys,null); + List users = taskAssigneeService.fetchUsersByStorageIds(processedBys, null); return StreamUtils.toList(users, userDTO -> String.valueOf(userDTO.getUserId())); } @@ -75,7 +84,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService { * @param message 消息内容,为空则发送默认配置的消息内容 */ @Override - public void sendMessage(String flowName,String flowCode, Long instId, List messageType, String message) { + public void sendMessage(String flowName, String flowCode, Long instId, List messageType, String message) { IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); List userList = new ArrayList<>(); List list = flwTaskService.selectByInstId(instId); @@ -126,11 +135,28 @@ public class FlwCommonServiceImpl implements IFlwCommonService { } } - - public void sendCountMessage(Long taskId) { + @Override + public void sendCountMessage(Task task) { IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class); + IFlwTaskAssigneeService flwTaskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class); + + DefService defService = FlowEngine.defService(); + Definition definition = defService.getById(task.getDefinitionId()); + + FlowNode byNodeCode = flwTaskService.getByNodeCode(task.getNodeCode(), task.getDefinitionId()); + String permissionFlag = byNodeCode.getPermissionFlag(); + if(permissionFlag == null){ + return; + } + + permissionFlag = permissionFlag.replace("@@", ","); + String flowCode = definition.getFlowCode(); + String projectId = flowCode.split("_")[0]; + List users = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId)); + + List userList = new ArrayList<>(); - List users = flwTaskService.currentTaskAllUser(taskId); + if (CollUtil.isNotEmpty(users)) { userList.addAll(users); } @@ -145,10 +171,9 @@ public class FlwCommonServiceImpl implements IFlwCommonService { } - @Override public void sendCopyMessage(String flowName, String flowCode, List flowCopyList) { - if(CollUtil.isEmpty(flowCopyList)){ + if (CollUtil.isEmpty(flowCopyList)) { return; } SseMessageDto dto = new SseMessageDto();