diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmBusinessTripApplyBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmBusinessTripApplyBo.java index f70e4ea0..590196ea 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmBusinessTripApplyBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmBusinessTripApplyBo.java @@ -162,5 +162,9 @@ public class CrmBusinessTripApplyBo extends BaseEntity { */ private RemoteFlowInstanceBizExt bizExt; + /** + * 导出时指定的ID列表(逗号分隔) + */ + private String tripIds; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmBusinessTripApplyServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmBusinessTripApplyServiceImpl.java index 243b341a..aa0d64b9 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmBusinessTripApplyServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmBusinessTripApplyServiceImpl.java @@ -107,6 +107,9 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer .selectAs(ErpProjectInfo::getProjectCode, CrmBusinessTripApplyVo::getProjectCode) .leftJoin(ErpProjectInfo.class, ErpProjectInfo::getProjectId, CrmBusinessTripApply::getProjectId) .eq(CrmBusinessTripApply::getDelFlag, "0") + // 按指定ID列表过滤(用于导出选中数据) + .in(StringUtils.isNotBlank(bo.getTripIds()), CrmBusinessTripApply::getTripId, + StringUtils.isNotBlank(bo.getTripIds()) ? List.of(bo.getTripIds().split(",")) : null) .eq(StringUtils.isNotBlank(bo.getApplyCode()), CrmBusinessTripApply::getApplyCode, bo.getApplyCode()) .eq(StringUtils.isNotBlank(bo.getTripType()), CrmBusinessTripApply::getTripType, bo.getTripType()) .eq(bo.getApplicantId() != null, CrmBusinessTripApply::getApplicantId, bo.getApplicantId()) @@ -116,8 +119,8 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer .like(StringUtils.isNotBlank(bo.getDeptName()), CrmBusinessTripApply::getDeptName, bo.getDeptName()) .eq(StringUtils.isNotBlank(bo.getTripLocation()), CrmBusinessTripApply::getTripLocation, bo.getTripLocation()) - .eq(bo.getStartTime() != null, CrmBusinessTripApply::getStartTime, bo.getStartTime()) - .eq(bo.getEndTime() != null, CrmBusinessTripApply::getEndTime, bo.getEndTime()) + .ge(bo.getStartTime() != null, CrmBusinessTripApply::getStartTime, bo.getStartTime()) + .le(bo.getEndTime() != null, CrmBusinessTripApply::getEndTime, bo.getEndTime()) .eq(bo.getDurationDays() != null, CrmBusinessTripApply::getDurationDays, bo.getDurationDays()) .eq(StringUtils.isNotBlank(bo.getTripReason()), CrmBusinessTripApply::getTripReason, bo.getTripReason()) .eq(bo.getProjectId() != null, CrmBusinessTripApply::getProjectId, bo.getProjectId()) @@ -135,7 +138,8 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer .eq(StringUtils.isNotBlank(bo.getFeedback()), CrmBusinessTripApply::getFeedback, bo.getFeedback()) .eq(StringUtils.isNotBlank(bo.getTripStatus()), CrmBusinessTripApply::getTripStatus, bo.getTripStatus()) .eq(StringUtils.isNotBlank(bo.getFlowStatus()), CrmBusinessTripApply::getFlowStatus, bo.getFlowStatus()) - .eq(StringUtils.isNotBlank(bo.getOssId()), CrmBusinessTripApply::getOssId, bo.getOssId()); + .eq(StringUtils.isNotBlank(bo.getOssId()), CrmBusinessTripApply::getOssId, bo.getOssId()) + .orderByDesc(CrmBusinessTripApply::getCreateTime); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpAfterSalesBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpAfterSalesBo.java index 565caa9f..938bc571 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpAfterSalesBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpAfterSalesBo.java @@ -106,7 +106,8 @@ public class ErpAfterSalesBo extends BaseEntity { /** * 客户干系人ID(关联客户联系人表) */ -// @NotBlank(message = "客户干系人ID(关联客户联系人表)不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "客户干系人ID(关联客户联系人表)不能为空", groups = { AddGroup.class, + // EditGroup.class }) private String stakeholderId; /** @@ -195,5 +196,9 @@ public class ErpAfterSalesBo extends BaseEntity { */ private RemoteFlowInstanceBizExt bizExt; + /** + * 导出时指定的ID列表(逗号分隔) + */ + private String afterSalesIds; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetInfoBo.java index 0243988e..e80912e2 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpTimesheetInfoBo.java @@ -92,6 +92,11 @@ public class ErpTimesheetInfoBo extends BaseEntity { */ private String remark; + /** + * 导出时指定的ID列表(逗号分隔) + */ + private String timesheetIds; + /** * 子表:部门工作明细 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpAfterSalesVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpAfterSalesVo.java index 84b484e5..4deebf84 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpAfterSalesVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpAfterSalesVo.java @@ -178,6 +178,11 @@ public class ErpAfterSalesVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 售后问题附件ID + */ + private String ossId; + /** * 子表数据回显 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpAfterSalesServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpAfterSalesServiceImpl.java index 86f79ab2..8d2983e5 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpAfterSalesServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpAfterSalesServiceImpl.java @@ -39,11 +39,17 @@ import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.context.event.EventListener; import org.dromara.workflow.api.event.ProcessEvent; +import org.dromara.workflow.api.event.ProcessTaskEvent; +import org.dromara.common.core.utils.StreamUtils; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; +import org.dromara.workflow.api.domain.RemoteFlowCopy; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Collections; /** * 项目售后信息Service业务层处理 @@ -64,6 +70,9 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService { @DubboReference() private RemoteCodeRuleService remoteCodeRuleService; + @DubboReference + private RemoteUserService remoteUserService; + private final IErpAfterSalesLaborCostsService laborCostsService; private final IErpAfterSalesMaterialCostsService materialCostsService; @@ -129,6 +138,10 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService { MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpAfterSales.class) .selectAll(ErpAfterSales.class) .eq(ErpAfterSales::getDelFlag, "0") + // 按指定ID列表过滤(用于导出选中数据) + .in(StringUtils.isNotBlank(bo.getAfterSalesIds()), ErpAfterSales::getAfterSalesId, + StringUtils.isNotBlank(bo.getAfterSalesIds()) ? List.of(bo.getAfterSalesIds().split(",")) + : null) .eq(StringUtils.isNotBlank(bo.getAfterSalesCode()), ErpAfterSales::getAfterSalesCode, bo.getAfterSalesCode()) .eq(StringUtils.isNotBlank(bo.getAfterSalesSubject()), ErpAfterSales::getAfterSalesSubject, @@ -161,7 +174,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService { .eq(StringUtils.isNotBlank(bo.getAfterSalesStatus()), ErpAfterSales::getAfterSalesStatus, bo.getAfterSalesStatus()) .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpAfterSales::getFlowStatus, bo.getFlowStatus()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpAfterSales::getActiveFlag, bo.getActiveFlag()); + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpAfterSales::getActiveFlag, bo.getActiveFlag()) + .orderByDesc(ErpAfterSales::getCreateTime); return lqw; } @@ -313,6 +327,7 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService { bo.setVariables(new HashMap<>()); } bo.getVariables().put("ignore", true); + RemoteStartProcess startProcess = new RemoteStartProcess(); startProcess.setBusinessId(bo.getAfterSalesId().toString()); startProcess.setFlowCode(bo.getFlowCode()); diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java index 38c82fac..7a9fe3c3 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpTimesheetInfoServiceImpl.java @@ -127,18 +127,24 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpTimesheetInfo.class) .selectAll(ErpTimesheetInfo.class) .eq(ErpTimesheetInfo::getDelFlag, "0") + // 按指定ID列表过滤(用于导出选中数据) + .in(StringUtils.isNotBlank(bo.getTimesheetIds()), ErpTimesheetInfo::getTimesheetId, + StringUtils.isNotBlank(bo.getTimesheetIds()) ? List.of(bo.getTimesheetIds().split(",")) : null) .eq(StringUtils.isNotBlank(bo.getTimesheetCode()), ErpTimesheetInfo::getTimesheetCode, bo.getTimesheetCode()) .eq(bo.getUserId() != null, ErpTimesheetInfo::getUserId, bo.getUserId()) .eq(bo.getDeptId() != null, ErpTimesheetInfo::getDeptId, bo.getDeptId()) - .eq(bo.getStartTime() != null, ErpTimesheetInfo::getStartTime, bo.getStartTime()) - .eq(bo.getEndTime() != null, ErpTimesheetInfo::getEndTime, bo.getEndTime()) + // 日期范围查询:起始时间之后 + .ge(bo.getStartTime() != null, ErpTimesheetInfo::getStartTime, bo.getStartTime()) + // 日期范围查询:结束时间之前 + .le(bo.getEndTime() != null, ErpTimesheetInfo::getEndTime, bo.getEndTime()) .eq(bo.getTotalHours() != null, ErpTimesheetInfo::getTotalHours, bo.getTotalHours()) .eq(bo.getDeptHours() != null, ErpTimesheetInfo::getDeptHours, bo.getDeptHours()) .eq(bo.getProjectHours() != null, ErpTimesheetInfo::getProjectHours, bo.getProjectHours()) .eq(StringUtils.isNotBlank(bo.getTimesheetStatus()), ErpTimesheetInfo::getTimesheetStatus, bo.getTimesheetStatus()) - .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus()); + .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus()) + .orderByDesc(ErpTimesheetInfo::getCreateTime); return lqw; } @@ -344,6 +350,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService { completeTask.setTaskId(result.getTaskId()); // 审批意见,提交时默认为 "提交申请" completeTask.setMessage("提交申请"); + // 消息类型 1=站内信 + completeTask.setMessageType(Collections.singletonList("1")); completeTask.setVariables(variables); boolean completeFlag = remoteWorkflowService.completeTask(completeTask); if (!completeFlag) {