diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/exception/ServiceException.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/exception/ServiceException.java new file mode 100644 index 000000000..5053f5a47 --- /dev/null +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/exception/ServiceException.java @@ -0,0 +1,7 @@ +package com.bsd.pjcloud.common.core.exception; + +public class ServiceException extends RuntimeException { + public ServiceException(String message) { + super(message); + } +} diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java index 52b8fd41a..abe05869b 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgDdEntity.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import com.bsd.pjcloud.common.core.util.TenantTable; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Map; /** * 采购订单 @@ -175,4 +176,20 @@ public class SmErpCgDdEntity extends Model { @Schema(description="经办人名称") @TableField(exist = false) public String handlerUserName; + + @Schema(description="任务id") + @TableField(exist = false) + public String taskId; + + @Schema(description="实例id") + @TableField(exist = false) + private String flowId; + + @Schema(description="参数") + @TableField(exist = false) + private Map paramMap; + + @Schema(description="节点id") + @TableField(exist = false) + private String nodeId; } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java index 94643ad9f..3353ce2fc 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpCgPlanEntity.java @@ -163,5 +163,9 @@ public class SmErpCgPlanEntity extends Model { @TableField(exist = false) private Map paramMap; + @Schema(description="节点id") + @TableField(exist = false) + private String nodeId; + } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java index e3d58d0c3..c2413c10a 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import com.bsd.pjcloud.common.core.util.TenantTable; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Map; /** * 出入库记录表 @@ -185,4 +186,20 @@ public class SmErpInventoryRecordsEntity extends Model paramMap; + + @Schema(description="节点id") + @TableField(exist = false) + private String nodeId; } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java index 2d75c4e69..975e93150 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java @@ -1,10 +1,12 @@ package com.bsd.pjcloud.supermarket.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.exception.ServiceException; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -12,6 +14,8 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.flow.task.api.feign.RemoteFlowApiFlowService; import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.flow.task.dto.ProcessInstanceParamDto; +import com.bsd.pjcloud.flow.task.dto.TaskDto; +import com.bsd.pjcloud.flow.task.dto.TaskQueryParamDto; import com.bsd.pjcloud.flow.task.entity.Process; import com.bsd.pjcloud.supermarket.constant.SupermarketFlowConstant; import com.bsd.pjcloud.supermarket.dto.cgdd.ErpCgDDEditDTO; @@ -62,16 +66,21 @@ public class SmErpCgDdServiceImpl extends ServiceImpl items = erpCgDDSaveDTO.getItems(); List cgPlanItemEntities = BeanUtils.toBean(items, SmErpCgDdItemEntity.class); R processR = remoteFlowApiFlowService.getProcessByBusinessKey(SupermarketFlowConstant.SUPERMARKET_CGDD_FLOW); + if (!processR.isOk() || processR.getData() == null) { + throw new ServiceException("流程配置获取失败: " + processR.getMsg()); + } String flowId = processR.getData().getFlowId(); ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); processInstanceParamDto.setFlowId(flowId); R stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto); + if (!stringR.isOk() || stringR.getData() == null) { + throw new ServiceException("流程实例启动失败: " + stringR.getMsg()); + } String processInstanceId = stringR.getData(); smErpCgDdEntity.setProcessInstanceId(processInstanceId); smErpCgDdEntity.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode()); @@ -232,6 +241,7 @@ public class SmErpCgDdServiceImpl extends ServiceImpl userMap = remoteUserService.getUserMap(userIds).getData(); + List processInstanceIds= records.stream().map(SmErpCgDdEntity::getProcessInstanceId).filter(Objects::nonNull).collect(Collectors.toList()); LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpCgDdItemEntity::getHId,planIds); @@ -252,12 +262,34 @@ public class SmErpCgDdServiceImpl extends ServiceImpl> pageR = remoteFlowApiFlowService.queryMineTask(taskQueryParamDto); + Page data = pageR.getData(); + // 直接通过条件判断初始化 final 变量 + final Map processInstanceIdMap = (data != null && !ObjectUtil.isEmpty(data.getRecords())) + ? data.getRecords().stream() + .collect(Collectors.toMap(TaskDto::getProcessInstanceId, taskDto -> taskDto)) + : Collections.emptyMap(); + // 设置商品名称到主表实体 records.forEach(plan -> { SysUser sysUser = userMap.getOrDefault(plan.getHandlerUserId(), new SysUser()); plan.setHandlerUserName(sysUser.getUsername()); List names = planGoodsMap.getOrDefault(plan.getId(), Collections.emptyList()); plan.setProductName(String.join(", ", names)); + if (!processInstanceIdMap.isEmpty()) { + TaskDto taskDto = processInstanceIdMap.get(plan.getProcessInstanceId()); + if (taskDto != null) { + plan.setTaskId(taskDto.getTaskId()); + plan.setFlowId(taskDto.getFlowId()); + plan.setParamMap(taskDto.getParamMap()); + plan.setNodeId(taskDto.getNodeId()); + } + } }); return pageData; diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java index aebcaf6df..98a44591f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgPlanServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; +import com.bsd.pjcloud.common.core.exception.ServiceException; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -65,15 +66,19 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl processR = remoteFlowApiFlowService.getProcessByBusinessKey(SupermarketFlowConstant.SUPERMARKET_BHSQ_FLOW); + if (!processR.isOk() || processR.getData() == null) { + throw new ServiceException("流程配置获取失败: " + processR.getMsg()); + } String flowId = processR.getData().getFlowId(); ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); processInstanceParamDto.setFlowId(flowId); R stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto); + if (!stringR.isOk() || stringR.getData() == null) { + throw new ServiceException("流程实例启动失败: " + stringR.getMsg()); + } String processInstanceId = stringR.getData(); smErpCgPlanEntity.setProcessInstanceId(processInstanceId); smErpCgPlanEntity.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode()); @@ -289,6 +294,7 @@ public class SmErpCgPlanServiceImpl extends ServiceImpl items = inventoryRecordSaveDTO.getItems(); //计算主表总金额 @@ -80,6 +83,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl processR = remoteFlowApiFlowService.getProcessByBusinessKey(processKey); + if (!processR.isOk() || processR.getData() == null) { + throw new ServiceException("流程配置获取失败: " + processR.getMsg()); + } String flowId = processR.getData().getFlowId(); ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); processInstanceParamDto.setFlowId(flowId); @@ -87,6 +93,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto); + if (!stringR.isOk() || stringR.getData() == null) { + throw new ServiceException("流程实例启动失败: " + stringR.getMsg()); + } String processInstanceId = stringR.getData(); smErpCgDdEntity.setProcessInstanceId(processInstanceId); smErpCgDdEntity.setCheckStatus(TaskCheckStatusEnum.PADDING.getCode()); @@ -168,7 +177,7 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl userMap = remoteUserService.getUserMap(userIds).getData(); - + List processInstanceIds= records.stream().map(SmErpInventoryRecordsEntity::getProcessInstanceId).filter(Objects::nonNull).collect(Collectors.toList()); LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); smErpCgPlanItemEntityLambdaQueryWrapper.in(SmErpInventoryRecordsItemEntity::getInventoryId,planIds); @@ -191,6 +200,18 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl> pageR = remoteFlowApiFlowService.queryMineTask(taskQueryParamDto); + Page data = pageR.getData(); + + final Map processInstanceIdMap = (data != null && !ObjectUtil.isEmpty(data.getRecords())) + ? data.getRecords().stream() + .collect(Collectors.toMap(TaskDto::getProcessInstanceId, taskDto -> taskDto)) + : Collections.emptyMap(); // 设置商品名称到主表实体 records.forEach(plan -> { @@ -204,6 +225,15 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl