优化
This commit is contained in:
@ -74,7 +74,7 @@ public interface UserService {
|
||||
* @param roleIds 角色ids
|
||||
* @return 用户
|
||||
*/
|
||||
List<UserDTO> selectUsersByRoleIds(List<Long> roleIds);
|
||||
List<UserDTO> selectUsersByRoleIds(List<Long> roleIds,Long projectId);
|
||||
|
||||
/**
|
||||
* 通过部门ID查询用户
|
||||
|
@ -133,10 +133,8 @@ public class BusMrpBaseController extends BaseController {
|
||||
* 获取剩余量
|
||||
*/
|
||||
@GetMapping("/remaining")
|
||||
public R<Integer> remaining(Long suppliespriceId) {
|
||||
BigDecimal remaining = busMrpBaseService.remaining(suppliespriceId);
|
||||
BusBillofquantities byId = busBillofquantitiesService.getById(suppliespriceId);
|
||||
return R.ok(byId.getQuantity().subtract(remaining).intValue());
|
||||
public R<BigDecimal> remaining(Long suppliespriceId,Long mrpBaseId) {
|
||||
return R.ok(busMrpBaseService.remaining(suppliespriceId,mrpBaseId));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.dromara.cailiaoshebei.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
@ -43,6 +44,11 @@ public class BusMaterialbatchdemandplanVo implements Serializable {
|
||||
@ExcelProperty(value = "批次ID")
|
||||
private String batchId;
|
||||
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String batchNumber;
|
||||
|
||||
/**
|
||||
* 基础信息ID
|
||||
*/
|
||||
@ -125,4 +131,9 @@ public class BusMaterialbatchdemandplanVo implements Serializable {
|
||||
*/
|
||||
private String qs;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private BigDecimal remaining;
|
||||
|
||||
}
|
||||
|
@ -87,5 +87,5 @@ public interface IBusMrpBaseService extends IService<BusMrpBase>{
|
||||
/**
|
||||
* 获取物资已有数量
|
||||
*/
|
||||
BigDecimal remaining(Long suppliespriceId);
|
||||
BigDecimal remaining(Long suppliespriceId,Long mrpBaseId);
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
|
||||
private final IBusBillofquantitiesService busBillofquantitiesService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询物资-批次需求计划基础信息
|
||||
*
|
||||
@ -77,6 +78,10 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
BusMaterialbatchdemandplanBo planBo = new BusMaterialbatchdemandplanBo();
|
||||
planBo.setMrpBaseId(id);
|
||||
List<BusMaterialbatchdemandplanVo> voList = planservice.queryList(planBo);
|
||||
for (BusMaterialbatchdemandplanVo vo : voList) {
|
||||
BigDecimal remaining = remaining(vo.getSuppliespriceId(), id);
|
||||
vo.setRemaining(remaining);
|
||||
}
|
||||
busMrpVo.setMrpBaseBo(busMrpBaseVo);
|
||||
busMrpVo.setPlanList(voList);
|
||||
|
||||
@ -266,20 +271,22 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
|
||||
|
||||
@Override
|
||||
public BigDecimal remaining(Long suppliespriceId) {
|
||||
|
||||
public BigDecimal remaining(Long suppliespriceId,Long mrpBaseId) {
|
||||
BusBillofquantities byId = busBillofquantitiesService.getById(suppliespriceId);
|
||||
// 获取数据库中已有的数量
|
||||
List<BusMaterialbatchdemandplan> existingList = planservice.list(
|
||||
Wrappers.lambdaQuery(BusMaterialbatchdemandplan.class)
|
||||
.eq(BusMaterialbatchdemandplan::getSuppliespriceId, suppliespriceId) // 排除当前批次
|
||||
.eq(BusMaterialbatchdemandplan::getSuppliespriceId, suppliespriceId)
|
||||
.ne(mrpBaseId!=null,BusMaterialbatchdemandplan::getMrpBaseId, mrpBaseId)// 排除当前批次
|
||||
);
|
||||
if(CollectionUtil.isEmpty(existingList)){
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
return existingList.stream()
|
||||
BigDecimal reduce = existingList.stream()
|
||||
.map(BusMaterialbatchdemandplan::getDemandQuantity)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
return byId.getQuantity().subtract(reduce);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -107,4 +107,6 @@ public class BusDrawingreviewReceiptsController extends BaseController {
|
||||
return toAjax(busDrawingreviewReceiptsService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -159,4 +159,9 @@ public class BusDrawingreviewReceipts extends BaseEntity {
|
||||
private String finalState;
|
||||
|
||||
|
||||
private Long approveId;
|
||||
|
||||
private String approve;
|
||||
|
||||
|
||||
}
|
||||
|
@ -151,4 +151,8 @@ public class BusDrawingreviewReceiptsBo extends BaseEntity {
|
||||
private String finalState;
|
||||
|
||||
|
||||
private Long approveId;
|
||||
|
||||
private String approve;
|
||||
|
||||
}
|
||||
|
@ -429,6 +429,11 @@ public class DesVolumeFileServiceImpl extends ServiceImpl<DesVolumeFileMapper, D
|
||||
}
|
||||
desVolumeFile.setAuditStatus(processEvent.getStatus());
|
||||
if (processEvent.getStatus().equals("finish")) {
|
||||
//修改目录状态
|
||||
volumeCatalogService.update(Wrappers.<DesVolumeCatalog>lambdaUpdate()
|
||||
.set(DesVolumeCatalog::getDesignState, "1")
|
||||
.eq(DesVolumeCatalog::getDesign, desVolumeFile.getVolumeCatalogId())
|
||||
);
|
||||
//异步处理二维码
|
||||
self.addQRCodeToPDF(desVolumeFile.getId(), false)
|
||||
.thenAccept(result -> log.info("图纸[{}-{} ]添加二维码成功", desVolumeFile.getFileName(), desVolumeFile.getId()))
|
||||
|
@ -429,6 +429,7 @@ public class MatMaterialReceiveServiceImpl extends ServiceImpl<MatMaterialReceiv
|
||||
String orderingUnit = req.getOrderingUnit();
|
||||
String supplierUnit = req.getSupplierUnit();
|
||||
String storageType = req.getStorageType();
|
||||
lqw.orderByDesc(MatMaterialReceive::getCreateTime);
|
||||
lqw.like(StringUtils.isNotBlank(projectName), MatMaterialReceive::getProjectName, projectName);
|
||||
lqw.like(StringUtils.isNotBlank(materialName), MatMaterialReceive::getMaterialName, materialName);
|
||||
lqw.like(StringUtils.isNotBlank(contractName), MatMaterialReceive::getContractName, contractName);
|
||||
|
@ -31,4 +31,7 @@ public class SysUserRole {
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
|
||||
private Long projectId;
|
||||
|
||||
}
|
||||
|
@ -845,14 +845,16 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
* @return 用户
|
||||
*/
|
||||
@Override
|
||||
public List<UserDTO> selectUsersByRoleIds(List<Long> roleIds) {
|
||||
public List<UserDTO> selectUsersByRoleIds(List<Long> roleIds,Long projectId) {
|
||||
if (CollUtil.isEmpty(roleIds)) {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
// 通过角色ID获取用户角色信息
|
||||
List<SysUserRole> userRoles = userRoleMapper.selectList(
|
||||
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
|
||||
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds)
|
||||
.eq(projectId!=null,SysUserRole::getProjectId, projectId)
|
||||
);
|
||||
|
||||
// 获取用户ID列表
|
||||
Set<Long> userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId);
|
||||
|
@ -1,4 +0,0 @@
|
||||
package org.dromara.workflow.filter;
|
||||
|
||||
public class RoleCandidateExcludeFilter {
|
||||
}
|
@ -1,21 +1,27 @@
|
||||
package org.dromara.workflow.listener;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||
import org.dromara.warm.flow.core.entity.Definition;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.warm.flow.core.entity.Node;
|
||||
import org.dromara.warm.flow.core.entity.Task;
|
||||
import org.dromara.warm.flow.core.listener.GlobalListener;
|
||||
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
||||
import org.dromara.warm.flow.core.service.InsService;
|
||||
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
||||
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.constant.FlowConstant;
|
||||
@ -24,12 +30,12 @@ import org.dromara.workflow.domain.bo.FlowCopyBo;
|
||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||
import org.dromara.workflow.service.IFlwCommonService;
|
||||
import org.dromara.workflow.service.IFlwInstanceService;
|
||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 全局任务办理监听
|
||||
@ -47,6 +53,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
||||
private final IFlwCommonService flwCommonService;
|
||||
private final InsService insService;
|
||||
private final IFlwTaskAssigneeService flwTaskAssigneeService;
|
||||
|
||||
/**
|
||||
* 创建监听器,任务创建时执行
|
||||
@ -55,9 +62,46 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
*/
|
||||
@Override
|
||||
public void create(ListenerVariable listenerVariable) {
|
||||
log.info("全局创建监听器开始执行......");
|
||||
|
||||
// 获取相关变量
|
||||
// List<Task> nextTasks = listenerVariable.getNextTasks();
|
||||
// Definition definition = listenerVariable.getDefinition();
|
||||
// Map<String, Object> variable = listenerVariable.getVariable();
|
||||
//
|
||||
// for (Task flowTask : nextTasks) {
|
||||
// String nodeCode = flowTask.getNodeCode();
|
||||
//
|
||||
//
|
||||
// // 查询节点信息
|
||||
// FlowNode byNodeCode = flwTaskService.getByNodeCode(nodeCode, definition.getId());
|
||||
//
|
||||
// // 获取原来的办理人信息
|
||||
// List<String> originalPermissionList = flowTask.getPermissionList();
|
||||
// log.info("节点 {} 原来的办理人信息: {}", nodeCode, originalPermissionList);
|
||||
// String permissionFlag = byNodeCode.getPermissionFlag();
|
||||
// try {
|
||||
// if(permissionFlag.contains("role")){
|
||||
// permissionFlag = permissionFlag.replace("@@", ",");
|
||||
//
|
||||
// String flowCode = definition.getFlowCode();
|
||||
// String projectId = flowCode.split("_")[0];
|
||||
//
|
||||
// List<UserDTO> userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId));
|
||||
// variable.put("userList", userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
||||
// flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
||||
// }
|
||||
//
|
||||
// }catch (Exception e) {
|
||||
// log.error("设置失败: {}", e.getMessage());
|
||||
// }
|
||||
// }
|
||||
|
||||
log.info("全局创建监听器执行结束......");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 开始监听器,任务开始办理时执行
|
||||
*
|
||||
@ -65,6 +109,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
*/
|
||||
@Override
|
||||
public void start(ListenerVariable listenerVariable) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,6 +137,27 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
if (flowTask.getNodeCode().equals(applyNodeCode)) {
|
||||
flowTask.setPermissionList(List.of(instance.getCreateBy()));
|
||||
}
|
||||
// String nodeCode = flowTask.getNodeCode();
|
||||
// // 查询节点信息
|
||||
// FlowNode byNodeCode = flwTaskService.getByNodeCode(nodeCode, definition.getId());
|
||||
// // 获取原来的办理人信息
|
||||
// List<String> originalPermissionList = flowTask.getPermissionList();
|
||||
// log.info("节点 {} 原来的办理人信息: {}", nodeCode, originalPermissionList);
|
||||
// String permissionFlag = byNodeCode.getPermissionFlag();
|
||||
// try {
|
||||
// if (permissionFlag.contains("role")) {
|
||||
// permissionFlag = permissionFlag.replace("@@", ",");
|
||||
//
|
||||
// String flowCode = definition.getFlowCode();
|
||||
// String projectId = flowCode.split("_")[0];
|
||||
//
|
||||
// List<UserDTO> userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId));
|
||||
//
|
||||
// flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList()));
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// log.error("设置失败: {}", e.getMessage());
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,6 +201,12 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
if (ObjectUtil.isNull(flowParams)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//给处理人发消息重新统计数据
|
||||
|
||||
if (task != null) {
|
||||
flwCommonService.sendCountMessage(task.getId());
|
||||
}
|
||||
// 只有办理或者退回的时候才执行消息通知和抄送
|
||||
if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|
||||
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
|
||||
|
@ -29,6 +29,11 @@ public interface IFlwCommonService {
|
||||
*/
|
||||
void sendMessage(String flowName,String flowCode, Long instId, List<String> messageType, String message);
|
||||
|
||||
/**
|
||||
* 发送统计消息
|
||||
*/
|
||||
void sendCountMessage(Long taskId);
|
||||
|
||||
/**
|
||||
* 发送抄送消息
|
||||
*/
|
||||
|
@ -19,6 +19,6 @@ public interface IFlwTaskAssigneeService {
|
||||
* @param storageIds 多个存储标识符字符串(逗号分隔)
|
||||
* @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过
|
||||
*/
|
||||
List<UserDTO> fetchUsersByStorageIds(String storageIds);
|
||||
List<UserDTO> fetchUsersByStorageIds(String storageIds,Long projectId);
|
||||
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
|
||||
IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
||||
String processedBys = CollUtil.join(permissionList, StringUtils.SEPARATOR);
|
||||
// 根据 processedBy 前缀判断处理人类型,分别获取用户列表
|
||||
List<UserDTO> users = taskAssigneeService.fetchUsersByStorageIds(processedBys);
|
||||
List<UserDTO> users = taskAssigneeService.fetchUsersByStorageIds(processedBys,null);
|
||||
|
||||
return StreamUtils.toList(users, userDTO -> String.valueOf(userDTO.getUserId()));
|
||||
}
|
||||
@ -127,6 +127,25 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
|
||||
}
|
||||
|
||||
|
||||
public void sendCountMessage(Long taskId) {
|
||||
IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
|
||||
List<UserDTO> userList = new ArrayList<>();
|
||||
List<UserDTO> users = flwTaskService.currentTaskAllUser(taskId);
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
userList.addAll(users);
|
||||
}
|
||||
SseMessageDto dto = new SseMessageDto();
|
||||
SeeMessageContentDto contentDto = new SeeMessageContentDto();
|
||||
contentDto.setType("count");
|
||||
contentDto.setContent("统计");
|
||||
dto.setMessage(JSONUtil.toJsonStr(contentDto));
|
||||
dto.setIsRecord(false);
|
||||
dto.setUserIds(users.stream().map(UserDTO::getUserId).collect(Collectors.toList()));
|
||||
SseMessageUtils.publishMessage(dto);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void sendCopyMessage(String flowName, String flowCode, List<FlowCopyBo> flowCopyList) {
|
||||
if(CollUtil.isEmpty(flowCopyList)){
|
||||
|
@ -170,7 +170,7 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
|
||||
* @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过
|
||||
*/
|
||||
@Override
|
||||
public List<UserDTO> fetchUsersByStorageIds(String storageIds) {
|
||||
public List<UserDTO> fetchUsersByStorageIds(String storageIds,Long projectId) {
|
||||
if (StringUtils.isEmpty(storageIds)) {
|
||||
return List.of();
|
||||
}
|
||||
@ -182,7 +182,7 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
|
||||
}
|
||||
}
|
||||
return typeIdMap.entrySet().stream()
|
||||
.flatMap(entry -> this.getUsersByType(entry.getKey(), entry.getValue()).stream())
|
||||
.flatMap(entry -> this.getUsersByType(entry.getKey(), entry.getValue(),projectId).stream())
|
||||
.distinct()
|
||||
.toList();
|
||||
}
|
||||
@ -197,10 +197,10 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
|
||||
* 如果类型为部门(DEPT),则通过部门ID列表查询;
|
||||
* 如果类型为岗位(POST)或无法识别的类型,则返回空列表
|
||||
*/
|
||||
private List<UserDTO> getUsersByType(TaskAssigneeEnum type, List<Long> ids) {
|
||||
private List<UserDTO> getUsersByType(TaskAssigneeEnum type, List<Long> ids,Long projectId) {
|
||||
return switch (type) {
|
||||
case USER -> userService.selectListByIds(ids);
|
||||
case ROLE -> userService.selectUsersByRoleIds(ids);
|
||||
case ROLE -> userService.selectUsersByRoleIds(ids,projectId);
|
||||
case DEPT -> userService.selectUsersByDeptIds(ids);
|
||||
case POST -> userService.selectUsersByPostIds(ids);
|
||||
};
|
||||
|
@ -537,7 +537,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
for (FlowNode flowNode : nextFlowNodes) {
|
||||
buildNextTaskList.stream().filter(t -> t.getNodeCode().equals(flowNode.getNodeCode())).findFirst().ifPresent(t -> {
|
||||
if (CollUtil.isNotEmpty(t.getPermissionList())) {
|
||||
List<UserDTO> users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()));
|
||||
List<UserDTO> users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()),null);
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
flowNode.setPermissionFlag(StreamUtils.join(users, e -> String.valueOf(e.getUserId())));
|
||||
}
|
||||
|
Reference in New Issue
Block a user